Upload folder via GUI - src
This commit is contained in:
@@ -527,13 +527,7 @@ public class NexusLobby extends JavaPlugin implements Listener {
|
|||||||
if (params.equalsIgnoreCase("build_mode")) return BuildCommand.isInBuildMode(player) ? "§aAktiv" : "§cInaktiv";
|
if (params.equalsIgnoreCase("build_mode")) return BuildCommand.isInBuildMode(player) ? "§aAktiv" : "§cInaktiv";
|
||||||
if (params.equalsIgnoreCase("silent_join")) return silentPlayers.contains(player.getUniqueId()) ? "§aEin" : "§cAus";
|
if (params.equalsIgnoreCase("silent_join")) return silentPlayers.contains(player.getUniqueId()) ? "§aEin" : "§cAus";
|
||||||
if (params.equalsIgnoreCase("parkour_top")) {
|
if (params.equalsIgnoreCase("parkour_top")) {
|
||||||
return parkourManager != null ? parkourManager.getTopTen(1) : "N/A";
|
return parkourManager != null ? parkourManager.getTopTen() : "N/A";
|
||||||
}
|
|
||||||
if (params.equalsIgnoreCase("parkour_top1")) {
|
|
||||||
return parkourManager != null ? parkourManager.getTopTen(1) : "N/A";
|
|
||||||
}
|
|
||||||
if (params.equalsIgnoreCase("parkour_top2")) {
|
|
||||||
return parkourManager != null ? parkourManager.getTopTen(2) : "N/A";
|
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,8 +31,6 @@ import java.util.Set;
|
|||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
public class GadgetModule implements Module, Listener {
|
public class GadgetModule implements Module, Listener {
|
||||||
// Speichert laufende Disco-Modus Tasks pro Spieler
|
|
||||||
private final Map<UUID, Integer> discoTasks = new HashMap<>();
|
|
||||||
|
|
||||||
private final Map<UUID, Balloon> activeBalloons = new HashMap<>();
|
private final Map<UUID, Balloon> activeBalloons = new HashMap<>();
|
||||||
private final Map<UUID, ParticleEffect> activeEffects = new HashMap<>();
|
private final Map<UUID, ParticleEffect> activeEffects = new HashMap<>();
|
||||||
@@ -56,8 +54,6 @@ public class GadgetModule implements Module, Listener {
|
|||||||
private final String FUN_TITLE = "§b§lGadgets §8- §6Lustiges";
|
private final String FUN_TITLE = "§b§lGadgets §8- §6Lustiges";
|
||||||
private final String HAT_TITLE = "§b§lGadgets §8- §aHüte & Köpfe";
|
private final String HAT_TITLE = "§b§lGadgets §8- §aHüte & Köpfe";
|
||||||
private final String PET_TITLE = "§b§lGadgets §8- §dBegleiter";
|
private final String PET_TITLE = "§b§lGadgets §8- §dBegleiter";
|
||||||
private final String PET2_TITLE = "§b§lGadgets §8- §dBegleiter §7(2)";
|
|
||||||
private final String PET3_TITLE = "§b§lGadgets §8- §dBegleiter §7(3)";
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getName() { return "Gadgets"; }
|
public String getName() { return "Gadgets"; }
|
||||||
@@ -261,70 +257,12 @@ public class GadgetModule implements Module, Listener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void openPetGUI(Player player) {
|
private void openPetGUI(Player player) {
|
||||||
Inventory gui = Bukkit.createInventory(null, 54, PET_TITLE);
|
Inventory gui = Bukkit.createInventory(null, 27, PET_TITLE);
|
||||||
fillEdges(gui);
|
fillEdges(gui);
|
||||||
// Oben: Baby-Varianten, darunter: Erwachsene
|
gui.setItem(11, createItem(Material.BONE, "§fWolf", "§7Ein treuer Begleiter"));
|
||||||
gui.setItem(10, createItem(Material.BONE, "§fBaby-Wolf", "§7Ein kleiner treuer Begleiter"));
|
gui.setItem(13, createItem(Material.CAT_SPAWN_EGG, "§6Katze", "§7Ein verschmuster Freund"));
|
||||||
gui.setItem(11, createItem(Material.BONE, "§7Baby-Ashen Wolf", "§7Ein kleiner Aschen-Wolf"));
|
gui.setItem(15, createItem(Material.PANDA_SPAWN_EGG,"§aPanda", "§7Ein gemütlicher Zeitgenosse"));
|
||||||
gui.setItem(12, createItem(Material.CAT_SPAWN_EGG, "§6Baby-Katze", "§7Ein kleiner Schmusefreund"));
|
gui.setItem(22, createItem(Material.ARROW, "§7Zurück", "§8Zum Hauptmenü"));
|
||||||
gui.setItem(13, createItem(Material.PANDA_SPAWN_EGG, "§aBaby-Panda", "§7Ein kleiner Flauschball"));
|
|
||||||
gui.setItem(14, createItem(Material.FOX_SPAWN_EGG, "§6Baby-Fuchs", "§7Ein kleiner Schlaukopf"));
|
|
||||||
gui.setItem(15, createItem(Material.FROG_SPAWN_EGG, "§aBaby-Frosch", "§7Ein kleiner Hopsfreund"));
|
|
||||||
gui.setItem(16, createItem(Material.TURTLE_SPAWN_EGG, "§2Baby-Schildkröte", "§7Ein kleiner Panzenträger"));
|
|
||||||
gui.setItem(28, createItem(Material.FOX_SPAWN_EGG, "§bBaby-Schneefuchs", "§7Ein kleiner Schnee-Fuchs"));
|
|
||||||
gui.setItem(29, createItem(Material.RABBIT_SPAWN_EGG, "§fBaby-Kaninchen", "§7Ein kleiner Flitzer"));
|
|
||||||
gui.setItem(30, createItem(Material.AXOLOTL_SPAWN_EGG,"§dBaby-Axolotl", "§7Ein kleiner Wasserfreund"));
|
|
||||||
gui.setItem(31, createItem(Material.OCELOT_SPAWN_EGG, "§6Baby-Ozelot", "§7Ein kleiner Schleicher"));
|
|
||||||
gui.setItem(32, createItem(Material.POLAR_BEAR_SPAWN_EGG, "§fBaby-Eisbär", "§7Ein kleiner Eisbär"));
|
|
||||||
gui.setItem(33, createItem(Material.BEE_SPAWN_EGG, "§eBaby-Biene", "§7Eine kleine Biene"));
|
|
||||||
gui.setItem(34, createItem(Material.CHICKEN_SPAWN_EGG,"§fKüken", "§7Ein kleines Huhn"));
|
|
||||||
// Armadillo Baby entfernt, da auf Seite 2
|
|
||||||
|
|
||||||
gui.setItem(19, createItem(Material.BONE, "§fWolf", "§7Ein treuer Begleiter"));
|
|
||||||
gui.setItem(20, createItem(Material.BONE, "§7Ashen Wolf", "§7Ein seltener Aschen-Wolf"));
|
|
||||||
gui.setItem(21, createItem(Material.CAT_SPAWN_EGG, "§6Katze", "§7Ein verschmuster Freund"));
|
|
||||||
gui.setItem(22, createItem(Material.PANDA_SPAWN_EGG, "§aPanda", "§7Ein gemütlicher Zeitgenosse"));
|
|
||||||
gui.setItem(23, createItem(Material.FOX_SPAWN_EGG, "§6Fuchs", "§7Ein schlauer Begleiter"));
|
|
||||||
gui.setItem(24, createItem(Material.FROG_SPAWN_EGG, "§aFrosch", "§7Ein echter Hopsmeister"));
|
|
||||||
gui.setItem(25, createItem(Material.TURTLE_SPAWN_EGG, "§2Schildkröte", "§7Gemütlich und gelassen"));
|
|
||||||
gui.setItem(37, createItem(Material.FOX_SPAWN_EGG, "§bSchneefuchs", "§7Ein Fuchs aus kalten Biomen"));
|
|
||||||
gui.setItem(38, createItem(Material.RABBIT_SPAWN_EGG, "§fKaninchen", "§7Ein schneller Hopper"));
|
|
||||||
gui.setItem(39, createItem(Material.AXOLOTL_SPAWN_EGG,"§dAxolotl", "§7Ein seltener Wasserfreund"));
|
|
||||||
gui.setItem(40, createItem(Material.OCELOT_SPAWN_EGG, "§6Ozelot", "§7Ein wachsamer Begleiter"));
|
|
||||||
gui.setItem(41, createItem(Material.POLAR_BEAR_SPAWN_EGG, "§fEisbär", "§7Ein starker Eisbär"));
|
|
||||||
gui.setItem(42, createItem(Material.BEE_SPAWN_EGG, "§eBiene", "§7Eine fleißige Biene"));
|
|
||||||
gui.setItem(43, createItem(Material.CHICKEN_SPAWN_EGG,"§fHuhn", "§7Ein gackerndes Huhn"));
|
|
||||||
// Armadillo Erwachsen entfernt, da auf Seite 2
|
|
||||||
|
|
||||||
gui.setItem(48, createItem(Material.ARROW, "§7Zurück", "§8Zum Hauptmenü"));
|
|
||||||
gui.setItem(50, createItem(Material.ARROW, "§7Weiter", "§8Seite 2"));
|
|
||||||
player.openInventory(gui);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void openPetGUI2(Player player) {
|
|
||||||
Inventory gui = Bukkit.createInventory(null, 54, PET2_TITLE);
|
|
||||||
fillEdges(gui);
|
|
||||||
|
|
||||||
// Seite 2: Armadillo (Baby und Erwachsen)
|
|
||||||
gui.setItem(19, createItem(Material.ARMADILLO_SPAWN_EGG, "§7Baby-Armadillo", "§7Ein kleiner Gürteltier"));
|
|
||||||
gui.setItem(28, createItem(Material.ARMADILLO_SPAWN_EGG, "§7Armadillo", "§7Ein Gürteltier"));
|
|
||||||
|
|
||||||
gui.setItem(48, createItem(Material.ARROW, "§7Zurück", "§8Seite 1"));
|
|
||||||
gui.setItem(50, createItem(Material.ARROW, "§7Weiter", "§8Seite 3"));
|
|
||||||
player.openInventory(gui);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void openPetGUI3(Player player) {
|
|
||||||
Inventory gui = Bukkit.createInventory(null, 54, PET3_TITLE);
|
|
||||||
fillEdges(gui);
|
|
||||||
|
|
||||||
// Seite 3: bisherige Seite 2 Inhalte (Papagei, Allay, Sniffer)
|
|
||||||
gui.setItem(19, createItem(Material.PARROT_SPAWN_EGG, "§cPapagei", "§7Ein bunter Begleiter"));
|
|
||||||
gui.setItem(20, createItem(Material.ALLAY_SPAWN_EGG, "§bAllay", "§7Ein magischer Helfer"));
|
|
||||||
gui.setItem(21, createItem(Material.SNIFFER_SPAWN_EGG,"§aSniffer", "§7Ein uraltes Tier"));
|
|
||||||
|
|
||||||
gui.setItem(48, createItem(Material.ARROW, "§7Zurück", "§8Seite 2"));
|
|
||||||
gui.setItem(50, createItem(Material.ARROW, "§7Hauptmenü", "§8Zum Hauptmenü"));
|
|
||||||
player.openInventory(gui);
|
player.openInventory(gui);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -357,20 +295,12 @@ public class GadgetModule implements Module, Listener {
|
|||||||
private void openFunGUI(Player player) {
|
private void openFunGUI(Player player) {
|
||||||
Inventory gui = Bukkit.createInventory(null, 27, FUN_TITLE);
|
Inventory gui = Bukkit.createInventory(null, 27, FUN_TITLE);
|
||||||
fillEdges(gui);
|
fillEdges(gui);
|
||||||
// Layout wie im Screenshot:
|
|
||||||
gui.setItem(10, createItem(Material.FISHING_ROD, "§b§lEnterhaken", "§7Zieh dich durch die Luft! §8(3s CD)"));
|
gui.setItem(10, createItem(Material.FISHING_ROD, "§b§lEnterhaken", "§7Zieh dich durch die Luft! §8(3s CD)"));
|
||||||
gui.setItem(11, createItem(Material.PACKED_ICE, "§b§lFreeze-Ray", "§7Friere andere ein! §8(10s CD)"));
|
gui.setItem(11, createItem(Material.PACKED_ICE, "§b§lFreeze-Ray", "§7Friere andere ein! §8(10s CD)"));
|
||||||
gui.setItem(12, createItem(Material.GOLDEN_HOE, "§6§lPaintball-Gun","§7Male die Lobby bunt aus!"));
|
gui.setItem(12, createItem(Material.GOLDEN_HOE, "§6§lPaintball-Gun","§7Male die Lobby bunt aus!"));
|
||||||
gui.setItem(13, createItem(Material.FEATHER, "§f§lMini-Tornado", "§7Wirbele dich herum!"));
|
|
||||||
gui.setItem(14, createItem(Material.FIRE_CHARGE, "§c§lMeteorit", "§7Lass es krachen! §8(15s CD)"));
|
gui.setItem(14, createItem(Material.FIRE_CHARGE, "§c§lMeteorit", "§7Lass es krachen! §8(15s CD)"));
|
||||||
gui.setItem(15, createItem(Material.SHIELD, "§5§lSchutzzone", "§7Halte andere auf Distanz"));
|
gui.setItem(15, createItem(Material.SHIELD, "§5§lSchutzzone", "§7Halte andere auf Distanz"));
|
||||||
gui.setItem(16, createItem(Material.EGG, "§f§lChicken-Rain","§7Gack-Gack! Hühner überall!"));
|
gui.setItem(16, createItem(Material.EGG, "§f§lChicken-Rain","§7Gack-Gack! Hühner überall!"));
|
||||||
// Slot 17 und 18 bleiben leer, TNT kommt auf Slot 23 (ganz rechts mittlere Reihe)
|
|
||||||
gui.setItem(23, createItem(Material.TNT, "§c§lFake-TNT", "§7Täusche andere mit einer harmlosen Explosion!"));
|
|
||||||
// Zeile 2
|
|
||||||
gui.setItem(19, createItem(Material.SLIME_BALL, "§a§lMob-Party", "§7Lustige Mini-Mobs tanzen um dich!"));
|
|
||||||
gui.setItem(20, createItem(Material.NOTE_BLOCK, "§d§lTanz-Emote", "§7Führe einen Tanz auf!"));
|
|
||||||
gui.setItem(21, createItem(Material.FIREWORK_ROCKET, "§c§lKonfetti-Kanone", "§7Schieße Konfetti in die Luft!"));
|
|
||||||
gui.setItem(22, createItem(Material.ARROW, "§7Zurück", "§8Zum Hauptmenü"));
|
gui.setItem(22, createItem(Material.ARROW, "§7Zurück", "§8Zum Hauptmenü"));
|
||||||
player.openInventory(gui);
|
player.openInventory(gui);
|
||||||
}
|
}
|
||||||
@@ -384,21 +314,7 @@ public class GadgetModule implements Module, Listener {
|
|||||||
ItemStack item = event.getCurrentItem();
|
ItemStack item = event.getCurrentItem();
|
||||||
if (item == null || item.getType() == Material.AIR) return;
|
if (item == null || item.getType() == Material.AIR) return;
|
||||||
|
|
||||||
if (item.getType() == Material.ARROW) {
|
if (item.getType() == Material.ARROW) { openGUI(player); return; }
|
||||||
String displayName = item.hasItemMeta() && item.getItemMeta().hasDisplayName()
|
|
||||||
? item.getItemMeta().getDisplayName() : "";
|
|
||||||
if (displayName.equals("§7Weiter")) {
|
|
||||||
if (title.equals(PET_TITLE)) { openPetGUI2(player); return; }
|
|
||||||
if (title.equals(PET2_TITLE)) { openPetGUI3(player); return; }
|
|
||||||
}
|
|
||||||
if (displayName.equals("§7Zurück")) {
|
|
||||||
if (title.equals(PET2_TITLE)) { openPetGUI(player); return; }
|
|
||||||
if (title.equals(PET3_TITLE)) { openPetGUI2(player); return; }
|
|
||||||
openGUI(player);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (displayName.equals("§7Hauptmenü")) { openGUI(player); return; }
|
|
||||||
}
|
|
||||||
|
|
||||||
if (title.equals(MAIN_TITLE)) {
|
if (title.equals(MAIN_TITLE)) {
|
||||||
if (item.getType() == Material.LEAD) openBalloonGUI(player);
|
if (item.getType() == Material.LEAD) openBalloonGUI(player);
|
||||||
@@ -416,73 +332,11 @@ public class GadgetModule implements Module, Listener {
|
|||||||
player.closeInventory();
|
player.closeInventory();
|
||||||
}
|
}
|
||||||
} else if (title.equals(PET_TITLE)) {
|
} else if (title.equals(PET_TITLE)) {
|
||||||
String displayName = item.hasItemMeta() && item.getItemMeta().hasDisplayName()
|
if (item.getType() == Material.BONE) PetManager.spawnEntityPet(player, "WOLF");
|
||||||
? item.getItemMeta().getDisplayName() : "";
|
else if (item.getType() == Material.CAT_SPAWN_EGG) PetManager.spawnEntityPet(player, "CAT");
|
||||||
boolean spawned = true;
|
else if (item.getType() == Material.PANDA_SPAWN_EGG) PetManager.spawnEntityPet(player, "PANDA");
|
||||||
if (displayName.equals("§fBaby-Wolf")) PetManager.spawnEntityPet(player, "WOLF", true);
|
player.sendMessage("§8[§6Nexus§8] §dDein Pet wurde gerufen!");
|
||||||
else if (displayName.equals("§fWolf")) PetManager.spawnEntityPet(player, "WOLF", false);
|
player.closeInventory();
|
||||||
else if (displayName.equals("§7Baby-Ashen Wolf")) PetManager.spawnEntityPet(player, "WOLF", true, "ASHEN");
|
|
||||||
else if (displayName.equals("§7Ashen Wolf")) PetManager.spawnEntityPet(player, "WOLF", false, "ASHEN");
|
|
||||||
else if (displayName.equals("§6Baby-Katze")) PetManager.spawnEntityPet(player, "CAT", true);
|
|
||||||
else if (displayName.equals("§6Katze")) PetManager.spawnEntityPet(player, "CAT", false);
|
|
||||||
else if (displayName.equals("§aBaby-Panda")) PetManager.spawnEntityPet(player, "PANDA", true);
|
|
||||||
else if (displayName.equals("§aPanda")) PetManager.spawnEntityPet(player, "PANDA", false);
|
|
||||||
else if (displayName.equals("§6Baby-Fuchs")) PetManager.spawnEntityPet(player, "FOX", true);
|
|
||||||
else if (displayName.equals("§6Fuchs")) PetManager.spawnEntityPet(player, "FOX", false);
|
|
||||||
else if (displayName.equals("§bBaby-Schneefuchs")) PetManager.spawnEntityPet(player, "FOX", true, "SNOW");
|
|
||||||
else if (displayName.equals("§bSchneefuchs")) PetManager.spawnEntityPet(player, "FOX", false, "SNOW");
|
|
||||||
else if (displayName.equals("§6Baby-Ozelot")) PetManager.spawnEntityPet(player, "OCELOT", true);
|
|
||||||
else if (displayName.equals("§6Ozelot")) PetManager.spawnEntityPet(player, "OCELOT", false);
|
|
||||||
else if (displayName.equals("§aBaby-Frosch")) PetManager.spawnEntityPet(player, "FROG", true);
|
|
||||||
else if (displayName.equals("§aFrosch")) PetManager.spawnEntityPet(player, "FROG", false);
|
|
||||||
else if (displayName.equals("§2Baby-Schildkröte")) PetManager.spawnEntityPet(player, "TURTLE", true);
|
|
||||||
else if (displayName.equals("§2Schildkröte")) PetManager.spawnEntityPet(player, "TURTLE", false);
|
|
||||||
else if (displayName.equals("§fBaby-Kaninchen")) PetManager.spawnEntityPet(player, "RABBIT", true);
|
|
||||||
else if (displayName.equals("§fKaninchen")) PetManager.spawnEntityPet(player, "RABBIT", false);
|
|
||||||
else if (displayName.equals("§dBaby-Axolotl")) PetManager.spawnEntityPet(player, "AXOLOTL", true);
|
|
||||||
else if (displayName.equals("§dAxolotl")) PetManager.spawnEntityPet(player, "AXOLOTL", false);
|
|
||||||
|
|
||||||
else if (displayName.equals("§fBaby-Eisbär")) PetManager.spawnEntityPet(player, "POLAR_BEAR", true);
|
|
||||||
else if (displayName.equals("§fEisbär")) PetManager.spawnEntityPet(player, "POLAR_BEAR", false);
|
|
||||||
else if (displayName.equals("§eBaby-Biene")) PetManager.spawnEntityPet(player, "BEE", true);
|
|
||||||
else if (displayName.equals("§eBiene")) PetManager.spawnEntityPet(player, "BEE", false);
|
|
||||||
else if (displayName.equals("§fKüken")) PetManager.spawnEntityPet(player, "CHICKEN", true);
|
|
||||||
else if (displayName.equals("§fHuhn")) PetManager.spawnEntityPet(player, "CHICKEN", false);
|
|
||||||
else if (displayName.equals("§7Baby-Armadillo")) PetManager.spawnEntityPet(player, "ARMADILLO", true);
|
|
||||||
else if (displayName.equals("§7Armadillo")) PetManager.spawnEntityPet(player, "ARMADILLO", false);
|
|
||||||
else spawned = false;
|
|
||||||
|
|
||||||
if (spawned) {
|
|
||||||
player.sendMessage("§8[§6Nexus§8] §dDein Pet wurde gerufen!");
|
|
||||||
player.closeInventory();
|
|
||||||
}
|
|
||||||
} else if (title.equals(PET2_TITLE)) {
|
|
||||||
String displayName = item.hasItemMeta() && item.getItemMeta().hasDisplayName()
|
|
||||||
? item.getItemMeta().getDisplayName() : "";
|
|
||||||
boolean spawned = true;
|
|
||||||
|
|
||||||
if (displayName.equals("§7Baby-Armadillo")) PetManager.spawnEntityPet(player, "ARMADILLO", true);
|
|
||||||
else if (displayName.equals("§7Armadillo")) PetManager.spawnEntityPet(player, "ARMADILLO", false);
|
|
||||||
else spawned = false;
|
|
||||||
|
|
||||||
if (spawned) {
|
|
||||||
player.sendMessage("§8[§6Nexus§8] §dDein Pet wurde gerufen!");
|
|
||||||
player.closeInventory();
|
|
||||||
}
|
|
||||||
} else if (title.equals(PET3_TITLE)) {
|
|
||||||
String displayName = item.hasItemMeta() && item.getItemMeta().hasDisplayName()
|
|
||||||
? item.getItemMeta().getDisplayName() : "";
|
|
||||||
boolean spawned = true;
|
|
||||||
|
|
||||||
if (displayName.equals("§cPapagei")) PetManager.spawnEntityPet(player, "PARROT", false);
|
|
||||||
else if (displayName.equals("§bAllay")) PetManager.spawnEntityPet(player, "ALLAY", false);
|
|
||||||
else if (displayName.equals("§aSniffer")) PetManager.spawnEntityPet(player, "SNIFFER", false);
|
|
||||||
else spawned = false;
|
|
||||||
|
|
||||||
if (spawned) {
|
|
||||||
player.sendMessage("§8[§6Nexus§8] §dDein Pet wurde gerufen!");
|
|
||||||
player.closeInventory();
|
|
||||||
}
|
|
||||||
} else if (title.equals(BALLOON_TITLE)) {
|
} else if (title.equals(BALLOON_TITLE)) {
|
||||||
if (item.getType().toString().endsWith("_WOOL")) {
|
if (item.getType().toString().endsWith("_WOOL")) {
|
||||||
if (activeBalloons.containsKey(player.getUniqueId())) activeBalloons.get(player.getUniqueId()).remove();
|
if (activeBalloons.containsKey(player.getUniqueId())) activeBalloons.get(player.getUniqueId()).remove();
|
||||||
@@ -522,130 +376,11 @@ public class GadgetModule implements Module, Listener {
|
|||||||
player.sendMessage("§8[§6Nexus§8] §5Schutzzone aktiviert!");
|
player.sendMessage("§8[§6Nexus§8] §5Schutzzone aktiviert!");
|
||||||
}
|
}
|
||||||
player.closeInventory();
|
player.closeInventory();
|
||||||
} else if (item.getType() == Material.FEATHER) {
|
|
||||||
// Mini-Tornado: Spieler wird schnell im Kreis gedreht und Partikel erscheinen (weiter oben)
|
|
||||||
Bukkit.getScheduler().runTaskTimer(NexusLobby.getInstance(), new Runnable() {
|
|
||||||
int ticks = 0;
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
if (ticks >= 20) return;
|
|
||||||
float yaw = player.getLocation().getYaw() + 36;
|
|
||||||
// Spieler leicht anheben
|
|
||||||
org.bukkit.Location loc = player.getLocation().clone();
|
|
||||||
loc.setYaw(yaw);
|
|
||||||
loc.setY(loc.getY() + 0.5);
|
|
||||||
player.teleport(loc);
|
|
||||||
// Partikel deutlich höher
|
|
||||||
player.getWorld().spawnParticle(Particle.CLOUD, loc.clone().add(0,1.5,0), 14, 0.4,0.2,0.4,0.02);
|
|
||||||
player.setVelocity(player.getVelocity().setY(0.13));
|
|
||||||
ticks++;
|
|
||||||
}
|
|
||||||
}, 0L, 1L);
|
|
||||||
player.playSound(player.getLocation(), Sound.ENTITY_PHANTOM_FLAP, 1, 1.2f);
|
|
||||||
player.sendMessage("§8[§6Nexus§8] §fMini-Tornado: Du wirbelst herum!");
|
|
||||||
player.closeInventory();
|
|
||||||
} else if (item.getType() == Material.TNT) {
|
|
||||||
// Fake-TNT: Platziert eine harmlose TNT-Attrappe
|
|
||||||
org.bukkit.Location tntLoc = player.getLocation().add(0, 0.5, 0);
|
|
||||||
player.getWorld().spawnParticle(Particle.SMOKE, tntLoc, 16, 0.4, 0.2, 0.4, 0.01);
|
|
||||||
player.getWorld().playSound(tntLoc, Sound.ENTITY_TNT_PRIMED, 1, 1);
|
|
||||||
Bukkit.getScheduler().runTaskLater(NexusLobby.getInstance(), () -> {
|
|
||||||
player.getWorld().spawnParticle(Particle.EXPLOSION, tntLoc, 2, 0.5, 0.2, 0.5, 0.1);
|
|
||||||
player.getWorld().playSound(tntLoc, Sound.ENTITY_GENERIC_EXPLODE, 1, 1.1f);
|
|
||||||
}, 30L);
|
|
||||||
player.sendMessage("§8[§6Nexus§8] §cFake-TNT gezündet! Keine Sorge, alles harmlos.");
|
|
||||||
player.closeInventory();
|
|
||||||
} else if (item.getType() == Material.SLIME_BALL) {
|
|
||||||
// Mob-Party: Spawnt harmlose Mini-Mobs mit Partikeleffekten
|
|
||||||
org.bukkit.World world = player.getWorld();
|
|
||||||
org.bukkit.Location baseLoc = player.getLocation();
|
|
||||||
org.bukkit.entity.EntityType[] types = new org.bukkit.entity.EntityType[] {
|
|
||||||
org.bukkit.entity.EntityType.ZOMBIE,
|
|
||||||
org.bukkit.entity.EntityType.SKELETON,
|
|
||||||
org.bukkit.entity.EntityType.CREEPER,
|
|
||||||
org.bukkit.entity.EntityType.SLIME
|
|
||||||
};
|
|
||||||
List<org.bukkit.entity.LivingEntity> spawned = new ArrayList<>();
|
|
||||||
for (int i = 0; i < types.length; i++) {
|
|
||||||
org.bukkit.Location mobLoc = baseLoc.clone().add(Math.cos(i * Math.PI/2) * 1.5, 0, Math.sin(i * Math.PI/2) * 1.5);
|
|
||||||
org.bukkit.entity.Entity ent = world.spawnEntity(mobLoc, types[i]);
|
|
||||||
if (ent instanceof org.bukkit.entity.LivingEntity mob) {
|
|
||||||
mob.setCustomName("§aParty-Mob");
|
|
||||||
mob.setCustomNameVisible(true);
|
|
||||||
mob.setAI(false);
|
|
||||||
mob.setInvulnerable(true);
|
|
||||||
mob.setCollidable(false);
|
|
||||||
mob.setSilent(true);
|
|
||||||
mob.setGlowing(true);
|
|
||||||
// setBaby() ist nicht für alle EntityTypes verfügbar, daher nur für passende Typen aufrufen
|
|
||||||
try {
|
|
||||||
if (mob instanceof org.bukkit.entity.Zombie zombie) {
|
|
||||||
zombie.setBaby(true);
|
|
||||||
} else if (mob instanceof org.bukkit.entity.Slime slime) {
|
|
||||||
slime.setSize(1);
|
|
||||||
}
|
|
||||||
} catch (Exception ignored) {}
|
|
||||||
spawned.add(mob);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Partikel und "Tanz" für 4 Sekunden, dann despawnen
|
|
||||||
Bukkit.getScheduler().runTaskTimer(NexusLobby.getInstance(), new Runnable() {
|
|
||||||
int ticks = 0;
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
if (ticks >= 80) {
|
|
||||||
spawned.forEach(e -> e.remove());
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
for (org.bukkit.entity.LivingEntity mob : spawned) {
|
|
||||||
mob.getWorld().spawnParticle(Particle.NOTE, mob.getLocation().add(0,1,0), 6, 0.3,0.2,0.3,0.01);
|
|
||||||
mob.teleport(mob.getLocation().add(0, 0.08 * Math.sin(ticks/2.0), 0));
|
|
||||||
}
|
|
||||||
ticks++;
|
|
||||||
}
|
|
||||||
}, 0L, 2L);
|
|
||||||
player.playSound(player.getLocation(), Sound.ENTITY_VILLAGER_CELEBRATE, 1, 1.2f);
|
|
||||||
player.sendMessage("§8[§6Nexus§8] §aMob-Party gestartet! Die Mobs tanzen um dich.");
|
|
||||||
player.closeInventory();
|
|
||||||
} else if (item.getType() == Material.FIREWORK_ROCKET) {
|
|
||||||
// Konfetti-Kanone: Bunte Partikel und Knall
|
|
||||||
for (int i = 0; i < 3; i++) {
|
|
||||||
Bukkit.getScheduler().runTaskLater(NexusLobby.getInstance(), () -> {
|
|
||||||
player.getWorld().spawnParticle(Particle.CRIT, player.getLocation().add(0,1,0), 40, 0.8,0.5,0.8,0.15);
|
|
||||||
player.getWorld().spawnParticle(Particle.NOTE, player.getLocation().add(0,1,0), 20, 0.7,0.3,0.7,0.1);
|
|
||||||
player.playSound(player.getLocation(), Sound.ENTITY_FIREWORK_ROCKET_BLAST, 1, 1.1f);
|
|
||||||
}, i * 6L);
|
|
||||||
}
|
|
||||||
player.sendMessage("§8[§6Nexus§8] §cKonfetti-Kanone: Buntes Konfetti überall!");
|
|
||||||
player.closeInventory();
|
|
||||||
} else if (item.getType() == Material.NOTE_BLOCK) {
|
|
||||||
// Tanz-Emote: Spieler springt, Partikel und Musik
|
|
||||||
Bukkit.getScheduler().runTaskTimer(NexusLobby.getInstance(), new Runnable() {
|
|
||||||
int ticks = 0;
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
if (ticks >= 40) return;
|
|
||||||
if (ticks % 8 == 0) {
|
|
||||||
player.setVelocity(player.getVelocity().setY(0.4));
|
|
||||||
player.getWorld().spawnParticle(Particle.NOTE, player.getLocation().add(0,2,0), 8, 0.5,0.2,0.5,0.01);
|
|
||||||
player.playSound(player.getLocation(), Sound.BLOCK_NOTE_BLOCK_BELL, 1, 1.2f);
|
|
||||||
}
|
|
||||||
ticks++;
|
|
||||||
}
|
|
||||||
}, 0L, 2L);
|
|
||||||
player.sendMessage("§8[§6Nexus§8] §dTanz-Emote: Du beginnst zu tanzen!");
|
|
||||||
player.closeInventory();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void removeGadgets(Player player) {
|
private void removeGadgets(Player player) {
|
||||||
// Laufenden Disco-Modus Task abbrechen
|
|
||||||
UUID uuid = player.getUniqueId();
|
|
||||||
Integer discoTask = discoTasks.remove(uuid);
|
|
||||||
if (discoTask != null) {
|
|
||||||
Bukkit.getScheduler().cancelTask(discoTask);
|
|
||||||
}
|
|
||||||
if (activeBalloons.containsKey(player.getUniqueId())) {
|
if (activeBalloons.containsKey(player.getUniqueId())) {
|
||||||
activeBalloons.get(player.getUniqueId()).remove();
|
activeBalloons.get(player.getUniqueId()).remove();
|
||||||
activeBalloons.remove(player.getUniqueId());
|
activeBalloons.remove(player.getUniqueId());
|
||||||
|
|||||||
@@ -3,18 +3,11 @@ package de.nexuslobby.modules.gadgets;
|
|||||||
import de.nexuslobby.NexusLobby;
|
import de.nexuslobby.NexusLobby;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.NamespacedKey;
|
|
||||||
import org.bukkit.Registry;
|
|
||||||
import org.bukkit.scoreboard.Scoreboard;
|
|
||||||
import org.bukkit.scoreboard.Team;
|
|
||||||
import org.bukkit.entity.Ageable;
|
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
import org.bukkit.entity.EntityType;
|
import org.bukkit.entity.EntityType;
|
||||||
import org.bukkit.entity.Fox;
|
|
||||||
import org.bukkit.entity.LivingEntity;
|
import org.bukkit.entity.LivingEntity;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.entity.Tameable;
|
import org.bukkit.entity.Tameable;
|
||||||
import org.bukkit.entity.Wolf;
|
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.entity.EntityDamageEvent;
|
import org.bukkit.event.entity.EntityDamageEvent;
|
||||||
@@ -57,14 +50,6 @@ public class PetManager implements Listener {
|
|||||||
* Spawnt ein echtes Tier-Entity für den Spieler.
|
* Spawnt ein echtes Tier-Entity für den Spieler.
|
||||||
*/
|
*/
|
||||||
public static void spawnEntityPet(Player player, String type) {
|
public static void spawnEntityPet(Player player, String type) {
|
||||||
spawnEntityPet(player, type, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void spawnEntityPet(Player player, String type, boolean baby) {
|
|
||||||
spawnEntityPet(player, type, baby, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void spawnEntityPet(Player player, String type, boolean baby, String variantName) {
|
|
||||||
removePet(player);
|
removePet(player);
|
||||||
|
|
||||||
EntityType entityType;
|
EntityType entityType;
|
||||||
@@ -78,42 +63,15 @@ public class PetManager implements Listener {
|
|||||||
Location loc = player.getLocation();
|
Location loc = player.getLocation();
|
||||||
Entity pet = player.getWorld().spawnEntity(loc, entityType);
|
Entity pet = player.getWorld().spawnEntity(loc, entityType);
|
||||||
|
|
||||||
String agePrefix = baby ? "§bBaby " : "";
|
pet.setCustomName("§d" + player.getName() + "'s " + capitalize(type.toLowerCase()));
|
||||||
String petName = buildPetDisplayName(type, variantName);
|
|
||||||
pet.setCustomName(agePrefix + petName);
|
|
||||||
pet.setCustomNameVisible(true);
|
pet.setCustomNameVisible(true);
|
||||||
pet.setInvulnerable(true);
|
pet.setInvulnerable(true);
|
||||||
pet.setPersistent(false);
|
pet.setPersistent(false);
|
||||||
applyNeutralPetTeam(pet);
|
|
||||||
|
|
||||||
if (pet instanceof LivingEntity) {
|
if (pet instanceof LivingEntity) {
|
||||||
LivingEntity le = (LivingEntity) pet;
|
LivingEntity le = (LivingEntity) pet;
|
||||||
le.setRemoveWhenFarAway(false);
|
le.setRemoveWhenFarAway(false);
|
||||||
|
|
||||||
if (le instanceof Ageable) {
|
|
||||||
Ageable ageable = (Ageable) le;
|
|
||||||
if (baby) {
|
|
||||||
ageable.setBaby();
|
|
||||||
} else {
|
|
||||||
ageable.setAdult();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (le instanceof Wolf && variantName != null && !variantName.isEmpty()) {
|
|
||||||
Wolf.Variant variant = resolveWolfVariant(variantName);
|
|
||||||
if (variant != null) {
|
|
||||||
((Wolf) le).setVariant(variant);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (le instanceof Fox && variantName != null && !variantName.isEmpty()) {
|
|
||||||
try {
|
|
||||||
((Fox) le).setFoxType(Fox.Type.valueOf(variantName));
|
|
||||||
} catch (IllegalArgumentException ignored) {
|
|
||||||
// Ignorieren: Unbekannte Variante
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Verhindert, dass das Pet andere angreift
|
// Verhindert, dass das Pet andere angreift
|
||||||
if (le instanceof Tameable) {
|
if (le instanceof Tameable) {
|
||||||
((Tameable) le).setTamed(true);
|
((Tameable) le).setTamed(true);
|
||||||
@@ -160,16 +118,13 @@ public class PetManager implements Listener {
|
|||||||
|
|
||||||
public static void removePet(Player player) {
|
public static void removePet(Player player) {
|
||||||
if (activePets.containsKey(player.getUniqueId())) {
|
if (activePets.containsKey(player.getUniqueId())) {
|
||||||
Entity pet = activePets.get(player.getUniqueId());
|
activePets.get(player.getUniqueId()).remove();
|
||||||
removeFromPetTeam(pet);
|
|
||||||
pet.remove();
|
|
||||||
activePets.remove(player.getUniqueId());
|
activePets.remove(player.getUniqueId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void clearAll() {
|
public static void clearAll() {
|
||||||
for (Entity pet : activePets.values()) {
|
for (Entity pet : activePets.values()) {
|
||||||
removeFromPetTeam(pet);
|
|
||||||
pet.remove();
|
pet.remove();
|
||||||
}
|
}
|
||||||
activePets.clear();
|
activePets.clear();
|
||||||
@@ -180,49 +135,6 @@ public class PetManager implements Listener {
|
|||||||
return str.substring(0, 1).toUpperCase() + str.substring(1);
|
return str.substring(0, 1).toUpperCase() + str.substring(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String buildPetDisplayName(String type, String variantName) {
|
|
||||||
String baseType = capitalize(type.toLowerCase());
|
|
||||||
if (variantName == null || variantName.isEmpty()) return baseType;
|
|
||||||
String variant = capitalize(variantName.toLowerCase());
|
|
||||||
return variant + " " + baseType;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static Wolf.Variant resolveWolfVariant(String variantName) {
|
|
||||||
String keyName = variantName.toLowerCase();
|
|
||||||
NamespacedKey key = NamespacedKey.minecraft(keyName);
|
|
||||||
return Registry.WOLF_VARIANT.get(key);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static Team getOrCreatePetTeam() {
|
|
||||||
Scoreboard scoreboard = Bukkit.getScoreboardManager().getMainScoreboard();
|
|
||||||
Team team = scoreboard.getTeam("nexus_pets");
|
|
||||||
if (team == null) {
|
|
||||||
team = scoreboard.registerNewTeam("nexus_pets");
|
|
||||||
team.setPrefix("");
|
|
||||||
team.setSuffix("");
|
|
||||||
}
|
|
||||||
return team;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void applyNeutralPetTeam(Entity pet) {
|
|
||||||
Team team = getOrCreatePetTeam();
|
|
||||||
String entry = pet.getUniqueId().toString();
|
|
||||||
if (!team.hasEntry(entry)) {
|
|
||||||
team.addEntry(entry);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void removeFromPetTeam(Entity pet) {
|
|
||||||
if (pet == null) return;
|
|
||||||
Scoreboard scoreboard = Bukkit.getScoreboardManager().getMainScoreboard();
|
|
||||||
Team team = scoreboard.getTeam("nexus_pets");
|
|
||||||
if (team == null) return;
|
|
||||||
String entry = pet.getUniqueId().toString();
|
|
||||||
if (team.hasEntry(entry)) {
|
|
||||||
team.removeEntry(entry);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// --- Events um die Pets zu schützen ---
|
// --- Events um die Pets zu schützen ---
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
|
|||||||
@@ -68,6 +68,10 @@ public class HoloCommand implements CommandExecutor {
|
|||||||
}
|
}
|
||||||
module.removeHologram(args[1]);
|
module.removeHologram(args[1]);
|
||||||
player.sendMessage("§8[§6Nexus§8] §cHologramm §e" + args[1] + " §agelöscht.");
|
player.sendMessage("§8[§6Nexus§8] §cHologramm §e" + args[1] + " §agelöscht.");
|
||||||
|
}
|
||||||
|
else if (args[0].equalsIgnoreCase("reload")) {
|
||||||
|
module.reloadHolograms();
|
||||||
|
player.sendMessage("§8[§6Nexus§8] §aHologramme neu geladen.");
|
||||||
} else {
|
} else {
|
||||||
sendHelp(player);
|
sendHelp(player);
|
||||||
}
|
}
|
||||||
@@ -79,6 +83,7 @@ public class HoloCommand implements CommandExecutor {
|
|||||||
player.sendMessage("§8§m-----------§r §6Hologramme §8§m-----------");
|
player.sendMessage("§8§m-----------§r §6Hologramme §8§m-----------");
|
||||||
player.sendMessage("§e/holo create <id> <NONE|FAST|SLOW> <text>");
|
player.sendMessage("§e/holo create <id> <NONE|FAST|SLOW> <text>");
|
||||||
player.sendMessage("§e/holo delete <id>");
|
player.sendMessage("§e/holo delete <id>");
|
||||||
|
player.sendMessage("§e/holo reload");
|
||||||
player.sendMessage("§7Nutze §b; §7für neue Seiten.");
|
player.sendMessage("§7Nutze §b; §7für neue Seiten.");
|
||||||
player.sendMessage("§7Nutze §b\\n §7für Zeilenumbruch.");
|
player.sendMessage("§7Nutze §b\\n §7für Zeilenumbruch.");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -153,15 +153,57 @@ public class HologramModule implements Module, Listener {
|
|||||||
saveHoloConfig();
|
saveHoloConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lädt die holograms.yml neu und rendert alle Hologramme für Online-Spieler neu.
|
||||||
|
* Wird von HoloCommand (/holo reload) aufgerufen.
|
||||||
|
*/
|
||||||
|
public void reloadHolograms() {
|
||||||
|
// Alle aktiven Hologramme für alle Spieler entfernen
|
||||||
|
for (Player player : Bukkit.getOnlinePlayers()) {
|
||||||
|
holograms.values().forEach(h -> h.removeForPlayer(player));
|
||||||
|
}
|
||||||
|
// Config neu einlesen und Hologramme neu laden
|
||||||
|
loadConfig();
|
||||||
|
loadHolograms();
|
||||||
|
}
|
||||||
|
|
||||||
private void saveHoloConfig() {
|
private void saveHoloConfig() {
|
||||||
try {
|
try {
|
||||||
config.save(file);
|
// Sicherstellen, dass Placeholder-Strings (z.B. %bungeetotal%) korrekt
|
||||||
|
// gequotet gespeichert werden, damit SnakeYAML sie nicht als YAML-Direktive
|
||||||
|
// missinterpretiert. Dazu speichern wir die text-Listen explizit als
|
||||||
|
// String-Werte mit einfachen Anführungszeichen via eigener Serialisierung.
|
||||||
|
StringBuilder yaml = new StringBuilder();
|
||||||
|
for (String id : config.getKeys(false)) {
|
||||||
|
yaml.append(id).append(":\n");
|
||||||
|
yaml.append(" world: ").append(quoteIfNeeded(config.getString(id + ".world", ""))).append("\n");
|
||||||
|
yaml.append(" x: ").append(config.getDouble(id + ".x")).append("\n");
|
||||||
|
yaml.append(" y: ").append(config.getDouble(id + ".y")).append("\n");
|
||||||
|
yaml.append(" z: ").append(config.getDouble(id + ".z")).append("\n");
|
||||||
|
yaml.append(" text:\n");
|
||||||
|
for (String line : config.getStringList(id + ".text")) {
|
||||||
|
yaml.append(" - ").append(quoteIfNeeded(line)).append("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
java.nio.file.Files.writeString(file.toPath(), yaml.toString());
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
NexusLobby.getInstance().getLogger().severe("Konnte holograms.yml nicht speichern!");
|
NexusLobby.getInstance().getLogger().severe("Konnte holograms.yml nicht speichern!");
|
||||||
NexusLobby.getInstance().getLogger().severe("Fehler beim Speichern der Hologramme: " + e.getMessage());
|
NexusLobby.getInstance().getLogger().severe("Fehler beim Speichern der Hologramme: " + e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Umschließt Strings mit einfachen Anführungszeichen, wenn sie YAML-Sonderzeichen
|
||||||
|
* wie '%', ':', '#' enthalten, um Parsing-Fehler zu vermeiden.
|
||||||
|
*/
|
||||||
|
private String quoteIfNeeded(String value) {
|
||||||
|
if (value == null) return "''";
|
||||||
|
if (value.contains("%") || value.contains(":") || value.contains("#") || value.contains("'")) {
|
||||||
|
return "'" + value.replace("'", "''") + "'";
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* WICHTIG: Diese Methode wird vom LobbyTabCompleter benötigt!
|
* WICHTIG: Diese Methode wird vom LobbyTabCompleter benötigt!
|
||||||
* @return Set aller registrierten Hologramm-IDs
|
* @return Set aller registrierten Hologramm-IDs
|
||||||
|
|||||||
@@ -324,16 +324,14 @@ public class ParkourManager {
|
|||||||
// Bestzeiten
|
// Bestzeiten
|
||||||
// ─────────────────────────────────────────────────────────────────────────
|
// ─────────────────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
|
|
||||||
private void saveBestTime(Player player, double time) {
|
private void saveBestTime(Player player, double time) {
|
||||||
int track = activeTrack.getOrDefault(player.getUniqueId(), 1);
|
String path = "besttimes." + player.getUniqueId();
|
||||||
String path = "besttimes." + track + "." + player.getUniqueId();
|
|
||||||
double currentTime = config.getDouble(path, 99999.9);
|
double currentTime = config.getDouble(path, 99999.9);
|
||||||
if (time < currentTime) {
|
if (time < currentTime) {
|
||||||
config.set(path, time);
|
config.set(path, time);
|
||||||
config.set("names." + track + "." + player.getUniqueId(), player.getName());
|
config.set("names." + player.getUniqueId(), player.getName());
|
||||||
save();
|
save();
|
||||||
player.sendMessage("§8[§6Parkour§8] §6§lNeuer Rekord auf Strecke " + track + "! §7Du hast dich verbessert.");
|
player.sendMessage("§8[§6Parkour§8] §6§lNeuer Rekord! §7Du hast dich verbessert.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -342,22 +340,19 @@ public class ParkourManager {
|
|||||||
* Die Strecken-Konfiguration (tracks) bleibt vollständig erhalten.
|
* Die Strecken-Konfiguration (tracks) bleibt vollständig erhalten.
|
||||||
* Wird durch "/nexus parkour clear" aufgerufen.
|
* Wird durch "/nexus parkour clear" aufgerufen.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public void clearStats() {
|
public void clearStats() {
|
||||||
config.set("besttimes", null);
|
config.set("besttimes", null);
|
||||||
config.set("names", null);
|
config.set("names", null);
|
||||||
save();
|
save();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getTopTen() {
|
||||||
public String getTopTen(int track) {
|
if (!config.contains("besttimes") || config.getConfigurationSection("besttimes") == null)
|
||||||
String base = "besttimes." + track;
|
return "§6§l🏆 TOP 10 PARKOUR 🏆\n§7Noch keine Rekorde.";
|
||||||
if (!config.contains(base) || config.getConfigurationSection(base) == null)
|
|
||||||
return "§6§l🏆 TOP 10 PARKOUR Strecke " + track + " 🏆\n§7Noch keine Rekorde.";
|
|
||||||
|
|
||||||
Map<String, Double> allTimes = new HashMap<>();
|
Map<String, Double> allTimes = new HashMap<>();
|
||||||
for (String uuidStr : config.getConfigurationSection(base).getKeys(false)) {
|
for (String uuidStr : config.getConfigurationSection("besttimes").getKeys(false)) {
|
||||||
allTimes.put(uuidStr, config.getDouble(base + "." + uuidStr));
|
allTimes.put(uuidStr, config.getDouble("besttimes." + uuidStr));
|
||||||
}
|
}
|
||||||
|
|
||||||
List<Map.Entry<String, Double>> sortedList = allTimes.entrySet().stream()
|
List<Map.Entry<String, Double>> sortedList = allTimes.entrySet().stream()
|
||||||
@@ -365,10 +360,10 @@ public class ParkourManager {
|
|||||||
.limit(10)
|
.limit(10)
|
||||||
.toList();
|
.toList();
|
||||||
|
|
||||||
StringBuilder builder = new StringBuilder("§6§l🏆 TOP 10 PARKOUR Strecke " + track + " 🏆");
|
StringBuilder builder = new StringBuilder("§6§l🏆 TOP 10 PARKOUR 🏆");
|
||||||
int rank = 1;
|
int rank = 1;
|
||||||
for (Map.Entry<String, Double> entry : sortedList) {
|
for (Map.Entry<String, Double> entry : sortedList) {
|
||||||
String name = config.getString("names." + track + "." + entry.getKey(), "Unbekannt");
|
String name = config.getString("names." + entry.getKey(), "Unbekannt");
|
||||||
builder.append("\n§e#").append(rank).append(" §f").append(name)
|
builder.append("\n§e#").append(rank).append(" §f").append(name)
|
||||||
.append(" §8» §a").append(String.format("%.2f", entry.getValue())).append("s");
|
.append(" §8» §a").append(String.format("%.2f", entry.getValue())).append("s");
|
||||||
rank++;
|
rank++;
|
||||||
|
|||||||
@@ -278,6 +278,31 @@ player_inspect:
|
|||||||
gui_title: "&8Statistiken von &6{PLAYER}"
|
gui_title: "&8Statistiken von &6{PLAYER}"
|
||||||
|
|
||||||
# ══════════════════════════════════════════════════════════════════════════════
|
# ══════════════════════════════════════════════════════════════════════════════
|
||||||
|
# SUPPRESSOR / GLOBAL CHAT EINSTELLUNGEN
|
||||||
|
# ══════════════════════════════════════════════════════════════════════════════
|
||||||
|
# Join/Quit-Nachrichten Unterdrückung und BungeeCord-Messaging
|
||||||
|
suppressor:
|
||||||
|
# Aktiviert das Suppressor-System (true = an, false = aus)
|
||||||
|
enabled: false
|
||||||
|
|
||||||
|
# Unterdrückt Join- und Quit-Nachrichten für neue Spieler temporär
|
||||||
|
# true = Nachrichten werden unterdrückt, false = normale Anzeige
|
||||||
|
# Nützlich um Spam zu vermeiden wenn viele Spieler gleichzeitig joinen/leaven
|
||||||
|
suppress-join-quit: true
|
||||||
|
|
||||||
|
# Dauer der Unterdrückung in Ticks (20 Ticks = 1 Sekunde)
|
||||||
|
# Nach dieser Zeit werden Join/Quit-Nachrichten wieder normal angezeigt
|
||||||
|
suppress-duration-ticks: 40
|
||||||
|
|
||||||
|
# BungeeCord Plugin-Messaging Channels
|
||||||
|
# Diese Channels werden für die Kommunikation zwischen Servern verwendet
|
||||||
|
channels:
|
||||||
|
# Channel für Join/Quit-Suppression-Control
|
||||||
|
control: "global:control"
|
||||||
|
|
||||||
|
# Channel für globales Chat-Relay über alle Server
|
||||||
|
chat: "global:chat"
|
||||||
|
|
||||||
# ══════════════════════════════════════════════════════════════════════════════
|
# ══════════════════════════════════════════════════════════════════════════════
|
||||||
# LOGGING EINSTELLUNGEN
|
# LOGGING EINSTELLUNGEN
|
||||||
# ══════════════════════════════════════════════════════════════════════════════
|
# ══════════════════════════════════════════════════════════════════════════════
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
name: NexusLobby
|
name: NexusLobby
|
||||||
main: de.nexuslobby.NexusLobby
|
main: de.nexuslobby.NexusLobby
|
||||||
version: "1.6"
|
version: "1.7"
|
||||||
api-version: "1.21"
|
api-version: "1.21"
|
||||||
author: M_Viper
|
author: M_Viper
|
||||||
description: Modular Lobby Plugin with an invisible Particle-Parkour system.
|
description: Modular Lobby Plugin with an invisible Particle-Parkour system.
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ scoreboard:
|
|||||||
- "&6&lNETZWERK"
|
- "&6&lNETZWERK"
|
||||||
- " &8» &fOnline: &e%bungee_total%"
|
- " &8» &fOnline: &e%bungee_total%"
|
||||||
- "&4 "
|
- "&4 "
|
||||||
- "&8&o Viper-Network.de"
|
- "&8&o m-viper.de"
|
||||||
owner:
|
owner:
|
||||||
title: "&4&l&nNEXUS &c&lADMIN"
|
title: "&4&l&nNEXUS &c&lADMIN"
|
||||||
lines:
|
lines:
|
||||||
|
|||||||
Reference in New Issue
Block a user