Files
NexusLobby/src/main/java/de/nexuslobby/modules/gadgets/GadgetModule.java
2026-05-31 12:42:53 +02:00

778 lines
42 KiB
Java

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<UUID, Integer> discoTasks = new HashMap();
private final Map<UUID, Balloon> activeBalloons = new HashMap();
private final Map<UUID, ParticleEffect> activeEffects = new HashMap();
private final Set<UUID> activeShields = new HashSet();
private final Map<UUID, Long> meteorCooldowns = new HashMap();
private final Map<UUID, Long> freezeCooldowns = new HashMap();
private final Map<UUID, Long> 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<UUID, Long> 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<LivingEntity> 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<String> 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);
}
}