Skip to content

Commit 8cef750

Browse files
committed
update: added all inventories
1 parent b883db6 commit 8cef750

14 files changed

Lines changed: 608 additions & 40 deletions

File tree

JozelotLobby/dependency-reduced-pom.xml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,10 @@
8080
<id>papermc-repo</id>
8181
<url>https://repo.papermc.io/repository/maven-public/</url>
8282
</repository>
83+
<repository>
84+
<id>placeholderapi</id>
85+
<url>https://repo.helpch.at/releases</url>
86+
</repository>
8387
</repositories>
8488
<dependencies>
8589
<dependency>
@@ -88,6 +92,12 @@
8892
<version>1.21.11-R0.1-SNAPSHOT</version>
8993
<scope>provided</scope>
9094
</dependency>
95+
<dependency>
96+
<groupId>me.clip</groupId>
97+
<artifactId>placeholderapi</artifactId>
98+
<version>2.12.2</version>
99+
<scope>provided</scope>
100+
</dependency>
91101
</dependencies>
92102
<properties>
93103
<java.version>22</java.version>

JozelotLobby/pom.xml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,10 @@
9797
<id>papermc-repo</id>
9898
<url>https://repo.papermc.io/repository/maven-public/</url>
9999
</repository>
100+
<repository>
101+
<id>placeholderapi</id>
102+
<url>https://repo.helpch.at/releases</url>
103+
</repository>
100104
</repositories>
101105

102106
<dependencies>
@@ -121,5 +125,11 @@
121125
<artifactId>HikariCP</artifactId>
122126
<version>5.1.0</version>
123127
</dependency>
128+
<dependency>
129+
<groupId>me.clip</groupId>
130+
<artifactId>placeholderapi</artifactId>
131+
<version>2.12.2</version>
132+
<scope>provided</scope>
133+
</dependency>
124134
</dependencies>
125135
</project>

JozelotLobby/src/main/java/de/jozelot/jozelotLobby/JozelotLobby.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package de.jozelot.jozelotLobby;
22

3+
import de.jozelot.jozelotLobby.api.placeholderapi.PlayerCount;
34
import de.jozelot.jozelotLobby.database.*;
45
import de.jozelot.jozelotLobby.ui.inventories.InventoryManager;
56
import de.jozelot.jozelotLobby.ui.items.ClickHandler;
@@ -78,6 +79,11 @@ public void onEnable() {
7879
getServer().getConsoleSender().sendMessage("§a[§JoLobby§a]§a ----------------------------------------------");
7980
getServer().getConsoleSender().sendMessage("§a[§JoLobby§a]§6 Version: §e" + getVersion());
8081
getServer().getConsoleSender().sendMessage("§a[§JoLobby§a]§a ----------------------------------------------");
82+
83+
if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) {
84+
new PlayerCount(this).register();
85+
getLogger().info("PlaceholderAPI Expansion registriert!");
86+
}
8187
}
8288

8389
@Override
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
package de.jozelot.jozelotLobby.api.placeholderapi;
2+
3+
import de.jozelot.jozelotLobby.JozelotLobby;
4+
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
5+
import org.bukkit.OfflinePlayer;
6+
import org.jetbrains.annotations.NotNull;
7+
8+
public class PlayerCount extends PlaceholderExpansion {
9+
10+
private final JozelotLobby plugin;
11+
12+
public PlayerCount(JozelotLobby plugin) {
13+
this.plugin = plugin;
14+
}
15+
16+
@Override
17+
public @NotNull String getAuthor() {
18+
return "Jozelot";
19+
}
20+
21+
@Override
22+
public @NotNull String getIdentifier() {
23+
return "network";
24+
}
25+
26+
@Override
27+
public @NotNull String getVersion() {
28+
return "1.0.0";
29+
}
30+
31+
@Override
32+
public boolean persist() {
33+
return true;
34+
}
35+
36+
@Override
37+
public String onRequest(OfflinePlayer player, @NotNull String params) {
38+
if (params.equalsIgnoreCase("players_challenge_all")) {
39+
String[] challengeServers = {"challenge-1", "challenge-2", "challenge-3"};
40+
int totalPlayers = 0;
41+
boolean anyOnline = false;
42+
43+
for (String id : challengeServers) {
44+
var state = plugin.getNetworkStateManager().getServer(id);
45+
if (state != null && state.online()) {
46+
totalPlayers += state.players();
47+
anyOnline = true;
48+
}
49+
}
50+
51+
if (!anyOnline) {
52+
return "<#f90036>0";
53+
}
54+
55+
String color = (totalPlayers > 0) ? "<#00FC00>" : "<#f90036>";
56+
return color + totalPlayers;
57+
}
58+
// Syntax: %network_players_<serverid>%
59+
if (params.startsWith("players_")) {
60+
String serverId = params.replace("players_", "");
61+
var state = plugin.getNetworkStateManager().getServer(serverId);
62+
63+
if (state == null || !state.online()) {
64+
return "<#f90036>0";
65+
}
66+
67+
String color = (state.players() > 0) ? "<#00FC00>" : "<#f90036>";
68+
return color + state.players();
69+
}
70+
71+
// Syntax: %network_status_<serverid>%
72+
if (params.startsWith("status_")) {
73+
String serverId = params.replace("status_", "");
74+
var state = plugin.getNetworkStateManager().getServer(serverId);
75+
return (state != null && state.online()) ? "Online" : "Offline";
76+
}
77+
78+
return null;
79+
}
80+
}

JozelotLobby/src/main/java/de/jozelot/jozelotLobby/player/LobbyPlayer.java

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@
77
import de.jozelot.jozelotLobby.ui.inventories.navigation.ArchivMenu;
88
import de.jozelot.jozelotLobby.ui.inventories.navigation.ChallengeMenu;
99
import de.jozelot.jozelotLobby.ui.inventories.navigation.NavigatorMenu;
10+
import de.jozelot.jozelotLobby.ui.inventories.profile.ProfileMenu;
11+
import de.jozelot.jozelotLobby.ui.inventories.profile.SecretMenu;
12+
import de.jozelot.jozelotLobby.ui.inventories.profile.SpielerinfoMenu;
13+
import de.jozelot.jozelotLobby.ui.inventories.profile.settings.SettingsMenu;
1014
import de.jozelot.jozelotLobby.ui.items.HiderState;
1115
import net.kyori.adventure.key.Key;
1216
import net.kyori.adventure.sound.Sound;
@@ -149,13 +153,13 @@ public void openInventory(InventoryType type, InventoryType parent) {
149153
Player player = getPlayer();
150154
InventoryHolder holder = type.create(plugin, player);
151155

152-
if (holder instanceof ChallengeMenu menu) {
153-
menu.setParentType(parent);
154-
} else if (holder instanceof NavigatorMenu menu) {
155-
menu.setParentType(parent);
156-
} else if (holder instanceof ArchivMenu menu) {
157-
menu.setParentType(parent);
158-
}
156+
if (holder instanceof NavigatorMenu menu) menu.setParentType(parent);
157+
else if (holder instanceof ChallengeMenu menu) menu.setParentType(parent);
158+
else if (holder instanceof ArchivMenu menu) menu.setParentType(parent);
159+
else if (holder instanceof ProfileMenu menu) menu.setParentType(parent);
160+
else if (holder instanceof SecretMenu menu) menu.setParentType(parent);
161+
else if (holder instanceof SpielerinfoMenu menu) menu.setParentType(parent);
162+
else if (holder instanceof SettingsMenu menu) menu.setParentType(parent);
159163

160164
player.openInventory(holder.getInventory());
161165
}

JozelotLobby/src/main/java/de/jozelot/jozelotLobby/ui/inventories/InventoryType.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,23 @@
44
import de.jozelot.jozelotLobby.ui.inventories.navigation.ArchivMenu;
55
import de.jozelot.jozelotLobby.ui.inventories.navigation.ChallengeMenu;
66
import de.jozelot.jozelotLobby.ui.inventories.navigation.NavigatorMenu;
7+
import de.jozelot.jozelotLobby.ui.inventories.profile.ProfileMenu;
8+
import de.jozelot.jozelotLobby.ui.inventories.profile.SecretMenu;
9+
import de.jozelot.jozelotLobby.ui.inventories.profile.SpielerinfoMenu;
10+
import de.jozelot.jozelotLobby.ui.inventories.profile.settings.SettingsMenu;
711
import org.bukkit.entity.Player;
812
import org.bukkit.inventory.InventoryHolder;
913

1014
import java.util.function.BiFunction;
1115

1216
public enum InventoryType {
1317
NAVIGATOR(NavigatorMenu::new),
14-
PROFILE(NavigatorMenu::new),
18+
PROFILE(ProfileMenu::new),
1519
CHALLENGE(ChallengeMenu::new),
16-
ARCHIV(ArchivMenu::new);
20+
ARCHIV(ArchivMenu::new),
21+
SECRETS(SecretMenu::new),
22+
SPIELERINFO(SpielerinfoMenu::new),
23+
SETTINGS(SettingsMenu::new);
1724

1825
private final BiFunction<JozelotLobby, Player, InventoryHolder> factory;
1926

JozelotLobby/src/main/java/de/jozelot/jozelotLobby/ui/inventories/navigation/NavigatorMenu.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public NavigatorMenu(JozelotLobby plugin, Player player) {
3434
this.lobbyPlayer = plugin.getLobbyPlayerManager().getPlayer(player);
3535

3636
String title = plugin.getConfig().getString("inventories.navigator.title", "Navigator");
37-
this.inventory = Bukkit.createInventory(this, 9 * 5, mm.deserialize(title));
37+
this.inventory = Bukkit.createInventory(this, 9 * 4, mm.deserialize(title));
3838

3939
fillBackGround();
4040
update();
@@ -58,7 +58,7 @@ public void fillBackGround() {
5858
meta.getPersistentDataContainer().set(HotbarItems.IS_PROTECTED, PersistentDataType.BOOLEAN, true);
5959
});
6060

61-
for (int i : new int[]{0,1,2,3,4,5,6,7,8,37,38,39,41,42,43,44}) {
61+
for (int i : new int[]{0,1,2,3,4,5,6,7,8,28,29,30,32,33,34,35}) {
6262
inventory.setItem(i, filler);
6363
}
6464

@@ -72,7 +72,7 @@ public void fillBackGround() {
7272
meta.getPersistentDataContainer().set(HotbarItems.ITEM_ID, PersistentDataType.STRING, "back_button");
7373
meta.getPersistentDataContainer().set(HotbarItems.IS_PROTECTED, PersistentDataType.BOOLEAN, true);
7474
});
75-
inventory.setItem(36, backArrow);
75+
inventory.setItem(27, backArrow);
7676

7777
// Spawn Button
7878
Material spawnMat = Material.matchMaterial(plugin.getConfig().getString("items.spawn_button.item", "MAGMA_CREAM"));
@@ -82,7 +82,7 @@ public void fillBackGround() {
8282
meta.getPersistentDataContainer().set(HotbarItems.ITEM_ID, PersistentDataType.STRING, "spawn_button");
8383
meta.getPersistentDataContainer().set(HotbarItems.IS_PROTECTED, PersistentDataType.BOOLEAN, true);
8484
});
85-
inventory.setItem(40, spawnButton);
85+
inventory.setItem(31, spawnButton);
8686
}
8787

8888
public void update() {
@@ -93,14 +93,14 @@ public void update() {
9393
setupServerItem(21, "archiv_server", new String[]{"archiv-1", "archiv-2"}, true);
9494

9595
// Among Us
96-
setupServerItem(19, "among_server", new String[]{"among-us"}, false);
96+
setupServerItem(10, "among_server", new String[]{"among-us"}, false);
9797

9898
// Duels
9999
setupServerItem(23, "duels_server", new String[]{"duels"}, false);
100100

101101
// Event
102102
String eventSrv = plugin.getConfig().getString("items.event_server.server", "");
103-
setupServerItem(25, "event_server", eventSrv.isEmpty() ? new String[0] : new String[]{eventSrv}, false);
103+
setupServerItem(16, "event_server", eventSrv.isEmpty() ? new String[0] : new String[]{eventSrv}, false);
104104
}
105105

106106
private void setupServerItem(int slot, String configKey, String[] serverIds, boolean isMulti) {
Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
package de.jozelot.jozelotLobby.ui.inventories.profile;
2+
3+
import com.destroystokyo.paper.profile.PlayerProfile;
4+
import com.destroystokyo.paper.profile.ProfileProperty;
5+
import de.jozelot.jozelotLobby.JozelotLobby;
6+
import de.jozelot.jozelotLobby.player.LobbyPlayer;
7+
import de.jozelot.jozelotLobby.ui.inventories.InventoryType;
8+
import de.jozelot.jozelotLobby.ui.items.HotbarItems;
9+
import net.kyori.adventure.text.Component;
10+
import net.kyori.adventure.text.minimessage.MiniMessage;
11+
import org.bukkit.Bukkit;
12+
import org.bukkit.Material;
13+
import org.bukkit.entity.Player;
14+
import org.bukkit.inventory.Inventory;
15+
import org.bukkit.inventory.InventoryHolder;
16+
import org.bukkit.inventory.ItemFlag;
17+
import org.bukkit.inventory.ItemStack;
18+
import org.bukkit.inventory.meta.SkullMeta;
19+
import org.bukkit.persistence.PersistentDataType;
20+
import org.bukkit.scheduler.BukkitTask;
21+
import org.jetbrains.annotations.NotNull;
22+
23+
import java.util.ArrayList;
24+
import java.util.List;
25+
import java.util.UUID;
26+
27+
public class ProfileMenu implements InventoryHolder {
28+
29+
private final Inventory inventory;
30+
private final JozelotLobby plugin;
31+
private final LobbyPlayer lobbyPlayer;
32+
private BukkitTask bukkitTask;
33+
private final MiniMessage mm = MiniMessage.miniMessage();
34+
35+
public ProfileMenu(JozelotLobby plugin, Player player) {
36+
this.plugin = plugin;
37+
this.lobbyPlayer = plugin.getLobbyPlayerManager().getPlayer(player);
38+
39+
String title = plugin.getConfig().getString("inventories.profile.title", "Profil");
40+
this.inventory = Bukkit.createInventory(this, 9 * 3, mm.deserialize(title));
41+
42+
fillBackGround();
43+
update();
44+
}
45+
46+
private InventoryType parentType = null;
47+
48+
public void setParentType(InventoryType parentType) {
49+
this.parentType = parentType;
50+
}
51+
52+
public InventoryType getParentType() {
53+
return parentType;
54+
}
55+
56+
public void fillBackGround() {
57+
ItemStack filler = new ItemStack(lobbyPlayer.getColor().getFillerMaterial());
58+
filler.editMeta(meta -> {
59+
meta.displayName(Component.empty());
60+
meta.getPersistentDataContainer().set(HotbarItems.IS_PROTECTED, PersistentDataType.BOOLEAN, true);
61+
});
62+
63+
for (int i : new int[]{0,1,2,3,4,5,6,7,8,19,20,21,22,23,24,25,26}) {
64+
inventory.setItem(i, filler);
65+
}
66+
67+
// Back Arrow
68+
ItemStack backArrow = new ItemStack(Material.PLAYER_HEAD);
69+
backArrow.editMeta(SkullMeta.class, meta -> {
70+
PlayerProfile profile = Bukkit.createProfile(UUID.randomUUID());
71+
profile.setProperty(new ProfileProperty("textures", lobbyPlayer.getColor().getBackArrow()));
72+
meta.setPlayerProfile(profile);
73+
meta.displayName(mm.deserialize(plugin.getConfig().getString("items.back_arrow.name", "<red>Zurück")));
74+
meta.getPersistentDataContainer().set(HotbarItems.ITEM_ID, PersistentDataType.STRING, "back_button");
75+
meta.getPersistentDataContainer().set(HotbarItems.IS_PROTECTED, PersistentDataType.BOOLEAN, true);
76+
});
77+
inventory.setItem(18, backArrow);
78+
}
79+
80+
public void update() {
81+
// SECRETS
82+
setupServerItem(11, "secret_menu");
83+
84+
// STATISTICS
85+
setupServerItem(13, "statistic_menu");
86+
87+
// SETTINGS
88+
setupServerItem(15, "settings_menu");
89+
}
90+
91+
private void setupServerItem(int slot, String configKey) {
92+
String path = "items." + configKey;
93+
94+
String matName = plugin.getConfig().getString(path + ".item", "BARRIER");
95+
Material mat = Material.matchMaterial(matName != null ? matName : "BARRIER");
96+
ItemStack item = new ItemStack(mat != null ? mat : Material.BARRIER);
97+
98+
item.editMeta(meta -> {
99+
100+
String name = plugin.getConfig().getString(path + ".name");
101+
meta.displayName(mm.deserialize(name != null ? name : "<red>FEHLER: Name fehlt"));
102+
103+
List<String> configLore = plugin.getConfig().getStringList(path + ".lore");
104+
List<Component> loreComponents = new ArrayList<>();
105+
for (String line : configLore) {
106+
if (line == null) continue;
107+
String replaced = line.replace("{secrets_current}", "0")
108+
.replace("{secrets_max}", "0");
109+
loreComponents.add(mm.deserialize(replaced));
110+
}
111+
meta.lore(loreComponents);
112+
113+
if (meta instanceof SkullMeta skullMeta) {
114+
String b64 = plugin.getConfig().getString(path + ".base64");
115+
if (b64 != null && !b64.isEmpty()) {
116+
PlayerProfile profile = Bukkit.createProfile(UUID.randomUUID());
117+
profile.setProperty(new ProfileProperty("textures", b64));
118+
skullMeta.setPlayerProfile(profile);
119+
}
120+
}
121+
122+
meta.getPersistentDataContainer().set(HotbarItems.IS_PROTECTED, PersistentDataType.BOOLEAN, true);
123+
meta.getPersistentDataContainer().set(HotbarItems.ITEM_ID, PersistentDataType.STRING, configKey);
124+
meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
125+
});
126+
127+
inventory.setItem(slot, item);
128+
}
129+
130+
@Override
131+
public @NotNull Inventory getInventory() {
132+
return inventory;
133+
}
134+
}

0 commit comments

Comments
 (0)