package de.nexuslobby.modules.gadgets; import de.nexuslobby.NexusLobby; import de.nexuslobby.api.Module; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import java.util.UUID; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Particle; import org.bukkit.Sound; import org.bukkit.World; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.entity.Slime; import org.bukkit.entity.Zombie; import org.bukkit.event.EventHandler; import org.bukkit.event.HandlerList; import org.bukkit.event.Listener; import org.bukkit.event.block.Action; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.player.PlayerFishEvent; import org.bukkit.event.player.PlayerInteractAtEntityEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.player.PlayerUnleashEntityEvent; import org.bukkit.event.player.PlayerFishEvent.State; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.InventoryHolder; import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; public class GadgetModule implements Module, Listener { private final Map discoTasks = new HashMap(); private final Map activeBalloons = new HashMap(); private final Map activeEffects = new HashMap(); private final Set activeShields = new HashSet(); private final Map meteorCooldowns = new HashMap(); private final Map freezeCooldowns = new HashMap(); private final Map grapplingCooldowns = new HashMap(); private static final long METEOR_CD_MS = 15000L; private static final long FREEZE_CD_MS = 10000L; private static final long GRAPPLING_CD_MS = 3000L; private final String MAIN_TITLE = "§b§lGadgets §8- §7Menü"; private final String BALLOON_TITLE = "§b§lGadgets §8- §eBallons"; private final String PARTICLE_TITLE = "§b§lGadgets §8- §dPartikel"; private final String FUN_TITLE = "§b§lGadgets §8- §6Lustiges"; private final String HAT_TITLE = "§b§lGadgets §8- §aHüte & Köpfe"; 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)"; public String getName() { return "Gadgets"; } public void onEnable() { Bukkit.getPluginManager().registerEvents(this, NexusLobby.getInstance()); PetManager.register(); Bukkit.getScheduler().runTaskTimer(NexusLobby.getInstance(), () -> { PetManager.updatePets(); this.activeBalloons.values().forEach(Balloon::update); for(Player p : Bukkit.getOnlinePlayers()) { UUID uuid = p.getUniqueId(); this.handleSpecialHatEffects(p); if (this.activeEffects.containsKey(uuid)) { ((ParticleEffect)this.activeEffects.get(uuid)).update(p); } if (this.activeShields.contains(uuid)) { ShieldTask.handleShield(p); } } }, 1L, 1L); } private boolean checkAndSetCooldown(Player player, Map cdMap, long durationMs, String gadgetName) { long now = System.currentTimeMillis(); long last = (Long)cdMap.getOrDefault(player.getUniqueId(), 0L); long remaining = durationMs - (now - last); if (remaining > 0L) { long secLeft = (long)Math.ceil((double)remaining / (double)1000.0F); player.sendMessage("§8[§6Nexus§8] §c" + gadgetName + " §7hat noch §e" + secLeft + "s §7Cooldown."); player.playSound(player.getLocation(), Sound.BLOCK_NOTE_BLOCK_BASS, 0.5F, 0.8F); return false; } else { cdMap.put(player.getUniqueId(), now); return true; } } @EventHandler public void onInteractAtEntity(PlayerInteractAtEntityEvent event) { if (event.getRightClicked().getScoreboardTags().contains("nexus_balloon")) { event.setCancelled(true); } } @EventHandler public void onUnleash(PlayerUnleashEntityEvent event) { if (event.getEntity().getScoreboardTags().contains("nexus_balloon")) { event.setCancelled(true); } } @EventHandler public void onInteract(PlayerInteractEvent event) { ItemStack item = event.getItem(); if (item != null && item.hasItemMeta() && item.getItemMeta().hasDisplayName()) { String name = item.getItemMeta().getDisplayName(); if (event.getAction() == Action.RIGHT_CLICK_AIR || event.getAction() == Action.RIGHT_CLICK_BLOCK) { Player player = event.getPlayer(); if (!GadgetShield.isProtected(player) || !name.equals("§b§lFreeze-Ray") && !name.equals("§c§lMeteorit")) { if (name.equals("§b§lFreeze-Ray")) { event.setCancelled(true); if (this.checkAndSetCooldown(player, this.freezeCooldowns, 10000L, "§b§lFreeze-Ray")) { FreezeRay.shoot(player); } } else if (name.equals("§6§lPaintball-Gun")) { PaintballGun.shoot(player); event.setCancelled(true); } else if (name.equals("§c§lMeteorit")) { event.setCancelled(true); if (this.checkAndSetCooldown(player, this.meteorCooldowns, 15000L, "§c§lMeteorit")) { MeteorStrike.launch(player); } } } else { if (GadgetShield.isAdminShielded(player)) { player.sendMessage("§8[§6Nexus§8] §cDein Gadget-Schutz ist aktiv. Deaktiviere ihn mit §e/nexus gadgetshield§c."); } else { player.sendMessage("§8[§6Parkour§8] §cGadgets können während des Parkours nicht benutzt werden."); } event.setCancelled(true); } } } } @EventHandler public void onFish(PlayerFishEvent event) { Player player = event.getPlayer(); ItemStack item = player.getInventory().getItemInMainHand(); if (item.getType() == Material.FISHING_ROD && item.hasItemMeta() && item.getItemMeta().hasDisplayName()) { if (item.getItemMeta().getDisplayName().equals("§b§lEnterhaken")) { if (event.getState() == State.IN_GROUND || event.getState() == State.REEL_IN || event.getState() == State.CAUGHT_ENTITY) { if (event.getHook() == null) { return; } if (GadgetShield.isProtected(player)) { player.sendMessage("§8[§6Nexus§8] §cDer Enterhaken ist gerade nicht verfügbar."); return; } if (!this.checkAndSetCooldown(player, this.grapplingCooldowns, 3000L, "§b§lEnterhaken")) { return; } GrapplingHook.pullPlayer(player, event.getHook().getLocation()); } } } } @EventHandler public void onPlayerMove(PlayerMoveEvent event) { if (FreezeRay.isFrozen(event.getPlayer().getUniqueId()) && (event.getFrom().getX() != event.getTo().getX() || event.getFrom().getZ() != event.getTo().getZ())) { event.setTo(event.getFrom().setDirection(event.getTo().getDirection())); } } private void handleSpecialHatEffects(Player p) { ItemStack hat = p.getInventory().getHelmet(); if (hat != null && hat.getType() != Material.AIR) { switch (hat.getType()) { case CAMPFIRE: p.getWorld().spawnParticle(Particle.CAMPFIRE_COSY_SMOKE, p.getLocation().add((double)0.0F, 2.2, (double)0.0F), 1, 0.05, 0.05, 0.05, 0.02); break; case SPAWNER: p.getWorld().spawnParticle(Particle.FLAME, p.getLocation().add((double)0.0F, 2.1, (double)0.0F), 1, 0.12, 0.12, 0.12, 0.02); break; case SEA_LANTERN: case BEACON: p.getWorld().spawnParticle(Particle.END_ROD, p.getLocation().add((double)0.0F, 2.1, (double)0.0F), 1, 0.1, 0.1, 0.1, 0.03); break; case ENCHANTING_TABLE: p.getWorld().spawnParticle(Particle.ENCHANT, p.getLocation().add((double)0.0F, 2.3, (double)0.0F), 1, 0.2, 0.2, 0.2, (double)0.5F); } } } public void openGUI(Player player) { Inventory gui = Bukkit.createInventory((InventoryHolder)null, 27, "§b§lGadgets §8- §7Menü"); this.fillEdges(gui); gui.setItem(10, this.createItem(Material.LEAD, "§e§lBallons", "§7Wähle einen fliegenden Begleiter")); gui.setItem(11, this.createItem(Material.GOLDEN_HELMET, "§a§lHüte", "§7Setze dir etwas auf den Kopf")); gui.setItem(13, this.createItem(Material.BONE, "§d§lBegleiter", "§7Echte Tiere, die dir folgen")); gui.setItem(15, this.createItem(Material.FIREWORK_ROCKET, "§6§lLustiges", "§7Witzige Effekte")); gui.setItem(16, this.createItem(Material.NETHER_STAR, "§d§lPartikel", "§7Magische Auren & Effekte")); gui.setItem(22, this.createItem(Material.BARRIER, "§c§lStopp", "§7Alle Gadgets entfernen")); player.openInventory(gui); } private void openHatGUI(Player player) { Inventory gui = Bukkit.createInventory((InventoryHolder)null, 45, "§b§lGadgets §8- §aHüte & Köpfe"); this.fillEdges(gui); gui.setItem(10, this.createItem(Material.JACK_O_LANTERN, "§6Kürbis-Hut", "§7Es ist immer Halloween!")); gui.setItem(11, this.createItem(Material.SEA_LANTERN, "§bMeeres-Leuchten", "§7§oEffekt: Glitzern")); gui.setItem(12, this.createItem(Material.GLOWSTONE, "§eGlowstone-Kopf", "§7Werde zur Lampe")); gui.setItem(13, this.createItem(Material.TNT, "§cExplosiv-Hut", "§7Vorsicht, heiß!")); gui.setItem(14, this.createItem(Material.GLASS, "§fAstronaut", "§7Bereit für den Mond?")); gui.setItem(15, this.createItem(Material.DRAGON_HEAD, "§5Enderdrache", "§7Der König der Lüfte")); gui.setItem(16, this.createItem(Material.CAKE, "§dKuchen-Kopf", "§7Jeder mag Kuchen!")); gui.setItem(19, this.createItem(Material.SLIME_BLOCK, "§aGlibber-Block", "§7Ziemlich klebrig...")); gui.setItem(20, this.createItem(Material.MELON, "§aMelonen-Helm", "§7Frisch und saftig")); gui.setItem(21, this.createItem(Material.HAY_BLOCK, "§eStrohhut", "§7Sommer auf dem Land")); gui.setItem(22, this.createItem(Material.SPAWNER, "§8Monster-Käfig", "§7§oEffekt: Flammen")); gui.setItem(23, this.createItem(Material.CRAFTING_TABLE, "§6Werkbank", "§7Immer am Basteln")); gui.setItem(24, this.createItem(Material.BOOKSHELF, "§fBücherregal", "§7Ein wahrer Schlaukopf")); gui.setItem(25, this.createItem(Material.HONEY_BLOCK, "§6Honig-Hut", "§7Süß und klebrig")); gui.setItem(28, this.createItem(Material.GOLD_BLOCK, "§6Gold-Bonze", "§7Zeig was du hast")); gui.setItem(29, this.createItem(Material.DIAMOND_ORE, "§bDiamant-Erz", "§7Bau mich bloß nicht ab!")); gui.setItem(30, this.createItem(Material.BEACON, "§fLeuchtfeuer", "§7§oEffekt: Glitzern")); gui.setItem(31, this.createItem(Material.CONDUIT, "§3Auge des Meeres", "§7Die Macht von Atlantis")); gui.setItem(32, this.createItem(Material.ENCHANTING_TABLE, "§dMagier", "§7§oEffekt: Runen")); gui.setItem(33, this.createItem(Material.CAMPFIRE, "§cHeißer Kopf", "§7§oEffekt: Rauch")); gui.setItem(34, this.createItem(Material.SKELETON_SKULL, "§7Skelett", "§7Ein wenig gruselig")); gui.setItem(36, this.createItem(Material.ARROW, "§7Zurück", "§8Zum Hauptmenü")); gui.setItem(40, this.createItem(Material.NETHER_STAR, "§7Hauptmenü", "§8Zum Gadget-Hauptmenü")); player.openInventory(gui); } private void openPetGUI(Player player) { Inventory gui = Bukkit.createInventory((InventoryHolder)null, 54, "§b§lGadgets §8- §dBegleiter"); this.fillEdges(gui); gui.setItem(10, this.createItem(Material.BONE, "§fBaby-Wolf", "§7Ein kleiner treuer Begleiter")); gui.setItem(11, this.createItem(Material.BONE, "§7Baby-Ashen Wolf", "§7Ein kleiner Aschen-Wolf")); gui.setItem(12, this.createItem(Material.CAT_SPAWN_EGG, "§6Baby-Katze", "§7Ein kleiner Schmusefreund")); gui.setItem(13, this.createItem(Material.PANDA_SPAWN_EGG, "§aBaby-Panda", "§7Ein kleiner Flauschball")); gui.setItem(14, this.createItem(Material.FOX_SPAWN_EGG, "§6Baby-Fuchs", "§7Ein kleiner Schlaukopf")); gui.setItem(15, this.createItem(Material.FROG_SPAWN_EGG, "§aBaby-Frosch", "§7Ein kleiner Hopsfreund")); gui.setItem(16, this.createItem(Material.TURTLE_SPAWN_EGG, "§2Baby-Schildkröte", "§7Ein kleiner Panzenträger")); gui.setItem(28, this.createItem(Material.FOX_SPAWN_EGG, "§bBaby-Schneefuchs", "§7Ein kleiner Schnee-Fuchs")); gui.setItem(29, this.createItem(Material.RABBIT_SPAWN_EGG, "§fBaby-Kaninchen", "§7Ein kleiner Flitzer")); gui.setItem(30, this.createItem(Material.AXOLOTL_SPAWN_EGG, "§dBaby-Axolotl", "§7Ein kleiner Wasserfreund")); gui.setItem(31, this.createItem(Material.OCELOT_SPAWN_EGG, "§6Baby-Ozelot", "§7Ein kleiner Schleicher")); gui.setItem(32, this.createItem(Material.POLAR_BEAR_SPAWN_EGG, "§fBaby-Eisbär", "§7Ein kleiner Eisbär")); gui.setItem(33, this.createItem(Material.BEE_SPAWN_EGG, "§eBaby-Biene", "§7Eine kleine Biene")); gui.setItem(34, this.createItem(Material.CHICKEN_SPAWN_EGG, "§fKüken", "§7Ein kleines Huhn")); gui.setItem(19, this.createItem(Material.BONE, "§fWolf", "§7Ein treuer Begleiter")); gui.setItem(20, this.createItem(Material.BONE, "§7Ashen Wolf", "§7Ein seltener Aschen-Wolf")); gui.setItem(21, this.createItem(Material.CAT_SPAWN_EGG, "§6Katze", "§7Ein verschmuster Freund")); gui.setItem(22, this.createItem(Material.PANDA_SPAWN_EGG, "§aPanda", "§7Ein gemütlicher Zeitgenosse")); gui.setItem(23, this.createItem(Material.FOX_SPAWN_EGG, "§6Fuchs", "§7Ein schlauer Begleiter")); gui.setItem(24, this.createItem(Material.FROG_SPAWN_EGG, "§aFrosch", "§7Ein echter Hopsmeister")); gui.setItem(25, this.createItem(Material.TURTLE_SPAWN_EGG, "§2Schildkröte", "§7Gemütlich und gelassen")); gui.setItem(37, this.createItem(Material.FOX_SPAWN_EGG, "§bSchneefuchs", "§7Ein Fuchs aus kalten Biomen")); gui.setItem(38, this.createItem(Material.RABBIT_SPAWN_EGG, "§fKaninchen", "§7Ein schneller Hopper")); gui.setItem(39, this.createItem(Material.AXOLOTL_SPAWN_EGG, "§dAxolotl", "§7Ein seltener Wasserfreund")); gui.setItem(40, this.createItem(Material.OCELOT_SPAWN_EGG, "§6Ozelot", "§7Ein wachsamer Begleiter")); gui.setItem(41, this.createItem(Material.POLAR_BEAR_SPAWN_EGG, "§fEisbär", "§7Ein starker Eisbär")); gui.setItem(42, this.createItem(Material.BEE_SPAWN_EGG, "§eBiene", "§7Eine fleißige Biene")); gui.setItem(43, this.createItem(Material.CHICKEN_SPAWN_EGG, "§fHuhn", "§7Ein gackerndes Huhn")); gui.setItem(45, this.createItem(Material.ARROW, "§7Zurück", "§8Zum Hauptmenü")); gui.setItem(49, this.createItem(Material.NETHER_STAR, "§7Hauptmenü", "§8Zum Gadget-Hauptmenü")); gui.setItem(53, this.createItem(Material.ARROW, "§7Weiter", "§8Seite 2")); player.openInventory(gui); } private void openPetGUI2(Player player) { Inventory gui = Bukkit.createInventory((InventoryHolder)null, 54, "§b§lGadgets §8- §dBegleiter §7(2)"); this.fillEdges(gui); gui.setItem(19, this.createItem(Material.ARMADILLO_SPAWN_EGG, "§7Baby-Armadillo", "§7Ein kleiner Gürteltier")); gui.setItem(28, this.createItem(Material.ARMADILLO_SPAWN_EGG, "§7Armadillo", "§7Ein Gürteltier")); gui.setItem(45, this.createItem(Material.ARROW, "§7Zurück", "§8Seite 1")); gui.setItem(49, this.createItem(Material.NETHER_STAR, "§7Hauptmenü", "§8Zum Gadget-Hauptmenü")); gui.setItem(53, this.createItem(Material.ARROW, "§7Weiter", "§8Seite 3")); player.openInventory(gui); } private void openPetGUI3(Player player) { Inventory gui = Bukkit.createInventory((InventoryHolder)null, 54, "§b§lGadgets §8- §dBegleiter §7(3)"); this.fillEdges(gui); gui.setItem(19, this.createItem(Material.PARROT_SPAWN_EGG, "§cPapagei", "§7Ein bunter Begleiter")); gui.setItem(20, this.createItem(Material.ALLAY_SPAWN_EGG, "§bAllay", "§7Ein magischer Helfer")); gui.setItem(21, this.createItem(Material.SNIFFER_SPAWN_EGG, "§aSniffer", "§7Ein uraltes Tier")); gui.setItem(45, this.createItem(Material.ARROW, "§7Zurück", "§8Seite 2")); gui.setItem(49, this.createItem(Material.NETHER_STAR, "§7Hauptmenü", "§8Zum Gadget-Hauptmenü")); player.openInventory(gui); } private void openBalloonGUI(Player player) { Inventory gui = Bukkit.createInventory((InventoryHolder)null, 45, "§b§lGadgets §8- §eBallons"); this.fillEdges(gui); Material[] wools = new Material[]{Material.WHITE_WOOL, Material.ORANGE_WOOL, Material.MAGENTA_WOOL, Material.LIGHT_BLUE_WOOL, Material.YELLOW_WOOL, Material.LIME_WOOL, Material.PINK_WOOL, Material.GRAY_WOOL, Material.CYAN_WOOL, Material.PURPLE_WOOL, Material.BLUE_WOOL, Material.BROWN_WOOL, Material.GREEN_WOOL, Material.RED_WOOL}; int slot = 10; for(Material m : wools) { if (slot == 17) { slot = 19; } if (slot == 26) { slot = 28; } gui.setItem(slot++, this.createItem(m, "§fBallon: " + m.name().replace("_WOOL", ""), "§7Klicke zum Ausrüsten")); } gui.setItem(36, this.createItem(Material.ARROW, "§7Zurück", "§8Zum Hauptmenü")); gui.setItem(40, this.createItem(Material.NETHER_STAR, "§7Hauptmenü", "§8Zum Gadget-Hauptmenü")); player.openInventory(gui); } private void openParticleGUI(Player player) { Inventory gui = Bukkit.createInventory((InventoryHolder)null, 36, "§b§lGadgets §8- §dPartikel"); this.fillEdges(gui); gui.setItem(11, this.createItem(Material.POPPY, "§cHerzchen-Aura", "§7Verbreite Liebe in der Lobby")); gui.setItem(13, this.createItem(Material.BLAZE_POWDER, "§6Flammen-Ring", "§7Lass es brennen!")); gui.setItem(15, this.createItem(Material.WATER_BUCKET, "§bRegenwolke", "§7Deine persönliche Abkühlung")); gui.setItem(27, this.createItem(Material.ARROW, "§7Zurück", "§8Zum Hauptmenü")); gui.setItem(31, this.createItem(Material.NETHER_STAR, "§7Hauptmenü", "§8Zum Gadget-Hauptmenü")); player.openInventory(gui); } private void openFunGUI(Player player) { Inventory gui = Bukkit.createInventory((InventoryHolder)null, 36, "§b§lGadgets §8- §6Lustiges"); this.fillEdges(gui); gui.setItem(10, this.createItem(Material.FISHING_ROD, "§b§lEnterhaken", "§7Zieh dich durch die Luft! §8(3s CD)")); gui.setItem(11, this.createItem(Material.PACKED_ICE, "§b§lFreeze-Ray", "§7Friere andere ein! §8(10s CD)")); gui.setItem(12, this.createItem(Material.GOLDEN_HOE, "§6§lPaintball-Gun", "§7Male die Lobby bunt aus!")); gui.setItem(13, this.createItem(Material.FEATHER, "§f§lMini-Tornado", "§7Wirbele dich herum!")); gui.setItem(14, this.createItem(Material.FIRE_CHARGE, "§c§lMeteorit", "§7Lass es krachen! §8(15s CD)")); gui.setItem(15, this.createItem(Material.SHIELD, "§5§lSchutzzone", "§7Halte andere auf Distanz")); gui.setItem(16, this.createItem(Material.EGG, "§f§lChicken-Rain", "§7Gack-Gack! Hühner überall!")); gui.setItem(19, this.createItem(Material.SLIME_BALL, "§a§lMob-Party", "§7Lustige Mini-Mobs tanzen um dich!")); gui.setItem(20, this.createItem(Material.NOTE_BLOCK, "§d§lTanz-Emote", "§7Führe einen Tanz auf!")); gui.setItem(21, this.createItem(Material.FIREWORK_ROCKET, "§c§lKonfetti-Kanone", "§7Schieße Konfetti in die Luft!")); gui.setItem(22, this.createItem(Material.TNT, "§c§lFake-TNT", "§7Täusche andere mit einer harmlosen Explosion!")); gui.setItem(27, this.createItem(Material.ARROW, "§7Zurück", "§8Zum Hauptmenü")); gui.setItem(31, this.createItem(Material.NETHER_STAR, "§7Hauptmenü", "§8Zum Gadget-Hauptmenü")); player.openInventory(gui); } @EventHandler public void onInventoryClick(InventoryClickEvent event) { String title = event.getView().getTitle(); if (title.startsWith("§b§lGadgets")) { event.setCancelled(true); final Player player = (Player)event.getWhoClicked(); ItemStack item = event.getCurrentItem(); if (item != null && item.getType() != Material.AIR) { if (item.getType() == Material.ARROW) { String displayName = item.hasItemMeta() && item.getItemMeta().hasDisplayName() ? item.getItemMeta().getDisplayName() : ""; if (displayName.equals("§7Weiter")) { if (title.equals("§b§lGadgets §8- §dBegleiter")) { this.openPetGUI2(player); return; } if (title.equals("§b§lGadgets §8- §dBegleiter §7(2)")) { this.openPetGUI3(player); return; } } if (displayName.equals("§7Zurück")) { if (title.equals("§b§lGadgets §8- §dBegleiter §7(2)")) { this.openPetGUI(player); return; } if (title.equals("§b§lGadgets §8- §dBegleiter §7(3)")) { this.openPetGUI2(player); return; } this.openGUI(player); return; } } if (item.getType() == Material.NETHER_STAR && title.startsWith("§b§lGadgets §8- §d") || item.getType() == Material.NETHER_STAR && title.equals("§b§lGadgets §8- §aHüte & Köpfe") || item.getType() == Material.NETHER_STAR && title.equals("§b§lGadgets §8- §eBallons") || item.getType() == Material.NETHER_STAR && title.equals("§b§lGadgets §8- §dPartikel") || item.getType() == Material.NETHER_STAR && title.equals("§b§lGadgets §8- §6Lustiges")) { this.openGUI(player); return; } if (title.equals("§b§lGadgets §8- §7Menü")) { if (item.getType() == Material.LEAD) { this.openBalloonGUI(player); } else if (item.getType() == Material.GOLDEN_HELMET) { this.openHatGUI(player); } else if (item.getType() == Material.BONE) { this.openPetGUI(player); } else if (item.getType() == Material.NETHER_STAR) { this.openParticleGUI(player); } else if (item.getType() == Material.FIREWORK_ROCKET) { this.openFunGUI(player); } else if (item.getType() == Material.BARRIER) { this.removeGadgets(player); player.closeInventory(); } } else if (title.equals("§b§lGadgets §8- §aHüte & Köpfe")) { if (item.getType() != Material.GRAY_STAINED_GLASS_PANE) { String hatName = item.hasItemMeta() && item.getItemMeta().hasDisplayName() ? item.getItemMeta().getDisplayName() : item.getType().name(); HatManager.setHat(player, item.getType(), hatName); player.playSound(player.getLocation(), Sound.ITEM_ARMOR_EQUIP_GENERIC, 1.0F, 1.0F); player.closeInventory(); } } else if (title.equals("§b§lGadgets §8- §dBegleiter")) { String displayName = item.hasItemMeta() && item.getItemMeta().hasDisplayName() ? item.getItemMeta().getDisplayName() : ""; boolean spawned = true; if (displayName.equals("§fBaby-Wolf")) { PetManager.spawnEntityPet(player, "WOLF", true); } else if (displayName.equals("§fWolf")) { PetManager.spawnEntityPet(player, "WOLF", false); } 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("§b§lGadgets §8- §dBegleiter §7(2)")) { 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("§b§lGadgets §8- §dBegleiter §7(3)")) { 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("§b§lGadgets §8- §eBallons")) { if (item.getType().toString().endsWith("_WOOL")) { if (this.activeBalloons.containsKey(player.getUniqueId())) { ((Balloon)this.activeBalloons.get(player.getUniqueId())).remove(); } this.activeBalloons.put(player.getUniqueId(), new Balloon(player, item.getType())); player.sendMessage("§8[§6Nexus§8] §aBallon aktiviert!"); player.closeInventory(); } } else if (title.equals("§b§lGadgets §8- §dPartikel")) { if (item.getType() == Material.POPPY) { this.activeEffects.put(player.getUniqueId(), new ParticleEffect("hearts")); } else if (item.getType() == Material.BLAZE_POWDER) { this.activeEffects.put(player.getUniqueId(), new ParticleEffect("flames")); } else if (item.getType() == Material.WATER_BUCKET) { this.activeEffects.put(player.getUniqueId(), new ParticleEffect("cloud")); } player.sendMessage("§8[§6Nexus§8] §aPartikel aktiviert!"); player.closeInventory(); } else if (title.equals("§b§lGadgets §8- §6Lustiges")) { if (item.getType() == Material.EGG) { ChickenRain.start(player); player.sendMessage("§8[§6Nexus§8] §fHühnerregen gestartet!"); player.closeInventory(); } else if (item.getType() == Material.FISHING_ROD) { player.getInventory().addItem(new ItemStack[]{this.createItem(Material.FISHING_ROD, "§b§lEnterhaken", "§7Rechtsklick zum Katapultieren §8(3s CD)")}); player.closeInventory(); } else if (item.getType() == Material.PACKED_ICE) { player.getInventory().addItem(new ItemStack[]{this.createItem(Material.PACKED_ICE, "§b§lFreeze-Ray", "§7Rechtsklick zum Einfrieren §8(10s CD)")}); player.closeInventory(); } else if (item.getType() == Material.GOLDEN_HOE) { player.getInventory().addItem(new ItemStack[]{this.createItem(Material.GOLDEN_HOE, "§6§lPaintball-Gun", "§7Rechtsklick zum Schießen")}); player.closeInventory(); } else if (item.getType() == Material.FIRE_CHARGE) { player.getInventory().addItem(new ItemStack[]{this.createItem(Material.FIRE_CHARGE, "§c§lMeteorit", "§7Rechtsklick zum Markieren §8(15s CD)")}); player.closeInventory(); } else if (item.getType() == Material.SHIELD) { if (this.activeShields.contains(player.getUniqueId())) { this.activeShields.remove(player.getUniqueId()); player.sendMessage("§8[§6Nexus§8] §cSchutzzone deaktiviert."); } else { this.activeShields.add(player.getUniqueId()); player.sendMessage("§8[§6Nexus§8] §5Schutzzone aktiviert!"); } player.closeInventory(); } else if (item.getType() == Material.FEATHER) { Bukkit.getScheduler().runTaskTimer(NexusLobby.getInstance(), new Runnable() { int ticks = 0; public void run() { if (this.ticks < 20) { float yaw = player.getLocation().getYaw() + 36.0F; Location loc = player.getLocation().clone(); loc.setYaw(yaw); loc.setY(loc.getY() + (double)0.5F); player.teleport(loc); player.getWorld().spawnParticle(Particle.CLOUD, loc.clone().add((double)0.0F, (double)1.5F, (double)0.0F), 14, 0.4, 0.2, 0.4, 0.02); player.setVelocity(player.getVelocity().setY(0.13)); ++this.ticks; } } }, 0L, 1L); player.playSound(player.getLocation(), Sound.ENTITY_PHANTOM_FLAP, 1.0F, 1.2F); player.sendMessage("§8[§6Nexus§8] §fMini-Tornado: Du wirbelst herum!"); player.closeInventory(); } else if (item.getType() == Material.TNT) { Location tntLoc = player.getLocation().add((double)0.0F, (double)0.5F, (double)0.0F); player.getWorld().spawnParticle(Particle.SMOKE, tntLoc, 16, 0.4, 0.2, 0.4, 0.01); player.getWorld().playSound(tntLoc, Sound.ENTITY_TNT_PRIMED, 1.0F, 1.0F); Bukkit.getScheduler().runTaskLater(NexusLobby.getInstance(), () -> { player.getWorld().spawnParticle(Particle.EXPLOSION, tntLoc, 2, (double)0.5F, 0.2, (double)0.5F, 0.1); player.getWorld().playSound(tntLoc, Sound.ENTITY_GENERIC_EXPLODE, 1.0F, 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) { World world = player.getWorld(); Location baseLoc = player.getLocation(); EntityType[] types = new EntityType[]{EntityType.ZOMBIE, EntityType.SKELETON, EntityType.CREEPER, EntityType.SLIME}; final List spawned = new ArrayList(); for(int i = 0; i < types.length; ++i) { Location mobLoc = baseLoc.clone().add(Math.cos((double)i * Math.PI / (double)2.0F) * (double)1.5F, (double)0.0F, Math.sin((double)i * Math.PI / (double)2.0F) * (double)1.5F); Entity ent = world.spawnEntity(mobLoc, types[i]); if (ent instanceof LivingEntity) { LivingEntity mob = (LivingEntity)ent; mob.setCustomName("§aParty-Mob"); mob.setCustomNameVisible(true); mob.setAI(false); mob.setInvulnerable(true); mob.setCollidable(false); mob.setSilent(true); mob.setGlowing(true); try { if (mob instanceof Zombie) { Zombie zombie = (Zombie)mob; zombie.setBaby(true); } else if (mob instanceof Slime) { Slime slime = (Slime)mob; slime.setSize(1); } } catch (Exception var15) { } spawned.add(mob); } } Bukkit.getScheduler().runTaskTimer(NexusLobby.getInstance(), new Runnable() { int ticks = 0; public void run() { if (this.ticks >= 80) { spawned.forEach((e) -> e.remove()); } else { for(LivingEntity mob : spawned) { mob.getWorld().spawnParticle(Particle.NOTE, mob.getLocation().add((double)0.0F, (double)1.0F, (double)0.0F), 6, 0.3, 0.2, 0.3, 0.01); mob.teleport(mob.getLocation().add((double)0.0F, 0.08 * Math.sin((double)this.ticks / (double)2.0F), (double)0.0F)); } ++this.ticks; } } }, 0L, 2L); player.playSound(player.getLocation(), Sound.ENTITY_VILLAGER_CELEBRATE, 1.0F, 1.2F); player.sendMessage("§8[§6Nexus§8] §aMob-Party gestartet! Die Mobs tanzen um dich."); player.closeInventory(); } else if (item.getType() == Material.FIREWORK_ROCKET) { for(int i = 0; i < 3; ++i) { Bukkit.getScheduler().runTaskLater(NexusLobby.getInstance(), () -> { player.getWorld().spawnParticle(Particle.CRIT, player.getLocation().add((double)0.0F, (double)1.0F, (double)0.0F), 40, 0.8, (double)0.5F, 0.8, 0.15); player.getWorld().spawnParticle(Particle.NOTE, player.getLocation().add((double)0.0F, (double)1.0F, (double)0.0F), 20, 0.7, 0.3, 0.7, 0.1); player.playSound(player.getLocation(), Sound.ENTITY_FIREWORK_ROCKET_BLAST, 1.0F, 1.1F); }, (long)i * 6L); } player.sendMessage("§8[§6Nexus§8] §cKonfetti-Kanone: Buntes Konfetti überall!"); player.closeInventory(); } else if (item.getType() == Material.NOTE_BLOCK) { Bukkit.getScheduler().runTaskTimer(NexusLobby.getInstance(), new Runnable() { int ticks = 0; public void run() { if (this.ticks < 40) { if (this.ticks % 8 == 0) { player.setVelocity(player.getVelocity().setY(0.4)); player.getWorld().spawnParticle(Particle.NOTE, player.getLocation().add((double)0.0F, (double)2.0F, (double)0.0F), 8, (double)0.5F, 0.2, (double)0.5F, 0.01); player.playSound(player.getLocation(), Sound.BLOCK_NOTE_BLOCK_BELL, 1.0F, 1.2F); } ++this.ticks; } } }, 0L, 2L); player.sendMessage("§8[§6Nexus§8] §dTanz-Emote: Du beginnst zu tanzen!"); player.closeInventory(); } } } } } private void removeGadgets(Player player) { UUID uuid = player.getUniqueId(); Integer discoTask = (Integer)this.discoTasks.remove(uuid); if (discoTask != null) { Bukkit.getScheduler().cancelTask(discoTask); } if (this.activeBalloons.containsKey(player.getUniqueId())) { ((Balloon)this.activeBalloons.get(player.getUniqueId())).remove(); this.activeBalloons.remove(player.getUniqueId()); } this.activeEffects.remove(player.getUniqueId()); this.activeShields.remove(player.getUniqueId()); PetManager.removePet(player); FreezeRay.unfreeze(player.getUniqueId()); HatManager.removeHat(player); player.getInventory().remove(Material.FISHING_ROD); player.getInventory().remove(Material.PACKED_ICE); player.getInventory().remove(Material.GOLDEN_HOE); player.getInventory().remove(Material.FIRE_CHARGE); player.sendMessage("§8[§6Nexus§8] §cAlle Gadgets abgelegt."); } private void fillEdges(Inventory inv) { ItemStack glass = this.createItem(Material.GRAY_STAINED_GLASS_PANE, " ", (String)null); for(int i = 0; i < inv.getSize(); ++i) { if (i < 9 || i >= inv.getSize() - 9 || i % 9 == 0 || (i + 1) % 9 == 0) { inv.setItem(i, glass); } } } private ItemStack createItem(Material mat, String name, String lore) { ItemStack item = new ItemStack(mat); ItemMeta meta = item.getItemMeta(); if (meta != null) { meta.setDisplayName(name); List l = new ArrayList(); if (lore != null && !lore.isEmpty()) { l.add(ChatColor.translateAlternateColorCodes('&', lore)); meta.setLore(l); } meta.addItemFlags(new ItemFlag[]{ItemFlag.HIDE_ATTRIBUTES}); meta.addItemFlags(new ItemFlag[]{ItemFlag.HIDE_UNBREAKABLE}); meta.addItemFlags(new ItemFlag[]{ItemFlag.HIDE_ENCHANTS}); item.setItemMeta(meta); } return item; } public void onDisable() { HandlerList.unregisterAll(this); PetManager.unregister(); PetManager.clearAll(); this.activeBalloons.values().forEach(Balloon::remove); this.activeBalloons.clear(); this.activeEffects.clear(); this.activeShields.clear(); GadgetShield.clear(); } @EventHandler public void onQuit(PlayerQuitEvent event) { Player player = event.getPlayer(); removeGadgets(player); UUID uuid = player.getUniqueId(); meteorCooldowns.remove(uuid); freezeCooldowns.remove(uuid); grapplingCooldowns.remove(uuid); } }