From a6ec49e369bff25091020a83ad819d8bfd79ec5a Mon Sep 17 00:00:00 2001 From: Nandor Dukat Date: Mon, 9 Mar 2026 15:27:27 +0100 Subject: [PATCH 01/38] fixed: - Spectator State Not Clearing on Transition - Ladder Validation Fails for FFA-Only Ladders - Incorrect Self-Attribution in Void Death Messages --- .../practice/command/ffa/arguments/SpectateArg.java | 4 ++-- .../dev/nandi0813/practice/manager/fight/ffa/game/FFA.java | 6 ++++++ .../dev/nandi0813/practice/manager/fight/match/Match.java | 2 +- .../manager/ladder/abstraction/normal/NormalLadder.java | 3 ++- .../nandi0813/practice/manager/ladder/util/LadderUtil.java | 4 ---- 5 files changed, 11 insertions(+), 8 deletions(-) diff --git a/core/src/main/java/dev/nandi0813/practice/command/ffa/arguments/SpectateArg.java b/core/src/main/java/dev/nandi0813/practice/command/ffa/arguments/SpectateArg.java index ee3d9340..abda51fe 100644 --- a/core/src/main/java/dev/nandi0813/practice/command/ffa/arguments/SpectateArg.java +++ b/core/src/main/java/dev/nandi0813/practice/command/ffa/arguments/SpectateArg.java @@ -36,7 +36,7 @@ public static void run(Player player, String label, String[] args) { } Profile profile = ProfileManager.getInstance().getProfile(player); - if (!profile.getStatus().equals(ProfileStatus.LOBBY)) { + if (!profile.getStatus().equals(ProfileStatus.LOBBY) && !profile.getStatus().equals(ProfileStatus.SPECTATE)) { Common.sendMMMessage(player, LanguageManager.getString("FFA.COMMAND.SPECTATE.CANT-JOIN-FFA")); return; } @@ -48,7 +48,7 @@ public static List tabComplete(Player player, String[] args) { Profile profile = ProfileManager.getInstance().getProfile(player); List arguments = new ArrayList<>(); - if (!profile.getStatus().equals(ProfileStatus.LOBBY)) + if (!profile.getStatus().equals(ProfileStatus.LOBBY) && !profile.getStatus().equals(ProfileStatus.SPECTATE)) return arguments; if (args.length == 2) { diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/game/FFA.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/game/FFA.java index 0bdfebcb..78f009ad 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/game/FFA.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/game/FFA.java @@ -222,6 +222,12 @@ public void addSpectator(Player player, Player target, boolean teleport, boolean return; } + // If the spectator was spectating another match/FFA, remove them first. + Spectatable previousSpectatable = SpectatorManager.getInstance().getSpectators().get(player); + if (previousSpectatable != null) { + previousSpectatable.removeSpectator(player); + } + Profile profile = ProfileManager.getInstance().getProfile(player); this.spectators.add(player); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/Match.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/Match.java index be697460..56b50cdb 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/Match.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/Match.java @@ -220,7 +220,7 @@ public void killPlayer(Player player, Player killer, String deathMessage) { // check whether a recent attacker should be credited instead. if (killer == null) { Player lastAttacker = getLastAttacker(player); - if (lastAttacker != null && deathMessage != null + if (lastAttacker != null && !lastAttacker.equals(player) && deathMessage != null && deathMessage.equals(dev.nandi0813.practice.manager.fight.util.DeathCause.VOID.getMessage())) { killer = lastAttacker; deathMessage = dev.nandi0813.practice.manager.fight.util.DeathCause.VOID_BY_PLAYER diff --git a/core/src/main/java/dev/nandi0813/practice/manager/ladder/abstraction/normal/NormalLadder.java b/core/src/main/java/dev/nandi0813/practice/manager/ladder/abstraction/normal/NormalLadder.java index ca988498..fa94a2a8 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/ladder/abstraction/normal/NormalLadder.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/ladder/abstraction/normal/NormalLadder.java @@ -2,6 +2,7 @@ import dev.nandi0813.practice.manager.arena.ArenaManager; import dev.nandi0813.practice.manager.arena.arenas.Arena; +import dev.nandi0813.practice.manager.arena.arenas.FFAArena; import dev.nandi0813.practice.manager.gui.GUIManager; import dev.nandi0813.practice.manager.gui.GUIType; import dev.nandi0813.practice.manager.gui.guis.ladder.LadderPreviewGui; @@ -76,7 +77,7 @@ public void deleteData() { } public boolean isReadyToEnable() { - return icon != null && kitData.isSet() && !matchTypes.isEmpty(); + return icon != null && kitData.isSet(); } public void setFrozen(boolean frozen) { diff --git a/core/src/main/java/dev/nandi0813/practice/manager/ladder/util/LadderUtil.java b/core/src/main/java/dev/nandi0813/practice/manager/ladder/util/LadderUtil.java index eeda0b14..10c5e7c8 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/ladder/util/LadderUtil.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/ladder/util/LadderUtil.java @@ -42,10 +42,6 @@ public static void changeStatus(Player player, NormalLadder ladder) { Common.sendMMMessage(player, LanguageManager.getString("LADDER.STATUS-CHANGE.NO-CONTENT")); return; } - if (ladder.getMatchTypes().isEmpty()) { - Common.sendMMMessage(player, LanguageManager.getString("LADDER.STATUS-CHANGE.NO-MATCHTYPE-ASSIGNED")); - return; - } if (ladder instanceof SkyWars && ((SkyWars) ladder).getSkyWarsLoot() == null) { Common.sendMMMessage(player, LanguageManager.getString("LADDER.STATUS-CHANGE.SKYWARS.NO-LOOT")); return; From bafcacba48861c336d5c83f85df0dacaee6a743f Mon Sep 17 00:00:00 2001 From: Nandor Dukat Date: Tue, 10 Mar 2026 09:30:59 +0100 Subject: [PATCH 02/38] fixed: - Mace Smash Kill enhancements: - duel right click only with unranked item - FFA arena selector GUI --- .../practice/command/ffa/FFACommand.java | 27 +++- .../command/ffa/arguments/JoinArg.java | 70 ---------- .../manager/fight/ffa/FFAManager.java | 6 + .../fight/ffa/game/FFAArenaSelectorGui.java | 126 ++++++++++++++++++ .../practice/manager/gui/GUIType.java | 1 + .../manager/inventory/InventoryListener.java | 12 +- core/src/main/resources/1.8.8/guis.yml | 47 +++++-- core/src/main/resources/language.yml | 4 +- core/src/main/resources/modern/guis.yml | 22 ++- .../practice_modern/listener/FightUtil.java | 3 +- 10 files changed, 224 insertions(+), 94 deletions(-) delete mode 100644 core/src/main/java/dev/nandi0813/practice/command/ffa/arguments/JoinArg.java create mode 100644 core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/game/FFAArenaSelectorGui.java diff --git a/core/src/main/java/dev/nandi0813/practice/command/ffa/FFACommand.java b/core/src/main/java/dev/nandi0813/practice/command/ffa/FFACommand.java index 8f857bc4..d6ad3037 100644 --- a/core/src/main/java/dev/nandi0813/practice/command/ffa/FFACommand.java +++ b/core/src/main/java/dev/nandi0813/practice/command/ffa/FFACommand.java @@ -2,6 +2,10 @@ import dev.nandi0813.practice.command.ffa.arguments.*; import dev.nandi0813.practice.manager.backend.LanguageManager; +import dev.nandi0813.practice.manager.fight.ffa.FFAManager; +import dev.nandi0813.practice.manager.profile.Profile; +import dev.nandi0813.practice.manager.profile.ProfileManager; +import dev.nandi0813.practice.manager.profile.enums.ProfileStatus; import dev.nandi0813.practice.util.Common; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; @@ -26,7 +30,7 @@ public boolean onCommand(CommandSender sender, Command cmd, String label, String if (args.length > 0) { switch (args[0]) { case "join": - JoinArg.run(player, label, args); + openArenaSelectorGui(player); break; case "leave": LeaveArg.run(player); @@ -42,12 +46,24 @@ public boolean onCommand(CommandSender sender, Command cmd, String label, String HelpArg.run(player, label); break; } - } else - HelpArg.run(player, label); + } else { + openArenaSelectorGui(player); + } return true; } + private static void openArenaSelectorGui(Player player) { + Profile profile = ProfileManager.getInstance().getProfile(player); + if (!profile.getStatus().equals(ProfileStatus.LOBBY)) { + Common.sendMMMessage(player, LanguageManager.getString("FFA.COMMAND.JOIN.CANT-JOIN-FFA")); + return; + } + + FFAManager.getInstance().getArenaSelectorGui().update(); + FFAManager.getInstance().getArenaSelectorGui().open(player); + } + @Override public List onTabComplete(CommandSender sender, Command command, String alias, String[] args) { List arguments = new ArrayList<>(); @@ -61,10 +77,9 @@ public List onTabComplete(CommandSender sender, Command command, String StringUtil.copyPartialMatches(args[0], arguments, completion); } else { - if (args[0].equalsIgnoreCase("join")) { - completion = JoinArg.tabComplete(player, args); - } else if (args[0].equalsIgnoreCase("spectate")) + if (args[0].equalsIgnoreCase("spectate")) { completion = SpectateArg.tabComplete(player, args); + } } Collections.sort(completion); diff --git a/core/src/main/java/dev/nandi0813/practice/command/ffa/arguments/JoinArg.java b/core/src/main/java/dev/nandi0813/practice/command/ffa/arguments/JoinArg.java deleted file mode 100644 index c15c510a..00000000 --- a/core/src/main/java/dev/nandi0813/practice/command/ffa/arguments/JoinArg.java +++ /dev/null @@ -1,70 +0,0 @@ -package dev.nandi0813.practice.command.ffa.arguments; - -import dev.nandi0813.practice.manager.arena.ArenaManager; -import dev.nandi0813.practice.manager.arena.arenas.FFAArena; -import dev.nandi0813.practice.manager.backend.LanguageManager; -import dev.nandi0813.practice.manager.fight.ffa.game.FFA; -import dev.nandi0813.practice.manager.profile.Profile; -import dev.nandi0813.practice.manager.profile.ProfileManager; -import dev.nandi0813.practice.manager.profile.enums.ProfileStatus; -import dev.nandi0813.practice.util.Common; -import org.bukkit.entity.Player; -import org.bukkit.util.StringUtil; - -import java.util.ArrayList; -import java.util.List; - - -public enum JoinArg { - ; - - public static void run(Player player, String label, String[] args) { - if (args.length != 2) { - Common.sendMMMessage(player, LanguageManager.getString("FFA.COMMAND.JOIN.HELP").replace("%label%", label)); - return; - } - - FFAArena ffaArena = ArenaManager.getInstance().getFFAArena(args[1]); - if (ffaArena == null) { - Common.sendMMMessage(player, LanguageManager.getString("FFA.COMMAND.JOIN.ARENA-NOT-FOUND")); - return; - } - - FFA ffa = ffaArena.getFfa(); - if (ffa == null || !ffa.isOpen()) { - Common.sendMMMessage(player, LanguageManager.getString("FFA.COMMAND.JOIN.ARENA-CLOSED").replace("%arena%", ffaArena.getDisplayName())); - return; - } - - Profile profile = ProfileManager.getInstance().getProfile(player); - if (!profile.getStatus().equals(ProfileStatus.LOBBY)) { - Common.sendMMMessage(player, LanguageManager.getString("FFA.COMMAND.JOIN.CANT-JOIN-FFA")); - return; - } - - ffa.getLadderSelectorGui().update(); - ffa.getLadderSelectorGui().open(player); - } - - public static List tabComplete(Player player, String[] args) { - Profile profile = ProfileManager.getInstance().getProfile(player); - List arguments = new ArrayList<>(); - - if (!profile.getStatus().equals(ProfileStatus.LOBBY)) - return arguments; - - if (args.length == 2) { - for (FFAArena ffaArena : ArenaManager.getInstance().getFFAArenas()) { - FFA ffa = ffaArena.getFfa(); - if (ffa != null && ffa.isOpen()) { - arguments.add(ffaArena.getName()); - } - } - - return StringUtil.copyPartialMatches(args[1], arguments, new ArrayList<>()); - } - - return arguments; - } - -} diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/FFAManager.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/FFAManager.java index 1a3727a5..8d72f41b 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/FFAManager.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/FFAManager.java @@ -3,6 +3,8 @@ import dev.nandi0813.practice.manager.arena.ArenaManager; import dev.nandi0813.practice.manager.arena.arenas.FFAArena; import dev.nandi0813.practice.manager.fight.ffa.game.FFA; +import dev.nandi0813.practice.manager.fight.ffa.game.FFAArenaSelectorGui; +import dev.nandi0813.practice.manager.gui.GUIManager; import dev.nandi0813.practice.manager.spectator.SpectatorManager; import dev.nandi0813.practice.util.interfaces.Spectatable; import lombok.Getter; @@ -23,7 +25,11 @@ public static FFAManager getInstance() { return instance; } + private final FFAArenaSelectorGui arenaSelectorGui; + private FFAManager() { + this.arenaSelectorGui = new FFAArenaSelectorGui(); + GUIManager.getInstance().addGUI(this.arenaSelectorGui); } public List getOpenFFAs() { diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/game/FFAArenaSelectorGui.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/game/FFAArenaSelectorGui.java new file mode 100644 index 00000000..63abe2b9 --- /dev/null +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/game/FFAArenaSelectorGui.java @@ -0,0 +1,126 @@ +package dev.nandi0813.practice.manager.fight.ffa.game; + +import dev.nandi0813.practice.manager.arena.ArenaManager; +import dev.nandi0813.practice.manager.arena.arenas.FFAArena; +import dev.nandi0813.practice.manager.backend.GUIFile; +import dev.nandi0813.practice.manager.backend.LanguageManager; +import dev.nandi0813.practice.manager.gui.GUI; +import dev.nandi0813.practice.manager.gui.GUIItem; +import dev.nandi0813.practice.manager.gui.GUIType; +import dev.nandi0813.practice.manager.ladder.abstraction.normal.NormalLadder; +import dev.nandi0813.practice.manager.profile.Profile; +import dev.nandi0813.practice.manager.profile.ProfileManager; +import dev.nandi0813.practice.manager.profile.enums.ProfileStatus; +import dev.nandi0813.practice.util.Common; +import dev.nandi0813.practice.util.InventoryUtil; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +public class FFAArenaSelectorGui extends GUI { + + private static final String BUILD_ON = GUIFile.getString("GUIS.FFA.ARENA-SELECTOR.ICONS.ARENA.BUILD-STATUS.ENABLED"); + private static final String BUILD_OFF = GUIFile.getString("GUIS.FFA.ARENA-SELECTOR.ICONS.ARENA.BUILD-STATUS.DISABLED"); + private static final GUIItem ARENA_ITEM = GUIFile.getGuiItem("GUIS.FFA.ARENA-SELECTOR.ICONS.ARENA"); + private static final ItemStack FILLER_ITEM = GUIFile.getGuiItem("GUIS.FFA.ARENA-SELECTOR.ICONS.FILLER").get(); + + private final Map arenaSlots = new HashMap<>(); + + public FFAArenaSelectorGui() { + super(GUIType.FFA_Arena_Selector); + + int rows = Math.max(1, GUIFile.getInt("GUIS.FFA.ARENA-SELECTOR.ROWS")); + this.gui.put(1, InventoryUtil.createInventory(GUIFile.getString("GUIS.FFA.ARENA-SELECTOR.TITLE"), rows)); + } + + @Override + public void build() { + update(); + } + + @Override + public void update() { + Inventory inventory = gui.get(1); + inventory.clear(); + arenaSlots.clear(); + + List openArenas = ArenaManager.getInstance().getFFAArenas().stream() + .filter(arena -> arena.isEnabled() && arena.getFfa() != null && arena.getFfa().isOpen()) + .toList(); + + for (FFAArena arena : openArenas) { + FFA ffa = arena.getFfa(); + + GUIItem guiItem = ARENA_ITEM.cloneItem() + .replace("%arena%", arena.getDisplayName()) + .replace("%players%", String.valueOf(ffa.getPlayers().size())) + .replace("%build_status%", arena.isBuild() ? BUILD_ON : BUILD_OFF) + .replace("%rekit_after_kill%", arena.isReKitAfterKill() ? BUILD_ON : BUILD_OFF) + .replace("%lobby_after_death%", arena.isLobbyAfterDeath() ? BUILD_ON : BUILD_OFF) + .replace("%ladders%", String.valueOf(arena.getAssignedLadders().size())); + + if (arena.getIcon() != null) { + guiItem.setBaseItem(arena.getIcon()); + } + + int slot = inventory.firstEmpty(); + if (slot == -1) break; + + inventory.setItem(slot, guiItem.get()); + arenaSlots.put(slot, arena); + } + + for (int i = 0; i < inventory.getSize(); i++) { + if (inventory.getItem(i) == null) { + inventory.setItem(i, FILLER_ITEM); + } + } + + this.updatePlayers(); + } + + @Override + public void handleClickEvent(InventoryClickEvent e) { + e.setCancelled(true); + + Player player = (Player) e.getWhoClicked(); + int slot = e.getSlot(); + + if (!arenaSlots.containsKey(slot)) return; + + FFAArena arena = arenaSlots.get(slot); + if (arena == null) return; + + Profile profile = ProfileManager.getInstance().getProfile(player); + if (!profile.getStatus().equals(ProfileStatus.LOBBY)) { + player.closeInventory(); + return; + } + + FFA ffa = arena.getFfa(); + if (ffa == null || !ffa.isOpen()) { + Common.sendMMMessage(player, LanguageManager.getString("FFA.COMMAND.JOIN.ARENA-CLOSED").replace("%arena%", arena.getDisplayName())); + player.closeInventory(); + return; + } + + // If the arena has only one ladder, join directly + if (arena.getAssignedLadders().size() == 1) { + NormalLadder ladder = arena.getAssignedLadders().iterator().next(); + player.closeInventory(); + ffa.addPlayer(player, ladder); + } else { + // Open the ladder selector for this arena + ffa.getLadderSelectorGui().update(); + ffa.getLadderSelectorGui().open(player); + } + } + +} + diff --git a/core/src/main/java/dev/nandi0813/practice/manager/gui/GUIType.java b/core/src/main/java/dev/nandi0813/practice/manager/gui/GUIType.java index 0a27f79e..45662fb8 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/gui/GUIType.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/gui/GUIType.java @@ -93,6 +93,7 @@ public enum GUIType { DivisionGui, + FFA_Arena_Selector, FFA_Ladder_Selector, } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/inventory/InventoryListener.java b/core/src/main/java/dev/nandi0813/practice/manager/inventory/InventoryListener.java index 2236bc63..a94d3cad 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/inventory/InventoryListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/inventory/InventoryListener.java @@ -108,11 +108,21 @@ public void onPlayerInteractWithEntity(PlayerInteractEntityEvent e) { } // Right-click-to-duel: when in lobby, right-clicking a player sends a duel request + // Only triggers when the player is holding the unranked item if (ConfigManager.getBoolean("MATCH-SETTINGS.DUEL.RIGHT-CLICK-TO-DUEL") && profile.getStatus().equals(ProfileStatus.LOBBY) && !profile.isParty() && player.hasPermission("zpp.duel")) { - player.performCommand("duel " + target.getName()); + Inventory inventory = InventoryManager.getInstance().getPlayerInventory(player); + if (inventory != null) { + ItemStack itemInHand = ClassImport.getClasses().getPlayerUtil().getPlayerMainHand(player); + if (itemInHand != null && itemInHand.getType() != Material.AIR && itemInHand.hasItemMeta()) { + InvItem heldInvItem = inventory.getInvItem(itemInHand.getItemMeta().getDisplayName(), itemInHand.getType()); + if (heldInvItem instanceof dev.nandi0813.practice.manager.inventory.inventoryitem.lobbyitems.UnrankedInvItem) { + player.performCommand("duel " + target.getName()); + } + } + } } } diff --git a/core/src/main/resources/1.8.8/guis.yml b/core/src/main/resources/1.8.8/guis.yml index f27a1582..47208dc5 100644 --- a/core/src/main/resources/1.8.8/guis.yml +++ b/core/src/main/resources/1.8.8/guis.yml @@ -1,4 +1,4 @@ -VERSION: 12 +VERSION: 13 GENERAL-FILLER-ITEM: NAME: " " @@ -581,18 +581,6 @@ GUIS: - "" - "&f&lClick here &fto duel this party." - "&7&m------------------------" - FFA: - LADDER-SELECTOR: - TITLE: "&8Select a &6ladder &8to join" - ICONS: - LADDER: - NAME: "%ladder%" - LORE: - - "" - - "&aClick here to select %ladder%&a." - FILLER: - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 3 DIVISION: TITLE: "&8Division" ICONS: @@ -629,6 +617,39 @@ GUIS: - "" - " %color%┃ &fProgress: &a%progress_bar% &f(%progress_percent%%)" - "" + FFA: + ARENA-SELECTOR: + TITLE: "&8Select an &6FFA Arena" + ROWS: 3 + ICONS: + ARENA: + BUILD-STATUS: + ENABLED: "&aEnabled" + DISABLED: "&cDisabled" + NAME: "&6%arena%" + LORE: + - "" + - "&eBuild: &f%build_status%" + - "&eRe-Kit After Kill: &f%rekit_after_kill%" + - "&eLobby After Death: &f%lobby_after_death%" + - "&eLadders: &f%ladders%" + - "&ePlayers: &f%players%" + - "" + - "&aClick to join this arena!" + FILLER: + MATERIAL: STAINED_GLASS_PANE + DAMAGE: 1 + LADDER-SELECTOR: + TITLE: "&8Select a &6ladder &8to join" + ICONS: + LADDER: + NAME: "%ladder%" + LORE: + - "" + - "&aClick here to select %ladder%&a." + FILLER: + MATERIAL: STAINED_GLASS_PANE + DAMAGE: 3 PLAYER-SETTINGS: TITLE: "&8Player Settings" # %player% ICONS: diff --git a/core/src/main/resources/language.yml b/core/src/main/resources/language.yml index 723b0471..4c7fb27a 100644 --- a/core/src/main/resources/language.yml +++ b/core/src/main/resources/language.yml @@ -1598,8 +1598,8 @@ FFA: - "----------------------------------------" - "FFA Commands" - "" - - " » /%label% join - Join the FFA." - - " » /%label% leave - Leave the FFA." + - " » /%label% join - Join a FFA." + - " » /%label% leave - Leave a FFA." - " » /%label% spectate - Spectate FFA." - " » /%label% list - List all available arenas." - "----------------------------------------" diff --git a/core/src/main/resources/modern/guis.yml b/core/src/main/resources/modern/guis.yml index 47c7852d..ee7f6149 100644 --- a/core/src/main/resources/modern/guis.yml +++ b/core/src/main/resources/modern/guis.yml @@ -1,4 +1,4 @@ -VERSION: 12 +VERSION: 13 GENERAL-FILLER-ITEM: NAME: " " @@ -563,6 +563,26 @@ GUIS: - "&f&lClick here &fto duel this party." - "&7&m------------------------" FFA: + ARENA-SELECTOR: + TITLE: "&8Select an &6FFA Arena" + ROWS: 3 + ICONS: + ARENA: + BUILD-STATUS: + ENABLED: "&aEnabled" + DISABLED: "&cDisabled" + NAME: "&6%arena%" + LORE: + - "" + - "&eBuild: &f%build_status%" + - "&eRe-Kit After Kill: &f%rekit_after_kill%" + - "&eLobby After Death: &f%lobby_after_death%" + - "&eLadders: &f%ladders%" + - "&ePlayers: &f%players%" + - "" + - "&aClick to join this arena!" + FILLER: + MATERIAL: ORANGE_STAINED_GLASS_PANE LADDER-SELECTOR: TITLE: "&8Select a &6ladder &8to join" ICONS: diff --git a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/listener/FightUtil.java b/spigot_modern/src/main/java/dev/nandi0813/practice_modern/listener/FightUtil.java index ebc0cfbb..b80c7d56 100644 --- a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/listener/FightUtil.java +++ b/spigot_modern/src/main/java/dev/nandi0813/practice_modern/listener/FightUtil.java @@ -22,7 +22,8 @@ public static DeathCause convert(DamageType damageType) { return DeathCause.FALL; } else if (damageType.equals(DamageType.EXPLOSION) || damageType.equals(DamageType.PLAYER_EXPLOSION)) { return DeathCause.EXPLOSION; - } else if (damageType.equals(DamageType.MOB_ATTACK) || damageType.equals(DamageType.PLAYER_ATTACK)) { + } else if (damageType.equals(DamageType.MOB_ATTACK) || damageType.equals(DamageType.PLAYER_ATTACK) + || damageType.equals(DamageType.MACE_SMASH)) { return DeathCause.PLAYER_ATTACK; } else if (damageType.equals(DamageType.ARROW) || damageType.equals(DamageType.TRIDENT) || damageType.equals(DamageType.MOB_PROJECTILE)) { From 4ca50a756622d5dc71359c3e38eb9c9366d99686 Mon Sep 17 00:00:00 2001 From: Nandor Dukat Date: Tue, 10 Mar 2026 09:40:43 +0100 Subject: [PATCH 03/38] fixed knocked to the void by player death message in FFA --- .../practice/manager/fight/ffa/game/FFA.java | 46 +++++++++++++++++++ .../practice_1_8_8/listener/FFAListener.java | 21 ++++++++- .../practice_modern/listener/FFAListener.java | 32 +++++++++---- 3 files changed, 89 insertions(+), 10 deletions(-) diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/game/FFA.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/game/FFA.java index 78f009ad..4ad945cf 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/game/FFA.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/game/FFA.java @@ -51,6 +51,13 @@ public class FFA implements Spectatable, dev.nandi0813.api.Interface.FFA { private boolean open; + /** Tracks the last player that dealt damage to another player, for void-kill attribution. */ + private final Map lastAttackerMap = new HashMap<>(); + /** Timestamp (ms) of the last attacker hit, keyed by victim UUID. */ + private final Map lastAttackerTime = new HashMap<>(); + /** How long (ms) a last-attacker is considered valid for void attribution. */ + private static final long LAST_ATTACKER_EXPIRY_MS = 4_000L; + public FFA(FFAArena arena) { this.arena = arena; this.build = arena.isBuild(); @@ -166,6 +173,19 @@ public void killPlayer(Player player, Player killer, String deathMessage) { if (!players.containsKey(player)) return; + // If no explicit killer and the death message is the plain void message, + // check whether a recent attacker should be credited instead. + if (killer == null) { + Player lastAttacker = getLastAttacker(player); + if (lastAttacker != null && deathMessage != null + && deathMessage.equals(dev.nandi0813.practice.manager.fight.util.DeathCause.VOID.getMessage())) { + killer = lastAttacker; + deathMessage = dev.nandi0813.practice.manager.fight.util.DeathCause.VOID_BY_PLAYER + .getMessage() + .replace("%killer%", killer.getName()); + } + } + fightPlayers.get(player).die(deathMessage, statistics.get(player)); fightPlayers.get(player).getProfile().getStats().getLadderStat(players.get(player)).increaseDeaths(); @@ -188,6 +208,32 @@ public void killPlayer(Player player, Player killer, String deathMessage) { } } + /** + * Records that {@code attacker} last hit {@code victim}. + * Called from damage listeners so void deaths can be attributed correctly. + */ + public void recordAttack(Player victim, Player attacker) { + if (victim == attacker) return; + + lastAttackerMap.put(victim.getUniqueId(), attacker.getUniqueId()); + lastAttackerTime.put(victim.getUniqueId(), System.currentTimeMillis()); + } + + /** + * Returns the last player who hit {@code victim} within the expiry window, + * or {@code null} if there is none. + */ + public @org.jetbrains.annotations.Nullable Player getLastAttacker(Player victim) { + Long time = lastAttackerTime.get(victim.getUniqueId()); + if (time == null || System.currentTimeMillis() - time > LAST_ATTACKER_EXPIRY_MS) return null; + UUID attackerUuid = lastAttackerMap.get(victim.getUniqueId()); + if (attackerUuid == null) return null; + for (Player p : players.keySet()) { + if (attackerUuid.equals(p.getUniqueId())) return p; + } + return null; + } + public void teleportPlayer(Player player) { player.teleport(arena.getFfaPositions().get(random.nextInt(arena.getFfaPositions().size()))); } diff --git a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/listener/FFAListener.java b/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/listener/FFAListener.java index 81f7dde2..ea39ea65 100644 --- a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/listener/FFAListener.java +++ b/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/listener/FFAListener.java @@ -27,6 +27,13 @@ public void onPlayerDamage(EntityDamageEvent e) { FFA ffa = FFAManager.getInstance().getFFAByPlayer(player); if (ffa == null) return; + // Void deaths are already handled by onPlayerMove in the core FFAListener. + // Skip here to avoid sending the death message twice. + if (e.getCause() == EntityDamageEvent.DamageCause.VOID) { + e.setDamage(0); + return; + } + if (e instanceof EntityDamageByEntityEvent) { onEntityDamageByEntity((EntityDamageByEntityEvent) e); } @@ -52,16 +59,26 @@ private static void onEntityDamageByEntity(EntityDamageByEntityEvent e) { if (!(e.getEntity() instanceof Player)) return; Player target = (Player) e.getEntity(); - if (e.getDamager() instanceof Projectile) { + FFA ffa = FFAManager.getInstance().getFFAByPlayer(target); + + Player attacker = null; + if (e.getDamager() instanceof Player) { + attacker = (Player) e.getDamager(); + } else if (e.getDamager() instanceof Projectile) { Projectile projectile = (Projectile) e.getDamager(); if (projectile.getShooter() instanceof Player) { - Player attacker = (Player) projectile.getShooter(); + attacker = (Player) projectile.getShooter(); if (projectile instanceof Arrow) { arrowDisplayHearth(attacker, target, e.getFinalDamage()); } } } + + // Record the attacker for void-kill attribution + if (attacker != null && ffa != null) { + ffa.recordAttack(target, attacker); + } } } diff --git a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/listener/FFAListener.java b/spigot_modern/src/main/java/dev/nandi0813/practice_modern/listener/FFAListener.java index 195d26ae..9cc4e3e6 100644 --- a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/listener/FFAListener.java +++ b/spigot_modern/src/main/java/dev/nandi0813/practice_modern/listener/FFAListener.java @@ -8,6 +8,7 @@ import dev.nandi0813.practice.manager.profile.Profile; import dev.nandi0813.practice.manager.profile.ProfileManager; import org.bukkit.damage.DamageSource; +import org.bukkit.damage.DamageType; import org.bukkit.entity.Arrow; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; @@ -31,6 +32,13 @@ public void onPlayerDeath(PlayerDeathEvent e) { e.setCancelled(true); DamageSource damageSource = e.getDamageSource(); + + // Void deaths are already handled by onPlayerMove in the core FFAListener. + // Skip here to avoid sending the death message twice. + if (damageSource.getDamageType().equals(DamageType.OUT_OF_WORLD)) { + return; + } + Player killer = null; if (damageSource.getCausingEntity() instanceof Entity damageEntity) { killer = FightUtil.getKiller(damageEntity); @@ -47,26 +55,34 @@ public void onPlayerDeath(PlayerDeathEvent e) { @EventHandler public void onEntityDamageByEntity(EntityDamageByEntityEvent e) { - if (!(e.getEntity() instanceof Player player)) { + if (!(e.getEntity() instanceof Player target)) { return; } - Profile profile = ProfileManager.getInstance().getProfile(player); + Profile profile = ProfileManager.getInstance().getProfile(target); if (profile == null) return; - FFA ffa = FFAManager.getInstance().getFFAByPlayer(player); + FFA ffa = FFAManager.getInstance().getFFAByPlayer(target); if (ffa == null) return; - if (!(e.getEntity() instanceof Player target)) return; - - if (e.getDamager() instanceof Projectile projectile) { - if (projectile.getShooter() instanceof Player attacker) { + // Resolve the attacker (direct hit or projectile shooter) + Player attacker = null; + if (e.getDamager() instanceof Player damager) { + attacker = damager; + } else if (e.getDamager() instanceof Projectile projectile) { + if (projectile.getShooter() instanceof Player shooter) { + attacker = shooter; if (projectile instanceof Arrow) { - arrowDisplayHearth(attacker, target, e.getFinalDamage()); + arrowDisplayHearth(shooter, target, e.getFinalDamage()); } } } + + // Record the attacker for void-kill attribution + if (attacker != null) { + ffa.recordAttack(target, attacker); + } } } From 024c313091eb35997008a1f4551992b1d9b45b79 Mon Sep 17 00:00:00 2001 From: Nandor Dukat Date: Tue, 10 Mar 2026 18:00:19 +0100 Subject: [PATCH 04/38] fixed possible NPE in MatchStatsGui constructor --- .../nandi0813/practice/manager/gui/guis/MatchStatsGui.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/MatchStatsGui.java b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/MatchStatsGui.java index 28bdb2d9..b614c902 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/MatchStatsGui.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/MatchStatsGui.java @@ -35,8 +35,11 @@ public MatchStatsGui(Match match, UUID uuid) { this.uuid = uuid; this.player = Bukkit.getOfflinePlayer(uuid); - for (Round round : match.getRounds().values()) - stats.put(round.getRoundNumber(), round.getStatistics().get(uuid)); + for (Round round : match.getRounds().values()) { + Statistic statistic = round.getStatistics().get(uuid); + if (statistic != null) + stats.put(round.getRoundNumber(), statistic); + } build(); } From 7ae385434a3ed76b339cf624362f198533f2d5fb Mon Sep 17 00:00:00 2001 From: Nandor Dukat Date: Tue, 10 Mar 2026 19:31:04 +0100 Subject: [PATCH 05/38] fixed dupe bug in player inventory --- .../practice_1_8_8/interfaces/PlayerUtil.java | 16 ++++++++++++++++ .../practice_modern/interfaces/PlayerUtil.java | 16 ++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/PlayerUtil.java b/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/PlayerUtil.java index bdb337b5..3de32c2c 100644 --- a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/PlayerUtil.java +++ b/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/PlayerUtil.java @@ -64,6 +64,17 @@ public List dropPlayerInventory(Player player) { entities.add(player.getWorld().dropItemNaturally(player.getLocation(), item)); } + // Drop items from the 2x2 crafting grid (indices 1-4 of the open inventory) + for (int i = 1; i <= 4; i++) { + ItemStack item = player.getOpenInventory().getItem(i); + if (item == null || item.getType().equals(Material.AIR)) continue; + entities.add(player.getWorld().dropItemNaturally(player.getLocation(), item)); + } + // Drop cursor item if any + ItemStack cursor = player.getItemOnCursor(); + if (cursor != null && !cursor.getType().equals(Material.AIR)) + entities.add(player.getWorld().dropItemNaturally(player.getLocation(), cursor)); + this.clearInventory(player); return entities; @@ -73,6 +84,11 @@ public List dropPlayerInventory(Player player) { public void clearInventory(Player player) { player.getInventory().clear(); player.getInventory().setArmorContents(null); + // Clear the 2x2 crafting grid slots (indices 1-4 of the player's open inventory) + for (int i = 1; i <= 4; i++) + player.getOpenInventory().setItem(i, null); + // Clear any item held on the cursor + player.setItemOnCursor(null); player.updateInventory(); } diff --git a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/PlayerUtil.java b/spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/PlayerUtil.java index 6b28e557..3e3f7c6a 100644 --- a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/PlayerUtil.java +++ b/spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/PlayerUtil.java @@ -61,6 +61,17 @@ public List dropPlayerInventory(Player player) { entities.add(player.getWorld().dropItemNaturally(player.getLocation(), item)); } + // Drop items from the 2x2 crafting grid (indices 1-4 of the open inventory) + for (int i = 1; i <= 4; i++) { + ItemStack item = player.getOpenInventory().getItem(i); + if (item == null || item.getType().equals(Material.AIR)) continue; + entities.add(player.getWorld().dropItemNaturally(player.getLocation(), item)); + } + // Drop cursor item if any + ItemStack cursor = player.getItemOnCursor(); + if (cursor != null && !cursor.getType().equals(Material.AIR)) + entities.add(player.getWorld().dropItemNaturally(player.getLocation(), cursor)); + this.clearInventory(player); return entities; @@ -68,6 +79,11 @@ public List dropPlayerInventory(Player player) { public void clearInventory(Player player) { player.getInventory().clear(); + // Clear the 2x2 crafting grid slots (indices 1-4 of the player's open inventory) + for (int i = 1; i <= 4; i++) + player.getOpenInventory().setItem(i, null); + // Clear any item held on the cursor + player.setItemOnCursor(null); } public void setCollidesWithEntities(Player player, boolean bool) { From 319837b66c371d6a953b92a04a3d7f59b2bbcb75 Mon Sep 17 00:00:00 2001 From: MISHA <208148594+lokspel@users.noreply.github.com> Date: Thu, 12 Mar 2026 13:59:20 +0400 Subject: [PATCH 06/38] feat: replace right-click duel with sword-to-duel mechanic (#316) --- .../manager/inventory/InventoryListener.java | 36 ++++++++++++------- core/src/main/resources/1.8.8/config.yml | 4 +-- core/src/main/resources/modern/config.yml | 4 +-- 3 files changed, 27 insertions(+), 17 deletions(-) diff --git a/core/src/main/java/dev/nandi0813/practice/manager/inventory/InventoryListener.java b/core/src/main/java/dev/nandi0813/practice/manager/inventory/InventoryListener.java index a94d3cad..0aef9e6d 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/inventory/InventoryListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/inventory/InventoryListener.java @@ -18,6 +18,7 @@ import org.bukkit.event.block.Action; import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockPlaceEvent; +import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.FoodLevelChangeEvent; import org.bukkit.event.inventory.InventoryClickEvent; @@ -104,25 +105,34 @@ public void onPlayerInteractWithEntity(PlayerInteractEntityEvent e) { checkInventoryInvItem.handleClickEvent(player, target); } } - return; } + } + + // Sword-to-duel: when in lobby, hitting a player with the unranked sword sends a duel request + // Only triggers when the player is holding the unranked item + @EventHandler + public void onPlayerAttackEntity(EntityDamageByEntityEvent e) { + if (!(e.getDamager() instanceof Player player)) return; + if (!(e.getEntity() instanceof Player target)) return; - // Right-click-to-duel: when in lobby, right-clicking a player sends a duel request - // Only triggers when the player is holding the unranked item - if (ConfigManager.getBoolean("MATCH-SETTINGS.DUEL.RIGHT-CLICK-TO-DUEL") + Profile profile = ProfileManager.getInstance().getProfile(player); + + if (ConfigManager.getBoolean("MATCH-SETTINGS.DUEL.SWORD-TO-DUEL") && profile.getStatus().equals(ProfileStatus.LOBBY) && !profile.isParty() && player.hasPermission("zpp.duel")) { + Inventory inventory = InventoryManager.getInstance().getPlayerInventory(player); - if (inventory != null) { - ItemStack itemInHand = ClassImport.getClasses().getPlayerUtil().getPlayerMainHand(player); - if (itemInHand != null && itemInHand.getType() != Material.AIR && itemInHand.hasItemMeta()) { - InvItem heldInvItem = inventory.getInvItem(itemInHand.getItemMeta().getDisplayName(), itemInHand.getType()); - if (heldInvItem instanceof dev.nandi0813.practice.manager.inventory.inventoryitem.lobbyitems.UnrankedInvItem) { - player.performCommand("duel " + target.getName()); - } - } - } + if (inventory == null) return; + ItemStack itemInHand = ClassImport.getClasses().getPlayerUtil().getPlayerMainHand(player); + if (itemInHand == null || itemInHand.getType() == Material.AIR || !itemInHand.hasItemMeta()) return; + + InvItem heldInvItem = inventory.getInvItem(itemInHand.getItemMeta().getDisplayName(), itemInHand.getType()); + if (!(heldInvItem instanceof dev.nandi0813.practice.manager.inventory.inventoryitem.lobbyitems.UnrankedInvItem)) + return; + + e.setCancelled(true); + player.performCommand("duel " + target.getName()); } } diff --git a/core/src/main/resources/1.8.8/config.yml b/core/src/main/resources/1.8.8/config.yml index 7d49d82d..f753cc80 100644 --- a/core/src/main/resources/1.8.8/config.yml +++ b/core/src/main/resources/1.8.8/config.yml @@ -1,4 +1,4 @@ -VERSION: 17 +VERSION: 18 # Mysql database setup. MYSQL-DATABASE: @@ -192,7 +192,7 @@ MATCH-SETTINGS: - "REGENERATION::20::2" REMOVE-EMPTY-BOTTLE: true # Removes empty potion bottles after the player use it. DUEL: - RIGHT-CLICK-TO-DUEL: true # When enabled, players can right-click another player in the lobby to send them a duel request. + SWORD-TO-DUEL: true # When enabled, hitting a player with the unranked sword in the lobby sends a duel request. INVITATION-EXPIRY: 60 # After the seconds, the duel request will expire. ROUND-SELECTOR: MAX: 10 diff --git a/core/src/main/resources/modern/config.yml b/core/src/main/resources/modern/config.yml index 42840ddf..175ad310 100644 --- a/core/src/main/resources/modern/config.yml +++ b/core/src/main/resources/modern/config.yml @@ -1,4 +1,4 @@ -VERSION: 17 +VERSION: 18 # Mysql database setup. MYSQL-DATABASE: @@ -195,7 +195,7 @@ MATCH-SETTINGS: - "REGENERATION::20::2" REMOVE-EMPTY-BOTTLE: true # Removes empty potion bottles after the player use it. DUEL: - RIGHT-CLICK-TO-DUEL: true # When enabled, players can right-click another player in the lobby to send them a duel request. + SWORD-TO-DUEL: true # When enabled, hitting a player with the unranked sword in the lobby sends a duel request. INVITATION-EXPIRY: 60 # After the seconds, the duel request will expire. ROUND-SELECTOR: MAX: 10 From 9ce544b2208e9fe5875f283cb81889ccb59fa296 Mon Sep 17 00:00:00 2001 From: MISHA <208148594+lokspel@users.noreply.github.com> Date: Fri, 13 Mar 2026 13:23:03 +0400 Subject: [PATCH 07/38] fix: lobby visibility toggle without rejoin; validate liquid placement using block face (#319) --- .../nandi0813/practice/listener/PlayerInteract.java | 12 +----------- .../practice/manager/fight/ffa/FFAListener.java | 2 +- .../fight/match/listener/LadderTypeListener.java | 2 +- .../practice/util/entityhider/PlayerHider.java | 2 +- 4 files changed, 4 insertions(+), 14 deletions(-) diff --git a/core/src/main/java/dev/nandi0813/practice/listener/PlayerInteract.java b/core/src/main/java/dev/nandi0813/practice/listener/PlayerInteract.java index 75c323d5..c867d094 100644 --- a/core/src/main/java/dev/nandi0813/practice/listener/PlayerInteract.java +++ b/core/src/main/java/dev/nandi0813/practice/listener/PlayerInteract.java @@ -75,14 +75,4 @@ public void onPlayerSleep(PlayerInteractEvent e) { public void onPlayerSleep(PlayerBedEnterEvent e) { e.setCancelled(true); } - - @EventHandler - public void enderPearlTpFix(PlayerTeleportEvent e) { - if (e.getCause().equals(PlayerTeleportEvent.TeleportCause.ENDER_PEARL)) { - e.getTo().setX(Math.floor(e.getTo().getX()) + 0.5f); - e.getTo().setY(Math.floor(e.getTo().getY()) + 0.5f); - e.getTo().setZ(Math.floor(e.getTo().getZ()) + 0.5f); - } - } - -} +} \ No newline at end of file diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/FFAListener.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/FFAListener.java index ed13c340..1935139c 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/FFAListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/FFAListener.java @@ -302,7 +302,7 @@ public void onBucketEmpty(PlayerBucketEmptyEvent e) { return; } - if (block.getLocation().getY() >= ListenerUtil.getCalculatedBuildLimit(ffa.getArena())) { + if (block.getRelative(e.getBlockFace()).getLocation().getY() >= ListenerUtil.getCalculatedBuildLimit(ffa.getArena())) { Common.sendMMMessage(player, LanguageManager.getString("FFA.GAME.CANT-BUILD-OVER-LIMIT")); e.setCancelled(true); } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/listener/LadderTypeListener.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/listener/LadderTypeListener.java index 66592afb..285610e4 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/listener/LadderTypeListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/listener/LadderTypeListener.java @@ -327,7 +327,7 @@ public void onBucketEmpty(PlayerBucketEmptyEvent e) { return; } - if (!isWithinBuildLimits(block, match, player)) { + if (!isWithinBuildLimits(block.getRelative(e.getBlockFace()), match, player)) { e.setCancelled(true); return; } diff --git a/core/src/main/java/dev/nandi0813/practice/util/entityhider/PlayerHider.java b/core/src/main/java/dev/nandi0813/practice/util/entityhider/PlayerHider.java index 0c42306e..f9178eb6 100644 --- a/core/src/main/java/dev/nandi0813/practice/util/entityhider/PlayerHider.java +++ b/core/src/main/java/dev/nandi0813/practice/util/entityhider/PlayerHider.java @@ -157,7 +157,7 @@ public void onSpectatingStart(MatchSpectateStartEvent e) { public void toggleLobbyVisibility(Player player) { Profile profile = ProfileManager.getInstance().getProfile(player); - if (ServerManager.getInstance().getInWorld().get(player).equals(WorldEnum.LOBBY)) + if (!ServerManager.getInstance().getInWorld().get(player).equals(WorldEnum.LOBBY)) return; for (Player online : ServerManager.getInstance().getInWorld().keySet()) { From 80fe88bc14761479095d1a58e43ce6183d85dd01 Mon Sep 17 00:00:00 2001 From: MISHA <208148594+lokspel@users.noreply.github.com> Date: Sun, 15 Mar 2026 11:48:05 +0400 Subject: [PATCH 08/38] fix(chat): escape MiniMessage tags in player messages (#321) * fix(chat): escape MiniMessage tags in player messages * fix(chat): escape MiniMessage tags in player messages --- .../nandi0813/practice_1_8_8/listener/PlayerChatListener.java | 3 ++- .../practice_modern/listener/PlayerChatListener.java | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/listener/PlayerChatListener.java b/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/listener/PlayerChatListener.java index dee256a8..ca49bd79 100644 --- a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/listener/PlayerChatListener.java +++ b/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/listener/PlayerChatListener.java @@ -1,5 +1,6 @@ package dev.nandi0813.practice_1_8_8.listener; +import dev.nandi0813.practice.ZonePractice; import dev.nandi0813.practice.manager.backend.ConfigManager; import dev.nandi0813.practice.manager.backend.LanguageManager; import dev.nandi0813.practice.manager.party.Party; @@ -23,7 +24,7 @@ public void onPlayerChat(AsyncPlayerChatEvent e) { Player player = e.getPlayer(); Profile profile = ProfileManager.getInstance().getProfile(player); Party party = PartyManager.getInstance().getParty(player); - String message = e.getMessage(); + String message = ZonePractice.getMiniMessage().escapeTags(e.getMessage()); // --- Party chat --- if (ConfigManager.getBoolean("CHAT.PARTY-CHAT-ENABLED") && profile.isParty() && party != null && message.startsWith("@")) { diff --git a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/listener/PlayerChatListener.java b/spigot_modern/src/main/java/dev/nandi0813/practice_modern/listener/PlayerChatListener.java index 7763c78e..6ddf925c 100644 --- a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/listener/PlayerChatListener.java +++ b/spigot_modern/src/main/java/dev/nandi0813/practice_modern/listener/PlayerChatListener.java @@ -30,7 +30,9 @@ public void onPlayerChat(AsyncChatEvent e) { Player player = e.getPlayer(); Profile profile = ProfileManager.getInstance().getProfile(player); Party party = PartyManager.getInstance().getParty(player); - String message = PlainTextComponentSerializer.plainText().serialize(e.message()); + String message = ZonePractice.getMiniMessage().escapeTags( + PlainTextComponentSerializer.plainText().serialize(e.message()) + ); // --- Party chat --- if (ConfigManager.getBoolean("CHAT.PARTY-CHAT-ENABLED") && profile.isParty() && party != null && message.startsWith("@")) { From 183f1224b483459edbb0a7f3a26b80f5c7ba2afa Mon Sep 17 00:00:00 2001 From: Nandor Dukat Date: Sun, 15 Mar 2026 09:03:49 +0100 Subject: [PATCH 09/38] removed old 1.8 version support --- core/pom.xml | 50 +- .../dev/nandi0813/practice/ZonePractice.java | 20 +- .../command/arena/arguments/Set/IconArg.java | 3 +- .../event/arguments/Events/BracketsArg.java | 3 +- .../event/arguments/Events/JuggernautArg.java | 3 +- .../event/arguments/Events/LMSArg.java | 3 +- .../event/arguments/Events/SumoArg.java | 3 +- .../command/ladder/arguments/IconArg.java | 3 +- .../command/practice/arguments/ArenasArg.java | 3 +- .../practice/listener/PlayerInteract.java | 3 +- .../practice/manager/arena/ArenaType.java | 3 +- .../manager/arena/arenas/ArenaCopy.java | 4 +- .../arena/arenas/interfaces/BasicArena.java | 4 +- .../arena/setup/ArenaSetupListener.java | 4 +- .../arena/setup/SpawnMarkerManager.java | 16 +- .../manager/arena/util/ArenaUtil.java | 111 +- .../manager/arena/util/ArenaWorldUtil.java | 5 +- .../manager/arena/util/PortalLocation.java | 5 +- .../practice/manager/backend/BackendUtil.java | 94 +- .../practice/manager/duel/DuelRequest.java | 5 +- .../fight/belowname/BelowNameManager.java | 3 +- .../manager/fight/event/EventListener.java | 3 +- .../manager/fight/event/enums/EventType.java | 16 +- .../events/duel/brackets/BracketsData.java | 5 +- .../duel/brackets/BracketsListener.java | 6 +- .../fight/event/events/duel/sumo/Sumo.java | 5 +- .../event/events/duel/sumo/SumoData.java | 5 +- .../event/events/duel/sumo/SumoListener.java | 9 +- .../fight/event/events/ffa/lms/LMS.java | 2 +- .../fight/event/events/ffa/lms/LMSData.java | 5 +- .../event/events/ffa/oitc/OITCListener.java | 3 +- .../fight/event/events/ffa/splegg/Splegg.java | 3 +- .../events/ffa/splegg/SpleggListener.java | 10 +- .../onevsall/juggernaut/Juggernaut.java | 2 +- .../onevsall/juggernaut/JuggernautData.java | 7 +- .../event/events/onevsall/tnttag/TNTTag.java | 6 +- .../event/setup/EventSpawnMarkerManager.java | 4 +- .../manager/fight/ffa/FFAListener.java | 92 +- .../fight/listener/BuildBlockListener.java | 13 +- .../practice/manager/fight/match/Match.java | 11 +- .../practice/manager/fight/match/Round.java | 6 +- .../match/listener/LadderTypeListener.java | 241 +- .../match/listener/MatchEventListener.java | 4 +- .../manager/fight/match/type/duel/Duel.java | 9 +- .../fight/match/type/partyffa/PartyFFA.java | 7 +- .../playersvsplayers/PlayersVsPlayers.java | 11 +- .../manager/fight/match/util/KitUtil.java | 16 +- .../fight/match/util/MatchPlayerUtil.java | 3 +- .../manager/fight/util/BlockUtil.java | 6 +- .../manager/fight/util/Stats/Statistic.java | 2 +- .../practice/manager/gui/GUIItem.java | 10 +- .../practice/manager/gui/GUIManager.java | 4 +- .../gui/guis/arena/ArenaCreateGui.java | 4 +- .../premadecustom/CustomLadderEditorGui.java | 29 +- .../CustomLadderSelectorGui.java | 2 +- .../premadecustom/CustomLadderSumGui.java | 5 +- .../gui/guis/ladder/LadderCreateGui.java | 4 +- .../gui/guis/ladder/LadderPreviewGui.java | 2 +- .../gui/guis/leaderboard/LbGuiUtil.java | 19 +- .../gui/guis/party/OtherPartiesGui.java | 5 +- .../gui/guis/profile/ProfileLadderStats.java | 10 +- .../gui/guis/profile/ProfileSetupGui.java | 7 +- .../gui/guis/selectors/ArenaSelectorGui.java | 4 +- .../gui/guis/selectors/LadderSelectorGui.java | 4 +- .../gui/setup/arena/ArenaSetupUtil.java | 6 +- .../arena/arenasettings/normal/CopyGui.java | 3 +- .../gui/setup/event/EventSetupUtil.java | 4 +- .../ladder/laddersettings/InventoryGui.java | 23 +- .../practice/manager/inventory/Inventory.java | 3 +- .../manager/inventory/InventoryListener.java | 5 +- .../manager/inventory/InventoryManager.java | 3 +- .../manager/inventory/InventoryUtil.java | 3 +- .../manager/ladder/abstraction/Ladder.java | 7 +- .../abstraction/interfaces/TempBuild.java | 15 +- .../ladder/abstraction/normal/BedFight.java | 4 +- .../abstraction/normal/PortalFight.java | 13 +- .../manager/ladder/enums/LadderType.java | 13 +- .../handlers/GoldenAppleSettingHandler.java | 3 +- .../handlers/HitDelaySettingHandler.java | 3 +- .../practice/manager/ladder/type/BedWars.java | 12 +- .../manager/ladder/type/FireballFight.java | 30 +- .../practice/manager/ladder/type/SkyWars.java | 4 +- .../practice/manager/ladder/type/Spleef.java | 12 +- .../practice/manager/ladder/type/Sumo.java | 7 +- .../hologram/ArmorStandFactory.java | 4 +- .../practice/manager/nametag/FakeTeam.java | 9 +- .../manager/nametag/NametagManager.java | 3 +- .../manager/nametag/TabIntegration.java | 5 +- .../practice/manager/playerkit/KitItems.java | 30 +- .../manager/playerkit/PlayerKitUtil.java | 6 +- .../manager/playerkit/StaticItems.java | 6 +- .../manager/playerkit/guis/MainGUI.java | 3 +- .../manager/playerkit/items/KitItem.java | 8 +- .../practice/manager/profile/Profile.java | 5 +- .../practice/manager/queue/QueueManager.java | 3 +- .../queue/runnables/SearchRunnable.java | 2 +- .../manager/server/ServerManager.java | 3 +- .../manager/sidebar/adapter/AdapterUtil.java | 7 +- .../practice/module/interfaces/ArenaUtil.java | 31 - .../practice/module/interfaces/BedUtil.java | 37 - .../module/interfaces/ChangedBlock.java | 57 - .../module/interfaces/ConfigItemProvider.java | 21 - .../interfaces/ItemCooldownHandler.java | 101 - .../module/interfaces/ItemCreateUtil.java | 63 - .../module/interfaces/ItemMaterialUtil.java | 50 - .../module/interfaces/LadderUtil.java | 26 - .../interfaces/PlayerHiderInterface.java | 11 - .../module/interfaces/PlayerUtil.java | 61 - .../module/interfaces/StatisticListener.java | 87 - .../module/interfaces/WorldCreate.java | 9 - .../practice/module/util/ClassImport.java | 139 - .../practice/module/util/Classes.java | 39 - .../actionbar => moved}/ActionBar.java | 19 +- .../ActionBarRunnable.java | 2 +- .../ArenaCopyUtilListener.java} | 54 +- .../practice/moved}/ArenaListener.java | 2 +- .../nandi0813/practice/moved}/BedUtil.java | 31 +- .../BuildListener.java} | 92 +- .../practice/moved}/ChangedBlock.java | 51 +- .../practice/moved}/EPCountdownListener.java | 7 +- .../interfaces => moved}/EntityHider.java | 21 +- .../nandi0813/practice/moved}/FaweUtil.java | 2 +- .../nandi0813/practice/moved}/FightUtil.java | 2 +- .../FireworkRocketCooldownListener.java | 7 +- .../practice/moved}/ItemCreateUtil.java | 89 +- .../practice/moved/ItemOffHandListener.java | 4 +- .../{module/interfaces => moved}/KitData.java | 40 +- .../nandi0813/practice/moved}/LadderUtil.java | 24 +- .../moved}/ModernItemCooldownHandler.java | 26 +- .../practice/moved}/PlayerChatListener.java | 2 +- .../nandi0813/practice/moved}/PlayerUtil.java | 58 +- .../practice/moved}/StatisticListener.java | 69 +- .../util => moved}/VersionChecker.java | 21 +- .../VersionNotSupportedException.java | 2 +- .../dev/nandi0813/practice/util/Cuboid.java | 90 - .../nandi0813/practice/util/SaveResource.java | 137 +- .../util/entityhider/PlayerHider.java | 17 +- .../fightmapchange/FightChangeOptimized.java | 2 +- .../practice/util/interfaces/Spectatable.java | 2 +- .../practice/util/playerutil/PlayerUtil.java | 5 +- .../util/playerutil/ProfileStatData.java | 2 +- core/src/main/resources/1.8.8/config.yml | 520 --- core/src/main/resources/1.8.8/divisions.yml | 279 -- core/src/main/resources/1.8.8/guis.yml | 2894 ----------------- core/src/main/resources/1.8.8/inventories.yml | 249 -- .../main/resources/1.8.8/ladders/archer.yml | 52 - core/src/main/resources/1.8.8/ladders/axe.yml | 74 - .../resources/1.8.8/ladders/battlerush.yml | 58 - .../main/resources/1.8.8/ladders/bedwars.yml | 58 - .../main/resources/1.8.8/ladders/boxing.yml | 109 - .../main/resources/1.8.8/ladders/bridges.yml | 71 - .../main/resources/1.8.8/ladders/builduhc.yml | 87 - .../main/resources/1.8.8/ladders/combo.yml | 83 - .../main/resources/1.8.8/ladders/debuff.yml | 129 - .../main/resources/1.8.8/ladders/fireball.yml | 77 - .../main/resources/1.8.8/ladders/gapple.yml | 89 - .../main/resources/1.8.8/ladders/nodebuff.yml | 129 - .../resources/1.8.8/ladders/pearlfight.yml | 53 - core/src/main/resources/1.8.8/ladders/sg.yml | 54 - .../main/resources/1.8.8/ladders/skywars.yml | 142 - .../src/main/resources/1.8.8/ladders/soup.yml | 94 - .../main/resources/1.8.8/ladders/spleef.yml | 76 - .../src/main/resources/1.8.8/ladders/sumo.yml | 32 - .../main/resources/1.8.8/ladders/vanilla.yml | 126 - core/src/main/resources/1.8.8/playerkit.yml | 635 ---- .../main/resources/{modern => }/config.yml | 0 .../main/resources/{modern => }/divisions.yml | 0 core/src/main/resources/{modern => }/guis.yml | 0 .../resources/{modern => }/inventories.yml | 0 .../resources/{modern => }/ladders/archer.yml | 0 .../resources/{modern => }/ladders/axe.yml | 0 .../{modern => }/ladders/battlerush.yml | 0 .../{modern => }/ladders/bedwars.yml | 0 .../resources/{modern => }/ladders/boxing.yml | 0 .../{modern => }/ladders/bridges.yml | 0 .../{modern => }/ladders/builduhc.yml | 0 .../{modern => }/ladders/crystal.yml | 0 .../resources/{modern => }/ladders/debuff.yml | 0 .../{modern => }/ladders/fireball.yml | 0 .../resources/{modern => }/ladders/gapple.yml | 0 .../resources/{modern => }/ladders/mace.yml | 0 .../{modern => }/ladders/nodebuff.yml | 0 .../{modern => }/ladders/pearlfight.yml | 0 .../resources/{modern => }/ladders/sg.yml | 0 .../{modern => }/ladders/skywars.yml | 0 .../resources/{modern => }/ladders/soup.yml | 0 .../resources/{modern => }/ladders/spear.yml | 0 .../resources/{modern => }/ladders/spleef.yml | 0 .../resources/{modern => }/ladders/sumo.yml | 0 .../{modern => }/ladders/vanilla.yml | 0 .../main/resources/{modern => }/playerkit.yml | 0 distribution/pom.xml | 14 - pom.xml | 2 - spigot_1_8_8/pom.xml | 32 - .../dev/nandi0813/practice_1_8_8/Classes.java | 51 - .../practice_1_8_8/EPCountdownListener.java | 66 - .../cooldown/EnderPearlRunnable.java | 18 - .../cooldown/FireballRunnable.java | 68 - .../cooldown/FireworkRocketRunnable.java | 18 - .../cooldown/GoldenAppleRunnable.java | 58 - .../practice_1_8_8/interfaces/ActionBar.java | 40 - .../interfaces/ArenaCopyUtil.java | 41 - .../practice_1_8_8/interfaces/ArenaUtil.java | 123 - .../practice_1_8_8/interfaces/BedUtil.java | 111 - .../interfaces/BuildListener.java | 15 - .../interfaces/ChangedBlock.java | 92 - .../interfaces/EntityHider.java | 51 - .../interfaces/ItemCreateUtil.java | 103 - .../interfaces/ItemMaterialUtil.java | 124 - .../practice_1_8_8/interfaces/KitData.java | 43 - .../practice_1_8_8/interfaces/LadderUtil.java | 125 - .../interfaces/LegacyConfigItemProvider.java | 97 - .../interfaces/LegacyItemCooldownHandler.java | 158 - .../interfaces/PlayerHiderUtil.java | 32 - .../practice_1_8_8/interfaces/PlayerUtil.java | 233 -- .../interfaces/StatisticListener.java | 156 - .../interfaces/WorldCreate.java | 17 - .../listener/ArenaListener.java | 21 - .../practice_1_8_8/listener/FFAListener.java | 84 - .../listener/MatchListener.java | 135 - .../listener/PlayerChatListener.java | 80 - spigot_modern/pom.xml | 85 - .../nandi0813/practice_modern/Classes.java | 52 - .../practice_modern/interfaces/ActionBar.java | 29 - .../interfaces/ArenaCopy/ArenaCopyUtil.java | 59 - .../practice_modern/interfaces/ArenaUtil.java | 113 - .../interfaces/BuildListener.java | 86 - .../interfaces/EntityHider.java | 33 - .../interfaces/ItemMaterialUtil.java | 124 - .../practice_modern/interfaces/KitData.java | 45 - .../interfaces/ModernConfigItemProvider.java | 91 - .../interfaces/PlayerHiderUtil.java | 32 - .../interfaces/WorldCreate.java | 18 - .../practice_modern/listener/FFAListener.java | 88 - .../listener/MatchListener.java | 245 -- 235 files changed, 1304 insertions(+), 11022 deletions(-) delete mode 100644 core/src/main/java/dev/nandi0813/practice/module/interfaces/ArenaUtil.java delete mode 100644 core/src/main/java/dev/nandi0813/practice/module/interfaces/BedUtil.java delete mode 100644 core/src/main/java/dev/nandi0813/practice/module/interfaces/ChangedBlock.java delete mode 100644 core/src/main/java/dev/nandi0813/practice/module/interfaces/ConfigItemProvider.java delete mode 100644 core/src/main/java/dev/nandi0813/practice/module/interfaces/ItemCooldownHandler.java delete mode 100644 core/src/main/java/dev/nandi0813/practice/module/interfaces/ItemCreateUtil.java delete mode 100644 core/src/main/java/dev/nandi0813/practice/module/interfaces/ItemMaterialUtil.java delete mode 100644 core/src/main/java/dev/nandi0813/practice/module/interfaces/LadderUtil.java delete mode 100644 core/src/main/java/dev/nandi0813/practice/module/interfaces/PlayerHiderInterface.java delete mode 100644 core/src/main/java/dev/nandi0813/practice/module/interfaces/PlayerUtil.java delete mode 100644 core/src/main/java/dev/nandi0813/practice/module/interfaces/StatisticListener.java delete mode 100644 core/src/main/java/dev/nandi0813/practice/module/interfaces/WorldCreate.java delete mode 100644 core/src/main/java/dev/nandi0813/practice/module/util/ClassImport.java delete mode 100644 core/src/main/java/dev/nandi0813/practice/module/util/Classes.java rename core/src/main/java/dev/nandi0813/practice/{module/interfaces/actionbar => moved}/ActionBar.java (83%) rename core/src/main/java/dev/nandi0813/practice/{module/interfaces/actionbar => moved}/ActionBarRunnable.java (91%) rename core/src/main/java/dev/nandi0813/practice/{module/interfaces/ArenaCopyUtil.java => moved/ArenaCopyUtilListener.java} (88%) rename {spigot_modern/src/main/java/dev/nandi0813/practice_modern/listener => core/src/main/java/dev/nandi0813/practice/moved}/ArenaListener.java (96%) rename {spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces => core/src/main/java/dev/nandi0813/practice/moved}/BedUtil.java (78%) rename core/src/main/java/dev/nandi0813/practice/{module/interfaces/AbstractBuildListener.java => moved/BuildListener.java} (90%) rename {spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces => core/src/main/java/dev/nandi0813/practice/moved}/ChangedBlock.java (64%) rename {spigot_modern/src/main/java/dev/nandi0813/practice_modern/listener => core/src/main/java/dev/nandi0813/practice/moved}/EPCountdownListener.java (93%) rename core/src/main/java/dev/nandi0813/practice/{module/interfaces => moved}/EntityHider.java (92%) rename {spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/ArenaCopy => core/src/main/java/dev/nandi0813/practice/moved}/FaweUtil.java (97%) rename {spigot_modern/src/main/java/dev/nandi0813/practice_modern/listener => core/src/main/java/dev/nandi0813/practice/moved}/FightUtil.java (97%) rename {spigot_modern/src/main/java/dev/nandi0813/practice_modern/listener => core/src/main/java/dev/nandi0813/practice/moved}/FireworkRocketCooldownListener.java (88%) rename {spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces => core/src/main/java/dev/nandi0813/practice/moved}/ItemCreateUtil.java (53%) rename spigot_modern/src/main/java/dev/nandi0813/practice_modern/modern_version/ItemOffHand.java => core/src/main/java/dev/nandi0813/practice/moved/ItemOffHandListener.java (87%) rename core/src/main/java/dev/nandi0813/practice/{module/interfaces => moved}/KitData.java (81%) rename {spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces => core/src/main/java/dev/nandi0813/practice/moved}/LadderUtil.java (87%) rename {spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces => core/src/main/java/dev/nandi0813/practice/moved}/ModernItemCooldownHandler.java (80%) rename {spigot_modern/src/main/java/dev/nandi0813/practice_modern/listener => core/src/main/java/dev/nandi0813/practice/moved}/PlayerChatListener.java (98%) rename {spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces => core/src/main/java/dev/nandi0813/practice/moved}/PlayerUtil.java (80%) rename {spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces => core/src/main/java/dev/nandi0813/practice/moved}/StatisticListener.java (71%) rename core/src/main/java/dev/nandi0813/practice/{module/util => moved}/VersionChecker.java (72%) rename core/src/main/java/dev/nandi0813/practice/{module => moved}/VersionNotSupportedException.java (90%) delete mode 100644 core/src/main/resources/1.8.8/config.yml delete mode 100644 core/src/main/resources/1.8.8/divisions.yml delete mode 100644 core/src/main/resources/1.8.8/guis.yml delete mode 100644 core/src/main/resources/1.8.8/inventories.yml delete mode 100644 core/src/main/resources/1.8.8/ladders/archer.yml delete mode 100644 core/src/main/resources/1.8.8/ladders/axe.yml delete mode 100644 core/src/main/resources/1.8.8/ladders/battlerush.yml delete mode 100644 core/src/main/resources/1.8.8/ladders/bedwars.yml delete mode 100644 core/src/main/resources/1.8.8/ladders/boxing.yml delete mode 100644 core/src/main/resources/1.8.8/ladders/bridges.yml delete mode 100644 core/src/main/resources/1.8.8/ladders/builduhc.yml delete mode 100644 core/src/main/resources/1.8.8/ladders/combo.yml delete mode 100644 core/src/main/resources/1.8.8/ladders/debuff.yml delete mode 100644 core/src/main/resources/1.8.8/ladders/fireball.yml delete mode 100644 core/src/main/resources/1.8.8/ladders/gapple.yml delete mode 100644 core/src/main/resources/1.8.8/ladders/nodebuff.yml delete mode 100644 core/src/main/resources/1.8.8/ladders/pearlfight.yml delete mode 100644 core/src/main/resources/1.8.8/ladders/sg.yml delete mode 100644 core/src/main/resources/1.8.8/ladders/skywars.yml delete mode 100644 core/src/main/resources/1.8.8/ladders/soup.yml delete mode 100644 core/src/main/resources/1.8.8/ladders/spleef.yml delete mode 100644 core/src/main/resources/1.8.8/ladders/sumo.yml delete mode 100644 core/src/main/resources/1.8.8/ladders/vanilla.yml delete mode 100644 core/src/main/resources/1.8.8/playerkit.yml rename core/src/main/resources/{modern => }/config.yml (100%) rename core/src/main/resources/{modern => }/divisions.yml (100%) rename core/src/main/resources/{modern => }/guis.yml (100%) rename core/src/main/resources/{modern => }/inventories.yml (100%) rename core/src/main/resources/{modern => }/ladders/archer.yml (100%) rename core/src/main/resources/{modern => }/ladders/axe.yml (100%) rename core/src/main/resources/{modern => }/ladders/battlerush.yml (100%) rename core/src/main/resources/{modern => }/ladders/bedwars.yml (100%) rename core/src/main/resources/{modern => }/ladders/boxing.yml (100%) rename core/src/main/resources/{modern => }/ladders/bridges.yml (100%) rename core/src/main/resources/{modern => }/ladders/builduhc.yml (100%) rename core/src/main/resources/{modern => }/ladders/crystal.yml (100%) rename core/src/main/resources/{modern => }/ladders/debuff.yml (100%) rename core/src/main/resources/{modern => }/ladders/fireball.yml (100%) rename core/src/main/resources/{modern => }/ladders/gapple.yml (100%) rename core/src/main/resources/{modern => }/ladders/mace.yml (100%) rename core/src/main/resources/{modern => }/ladders/nodebuff.yml (100%) rename core/src/main/resources/{modern => }/ladders/pearlfight.yml (100%) rename core/src/main/resources/{modern => }/ladders/sg.yml (100%) rename core/src/main/resources/{modern => }/ladders/skywars.yml (100%) rename core/src/main/resources/{modern => }/ladders/soup.yml (100%) rename core/src/main/resources/{modern => }/ladders/spear.yml (100%) rename core/src/main/resources/{modern => }/ladders/spleef.yml (100%) rename core/src/main/resources/{modern => }/ladders/sumo.yml (100%) rename core/src/main/resources/{modern => }/ladders/vanilla.yml (100%) rename core/src/main/resources/{modern => }/playerkit.yml (100%) delete mode 100644 spigot_1_8_8/pom.xml delete mode 100644 spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/Classes.java delete mode 100644 spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/EPCountdownListener.java delete mode 100644 spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/cooldown/EnderPearlRunnable.java delete mode 100644 spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/cooldown/FireballRunnable.java delete mode 100644 spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/cooldown/FireworkRocketRunnable.java delete mode 100644 spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/cooldown/GoldenAppleRunnable.java delete mode 100644 spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/ActionBar.java delete mode 100644 spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/ArenaCopyUtil.java delete mode 100644 spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/ArenaUtil.java delete mode 100644 spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/BedUtil.java delete mode 100644 spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/BuildListener.java delete mode 100644 spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/ChangedBlock.java delete mode 100644 spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/EntityHider.java delete mode 100644 spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/ItemCreateUtil.java delete mode 100644 spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/ItemMaterialUtil.java delete mode 100644 spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/KitData.java delete mode 100644 spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/LadderUtil.java delete mode 100644 spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/LegacyConfigItemProvider.java delete mode 100644 spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/LegacyItemCooldownHandler.java delete mode 100644 spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/PlayerHiderUtil.java delete mode 100644 spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/PlayerUtil.java delete mode 100644 spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/StatisticListener.java delete mode 100644 spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/WorldCreate.java delete mode 100644 spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/listener/ArenaListener.java delete mode 100644 spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/listener/FFAListener.java delete mode 100644 spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/listener/MatchListener.java delete mode 100644 spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/listener/PlayerChatListener.java delete mode 100644 spigot_modern/pom.xml delete mode 100644 spigot_modern/src/main/java/dev/nandi0813/practice_modern/Classes.java delete mode 100644 spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/ActionBar.java delete mode 100644 spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/ArenaCopy/ArenaCopyUtil.java delete mode 100644 spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/ArenaUtil.java delete mode 100644 spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/BuildListener.java delete mode 100644 spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/EntityHider.java delete mode 100644 spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/ItemMaterialUtil.java delete mode 100644 spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/KitData.java delete mode 100644 spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/ModernConfigItemProvider.java delete mode 100644 spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/PlayerHiderUtil.java delete mode 100644 spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/WorldCreate.java delete mode 100644 spigot_modern/src/main/java/dev/nandi0813/practice_modern/listener/FFAListener.java delete mode 100644 spigot_modern/src/main/java/dev/nandi0813/practice_modern/listener/MatchListener.java diff --git a/core/pom.xml b/core/pom.xml index 94d3bd0b..cf9be514 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -19,8 +19,8 @@ maven-compiler-plugin 3.8.1 - 17 - 17 + 21 + 21 @@ -32,6 +32,27 @@ + + + + enginehub + https://maven.enginehub.org/repo/ + + + + + + + + com.intellectualsites.bom + bom-newest + 1.55 + import + pom + + + + @@ -42,9 +63,9 @@ - org.github.paperspigot - paperspigot-api - 1.8.8-R0.1-SNAPSHOT + io.papermc.paper + paper-api + 1.21.11-R0.1-SNAPSHOT provided @@ -83,6 +104,25 @@ 5.5.0 provided + + + + com.fastasyncworldedit + FastAsyncWorldEdit-Core + provided + + + + com.fastasyncworldedit + FastAsyncWorldEdit-Bukkit + provided + + + FastAsyncWorldEdit-Core + * + + + \ No newline at end of file diff --git a/core/src/main/java/dev/nandi0813/practice/ZonePractice.java b/core/src/main/java/dev/nandi0813/practice/ZonePractice.java index 63fd2879..d9920015 100644 --- a/core/src/main/java/dev/nandi0813/practice/ZonePractice.java +++ b/core/src/main/java/dev/nandi0813/practice/ZonePractice.java @@ -24,6 +24,7 @@ import dev.nandi0813.practice.listener.*; import dev.nandi0813.practice.manager.arena.ArenaListener; import dev.nandi0813.practice.manager.arena.ArenaManager; +import dev.nandi0813.practice.manager.arena.arenas.ArenaCopy; import dev.nandi0813.practice.manager.arena.setup.SpawnMarkerManager; import dev.nandi0813.practice.manager.arena.util.ArenaWorldUtil; import dev.nandi0813.practice.manager.backend.*; @@ -44,8 +45,8 @@ import dev.nandi0813.practice.manager.profile.ProfileManager; import dev.nandi0813.practice.manager.server.ServerManager; import dev.nandi0813.practice.manager.sidebar.SidebarManager; -import dev.nandi0813.practice.module.util.ClassImport; -import dev.nandi0813.practice.module.util.VersionChecker; +import dev.nandi0813.practice.moved.VersionChecker; +import dev.nandi0813.practice.moved.*; import dev.nandi0813.practice.util.*; import dev.nandi0813.practice.util.UpdateChecker; import dev.nandi0813.practice.util.placeholderapi.PlayerExpansion; @@ -74,6 +75,10 @@ public final class ZonePractice extends JavaPlugin { private static BukkitAudiences adventure; @Getter private static MiniMessage miniMessage; + @Getter + private static EntityHider entityHider; + @Getter + private static ArenaCopyUtilListener arenaCopyUtilListener; @Getter private static volatile boolean fullyLoaded = false; @@ -91,6 +96,9 @@ public void onEnable() { instance = this; adventure = BukkitAudiences.create(this); miniMessage = MiniMessage.miniMessage(); + entityHider = new EntityHider(this, EntityHider.Policy.BLACKLIST); + arenaCopyUtilListener = new ArenaCopyUtilListener(); + PacketEvents.getAPI().init(); metrics = new Metrics(this, 16055); @@ -355,7 +363,6 @@ private void loadPlaceholderAPI() { */ private void registerListeners(PluginManager pm) { pm.registerEvents(new BuildBlockListener(), this); - pm.registerEvents(ClassImport.getClasses().getBuildListener(), this); pm.registerEvents(new PlayerPreLogin(), this); pm.registerEvents(new PlayerJoin(), this); @@ -367,6 +374,13 @@ private void registerListeners(PluginManager pm) { pm.registerEvents(new PlayerCommandPreprocess(), this); pm.registerEvents(new EntityDamage(), this); pm.registerEvents(new ArenaListener(), this); + pm.registerEvents(new StatisticListener(), this); + pm.registerEvents(arenaCopyUtilListener, this); + pm.registerEvents(new ItemOffHandListener(), this); + pm.registerEvents(new ArenaListener(), this); + pm.registerEvents(new EPCountdownListener(), this); + pm.registerEvents(new FireworkRocketCooldownListener(), this); + pm.registerEvents(new PlayerChatListener(), this); } } diff --git a/core/src/main/java/dev/nandi0813/practice/command/arena/arguments/Set/IconArg.java b/core/src/main/java/dev/nandi0813/practice/command/arena/arguments/Set/IconArg.java index 60ed8c77..1f356c09 100644 --- a/core/src/main/java/dev/nandi0813/practice/command/arena/arguments/Set/IconArg.java +++ b/core/src/main/java/dev/nandi0813/practice/command/arena/arguments/Set/IconArg.java @@ -6,7 +6,6 @@ import dev.nandi0813.practice.manager.gui.GUIManager; import dev.nandi0813.practice.manager.gui.GUIType; import dev.nandi0813.practice.manager.gui.setup.arena.ArenaGUISetupManager; -import dev.nandi0813.practice.module.util.ClassImport; import dev.nandi0813.practice.util.Common; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -41,7 +40,7 @@ public static void run(Player player, String label, String[] args) { return; } - ItemStack icon = ClassImport.getClasses().getPlayerUtil().getPlayerMainHand(player); + ItemStack icon = dev.nandi0813.practice.moved.PlayerUtil.getPlayerMainHand(player); if (icon == null || icon.getType().equals(Material.AIR)) { Common.sendMMMessage(player, LanguageManager.getString("COMMAND.ARENA.ARGUMENTS.ICON.ICON-IN-HAND")); return; diff --git a/core/src/main/java/dev/nandi0813/practice/command/event/arguments/Events/BracketsArg.java b/core/src/main/java/dev/nandi0813/practice/command/event/arguments/Events/BracketsArg.java index ca51dbd3..26a19312 100644 --- a/core/src/main/java/dev/nandi0813/practice/command/event/arguments/Events/BracketsArg.java +++ b/core/src/main/java/dev/nandi0813/practice/command/event/arguments/Events/BracketsArg.java @@ -1,12 +1,11 @@ package dev.nandi0813.practice.command.event.arguments.Events; -import dev.nandi0813.practice.command.event.arguments.SpawnPointArg; import dev.nandi0813.practice.manager.backend.LanguageManager; import dev.nandi0813.practice.manager.fight.event.EventManager; import dev.nandi0813.practice.manager.fight.event.enums.EventType; import dev.nandi0813.practice.manager.fight.event.events.duel.brackets.BracketsData; import dev.nandi0813.practice.manager.fight.event.util.EventUtil; -import dev.nandi0813.practice.module.interfaces.KitData; +import dev.nandi0813.practice.moved.KitData; import dev.nandi0813.practice.util.Common; import org.bukkit.entity.Player; import org.bukkit.util.StringUtil; diff --git a/core/src/main/java/dev/nandi0813/practice/command/event/arguments/Events/JuggernautArg.java b/core/src/main/java/dev/nandi0813/practice/command/event/arguments/Events/JuggernautArg.java index d14258eb..ccf79281 100644 --- a/core/src/main/java/dev/nandi0813/practice/command/event/arguments/Events/JuggernautArg.java +++ b/core/src/main/java/dev/nandi0813/practice/command/event/arguments/Events/JuggernautArg.java @@ -1,12 +1,11 @@ package dev.nandi0813.practice.command.event.arguments.Events; -import dev.nandi0813.practice.command.event.arguments.SpawnPointArg; import dev.nandi0813.practice.manager.backend.LanguageManager; import dev.nandi0813.practice.manager.fight.event.EventManager; import dev.nandi0813.practice.manager.fight.event.enums.EventType; import dev.nandi0813.practice.manager.fight.event.events.onevsall.juggernaut.JuggernautData; import dev.nandi0813.practice.manager.fight.event.util.EventUtil; -import dev.nandi0813.practice.module.interfaces.KitData; +import dev.nandi0813.practice.moved.KitData; import dev.nandi0813.practice.util.Common; import org.bukkit.entity.Player; import org.bukkit.util.StringUtil; diff --git a/core/src/main/java/dev/nandi0813/practice/command/event/arguments/Events/LMSArg.java b/core/src/main/java/dev/nandi0813/practice/command/event/arguments/Events/LMSArg.java index 909ed9f1..0f3077cd 100644 --- a/core/src/main/java/dev/nandi0813/practice/command/event/arguments/Events/LMSArg.java +++ b/core/src/main/java/dev/nandi0813/practice/command/event/arguments/Events/LMSArg.java @@ -1,12 +1,11 @@ package dev.nandi0813.practice.command.event.arguments.Events; -import dev.nandi0813.practice.command.event.arguments.SpawnPointArg; import dev.nandi0813.practice.manager.backend.LanguageManager; import dev.nandi0813.practice.manager.fight.event.EventManager; import dev.nandi0813.practice.manager.fight.event.enums.EventType; import dev.nandi0813.practice.manager.fight.event.events.ffa.lms.LMSData; import dev.nandi0813.practice.manager.fight.event.util.EventUtil; -import dev.nandi0813.practice.module.interfaces.KitData; +import dev.nandi0813.practice.moved.KitData; import dev.nandi0813.practice.util.Common; import org.bukkit.entity.Player; import org.bukkit.util.StringUtil; diff --git a/core/src/main/java/dev/nandi0813/practice/command/event/arguments/Events/SumoArg.java b/core/src/main/java/dev/nandi0813/practice/command/event/arguments/Events/SumoArg.java index 096e9d85..473d9ab5 100644 --- a/core/src/main/java/dev/nandi0813/practice/command/event/arguments/Events/SumoArg.java +++ b/core/src/main/java/dev/nandi0813/practice/command/event/arguments/Events/SumoArg.java @@ -1,12 +1,11 @@ package dev.nandi0813.practice.command.event.arguments.Events; -import dev.nandi0813.practice.command.event.arguments.SpawnPointArg; import dev.nandi0813.practice.manager.backend.LanguageManager; import dev.nandi0813.practice.manager.fight.event.EventManager; import dev.nandi0813.practice.manager.fight.event.enums.EventType; import dev.nandi0813.practice.manager.fight.event.events.duel.sumo.SumoData; import dev.nandi0813.practice.manager.fight.event.util.EventUtil; -import dev.nandi0813.practice.module.interfaces.KitData; +import dev.nandi0813.practice.moved.KitData; import dev.nandi0813.practice.util.Common; import org.bukkit.entity.Player; import org.bukkit.util.StringUtil; diff --git a/core/src/main/java/dev/nandi0813/practice/command/ladder/arguments/IconArg.java b/core/src/main/java/dev/nandi0813/practice/command/ladder/arguments/IconArg.java index 4d213e6a..92e615c7 100644 --- a/core/src/main/java/dev/nandi0813/practice/command/ladder/arguments/IconArg.java +++ b/core/src/main/java/dev/nandi0813/practice/command/ladder/arguments/IconArg.java @@ -7,7 +7,6 @@ import dev.nandi0813.practice.manager.ladder.LadderManager; import dev.nandi0813.practice.manager.ladder.abstraction.Ladder; import dev.nandi0813.practice.manager.ladder.abstraction.normal.NormalLadder; -import dev.nandi0813.practice.module.util.ClassImport; import dev.nandi0813.practice.util.Common; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -42,7 +41,7 @@ public static void run(Player player, String label, String[] args) { return; } - ItemStack icon = ClassImport.getClasses().getPlayerUtil().getPlayerMainHand(player); + ItemStack icon = dev.nandi0813.practice.moved.PlayerUtil.getPlayerMainHand(player); if (icon == null || icon.getType().equals(Material.AIR)) { Common.sendMMMessage(player, LanguageManager.getString("COMMAND.LADDER.ARGUMENTS.ICON.NO-ITEM").replace("%ladder%", ladder.getDisplayName())); return; diff --git a/core/src/main/java/dev/nandi0813/practice/command/practice/arguments/ArenasArg.java b/core/src/main/java/dev/nandi0813/practice/command/practice/arguments/ArenasArg.java index 560389e7..6a44a0eb 100644 --- a/core/src/main/java/dev/nandi0813/practice/command/practice/arguments/ArenasArg.java +++ b/core/src/main/java/dev/nandi0813/practice/command/practice/arguments/ArenasArg.java @@ -2,7 +2,6 @@ import dev.nandi0813.practice.manager.arena.util.ArenaWorldUtil; import dev.nandi0813.practice.manager.backend.LanguageManager; -import dev.nandi0813.practice.module.util.ClassImport; import dev.nandi0813.practice.util.Common; import org.bukkit.GameMode; import org.bukkit.entity.Player; @@ -16,7 +15,7 @@ public static void run(Player player) { return; } - ClassImport.getClasses().getPlayerUtil().clearInventory(player); + dev.nandi0813.practice.moved.PlayerUtil.clearInventory(player); player.setGameMode(GameMode.CREATIVE); player.setAllowFlight(true); player.setFlying(true); diff --git a/core/src/main/java/dev/nandi0813/practice/listener/PlayerInteract.java b/core/src/main/java/dev/nandi0813/practice/listener/PlayerInteract.java index 75c323d5..3ff593d4 100644 --- a/core/src/main/java/dev/nandi0813/practice/listener/PlayerInteract.java +++ b/core/src/main/java/dev/nandi0813/practice/listener/PlayerInteract.java @@ -3,7 +3,6 @@ import dev.nandi0813.practice.manager.profile.Profile; import dev.nandi0813.practice.manager.profile.ProfileManager; import dev.nandi0813.practice.manager.profile.enums.ProfileStatus; -import dev.nandi0813.practice.module.util.ClassImport; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.entity.Player; @@ -32,7 +31,7 @@ public void onSoup(PlayerInteractEvent e) { if (profile.getStatus().equals(ProfileStatus.MATCH) || profile.getStatus().equals(ProfileStatus.EVENT)) { // Soup listener if (action.equals(Action.RIGHT_CLICK_BLOCK) || action.equals(Action.RIGHT_CLICK_AIR)) { - if (item != null && item.getType().equals(ClassImport.getClasses().getItemMaterialUtil().getMushroomSoup())) { + if (item != null && item.getType().equals(Material.MUSHROOM_STEW)) { int food = player.getFoodLevel(); double health = player.getHealth(); double maxHealth = player.getMaxHealth(); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/arena/ArenaType.java b/core/src/main/java/dev/nandi0813/practice/manager/arena/ArenaType.java index 2e89dea0..5e3a6c0b 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/arena/ArenaType.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/arena/ArenaType.java @@ -1,7 +1,6 @@ package dev.nandi0813.practice.manager.arena; import dev.nandi0813.practice.manager.backend.LanguageManager; -import dev.nandi0813.practice.module.util.ClassImport; import dev.nandi0813.practice.util.Common; import lombok.Getter; import org.bukkit.Material; @@ -12,7 +11,7 @@ public enum ArenaType { BASIC(LanguageManager.getString("ARENA.ARENA-TYPES.BASIC.NAME"), Material.DIAMOND_SWORD, false, LanguageManager.getList("ARENA.ARENA-TYPES.BASIC.DESCRIPTION")), BUILD(LanguageManager.getString("ARENA.ARENA-TYPES.BUILD.NAME"), Material.IRON_PICKAXE, true, LanguageManager.getList("ARENA.ARENA-TYPES.BUILD.DESCRIPTION")), - FFA(LanguageManager.getString("ARENA.ARENA-TYPES.FFA.NAME"), ClassImport.getClasses().getItemMaterialUtil().getGoldSword(), false, LanguageManager.getList("ARENA.ARENA-TYPES.FFA.DESCRIPTION")); + FFA(LanguageManager.getString("ARENA.ARENA-TYPES.FFA.NAME"), Material.GOLDEN_SWORD, false, LanguageManager.getList("ARENA.ARENA-TYPES.FFA.DESCRIPTION")); private final String name; @Getter diff --git a/core/src/main/java/dev/nandi0813/practice/manager/arena/arenas/ArenaCopy.java b/core/src/main/java/dev/nandi0813/practice/manager/arena/arenas/ArenaCopy.java index bf5622ca..81f0e399 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/arena/arenas/ArenaCopy.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/arena/arenas/ArenaCopy.java @@ -1,7 +1,7 @@ package dev.nandi0813.practice.manager.arena.arenas; +import dev.nandi0813.practice.ZonePractice; import dev.nandi0813.practice.manager.arena.arenas.interfaces.NormalArena; -import dev.nandi0813.practice.module.util.ClassImport; import dev.nandi0813.practice.util.Common; import lombok.Getter; @@ -18,7 +18,7 @@ public ArenaCopy(String name, Arena originalArena) { } public void delete() { - ClassImport.getClasses().getArenaCopyUtil().deleteArena(mainArena.getDisplayName(), cuboid); + ZonePractice.getArenaCopyUtilListener().deleteArena(mainArena.getDisplayName(), cuboid); mainArena.getArenaFile().getConfig().set("copies." + name, null); } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/arena/arenas/interfaces/BasicArena.java b/core/src/main/java/dev/nandi0813/practice/manager/arena/arenas/interfaces/BasicArena.java index 55a49464..2f336d17 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/arena/arenas/interfaces/BasicArena.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/arena/arenas/interfaces/BasicArena.java @@ -2,9 +2,9 @@ import dev.nandi0813.practice.ZonePractice; import dev.nandi0813.practice.manager.arena.ArenaManager; +import dev.nandi0813.practice.manager.arena.util.ArenaUtil; import dev.nandi0813.practice.manager.backend.ConfigManager; import dev.nandi0813.practice.manager.backend.LanguageManager; -import dev.nandi0813.practice.module.util.ClassImport; import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.Cuboid; import lombok.Getter; @@ -96,7 +96,7 @@ public boolean teleport(Player player) { public void loadChunks() { if (this.cuboid != null) { Bukkit.getScheduler().runTask(ZonePractice.getInstance(), () -> { - ClassImport.getClasses().getArenaUtil().loadArenaChunks(this); + ArenaUtil.loadArenaChunks(this); if (ArenaManager.LOAD_CHUNKS) { // Collect only chunks that are already loaded — this avoids diff --git a/core/src/main/java/dev/nandi0813/practice/manager/arena/setup/ArenaSetupListener.java b/core/src/main/java/dev/nandi0813/practice/manager/arena/setup/ArenaSetupListener.java index 77dcfa1e..7f9bbeea 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/arena/setup/ArenaSetupListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/arena/setup/ArenaSetupListener.java @@ -12,7 +12,7 @@ import dev.nandi0813.practice.manager.gui.GUIType; import dev.nandi0813.practice.manager.gui.setup.arena.ArenaGUISetupManager; import dev.nandi0813.practice.manager.ladder.enums.LadderType; -import dev.nandi0813.practice.module.util.ClassImport; +import dev.nandi0813.practice.moved.BedUtil; import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.Cuboid; import org.bukkit.Location; @@ -253,7 +253,7 @@ private void handleBedLocations(Player player, Arena arena, Action action, Playe if (isOutsideRegion(player, arena, block.getLocation())) return; - BedLocation bedLocation = ClassImport.getClasses().getBedUtil().getBedLocation(block); + BedLocation bedLocation = BedUtil.getBedLocation(block); if (action == Action.LEFT_CLICK_BLOCK) { arena.setBedLoc1(bedLocation); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/arena/setup/SpawnMarkerManager.java b/core/src/main/java/dev/nandi0813/practice/manager/arena/setup/SpawnMarkerManager.java index 4209e55b..cc9b02eb 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/arena/setup/SpawnMarkerManager.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/arena/setup/SpawnMarkerManager.java @@ -3,9 +3,11 @@ import dev.nandi0813.practice.manager.arena.arenas.Arena; import dev.nandi0813.practice.manager.arena.arenas.FFAArena; import dev.nandi0813.practice.manager.arena.arenas.interfaces.DisplayArena; -import dev.nandi0813.practice.module.util.ClassImport; +import dev.nandi0813.practice.manager.arena.util.ArenaUtil; +import dev.nandi0813.practice.moved.ItemCreateUtil; import lombok.Getter; import org.bukkit.Location; +import org.bukkit.Material; import org.bukkit.entity.ArmorStand; import org.bukkit.entity.EntityType; import org.bukkit.inventory.ItemStack; @@ -112,21 +114,21 @@ private ArmorStand createMarker(Location location, String name) { armorStand.setArms(true); // Make it invulnerable and prevent interaction - ClassImport.getClasses().getArenaUtil().setArmorStandInvulnerable(armorStand); + ArenaUtil.setArmorStandInvulnerable(armorStand); // Give diamond sword to right hand - ItemStack sword = ClassImport.getClasses().getItemMaterialUtil().getSword(); - ClassImport.getClasses().getArenaUtil().setArmorStandItemInHand(armorStand, sword, true); + ItemStack sword = new ItemStack(Material.DIAMOND_SWORD); + ArenaUtil.setArmorStandItemInHand(armorStand, sword, true); // Set arm pose to hold sword naturally (slight angle) armorStand.setRightArmPose(new EulerAngle(Math.toRadians(280), Math.toRadians(10), 0)); // Set player head (Steve head) for helmet - ItemStack playerHead = ClassImport.getClasses().getItemMaterialUtil().getDefaultPlayerHead(); + ItemStack playerHead = new ItemStack(Material.PLAYER_HEAD); armorStand.setHelmet(playerHead); // Set red boots for visibility - ItemStack boots = ClassImport.getClasses().getItemMaterialUtil().getRedBoots(); + ItemStack boots = ItemCreateUtil.getRedBoots(); armorStand.setBoots(boots); // Track this armor stand @@ -154,7 +156,7 @@ private ArmorStand createLabelOnly(Location location, String text) { labelStand.setSmall(true); // Make it small // Make it invulnerable - ClassImport.getClasses().getArenaUtil().setArmorStandInvulnerable(labelStand); + ArenaUtil.setArmorStandInvulnerable(labelStand); // Track this armor stand too markerStandIds.add(labelStand.getUniqueId()); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/arena/util/ArenaUtil.java b/core/src/main/java/dev/nandi0813/practice/manager/arena/util/ArenaUtil.java index 267dabca..d084dc09 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/arena/util/ArenaUtil.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/arena/util/ArenaUtil.java @@ -10,16 +10,19 @@ import dev.nandi0813.practice.manager.fight.ffa.game.FFA; import dev.nandi0813.practice.manager.fight.match.MatchManager; import dev.nandi0813.practice.manager.ladder.abstraction.Ladder; +import dev.nandi0813.practice.manager.ladder.abstraction.normal.NormalLadder; import dev.nandi0813.practice.manager.ladder.enums.LadderType; +import dev.nandi0813.practice.util.BasicItem; import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.NumberUtil; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.World; +import org.bukkit.*; +import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.ArmorStand; import org.bukkit.entity.Player; +import org.bukkit.inventory.EquipmentSlot; +import org.bukkit.inventory.ItemStack; import java.util.ArrayList; import java.util.List; @@ -28,6 +31,14 @@ public enum ArenaUtil { ; + public static World createEmptyWorld(String worldName) { + WorldCreator wc = new WorldCreator(worldName); + wc.type(WorldType.FLAT); + wc.generateStructures(false); + wc.generatorSettings("{\"layers\": [{\"block\": \"air\", \"height\": 1}, {\"block\": \"air\", \"height\": 1}], \"biome\":\"plains\"}"); + return wc.createWorld(); + } + public static Arena getArena(BasicArena arena) { if (arena instanceof ArenaCopy) return ((ArenaCopy) arena).getMainArena(); @@ -192,4 +203,96 @@ public static boolean isArenaPortalRelated(Arena arena) { return assignedLadders.contains(LadderType.BRIDGES) || assignedLadders.contains(LadderType.BATTLE_RUSH); } + public static boolean turnsToDirt(Block block) { + Material type = block.getType(); + return + type.equals(Material.GRASS_BLOCK) || + type.equals(Material.MYCELIUM) || + type.equals(Material.DIRT_PATH) || + type.equals(Material.FARMLAND) || + type.equals(Material.WARPED_NYLIUM); + } + + public static boolean containsDestroyableBlock(Ladder ladder, Block block) { + if (!(ladder instanceof NormalLadder normalLadder)) return false; + + if (!ladder.isBuild()) return false; + if (normalLadder.getDestroyableBlocks().isEmpty()) return false; + if (block == null) return false; + + for (BasicItem basicItem : normalLadder.getDestroyableBlocks()) { + if (block.getType().equals(basicItem.getMaterial())) + return true; + } + return false; + } + + public static boolean requiresSupport(Block block) { + Material type = block.getType(); + return org.bukkit.Tag.FLOWERS.isTagged(type) + || org.bukkit.Tag.SAPLINGS.isTagged(type) + || org.bukkit.Tag.CROPS.isTagged(type) + || org.bukkit.Tag.WALL_POST_OVERRIDE.isTagged(type) // torches, signs on walls, etc. + || type == Material.DEAD_BUSH + || type == Material.SHORT_GRASS + || type == Material.TALL_GRASS + || type == Material.FERN + || type == Material.LARGE_FERN + || type == Material.VINE + || type == Material.SUGAR_CANE + || type == Material.CACTUS + || type == Material.SNOW + || type == Material.TORCH + || type == Material.SOUL_TORCH + || type == Material.REDSTONE_WIRE + || type == Material.REDSTONE_TORCH + || type == Material.LEVER + || type == Material.COMPARATOR + || type == Material.REPEATER + || type == Material.TRIPWIRE_HOOK + || type == Material.TRIPWIRE + || type == Material.LILY_PAD + || type == Material.NETHER_WART; + } + + public static void loadArenaChunks(BasicArena arena) { + if (arena.getCuboid() == null) return; + org.bukkit.World world = arena.getCuboid().getWorld(); + if (world == null) return; + + // Calculate chunk coordinate range directly from the cuboid bounds + // instead of calling getChunks() which synchronously loads all chunks. + int minCX = arena.getCuboid().getLowerX() >> 4; + int maxCX = arena.getCuboid().getUpperX() >> 4; + int minCZ = arena.getCuboid().getLowerZ() >> 4; + int maxCZ = arena.getCuboid().getUpperZ() >> 4; + + org.bukkit.plugin.Plugin plugin = dev.nandi0813.practice.ZonePractice.getInstance(); + for (int cx = minCX; cx <= maxCX; cx++) { + for (int cz = minCZ; cz <= maxCZ; cz++) { + // addPluginChunkTicket loads the chunk asynchronously if needed + // and prevents it from being unloaded — no main-thread stall. + world.addPluginChunkTicket(cx, cz, plugin); + } + } + } + + public static void setArmorStandItemInHand(ArmorStand armorStand, ItemStack item, boolean rightHand) { + if (armorStand == null) return; + + if (rightHand) { + armorStand.setItem(EquipmentSlot.HAND, item); + } else { + armorStand.setItem(EquipmentSlot.OFF_HAND, item); + } + } + + public static void setArmorStandInvulnerable(ArmorStand armorStand) { + if (armorStand == null) return; + armorStand.setInvulnerable(true); + // Make armor stands non-persistent so they don't survive server restarts + // This prevents orphaned armor stands (markers and holograms) from appearing after restart + armorStand.setPersistent(false); + } + } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/arena/util/ArenaWorldUtil.java b/core/src/main/java/dev/nandi0813/practice/manager/arena/util/ArenaWorldUtil.java index 0e598154..2ebf6d56 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/arena/util/ArenaWorldUtil.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/arena/util/ArenaWorldUtil.java @@ -1,6 +1,5 @@ package dev.nandi0813.practice.manager.arena.util; -import dev.nandi0813.practice.module.util.ClassImport; import lombok.Getter; import org.bukkit.Bukkit; import org.bukkit.World; @@ -15,12 +14,12 @@ public enum ArenaWorldUtil { public static void createArenaWorld() { if (arenasWorld == null) { - arenasWorld = ClassImport.getClasses().getWorldCreate().createEmptyWorld("arenas"); + arenasWorld = ArenaUtil.createEmptyWorld("arenas"); ArenaUtil.setGamerules(arenasWorld); } if (arenasCopyWorld == null) { - arenasCopyWorld = ClassImport.getClasses().getWorldCreate().createEmptyWorld("arenas_copy"); + arenasCopyWorld = ArenaUtil.createEmptyWorld("arenas_copy"); ArenaUtil.setGamerules(arenasCopyWorld); } } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/arena/util/PortalLocation.java b/core/src/main/java/dev/nandi0813/practice/manager/arena/util/PortalLocation.java index e6623d61..4707674f 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/arena/util/PortalLocation.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/arena/util/PortalLocation.java @@ -1,6 +1,5 @@ package dev.nandi0813.practice.manager.arena.util; -import dev.nandi0813.practice.module.util.ClassImport; import dev.nandi0813.practice.util.Cuboid; import lombok.Getter; import org.bukkit.Location; @@ -29,10 +28,8 @@ public Location getCenter() { } public void setPortal() { - Material material = ClassImport.getClasses().getItemMaterialUtil().getEndPortal(); - for (Block block : cuboid.getBlocks()) { - block.setType(material); + block.setType(Material.END_PORTAL_FRAME); block.getState().update(); } } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/backend/BackendUtil.java b/core/src/main/java/dev/nandi0813/practice/manager/backend/BackendUtil.java index b3ffbe8d..2a40cc3b 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/backend/BackendUtil.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/backend/BackendUtil.java @@ -1,28 +1,90 @@ package dev.nandi0813.practice.manager.backend; import dev.nandi0813.practice.manager.gui.GUIItem; -import dev.nandi0813.practice.module.util.ClassImport; +import dev.nandi0813.practice.util.Common; +import org.bukkit.Material; import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.ItemFlag; + +import java.util.List; -/** - * Backend utility for loading items from configuration files. - * Delegates to version-specific ConfigItemProvider implementations. - */ public enum BackendUtil { ; - /** - * Creates a GUIItem from a YAML configuration using version-specific logic. - * - *

In 1.8.8: Uses DAMAGE value for item data (colors, variants)

- *

In Modern (1.13+): Ignores DAMAGE and makes items unbreakable to prevent durability bars

- * - * @param config The YAML configuration file - * @param loc The location path in the configuration (e.g., "ITEMS.EXAMPLE_ITEM") - * @return A fully configured GUIItem - */ public static GUIItem getGuiItem(YamlConfiguration config, String loc) { - return ClassImport.getClasses().getConfigItemProvider().getGuiItem(config, loc); + GUIItem guiItem = new GUIItem(); + + if (config.isString(loc + ".NAME")) { + guiItem.setName(config.getString(loc + ".NAME")); + } + + if (config.isString(loc + ".MATERIAL")) { + guiItem.setMaterial(Material.valueOf(config.getString(loc + ".MATERIAL"))); + } + + if (config.isInt(loc + ".AMOUNT")) { + int amount = config.getInt(loc + ".AMOUNT"); + if (amount <= 0 || amount > 64) { + amount = 1; + } + guiItem.setAmount(amount); + } + + if (config.isInt(loc + ".DURABILITY")) { + int durability = config.getInt(loc + ".DURABILITY"); + if (durability < 0) { + durability = 1; + } + guiItem.setDurability(durability); + } + + if (config.isList(loc + ".LORE")) { + guiItem.setLore(config.getStringList(loc + ".LORE")); + } + + if (config.isList(loc + ".FLAGS")) { + List flags = config.getStringList(loc + ".FLAGS"); + for (String flag : flags) { + try { + ItemFlag itemFlag = ItemFlag.valueOf(flag); + guiItem.addItemFlag(itemFlag); + } catch (IllegalArgumentException e) { + Common.sendConsoleMMMessage("Invalid ItemFlag: " + flag); + } + } + } + + // Always add flags to hide unbreakable and attributes for clean lobby items + guiItem.addItemFlag(ItemFlag.HIDE_UNBREAKABLE); + guiItem.addItemFlag(ItemFlag.HIDE_ATTRIBUTES); + + // Set unbreakable to prevent durability bars from showing + guiItem.setUnbreakable(true); + + if (config.isList(loc + ".ENCHANTMENTS")) { + for (String s : config.getStringList(loc + ".ENCHANTMENTS")) { + String[] enchantmentSplit = s.split(":"); + if (enchantmentSplit.length != 2) { + continue; + } + + try { + Enchantment enchantment = Enchantment.getByName(enchantmentSplit[0]); + int level = Integer.parseInt(enchantmentSplit[1]); + + if (enchantment.getStartLevel() > level) { + level = enchantment.getStartLevel(); + } + + guiItem.addEnchantment(enchantment, level); + } catch (Exception e) { + Common.sendConsoleMMMessage("Enchantment not found: " + e); + } + } + } + + return guiItem; } } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/duel/DuelRequest.java b/core/src/main/java/dev/nandi0813/practice/manager/duel/DuelRequest.java index 100e8be9..49253555 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/duel/DuelRequest.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/duel/DuelRequest.java @@ -5,7 +5,6 @@ import dev.nandi0813.practice.manager.fight.match.type.duel.Duel; import dev.nandi0813.practice.manager.ladder.abstraction.Ladder; import dev.nandi0813.practice.manager.ladder.util.LadderUtil; -import dev.nandi0813.practice.module.util.ClassImport; import dev.nandi0813.practice.util.Common; import lombok.Getter; import lombok.Setter; @@ -44,7 +43,7 @@ public void sendRequest() { .replace("%arena%", arenaName) .replace("%rounds%", String.valueOf(rounds)) .replace("%target%", target.getName()) - .replace("%targetPing%", String.valueOf(ClassImport.getClasses().getPlayerUtil().getPing(target))) + .replace("%targetPing%", String.valueOf(dev.nandi0813.practice.moved.PlayerUtil.getPing(target))) ); } @@ -54,7 +53,7 @@ public void sendRequest() { .replace("%arena%", arenaName) .replace("%rounds%", String.valueOf(rounds)) .replace("%sender%", sender.getName()) - .replace("%senderPing%", String.valueOf(ClassImport.getClasses().getPlayerUtil().getPing(sender))) + .replace("%senderPing%", String.valueOf(dev.nandi0813.practice.moved.PlayerUtil.getPing(sender))) ); } } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/belowname/BelowNameManager.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/belowname/BelowNameManager.java index a9adf5eb..de09bec8 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/belowname/BelowNameManager.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/belowname/BelowNameManager.java @@ -7,7 +7,6 @@ import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerScoreboardObjective; import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerUpdateScore; import dev.nandi0813.practice.ZonePractice; -import dev.nandi0813.practice.module.util.ClassImport; import net.kyori.adventure.text.Component; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -45,7 +44,7 @@ private BelowNameManager() { continue; } - double health = ClassImport.getClasses().getPlayerUtil().getPlayerHealth(otherPlayer); + double health = dev.nandi0813.practice.moved.PlayerUtil.getPlayerHealth(otherPlayer); int hp = (int) Math.round(health); Component formattedHealth = Component.text(String.format("%.1f", health)); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/EventListener.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/EventListener.java index 39fcc0b9..82cf8ce0 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/EventListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/EventListener.java @@ -11,7 +11,6 @@ import dev.nandi0813.practice.manager.profile.Profile; import dev.nandi0813.practice.manager.profile.ProfileManager; import dev.nandi0813.practice.manager.profile.enums.ProfileStatus; -import dev.nandi0813.practice.module.util.ClassImport; import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.StringUtil; import dev.nandi0813.practice.util.cooldown.CooldownObject; @@ -56,7 +55,7 @@ public void onTrackerUse(PlayerInteractEvent e) { return; } - ItemStack item = ClassImport.getClasses().getPlayerUtil().getItemInUse(player, EventManager.PLAYER_TRACKER.getType()); + ItemStack item = dev.nandi0813.practice.moved.PlayerUtil.getItemInUse(player, EventManager.PLAYER_TRACKER.getType()); if (item == null) { return; } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/enums/EventType.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/enums/EventType.java index 91d6ca07..f229270a 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/enums/EventType.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/enums/EventType.java @@ -2,7 +2,7 @@ import dev.nandi0813.practice.manager.backend.ConfigManager; import dev.nandi0813.practice.manager.backend.LanguageManager; -import dev.nandi0813.practice.module.util.ClassImport; +import dev.nandi0813.practice.moved.ItemCreateUtil; import lombok.Getter; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; @@ -15,7 +15,7 @@ public enum EventType { LMS( 10, ConfigManager.getString("EVENT.LMS.NAME"), - ClassImport.getClasses().getItemCreateUtil().createItem("&eLast Man Standing", Material.DIAMOND_SWORD), + ItemCreateUtil.createItem("&eLast Man Standing", Material.DIAMOND_SWORD), 15, LanguageManager.getString("COMMAND.EVENT.ARGUMENTS.LMS.BROADCAST"), ConfigManager.getList("EVENT.LMS.WINNER-COMMAND"), @@ -29,7 +29,7 @@ public enum EventType { OITC( 11, ConfigManager.getString("EVENT.OITC.NAME"), - ClassImport.getClasses().getItemCreateUtil().createItem("&6One In The Chamber", Material.BOW), + ItemCreateUtil.createItem("&6One In The Chamber", Material.BOW), 15, LanguageManager.getString("COMMAND.EVENT.ARGUMENTS.OITC.BROADCAST"), ConfigManager.getList("EVENT.OITC.WINNER-COMMAND"), @@ -43,7 +43,7 @@ public enum EventType { TNTTAG( 12, ConfigManager.getString("EVENT.TNTTAG.NAME"), - ClassImport.getClasses().getItemCreateUtil().createItem("&cTNT Tag", Material.TNT), + ItemCreateUtil.createItem("&cTNT Tag", Material.TNT), 15, LanguageManager.getString("COMMAND.EVENT.ARGUMENTS.TNTTAG.BROADCAST"), ConfigManager.getList("EVENT.TNTTAG.WINNER-COMMAND"), @@ -57,7 +57,7 @@ public enum EventType { BRACKETS( 13, ConfigManager.getString("EVENT.BRACKETS.NAME"), - ClassImport.getClasses().getItemCreateUtil().createItem("&aBrackets", Material.POTION, Short.valueOf("34")), + ItemCreateUtil.createItem("&aBrackets", Material.POTION, Short.valueOf("34")), 15, LanguageManager.getString("COMMAND.EVENT.ARGUMENTS.BRACKETS.BROADCAST"), ConfigManager.getList("EVENT.BRACKETS.WINNER-COMMAND"), @@ -71,7 +71,7 @@ public enum EventType { SUMO( 14, ConfigManager.getString("EVENT.SUMO.NAME"), - ClassImport.getClasses().getItemCreateUtil().createItem("&6Sumo", Material.STICK), + ItemCreateUtil.createItem("&6Sumo", Material.STICK), 15, LanguageManager.getString("COMMAND.EVENT.ARGUMENTS.SUMO.BROADCAST"), ConfigManager.getList("EVENT.SUMO.WINNER-COMMAND"), @@ -85,7 +85,7 @@ public enum EventType { SPLEGG( 15, ConfigManager.getString("EVENT.SPLEGG.NAME"), - ClassImport.getClasses().getItemCreateUtil().createItem("&bSplegg", Material.EGG), + ItemCreateUtil.createItem("&bSplegg", Material.EGG), 15, LanguageManager.getString("COMMAND.EVENT.ARGUMENTS.SPLEGG.BROADCAST"), ConfigManager.getList("EVENT.SPLEGG.WINNER-COMMAND"), @@ -99,7 +99,7 @@ public enum EventType { JUGGERNAUT( 16, ConfigManager.getString("EVENT.JUGGERNAUT.NAME"), - ClassImport.getClasses().getItemCreateUtil().createItem("&6Juggernaut", Material.GOLDEN_APPLE), + ItemCreateUtil.createItem("&6Juggernaut", Material.GOLDEN_APPLE), 15, LanguageManager.getString("COMMAND.EVENT.ARGUMENTS.JUGGERNAUT.BROADCAST"), ConfigManager.getList("EVENT.JUGGERNAUT.WINNER-COMMAND"), diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/duel/brackets/BracketsData.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/duel/brackets/BracketsData.java index baa628e6..854aeb53 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/duel/brackets/BracketsData.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/duel/brackets/BracketsData.java @@ -2,8 +2,7 @@ import dev.nandi0813.practice.manager.fight.event.enums.EventType; import dev.nandi0813.practice.manager.fight.event.events.duel.interfaces.DuelEventData; -import dev.nandi0813.practice.module.interfaces.KitData; -import dev.nandi0813.practice.module.util.ClassImport; +import dev.nandi0813.practice.moved.KitData; import lombok.Getter; import java.io.IOException; @@ -15,7 +14,7 @@ public class BracketsData extends DuelEventData { public BracketsData() { super(EventType.BRACKETS); - this.kitData = ClassImport.createKitData(); + this.kitData = new KitData(); } @Override diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/duel/brackets/BracketsListener.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/duel/brackets/BracketsListener.java index 93208fd0..a9f1d8fb 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/duel/brackets/BracketsListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/duel/brackets/BracketsListener.java @@ -1,10 +1,10 @@ package dev.nandi0813.practice.manager.fight.event.events.duel.brackets; +import dev.nandi0813.practice.ZonePractice; import dev.nandi0813.practice.manager.fight.event.enums.EventStatus; import dev.nandi0813.practice.manager.fight.event.events.duel.interfaces.DuelFight; import dev.nandi0813.practice.manager.fight.event.events.duel.interfaces.DuelListener; import dev.nandi0813.practice.manager.fight.event.interfaces.Event; -import dev.nandi0813.practice.module.util.ClassImport; import org.bukkit.entity.Player; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.ProjectileLaunchEvent; @@ -55,13 +55,13 @@ public void onProjectileLaunch(Event event, ProjectileLaunchEvent e) { for (Player eventPlayer : brackets.getPlayers()) { if (duelFight.getPlayers().contains(eventPlayer)) return; - ClassImport.getClasses().getEntityHider().hideEntity(eventPlayer, e.getEntity()); + ZonePractice.getEntityHider().hideEntity(eventPlayer, e.getEntity()); } for (Player eventSpectator : brackets.getSpectators()) { if (duelFight.getSpectators().contains(eventSpectator)) return; - ClassImport.getClasses().getEntityHider().hideEntity(eventSpectator, e.getEntity()); + ZonePractice.getEntityHider().hideEntity(eventSpectator, e.getEntity()); } } } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/duel/sumo/Sumo.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/duel/sumo/Sumo.java index 9b5b9512..f980a52e 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/duel/sumo/Sumo.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/duel/sumo/Sumo.java @@ -1,12 +1,9 @@ package dev.nandi0813.practice.manager.fight.event.events.duel.sumo; -import dev.nandi0813.practice.manager.fight.event.events.duel.brackets.BracketsData; import dev.nandi0813.practice.manager.fight.event.events.duel.interfaces.DuelEvent; -import dev.nandi0813.practice.module.util.ClassImport; import dev.nandi0813.practice.util.playerutil.PlayerUtil; import org.bukkit.Location; import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; public class Sumo extends DuelEvent { @@ -21,7 +18,7 @@ public SumoData getEventData() { @Override public void teleport(Player player, Location location) { - ClassImport.getClasses().getPlayerUtil().clearInventory(player); + dev.nandi0813.practice.moved.PlayerUtil.clearInventory(player); PlayerUtil.setFightPlayer(player); player.teleport(location); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/duel/sumo/SumoData.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/duel/sumo/SumoData.java index f92e6b64..97936121 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/duel/sumo/SumoData.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/duel/sumo/SumoData.java @@ -2,8 +2,7 @@ import dev.nandi0813.practice.manager.fight.event.enums.EventType; import dev.nandi0813.practice.manager.fight.event.events.duel.interfaces.DuelEventData; -import dev.nandi0813.practice.module.interfaces.KitData; -import dev.nandi0813.practice.module.util.ClassImport; +import dev.nandi0813.practice.moved.KitData; import lombok.Getter; import java.io.IOException; @@ -15,7 +14,7 @@ public class SumoData extends DuelEventData { public SumoData() { super(EventType.SUMO); - this.kitData = ClassImport.createKitData(); + this.kitData = new KitData(); } @Override diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/duel/sumo/SumoListener.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/duel/sumo/SumoListener.java index 48387d99..f3550da1 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/duel/sumo/SumoListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/duel/sumo/SumoListener.java @@ -4,7 +4,6 @@ import dev.nandi0813.practice.manager.fight.event.events.duel.interfaces.DuelFight; import dev.nandi0813.practice.manager.fight.event.events.duel.interfaces.DuelListener; import dev.nandi0813.practice.manager.fight.event.interfaces.Event; -import dev.nandi0813.practice.module.util.ClassImport; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -69,13 +68,13 @@ public void onPlayerMove(Event event, PlayerMoveEvent e) { Material blockBelow = playerLoc.clone().subtract(0, 1, 0).getBlock().getType(); // Check if player is in/touching water - if (blockAtPlayer.equals(Material.WATER) || blockAtPlayer.equals(ClassImport.getClasses().getItemMaterialUtil().getWater()) || - blockBelow.equals(Material.WATER) || blockBelow.equals(ClassImport.getClasses().getItemMaterialUtil().getWater())) { + if (blockAtPlayer.equals(Material.WATER) || + blockBelow.equals(Material.WATER)) { duelFight.endFight(player); } // Check if player is in/touching lava - else if (blockAtPlayer.equals(Material.LAVA) || blockAtPlayer.equals(ClassImport.getClasses().getItemMaterialUtil().getLava()) || - blockBelow.equals(Material.LAVA) || blockBelow.equals(ClassImport.getClasses().getItemMaterialUtil().getLava())) { + else if (blockAtPlayer.equals(Material.LAVA) || + blockBelow.equals(Material.LAVA)) { duelFight.endFight(player); } } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/ffa/lms/LMS.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/ffa/lms/LMS.java index 99db9487..91a19fcc 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/ffa/lms/LMS.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/ffa/lms/LMS.java @@ -1,7 +1,7 @@ package dev.nandi0813.practice.manager.fight.event.events.ffa.lms; import dev.nandi0813.practice.manager.fight.event.events.ffa.interfaces.FFAEvent; -import dev.nandi0813.practice.module.interfaces.KitData; +import dev.nandi0813.practice.moved.KitData; import org.bukkit.entity.Player; public class LMS extends FFAEvent { diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/ffa/lms/LMSData.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/ffa/lms/LMSData.java index 320b9e4d..e235d966 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/ffa/lms/LMSData.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/ffa/lms/LMSData.java @@ -2,8 +2,7 @@ import dev.nandi0813.practice.manager.fight.event.enums.EventType; import dev.nandi0813.practice.manager.fight.event.interfaces.EventData; -import dev.nandi0813.practice.module.interfaces.KitData; -import dev.nandi0813.practice.module.util.ClassImport; +import dev.nandi0813.practice.moved.KitData; import lombok.Getter; import java.io.IOException; @@ -11,7 +10,7 @@ @Getter public class LMSData extends EventData { - private final KitData kitData = ClassImport.createKitData(); + private final KitData kitData = new KitData(); public LMSData() { super(EventType.LMS); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/ffa/oitc/OITCListener.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/ffa/oitc/OITCListener.java index 8632af9e..a52f918f 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/ffa/oitc/OITCListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/ffa/oitc/OITCListener.java @@ -7,7 +7,6 @@ import dev.nandi0813.practice.manager.profile.Profile; import dev.nandi0813.practice.manager.profile.ProfileManager; import dev.nandi0813.practice.manager.profile.enums.ProfileStatus; -import dev.nandi0813.practice.module.util.ClassImport; import dev.nandi0813.practice.util.Cuboid; import org.bukkit.Material; import org.bukkit.entity.Arrow; @@ -128,7 +127,7 @@ public void onPlayerInteract(Event event, PlayerInteractEvent e) { if (!event.getStatus().equals(EventStatus.LIVE)) { Player player = e.getPlayer(); - if (ClassImport.getClasses().getPlayerUtil().isItemInUse(player, Material.BOW)) { + if (dev.nandi0813.practice.moved.PlayerUtil.isItemInUse(player, Material.BOW)) { e.setCancelled(true); player.updateInventory(); } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/ffa/splegg/Splegg.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/ffa/splegg/Splegg.java index ddd8c279..31aec121 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/ffa/splegg/Splegg.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/ffa/splegg/Splegg.java @@ -1,7 +1,6 @@ package dev.nandi0813.practice.manager.fight.event.events.ffa.splegg; import dev.nandi0813.practice.manager.fight.event.events.ffa.interfaces.FFAEvent; -import dev.nandi0813.practice.module.util.ClassImport; import lombok.Getter; import org.bukkit.entity.Player; @@ -28,7 +27,7 @@ protected void customCustomStart() { @Override protected void loadInventory(Player player) { - ClassImport.getClasses().getPlayerUtil().clearInventory(player); + dev.nandi0813.practice.moved.PlayerUtil.clearInventory(player); player.getInventory().addItem(this.getEventData().getEggLauncher()); player.updateInventory(); } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/ffa/splegg/SpleggListener.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/ffa/splegg/SpleggListener.java index de5e12fd..149a39ab 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/ffa/splegg/SpleggListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/ffa/splegg/SpleggListener.java @@ -3,7 +3,7 @@ import dev.nandi0813.practice.manager.fight.event.enums.EventStatus; import dev.nandi0813.practice.manager.fight.event.events.ffa.interfaces.FFAListener; import dev.nandi0813.practice.manager.fight.event.interfaces.Event; -import dev.nandi0813.practice.module.util.ClassImport; +import dev.nandi0813.practice.moved.ChangedBlock; import dev.nandi0813.practice.util.Cuboid; import org.bukkit.Material; import org.bukkit.block.Block; @@ -54,9 +54,9 @@ public void onPlayerMove(Event event, PlayerMoveEvent e) { event.killPlayer(player, false); } else { Material block = player.getLocation().getBlock().getType(); - if (block.equals(Material.WATER) || block.equals(ClassImport.getClasses().getItemMaterialUtil().getWater())) { + if (block.equals(Material.WATER)) { event.killPlayer(player, false); - } else if (block.equals(Material.LAVA) || block.equals(ClassImport.getClasses().getItemMaterialUtil().getLava())) { + } else if (block.equals(Material.LAVA)) { event.killPlayer(player, false); } } @@ -72,7 +72,7 @@ public void onPlayerInteract(Event event, PlayerInteractEvent e) { return; } - ItemStack item = ClassImport.getClasses().getPlayerUtil().getItemInUse(player, splegg.getEventData().getEggLauncher().getType()); + ItemStack item = dev.nandi0813.practice.moved.PlayerUtil.getItemInUse(player, splegg.getEventData().getEggLauncher().getType()); if (item != null) { Egg egg = player.launchProjectile(Egg.class); egg.setCustomName("SPLEGG"); @@ -109,7 +109,7 @@ public void onPlayerEggThrow(Event event, PlayerEggThrowEvent e) { String materialName = hitBlockType.name(); // Check if block is wool - works for both 1.8.8 (WOOL) and modern versions (WHITE_WOOL, RED_WOOL, etc.) if (materialName.equals("WOOL") || materialName.endsWith("_WOOL")) { - splegg.getFightChange().addBlockChange(ClassImport.createChangeBlock(hitBlock)); + splegg.getFightChange().addBlockChange(new ChangedBlock(hitBlock)); hitBlock.setType(Material.AIR); splegg.getShotBlocks().replace(player, splegg.getShotBlocks().get(player) + 1); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/onevsall/juggernaut/Juggernaut.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/onevsall/juggernaut/Juggernaut.java index 0b4868db..3c05d2c8 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/onevsall/juggernaut/Juggernaut.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/onevsall/juggernaut/Juggernaut.java @@ -6,7 +6,7 @@ import dev.nandi0813.practice.manager.fight.event.enums.EventStatus; import dev.nandi0813.practice.manager.fight.event.events.ffa.interfaces.FFAEvent; import dev.nandi0813.practice.manager.server.ServerManager; -import dev.nandi0813.practice.module.interfaces.KitData; +import dev.nandi0813.practice.moved.KitData; import lombok.Getter; import org.bukkit.Bukkit; import org.bukkit.entity.Player; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/onevsall/juggernaut/JuggernautData.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/onevsall/juggernaut/JuggernautData.java index 7235f0a6..3977cbf6 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/onevsall/juggernaut/JuggernautData.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/onevsall/juggernaut/JuggernautData.java @@ -2,8 +2,7 @@ import dev.nandi0813.practice.manager.fight.event.enums.EventType; import dev.nandi0813.practice.manager.fight.event.interfaces.EventData; -import dev.nandi0813.practice.module.interfaces.KitData; -import dev.nandi0813.practice.module.util.ClassImport; +import dev.nandi0813.practice.moved.KitData; import lombok.Getter; import java.io.IOException; @@ -11,8 +10,8 @@ @Getter public class JuggernautData extends EventData { - private final KitData juggernautKitData = ClassImport.createKitData(); - private final KitData playerKitData = ClassImport.createKitData(); + private final KitData juggernautKitData = new KitData(); + private final KitData playerKitData = new KitData(); public JuggernautData() { super(EventType.JUGGERNAUT); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/onevsall/tnttag/TNTTag.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/onevsall/tnttag/TNTTag.java index bbccbd67..6b3a2855 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/onevsall/tnttag/TNTTag.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/onevsall/tnttag/TNTTag.java @@ -311,14 +311,14 @@ private static void setSpeedPotion(Player player, int amplifier) { } private static void setResistancePotion(Player player) { - player.removePotionEffect(PotionEffectType.DAMAGE_RESISTANCE); - player.addPotionEffect(new PotionEffect(PotionEffectType.DAMAGE_RESISTANCE, 10000 * 20, 125)); + player.removePotionEffect(PotionEffectType.RESISTANCE); + player.addPotionEffect(new PotionEffect(PotionEffectType.RESISTANCE, 10000 * 20, 125)); } public static final String TNT_TAG_TNT_METADATA = "ZPP_TNT_TAG_TNT"; private void sendExplosion(Location location) { - TNTPrimed tnt = (TNTPrimed) location.getWorld().spawnEntity(location.subtract(-0.5, 0, -0.5), EntityType.PRIMED_TNT); + TNTPrimed tnt = (TNTPrimed) location.getWorld().spawnEntity(location.subtract(-0.5, 0, -0.5), EntityType.TNT); tnt.setMetadata(TNT_TAG_TNT_METADATA, new FixedMetadataValue(ZonePractice.getInstance(), this)); tnt.setFuseTicks(1); } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/setup/EventSpawnMarkerManager.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/setup/EventSpawnMarkerManager.java index 9fa0af86..3e223570 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/setup/EventSpawnMarkerManager.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/setup/EventSpawnMarkerManager.java @@ -1,7 +1,7 @@ package dev.nandi0813.practice.manager.fight.event.setup; import dev.nandi0813.practice.manager.fight.event.interfaces.EventData; -import dev.nandi0813.practice.module.util.ClassImport; +import dev.nandi0813.practice.moved.ItemCreateUtil; import dev.nandi0813.practice.util.Common; import lombok.Getter; import org.bukkit.Location; @@ -115,7 +115,7 @@ private ArmorStand createMarker(Location location, String name) { armorStand.teleport(facingLoc); // Give it a sword to hold (to make it more visible) - ItemStack sword = ClassImport.getClasses().getItemCreateUtil().createItem("&cSpawn Marker", org.bukkit.Material.DIAMOND_SWORD); + ItemStack sword = ItemCreateUtil.createItem("&cSpawn Marker", org.bukkit.Material.DIAMOND_SWORD); armorStand.setItemInHand(sword); // Make it invulnerable and persistent diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/FFAListener.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/FFAListener.java index ed13c340..fcb8810f 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/FFAListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/FFAListener.java @@ -2,15 +2,20 @@ import dev.nandi0813.practice.ZonePractice; import dev.nandi0813.practice.manager.arena.arenas.FFAArena; +import dev.nandi0813.practice.manager.arena.util.ArenaUtil; import dev.nandi0813.practice.manager.backend.ConfigManager; import dev.nandi0813.practice.manager.backend.LanguageManager; import dev.nandi0813.practice.manager.fight.ffa.game.FFA; import dev.nandi0813.practice.manager.fight.util.BlockUtil; import dev.nandi0813.practice.manager.fight.util.DeathCause; +import dev.nandi0813.practice.manager.fight.util.FightUtil; import dev.nandi0813.practice.manager.fight.util.ListenerUtil; +import dev.nandi0813.practice.manager.fight.util.Stats.Statistic; import dev.nandi0813.practice.manager.ladder.abstraction.Ladder; import dev.nandi0813.practice.manager.ladder.abstraction.normal.NormalLadder; -import dev.nandi0813.practice.module.util.ClassImport; +import dev.nandi0813.practice.manager.profile.Profile; +import dev.nandi0813.practice.manager.profile.ProfileManager; +import dev.nandi0813.practice.moved.ChangedBlock; import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.Cuboid; import dev.nandi0813.practice.util.NumberUtil; @@ -20,17 +25,19 @@ import dev.nandi0813.practice.util.fightmapchange.FightChangeOptimized; import org.bukkit.Material; import org.bukkit.block.Block; +import org.bukkit.damage.DamageSource; +import org.bukkit.damage.DamageType; import org.bukkit.entity.Arrow; +import org.bukkit.entity.Entity; import org.bukkit.entity.Player; +import org.bukkit.entity.Projectile; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.block.Action; import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockPlaceEvent; -import org.bukkit.event.entity.EntityRegainHealthEvent; -import org.bukkit.event.entity.FoodLevelChangeEvent; -import org.bukkit.event.entity.ProjectileLaunchEvent; +import org.bukkit.event.entity.*; import org.bukkit.event.inventory.CraftItemEvent; import org.bukkit.event.player.*; import org.bukkit.inventory.ItemStack; @@ -98,7 +105,7 @@ public void onPlayerInteract(PlayerInteractEvent e) { } if (clickedBlock.getType().equals(Material.CHEST) || clickedBlock.getType().equals(Material.TRAPPED_CHEST)) { if (!ffa.isBuild()) return; - ffa.getFightChange().addBlockChange(ClassImport.createChangeBlock(clickedBlock)); + ffa.getFightChange().addBlockChange(new ChangedBlock(clickedBlock)); } } } @@ -118,7 +125,7 @@ public void onGoldenHeadConsume(PlayerItemConsumeEvent e) { Ladder ladder = ffa.getPlayers().get(player); if (ladder.getGoldenAppleCooldown() < 1) return; - ClassImport.getClasses().getItemCooldownHandler().handleGoldenAppleFFA( + dev.nandi0813.practice.moved.ModernItemCooldownHandler.handleGoldenAppleFFA( player, ladder.getGoldenAppleCooldown(), e, @@ -148,7 +155,7 @@ public void onProjectileLaunch(ProjectileLaunchEvent e) { // Hide from every online player NOT in this FFA for (org.bukkit.entity.Player online : ZonePractice.getInstance().getServer().getOnlinePlayers()) { if (!ffa.getPlayers().containsKey(online) && !ffa.getSpectators().contains(online)) { - ClassImport.getClasses().getEntityHider().hideEntity(online, arrow); + ZonePractice.getEntityHider().hideEntity(online, arrow); } } } @@ -230,7 +237,7 @@ public void onBlockBreak(BlockBreakEvent e) { if (ALLOW_DESTROYABLE_BLOCK) { NormalLadder ladder = ffa.getPlayers().get(player); if (ladder != null) { - if (ClassImport.getClasses().getArenaUtil().containsDestroyableBlock(ladder, block)) { + if (ArenaUtil.containsDestroyableBlock(ladder, block)) { BlockUtil.breakBlock(ffa, block); } } @@ -240,7 +247,7 @@ public void onBlockBreak(BlockBreakEvent e) { // natural arena block for rollback and allow the break. NormalLadder currentLadder = ffa.getPlayers().get(player); if (currentLadder != null && currentLadder.isBreakAllBlocks()) { - ffa.getFightChange().addArenaBlockChange(ClassImport.createChangeBlock(block)); + ffa.getFightChange().addArenaBlockChange(new ChangedBlock(block)); return; // do NOT cancel — let the break happen } @@ -352,7 +359,7 @@ public void onItemPickup(PlayerPickupItemEvent e) { if (ffa == null) return; // Prevent picking up items (e.g. arrows) that have been hidden from this player - if (!ClassImport.getClasses().getEntityHider().canSee(player, e.getItem())) { + if (!ZonePractice.getEntityHider().canSee(player, e.getItem())) { e.setCancelled(true); return; } @@ -360,5 +367,70 @@ public void onItemPickup(PlayerPickupItemEvent e) { e.setCancelled(false); } + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + Player player = e.getPlayer(); + + Profile profile = ProfileManager.getInstance().getProfile(player); + if (profile == null) return; + + FFA ffa = FFAManager.getInstance().getFFAByPlayer(player); + if (ffa == null) return; + + e.setCancelled(true); + + DamageSource damageSource = e.getDamageSource(); + + // Void deaths are already handled by onPlayerMove in the core FFAListener. + // Skip here to avoid sending the death message twice. + if (damageSource.getDamageType().equals(DamageType.OUT_OF_WORLD)) { + return; + } + + Player killer = null; + if (damageSource.getCausingEntity() instanceof Entity damageEntity) { + killer = FightUtil.getKiller(damageEntity); + } + + DeathCause cause = dev.nandi0813.practice.moved.FightUtil.convert(damageSource.getDamageType()); + ffa.killPlayer(player, killer, cause.getMessage().replace("%killer%", killer != null ? killer.getName() : "Unknown")); + + if (killer != null) { + Statistic statistic = ffa.getStatistics().get(killer); + statistic.setKills(statistic.getKills() + 1); + } + } + + @EventHandler + public void onEntityDamageByEntity(EntityDamageByEntityEvent e) { + if (!(e.getEntity() instanceof Player target)) { + return; + } + + Profile profile = ProfileManager.getInstance().getProfile(target); + if (profile == null) return; + + FFA ffa = FFAManager.getInstance().getFFAByPlayer(target); + if (ffa == null) return; + + // Resolve the attacker (direct hit or projectile shooter) + Player attacker = null; + if (e.getDamager() instanceof Player damager) { + attacker = damager; + } else if (e.getDamager() instanceof Projectile projectile) { + if (projectile.getShooter() instanceof Player shooter) { + attacker = shooter; + + if (projectile instanceof Arrow) { + arrowDisplayHearth(shooter, target, e.getFinalDamage()); + } + } + } + + // Record the attacker for void-kill attribution + if (attacker != null) { + ffa.recordAttack(target, attacker); + } + } } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/listener/BuildBlockListener.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/listener/BuildBlockListener.java index 479e22a6..2acb5318 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/listener/BuildBlockListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/listener/BuildBlockListener.java @@ -1,11 +1,12 @@ package dev.nandi0813.practice.manager.fight.listener; import dev.nandi0813.practice.ZonePractice; +import dev.nandi0813.practice.manager.arena.util.ArenaUtil; import dev.nandi0813.practice.manager.fight.util.BlockUtil; import dev.nandi0813.practice.manager.fight.util.ListenerUtil; import dev.nandi0813.practice.manager.fight.util.FightUtil; import dev.nandi0813.practice.manager.fight.match.Match; -import dev.nandi0813.practice.module.util.ClassImport; +import dev.nandi0813.practice.moved.ChangedBlock; import dev.nandi0813.practice.util.interfaces.Spectatable; import org.bukkit.block.Block; import org.bukkit.event.EventHandler; @@ -50,8 +51,8 @@ private static Spectatable getByBlock(Block block) { /** Track the block under a placed block if it will turn to dirt (grass → dirt). */ private static void trackUnderBlockIfDirt(Block block, Spectatable spectatable) { Block under = block.getLocation().subtract(0, 1, 0).getBlock(); - if (ClassImport.getClasses().getArenaUtil().turnsToDirt(under)) { - spectatable.getFightChange().addArenaBlockChange(ClassImport.createChangeBlock(under)); + if (ArenaUtil.turnsToDirt(under)) { + spectatable.getFightChange().addArenaBlockChange(new ChangedBlock(under)); } } @@ -78,7 +79,7 @@ public void onBlockBreak(BlockBreakEvent e) { if (!(mv.value() instanceof Spectatable spectatable)) return; if (!spectatable.isBuild()) return; - spectatable.addBlockChange(ClassImport.createChangeBlock(block)); + spectatable.addBlockChange(new ChangedBlock(block)); return; } @@ -87,7 +88,7 @@ public void onBlockBreak(BlockBreakEvent e) { if (spectatable == null || !spectatable.isBuild()) return; var ladder = (spectatable instanceof Match match) ? match.getLadder() : null; - if (ClassImport.getClasses().getArenaUtil().containsDestroyableBlock(ladder, block)) { + if (ArenaUtil.containsDestroyableBlock(ladder, block)) { BlockUtil.breakBlock(spectatable, block); e.setCancelled(true); } @@ -115,7 +116,7 @@ public void onBlockPlace(BlockPlaceEvent e) { block.setMetadata(PLACED_IN_FIGHT, new FixedMetadataValue(ZonePractice.getInstance(), spectatable)); } - spectatable.addBlockChange(ClassImport.createChangeBlock(e)); + spectatable.addBlockChange(new ChangedBlock(e)); trackUnderBlockIfDirt(block, spectatable); } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/Match.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/Match.java index 56b50cdb..9151ac07 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/Match.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/Match.java @@ -29,8 +29,7 @@ import dev.nandi0813.practice.manager.profile.ProfileManager; import dev.nandi0813.practice.manager.profile.enums.ProfileStatus; import dev.nandi0813.practice.manager.spectator.SpectatorManager; -import dev.nandi0813.practice.module.interfaces.ChangedBlock; -import dev.nandi0813.practice.module.util.ClassImport; +import dev.nandi0813.practice.moved.ChangedBlock; import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.Cuboid; import dev.nandi0813.practice.util.StringUtil; @@ -164,16 +163,16 @@ public void entityVanish(Player player) { if (players.contains(player)) { for (Entity entity : arena.getCuboid().getEntities()) { if (!(entity instanceof Player)) { - ClassImport.getClasses().getEntityHider().hideEntity(player, entity); + ZonePractice.getEntityHider().hideEntity(player, entity); } } } else if (spectators.contains(player)) { for (Entity entity : arena.getCuboid().getEntities()) { if (!(entity instanceof Player)) { if (fightChange.containsEntity(entity)) - ClassImport.getClasses().getEntityHider().showEntity(player, entity); + ZonePractice.getEntityHider().showEntity(player, entity); else - ClassImport.getClasses().getEntityHider().hideEntity(player, entity); + ZonePractice.getEntityHider().hideEntity(player, entity); } } } @@ -455,7 +454,7 @@ public void addEntityChange(Entity entity) { if (!ladder.isBuild()) { for (Player player : MatchManager.getInstance().getHidePlayers(this)) { - ClassImport.getClasses().getEntityHider().hideEntity(player, entity); + ZonePractice.getEntityHider().hideEntity(player, entity); } } } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/Round.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/Round.java index 4c54d2a0..f2bf9e9d 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/Round.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/Round.java @@ -14,7 +14,7 @@ import dev.nandi0813.practice.manager.fight.util.Stats.Statistic; import dev.nandi0813.practice.manager.ladder.enums.LadderType; import dev.nandi0813.practice.manager.profile.ProfileManager; -import dev.nandi0813.practice.module.util.ClassImport; +import dev.nandi0813.practice.moved.BedUtil; import dev.nandi0813.practice.util.StringUtil; import dev.nandi0813.practice.util.entityhider.PlayerHider; import dev.nandi0813.practice.util.playerutil.PlayerUtil; @@ -54,8 +54,8 @@ protected Round(Match match, int roundNumber) { this.bedStatus.put(team, true); // Set the beds - ClassImport.getClasses().getBedUtil().placeBed(match.getArena().getBedLoc1().getLocation(), match.getArena().getBedLoc1().getFacing()); - ClassImport.getClasses().getBedUtil().placeBed(match.getArena().getBedLoc2().getLocation(), match.getArena().getBedLoc2().getFacing()); + BedUtil.placeBed(match.getArena().getBedLoc1().getLocation(), match.getArena().getBedLoc1().getFacing()); + BedUtil.placeBed(match.getArena().getBedLoc2().getLocation(), match.getArena().getBedLoc2().getFacing()); } for (Player player : match.getPlayers()) { diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/listener/LadderTypeListener.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/listener/LadderTypeListener.java index 66592afb..2ebac445 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/listener/LadderTypeListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/listener/LadderTypeListener.java @@ -1,50 +1,60 @@ package dev.nandi0813.practice.manager.fight.match.listener; +import com.destroystokyo.paper.event.player.PlayerPickupExperienceEvent; import dev.nandi0813.practice.ZonePractice; import dev.nandi0813.practice.manager.arena.arenas.interfaces.BasicArena; import dev.nandi0813.practice.manager.backend.ConfigManager; import dev.nandi0813.practice.manager.backend.LanguageManager; +import dev.nandi0813.practice.manager.fight.event.EventManager; +import dev.nandi0813.practice.manager.fight.event.events.duel.brackets.Brackets; +import dev.nandi0813.practice.manager.fight.event.interfaces.Event; import dev.nandi0813.practice.manager.fight.match.Match; import dev.nandi0813.practice.manager.fight.match.MatchManager; import dev.nandi0813.practice.manager.fight.match.enums.RoundStatus; import dev.nandi0813.practice.manager.fight.match.runnable.game.BridgeArrowRunnable; +import dev.nandi0813.practice.manager.fight.match.util.KnockbackUtil; +import dev.nandi0813.practice.manager.fight.match.util.MatchFightPlayer; +import dev.nandi0813.practice.manager.fight.match.util.TeamUtil; import dev.nandi0813.practice.manager.fight.util.BlockUtil; import dev.nandi0813.practice.manager.fight.util.DeathCause; +import dev.nandi0813.practice.manager.fight.util.FightUtil; import dev.nandi0813.practice.manager.fight.util.ListenerUtil; +import dev.nandi0813.practice.manager.fight.util.Stats.Statistic; import dev.nandi0813.practice.manager.ladder.abstraction.Ladder; import dev.nandi0813.practice.manager.ladder.abstraction.interfaces.LadderHandle; +import dev.nandi0813.practice.manager.ladder.enums.KnockbackType; import dev.nandi0813.practice.manager.ladder.enums.LadderType; import dev.nandi0813.practice.manager.ladder.type.Bridges; import dev.nandi0813.practice.manager.profile.Profile; import dev.nandi0813.practice.manager.profile.ProfileManager; import dev.nandi0813.practice.manager.profile.enums.ProfileStatus; -import dev.nandi0813.practice.module.util.ClassImport; +import dev.nandi0813.practice.manager.spectator.SpectatorManager; +import dev.nandi0813.practice.moved.ChangedBlock; import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.Cuboid; import dev.nandi0813.practice.util.NumberUtil; import dev.nandi0813.practice.util.PermanentConfig; import dev.nandi0813.practice.util.cooldown.CooldownObject; import dev.nandi0813.practice.util.cooldown.PlayerCooldown; +import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.block.Block; -import org.bukkit.entity.Entity; -import org.bukkit.entity.Item; -import org.bukkit.entity.Player; -import org.bukkit.entity.ThrownExpBottle; +import org.bukkit.damage.DamageSource; +import org.bukkit.entity.*; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockPlaceEvent; -import org.bukkit.event.entity.EntityShootBowEvent; -import org.bukkit.event.entity.EntityTargetEvent; -import org.bukkit.event.entity.ProjectileHitEvent; -import org.bukkit.event.entity.ProjectileLaunchEvent; +import org.bukkit.event.entity.*; import org.bukkit.event.inventory.CraftItemEvent; +import org.bukkit.event.inventory.InventoryAction; +import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.player.*; import org.bukkit.inventory.ItemStack; import org.bukkit.metadata.FixedMetadataValue; import org.bukkit.metadata.MetadataValue; +import static dev.nandi0813.practice.manager.arena.util.ArenaUtil.containsDestroyableBlock; import static dev.nandi0813.practice.util.PermanentConfig.FIGHT_ENTITY; import static dev.nandi0813.practice.util.PermanentConfig.PLACED_IN_FIGHT; @@ -194,7 +204,7 @@ public void onPlayerInteract(PlayerInteractEvent e) { if (roundStatus.equals(RoundStatus.START) && item != null && ( item.getType().equals(Material.POTION) || - item.getType().equals(ClassImport.getClasses().getItemMaterialUtil().getSplashPotion()) || + item.getType().equals(Material.SPLASH_POTION) || item.getType().isEdible() )) { e.setCancelled(false); @@ -247,14 +257,14 @@ public void onBlockBreak(BlockBreakEvent e) { } // Handle destroyable blocks (beds, etc.) - if (ClassImport.getClasses().getArenaUtil().containsDestroyableBlock(match.getLadder(), block)) { + if (containsDestroyableBlock(match.getLadder(), block)) { BlockUtil.breakBlock(match, block); } // When break-all-blocks is enabled, track the natural arena block for rollback // and allow the break — the player can destroy any block in the arena. if (match.getLadder().isBreakAllBlocks()) { - match.getFightChange().addArenaBlockChange(ClassImport.createChangeBlock(block)); + match.getFightChange().addArenaBlockChange(new ChangedBlock(block)); return; // do NOT cancel — let the break happen } @@ -460,7 +470,7 @@ public void onItemPickup(PlayerPickupItemEvent e) { return; } - if (!ClassImport.getClasses().getEntityHider().canSee(player, e.getItem())) { + if (!ZonePractice.getEntityHider().canSee(player, e.getItem())) { e.setCancelled(true); return; } @@ -516,5 +526,210 @@ public void onPlayerShootBow(EntityShootBowEvent e) { } } + @EventHandler + public void onPlayerDamage(EntityDamageEvent e) { + if (!(e.getEntity() instanceof Player player)) return; + + Profile profile = ProfileManager.getInstance().getProfile(player); + if (profile == null) return; + + Match match = MatchManager.getInstance().getLiveMatchByPlayer(player); + if (match == null) return; + + if (ListenerUtil.cancelEvent(match, player)) { + e.setDamage(0); + e.setCancelled(true); + return; + } + + if (e instanceof EntityDamageByEntityEvent) { + onEntityDamageByEntity((EntityDamageByEntityEvent) e); + } + + if (match.getLadder() instanceof LadderHandle ladderHandle) { + ladderHandle.handleEvents(e, match); + } + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + Player player = e.getEntity(); + + Profile profile = ProfileManager.getInstance().getProfile(player); + if (profile == null) return; + + Match match = MatchManager.getInstance().getLiveMatchByPlayer(player); + if (match == null) return; + + e.setCancelled(true); + + DamageSource damageSource = e.getDamageSource(); + Player killer; + if (damageSource.getCausingEntity() instanceof Entity damageEntity) { + killer = FightUtil.getKiller(damageEntity); + } else { + killer = null; + } + + DeathCause cause = dev.nandi0813.practice.moved.FightUtil.convert(damageSource.getDamageType()); + Bukkit.getScheduler().runTaskLater(ZonePractice.getInstance(), () -> + match.killPlayer(player, killer, cause.getMessage().replace("%killer%", killer != null ? killer.getName() : "Unknown")), 1L); + + if (killer != null) { + Statistic statistic = match.getCurrentStat(killer); + statistic.setKills(statistic.getKills() + 1); + } + } + + private static void onEntityDamageByEntity(EntityDamageByEntityEvent e) { + if (!(e.getEntity() instanceof Player target)) return; + + Player attacker = null; + if (e.getDamager() instanceof Player) { + attacker = (Player) e.getDamager(); + } else if (e.getDamager() instanceof Projectile projectile) { + if (projectile.getShooter() instanceof Player) { + attacker = (Player) projectile.getShooter(); + + if (projectile instanceof Arrow) { + arrowDisplayHearth(attacker, target, e.getFinalDamage()); + } + } + } + + if (attacker == null) return; + + Profile attackerProfile = ProfileManager.getInstance().getProfile(attacker); + Profile targetProfile = ProfileManager.getInstance().getProfile(target); + + if (!attackerProfile.getStatus().equals(ProfileStatus.MATCH)) return; + if (!targetProfile.getStatus().equals(ProfileStatus.MATCH)) return; + + Match match = MatchManager.getInstance().getLiveMatchByPlayer(attacker); + if (match != MatchManager.getInstance().getLiveMatchByPlayer(target)) { + e.setCancelled(true); + return; + } + + if (!match.getCurrentRound().getRoundStatus().equals(RoundStatus.LIVE)) return; + + boolean cancel = match.getCurrentStat(attacker).isSet() || match.getCurrentStat(target).isSet(); + + if (!cancel) { + cancel = TeamUtil.isSaveTeamMate(match, attacker, target); + } + + if (cancel) { + e.setCancelled(true); + return; + } else { + if (match.getLadder() instanceof LadderHandle ladderHandle) { + ladderHandle.handleEvents(e, match); + } + } + + // Always record the attacker for void-kill attribution, + // regardless of whether the event was cancelled by a ladder handler. + match.recordAttack(target, attacker); + + if (!e.isCancelled() && !match.getLadder().getLadderKnockback().getKnockbackType().equals(KnockbackType.DEFAULT)) { + KnockbackUtil.setPlayerKnockback(target, match.getLadder().getLadderKnockback().getKnockbackType()); + } + } + + @EventHandler + public void onExpPickup(PlayerPickupExperienceEvent e) { + Player player = e.getPlayer(); + + if (SpectatorManager.getInstance().getSpectators().containsKey(player)) { + e.setCancelled(true); + } + } + + @EventHandler + public void onEntityTarget(EntityTargetEvent e) { + if (!(e.getTarget() instanceof Player player)) { + return; + } + + if (SpectatorManager.getInstance().getSpectators().containsKey(player)) { + e.setCancelled(true); + } + } + + /** + * Prevents players from swapping items in their hands before they have chosen a kit. + */ + @EventHandler + public void onPlayerSwapHandItemsEvent(PlayerSwapHandItemsEvent e) { + Player player = e.getPlayer(); + Profile profile = ProfileManager.getInstance().getProfile(player); + + if (profile.getStatus() == ProfileStatus.MATCH) { + Match match = MatchManager.getInstance().getLiveMatchByPlayer(player); + if (match != null) { + MatchFightPlayer matchFightPlayer = match.getMatchPlayers().get(player); + if (!matchFightPlayer.isHasChosenKit()) { + e.setCancelled(true); + } + } + } + } + + /** + * Prevents players from swapping items in their hands before they have chosen a kit. + * Or when they are in the kit editor. + */ + @EventHandler + public void onInventoryClick(InventoryClickEvent e) { + if (!(e.getWhoClicked() instanceof Player player)) { + return; + } + Profile profile = ProfileManager.getInstance().getProfile(player); + + if (e.getAction().equals(InventoryAction.HOTBAR_SWAP)) { + switch (profile.getStatus()) { + case MATCH -> { + Match match = MatchManager.getInstance().getLiveMatchByPlayer(player); + if (match != null) { + MatchFightPlayer matchFightPlayer = match.getMatchPlayers().get(player); + if (!matchFightPlayer.isHasChosenKit()) { + e.setCancelled(true); + } + } + } + case EDITOR -> e.setCancelled(true); + } + } + } + + @EventHandler + public void onWindCharge(ProjectileLaunchEvent e) { + if (!(e.getEntity() instanceof WindCharge)) { + return; + } + + if (!(e.getEntity().getShooter() instanceof Player player)) { + return; + } + + Profile profile = ProfileManager.getInstance().getProfile(player); + switch (profile.getStatus()) { + case MATCH -> { + Match match = MatchManager.getInstance().getLiveMatchByPlayer(player); + if (match != null && !match.getLadder().isBuild()) { + Common.sendMMMessage(player, LanguageManager.getString("MATCH.ONLY-CHARGE-WIND")); + e.setCancelled(true); + } + } + case EVENT -> { + Event event = EventManager.getInstance().getEventByPlayer(player); + if (event instanceof Brackets) { + Common.sendMMMessage(player, LanguageManager.getString("MATCH.ONLY-CHARGE-WIND")); + e.setCancelled(true); + } + } + } + } } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/listener/MatchEventListener.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/listener/MatchEventListener.java index aabc7192..002ee408 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/listener/MatchEventListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/listener/MatchEventListener.java @@ -5,7 +5,7 @@ import dev.nandi0813.practice.manager.fight.match.enums.TeamEnum; import dev.nandi0813.practice.manager.fight.match.interfaces.Team; import dev.nandi0813.practice.manager.fight.match.util.MatchFightPlayer; -import dev.nandi0813.practice.module.util.ClassImport; +import dev.nandi0813.practice.moved.ChangedBlock; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.entity.Player; @@ -39,7 +39,7 @@ public void onPlayerInteract(PlayerInteractEvent e) { Block clickedBlock = e.getClickedBlock(); if (action.equals(Action.RIGHT_CLICK_BLOCK) && clickedBlock != null) { if (clickedBlock.getType().equals(Material.CHEST) || clickedBlock.getType().equals(Material.TRAPPED_CHEST)) { - match.addBlockChange(ClassImport.createChangeBlock(clickedBlock)); + match.addBlockChange(new ChangedBlock(clickedBlock)); } } } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/type/duel/Duel.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/type/duel/Duel.java index 64629c6d..b086d17a 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/type/duel/Duel.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/type/duel/Duel.java @@ -22,7 +22,6 @@ import dev.nandi0813.practice.manager.profile.ProfileManager; import dev.nandi0813.practice.manager.server.sound.SoundManager; import dev.nandi0813.practice.manager.server.sound.SoundType; -import dev.nandi0813.practice.module.util.ClassImport; import dev.nandi0813.practice.util.playerutil.PlayerUtil; import lombok.Getter; import org.bukkit.entity.Player; @@ -144,7 +143,7 @@ protected void killPlayer(Player player, String deathMessage) { new TempKillPlayer(round, player, respawnableLadder.getRespawnTime()); SoundManager.getInstance().getSound(SoundType.MATCH_PLAYER_TEMP_DEATH).play(this.getPeople()); }); - ClassImport.getClasses().getPlayerUtil().clearInventory(player); + dev.nandi0813.practice.moved.PlayerUtil.clearInventory(player); player.setHealth(20); break; @@ -155,7 +154,7 @@ protected void killPlayer(Player player, String deathMessage) { this.teleportPlayer(player); endRound = true; SoundManager.getInstance().getSound(SoundType.MATCH_PLAYER_DEATH).play(this.getPeople()); - ClassImport.getClasses().getPlayerUtil().clearInventory(player); + dev.nandi0813.practice.moved.PlayerUtil.clearInventory(player); player.setHealth(20); } else if (isScoringLadder()) { // Scoring ladder (like Boxing) - death doesn't end round @@ -164,8 +163,8 @@ protected void killPlayer(Player player, String deathMessage) { // Default death behavior for standard ladders this.getCurrentStat(player).end(true); PlayerUtil.setFightPlayer(player); - addEntityChange(ClassImport.getClasses().getPlayerUtil().dropPlayerInventory(player)); - ClassImport.getClasses().getPlayerUtil().clearInventory(player); + addEntityChange(dev.nandi0813.practice.moved.PlayerUtil.dropPlayerInventory(player)); + dev.nandi0813.practice.moved.PlayerUtil.clearInventory(player); player.setHealth(20); SoundManager.getInstance().getSound(SoundType.MATCH_PLAYER_DEATH).play(this.getPeople()); endRound = true; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/type/partyffa/PartyFFA.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/type/partyffa/PartyFFA.java index 815deb62..ef785b77 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/type/partyffa/PartyFFA.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/type/partyffa/PartyFFA.java @@ -18,7 +18,6 @@ import dev.nandi0813.practice.manager.nametag.NametagManager; import dev.nandi0813.practice.manager.server.sound.SoundManager; import dev.nandi0813.practice.manager.server.sound.SoundType; -import dev.nandi0813.practice.module.util.ClassImport; import dev.nandi0813.practice.util.playerutil.PlayerUtil; import dev.nandi0813.practice.manager.fight.match.util.TempKillPlayer; import lombok.Getter; @@ -102,7 +101,7 @@ protected void killPlayer(Player player, String deathMessage) { new TempKillPlayer(round, player, respawnableLadder.getRespawnTime()); SoundManager.getInstance().getSound(SoundType.MATCH_PLAYER_TEMP_DEATH).play(this.getPeople()); }); - ClassImport.getClasses().getPlayerUtil().clearInventory(player); + dev.nandi0813.practice.moved.PlayerUtil.clearInventory(player); player.setHealth(20); return; @@ -119,9 +118,9 @@ protected void killPlayer(Player player, String deathMessage) { PlayerUtil.setFightPlayer(player); if (ladder.isDropInventoryPartyGames()) - addEntityChange(ClassImport.getClasses().getPlayerUtil().dropPlayerInventory(player)); + addEntityChange(dev.nandi0813.practice.moved.PlayerUtil.dropPlayerInventory(player)); else - ClassImport.getClasses().getPlayerUtil().clearInventory(player); + dev.nandi0813.practice.moved.PlayerUtil.clearInventory(player); // Send a death notification message String playerDieMsg = LanguageManager.getString("MATCH.PARTY-FFA.PLAYER-DIE"); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/type/playersvsplayers/PlayersVsPlayers.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/type/playersvsplayers/PlayersVsPlayers.java index 5f7d8576..e13cf0f5 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/type/playersvsplayers/PlayersVsPlayers.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/type/playersvsplayers/PlayersVsPlayers.java @@ -17,7 +17,6 @@ import dev.nandi0813.practice.manager.ladder.abstraction.interfaces.DeathResult; import dev.nandi0813.practice.manager.server.sound.SoundManager; import dev.nandi0813.practice.manager.server.sound.SoundType; -import dev.nandi0813.practice.module.util.ClassImport; import dev.nandi0813.practice.util.playerutil.PlayerUtil; import lombok.Getter; import org.bukkit.entity.Player; @@ -73,7 +72,7 @@ protected void killPlayer(Player player, String deathMessage) { new TempKillPlayer(round, player, respawnableLadder.getRespawnTime()); SoundManager.getInstance().getSound(SoundType.MATCH_PLAYER_TEMP_DEATH).play(this.getPeople()); }); - ClassImport.getClasses().getPlayerUtil().clearInventory(player); + dev.nandi0813.practice.moved.PlayerUtil.clearInventory(player); player.setHealth(20); break; @@ -89,7 +88,7 @@ protected void killPlayer(Player player, String deathMessage) { else MatchPlayerUtil.hidePlayerPartyGames(player, this.players); - ClassImport.getClasses().getPlayerUtil().clearInventory(player); + dev.nandi0813.practice.moved.PlayerUtil.clearInventory(player); player.setHealth(20); } else if (isScoringLadder()) { // Scoring ladder (like Boxing) - death doesn't end round @@ -102,9 +101,9 @@ protected void killPlayer(Player player, String deathMessage) { PlayerUtil.setFightPlayer(player); if (ladder.isDropInventoryPartyGames()) - addEntityChange(ClassImport.getClasses().getPlayerUtil().dropPlayerInventory(player)); + addEntityChange(dev.nandi0813.practice.moved.PlayerUtil.dropPlayerInventory(player)); else - ClassImport.getClasses().getPlayerUtil().clearInventory(player); + dev.nandi0813.practice.moved.PlayerUtil.clearInventory(player); if (this.getLanguagePath() != null) { String teamDeathMSG = LanguageManager.getString(this.getLanguagePath() + ".PLAYER-DIE"); @@ -123,7 +122,7 @@ protected void killPlayer(Player player, String deathMessage) { else MatchPlayerUtil.hidePlayerPartyGames(player, this.players); - ClassImport.getClasses().getPlayerUtil().clearInventory(player); + dev.nandi0813.practice.moved.PlayerUtil.clearInventory(player); player.setHealth(20); } break; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/util/KitUtil.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/util/KitUtil.java index 91549a19..ac9be193 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/util/KitUtil.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/util/KitUtil.java @@ -2,8 +2,8 @@ import dev.nandi0813.practice.manager.fight.match.enums.TeamEnum; import dev.nandi0813.practice.manager.ladder.abstraction.Ladder; -import dev.nandi0813.practice.module.interfaces.KitData; -import dev.nandi0813.practice.module.util.ClassImport; +import dev.nandi0813.practice.moved.KitData; +import dev.nandi0813.practice.moved.LadderUtil; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; @@ -20,15 +20,15 @@ public static void loadDefaultLadderKit(Player player, TeamEnum team, Ladder lad } public static void loadKit(Player player, TeamEnum team, ItemStack[] armor, ItemStack[] inventory, ItemStack[] extra) { - ClassImport.getClasses().getPlayerUtil().clearInventory(player); + dev.nandi0813.practice.moved.PlayerUtil.clearInventory(player); if (team == null) { - ClassImport.getClasses().getLadderUtil().loadInventory(player, armor, inventory, extra); + LadderUtil.loadInventory(player, armor, inventory, extra); } else { List inventoryList = new ArrayList<>(); for (ItemStack item : new ArrayList<>(Arrays.asList(inventory.clone()))) { if (item != null) { - item = ClassImport.getClasses().getLadderUtil().changeItemColor(item, team.getColor()); + item = LadderUtil.changeItemColor(item, team.getColor()); inventoryList.add(item); } else { inventoryList.add(null); @@ -38,7 +38,7 @@ public static void loadKit(Player player, TeamEnum team, ItemStack[] armor, Item List armorList = new ArrayList<>(); for (ItemStack item : new ArrayList<>(Arrays.asList(armor.clone()))) { if (item != null) { - item = ClassImport.getClasses().getLadderUtil().changeItemColor(item, team.getColor()); + item = LadderUtil.changeItemColor(item, team.getColor()); armorList.add(item); } else { armorList.add(null); @@ -49,7 +49,7 @@ public static void loadKit(Player player, TeamEnum team, ItemStack[] armor, Item if (extra != null) { for (ItemStack item : new ArrayList<>(Arrays.asList(extra.clone()))) { if (item != null) { - item = ClassImport.getClasses().getLadderUtil().changeItemColor(item, team.getColor()); + item = LadderUtil.changeItemColor(item, team.getColor()); extraList.add(item); } else { extraList.add(null); @@ -57,7 +57,7 @@ public static void loadKit(Player player, TeamEnum team, ItemStack[] armor, Item } } - ClassImport.getClasses().getLadderUtil().loadInventory(player, + LadderUtil.loadInventory(player, armorList.toArray(new ItemStack[0]), inventoryList.toArray(new ItemStack[0]), extra != null ? extraList.toArray(new ItemStack[0]) : null); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/util/MatchPlayerUtil.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/util/MatchPlayerUtil.java index 07c2fbcd..f59c563d 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/util/MatchPlayerUtil.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/util/MatchPlayerUtil.java @@ -1,7 +1,6 @@ package dev.nandi0813.practice.manager.fight.match.util; import dev.nandi0813.practice.ZonePractice; -import dev.nandi0813.practice.module.util.ClassImport; import dev.nandi0813.practice.util.entityhider.PlayerHider; import dev.nandi0813.practice.util.playerutil.PlayerUtil; import org.bukkit.Bukkit; @@ -20,7 +19,7 @@ public static void hidePlayerPartyGames(Player hider, List matchPlayers) PlayerUtil.setFightPlayer(hider); - ClassImport.getClasses().getPlayerUtil().setCollidesWithEntities(hider, false); + dev.nandi0813.practice.moved.PlayerUtil.setCollidesWithEntities(hider, false); Bukkit.getScheduler().runTaskLater(ZonePractice.getInstance(), () -> { hider.setAllowFlight(true); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/util/BlockUtil.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/util/BlockUtil.java index 2f389a30..006f8c9a 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/util/BlockUtil.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/util/BlockUtil.java @@ -3,7 +3,7 @@ import dev.nandi0813.practice.ZonePractice; import dev.nandi0813.practice.manager.fight.ffa.game.FFA; import dev.nandi0813.practice.manager.fight.match.Match; -import dev.nandi0813.practice.module.util.ClassImport; +import dev.nandi0813.practice.moved.ChangedBlock; import dev.nandi0813.practice.util.interfaces.Spectatable; import org.bukkit.block.Block; import org.bukkit.metadata.MetadataValue; @@ -15,14 +15,14 @@ public enum BlockUtil { public static void breakBlock(Match match, Block block) { if (match == null) return; - match.addBlockChange(ClassImport.createChangeBlock(block)); + match.addBlockChange(new ChangedBlock(block)); block.breakNaturally(); } public static void breakBlock(FFA ffa, Block block) { if (ffa == null) return; - ffa.getFightChange().addBlockChange(ClassImport.createChangeBlock(block)); + ffa.getFightChange().addBlockChange(new ChangedBlock(block)); block.breakNaturally(); } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/util/Stats/Statistic.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/util/Stats/Statistic.java index ca00ded8..6d3224db 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/util/Stats/Statistic.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/util/Stats/Statistic.java @@ -1,6 +1,6 @@ package dev.nandi0813.practice.manager.fight.util.Stats; -import dev.nandi0813.practice.module.interfaces.StatisticListener; +import dev.nandi0813.practice.moved.StatisticListener; import dev.nandi0813.practice.util.NumberUtil; import lombok.Getter; import lombok.Setter; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/gui/GUIItem.java b/core/src/main/java/dev/nandi0813/practice/manager/gui/GUIItem.java index 3e7eda19..b8371ca1 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/gui/GUIItem.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/gui/GUIItem.java @@ -1,7 +1,7 @@ package dev.nandi0813.practice.manager.gui; -import dev.nandi0813.practice.module.interfaces.ItemCreateUtil; -import dev.nandi0813.practice.module.util.ClassImport; +import dev.nandi0813.practice.moved.ItemCreateUtil; +import dev.nandi0813.practice.moved.LadderUtil; import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.StringUtil; import lombok.Getter; @@ -134,7 +134,7 @@ public ItemStack get() { } if (durability > 0) { - ClassImport.getClasses().getLadderUtil().setDurability(itemStack, durability); + LadderUtil.setDurability(itemStack, durability); } } @@ -149,12 +149,12 @@ public ItemStack get() { } if (glowing && enchantments.isEmpty()) { - itemMeta.addEnchant(Enchantment.DURABILITY, 1, true); + itemMeta.addEnchant(Enchantment.UNBREAKING, 1, true); } // Apply unbreakable status if set (for modern versions to prevent durability bars) if (unbreakable) { - itemMeta = ClassImport.getClasses().getLadderUtil().setUnbreakable(itemMeta, true); + itemMeta = LadderUtil.setUnbreakable(itemMeta, true); } if (!itemFlags.isEmpty()) { diff --git a/core/src/main/java/dev/nandi0813/practice/manager/gui/GUIManager.java b/core/src/main/java/dev/nandi0813/practice/manager/gui/GUIManager.java index e6ad5749..11d57138 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/gui/GUIManager.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/gui/GUIManager.java @@ -7,7 +7,7 @@ import dev.nandi0813.practice.manager.profile.Profile; import dev.nandi0813.practice.manager.profile.ProfileManager; import dev.nandi0813.practice.manager.profile.enums.ProfileStatus; -import dev.nandi0813.practice.module.util.ClassImport; +import dev.nandi0813.practice.moved.ItemCreateUtil; import lombok.Getter; import org.bukkit.Bukkit; import org.bukkit.Material; @@ -43,7 +43,7 @@ public static GUIManager getInstance() { @Getter private static final ItemStack FILLER_ITEM = GUIFile.getGuiItem("GENERAL-FILLER-ITEM").get(); @Getter - private static final ItemStack DUMMY_ITEM = ClassImport.getClasses().getItemCreateUtil().createItem("DUMMY", Material.GLOWSTONE_DUST); + private static final ItemStack DUMMY_ITEM = ItemCreateUtil.createItem("DUMMY", Material.GLOWSTONE_DUST); private GUIManager() { Bukkit.getPluginManager().registerEvents(this, ZonePractice.getInstance()); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/arena/ArenaCreateGui.java b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/arena/ArenaCreateGui.java index a3a7a56b..5d50566a 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/arena/ArenaCreateGui.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/arena/ArenaCreateGui.java @@ -13,7 +13,7 @@ import dev.nandi0813.practice.manager.gui.GUIManager; import dev.nandi0813.practice.manager.gui.GUIType; import dev.nandi0813.practice.manager.gui.setup.arena.ArenaGUISetupManager; -import dev.nandi0813.practice.module.util.ClassImport; +import dev.nandi0813.practice.moved.ItemCreateUtil; import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.InventoryUtil; import lombok.Getter; @@ -61,7 +61,7 @@ public void update() { inventory.setItem(16, null); for (ArenaType type : ArenaType.values()) { - ItemStack item = ClassImport.getClasses().getItemCreateUtil().createItem("&e" + type.getName(), type.getIcon()); + ItemStack item = ItemCreateUtil.createItem("&e" + type.getName(), type.getIcon()); ItemMeta itemMeta = item.getItemMeta(); itemMeta.setLore(type.getDescription()); item.setItemMeta(itemMeta); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/customladder/premadecustom/CustomLadderEditorGui.java b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/customladder/premadecustom/CustomLadderEditorGui.java index 7505763c..a348468e 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/customladder/premadecustom/CustomLadderEditorGui.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/customladder/premadecustom/CustomLadderEditorGui.java @@ -14,9 +14,8 @@ import dev.nandi0813.practice.manager.profile.Profile; import dev.nandi0813.practice.manager.profile.ProfileManager; import dev.nandi0813.practice.manager.profile.enums.ProfileStatus; -import dev.nandi0813.practice.module.interfaces.ItemCreateUtil; -import dev.nandi0813.practice.module.util.ClassImport; -import dev.nandi0813.practice.module.util.VersionChecker; +import dev.nandi0813.practice.moved.ItemCreateUtil; +import dev.nandi0813.practice.moved.VersionChecker; import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.InventoryUtil; import dev.nandi0813.practice.util.StringUtil; @@ -135,16 +134,14 @@ public void update() { if (inventory.getItem(i) == null) inventory.setItem(i, fillerItem); - if (Objects.requireNonNull(VersionChecker.getBukkitVersion()).isSecondHand()) { - if (customKit.getExtra() != null) { - if (customKit.getExtra().length > 0) { - inventory.setItem(14, customKit.getExtra()[0]); - } else { - inventory.setItem(14, null); - } + if (customKit.getExtra() != null) { + if (customKit.getExtra().length > 0) { + inventory.setItem(14, customKit.getExtra()[0]); } else { - inventory.setItem(14, GUIManager.getDUMMY_ITEM()); + inventory.setItem(14, null); } + } else { + inventory.setItem(14, GUIManager.getDUMMY_ITEM()); } updatePlayers(); @@ -207,14 +204,12 @@ public void handleCloseEvent(InventoryCloseEvent e) { NormalLadder ladder = customLadderEditorGui.getLadder(); if (ladder.isEnabled() && ladder.isEditable() && !ladder.isFrozen()) { - ItemStack[] inventoryStorageContent = ClassImport.getClasses().getPlayerUtil().getInventoryStorageContent(player); + ItemStack[] inventoryStorageContent = dev.nandi0813.practice.moved.PlayerUtil.getInventoryStorageContent(player); customKit.setInventory(inventoryStorageContent); - if (Objects.requireNonNull(VersionChecker.getBukkitVersion()).isSecondHand()) { - customKit.setExtra(new ItemStack[]{this.gui.get(1).getItem(14)}); - } + customKit.setExtra(new ItemStack[]{this.gui.get(1).getItem(14)}); } - ClassImport.getClasses().getPlayerUtil().clearInventory(player); + dev.nandi0813.practice.moved.PlayerUtil.clearInventory(player); Bukkit.getScheduler().runTaskLater(ZonePractice.getInstance(), () -> { @@ -234,7 +229,7 @@ public void open(Player player) { Profile playerProfile = ProfileManager.getInstance().getProfile(player); playerProfile.setStatus(ProfileStatus.EDITOR); - ClassImport.getClasses().getPlayerUtil().clearInventory(player); + dev.nandi0813.practice.moved.PlayerUtil.clearInventory(player); Map kits; if (ranked) kits = profile.getRankedCustomKits().get(ladder); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/customladder/premadecustom/CustomLadderSelectorGui.java b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/customladder/premadecustom/CustomLadderSelectorGui.java index fd33610f..147f6f64 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/customladder/premadecustom/CustomLadderSelectorGui.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/customladder/premadecustom/CustomLadderSelectorGui.java @@ -9,7 +9,7 @@ import dev.nandi0813.practice.manager.profile.Profile; import dev.nandi0813.practice.manager.profile.ProfileManager; import dev.nandi0813.practice.manager.profile.enums.ProfileStatus; -import dev.nandi0813.practice.module.interfaces.ItemCreateUtil; +import dev.nandi0813.practice.moved.ItemCreateUtil; import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.InventoryUtil; import org.bukkit.entity.Player; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/customladder/premadecustom/CustomLadderSumGui.java b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/customladder/premadecustom/CustomLadderSumGui.java index 350f2e84..cd352963 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/customladder/premadecustom/CustomLadderSumGui.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/customladder/premadecustom/CustomLadderSumGui.java @@ -12,7 +12,6 @@ import dev.nandi0813.practice.manager.profile.Profile; import dev.nandi0813.practice.manager.profile.ProfileManager; import dev.nandi0813.practice.manager.profile.enums.ProfileStatus; -import dev.nandi0813.practice.module.util.ClassImport; import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.InventoryUtil; import org.bukkit.Bukkit; @@ -143,7 +142,7 @@ public void handleCloseEvent(InventoryCloseEvent e) { Player player = (Player) e.getPlayer(); Profile profile = ProfileManager.getInstance().getProfile(player); - ClassImport.getClasses().getPlayerUtil().clearInventory(player); + dev.nandi0813.practice.moved.PlayerUtil.clearInventory(player); Bukkit.getScheduler().runTaskLater(ZonePractice.getInstance(), () -> { @@ -164,7 +163,7 @@ public void open(Player player) { ItemStack backToItem = GUIFile.getGuiItem("GUIS.KIT-EDITOR.KIT-SELECTOR.ICONS.BACK-TO-KIT-SELECTOR").get(); - ClassImport.getClasses().getPlayerUtil().clearInventory(player); + dev.nandi0813.practice.moved.PlayerUtil.clearInventory(player); for (int i = 0; i < 9; i++) player.getInventory().setItem(i, backToItem); } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/ladder/LadderCreateGui.java b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/ladder/LadderCreateGui.java index a7a196a0..57766a9a 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/ladder/LadderCreateGui.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/ladder/LadderCreateGui.java @@ -11,7 +11,7 @@ import dev.nandi0813.practice.manager.ladder.abstraction.Ladder; import dev.nandi0813.practice.manager.ladder.abstraction.normal.NormalLadder; import dev.nandi0813.practice.manager.ladder.enums.LadderType; -import dev.nandi0813.practice.module.util.ClassImport; +import dev.nandi0813.practice.moved.ItemCreateUtil; import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.InventoryUtil; import dev.nandi0813.practice.util.StringUtil; @@ -54,7 +54,7 @@ public void update() { inventory.setItem(i, GUIManager.getFILLER_ITEM()); for (LadderType type : LadderType.values()) { - ItemStack item = ClassImport.getClasses().getItemCreateUtil().createItem("&e" + type.getName(), type.getIcon()); + ItemStack item = ItemCreateUtil.createItem("&e" + type.getName(), type.getIcon()); ItemMeta itemMeta = item.getItemMeta(); itemMeta.setLore(StringUtil.CC(type.getDescription())); item.setItemMeta(itemMeta); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/ladder/LadderPreviewGui.java b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/ladder/LadderPreviewGui.java index 9e3494ed..2be9ff7c 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/ladder/LadderPreviewGui.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/ladder/LadderPreviewGui.java @@ -6,7 +6,7 @@ import dev.nandi0813.practice.manager.gui.GUIManager; import dev.nandi0813.practice.manager.gui.GUIType; import dev.nandi0813.practice.manager.ladder.abstraction.normal.NormalLadder; -import dev.nandi0813.practice.module.interfaces.KitData; +import dev.nandi0813.practice.moved.KitData; import dev.nandi0813.practice.util.InventoryUtil; import dev.nandi0813.practice.util.StringUtil; import org.apache.commons.lang3.StringUtils; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/leaderboard/LbGuiUtil.java b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/leaderboard/LbGuiUtil.java index 61517f4e..937beafb 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/leaderboard/LbGuiUtil.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/leaderboard/LbGuiUtil.java @@ -10,8 +10,7 @@ import dev.nandi0813.practice.manager.leaderboard.types.LbSecondaryType; import dev.nandi0813.practice.manager.profile.Profile; import dev.nandi0813.practice.manager.profile.ProfileManager; -import dev.nandi0813.practice.module.interfaces.ItemCreateUtil; -import dev.nandi0813.practice.module.util.ClassImport; +import dev.nandi0813.practice.moved.ItemCreateUtil; import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.StringUtil; import org.bukkit.Material; @@ -30,7 +29,7 @@ public enum LbGuiUtil { // if it says not used don't listen to it, buggy public static ItemStack createProfileStatItem(Profile profile, Player opener) { String playerName = profile.getPlayer().getName(); - ItemStack itemStack = ClassImport.getClasses().getItemMaterialUtil().getPlayerHead(profile.getPlayer()); + ItemStack itemStack = ItemCreateUtil.getPlayerHead(profile.getPlayer()); ItemMeta itemMeta = itemStack.getItemMeta(); String displayName; @@ -91,7 +90,7 @@ public static GUIItem createLadderStatItem(Profile profile, NormalLadder ladder) } public static ItemStack createProfileAllStatItem(Profile profile) { - ItemStack itemStack = ClassImport.getClasses().getItemMaterialUtil().getPlayerHead(profile.getPlayer()); + ItemStack itemStack = ItemCreateUtil.getPlayerHead(profile.getPlayer()); ItemMeta itemMeta = itemStack.getItemMeta(); List lore = new ArrayList<>(); @@ -164,7 +163,7 @@ public static ItemStack createEloLbItem(NormalLadder ladder) { } } - return ClassImport.getClasses().getItemCreateUtil().createItem(ladder.getIcon(), GUIFile.getString("GUIS.STATISTICS.ELO-LEADERBOARD.ICONS.LADDER-LEADERBOARD.NAME") + return ItemCreateUtil.createItem(ladder.getIcon(), GUIFile.getString("GUIS.STATISTICS.ELO-LEADERBOARD.ICONS.LADDER-LEADERBOARD.NAME") .replace("%ladder%", ladder.getDisplayName()) .replace("%number%", String.valueOf(showPlayers)) , lore); @@ -217,7 +216,7 @@ public static ItemStack createGlobalEloLb() { } } - return ClassImport.getClasses().getItemCreateUtil().createItem(GUIFile.getString("GUIS.STATISTICS.ELO-LEADERBOARD.ICONS.GLOBAL-LEADERBOARD.NAME").replace("%number%", String.valueOf(showPlayers)), Material.valueOf(GUIFile.getString("GUIS.STATISTICS.ELO-LEADERBOARD.ICONS.GLOBAL-LEADERBOARD.MATERIAL")), lore); + return ItemCreateUtil.createItem(GUIFile.getString("GUIS.STATISTICS.ELO-LEADERBOARD.ICONS.GLOBAL-LEADERBOARD.NAME").replace("%number%", String.valueOf(showPlayers)), Material.valueOf(GUIFile.getString("GUIS.STATISTICS.ELO-LEADERBOARD.ICONS.GLOBAL-LEADERBOARD.MATERIAL")), lore); } public static ItemStack createWinLbItem(NormalLadder ladder) { @@ -266,7 +265,7 @@ public static ItemStack createWinLbItem(NormalLadder ladder) { } } - return ClassImport.getClasses().getItemCreateUtil().createItem(ladder.getIcon(), GUIFile.getString("GUIS.STATISTICS.WIN-LEADERBOARD.ICONS.LADDER-LEADERBOARD.NAME") + return ItemCreateUtil.createItem(ladder.getIcon(), GUIFile.getString("GUIS.STATISTICS.WIN-LEADERBOARD.ICONS.LADDER-LEADERBOARD.NAME") .replace("%ladder%", ladder.getDisplayName()) .replace("%number%", String.valueOf(showPlayers)) , lore); @@ -319,7 +318,7 @@ public static ItemStack createGlobalWinLb() { } } - return ClassImport.getClasses().getItemCreateUtil().createItem(GUIFile.getString("GUIS.STATISTICS.WIN-LEADERBOARD.ICONS.GLOBAL-LEADERBOARD.NAME").replace("%number%", String.valueOf(showPlayers)), Material.valueOf(GUIFile.getString("GUIS.STATISTICS.WIN-LEADERBOARD.ICONS.GLOBAL-LEADERBOARD.MATERIAL")), lore); + return ItemCreateUtil.createItem(GUIFile.getString("GUIS.STATISTICS.WIN-LEADERBOARD.ICONS.GLOBAL-LEADERBOARD.NAME").replace("%number%", String.valueOf(showPlayers)), Material.valueOf(GUIFile.getString("GUIS.STATISTICS.WIN-LEADERBOARD.ICONS.GLOBAL-LEADERBOARD.MATERIAL")), lore); } public static ItemStack getCacheInfoItem() { @@ -332,9 +331,9 @@ public static ItemStack getCacheInfoItem() { lore.add("&7Next update: &eWithin 5 minutes"); lore.add("&8&m------------------------"); - return ClassImport.getClasses().getItemCreateUtil().createItem( + return ItemCreateUtil.createItem( "&eAuto-Update Info", - ClassImport.getClasses().getItemMaterialUtil().getClock(), + Material.CLOCK, lore ); } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/party/OtherPartiesGui.java b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/party/OtherPartiesGui.java index 460c4a4f..d0aae902 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/party/OtherPartiesGui.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/party/OtherPartiesGui.java @@ -11,8 +11,7 @@ import dev.nandi0813.practice.manager.party.PartyManager; import dev.nandi0813.practice.manager.profile.Profile; import dev.nandi0813.practice.manager.profile.ProfileManager; -import dev.nandi0813.practice.module.interfaces.ItemCreateUtil; -import dev.nandi0813.practice.module.util.ClassImport; +import dev.nandi0813.practice.moved.ItemCreateUtil; import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.InventoryUtil; import lombok.Getter; @@ -109,7 +108,7 @@ public void handleClickEvent(InventoryClickEvent e) { } public ItemStack getPartyItem(Party party) { - ItemStack itemStack = ClassImport.getClasses().getItemMaterialUtil().getPlayerHead(party.getLeader()); + ItemStack itemStack = ItemCreateUtil.getPlayerHead(party.getLeader()); ItemMeta itemMeta = itemStack.getItemMeta(); List lore = new ArrayList<>(); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/profile/ProfileLadderStats.java b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/profile/ProfileLadderStats.java index 74ce4aac..edf7ae20 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/profile/ProfileLadderStats.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/profile/ProfileLadderStats.java @@ -10,7 +10,7 @@ import dev.nandi0813.practice.manager.ladder.abstraction.normal.NormalLadder; import dev.nandi0813.practice.manager.profile.Profile; import dev.nandi0813.practice.manager.profile.statistics.LadderStats; -import dev.nandi0813.practice.module.util.ClassImport; +import dev.nandi0813.practice.moved.ItemCreateUtil; import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.InventoryUtil; import org.bukkit.Bukkit; @@ -129,12 +129,12 @@ private ItemStack getLadderStatItem(NormalLadder ladder) { } if (ladder.getIcon() != null) - return ClassImport.getClasses().getItemCreateUtil().createItem( + return ItemCreateUtil.createItem( ladder.getIcon(), GUIFile.getString("GUIS.PLAYER-INFORMATION.LADDER-STATS.ICONS.LADDER.UNRANKED-LADDER-STATS.NAME").replace("%ladder%", ladder.getDisplayName()), lore); else - return ClassImport.getClasses().getItemCreateUtil().createItem( + return ItemCreateUtil.createItem( GUIFile.getString("GUIS.PLAYER-INFORMATION.LADDER-STATS.ICONS.LADDER.UNRANKED-LADDER-STATS.NAME").replace("%ladder%", ladder.getDisplayName()), Material.valueOf(GUIFile.getString("GUIS.PLAYER-INFORMATION.LADDER-STATS.ICONS.LADDER.UNRANKED-LADDER-STATS.DEFAULT-MATERIAL")), lore); @@ -153,12 +153,12 @@ private ItemStack getLadderStatItem(NormalLadder ladder) { } if (ladder.getIcon() != null) - return ClassImport.getClasses().getItemCreateUtil().createItem( + return ItemCreateUtil.createItem( ladder.getIcon(), GUIFile.getString("GUIS.PLAYER-INFORMATION.LADDER-STATS.ICONS.LADDER.RANKED-LADDER-STATS.NAME").replace("%ladder%", ladder.getDisplayName()), lore); else - return ClassImport.getClasses().getItemCreateUtil().createItem( + return ItemCreateUtil.createItem( GUIFile.getString("GUIS.PLAYER-INFORMATION.LADDER-STATS.ICONS.LADDER.RANKED-LADDER-STATS.NAME").replace("%ladder%", ladder.getDisplayName()), Material.valueOf(GUIFile.getString("GUIS.PLAYER-INFORMATION.LADDER-STATS.ICONS.LADDER.RANKED-LADDER-STATS.DEFAULT-MATERIAL")), lore); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/profile/ProfileSetupGui.java b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/profile/ProfileSetupGui.java index ba5a1432..014f3965 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/profile/ProfileSetupGui.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/profile/ProfileSetupGui.java @@ -17,7 +17,8 @@ import dev.nandi0813.practice.manager.profile.RankedBan; import dev.nandi0813.practice.manager.profile.enums.ProfileStatus; import dev.nandi0813.practice.manager.spectator.SpectatorManager; -import dev.nandi0813.practice.module.util.ClassImport; +import dev.nandi0813.practice.moved.ItemCreateUtil; +import dev.nandi0813.practice.moved.PlayerUtil; import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.InventoryUtil; import dev.nandi0813.practice.util.StringUtil; @@ -197,7 +198,7 @@ public void handleClickEvent(InventoryClickEvent e) { } private static ItemStack getBasicInfoItem(Profile profile) { - GUIItem guiItem = new GUIItem(ClassImport.getClasses().getItemMaterialUtil().getPlayerHead(profile.getPlayer())); + GUIItem guiItem = new GUIItem(ItemCreateUtil.getPlayerHead(profile.getPlayer())); guiItem.setName(GUIFile.getString("GUIS.PLAYER-INFORMATION.MAIN-PAGE.ICONS.BASIC-INFO.NAME")); guiItem.setLore(GUIFile.getStringList("GUIS.PLAYER-INFORMATION.MAIN-PAGE.ICONS.BASIC-INFO.LORE")); @@ -228,7 +229,7 @@ private static ItemStack getOnlineItem(Profile profile) { .replace("%health%", String.valueOf(player.getHealth())) .replace("%food%", String.valueOf(player.getFoodLevel())) .replace("%hit_delay%", String.valueOf(player.getMaximumNoDamageTicks())) - .replace("%ping%", String.valueOf(ClassImport.getClasses().getPlayerUtil().getPing(player))) + .replace("%ping%", String.valueOf(dev.nandi0813.practice.moved.PlayerUtil.getPing(player))) .get(); } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/selectors/ArenaSelectorGui.java b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/selectors/ArenaSelectorGui.java index b9991369..396bc35c 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/selectors/ArenaSelectorGui.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/selectors/ArenaSelectorGui.java @@ -17,7 +17,7 @@ import dev.nandi0813.practice.manager.party.Party; import dev.nandi0813.practice.manager.party.PartyManager; import dev.nandi0813.practice.manager.party.matchrequest.PartyRequest; -import dev.nandi0813.practice.module.util.ClassImport; +import dev.nandi0813.practice.moved.ItemCreateUtil; import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.InventoryUtil; import org.bukkit.Bukkit; @@ -71,7 +71,7 @@ public void update() { for (String line : GUIFile.getStringList("GUIS.SELECTORS.ARENA-SELECTOR.ICONS.ARENA-ICON.LORE")) lore.add(line.replace("%arena%", arena.getDisplayName())); - ItemStack icon = ClassImport.getClasses().getItemCreateUtil().createItem(arena.getIcon(), GUIFile.getString("GUIS.SELECTORS.ARENA-SELECTOR.ICONS.ARENA-ICON.NAME").replace("%arena%", arena.getDisplayName()), lore); + ItemStack icon = ItemCreateUtil.createItem(arena.getIcon(), GUIFile.getString("GUIS.SELECTORS.ARENA-SELECTOR.ICONS.ARENA-ICON.NAME").replace("%arena%", arena.getDisplayName()), lore); int slot = inventory.firstEmpty(); inventory.setItem(slot, icon); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/selectors/LadderSelectorGui.java b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/selectors/LadderSelectorGui.java index 9e340580..b0034ec1 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/selectors/LadderSelectorGui.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/selectors/LadderSelectorGui.java @@ -24,7 +24,7 @@ import dev.nandi0813.practice.manager.party.PartyManager; import dev.nandi0813.practice.manager.party.matchrequest.PartyRequest; import dev.nandi0813.practice.manager.profile.Profile; -import dev.nandi0813.practice.module.util.ClassImport; +import dev.nandi0813.practice.moved.ItemCreateUtil; import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.InventoryUtil; import org.bukkit.Bukkit; @@ -81,7 +81,7 @@ public void update() { for (String line : GUIFile.getStringList("GUIS.SELECTORS.LADDER-SELECTOR.ICONS.LADDER.LORE")) lore.add(line.replace("%ladder%", ladder.getDisplayName())); - ItemStack icon = ClassImport.getClasses().getItemCreateUtil().createItem(ladder.getIcon(), GUIFile.getString("GUIS.SELECTORS.LADDER-SELECTOR.ICONS.LADDER.NAME").replace("%ladder%", ladder.getDisplayName()), lore); + ItemStack icon = ItemCreateUtil.createItem(ladder.getIcon(), GUIFile.getString("GUIS.SELECTORS.LADDER-SELECTOR.ICONS.LADDER.NAME").replace("%ladder%", ladder.getDisplayName()), lore); int slot = inventory.firstEmpty(); gui.get(1).setItem(slot, icon); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/gui/setup/arena/ArenaSetupUtil.java b/core/src/main/java/dev/nandi0813/practice/manager/gui/setup/arena/ArenaSetupUtil.java index 2ea42f96..d03a930a 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/gui/setup/arena/ArenaSetupUtil.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/gui/setup/arena/ArenaSetupUtil.java @@ -6,7 +6,7 @@ import dev.nandi0813.practice.manager.backend.GUIFile; import dev.nandi0813.practice.manager.gui.GUIItem; import dev.nandi0813.practice.manager.ladder.abstraction.Ladder; -import dev.nandi0813.practice.module.util.ClassImport; +import dev.nandi0813.practice.moved.ItemCreateUtil; import dev.nandi0813.practice.util.Common; import lombok.Getter; import org.bukkit.Material; @@ -35,14 +35,14 @@ public static ItemStack getNameItem(Arena arena) { } if (arena.getIcon() != null) { - return ClassImport.getClasses().getItemCreateUtil().createItem( + return ItemCreateUtil.createItem( arena.getIcon(), GUIFile.getString("GUIS.SETUP.ARENA.ARENA-MAIN.ICONS.ARENA-NAME.NAME") .replace("%arenaDisplayName%", arena.getDisplayName()) .replace("%arenaName%", arena.getName()), lore); } else { - return ClassImport.getClasses().getItemCreateUtil().createItem( + return ItemCreateUtil.createItem( GUIFile.getString("GUIS.SETUP.ARENA.ARENA-MAIN.ICONS.ARENA-NAME.NAME") .replace("%arenaDisplayName%", arena.getDisplayName()) .replace("%arenaName%", arena.getName()), diff --git a/core/src/main/java/dev/nandi0813/practice/manager/gui/setup/arena/arenasettings/normal/CopyGui.java b/core/src/main/java/dev/nandi0813/practice/manager/gui/setup/arena/arenasettings/normal/CopyGui.java index c62018fb..b45363dc 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/gui/setup/arena/arenasettings/normal/CopyGui.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/gui/setup/arena/arenasettings/normal/CopyGui.java @@ -14,7 +14,6 @@ import dev.nandi0813.practice.manager.gui.setup.arena.ArenaSetupUtil; import dev.nandi0813.practice.manager.profile.Profile; import dev.nandi0813.practice.manager.profile.ProfileManager; -import dev.nandi0813.practice.module.util.ClassImport; import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.InventoryUtil; import dev.nandi0813.practice.util.PageUtil; @@ -164,7 +163,7 @@ public void handleClickEvent(InventoryClickEvent e) { return; } - Location location = ClassImport.getClasses().getArenaCopyUtil().createCopy(profile, arena); + Location location = ZonePractice.getArenaCopyUtilListener().createCopy(profile, arena); if (!ConfigManager.getBoolean("ARENA.TELEPORT-TO-COPY")) return; player.teleport(location); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/gui/setup/event/EventSetupUtil.java b/core/src/main/java/dev/nandi0813/practice/manager/gui/setup/event/EventSetupUtil.java index 8481dda9..0f0ff83a 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/gui/setup/event/EventSetupUtil.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/gui/setup/event/EventSetupUtil.java @@ -2,7 +2,7 @@ import dev.nandi0813.practice.manager.backend.GUIFile; import dev.nandi0813.practice.manager.fight.event.interfaces.EventData; -import dev.nandi0813.practice.module.util.ClassImport; +import dev.nandi0813.practice.moved.ItemCreateUtil; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; @@ -22,7 +22,7 @@ public static ItemStack getMarkerItem(EventData eventData) { lore.add("&6&lRIGHT-CLICK &7marks the second corner."); lore.add(""); lore.add("&c&lNote: &7This can't be undone."); - return ClassImport.getClasses().getItemCreateUtil().createItem("&bCorner Marker", Material.STICK, lore); + return ItemCreateUtil.createItem("&bCorner Marker", Material.STICK, lore); } public static ItemStack getBroadcastIntervalItem(final int broadcastInterval) { diff --git a/core/src/main/java/dev/nandi0813/practice/manager/gui/setup/ladder/laddersettings/InventoryGui.java b/core/src/main/java/dev/nandi0813/practice/manager/gui/setup/ladder/laddersettings/InventoryGui.java index 2739b9d6..46570865 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/gui/setup/ladder/laddersettings/InventoryGui.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/gui/setup/ladder/laddersettings/InventoryGui.java @@ -10,8 +10,8 @@ import dev.nandi0813.practice.manager.gui.setup.ladder.LadderSetupManager; import dev.nandi0813.practice.manager.ladder.LadderManager; import dev.nandi0813.practice.manager.ladder.abstraction.normal.NormalLadder; -import dev.nandi0813.practice.module.interfaces.KitData; -import dev.nandi0813.practice.module.util.VersionChecker; +import dev.nandi0813.practice.moved.KitData; +import dev.nandi0813.practice.moved.VersionChecker; import dev.nandi0813.practice.util.ArmorUtil; import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.InventoryUtil; @@ -33,10 +33,6 @@ public class InventoryGui extends GUI { - private static final boolean secondHand = Optional.ofNullable(VersionChecker.getBukkitVersion()) - .map(VersionChecker.BukkitVersion::isSecondHand) - .orElse(false); - @Getter private final NormalLadder ladder; private final KitData kitData; @@ -90,11 +86,8 @@ public void update() { inventory.setItem(i, armorContent.get(i - 50)); } - if (secondHand) { - if (kitData.getExtra() != null) - inventory.setItem(49, kitData.getExtra()[0]); - } else - inventory.setItem(49, GUIManager.getFILLER_ITEM()); + if (kitData.getExtra() != null) + inventory.setItem(49, kitData.getExtra()[0]); } updatePlayers(); @@ -153,11 +146,9 @@ public void save() { for (int i = 0; i < 27; i++) inventoryContent.add(inventory.getItem(i)); for (int i = 50; i < 54; i++) armorContent.add(inventory.getItem(i)); - if (secondHand) { - List extraContent = new ArrayList<>(); - extraContent.add(inventory.getItem(49)); - kitData.setExtra(extraContent.toArray(new ItemStack[0])); - } + List extraContent = new ArrayList<>(); + extraContent.add(inventory.getItem(49)); + kitData.setExtra(extraContent.toArray(new ItemStack[0])); kitData.setStorage(inventoryContent.toArray(new ItemStack[0])); kitData.setArmor(armorContent.toArray(new ItemStack[0])); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/inventory/Inventory.java b/core/src/main/java/dev/nandi0813/practice/manager/inventory/Inventory.java index e37948c6..dcc192f4 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/inventory/Inventory.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/inventory/Inventory.java @@ -3,7 +3,6 @@ import dev.nandi0813.practice.manager.inventory.inventoryitem.ExtraInvItem; import dev.nandi0813.practice.manager.inventory.inventoryitem.InvArmor; import dev.nandi0813.practice.manager.inventory.inventoryitem.InvItem; -import dev.nandi0813.practice.module.util.ClassImport; import lombok.Getter; import org.bukkit.Material; import org.bukkit.configuration.file.YamlConfiguration; @@ -54,7 +53,7 @@ public void setInventory(Player player) { if (currentInventory != null) currentInventory.getPlayers().remove(player); - ClassImport.getClasses().getPlayerUtil().clearInventory(player); + dev.nandi0813.practice.moved.PlayerUtil.clearInventory(player); players.add(player); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/inventory/InventoryListener.java b/core/src/main/java/dev/nandi0813/practice/manager/inventory/InventoryListener.java index 0aef9e6d..2b6c990e 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/inventory/InventoryListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/inventory/InventoryListener.java @@ -9,7 +9,6 @@ import dev.nandi0813.practice.manager.profile.enums.ProfileStatus; import dev.nandi0813.practice.manager.server.ServerManager; import dev.nandi0813.practice.manager.server.WorldEnum; -import dev.nandi0813.practice.module.util.ClassImport; import dev.nandi0813.practice.util.Common; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -98,7 +97,7 @@ public void onPlayerInteractWithEntity(PlayerInteractEntityEvent e) { if (inventory == null) return; if (inventory instanceof StaffInventory) { - ItemStack itemInHand = ClassImport.getClasses().getPlayerUtil().getPlayerMainHand(player); + ItemStack itemInHand = dev.nandi0813.practice.moved.PlayerUtil.getPlayerMainHand(player); InvItem invItem = inventory.getInvItem(itemInHand.getItemMeta().getDisplayName(), itemInHand.getType()); if (invItem instanceof CheckInventoryInvItem checkInventoryInvItem) { @@ -124,7 +123,7 @@ public void onPlayerAttackEntity(EntityDamageByEntityEvent e) { Inventory inventory = InventoryManager.getInstance().getPlayerInventory(player); if (inventory == null) return; - ItemStack itemInHand = ClassImport.getClasses().getPlayerUtil().getPlayerMainHand(player); + ItemStack itemInHand = dev.nandi0813.practice.moved.PlayerUtil.getPlayerMainHand(player); if (itemInHand == null || itemInHand.getType() == Material.AIR || !itemInHand.hasItemMeta()) return; InvItem heldInvItem = inventory.getInvItem(itemInHand.getItemMeta().getDisplayName(), itemInHand.getType()); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/inventory/InventoryManager.java b/core/src/main/java/dev/nandi0813/practice/manager/inventory/InventoryManager.java index 90275943..5b52da22 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/inventory/InventoryManager.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/inventory/InventoryManager.java @@ -13,7 +13,6 @@ import dev.nandi0813.practice.manager.profile.ProfileManager; import dev.nandi0813.practice.manager.profile.enums.ProfileStatus; import dev.nandi0813.practice.manager.server.ServerManager; -import dev.nandi0813.practice.module.util.ClassImport; import dev.nandi0813.practice.util.ItemSerializationUtil; import dev.nandi0813.practice.util.playerutil.PlayerUtil; import lombok.Getter; @@ -76,7 +75,7 @@ public void setInventory(Player player, Inventory.InventoryType inventoryType) { if (playerInv != null) { playerInv.getPlayers().remove(player); } - ClassImport.getClasses().getPlayerUtil().clearInventory(player); + dev.nandi0813.practice.moved.PlayerUtil.clearInventory(player); return; } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/inventory/InventoryUtil.java b/core/src/main/java/dev/nandi0813/practice/manager/inventory/InventoryUtil.java index 4b9534bd..c9c1b0b9 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/inventory/InventoryUtil.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/inventory/InventoryUtil.java @@ -7,7 +7,6 @@ import dev.nandi0813.practice.manager.nametag.TeamPacketBlocker; import dev.nandi0813.practice.manager.profile.Profile; import dev.nandi0813.practice.manager.profile.group.Group; -import dev.nandi0813.practice.module.util.ClassImport; import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.PermanentConfig; import net.kyori.adventure.text.Component; @@ -42,7 +41,7 @@ public static void setLobbyNametag(Player player, Profile profile) { if (tabIntegration != null && tabIntegration.isAvailable()) { tabIntegration.setTabListName(player, listName); } else { - ClassImport.getClasses().getPlayerUtil().setPlayerListName(player, listName); + dev.nandi0813.practice.moved.PlayerUtil.setPlayerListName(player, listName); } // ── Nametag management (above-head prefix / suffix / color) ── diff --git a/core/src/main/java/dev/nandi0813/practice/manager/ladder/abstraction/Ladder.java b/core/src/main/java/dev/nandi0813/practice/manager/ladder/abstraction/Ladder.java index 68139302..5bef433a 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/ladder/abstraction/Ladder.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/ladder/abstraction/Ladder.java @@ -5,8 +5,7 @@ import dev.nandi0813.practice.manager.fight.match.enums.MatchType; import dev.nandi0813.practice.manager.ladder.enums.LadderType; import dev.nandi0813.practice.manager.ladder.util.LadderKnockback; -import dev.nandi0813.practice.module.interfaces.KitData; -import dev.nandi0813.practice.module.util.ClassImport; +import dev.nandi0813.practice.moved.KitData; import dev.nandi0813.practice.util.StringUtil; import lombok.Getter; import lombok.Setter; @@ -75,7 +74,7 @@ protected Ladder(String name, LadderType type) { this.name = name; this.displayName = name; this.type = type; - this.kitData = ClassImport.createKitData(); + this.kitData = new KitData(); this.ladderKnockback = new LadderKnockback(); } @@ -85,7 +84,7 @@ protected Ladder(Ladder ladder) { if (ladder.getIcon() != null) { this.icon = ladder.getIcon().clone(); } - this.kitData = ClassImport.createKitData(ladder.getKitData()); + this.kitData = new KitData(ladder.getKitData()); this.type = ladder.getType(); this.enabled = ladder.isEnabled(); this.ladderKnockback = new LadderKnockback(ladder.getLadderKnockback()); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/ladder/abstraction/interfaces/TempBuild.java b/core/src/main/java/dev/nandi0813/practice/manager/ladder/abstraction/interfaces/TempBuild.java index 86b9ca7b..d8179f33 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/ladder/abstraction/interfaces/TempBuild.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/ladder/abstraction/interfaces/TempBuild.java @@ -1,10 +1,11 @@ package dev.nandi0813.practice.manager.ladder.abstraction.interfaces; import dev.nandi0813.practice.ZonePractice; +import dev.nandi0813.practice.manager.arena.util.ArenaUtil; import dev.nandi0813.practice.manager.fight.match.Match; import dev.nandi0813.practice.manager.fight.util.BlockUtil; import dev.nandi0813.practice.manager.fight.util.ListenerUtil; -import dev.nandi0813.practice.module.util.ClassImport; +import dev.nandi0813.practice.moved.ChangedBlock; import dev.nandi0813.practice.util.fightmapchange.BlockPosition; import dev.nandi0813.practice.util.fightmapchange.FightChangeOptimized; import org.bukkit.Location; @@ -40,11 +41,11 @@ static void onBucketEmpty(final @NotNull PlayerBucketEmptyEvent e, final @NotNul MetadataValue mv = BlockUtil.getMetadata(relative, PLACED_IN_FIGHT); if (ListenerUtil.checkMetaData(mv) || relative.getType().isSolid()) continue; - match.getFightChange().addBlockChange(ClassImport.createChangeBlock(block), player, buildDelay); + match.getFightChange().addBlockChange(new ChangedBlock(block), player, buildDelay); Block b2 = block.getLocation().subtract(0, 1, 0).getBlock(); - if (ClassImport.getClasses().getArenaUtil().turnsToDirt(b2)) - match.getFightChange().addArenaBlockChange(ClassImport.createChangeBlock(b2)); + if (ArenaUtil.turnsToDirt(b2)) + match.getFightChange().addArenaBlockChange(new ChangedBlock(b2)); } } } @@ -57,11 +58,11 @@ static void onBlockPlace(final @NotNull BlockPlaceEvent e, final @NotNull Match block.setMetadata(PLACED_IN_FIGHT, new FixedMetadataValue(ZonePractice.getInstance(), match)); - match.getFightChange().addBlockChange(ClassImport.createChangeBlock(e), player, buildDelay); + match.getFightChange().addBlockChange(new ChangedBlock(e), player, buildDelay); Block block2 = e.getBlockPlaced().getLocation().subtract(0, 1, 0).getBlock(); - if (ClassImport.getClasses().getArenaUtil().turnsToDirt(block2)) - match.getFightChange().addArenaBlockChange(ClassImport.createChangeBlock(block2)); + if (ArenaUtil.turnsToDirt(block2)) + match.getFightChange().addArenaBlockChange(new ChangedBlock(block2)); } static void onBlockBreak(final @NotNull BlockBreakEvent e, final @NotNull Match match) { diff --git a/core/src/main/java/dev/nandi0813/practice/manager/ladder/abstraction/normal/BedFight.java b/core/src/main/java/dev/nandi0813/practice/manager/ladder/abstraction/normal/BedFight.java index f8f4b5ce..608440df 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/ladder/abstraction/normal/BedFight.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/ladder/abstraction/normal/BedFight.java @@ -13,7 +13,7 @@ import dev.nandi0813.practice.manager.ladder.enums.LadderType; import dev.nandi0813.practice.manager.server.sound.SoundManager; import dev.nandi0813.practice.manager.server.sound.SoundType; -import dev.nandi0813.practice.module.util.ClassImport; +import dev.nandi0813.practice.moved.BedUtil; import dev.nandi0813.practice.util.Cuboid; import lombok.Getter; import lombok.Setter; @@ -77,7 +77,7 @@ protected static void onPlayerMove(final @NotNull PlayerMoveEvent e, final @NotN } protected static void onBedDestroy(final @NotNull BlockBreakEvent e, final @NotNull Match match) { - if (ClassImport.getClasses().getBedUtil().onBedBreak(e, match)) { + if (BedUtil.onBedBreak(e, match)) { SoundManager.getInstance().getSound(SoundType.BED_BREAK).play(match.getPlayers()); } } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/ladder/abstraction/normal/PortalFight.java b/core/src/main/java/dev/nandi0813/practice/manager/ladder/abstraction/normal/PortalFight.java index 7fc40920..779578c0 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/ladder/abstraction/normal/PortalFight.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/ladder/abstraction/normal/PortalFight.java @@ -2,6 +2,7 @@ import dev.nandi0813.practice.ZonePractice; import dev.nandi0813.practice.manager.arena.arenas.interfaces.NormalArena; +import dev.nandi0813.practice.manager.arena.util.ArenaUtil; import dev.nandi0813.practice.manager.arena.util.PortalLocation; import dev.nandi0813.practice.manager.fight.match.Match; import dev.nandi0813.practice.manager.fight.match.Round; @@ -13,7 +14,7 @@ import dev.nandi0813.practice.manager.fight.util.BlockUtil; import dev.nandi0813.practice.manager.fight.util.DeathCause; import dev.nandi0813.practice.manager.ladder.enums.LadderType; -import dev.nandi0813.practice.module.util.ClassImport; +import dev.nandi0813.practice.moved.ChangedBlock; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.entity.Player; @@ -89,11 +90,11 @@ protected static void onBlockPlace(final @NotNull BlockPlaceEvent e, final @NotN if (!e.isCancelled()) { e.getBlockPlaced().setMetadata(PLACED_IN_FIGHT, new FixedMetadataValue(ZonePractice.getInstance(), match)); - match.addBlockChange(ClassImport.createChangeBlock(e)); + match.addBlockChange(new ChangedBlock(e)); Block underBlock = e.getBlockPlaced().getLocation().subtract(0, 1, 0).getBlock(); - if (ClassImport.getClasses().getArenaUtil().turnsToDirt(underBlock)) - match.getFightChange().addArenaBlockChange(ClassImport.createChangeBlock(underBlock)); + if (ArenaUtil.turnsToDirt(underBlock)) + match.getFightChange().addArenaBlockChange(new ChangedBlock(underBlock)); } } @@ -111,11 +112,11 @@ protected static void onBlockBreak(final @NotNull BlockBreakEvent e, final @NotN // whether the actual break is permitted. addBlockChange would tag the block with // PLACED_IN_FIGHT, causing LadderTypeListener to treat it as a player-placed block // and allow the break even when breakAllBlocks is disabled. - match.getFightChange().addArenaBlockChange(ClassImport.createChangeBlock(e.getBlock())); + match.getFightChange().addArenaBlockChange(new ChangedBlock(e.getBlock())); Block underBlock = e.getBlock().getLocation().subtract(0, 1, 0).getBlock(); if (underBlock.getType() == Material.DIRT) { - match.getFightChange().addArenaBlockChange(ClassImport.createChangeBlock(underBlock)); + match.getFightChange().addArenaBlockChange(new ChangedBlock(underBlock)); } } } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/ladder/enums/LadderType.java b/core/src/main/java/dev/nandi0813/practice/manager/ladder/enums/LadderType.java index 3634c5e0..1a1dd722 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/ladder/enums/LadderType.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/ladder/enums/LadderType.java @@ -3,7 +3,6 @@ import dev.nandi0813.practice.manager.backend.LanguageManager; import dev.nandi0813.practice.manager.gui.setup.ladder.laddersettings.Settings.SettingType; import dev.nandi0813.practice.manager.ladder.type.*; -import dev.nandi0813.practice.module.util.ClassImport; import dev.nandi0813.practice.util.Common; import lombok.Getter; import org.bukkit.Material; @@ -84,7 +83,7 @@ public enum LadderType { SPLEEF(LadderTypeConfig.builder( "LADDER.LADDER-TYPES.SPLEEF.NAME", - ClassImport.getClasses().getItemMaterialUtil().getIronShovel(), + Material.IRON_SHOVEL, "LADDER.LADDER-TYPES.SPLEEF.DESCRIPTION", Spleef.class ) @@ -106,7 +105,7 @@ public enum LadderType { SKYWARS(LadderTypeConfig.builder( "LADDER.LADDER-TYPES.SKYWARS.NAME", - ClassImport.getClasses().getItemMaterialUtil().getEyeOfEnder(), + Material.ENDER_EYE, "LADDER.LADDER-TYPES.SKYWARS.DESCRIPTION", SkyWars.class ) @@ -120,7 +119,7 @@ public enum LadderType { BEDWARS(LadderTypeConfig.builder( "LADDER.LADDER-TYPES.BEDWARS.NAME", - ClassImport.getClasses().getItemMaterialUtil().getRedBed(), + Material.RED_BED, "LADDER.LADDER-TYPES.BEDWARS.DESCRIPTION", BedWars.class ) @@ -135,7 +134,7 @@ public enum LadderType { FIREBALL_FIGHT(LadderTypeConfig.builder( "LADDER.LADDER-TYPES.FIREBALL-FIGHT.NAME", - ClassImport.getClasses().getItemMaterialUtil().getFireball(), + Material.FIRE_CHARGE, "LADDER.LADDER-TYPES.FIREBALL-FIGHT.DESCRIPTION", FireballFight.class ) @@ -152,7 +151,7 @@ public enum LadderType { BRIDGES(LadderTypeConfig.builder( "LADDER.LADDER-TYPES.BRIDGES.NAME", - ClassImport.getClasses().getItemMaterialUtil().getStainedClay(), + Material.RED_TERRACOTTA, "LADDER.LADDER-TYPES.BRIDGES.DESCRIPTION", Bridges.class ) @@ -168,7 +167,7 @@ public enum LadderType { BATTLE_RUSH(LadderTypeConfig.builder( "LADDER.LADDER-TYPES.BATTLE-RUSH.NAME", - ClassImport.getClasses().getItemMaterialUtil().getLilyPad(), + Material.LILY_PAD, "LADDER.LADDER-TYPES.BATTLE-RUSH.DESCRIPTION", BattleRush.class ) diff --git a/core/src/main/java/dev/nandi0813/practice/manager/ladder/settings/handlers/GoldenAppleSettingHandler.java b/core/src/main/java/dev/nandi0813/practice/manager/ladder/settings/handlers/GoldenAppleSettingHandler.java index 754d9e1e..c55d0562 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/ladder/settings/handlers/GoldenAppleSettingHandler.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/ladder/settings/handlers/GoldenAppleSettingHandler.java @@ -2,7 +2,6 @@ import dev.nandi0813.practice.manager.fight.match.Match; import dev.nandi0813.practice.manager.ladder.settings.SettingHandler; -import dev.nandi0813.practice.module.util.ClassImport; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.Event; @@ -44,7 +43,7 @@ public boolean handleEvent(Event event, Match match, Player player) { return false; // Golden heads don't have cooldown } - ClassImport.getClasses().getItemCooldownHandler().handleGoldenAppleMatch( + dev.nandi0813.practice.moved.ModernItemCooldownHandler.handleGoldenAppleMatch( player, cooldown, e, diff --git a/core/src/main/java/dev/nandi0813/practice/manager/ladder/settings/handlers/HitDelaySettingHandler.java b/core/src/main/java/dev/nandi0813/practice/manager/ladder/settings/handlers/HitDelaySettingHandler.java index 6cf0f380..5e2df4c4 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/ladder/settings/handlers/HitDelaySettingHandler.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/ladder/settings/handlers/HitDelaySettingHandler.java @@ -2,7 +2,6 @@ import dev.nandi0813.practice.manager.fight.match.Match; import dev.nandi0813.practice.manager.ladder.settings.SettingHandler; -import dev.nandi0813.practice.module.util.ClassImport; import org.bukkit.entity.Player; /** @@ -28,7 +27,7 @@ public void onMatchStart(Match match) { // For modern versions (1.9+), also set the attack speed attribute // This enables spam-clicking for combo mode when hitDelay is low - ClassImport.getClasses().getPlayerUtil().setAttackSpeed(player, hitDelay); + dev.nandi0813.practice.moved.PlayerUtil.setAttackSpeed(player, hitDelay); } } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/ladder/type/BedWars.java b/core/src/main/java/dev/nandi0813/practice/manager/ladder/type/BedWars.java index 137c8488..e3707ebb 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/ladder/type/BedWars.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/ladder/type/BedWars.java @@ -1,12 +1,14 @@ package dev.nandi0813.practice.manager.ladder.type; import dev.nandi0813.practice.ZonePractice; +import dev.nandi0813.practice.manager.arena.util.ArenaUtil; import dev.nandi0813.practice.manager.fight.match.Match; import dev.nandi0813.practice.manager.fight.match.enums.RoundStatus; import dev.nandi0813.practice.manager.ladder.abstraction.interfaces.LadderHandle; import dev.nandi0813.practice.manager.ladder.abstraction.normal.BedFight; import dev.nandi0813.practice.manager.ladder.enums.LadderType; -import dev.nandi0813.practice.module.util.ClassImport; +import dev.nandi0813.practice.moved.ChangedBlock; +import dev.nandi0813.practice.moved.LadderUtil; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.entity.Player; @@ -56,14 +58,14 @@ public boolean handleEvents(Event e, Match match) { private static void onBlockPlace(final @NotNull BlockPlaceEvent e, final @NotNull Match match) { Block block = e.getBlockPlaced(); if (block.getType().equals(Material.TNT)) { - ClassImport.getClasses().getLadderUtil().placeTnt(e, match); + LadderUtil.placeTnt(e, match); } else { block.setMetadata(PLACED_IN_FIGHT, new FixedMetadataValue(ZonePractice.getInstance(), match)); - match.addBlockChange(ClassImport.createChangeBlock(e)); + match.addBlockChange(new ChangedBlock(e)); Block underBlock = e.getBlockPlaced().getLocation().subtract(0, 1, 0).getBlock(); - if (ClassImport.getClasses().getArenaUtil().turnsToDirt(underBlock)) - match.getFightChange().addArenaBlockChange(ClassImport.createChangeBlock(underBlock)); + if (ArenaUtil.turnsToDirt(underBlock)) + match.getFightChange().addArenaBlockChange(new ChangedBlock(underBlock)); } } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/ladder/type/FireballFight.java b/core/src/main/java/dev/nandi0813/practice/manager/ladder/type/FireballFight.java index 60ac9cfa..c69eac91 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/ladder/type/FireballFight.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/ladder/type/FireballFight.java @@ -1,6 +1,7 @@ package dev.nandi0813.practice.manager.ladder.type; import dev.nandi0813.practice.ZonePractice; +import dev.nandi0813.practice.manager.arena.util.ArenaUtil; import dev.nandi0813.practice.manager.backend.ConfigManager; import dev.nandi0813.practice.manager.fight.match.Match; import dev.nandi0813.practice.manager.fight.match.enums.RoundStatus; @@ -12,7 +13,8 @@ import dev.nandi0813.practice.manager.ladder.abstraction.interfaces.LadderHandle; import dev.nandi0813.practice.manager.ladder.abstraction.normal.BedFight; import dev.nandi0813.practice.manager.ladder.enums.LadderType; -import dev.nandi0813.practice.module.util.ClassImport; +import dev.nandi0813.practice.moved.ChangedBlock; +import dev.nandi0813.practice.moved.LadderUtil; import lombok.Getter; import lombok.Setter; import org.bukkit.Material; @@ -135,7 +137,7 @@ private static void onFireballLaunch(final @NotNull PlayerInteractEvent e, final Action action = e.getAction(); if (action != Action.RIGHT_CLICK_AIR && action != Action.RIGHT_CLICK_BLOCK) return; - ItemStack fireballItem = ClassImport.getClasses().getPlayerUtil().getItemInUse(player, ClassImport.getClasses().getItemMaterialUtil().getFireball()); + ItemStack fireballItem = dev.nandi0813.practice.moved.PlayerUtil.getItemInUse(player, Material.FIRE_CHARGE); if (fireballItem == null) { return; } @@ -146,12 +148,12 @@ private static void onFireballLaunch(final @NotNull PlayerInteractEvent e, final if (ladder.fireballCooldown <= 0) return; - if (!ClassImport.getClasses().getItemCooldownHandler().handleFireballMatch( + if (!dev.nandi0813.practice.moved.ModernItemCooldownHandler.handleFireballMatch( player, ladder.fireballCooldown, "MATCH.COOLDOWN.FIREBALL")) { return; } - final Fireball fireball = ClassImport.getClasses().getPlayerUtil().shootFireball(player, FIREBALL_SPEED); + final Fireball fireball = dev.nandi0813.practice.moved.PlayerUtil.shootFireball(player, FIREBALL_SPEED); fireball.setMetadata(FIGHT_ENTITY, new FixedMetadataValue(ZonePractice.getInstance(), match)); fireball.setMetadata(FIREBALL_FIGHT_FIREBALL, new FixedMetadataValue(ZonePractice.getInstance(), match)); fireball.setIsIncendiary(false); @@ -159,9 +161,9 @@ private static void onFireballLaunch(final @NotNull PlayerInteractEvent e, final fireballItem.setAmount(fireballItem.getAmount() - 1); if (fireballItem.getAmount() == 0) { - ClassImport.getClasses().getPlayerUtil().setItemInUseIf( + dev.nandi0813.practice.moved.PlayerUtil.setItemInUseIf( player, - ClassImport.getClasses().getItemMaterialUtil().getFireball(), + Material.FIRE_CHARGE, null); } player.updateInventory(); @@ -187,14 +189,14 @@ public void run() { private static void onBlockPlace(final @NotNull BlockPlaceEvent e, final @NotNull Match match) { Block block = e.getBlockPlaced(); if (block.getType().equals(Material.TNT)) { - ClassImport.getClasses().getLadderUtil().placeTnt(e, match); + LadderUtil.placeTnt(e, match); } else { block.setMetadata(PLACED_IN_FIGHT, new FixedMetadataValue(ZonePractice.getInstance(), match)); - match.addBlockChange(ClassImport.createChangeBlock(e)); + match.addBlockChange(new ChangedBlock(e)); Block underBlock = e.getBlockPlaced().getLocation().subtract(0, 1, 0).getBlock(); - if (ClassImport.getClasses().getArenaUtil().turnsToDirt(underBlock)) - match.getFightChange().addArenaBlockChange(ClassImport.createChangeBlock(underBlock)); + if (ArenaUtil.turnsToDirt(underBlock)) + match.getFightChange().addArenaBlockChange(new ChangedBlock(underBlock)); } } @@ -224,7 +226,7 @@ private static void onEntityDamageByEntity(final @NotNull EntityDamageByEntityEv } e.setDamage(0); - ClassImport.getClasses().getPlayerUtil().applyFireballKnockback(player, fireball); + dev.nandi0813.practice.moved.PlayerUtil.applyFireballKnockback(player, fireball); } else if (e.getDamager() instanceof TNTPrimed tnt) { MetadataValue mv = BlockUtil.getMetadata(tnt, FIREBALL_FIGHT_TNT); if (ListenerUtil.checkMetaData(mv)) { @@ -238,7 +240,7 @@ private static void onEntityDamageByEntity(final @NotNull EntityDamageByEntityEv if (mv2.value() instanceof Player shooter) { if (shooter == player || !TeamUtil.isSaveTeamMate(match, shooter, player)) { - ClassImport.getClasses().getPlayerUtil().applyTntKnockback(player, tnt); + dev.nandi0813.practice.moved.PlayerUtil.applyTntKnockback(player, tnt); e.setDamage(0); } else if (TeamUtil.isSaveTeamMate(match, shooter, player)) { e.setCancelled(true); @@ -305,7 +307,7 @@ private static void onEntityExplode(@NotNull EntityExplodeEvent e) { // Filter to only destroyable blocks — MatchTntListener will track + break them naturally. e.blockList().removeIf(block -> { if (block.getType().equals(Material.TNT)) return false; // keep → chain-explodes - if (ClassImport.getClasses().getArenaUtil().containsDestroyableBlock(match.getLadder(), block)) return false; // keep → destroyable + if (ArenaUtil.containsDestroyableBlock(match.getLadder(), block)) return false; // keep → destroyable if (block.hasMetadata(PLACED_IN_FIGHT)) return false; // keep → player placed if (block.getRelative(0, 1, 0).hasMetadata(PLACED_IN_FIGHT)) return true; // remove → support under player block return true; // remove → pure arena block @@ -322,7 +324,7 @@ private static void onBlockExplode(@NotNull org.bukkit.event.block.BlockExplodeE // Filter to only destroyable blocks — MatchTntListener will track + break them naturally. e.blockList().removeIf(block -> { if (block.getType().equals(Material.TNT)) return false; // keep → chain-explodes - if (ClassImport.getClasses().getArenaUtil().containsDestroyableBlock(match.getLadder(), block)) return false; // keep → destroyable + if (ArenaUtil.containsDestroyableBlock(match.getLadder(), block)) return false; // keep → destroyable if (block.hasMetadata(PLACED_IN_FIGHT)) return false; // keep → player placed if (block.getRelative(0, 1, 0).hasMetadata(PLACED_IN_FIGHT)) return true; // remove → support under player block return true; // remove → pure arena block diff --git a/core/src/main/java/dev/nandi0813/practice/manager/ladder/type/SkyWars.java b/core/src/main/java/dev/nandi0813/practice/manager/ladder/type/SkyWars.java index d0cdcd5b..aaf7e47d 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/ladder/type/SkyWars.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/ladder/type/SkyWars.java @@ -8,7 +8,7 @@ import dev.nandi0813.practice.manager.ladder.abstraction.interfaces.LadderHandle; import dev.nandi0813.practice.manager.ladder.abstraction.normal.NormalLadder; import dev.nandi0813.practice.manager.ladder.enums.LadderType; -import dev.nandi0813.practice.module.util.ClassImport; +import dev.nandi0813.practice.moved.ChangedBlock; import dev.nandi0813.practice.util.ItemSerializationUtil; import lombok.Getter; import lombok.Setter; @@ -83,7 +83,7 @@ private static void onSkyWarsChestLoot(final @NotNull PlayerInteractEvent e, fin match.addEntityChange(player.getWorld().dropItemNaturally(chest.getLocation(), item)); } - match.addBlockChange(ClassImport.createChangeBlock(chest)); + match.addBlockChange(new ChangedBlock(chest)); Bukkit.getScheduler().runTaskLater(ZonePractice.getInstance(), () -> chest.setType(Material.AIR), 2L); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/ladder/type/Spleef.java b/core/src/main/java/dev/nandi0813/practice/manager/ladder/type/Spleef.java index fb898342..eea9ef34 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/ladder/type/Spleef.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/ladder/type/Spleef.java @@ -7,7 +7,7 @@ import dev.nandi0813.practice.manager.ladder.abstraction.interfaces.LadderHandle; import dev.nandi0813.practice.manager.ladder.abstraction.normal.NormalLadder; import dev.nandi0813.practice.manager.ladder.enums.LadderType; -import dev.nandi0813.practice.module.util.ClassImport; +import dev.nandi0813.practice.moved.ChangedBlock; import dev.nandi0813.practice.util.PermanentConfig; import lombok.Getter; import lombok.Setter; @@ -71,14 +71,14 @@ private void onSpleefBlockBreak(final @NotNull BlockBreakEvent e, final @NotNull e.setCancelled(true); if (snow.getType().equals(Material.SNOW_BLOCK)) { - match.addBlockChange(ClassImport.createChangeBlock(snow)); + match.addBlockChange(new ChangedBlock(snow)); snow.setType(Material.AIR); // Give one snowball per block broken when snowball mode is active. // Uses the version-abstracted getSnowball() (SNOW_BALL on 1.8.8, SNOWBALL on modern). if (snowballMode) { player.getInventory().addItem( - new ItemStack(ClassImport.getClasses().getItemMaterialUtil().getSnowball(), 1)); + new ItemStack(Material.SNOWBALL, 1)); player.updateInventory(); } } @@ -105,7 +105,7 @@ private void onSnowballHit(final @NotNull ProjectileHitEvent e, final @NotNull M if (!hitBlock.getType().equals(Material.SNOW_BLOCK)) return; if (!match.getArena().getCuboid().contains(hitBlock)) return; - match.addBlockChange(ClassImport.createChangeBlock(hitBlock)); + match.addBlockChange(new ChangedBlock(hitBlock)); hitBlock.setType(Material.AIR); } @@ -144,9 +144,9 @@ private static void whenFall(final @NotNull PlayerMoveEvent e, final @NotNull Ma if (!match.getCurrentRound().getRoundStatus().equals(RoundStatus.LIVE)) return; Material block = player.getLocation().getBlock().getType(); - if (block.equals(Material.WATER) || block.equals(ClassImport.getClasses().getItemMaterialUtil().getWater())) { + if (block.equals(Material.WATER)) { match.killPlayer(player, null, DeathCause.SPLEEF.getMessage()); - } else if (block.equals(Material.LAVA) || block.equals(ClassImport.getClasses().getItemMaterialUtil().getLava())) { + } else if (block.equals(Material.LAVA)) { match.killPlayer(player, null, DeathCause.SPLEEF.getMessage()); } } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/ladder/type/Sumo.java b/core/src/main/java/dev/nandi0813/practice/manager/ladder/type/Sumo.java index 875b5e05..cbb7ff5b 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/ladder/type/Sumo.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/ladder/type/Sumo.java @@ -6,7 +6,6 @@ import dev.nandi0813.practice.manager.ladder.abstraction.interfaces.LadderHandle; import dev.nandi0813.practice.manager.ladder.abstraction.normal.NormalLadder; import dev.nandi0813.practice.manager.ladder.enums.LadderType; -import dev.nandi0813.practice.module.util.ClassImport; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.Event; @@ -44,13 +43,11 @@ private static void onPlayerMove(final @NotNull PlayerMoveEvent e, final @NotNul Material blockBelow = playerLoc.clone().subtract(0, 1, 0).getBlock().getType(); // Check if player is in/touching water - if (blockAtPlayer.equals(Material.WATER) || blockAtPlayer.equals(ClassImport.getClasses().getItemMaterialUtil().getWater()) || - blockBelow.equals(Material.WATER) || blockBelow.equals(ClassImport.getClasses().getItemMaterialUtil().getWater())) { + if (blockAtPlayer.equals(Material.WATER) || blockBelow.equals(Material.WATER)) { match.killPlayer(player, null, DeathCause.SUMO.getMessage()); } // Check if player is in/touching lava - else if (blockAtPlayer.equals(Material.LAVA) || blockAtPlayer.equals(ClassImport.getClasses().getItemMaterialUtil().getLava()) || - blockBelow.equals(Material.LAVA) || blockBelow.equals(ClassImport.getClasses().getItemMaterialUtil().getLava())) { + else if (blockAtPlayer.equals(Material.LAVA) || blockBelow.equals(Material.LAVA)) { match.killPlayer(player, null, DeathCause.SUMO.getMessage()); } } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/leaderboard/hologram/ArmorStandFactory.java b/core/src/main/java/dev/nandi0813/practice/manager/leaderboard/hologram/ArmorStandFactory.java index 6e51bc22..952dffbc 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/leaderboard/hologram/ArmorStandFactory.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/leaderboard/hologram/ArmorStandFactory.java @@ -1,6 +1,6 @@ package dev.nandi0813.practice.manager.leaderboard.hologram; -import dev.nandi0813.practice.module.util.ClassImport; +import dev.nandi0813.practice.manager.arena.util.ArenaUtil; import dev.nandi0813.practice.util.StringUtil; import lombok.experimental.UtilityClass; import org.bukkit.Location; @@ -48,7 +48,7 @@ public void configure(@NotNull ArmorStand stand, @NotNull String text) { stand.setCustomName(StringUtil.CC(text)); stand.setBasePlate(false); stand.setArms(false); - ClassImport.getClasses().getArenaUtil().setArmorStandInvulnerable(stand); + ArenaUtil.setArmorStandInvulnerable(stand); } /** diff --git a/core/src/main/java/dev/nandi0813/practice/manager/nametag/FakeTeam.java b/core/src/main/java/dev/nandi0813/practice/manager/nametag/FakeTeam.java index 6257bf7c..2bf91a89 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/nametag/FakeTeam.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/nametag/FakeTeam.java @@ -1,6 +1,6 @@ package dev.nandi0813.practice.manager.nametag; -import dev.nandi0813.practice.module.util.VersionChecker; +import dev.nandi0813.practice.moved.VersionChecker; import lombok.Data; import lombok.Getter; import net.kyori.adventure.text.Component; @@ -33,12 +33,7 @@ public FakeTeam(Component prefix, NamedTextColor nameColor, Component suffix, in generatedName = NametagManager.generateUUID() + "_" + getNameFromInput(sortPriority) + ID; } this.name = generatedName; - - if (Objects.equals(VersionChecker.getBukkitVersion(), VersionChecker.BukkitVersion.v1_8_R3)) { - this.name = this.name.length() > 16 ? this.name.substring(0, 16) : this.name; - } else { - this.name = this.name.length() > 256 ? this.name.substring(0, 256) : this.name; - } + this.name = this.name.length() > 256 ? this.name.substring(0, 256) : this.name; this.prefix = prefix; this.nameColor = nameColor; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/nametag/NametagManager.java b/core/src/main/java/dev/nandi0813/practice/manager/nametag/NametagManager.java index e2986a94..b9b1a640 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/nametag/NametagManager.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/nametag/NametagManager.java @@ -1,6 +1,7 @@ package dev.nandi0813.practice.manager.nametag; import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerTeams; +import dev.nandi0813.practice.moved.PlayerUtil; import dev.nandi0813.practice.util.PermanentConfig; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; @@ -279,7 +280,7 @@ private void preserveTabListName(Player player) { } // Set the tab list name to maintain lobby formatting - dev.nandi0813.practice.module.util.ClassImport.getClasses().getPlayerUtil().setPlayerListName(player, tabListName); + PlayerUtil.setPlayerListName(player, tabListName); } catch (Exception e) { // Silently fail - this is a best-effort preservation } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/nametag/TabIntegration.java b/core/src/main/java/dev/nandi0813/practice/manager/nametag/TabIntegration.java index 29440df8..b4f37aeb 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/nametag/TabIntegration.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/nametag/TabIntegration.java @@ -1,5 +1,6 @@ package dev.nandi0813.practice.manager.nametag; +import dev.nandi0813.practice.moved.PlayerUtil; import lombok.Getter; import me.neznamy.tab.api.TabAPI; import me.neznamy.tab.api.TabPlayer; @@ -431,9 +432,7 @@ private void preserveTabListNameInternal(Player player) { .append(lobbySuffix); // Use internal Bukkit method to set the tablist name (not TAB API) - dev.nandi0813.practice.module.util.ClassImport.getClasses() - .getPlayerUtil() - .setPlayerListName(player, tabListName); + PlayerUtil.setPlayerListName(player, tabListName); } catch (Exception e) { // Silently fail - this is best-effort diff --git a/core/src/main/java/dev/nandi0813/practice/manager/playerkit/KitItems.java b/core/src/main/java/dev/nandi0813/practice/manager/playerkit/KitItems.java index a91db9cb..479ad7ce 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/playerkit/KitItems.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/playerkit/KitItems.java @@ -1,8 +1,8 @@ package dev.nandi0813.practice.manager.playerkit; import dev.nandi0813.practice.manager.playerkit.items.KitItem; -import dev.nandi0813.practice.module.interfaces.KitData; -import dev.nandi0813.practice.module.util.VersionChecker; +import dev.nandi0813.practice.moved.KitData; +import dev.nandi0813.practice.moved.VersionChecker; import lombok.Getter; import org.bukkit.inventory.ItemStack; @@ -11,8 +11,6 @@ @Getter public class KitItems { - private static final boolean SECOND_HAND = Objects.requireNonNull(VersionChecker.getBukkitVersion()).isSecondHand(); - private final KitData kitData; private final KitItem helmet; @@ -40,14 +38,10 @@ public KitItems(final KitData kitData) { boots = new KitItem(StaticItems.MAIN_GUI_BOOTS_PLACEHOLDER_ICON); } - if (SECOND_HAND) { - if (kitData.getExtra() != null) { - offhand = new KitItem(StaticItems.MAIN_GUI_OFF_HAND_PLACEHOLDER_ICON, kitData.getExtra()[0]); - } else { - offhand = new KitItem(StaticItems.MAIN_GUI_OFF_HAND_PLACEHOLDER_ICON); - } + if (kitData.getExtra() != null) { + offhand = new KitItem(StaticItems.MAIN_GUI_OFF_HAND_PLACEHOLDER_ICON, kitData.getExtra()[0]); } else { - offhand = null; + offhand = new KitItem(StaticItems.MAIN_GUI_OFF_HAND_PLACEHOLDER_ICON); } if (kitData.getStorage() != null) { @@ -75,10 +69,7 @@ private void assignSlots() { slots.put(11, chest); slots.put(12, legs); slots.put(13, boots); - - if (SECOND_HAND) { - slots.put(15, offhand); - } + slots.put(15, offhand); for (int i = 18; i <= 44; i++) { slots.put(i, inventory.get(i - 18)); @@ -126,12 +117,9 @@ public void resetNull() { } public void save() { - if (SECOND_HAND) { - List extraContent = new ArrayList<>(); - extraContent.add(offhand.get()); - this.kitData.setExtra(extraContent.toArray(new ItemStack[0])); - } - + List extraContent = new ArrayList<>(); + extraContent.add(offhand.get()); + this.kitData.setExtra(extraContent.toArray(new ItemStack[0])); this.kitData.setStorage(this.getInventoryContent().toArray(new ItemStack[0])); this.kitData.setArmor(this.getArmorContent().toArray(new ItemStack[0])); } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/playerkit/PlayerKitUtil.java b/core/src/main/java/dev/nandi0813/practice/manager/playerkit/PlayerKitUtil.java index a6720c81..2b8dd265 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/playerkit/PlayerKitUtil.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/playerkit/PlayerKitUtil.java @@ -1,6 +1,6 @@ package dev.nandi0813.practice.manager.playerkit; -import dev.nandi0813.practice.module.util.ClassImport; +import dev.nandi0813.practice.moved.LadderUtil; import dev.nandi0813.practice.util.Common; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; @@ -16,7 +16,7 @@ public enum PlayerKitUtil { *
  • {@code MATERIAL} – plain material, e.g. {@code ARROW}
  • *
  • {@code MATERIAL::NUMBER} – material with a legacy damage/data value (1.8), e.g. {@code WOOL::14}
  • *
  • {@code MATERIAL::NAMED_TYPE} – material with a named sub-type resolved via - * {@link dev.nandi0813.practice.module.interfaces.LadderUtil#getPotionItem(String)}, + * {@link LadderUtil#getPotionItem(String)}, * e.g. {@code TIPPED_ARROW::LONG_NIGHT_VISION}, {@code LINGERING_POTION::SPEED}, * {@code SPLASH_POTION::STRENGTH}
  • * @@ -33,7 +33,7 @@ public static ItemStack getItem(String string) { return new ItemStack(Material.valueOf(split[0]), 1, Short.parseShort(suffix)); } else { // Named sub-type (PotionType, etc.) – delegate to the version-specific impl - return ClassImport.getClasses().getLadderUtil().getPotionItem(string); + return LadderUtil.getPotionItem(string); } } else if (string.equalsIgnoreCase("")) { return new ItemStack(Material.AIR); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/playerkit/StaticItems.java b/core/src/main/java/dev/nandi0813/practice/manager/playerkit/StaticItems.java index 4ec9ae63..262fe623 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/playerkit/StaticItems.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/playerkit/StaticItems.java @@ -2,7 +2,7 @@ import dev.nandi0813.practice.manager.gui.GUIItem; import dev.nandi0813.practice.manager.playerkit.items.EditorIcon; -import dev.nandi0813.practice.module.util.ClassImport; +import dev.nandi0813.practice.moved.LadderUtil; import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.Pair; import org.bukkit.enchantments.Enchantment; @@ -73,14 +73,14 @@ public enum StaticItems { static { for (String string : PlayerKitManager.getInstance().getList("GUI.ITEMS.ITEMS-GUI.CATEGORIES.POTION.SPLASH-POTIONS.ITEMS")) { - ItemStack itemStack = ClassImport.getClasses().getLadderUtil().getPotionItem(string); + ItemStack itemStack = LadderUtil.getPotionItem(string); if (itemStack != null) { POTIONS_GUI_SPLASH_POTIONS.add(itemStack); } } for (String string : PlayerKitManager.getInstance().getList("GUI.ITEMS.ITEMS-GUI.CATEGORIES.POTION.DRINKABLE-POTIONS.ITEMS")) { - ItemStack itemStack = ClassImport.getClasses().getLadderUtil().getPotionItem(string); + ItemStack itemStack = LadderUtil.getPotionItem(string); if (itemStack != null) { POTIONS_GUI_DRINKABLE_POTIONS.add(itemStack); } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/playerkit/guis/MainGUI.java b/core/src/main/java/dev/nandi0813/practice/manager/playerkit/guis/MainGUI.java index 63a00bf3..3c336a13 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/playerkit/guis/MainGUI.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/playerkit/guis/MainGUI.java @@ -14,7 +14,6 @@ import dev.nandi0813.practice.manager.playerkit.items.KitItem; import dev.nandi0813.practice.manager.profile.Profile; import dev.nandi0813.practice.manager.profile.ProfileManager; -import dev.nandi0813.practice.module.util.ClassImport; import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.InventoryUtil; import net.wesjd.anvilgui.AnvilGUI; @@ -217,7 +216,7 @@ public void handleCloseEvent(InventoryCloseEvent e) { public void open(Player player) { super.open(player); - ClassImport.getClasses().getPlayerUtil().setActiveInventoryTitle( + dev.nandi0813.practice.moved.PlayerUtil.setActiveInventoryTitle( player, StaticItems.MAIN_GUI_TITLE.replace("%name%", customLadder.getDisplayName()) ); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/playerkit/items/KitItem.java b/core/src/main/java/dev/nandi0813/practice/manager/playerkit/items/KitItem.java index 378f929d..3db54ac7 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/playerkit/items/KitItem.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/playerkit/items/KitItem.java @@ -1,6 +1,6 @@ package dev.nandi0813.practice.manager.playerkit.items; -import dev.nandi0813.practice.module.util.ClassImport; +import dev.nandi0813.practice.moved.LadderUtil; import dev.nandi0813.practice.util.StringUtil; import org.bukkit.Bukkit; import org.bukkit.Material; @@ -82,7 +82,7 @@ public Material getMaterial() { } public boolean isUnbreakable() { - return ClassImport.getClasses().getLadderUtil().isUnbreakable(itemStack); + return LadderUtil.isUnbreakable(itemStack); } // Setters @@ -95,12 +95,12 @@ public KitItem setName(String name) { public void setUnbreakable(boolean unbreakable) { ItemMeta itemMeta = itemStack.getItemMeta(); - itemMeta = ClassImport.getClasses().getLadderUtil().setUnbreakable(itemMeta, unbreakable); + itemMeta = LadderUtil.setUnbreakable(itemMeta, unbreakable); itemStack.setItemMeta(itemMeta); } public void setDurability(int durability) { - itemStack = ClassImport.getClasses().getLadderUtil().setDurability(itemStack, durability); + itemStack = LadderUtil.setDurability(itemStack, durability); } public KitItem setAmount(int amount) { diff --git a/core/src/main/java/dev/nandi0813/practice/manager/profile/Profile.java b/core/src/main/java/dev/nandi0813/practice/manager/profile/Profile.java index 96ac3044..c7210b3c 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/profile/Profile.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/profile/Profile.java @@ -10,8 +10,7 @@ import dev.nandi0813.practice.manager.profile.group.Group; import dev.nandi0813.practice.manager.profile.group.GroupManager; import dev.nandi0813.practice.manager.profile.statistics.ProfileStat; -import dev.nandi0813.practice.module.interfaces.actionbar.ActionBar; -import dev.nandi0813.practice.module.util.ClassImport; +import dev.nandi0813.practice.moved.ActionBar; import dev.nandi0813.practice.util.Common; import lombok.Getter; import lombok.Setter; @@ -72,7 +71,7 @@ public class Profile { private RankedBan rankedBan = new RankedBan(); private ProfileSettingsGui settingsGui; - private ActionBar actionBar = ClassImport.createActionBarClass(this); + private ActionBar actionBar = new ActionBar(this); // Custom ladder private PlayerCustomKitSelector playerCustomKitSelector; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/queue/QueueManager.java b/core/src/main/java/dev/nandi0813/practice/manager/queue/QueueManager.java index 144f8691..7d9e590d 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/queue/QueueManager.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/queue/QueueManager.java @@ -7,7 +7,6 @@ import dev.nandi0813.practice.manager.ladder.abstraction.normal.NormalLadder; import dev.nandi0813.practice.manager.profile.Profile; import dev.nandi0813.practice.manager.profile.ProfileManager; -import dev.nandi0813.practice.module.util.ClassImport; import dev.nandi0813.practice.util.Common; import lombok.Getter; import org.bukkit.Bukkit; @@ -86,7 +85,7 @@ public void createRankedQueue(Player player, NormalLadder ladder) { return; } - if (ClassImport.getClasses().getPlayerUtil().getPing(player) > ConfigManager.getInt("QUEUE.RANKED.MAX-PING")) { + if (dev.nandi0813.practice.moved.PlayerUtil.getPing(player) > ConfigManager.getInt("QUEUE.RANKED.MAX-PING")) { Common.sendMMMessage(player, LanguageManager.getString("QUEUES.RANKED.HIGH-PING")); player.closeInventory(); return; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/queue/runnables/SearchRunnable.java b/core/src/main/java/dev/nandi0813/practice/manager/queue/runnables/SearchRunnable.java index d6be7bc8..7370741f 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/queue/runnables/SearchRunnable.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/queue/runnables/SearchRunnable.java @@ -2,7 +2,7 @@ import dev.nandi0813.practice.manager.queue.Queue; import dev.nandi0813.practice.manager.queue.QueueManager; -import dev.nandi0813.practice.module.interfaces.actionbar.ActionBar; +import dev.nandi0813.practice.moved.ActionBar; import dev.nandi0813.practice.util.interfaces.Runnable; import org.bukkit.Bukkit; import org.bukkit.scheduler.BukkitTask; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/server/ServerManager.java b/core/src/main/java/dev/nandi0813/practice/manager/server/ServerManager.java index 59369ebf..62f44459 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/server/ServerManager.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/server/ServerManager.java @@ -11,7 +11,6 @@ import dev.nandi0813.practice.manager.profile.ProfileManager; import dev.nandi0813.practice.manager.profile.enums.ProfileStatus; import dev.nandi0813.practice.manager.sidebar.SidebarManager; -import dev.nandi0813.practice.module.util.ClassImport; import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.GoldenHead; import dev.nandi0813.practice.util.StartUpTypes; @@ -167,7 +166,7 @@ public void onTeleport(PlayerTeleportEvent e) { if (from != null && !from.equals(WorldEnum.OTHER)) { if (profile.getStatus().equals(ProfileStatus.LOBBY)) { ProfileManager.getInstance().getProfile(player).setStatus(ProfileStatus.OFFLINE); - ClassImport.getClasses().getPlayerUtil().clearInventory(player); + dev.nandi0813.practice.moved.PlayerUtil.clearInventory(player); SidebarManager.getInstance().unLoadSidebar(player); } } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/sidebar/adapter/AdapterUtil.java b/core/src/main/java/dev/nandi0813/practice/manager/sidebar/adapter/AdapterUtil.java index 85c3058a..d0115121 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/sidebar/adapter/AdapterUtil.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/sidebar/adapter/AdapterUtil.java @@ -12,7 +12,6 @@ import dev.nandi0813.practice.manager.fight.match.util.TeamUtil; import dev.nandi0813.practice.manager.fight.util.Stats.Statistic; import dev.nandi0813.practice.manager.sidebar.SidebarManager; -import dev.nandi0813.practice.module.util.ClassImport; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.TextReplacementConfig; import org.bukkit.entity.Player; @@ -42,7 +41,7 @@ private static TextReplacementConfig replace(String placeholder, Component value * Gets player ping as string or "N/A" if offline */ private static String getPingString(Player player) { - return player.isOnline() ? String.valueOf(ClassImport.getClasses().getPlayerUtil().getPing(player)) : "N/A"; + return player.isOnline() ? String.valueOf(dev.nandi0813.practice.moved.PlayerUtil.getPing(player)) : "N/A"; } /** @@ -54,7 +53,7 @@ private static Component replaceCommonMatchPlaceholders(Component line, Match ma .replaceText(replace("%totalRounds%", String.valueOf(match.getLadder().getRounds()))) .replaceText(replace("%roundDuration%", match.getCurrentRound().getFormattedTime())) .replaceText(replace("%matchDuration%", match.getFormattedTime())) - .replaceText(replace("%ping%", String.valueOf(ClassImport.getClasses().getPlayerUtil().getPing(player)))) + .replaceText(replace("%ping%", String.valueOf(dev.nandi0813.practice.moved.PlayerUtil.getPing(player)))) .replaceText(replace("%arena%", match.getArena().getDisplayName())) .replaceText(replace("%ladder%", match.getLadder().getDisplayName())); } @@ -203,7 +202,7 @@ public static Component replaceFFAPlaceholders(Player player, Component line, FF .replaceText(replace("%players%", String.valueOf(ffa.getPlayers().size()))) .replaceText(replace("%spectators%", String.valueOf(ffa.getSpectators().size()))) .replaceText(replace("%nextReset%", ffa.getBuildRollback() != null ? ffa.getBuildRollback().getFormattedTime() : "N/A")) - .replaceText(replace("%ping%", String.valueOf(ClassImport.getClasses().getPlayerUtil().getPing(player)))) + .replaceText(replace("%ping%", String.valueOf(dev.nandi0813.practice.moved.PlayerUtil.getPing(player)))) .replaceText(replace("%ladder%", ffa.getPlayers().get(player).getDisplayName())) .replaceText(replace("%arena%", ffa.getArena().getDisplayName())) .replaceText(replace("%kills%", String.valueOf(statistic.getKills()))) diff --git a/core/src/main/java/dev/nandi0813/practice/module/interfaces/ArenaUtil.java b/core/src/main/java/dev/nandi0813/practice/module/interfaces/ArenaUtil.java deleted file mode 100644 index bd64dd34..00000000 --- a/core/src/main/java/dev/nandi0813/practice/module/interfaces/ArenaUtil.java +++ /dev/null @@ -1,31 +0,0 @@ -package dev.nandi0813.practice.module.interfaces; - -import dev.nandi0813.practice.manager.arena.arenas.interfaces.BasicArena; -import dev.nandi0813.practice.manager.ladder.abstraction.Ladder; -import org.bukkit.block.Block; -import org.bukkit.entity.ArmorStand; -import org.bukkit.inventory.ItemStack; - -public interface ArenaUtil { - - boolean turnsToDirt(Block block); - - boolean containsDestroyableBlock(Ladder ladder, Block block); - - /** - * Returns {@code true} if {@code block} requires a solid block directly below it to exist - * (e.g. dead bush, tall grass, sapling, flower, torch, etc.). - *

    - * These blocks are NOT included in the TNT {@code blockList} by Minecraft, yet they - * silently disappear when their support is destroyed by an explosion. We must track them - * manually before the explosion fires so the rollback can restore them. - */ - boolean requiresSupport(Block block); - - void loadArenaChunks(BasicArena arena); - - void setArmorStandItemInHand(ArmorStand armorStand, ItemStack item, boolean rightHand); - - void setArmorStandInvulnerable(ArmorStand armorStand); - -} diff --git a/core/src/main/java/dev/nandi0813/practice/module/interfaces/BedUtil.java b/core/src/main/java/dev/nandi0813/practice/module/interfaces/BedUtil.java deleted file mode 100644 index 51ff8cbc..00000000 --- a/core/src/main/java/dev/nandi0813/practice/module/interfaces/BedUtil.java +++ /dev/null @@ -1,37 +0,0 @@ -package dev.nandi0813.practice.module.interfaces; - -import dev.nandi0813.practice.manager.arena.util.BedLocation; -import dev.nandi0813.practice.manager.backend.LanguageManager; -import dev.nandi0813.practice.manager.fight.match.Match; -import dev.nandi0813.practice.manager.fight.match.enums.TeamEnum; -import org.bukkit.Location; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; -import org.bukkit.event.Listener; -import org.bukkit.event.block.BlockBreakEvent; -import org.jetbrains.annotations.NotNull; - -public abstract class BedUtil implements Listener { - - public abstract boolean onBedBreak(final @NotNull BlockBreakEvent e, final @NotNull Match match); - - public abstract BedLocation getBedLocation(Block block); - - public abstract void placeBed(Location loc, BlockFace face); - - protected void sendBedDestroyMessage(Match match, TeamEnum team) { - String languagePath = switch (match.getLadder().getType()) { - case BEDWARS -> "MATCH." + match.getType().getPathName() + ".LADDER-SPECIFIC.BED-WARS"; - case FIREBALL_FIGHT -> "MATCH." + match.getType().getPathName() + ".LADDER-SPECIFIC.FIREBALL-FIGHT"; - default -> null; - }; - - if (languagePath == null) return; - - match.sendMessage(LanguageManager.getString(languagePath + ".BED-DESTROYED") - .replace("%team%", team.getNameMM()) - .replace("%teamColor%", team.getColorMM()) - , true); - } - -} diff --git a/core/src/main/java/dev/nandi0813/practice/module/interfaces/ChangedBlock.java b/core/src/main/java/dev/nandi0813/practice/module/interfaces/ChangedBlock.java deleted file mode 100644 index bfac373b..00000000 --- a/core/src/main/java/dev/nandi0813/practice/module/interfaces/ChangedBlock.java +++ /dev/null @@ -1,57 +0,0 @@ -package dev.nandi0813.practice.module.interfaces; - -import lombok.Getter; -import lombok.Setter; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; -import org.bukkit.event.block.BlockPlaceEvent; -import org.bukkit.inventory.ItemStack; - -public abstract class ChangedBlock { - - @Getter - public final Block block; - @Getter - public final Material material; - @Getter - public Location location; - - public ItemStack[] chestInventory; - @Setter - public BlockFace bedFace; - - protected ChangedBlock(final Block block) { - this.block = block; - this.location = block.getLocation(); - this.material = block.getType(); - - saveChest(this.location); - saveBed(this.location); - } - - /** - * Constructor for when the block has already changed in the world but we know its original material. - * Used for TNT blocks that became TNTPrimed entities before the explosion event fires. - */ - protected ChangedBlock(final Block block, final Material originalMaterial) { - this.block = block; - this.location = block.getLocation(); - this.material = originalMaterial; - // No chest/bed state to save — the block is already gone - } - - protected ChangedBlock(final BlockPlaceEvent e) { - this.block = e.getBlockPlaced(); - this.location = block.getLocation(); - this.material = e.getBlockReplacedState().getType(); - } - - protected abstract void saveChest(Location loc); - - protected abstract void saveBed(Location loc); - - public abstract void reset(); - -} diff --git a/core/src/main/java/dev/nandi0813/practice/module/interfaces/ConfigItemProvider.java b/core/src/main/java/dev/nandi0813/practice/module/interfaces/ConfigItemProvider.java deleted file mode 100644 index fcdc9ad1..00000000 --- a/core/src/main/java/dev/nandi0813/practice/module/interfaces/ConfigItemProvider.java +++ /dev/null @@ -1,21 +0,0 @@ -package dev.nandi0813.practice.module.interfaces; - -import dev.nandi0813.practice.manager.gui.GUIItem; -import org.bukkit.configuration.file.YamlConfiguration; - -/** - * Version-specific interface for loading GUIItems from configuration files. - * This abstraction handles differences between legacy (1.8) and modern (1.13+) item building. - */ -public interface ConfigItemProvider { - - /** - * Creates a GUIItem from a YAML configuration section. - * - * @param config The YAML configuration file - * @param loc The location path in the configuration (e.g., "ITEMS.EXAMPLE_ITEM") - * @return A fully configured GUIItem ready to be converted to an ItemStack - */ - GUIItem getGuiItem(YamlConfiguration config, String loc); - -} diff --git a/core/src/main/java/dev/nandi0813/practice/module/interfaces/ItemCooldownHandler.java b/core/src/main/java/dev/nandi0813/practice/module/interfaces/ItemCooldownHandler.java deleted file mode 100644 index bad64f83..00000000 --- a/core/src/main/java/dev/nandi0813/practice/module/interfaces/ItemCooldownHandler.java +++ /dev/null @@ -1,101 +0,0 @@ -package dev.nandi0813.practice.module.interfaces; - -import dev.nandi0813.practice.manager.fight.util.FightPlayer; -import org.bukkit.entity.Player; -import org.bukkit.event.Cancellable; - -/** - * Version-specific strategy for handling item cooldowns on Ender Pearls, - * Golden Apples, and Firework Rockets. - * - *

    Legacy (1.8.8): blocks the action via {@link Cancellable#setCancelled(boolean)} - * and sends a chat message to the player. - * - *

    Modern (Paper): additionally calls {@code Player#setCooldown(Material, int)} so the item - * is visually grayed-out in the hotbar; no chat message is sent. - */ -public interface ItemCooldownHandler { - - /** - * Called when a player attempts to throw an ender pearl in an FFA. - * - * @param player the player - * @param fightPlayer the FFA fight-player context - * @param duration cooldown duration in seconds - * @param expBar whether to use the EXP bar to display the remaining time - * @param event the cancellable event - * @param langKey language key for the blocked-message (e.g. {@code "FFA.GAME.COOLDOWN.ENDER-PEARL"}) - */ - void handleEnderPearlFFA(Player player, FightPlayer fightPlayer, int duration, boolean expBar, - Cancellable event, String langKey); - - /** - * Called when a player attempts to throw an ender pearl in a match. - * - * @param player the player - * @param fightPlayer the match fight-player context - * @param duration cooldown duration in seconds - * @param expBar whether to use the EXP bar to display the remaining time - * @param event the cancellable event - * @param langKey language key for the blocked-message (e.g. {@code "MATCH.COOLDOWN.ENDER-PEARL"}) - */ - void handleEnderPearlMatch(Player player, FightPlayer fightPlayer, int duration, boolean expBar, - Cancellable event, String langKey); - - /** - * Called when a player attempts to consume a golden apple in an FFA. - * - * @param player the player - * @param duration cooldown duration in seconds - * @param event the cancellable event - * @param langKey language key for the blocked-message (e.g. {@code "FFA.GAME.COOLDOWN.GOLDEN-APPLE"}) - */ - void handleGoldenAppleFFA(Player player, int duration, Cancellable event, String langKey); - - /** - * Called when a player attempts to consume a golden apple in a match. - * - * @param player the player - * @param duration cooldown duration in seconds - * @param event the cancellable event - * @param langKey language key for the blocked-message (e.g. {@code "MATCH.COOLDOWN.GOLDEN-APPLE"}) - */ - void handleGoldenAppleMatch(Player player, int duration, Cancellable event, String langKey); - - /** - * Called when a player attempts to use a firework rocket in an FFA. - * - * @param player the player - * @param fightPlayer the FFA fight-player context - * @param duration cooldown duration in seconds - * @param event the cancellable event - * @param langKey language key for the blocked-message (e.g. {@code "MATCH.COOLDOWN.FIREWORK-ROCKET-COOLDOWN"}) - */ - void handleFireworkRocketFFA(Player player, FightPlayer fightPlayer, int duration, - Cancellable event, String langKey); - - /** - * Called when a player attempts to use a firework rocket in a match. - * - * @param player the player - * @param fightPlayer the match fight-player context - * @param duration cooldown duration in seconds - * @param event the cancellable event - * @param langKey language key for the blocked-message (e.g. {@code "MATCH.COOLDOWN.FIREWORK-ROCKET-COOLDOWN"}) - */ - void handleFireworkRocketMatch(Player player, FightPlayer fightPlayer, int duration, - Cancellable event, String langKey); - - /** - * Called when a player attempts to launch a fireball in a match (FireballFight ladder). - * - * @param player the player - * @param duration cooldown duration in seconds (double, as configured per-ladder) - * @param langKey language key for the blocked-message (e.g. {@code "MATCH.COOLDOWN.FIREBALL"}) - * @return {@code true} if the fireball should be launched (no cooldown active), - * {@code false} if the action was blocked because a cooldown is active - */ - boolean handleFireballMatch(Player player, double duration, String langKey); -} - - diff --git a/core/src/main/java/dev/nandi0813/practice/module/interfaces/ItemCreateUtil.java b/core/src/main/java/dev/nandi0813/practice/module/interfaces/ItemCreateUtil.java deleted file mode 100644 index 4e553b1b..00000000 --- a/core/src/main/java/dev/nandi0813/practice/module/interfaces/ItemCreateUtil.java +++ /dev/null @@ -1,63 +0,0 @@ -package dev.nandi0813.practice.module.interfaces; - -import org.bukkit.Material; -import org.bukkit.inventory.ItemFlag; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; - -import java.util.List; - -public abstract class ItemCreateUtil { - - public abstract ItemStack createItem(String displayname, Material material, Short damage, int amount, List lore); - - public abstract ItemStack createItem(String displayname, Material material); - - public abstract ItemStack createItem(Material material, Short damage); - - public abstract ItemStack createItem(String displayname, Material material, Short damage); - - public abstract ItemStack createItem(String displayname, Material material, List lore); - - public abstract ItemStack createItem(String displayname, Material material, Short damage, List lore); - - public abstract ItemStack createItem(ItemStack item, List lore); - - public abstract ItemStack createItem(ItemStack item, String name, List lore); - - public static void hideItemFlags(ItemMeta itemMeta) { - itemMeta.addItemFlags(ItemFlag.HIDE_ENCHANTS); - itemMeta.addItemFlags(ItemFlag.HIDE_POTION_EFFECTS); - itemMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); - itemMeta.addItemFlags(ItemFlag.HIDE_DESTROYS); - itemMeta.addItemFlags(ItemFlag.HIDE_UNBREAKABLE); - itemMeta.addItemFlags(ItemFlag.HIDE_PLACED_ON); - } - - public static ItemStack hideItemFlags(ItemStack item) { - ItemMeta itemMeta = item.getItemMeta(); - hideItemFlags(itemMeta); - item.setItemMeta(itemMeta); - return item; - } - - public static short getDurabilityByColor(char c) { - return switch (c) { - case '0' -> Short.parseShort("15"); - case '1', '9' -> Short.parseShort("11"); - case '2' -> Short.parseShort("13"); - case '3' -> Short.parseShort("9"); - case '4', 'c' -> Short.parseShort("14"); - case '5' -> Short.parseShort("10"); - case '6' -> Short.parseShort("35"); - case '7' -> Short.parseShort("8"); - case '8' -> Short.parseShort("7"); - case 'a' -> Short.parseShort("5"); - case 'b' -> Short.parseShort("3"); - case 'd' -> Short.parseShort("6"); - case 'e' -> Short.parseShort("4"); - default -> 0; - }; - } - -} \ No newline at end of file diff --git a/core/src/main/java/dev/nandi0813/practice/module/interfaces/ItemMaterialUtil.java b/core/src/main/java/dev/nandi0813/practice/module/interfaces/ItemMaterialUtil.java deleted file mode 100644 index d5e1cb70..00000000 --- a/core/src/main/java/dev/nandi0813/practice/module/interfaces/ItemMaterialUtil.java +++ /dev/null @@ -1,50 +0,0 @@ -package dev.nandi0813.practice.module.interfaces; - -import org.bukkit.Material; -import org.bukkit.OfflinePlayer; -import org.bukkit.entity.EntityType; -import org.bukkit.inventory.ItemStack; - -public interface ItemMaterialUtil { - - Material getSnowball(); - - Material getIronShovel(); - - Material getEyeOfEnder(); - - Material getRedBed(); - - Material getMushroomSoup(); - - Material getWater(); - - Material getLava(); - - Material getFireball(); - - Material getEndPortal(); - - Material getLilyPad(); - - Material getStainedClay(); - - Material getSplashPotion(); - - Material getGoldSword(); - - Material getClock(); - - EntityType getTNTMineCart(); - - ItemStack getPlayerHead(OfflinePlayer player); - - ItemStack getSword(); - - ItemStack getRedBlock(); - - ItemStack getDefaultPlayerHead(); - - ItemStack getRedBoots(); - -} diff --git a/core/src/main/java/dev/nandi0813/practice/module/interfaces/LadderUtil.java b/core/src/main/java/dev/nandi0813/practice/module/interfaces/LadderUtil.java deleted file mode 100644 index 82214f8f..00000000 --- a/core/src/main/java/dev/nandi0813/practice/module/interfaces/LadderUtil.java +++ /dev/null @@ -1,26 +0,0 @@ -package dev.nandi0813.practice.module.interfaces; - -import dev.nandi0813.practice.manager.fight.match.Match; -import net.kyori.adventure.text.Component; -import org.bukkit.entity.Player; -import org.bukkit.event.block.BlockPlaceEvent; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; - -public interface LadderUtil { - - void loadInventory(Player player, ItemStack[] armor, ItemStack[] inventory, ItemStack[] extra); - - ItemStack changeItemColor(ItemStack item, Component teamColor); - - ItemStack getPotionItem(String potion); - - boolean isUnbreakable(ItemStack item); - - ItemMeta setUnbreakable(ItemMeta item, boolean unbreakable); - - ItemStack setDurability(ItemStack itemStack, int durability); - - void placeTnt(BlockPlaceEvent e, Match match); - -} diff --git a/core/src/main/java/dev/nandi0813/practice/module/interfaces/PlayerHiderInterface.java b/core/src/main/java/dev/nandi0813/practice/module/interfaces/PlayerHiderInterface.java deleted file mode 100644 index 3407c1e8..00000000 --- a/core/src/main/java/dev/nandi0813/practice/module/interfaces/PlayerHiderInterface.java +++ /dev/null @@ -1,11 +0,0 @@ -package dev.nandi0813.practice.module.interfaces; - -import org.bukkit.entity.Player; - -public interface PlayerHiderInterface { - - void hidePlayer(Player observer, Player target, boolean fullHide); - - void showPlayer(Player observer, Player target); - -} diff --git a/core/src/main/java/dev/nandi0813/practice/module/interfaces/PlayerUtil.java b/core/src/main/java/dev/nandi0813/practice/module/interfaces/PlayerUtil.java deleted file mode 100644 index 2434ba30..00000000 --- a/core/src/main/java/dev/nandi0813/practice/module/interfaces/PlayerUtil.java +++ /dev/null @@ -1,61 +0,0 @@ -package dev.nandi0813.practice.module.interfaces; - -import dev.nandi0813.practice.manager.backend.ConfigManager; -import net.kyori.adventure.text.Component; -import org.bukkit.Material; -import org.bukkit.entity.Entity; -import org.bukkit.entity.Fireball; -import org.bukkit.entity.Player; -import org.bukkit.entity.TNTPrimed; -import org.bukkit.inventory.ItemStack; - -import java.util.List; - -public interface PlayerUtil { - - ItemStack getPlayerMainHand(Player player); - - boolean isItemInUse(Player player, Material material); - - ItemStack getItemInUse(Player player, Material material); - - void setItemInUseIf(Player player, Material material, ItemStack itemStack); - - List dropPlayerInventory(Player player); - - void clearInventory(Player player); - - void setCollidesWithEntities(Player player, boolean bool); - - int getPing(Player player); - - ItemStack[] getInventoryStorageContent(Player player); - - double getPlayerHealth(Player player); - - void setActiveInventoryTitle(Player player, String title); - - void setPlayerListName(Player player, Component component); - - Fireball shootFireball(Player player, double speed); - - double TNT_VELOCITY_HORIZONTAL_MULTIPLICATIVE = ConfigManager.getDouble("MATCH-SETTINGS.FIREBALL-FIGHT.EXPLOSION.TNT.HORIZONTAL"); - double TNT_VELOCITY_VERTICAL_MULTIPLICATIVE = ConfigManager.getDouble("MATCH-SETTINGS.FIREBALL-FIGHT.EXPLOSION.TNT.VERTICAL"); - double FB_VELOCITY_HORIZONTAL_MULTIPLICATIVE = ConfigManager.getDouble("MATCH-SETTINGS.FIREBALL-FIGHT.EXPLOSION.FIREBALL.HORIZONTAL"); - double FB_VELOCITY_VERTICAL_MULTIPLICATIVE = ConfigManager.getDouble("MATCH-SETTINGS.FIREBALL-FIGHT.EXPLOSION.FIREBALL.VERTICAL"); - - void applyFireballKnockback(final Player player, final Fireball fireball); - - void applyTntKnockback(Player player, TNTPrimed tnt); - - /** - * Sets the player's attack speed based on hit delay. - * For 1.8.8: Does nothing (uses setMaximumNoDamageTicks only) - * For Modern (1.9+): Modifies GENERIC_ATTACK_SPEED attribute - * - * @param player The player - * @param hitDelay The hit delay in ticks (0 = instant, 20 = 1 second delay) - */ - void setAttackSpeed(Player player, int hitDelay); - -} diff --git a/core/src/main/java/dev/nandi0813/practice/module/interfaces/StatisticListener.java b/core/src/main/java/dev/nandi0813/practice/module/interfaces/StatisticListener.java deleted file mode 100644 index fbf4a73f..00000000 --- a/core/src/main/java/dev/nandi0813/practice/module/interfaces/StatisticListener.java +++ /dev/null @@ -1,87 +0,0 @@ -package dev.nandi0813.practice.module.interfaces; - -import dev.nandi0813.practice.ZonePractice; -import dev.nandi0813.practice.manager.fight.util.Stats.Statistic; -import dev.nandi0813.practice.manager.sidebar.SidebarManager; -import lombok.Getter; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.bukkit.event.entity.PotionSplashEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.scheduler.BukkitRunnable; -import org.jetbrains.annotations.NotNull; - -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -public abstract class StatisticListener implements Listener { - - @Getter - protected final ZonePractice practice = ZonePractice.getInstance(); - @Getter - protected static final Map CURRENT_CPS = new ConcurrentHashMap<>(); - @Getter - protected static final Map CPS = new ConcurrentHashMap<>(); - @Getter - protected static final Map CURRENT_COMBO = new ConcurrentHashMap<>(); - - @EventHandler ( priority = EventPriority.LOWEST ) - public abstract void onClick(PlayerInteractEvent e); - - protected static @NotNull BukkitRunnable cpsRunnable(final Statistic statistic, Player player) { - return new BukkitRunnable() { - @Override - public void run() { - // Remove atomically — avoids the TOCTOU race between containsKey and get - // that can return null and cause an NPE when unboxing to int. - Integer current = CURRENT_CPS.remove(player); - if (current != null && current > 2) { - statistic.getCps().put(System.currentTimeMillis(), current); - CPS.put(player, current); - } - } - }; - } - - @EventHandler ( priority = EventPriority.LOWEST ) - public abstract void onPlayerHit(EntityDamageByEntityEvent e); - - protected static @NotNull BukkitRunnable hitRunnable(final Player attacker, final Statistic attackerStats, final Player defender, final Statistic defenderStats) { - return new BukkitRunnable() { - @Override - public void run() { - if (attackerStats != null) { - attackerStats.setHit(attackerStats.getHit() + 1); - - CURRENT_COMBO.putIfAbsent(attacker, 1); - CURRENT_COMBO.computeIfPresent(attacker, (key, val) -> val + 1); - } - - if (defenderStats != null) { - defenderStats.setGetHit(defenderStats.getGetHit() + 1); - - if (CURRENT_COMBO.containsKey(defender) && defenderStats.getLongestCombo() < CURRENT_COMBO.get(defender)) { - defenderStats.setLongestCombo(CURRENT_COMBO.get(defender)); - } - CURRENT_COMBO.put(defender, 0); - } - - // Immediately update scoreboards for real-time hit counter display - // Schedule on main thread since scoreboard updates must be on main thread - if (attacker != null && defender != null) { - ZonePractice.getInstance().getServer().getScheduler().runTask( - ZonePractice.getInstance(), - () -> SidebarManager.getInstance().updatePlayersSidebar(attacker, defender) - ); - } - } - }; - } - - @EventHandler ( priority = EventPriority.LOWEST ) - public abstract void onPotionSplash(PotionSplashEvent e); - -} \ No newline at end of file diff --git a/core/src/main/java/dev/nandi0813/practice/module/interfaces/WorldCreate.java b/core/src/main/java/dev/nandi0813/practice/module/interfaces/WorldCreate.java deleted file mode 100644 index 54490aee..00000000 --- a/core/src/main/java/dev/nandi0813/practice/module/interfaces/WorldCreate.java +++ /dev/null @@ -1,9 +0,0 @@ -package dev.nandi0813.practice.module.interfaces; - -import org.bukkit.World; - -public interface WorldCreate { - - World createEmptyWorld(String worldName); - -} diff --git a/core/src/main/java/dev/nandi0813/practice/module/util/ClassImport.java b/core/src/main/java/dev/nandi0813/practice/module/util/ClassImport.java deleted file mode 100644 index fc51f7ba..00000000 --- a/core/src/main/java/dev/nandi0813/practice/module/util/ClassImport.java +++ /dev/null @@ -1,139 +0,0 @@ -package dev.nandi0813.practice.module.util; - -import dev.nandi0813.practice.manager.profile.Profile; -import dev.nandi0813.practice.module.VersionNotSupportedException; -import dev.nandi0813.practice.module.interfaces.ChangedBlock; -import dev.nandi0813.practice.module.interfaces.KitData; -import dev.nandi0813.practice.module.interfaces.actionbar.ActionBar; -import dev.nandi0813.practice.util.Common; -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.event.block.BlockPlaceEvent; - -import java.lang.reflect.Constructor; -import java.util.Objects; - -public enum ClassImport { - ; - - private static Classes classes; - - public static Classes getClasses() { - if (classes == null) { - try { - Class c = getNamedClass(); - if (c != null && Classes.class.isAssignableFrom(c)) - classes = (Classes) c.getDeclaredConstructor().newInstance(); - } catch (final Exception e) { - throw new VersionNotSupportedException(e); - } - } - return classes; - } - - public static ChangedBlock createChangeBlock(Block block) { - if (block == null) return null; - - Class changedBlockClass = classes.getChangedBlockClass(); - if (ChangedBlock.class.isAssignableFrom(changedBlockClass)) { - try { - Constructor constructor = (Constructor) changedBlockClass.getConstructor(Block.class); - return constructor.newInstance(block); - } catch (Exception e) { - Common.sendConsoleMMMessage("Error: " + e.getMessage()); - } - } - return null; - } - - /** - * Creates a ChangedBlock for a position whose block has already changed (e.g. is now AIR) - * but whose original material is known. Used for TNT blocks that were chain-primed before - * the EntityExplodeEvent fires. - */ - public static ChangedBlock createChangeBlock(Block block, Material originalMaterial) { - if (block == null || originalMaterial == null) return null; - - Class changedBlockClass = classes.getChangedBlockClass(); - if (ChangedBlock.class.isAssignableFrom(changedBlockClass)) { - try { - Constructor constructor = (Constructor) changedBlockClass.getConstructor(Block.class, Material.class); - return constructor.newInstance(block, originalMaterial); - } catch (Exception e) { - Common.sendConsoleMMMessage("Error creating ChangedBlock with material override: " + e.getMessage()); - } - } - return null; - } - - public static ChangedBlock createChangeBlock(final BlockPlaceEvent blockPlaceEvent) { - if (blockPlaceEvent.getBlock().getLocation() == null) return null; - - Class changedBlockClass = classes.getChangedBlockClass(); - if (ChangedBlock.class.isAssignableFrom(changedBlockClass)) { - try { - Constructor constructor = (Constructor) changedBlockClass.getConstructor(BlockPlaceEvent.class); - return constructor.newInstance(blockPlaceEvent); - } catch (Exception e) { - Common.sendConsoleMMMessage("Error: " + e.getMessage()); - } - } - return null; - } - - public static KitData createKitData() { - Class kitDataClass = classes.getKitDataClass(); - if (KitData.class.isAssignableFrom(kitDataClass)) { - try { - Constructor constructor = (Constructor) kitDataClass.getConstructor(); - return constructor.newInstance(); - } catch (Exception e) { - Common.sendConsoleMMMessage("Error: " + e.getMessage()); - } - } - return null; - } - - public static KitData createKitData(KitData kitData) { - Class kitDataClass = classes.getKitDataClass(); - if (KitData.class.isAssignableFrom(kitDataClass)) { - try { - Constructor constructor = (Constructor) kitDataClass.getConstructor(KitData.class); - return constructor.newInstance(kitData); - } catch (Exception e) { - Common.sendConsoleMMMessage("Error: " + e.getMessage()); - } - } - return null; - } - - public static ActionBar createActionBarClass(Profile profile) { - Class actionBarClass = classes.getActionBarClass(); - if (ActionBar.class.isAssignableFrom(actionBarClass)) { - try { - Constructor constructor = (Constructor) actionBarClass.getConstructor(Profile.class); - return constructor.newInstance(profile); - } catch (Exception e) { - Common.sendConsoleMMMessage("Error: " + e.getMessage()); - } - } - return null; - } - - private static Class getNamedClass() { - - String version = Objects.requireNonNull(VersionChecker.getBukkitVersion()).getModuleVersionExtension(); - if (version == null) { - return null; - } - - try { - return Class.forName("dev.nandi0813.practice_" + version + "." + "Classes"); - } catch (final ClassNotFoundException e) { - Common.sendConsoleMMMessage("[ZonePractice] Class " + "Classes" + " cannot be found. Bukkit version: " + Bukkit.getServer().getBukkitVersion() + "."); - return null; - } - } - -} diff --git a/core/src/main/java/dev/nandi0813/practice/module/util/Classes.java b/core/src/main/java/dev/nandi0813/practice/module/util/Classes.java deleted file mode 100644 index 8a14b2a0..00000000 --- a/core/src/main/java/dev/nandi0813/practice/module/util/Classes.java +++ /dev/null @@ -1,39 +0,0 @@ -package dev.nandi0813.practice.module.util; - -import dev.nandi0813.practice.module.interfaces.*; - -public interface Classes { - - WorldCreate getWorldCreate(); - - PlayerHiderInterface getPlayerHiderUtil(); - - ItemMaterialUtil getItemMaterialUtil(); - - LadderUtil getLadderUtil(); - - ItemCreateUtil getItemCreateUtil(); - - PlayerUtil getPlayerUtil(); - - ArenaUtil getArenaUtil(); - - BedUtil getBedUtil(); - - Class getChangedBlockClass(); - - EntityHider getEntityHider(); - - ArenaCopyUtil getArenaCopyUtil(); - - ConfigItemProvider getConfigItemProvider(); - - AbstractBuildListener getBuildListener(); - - Class getKitDataClass(); - - Class getActionBarClass(); - - ItemCooldownHandler getItemCooldownHandler(); - -} diff --git a/core/src/main/java/dev/nandi0813/practice/module/interfaces/actionbar/ActionBar.java b/core/src/main/java/dev/nandi0813/practice/moved/ActionBar.java similarity index 83% rename from core/src/main/java/dev/nandi0813/practice/module/interfaces/actionbar/ActionBar.java rename to core/src/main/java/dev/nandi0813/practice/moved/ActionBar.java index c3a4e763..1d439969 100644 --- a/core/src/main/java/dev/nandi0813/practice/module/interfaces/actionbar/ActionBar.java +++ b/core/src/main/java/dev/nandi0813/practice/moved/ActionBar.java @@ -1,13 +1,14 @@ -package dev.nandi0813.practice.module.interfaces.actionbar; +package dev.nandi0813.practice.moved; import dev.nandi0813.practice.ZonePractice; import dev.nandi0813.practice.manager.profile.Profile; import lombok.Getter; import lombok.Setter; import net.kyori.adventure.text.Component; +import org.bukkit.entity.Player; @Getter -public abstract class ActionBar { +public class ActionBar { protected final Profile profile; @@ -22,9 +23,19 @@ public ActionBar(final Profile profile) { this.lock = false; } - protected abstract void send(); + public void send() { + Player player = profile.getPlayer().getPlayer(); + if (player != null) { + player.sendActionBar(this.message); + } + } - protected abstract void clear(); + public void clear() { + Player player = profile.getPlayer().getPlayer(); + if (player != null) { + player.sendActionBar(Component.empty()); + } + } /** * Only use it for constant messages diff --git a/core/src/main/java/dev/nandi0813/practice/module/interfaces/actionbar/ActionBarRunnable.java b/core/src/main/java/dev/nandi0813/practice/moved/ActionBarRunnable.java similarity index 91% rename from core/src/main/java/dev/nandi0813/practice/module/interfaces/actionbar/ActionBarRunnable.java rename to core/src/main/java/dev/nandi0813/practice/moved/ActionBarRunnable.java index 84afd533..660ce0cf 100644 --- a/core/src/main/java/dev/nandi0813/practice/module/interfaces/actionbar/ActionBarRunnable.java +++ b/core/src/main/java/dev/nandi0813/practice/moved/ActionBarRunnable.java @@ -1,4 +1,4 @@ -package dev.nandi0813.practice.module.interfaces.actionbar; +package dev.nandi0813.practice.moved; import dev.nandi0813.practice.util.interfaces.Runnable; diff --git a/core/src/main/java/dev/nandi0813/practice/module/interfaces/ArenaCopyUtil.java b/core/src/main/java/dev/nandi0813/practice/moved/ArenaCopyUtilListener.java similarity index 88% rename from core/src/main/java/dev/nandi0813/practice/module/interfaces/ArenaCopyUtil.java rename to core/src/main/java/dev/nandi0813/practice/moved/ArenaCopyUtilListener.java index 95f32c89..886c316e 100644 --- a/core/src/main/java/dev/nandi0813/practice/module/interfaces/ArenaCopyUtil.java +++ b/core/src/main/java/dev/nandi0813/practice/moved/ArenaCopyUtilListener.java @@ -1,4 +1,4 @@ -package dev.nandi0813.practice.module.interfaces; +package dev.nandi0813.practice.moved; import dev.nandi0813.practice.ZonePractice; import dev.nandi0813.practice.manager.arena.ArenaManager; @@ -12,7 +12,6 @@ import dev.nandi0813.practice.manager.gui.GUIType; import dev.nandi0813.practice.manager.gui.setup.arena.ArenaGUISetupManager; import dev.nandi0813.practice.manager.profile.Profile; -import dev.nandi0813.practice.module.interfaces.actionbar.ActionBar; import dev.nandi0813.practice.util.*; import lombok.Getter; import org.bukkit.Bukkit; @@ -20,6 +19,7 @@ import org.bukkit.Material; import org.bukkit.World; import org.bukkit.block.Block; +import org.bukkit.block.BlockState; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -30,7 +30,7 @@ import java.util.Iterator; import java.util.List; -public abstract class ArenaCopyUtil implements Listener { +public class ArenaCopyUtilListener implements Listener { @Getter private static List copyingCuboids = new ArrayList<>(); @@ -182,8 +182,6 @@ protected static boolean isCuboidContainsLocation(Location location) { return false; } - protected abstract void copyArena(Profile profile, ArenaCopy arenaCopy, Cuboid copyFrom, Location reference, Location newLocation); - protected void copyNormal(Profile profile, ArenaCopy arenaCopy, Cuboid copyFrom, Location reference, Location newLocation) { final World copyWorld = ArenaWorldUtil.getArenasCopyWorld(); @@ -197,7 +195,7 @@ protected void copyNormal(Profile profile, ArenaCopy arenaCopy, Cuboid copyFrom, arenaCopy.getMainArena().setCopying(true); - dev.nandi0813.practice.module.interfaces.actionbar.ActionBar actionBar = null; + ActionBar actionBar = null; if (!profile.getActionBar().isLock()) { actionBar = profile.getActionBar(); actionBar.setLock(true); @@ -276,8 +274,6 @@ public void run() { }.runTaskTimer(ZonePractice.getInstance(), 0, 1L); } - public abstract void deleteArena(final String arena, final Cuboid cuboid); - protected void deleteNormal(final String arena, final Cuboid cuboid) { // OPTIMIZATION: Use iterator directly instead of creating a full list in memory final Iterator iterator = cuboid.iterator(); @@ -350,7 +346,7 @@ protected static void cancelTask(BukkitRunnable runnable, ArenaCopy arenaCopy, A runnable.cancel(); arenaCopy.getMainArena().setCopying(false); - ArenaCopyUtil.getCopyingCuboids().remove(arenaCopy.getCuboid()); + ArenaCopyUtilListener.getCopyingCuboids().remove(arenaCopy.getCuboid()); removeCopyingChunks(arenaCopy.getCuboid()); // Unregister chunks removeNonPlayerEntities(arenaCopy.getCuboid()); @@ -375,6 +371,44 @@ protected static void removeNonPlayerEntities(Cuboid cuboid) { }); } - protected abstract void copyBlock(Block oldBlock, Block newBlock); + protected void copyBlock(Block oldBlock, Block newBlock) { + try { + // OPTIMIZATION: Set type without physics for massive speedup + newBlock.setType(oldBlock.getType(), false); + + BlockState oldState = oldBlock.getState(); + BlockState newState = newBlock.getState(); + + // Clone block data + newState.setBlockData(oldState.getBlockData().clone()); + newState.update(true, false); // force=true, applyPhysics=false + + newBlock.setBiome(oldBlock.getBiome()); + } catch (Exception e) { + // Skip problematic blocks (e.g., MaterialData type incompatibilities) + // This allows the copy process to continue without halting + } + } + + protected void copyArena(Profile profile, ArenaCopy arenaCopy, Cuboid copyFrom, Location reference, Location newLocation) { + if (SoftDependUtil.isFAWE_ENABLED) { + FaweUtil.copyFAWE(copyFrom, reference, newLocation); + + arenaCopy.getMainArena().getCopies().add(arenaCopy); + ArenaGUISetupManager.getInstance().getArenaSetupGUIs().get(arenaCopy.getMainArena()).get(GUIType.Arena_Copy).update(); + ArenaGUISetupManager.getInstance().getArenaSetupGUIs().get(arenaCopy.getMainArena()).get(GUIType.Arena_Main).update(); + GUIManager.getInstance().searchGUI(GUIType.Arena_Summary).update(); + } else { + this.copyNormal(profile, arenaCopy, copyFrom, reference, newLocation); + } + } + + public void deleteArena(final String arena, final Cuboid cuboid) { + if (SoftDependUtil.isFAWE_ENABLED) { + FaweUtil.deleteFAWE(cuboid); + } else { + deleteNormal(arena, cuboid); + } + } } diff --git a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/listener/ArenaListener.java b/core/src/main/java/dev/nandi0813/practice/moved/ArenaListener.java similarity index 96% rename from spigot_modern/src/main/java/dev/nandi0813/practice_modern/listener/ArenaListener.java rename to core/src/main/java/dev/nandi0813/practice/moved/ArenaListener.java index 797a489a..29fd15e5 100644 --- a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/listener/ArenaListener.java +++ b/core/src/main/java/dev/nandi0813/practice/moved/ArenaListener.java @@ -1,4 +1,4 @@ -package dev.nandi0813.practice_modern.listener; +package dev.nandi0813.practice.moved; import dev.nandi0813.practice.ZonePractice; import dev.nandi0813.practice.manager.arena.util.ArenaWorldUtil; diff --git a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/BedUtil.java b/core/src/main/java/dev/nandi0813/practice/moved/BedUtil.java similarity index 78% rename from spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/BedUtil.java rename to core/src/main/java/dev/nandi0813/practice/moved/BedUtil.java index bc3312c0..5584b1e0 100644 --- a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/BedUtil.java +++ b/core/src/main/java/dev/nandi0813/practice/moved/BedUtil.java @@ -1,11 +1,10 @@ -package dev.nandi0813.practice_modern.interfaces; +package dev.nandi0813.practice.moved; import dev.nandi0813.practice.manager.arena.util.BedLocation; import dev.nandi0813.practice.manager.backend.LanguageManager; import dev.nandi0813.practice.manager.fight.match.Match; import dev.nandi0813.practice.manager.fight.match.enums.TeamEnum; import dev.nandi0813.practice.manager.fight.match.interfaces.Team; -import dev.nandi0813.practice.module.util.ClassImport; import dev.nandi0813.practice.util.Common; import org.bukkit.Bukkit; import org.bukkit.Location; @@ -19,10 +18,9 @@ import java.util.Map; -public class BedUtil extends dev.nandi0813.practice.module.interfaces.BedUtil { +public class BedUtil { - @Override - public BedLocation getBedLocation(Block block) { + public static BedLocation getBedLocation(Block block) { if (block == null) return null; Location bedLoc = block.getLocation(); @@ -34,8 +32,7 @@ public BedLocation getBedLocation(Block block) { return new BedLocation(bedLoc.getWorld(), bedLoc.getX(), bedLoc.getY(), bedLoc.getZ(), bed.getFacing()); } - @Override - public void placeBed(Location loc, BlockFace face) { + public static void placeBed(Location loc, BlockFace face) { Block bedFoot = loc.getBlock(); bedFoot.setType(Material.RED_BED); Bed bedFootData = (Bed) Bukkit.createBlockData(Material.RED_BED); @@ -52,8 +49,7 @@ public void placeBed(Location loc, BlockFace face) { bedHead.setBlockData(bedHeadData, false); } - @Override - public boolean onBedBreak(final @NotNull BlockBreakEvent e, final @NotNull Match match) { + public static boolean onBedBreak(final @NotNull BlockBreakEvent e, final @NotNull Match match) { Player player = e.getPlayer(); if (match.getCurrentStat(player).isSet()) return false; @@ -100,7 +96,7 @@ public boolean onBedBreak(final @NotNull BlockBreakEvent e, final @NotNull Match BedLocation bedLocation = getBedLocation(e.getBlock()); Block head = bedLocation.getBlock().getRelative(bedLocation.getFacing()); - match.addBlockChange(ClassImport.createChangeBlock(bedLocation.getBlock())); + match.addBlockChange(new ChangedBlock(bedLocation.getBlock())); head.setType(Material.AIR); bedLocation.getBlock().setType(Material.AIR); @@ -109,4 +105,19 @@ public boolean onBedBreak(final @NotNull BlockBreakEvent e, final @NotNull Match return destroy; } + private static void sendBedDestroyMessage(Match match, TeamEnum team) { + String languagePath = switch (match.getLadder().getType()) { + case BEDWARS -> "MATCH." + match.getType().getPathName() + ".LADDER-SPECIFIC.BED-WARS"; + case FIREBALL_FIGHT -> "MATCH." + match.getType().getPathName() + ".LADDER-SPECIFIC.FIREBALL-FIGHT"; + default -> null; + }; + + if (languagePath == null) return; + + match.sendMessage(LanguageManager.getString(languagePath + ".BED-DESTROYED") + .replace("%team%", team.getNameMM()) + .replace("%teamColor%", team.getColorMM()) + , true); + } + } diff --git a/core/src/main/java/dev/nandi0813/practice/module/interfaces/AbstractBuildListener.java b/core/src/main/java/dev/nandi0813/practice/moved/BuildListener.java similarity index 90% rename from core/src/main/java/dev/nandi0813/practice/module/interfaces/AbstractBuildListener.java rename to core/src/main/java/dev/nandi0813/practice/moved/BuildListener.java index bf308a6f..1d6fc613 100644 --- a/core/src/main/java/dev/nandi0813/practice/module/interfaces/AbstractBuildListener.java +++ b/core/src/main/java/dev/nandi0813/practice/moved/BuildListener.java @@ -1,13 +1,13 @@ -package dev.nandi0813.practice.module.interfaces; +package dev.nandi0813.practice.moved; import dev.nandi0813.practice.ZonePractice; +import dev.nandi0813.practice.manager.arena.util.ArenaUtil; import dev.nandi0813.practice.manager.fight.match.Match; import dev.nandi0813.practice.manager.fight.match.enums.MatchStatus; import dev.nandi0813.practice.manager.fight.match.enums.RoundStatus; import dev.nandi0813.practice.manager.fight.util.FightUtil; import dev.nandi0813.practice.manager.ladder.abstraction.Ladder; import dev.nandi0813.practice.manager.ladder.abstraction.interfaces.LadderHandle; -import dev.nandi0813.practice.module.util.ClassImport; import dev.nandi0813.practice.util.interfaces.Spectatable; import org.bukkit.Location; import org.bukkit.Material; @@ -18,12 +18,7 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; -import org.bukkit.event.block.BlockBurnEvent; -import org.bukkit.event.block.BlockFormEvent; -import org.bukkit.event.block.BlockFromToEvent; -import org.bukkit.event.block.BlockPistonExtendEvent; -import org.bukkit.event.block.BlockPistonRetractEvent; -import org.bukkit.event.block.BlockSpreadEvent; +import org.bukkit.event.block.*; import org.bukkit.event.entity.EntityChangeBlockEvent; import org.bukkit.event.entity.EntityExplodeEvent; import org.bukkit.event.entity.EntitySpawnEvent; @@ -31,7 +26,10 @@ import org.bukkit.metadata.FixedMetadataValue; import org.bukkit.metadata.MetadataValue; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.Objects; import static dev.nandi0813.practice.util.PermanentConfig.PLACED_IN_FIGHT; @@ -61,12 +59,14 @@ *

  • 1.8.8: TNT tracking entirely via {@link EntitySpawnEvent} (no TNTPrimeEvent available)
  • * */ -public abstract class AbstractBuildListener implements Listener { +public class BuildListener implements Listener { // ========================================================================= // HELPERS — shared by all subclasses // ========================================================================= + private final Map setFuseTick = new HashMap<>(); + /** * Finds the active build-enabled {@link Spectatable} whose cuboid contains the location. * Returns {@code null} if none is found. @@ -87,7 +87,7 @@ protected static Spectatable getByBlock(Block block) { */ protected static void tagAndTrack(Block block, Spectatable spectatable) { block.setMetadata(PLACED_IN_FIGHT, new FixedMetadataValue(ZonePractice.getInstance(), spectatable)); - spectatable.addBlockChange(ClassImport.createChangeBlock(block)); + spectatable.addBlockChange(new ChangedBlock(block)); } /** @@ -114,9 +114,9 @@ protected static Ladder ladderOf(Spectatable spectatable) { */ private static void trackDependentBlocksAbove(Block base, Spectatable spectatable) { Block above = base.getRelative(0, 1, 0); - while (ClassImport.getClasses().getArenaUtil().requiresSupport(above)) { + while (ArenaUtil.requiresSupport(above)) { if (!above.hasMetadata(PLACED_IN_FIGHT)) { - spectatable.getFightChange().addArenaBlockChange(ClassImport.createChangeBlock(above)); + spectatable.getFightChange().addArenaBlockChange(new ChangedBlock(above)); } above = above.getRelative(0, 1, 0); } @@ -151,7 +151,7 @@ protected void handleExplosion(org.bukkit.event.Event event, List blockLi blockList.removeIf(block -> { if (block.getType().equals(Material.TNT)) return false; // keep → chain-explodes - if (ClassImport.getClasses().getArenaUtil().containsDestroyableBlock(l, block)) return false; // keep → destroyable + if (ArenaUtil.containsDestroyableBlock(l, block)) return false; // keep → destroyable if (block.hasMetadata(PLACED_IN_FIGHT)) return false; // keep → player placed if (breakAll) return false; // keep → break-all-blocks active if (block.getRelative(0, 1, 0).hasMetadata(PLACED_IN_FIGHT)) return true; // remove → support block protected @@ -161,11 +161,11 @@ protected void handleExplosion(org.bukkit.event.Event event, List blockLi for (Block block : blockList) { if (block.getType() == Material.TNT || block.getType() == Material.AIR) continue; if (block.hasMetadata(PLACED_IN_FIGHT)) { - spectatable.addBlockChange(ClassImport.createChangeBlock(block)); + spectatable.addBlockChange(new ChangedBlock(block)); } else { // Natural arena block — use addArenaBlockChange so no PLACED_IN_FIGHT // metadata is set (players can't break it manually) but it is restored. - spectatable.getFightChange().addArenaBlockChange(ClassImport.createChangeBlock(block)); + spectatable.getFightChange().addArenaBlockChange(new ChangedBlock(block)); } trackDependentBlocksAbove(block, spectatable); } @@ -192,7 +192,7 @@ public void onEntityExplode(EntityExplodeEvent e) { final boolean breakAll = spectatable.isBreakAllBlocks(); e.blockList().removeIf(block -> { if (block.getType().equals(Material.TNT)) return false; - if (ClassImport.getClasses().getArenaUtil().containsDestroyableBlock(l, block)) return false; + if (ArenaUtil.containsDestroyableBlock(l, block)) return false; if (block.hasMetadata(PLACED_IN_FIGHT)) return false; if (breakAll) return false; if (block.getRelative(0, 1, 0).hasMetadata(PLACED_IN_FIGHT)) return true; @@ -201,9 +201,9 @@ public void onEntityExplode(EntityExplodeEvent e) { for (Block block : e.blockList()) { if (block.getType() == Material.TNT || block.getType() == Material.AIR) continue; if (block.hasMetadata(PLACED_IN_FIGHT)) { - spectatable.addBlockChange(ClassImport.createChangeBlock(block)); + spectatable.addBlockChange(new ChangedBlock(block)); } else { - spectatable.getFightChange().addArenaBlockChange(ClassImport.createChangeBlock(block)); + spectatable.getFightChange().addArenaBlockChange(new ChangedBlock(block)); } trackDependentBlocksAbove(block, spectatable); } @@ -251,8 +251,9 @@ protected void handleTntSpawn(TNTPrimed tnt, Spectatable spectatable) { * {@code TNTPrimeEvent}. */ protected void onApplyFuseTime(TNTPrimed tnt, Match match) { - if (tnt.getSource() instanceof org.bukkit.entity.Player) { - tnt.setFuseTicks(20 * match.getLadder().getTntFuseTime()); + final String key = locationKey(tnt.getLocation()); + if (setFuseTick.containsKey(key)) { + tnt.setFuseTicks(setFuseTick.remove(key)); } } @@ -270,7 +271,7 @@ public void onEntitySpawnEvent(EntitySpawnEvent e) { // Use the event location (exact spawn point) rather than tnt.getLocation() to avoid // fractional coordinates resolving to the wrong block. spectatable.getFightChange().addArenaBlockChange( - ClassImport.createChangeBlock(e.getLocation().getBlock(), Material.TNT)); + new ChangedBlock(e.getLocation().getBlock(), Material.TNT)); } handleTntSpawn(tnt, spectatable); @@ -285,7 +286,7 @@ public void onEntitySpawnEvent(EntitySpawnEvent e) { * The 1.8.8 default returns {@code false} because there is no pre-spawn event. */ protected boolean isTntBlockAlreadyTracked() { - return false; + return true; } // ========================================================================= @@ -363,7 +364,7 @@ public void onBucketEmpty(PlayerBucketEmptyEvent e) { if (liquidSourceBlock.hasMetadata(PLACED_IN_FIGHT)) return; // already tracked // Capture while still AIR (or pre-existing material) so rollback restores correctly - spectatable.getFightChange().addBlockChange(ClassImport.createChangeBlock(liquidSourceBlock)); + spectatable.getFightChange().addBlockChange(new ChangedBlock(liquidSourceBlock)); liquidSourceBlock.setMetadata(PLACED_IN_FIGHT, new FixedMetadataValue(ZonePractice.getInstance(), spectatable)); } @@ -418,7 +419,7 @@ public void onBlockFromTo(BlockFromToEvent e) { // properly recorded for rollback — whether the source is player-placed or natural. if (!toBlock.hasMetadata(PLACED_IN_FIGHT)) { toBlock.setMetadata(PLACED_IN_FIGHT, new FixedMetadataValue(ZonePractice.getInstance(), spectatable)); - spectatable.getFightChange().addBlockChange(ClassImport.createChangeBlock(toBlock)); + spectatable.getFightChange().addBlockChange(new ChangedBlock(toBlock)); } } @@ -503,9 +504,9 @@ public void onBlockBurn(BlockBurnEvent e) { // Track the block's original state for rollback if (block.hasMetadata(PLACED_IN_FIGHT)) { - spectatable.addBlockChange(ClassImport.createChangeBlock(block)); + spectatable.addBlockChange(new ChangedBlock(block)); } else { - spectatable.getFightChange().addArenaBlockChange(ClassImport.createChangeBlock(block)); + spectatable.getFightChange().addArenaBlockChange(new ChangedBlock(block)); } // Track adjacent fire blocks so rollback removes the fire that caused/surrounds the burn. @@ -580,13 +581,13 @@ public void onFallingBlockChange(EntityChangeBlockEvent e) { // Landing spot is still AIR at LOWEST — record as AIR so rollback clears it if (!affectedBlock.hasMetadata(PLACED_IN_FIGHT)) { spectatable.getFightChange().addArenaBlockChange( - ClassImport.createChangeBlock(affectedBlock, Material.AIR)); + new ChangedBlock(affectedBlock, Material.AIR)); } } else { // Start falling: block is still its original material — capture it now if (!affectedBlock.hasMetadata(PLACED_IN_FIGHT)) { spectatable.getFightChange().addArenaBlockChange( - ClassImport.createChangeBlock(affectedBlock)); + new ChangedBlock(affectedBlock)); } spectatable.addEntityChange(fallingBlock); } @@ -604,13 +605,44 @@ public void onFallingBlockChange(EntityChangeBlockEvent e) { if (isLanding) { if (!affectedBlock.hasMetadata(PLACED_IN_FIGHT)) { spectatable.getFightChange().addArenaBlockChange( - ClassImport.createChangeBlock(affectedBlock, Material.AIR)); + new ChangedBlock(affectedBlock, Material.AIR)); } } else { if (!affectedBlock.hasMetadata(PLACED_IN_FIGHT)) { spectatable.getFightChange().addArenaBlockChange( - ClassImport.createChangeBlock(affectedBlock)); + new ChangedBlock(affectedBlock)); } } } + + private String locationKey(Location loc) { + return Objects.requireNonNull(loc.getWorld()).getName() + + ":" + loc.getBlockX() + ":" + loc.getBlockY() + ":" + loc.getBlockZ(); + } + + @EventHandler + public void onTntPrimeEvent(TNTPrimeEvent e) { + Spectatable spectatable = getByBlock(e.getBlock()); + if (spectatable == null) return; + + // Track the TNT block NOW — it is still TNT in the world at this point. + if (spectatable.isBuild()) { + spectatable.getFightChange().addArenaBlockChange(new ChangedBlock(e.getBlock())); + } + + // Record custom fuse time for match contexts + if (spectatable instanceof Match match) { + if (!e.getCause().equals(TNTPrimeEvent.PrimeCause.EXPLOSION)) { + setFuseTick.put(locationKey(e.getBlock().getLocation()), + match.getLadder().getTntFuseTime() * 20); + } + } + } + + @EventHandler + public void onBlockExplode(BlockExplodeEvent e) { + Spectatable spectatable = getByBlock(e.getBlock()); + handleExplosion(e, e.blockList(), spectatable); + } + } diff --git a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/ChangedBlock.java b/core/src/main/java/dev/nandi0813/practice/moved/ChangedBlock.java similarity index 64% rename from spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/ChangedBlock.java rename to core/src/main/java/dev/nandi0813/practice/moved/ChangedBlock.java index 868295a4..0dc320fa 100644 --- a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/ChangedBlock.java +++ b/core/src/main/java/dev/nandi0813/practice/moved/ChangedBlock.java @@ -1,37 +1,64 @@ -package dev.nandi0813.practice_modern.interfaces; +package dev.nandi0813.practice.moved; import dev.nandi0813.practice.manager.backend.LanguageManager; -import dev.nandi0813.practice.module.util.ClassImport; import dev.nandi0813.practice.util.Common; +import lombok.Getter; +import lombok.Setter; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; import org.bukkit.block.Chest; import org.bukkit.block.data.BlockData; import org.bukkit.block.data.type.Bed; import org.bukkit.event.block.BlockPlaceEvent; +import org.bukkit.inventory.ItemStack; -public class ChangedBlock extends dev.nandi0813.practice.module.interfaces.ChangedBlock { +public class ChangedBlock { + + @Getter + public final Block block; + @Getter + public final Material material; + @Getter + public Location location; + + public ItemStack[] chestInventory; + @Setter + public BlockFace bedFace; private final BlockData blockData; - public ChangedBlock(Block block) { - super(block); + public ChangedBlock(final Block block) { + this.block = block; + this.location = block.getLocation(); + this.material = block.getType(); + + saveChest(this.location); + saveBed(this.location); this.blockData = block.getBlockData(); } - public ChangedBlock(Block block, Material originalMaterial) { - super(block, originalMaterial); - // Block is already AIR/changed; use the default BlockData for the original material + /** + * Constructor for when the block has already changed in the world but we know its original material. + * Used for TNT blocks that became TNTPrimed entities before the explosion event fires. + */ + public ChangedBlock(final Block block, final Material originalMaterial) { + this.block = block; + this.location = block.getLocation(); + this.material = originalMaterial; + // No chest/bed state to save — the block is already gone this.blockData = org.bukkit.Bukkit.createBlockData(originalMaterial); } public ChangedBlock(final BlockPlaceEvent e) { - super(e); + this.block = e.getBlockPlaced(); + this.location = block.getLocation(); + this.material = e.getBlockReplacedState().getType(); this.blockData = e.getBlockReplacedState().getBlockData(); } - protected void saveChest(Location loc) { + private void saveChest(Location loc) { try { Block block = loc.getBlock(); @@ -44,7 +71,7 @@ protected void saveChest(Location loc) { } } - protected void saveBed(Location loc) { + private void saveBed(Location loc) { Block block = loc.getBlock(); if (block.getType().toString().contains("_BED")) { @@ -61,7 +88,7 @@ public void reset() { if (location == null) return; if (bedFace != null) { - ClassImport.getClasses().getBedUtil().placeBed(location, bedFace); + BedUtil.placeBed(location, bedFace); return; } diff --git a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/listener/EPCountdownListener.java b/core/src/main/java/dev/nandi0813/practice/moved/EPCountdownListener.java similarity index 93% rename from spigot_modern/src/main/java/dev/nandi0813/practice_modern/listener/EPCountdownListener.java rename to core/src/main/java/dev/nandi0813/practice/moved/EPCountdownListener.java index a7d8a7f5..7219ab83 100644 --- a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/listener/EPCountdownListener.java +++ b/core/src/main/java/dev/nandi0813/practice/moved/EPCountdownListener.java @@ -1,11 +1,10 @@ -package dev.nandi0813.practice_modern.listener; +package dev.nandi0813.practice.moved; import dev.nandi0813.practice.manager.fight.ffa.FFAManager; import dev.nandi0813.practice.manager.fight.ffa.game.FFA; import dev.nandi0813.practice.manager.fight.match.Match; import dev.nandi0813.practice.manager.fight.match.MatchManager; import dev.nandi0813.practice.manager.fight.match.enums.RoundStatus; -import dev.nandi0813.practice.module.util.ClassImport; import dev.nandi0813.practice.util.PermanentConfig; import io.papermc.paper.event.player.PlayerItemCooldownEvent; import org.bukkit.Material; @@ -76,7 +75,7 @@ public void onProjectileShoot(ProjectileLaunchEvent e) { return; } - ClassImport.getClasses().getItemCooldownHandler().handleEnderPearlFFA( + dev.nandi0813.practice.moved.ModernItemCooldownHandler.handleEnderPearlFFA( player, ffa.getFightPlayers().get(player), duration, @@ -99,7 +98,7 @@ public void onProjectileShoot(ProjectileLaunchEvent e) { return; } - ClassImport.getClasses().getItemCooldownHandler().handleEnderPearlMatch( + dev.nandi0813.practice.moved.ModernItemCooldownHandler.handleEnderPearlMatch( player, match.getMatchPlayers().get(player), duration, diff --git a/core/src/main/java/dev/nandi0813/practice/module/interfaces/EntityHider.java b/core/src/main/java/dev/nandi0813/practice/moved/EntityHider.java similarity index 92% rename from core/src/main/java/dev/nandi0813/practice/module/interfaces/EntityHider.java rename to core/src/main/java/dev/nandi0813/practice/moved/EntityHider.java index 0094a8da..7d6b0756 100644 --- a/core/src/main/java/dev/nandi0813/practice/module/interfaces/EntityHider.java +++ b/core/src/main/java/dev/nandi0813/practice/moved/EntityHider.java @@ -1,4 +1,4 @@ -package dev.nandi0813.practice.module.interfaces; +package dev.nandi0813.practice.moved; import com.github.retrooper.packetevents.PacketEvents; import com.github.retrooper.packetevents.event.PacketListener; @@ -21,7 +21,7 @@ import java.util.Map; -public abstract class EntityHider implements Listener { +public class EntityHider implements Listener { protected Table observerEntityMap = HashBasedTable.create(); @@ -197,7 +197,14 @@ public void onPacketSend(@NonNull PacketSendEvent event) { * @param observer - the observer. * @param entity - the entity to show. */ - public abstract void showEntity(Player observer, Entity entity); + public void showEntity(Player observer, Entity entity) { + validate(observer, entity); + boolean hiddenBefore = !setVisibility(observer, entity.getEntityId(), true); + + // Resend packets + if (hiddenBefore) + observer.showEntity(plugin, entity); + } /** * Prevent the observer from seeing a given entity. @@ -205,7 +212,13 @@ public void onPacketSend(@NonNull PacketSendEvent event) { * @param observer - the player observer. * @param entity - the entity to hide. */ - public abstract void hideEntity(Player observer, Entity entity); + public void hideEntity(Player observer, Entity entity) { + validate(observer, entity); + boolean visibleBefore = setVisibility(observer, entity.getEntityId(), false); + + if (visibleBefore) + observer.hideEntity(plugin, entity); + } /** * Determine if the given entity has been hidden from an observer. diff --git a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/ArenaCopy/FaweUtil.java b/core/src/main/java/dev/nandi0813/practice/moved/FaweUtil.java similarity index 97% rename from spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/ArenaCopy/FaweUtil.java rename to core/src/main/java/dev/nandi0813/practice/moved/FaweUtil.java index 4e0ab77f..501a36c7 100644 --- a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/ArenaCopy/FaweUtil.java +++ b/core/src/main/java/dev/nandi0813/practice/moved/FaweUtil.java @@ -1,4 +1,4 @@ -package dev.nandi0813.practice_modern.interfaces.ArenaCopy; +package dev.nandi0813.practice.moved; import com.sk89q.worldedit.EditSession; import com.sk89q.worldedit.WorldEdit; diff --git a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/listener/FightUtil.java b/core/src/main/java/dev/nandi0813/practice/moved/FightUtil.java similarity index 97% rename from spigot_modern/src/main/java/dev/nandi0813/practice_modern/listener/FightUtil.java rename to core/src/main/java/dev/nandi0813/practice/moved/FightUtil.java index b80c7d56..ebe0417b 100644 --- a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/listener/FightUtil.java +++ b/core/src/main/java/dev/nandi0813/practice/moved/FightUtil.java @@ -1,4 +1,4 @@ -package dev.nandi0813.practice_modern.listener; +package dev.nandi0813.practice.moved; import dev.nandi0813.practice.manager.fight.util.DeathCause; import org.bukkit.damage.DamageType; diff --git a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/listener/FireworkRocketCooldownListener.java b/core/src/main/java/dev/nandi0813/practice/moved/FireworkRocketCooldownListener.java similarity index 88% rename from spigot_modern/src/main/java/dev/nandi0813/practice_modern/listener/FireworkRocketCooldownListener.java rename to core/src/main/java/dev/nandi0813/practice/moved/FireworkRocketCooldownListener.java index 395faa60..b5ffa6e8 100644 --- a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/listener/FireworkRocketCooldownListener.java +++ b/core/src/main/java/dev/nandi0813/practice/moved/FireworkRocketCooldownListener.java @@ -1,11 +1,10 @@ -package dev.nandi0813.practice_modern.listener; +package dev.nandi0813.practice.moved; import dev.nandi0813.practice.manager.fight.ffa.FFAManager; import dev.nandi0813.practice.manager.fight.ffa.game.FFA; import dev.nandi0813.practice.manager.fight.match.Match; import dev.nandi0813.practice.manager.fight.match.MatchManager; import dev.nandi0813.practice.manager.fight.match.enums.RoundStatus; -import dev.nandi0813.practice.module.util.ClassImport; import org.bukkit.entity.Firework; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -33,7 +32,7 @@ public void onFireworkSpawn(EntitySpawnEvent e) { int duration = ffa.getPlayers().get(player).getFireworkRocketCooldown(); if (duration <= 0) return; - ClassImport.getClasses().getItemCooldownHandler().handleFireworkRocketFFA( + dev.nandi0813.practice.moved.ModernItemCooldownHandler.handleFireworkRocketFFA( player, ffa.getFightPlayers().get(player), duration, @@ -54,7 +53,7 @@ public void onFireworkSpawn(EntitySpawnEvent e) { return; } - ClassImport.getClasses().getItemCooldownHandler().handleFireworkRocketMatch( + dev.nandi0813.practice.moved.ModernItemCooldownHandler.handleFireworkRocketMatch( player, match.getMatchPlayers().get(player), duration, diff --git a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/ItemCreateUtil.java b/core/src/main/java/dev/nandi0813/practice/moved/ItemCreateUtil.java similarity index 53% rename from spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/ItemCreateUtil.java rename to core/src/main/java/dev/nandi0813/practice/moved/ItemCreateUtil.java index 967f01bd..68ef2706 100644 --- a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/ItemCreateUtil.java +++ b/core/src/main/java/dev/nandi0813/practice/moved/ItemCreateUtil.java @@ -1,17 +1,21 @@ -package dev.nandi0813.practice_modern.interfaces; +package dev.nandi0813.practice.moved; import dev.nandi0813.practice.util.StringUtil; +import org.bukkit.Color; import org.bukkit.Material; +import org.bukkit.OfflinePlayer; +import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.Damageable; import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.LeatherArmorMeta; +import org.bukkit.inventory.meta.SkullMeta; import java.util.List; -public class ItemCreateUtil extends dev.nandi0813.practice.module.interfaces.ItemCreateUtil { +public class ItemCreateUtil { - @Override - public ItemStack createItem(String displayname, Material material, Short damage, int amount, List lore) { + public static ItemStack createItem(String displayname, Material material, Short damage, int amount, List lore) { ItemStack itemStack = new ItemStack(material, amount); ItemMeta itemMeta = itemStack.getItemMeta(); @@ -28,8 +32,7 @@ public ItemStack createItem(String displayname, Material material, Short damage, return itemStack; } - @Override - public ItemStack createItem(String displayname, Material material) { + public static ItemStack createItem(String displayname, Material material) { ItemStack itemStack = new ItemStack(material); ItemMeta itemMeta = itemStack.getItemMeta(); @@ -42,8 +45,7 @@ public ItemStack createItem(String displayname, Material material) { return itemStack; } - @Override - public ItemStack createItem(Material material, Short damage) { + public static ItemStack createItem(Material material, Short damage) { ItemStack itemStack = new ItemStack(material); ItemMeta itemMeta = itemStack.getItemMeta(); @@ -57,8 +59,7 @@ public ItemStack createItem(Material material, Short damage) { return itemStack; } - @Override - public ItemStack createItem(String displayname, Material material, Short damage) { + public static ItemStack createItem(String displayname, Material material, Short damage) { ItemStack itemStack = new ItemStack(material); ItemMeta itemMeta = itemStack.getItemMeta(); @@ -74,8 +75,7 @@ public ItemStack createItem(String displayname, Material material, Short damage) return itemStack; } - @Override - public ItemStack createItem(String displayname, Material material, List lore) { + public static ItemStack createItem(String displayname, Material material, List lore) { ItemStack itemStack = new ItemStack(material); ItemMeta itemMeta = itemStack.getItemMeta(); @@ -89,8 +89,7 @@ public ItemStack createItem(String displayname, Material material, List return itemStack; } - @Override - public ItemStack createItem(String displayname, Material material, Short damage, List lore) { + public static ItemStack createItem(String displayname, Material material, Short damage, List lore) { ItemStack itemStack = new ItemStack(material); ItemMeta itemMeta = itemStack.getItemMeta(); @@ -107,8 +106,7 @@ public ItemStack createItem(String displayname, Material material, Short damage, return itemStack; } - @Override - public ItemStack createItem(ItemStack item, List lore) { + public static ItemStack createItem(ItemStack item, List lore) { ItemStack itemStack = new ItemStack(item); ItemMeta itemMeta = itemStack.getItemMeta(); @@ -121,8 +119,7 @@ public ItemStack createItem(ItemStack item, List lore) { return itemStack; } - @Override - public ItemStack createItem(ItemStack item, String name, List lore) { + public static ItemStack createItem(ItemStack item, String name, List lore) { ItemStack itemStack = new ItemStack(item); ItemMeta itemMeta = itemStack.getItemMeta(); @@ -136,4 +133,58 @@ public ItemStack createItem(ItemStack item, String name, List lore) { return itemStack; } -} + public static void hideItemFlags(ItemMeta itemMeta) { + itemMeta.addItemFlags(ItemFlag.HIDE_ENCHANTS); + itemMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); + itemMeta.addItemFlags(ItemFlag.HIDE_DESTROYS); + itemMeta.addItemFlags(ItemFlag.HIDE_UNBREAKABLE); + itemMeta.addItemFlags(ItemFlag.HIDE_PLACED_ON); + } + + public static ItemStack hideItemFlags(ItemStack item) { + ItemMeta itemMeta = item.getItemMeta(); + hideItemFlags(itemMeta); + item.setItemMeta(itemMeta); + return item; + } + + public static short getDurabilityByColor(char c) { + return switch (c) { + case '0' -> Short.parseShort("15"); + case '1', '9' -> Short.parseShort("11"); + case '2' -> Short.parseShort("13"); + case '3' -> Short.parseShort("9"); + case '4', 'c' -> Short.parseShort("14"); + case '5' -> Short.parseShort("10"); + case '6' -> Short.parseShort("35"); + case '7' -> Short.parseShort("8"); + case '8' -> Short.parseShort("7"); + case 'a' -> Short.parseShort("5"); + case 'b' -> Short.parseShort("3"); + case 'd' -> Short.parseShort("6"); + case 'e' -> Short.parseShort("4"); + default -> 0; + }; + } + + public static ItemStack getPlayerHead(OfflinePlayer player) { + ItemStack item = new ItemStack(Material.PLAYER_HEAD); + SkullMeta meta = (SkullMeta) item.getItemMeta(); + if (meta != null) + meta.setOwningPlayer(player); + item.setItemMeta(meta); + + return item; + } + + public static ItemStack getRedBoots() { + ItemStack boots = new ItemStack(Material.LEATHER_BOOTS); + LeatherArmorMeta meta = (LeatherArmorMeta) boots.getItemMeta(); + if (meta != null) { + meta.setColor(Color.RED); + boots.setItemMeta(meta); + } + return boots; + } + +} \ No newline at end of file diff --git a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/modern_version/ItemOffHand.java b/core/src/main/java/dev/nandi0813/practice/moved/ItemOffHandListener.java similarity index 87% rename from spigot_modern/src/main/java/dev/nandi0813/practice_modern/modern_version/ItemOffHand.java rename to core/src/main/java/dev/nandi0813/practice/moved/ItemOffHandListener.java index 49d27981..6676cbcb 100644 --- a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/modern_version/ItemOffHand.java +++ b/core/src/main/java/dev/nandi0813/practice/moved/ItemOffHandListener.java @@ -1,4 +1,4 @@ -package dev.nandi0813.practice_modern.modern_version; +package dev.nandi0813.practice.moved; import dev.nandi0813.practice.manager.profile.Profile; import dev.nandi0813.practice.manager.profile.ProfileManager; @@ -7,7 +7,7 @@ import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerSwapHandItemsEvent; -public class ItemOffHand implements Listener { +public class ItemOffHandListener implements Listener { @EventHandler public void onItemSwitchHand(PlayerSwapHandItemsEvent e) { diff --git a/core/src/main/java/dev/nandi0813/practice/module/interfaces/KitData.java b/core/src/main/java/dev/nandi0813/practice/moved/KitData.java similarity index 81% rename from core/src/main/java/dev/nandi0813/practice/module/interfaces/KitData.java rename to core/src/main/java/dev/nandi0813/practice/moved/KitData.java index 6f49eeae..1d5e56aa 100644 --- a/core/src/main/java/dev/nandi0813/practice/module/interfaces/KitData.java +++ b/core/src/main/java/dev/nandi0813/practice/moved/KitData.java @@ -1,4 +1,4 @@ -package dev.nandi0813.practice.module.interfaces; +package dev.nandi0813.practice.moved; import dev.nandi0813.practice.util.ItemSerializationUtil; import lombok.Getter; @@ -12,7 +12,7 @@ import java.util.List; @Getter -public abstract class KitData { +public class KitData { protected ItemStack[] storage; protected ItemStack[] armor; @@ -104,28 +104,40 @@ public void loadKitData(final Player player, final boolean clearActiveEffects) { player.updateInventory(); } - public void setStorage(ItemStack[] storage) { - this.storage = storage; + public void setStorage(Player player) { + this.storage = player.getInventory().getStorageContents().clone(); } - public void setArmor(ItemStack[] armor) { - this.armor = armor; + public void setArmor(Player player) { + this.armor = player.getInventory().getArmorContents().clone(); } - public void setExtra(ItemStack[] extra) { - this.extra = extra; + public void setExtra(Player player) { + this.extra = player.getInventory().getExtraContents().clone(); } - public abstract void setStorage(Player player); + public void setStorage(ItemStack[] storage) { + this.storage = storage.clone(); + } - public abstract void setArmor(Player player); + public void setArmor(ItemStack[] armor) { + this.armor = armor.clone(); + } - public abstract void setExtra(Player player); + public void setExtra(ItemStack[] extra) { + this.extra = extra.clone(); + } - public abstract void loadStorage(Player player); + public void loadStorage(Player player) { + player.getInventory().setContents(this.storage.clone()); + } - public abstract void loadArmor(Player player); + public void loadArmor(Player player) { + player.getInventory().setArmorContents(this.armor.clone()); + } - public abstract void loadExtra(Player player); + public void loadExtra(Player player) { + player.getInventory().setExtraContents(this.extra.clone()); + } } diff --git a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/LadderUtil.java b/core/src/main/java/dev/nandi0813/practice/moved/LadderUtil.java similarity index 87% rename from spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/LadderUtil.java rename to core/src/main/java/dev/nandi0813/practice/moved/LadderUtil.java index db38b26e..0e890e0f 100644 --- a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/LadderUtil.java +++ b/core/src/main/java/dev/nandi0813/practice/moved/LadderUtil.java @@ -1,4 +1,4 @@ -package dev.nandi0813.practice_modern.interfaces; +package dev.nandi0813.practice.moved; import dev.nandi0813.practice.ZonePractice; import dev.nandi0813.practice.manager.fight.match.Match; @@ -27,10 +27,9 @@ import static dev.nandi0813.practice.util.PermanentConfig.FIGHT_ENTITY; -public class LadderUtil implements dev.nandi0813.practice.module.interfaces.LadderUtil { +public class LadderUtil { - @Override - public void loadInventory(Player player, ItemStack[] armor, ItemStack[] inventory, ItemStack[] extra) { + public static void loadInventory(Player player, ItemStack[] armor, ItemStack[] inventory, ItemStack[] extra) { player.getInventory().setArmorContents(armor); player.getInventory().setStorageContents(inventory); player.getInventory().setExtraContents(extra); @@ -41,7 +40,7 @@ public void loadInventory(Player player, ItemStack[] armor, ItemStack[] inventor "_CONCRETE", "_CONCRETE_POWDER", "_TERRACOTTA", "_GLAZED_TERRACOTTA", "_CANDLE", "_BANNER" }; - public ItemStack changeItemColor(@NotNull ItemStack item, Component teamColor) { + public static ItemStack changeItemColor(@NotNull ItemStack item, Component teamColor) { String itemType = item.getType().toString(); TextColor textColor = teamColor.color(); Color color = Color.YELLOW; @@ -79,8 +78,7 @@ public ItemStack changeItemColor(@NotNull ItemStack item, Component teamColor) { return item; } - @Override - public ItemStack getPotionItem(String string) { + public static ItemStack getPotionItem(String string) { try { if (string.contains("::")) { String[] split = string.split("::"); @@ -99,24 +97,21 @@ public ItemStack getPotionItem(String string) { return null; } - @Override - public boolean isUnbreakable(ItemStack item) { + public static boolean isUnbreakable(ItemStack item) { if (item.hasItemMeta() && item.getItemMeta() != null) { return item.getItemMeta().isUnbreakable(); } return false; } - @Override - public ItemMeta setUnbreakable(ItemMeta itemMeta, boolean unbreakable) { + public static ItemMeta setUnbreakable(ItemMeta itemMeta, boolean unbreakable) { if (itemMeta != null) { itemMeta.setUnbreakable(unbreakable); } return itemMeta; } - @Override - public ItemStack setDurability(ItemStack itemStack, int durability) { + public static ItemStack setDurability(ItemStack itemStack, int durability) { if (itemStack.getItemMeta() != null) { ItemMeta itemMeta = itemStack.getItemMeta(); if (itemMeta instanceof Damageable damageable) { @@ -133,8 +128,7 @@ public ItemStack setDurability(ItemStack itemStack, int durability) { return itemStack; } - @Override - public void placeTnt(BlockPlaceEvent e, Match match) { + public static void placeTnt(BlockPlaceEvent e, Match match) { Bukkit.getScheduler().runTaskLater(ZonePractice.getInstance(), () -> { if (e.isCancelled()) { return; diff --git a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/ModernItemCooldownHandler.java b/core/src/main/java/dev/nandi0813/practice/moved/ModernItemCooldownHandler.java similarity index 80% rename from spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/ModernItemCooldownHandler.java rename to core/src/main/java/dev/nandi0813/practice/moved/ModernItemCooldownHandler.java index 4d34ecda..4d2eff25 100644 --- a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/ModernItemCooldownHandler.java +++ b/core/src/main/java/dev/nandi0813/practice/moved/ModernItemCooldownHandler.java @@ -1,8 +1,7 @@ -package dev.nandi0813.practice_modern.interfaces; +package dev.nandi0813.practice.moved; import dev.nandi0813.practice.ZonePractice; import dev.nandi0813.practice.manager.fight.util.FightPlayer; -import dev.nandi0813.practice.module.interfaces.ItemCooldownHandler; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -22,14 +21,13 @@ *

    Golden Apple / Firework Rocket / Fireball: no vanilla cooldown is applied by the * server, so we call {@code setCooldown} here directly when the action is first performed. */ -public class ModernItemCooldownHandler implements ItemCooldownHandler { +public class ModernItemCooldownHandler { // ------------------------------------------------------------------------- // Ender Pearl — duration controlled by PlayerItemCooldownEvent in EPCountdownListener // ------------------------------------------------------------------------- - @Override - public void handleEnderPearlFFA(Player player, FightPlayer fightPlayer, int duration, boolean expBar, + public static void handleEnderPearlFFA(Player player, FightPlayer fightPlayer, int duration, boolean expBar, Cancellable event, String langKey) { if (player.hasCooldown(Material.ENDER_PEARL)) { if (event != null) { @@ -39,8 +37,7 @@ public void handleEnderPearlFFA(Player player, FightPlayer fightPlayer, int dura // If no cooldown: let the throw proceed; PlayerItemCooldownEvent will set the correct duration. } - @Override - public void handleEnderPearlMatch(Player player, FightPlayer fightPlayer, int duration, boolean expBar, + public static void handleEnderPearlMatch(Player player, FightPlayer fightPlayer, int duration, boolean expBar, Cancellable event, String langKey) { if (player.hasCooldown(Material.ENDER_PEARL)) { if (event != null) { @@ -54,8 +51,7 @@ public void handleEnderPearlMatch(Player player, FightPlayer fightPlayer, int du // Golden Apple // ------------------------------------------------------------------------- - @Override - public void handleGoldenAppleFFA(Player player, int duration, Cancellable event, String langKey) { + public static void handleGoldenAppleFFA(Player player, int duration, Cancellable event, String langKey) { if (player.hasCooldown(Material.GOLDEN_APPLE)) { if (event != null) { event.setCancelled(true); @@ -65,8 +61,7 @@ public void handleGoldenAppleFFA(Player player, int duration, Cancellable event, } } - @Override - public void handleGoldenAppleMatch(Player player, int duration, Cancellable event, String langKey) { + public static void handleGoldenAppleMatch(Player player, int duration, Cancellable event, String langKey) { if (player.hasCooldown(Material.GOLDEN_APPLE)) { if (event != null) { event.setCancelled(true); @@ -80,8 +75,7 @@ public void handleGoldenAppleMatch(Player player, int duration, Cancellable even // Firework Rocket // ------------------------------------------------------------------------- - @Override - public void handleFireworkRocketFFA(Player player, FightPlayer fightPlayer, int duration, + public static void handleFireworkRocketFFA(Player player, FightPlayer fightPlayer, int duration, Cancellable event, String langKey) { Bukkit.getScheduler().runTaskLater(ZonePractice.getInstance(), () -> { if (player.hasCooldown(Material.FIREWORK_ROCKET)) { @@ -94,8 +88,7 @@ public void handleFireworkRocketFFA(Player player, FightPlayer fightPlayer, int }, 2L); } - @Override - public void handleFireworkRocketMatch(Player player, FightPlayer fightPlayer, int duration, + public static void handleFireworkRocketMatch(Player player, FightPlayer fightPlayer, int duration, Cancellable event, String langKey) { Bukkit.getScheduler().runTaskLater(ZonePractice.getInstance(), () -> { if (player.hasCooldown(Material.FIREWORK_ROCKET)) { @@ -112,8 +105,7 @@ public void handleFireworkRocketMatch(Player player, FightPlayer fightPlayer, in // Fireball // ------------------------------------------------------------------------- - @Override - public boolean handleFireballMatch(Player player, double duration, String langKey) { + public static boolean handleFireballMatch(Player player, double duration, String langKey) { if (player.hasCooldown(Material.FIRE_CHARGE)) { return false; } else { diff --git a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/listener/PlayerChatListener.java b/core/src/main/java/dev/nandi0813/practice/moved/PlayerChatListener.java similarity index 98% rename from spigot_modern/src/main/java/dev/nandi0813/practice_modern/listener/PlayerChatListener.java rename to core/src/main/java/dev/nandi0813/practice/moved/PlayerChatListener.java index 7763c78e..17cb0962 100644 --- a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/listener/PlayerChatListener.java +++ b/core/src/main/java/dev/nandi0813/practice/moved/PlayerChatListener.java @@ -1,4 +1,4 @@ -package dev.nandi0813.practice_modern.listener; +package dev.nandi0813.practice.moved; import dev.nandi0813.practice.ZonePractice; import dev.nandi0813.practice.manager.backend.ConfigManager; diff --git a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/PlayerUtil.java b/core/src/main/java/dev/nandi0813/practice/moved/PlayerUtil.java similarity index 80% rename from spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/PlayerUtil.java rename to core/src/main/java/dev/nandi0813/practice/moved/PlayerUtil.java index 3e3f7c6a..212a0bbb 100644 --- a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/PlayerUtil.java +++ b/core/src/main/java/dev/nandi0813/practice/moved/PlayerUtil.java @@ -1,6 +1,7 @@ -package dev.nandi0813.practice_modern.interfaces; +package dev.nandi0813.practice.moved; import dev.nandi0813.practice.ZonePractice; +import dev.nandi0813.practice.manager.backend.ConfigManager; import dev.nandi0813.practice.util.StringUtil; import net.kyori.adventure.text.Component; import org.bukkit.Bukkit; @@ -16,23 +17,25 @@ import java.util.ArrayList; import java.util.List; -public class PlayerUtil implements dev.nandi0813.practice.module.interfaces.PlayerUtil { +public class PlayerUtil { - @Override - public ItemStack getPlayerMainHand(Player player) { + private static final double TNT_VELOCITY_HORIZONTAL_MULTIPLICATIVE = ConfigManager.getDouble("MATCH-SETTINGS.FIREBALL-FIGHT.EXPLOSION.TNT.HORIZONTAL"); + private static final double TNT_VELOCITY_VERTICAL_MULTIPLICATIVE = ConfigManager.getDouble("MATCH-SETTINGS.FIREBALL-FIGHT.EXPLOSION.TNT.VERTICAL"); + private static final double FB_VELOCITY_HORIZONTAL_MULTIPLICATIVE = ConfigManager.getDouble("MATCH-SETTINGS.FIREBALL-FIGHT.EXPLOSION.FIREBALL.HORIZONTAL"); + private static final double FB_VELOCITY_VERTICAL_MULTIPLICATIVE = ConfigManager.getDouble("MATCH-SETTINGS.FIREBALL-FIGHT.EXPLOSION.FIREBALL.VERTICAL"); + + public static ItemStack getPlayerMainHand(Player player) { return player.getInventory().getItemInMainHand(); } - @Override - public boolean isItemInUse(Player player, Material material) { + public static boolean isItemInUse(Player player, Material material) { ItemStack itemInMainHand = player.getInventory().getItemInMainHand(); ItemStack itemInOffHand = player.getInventory().getItemInOffHand(); return itemInMainHand.getType().equals(material) || itemInOffHand.getType().equals(material); } - @Override - public ItemStack getItemInUse(Player player, Material material) { + public static ItemStack getItemInUse(Player player, Material material) { ItemStack itemInMainHand = player.getInventory().getItemInMainHand(); ItemStack itemInOffHand = player.getInventory().getItemInOffHand(); @@ -41,8 +44,7 @@ public ItemStack getItemInUse(Player player, Material material) { return null; } - @Override - public void setItemInUseIf(Player player, Material material, ItemStack itemStack) { + public static void setItemInUseIf(Player player, Material material, ItemStack itemStack) { if (player.getInventory().getItemInMainHand().getType().equals(material)) { player.getInventory().setItemInMainHand(itemStack); } @@ -51,8 +53,7 @@ public void setItemInUseIf(Player player, Material material, ItemStack itemStack } } - @Override - public List dropPlayerInventory(Player player) { + public static List dropPlayerInventory(Player player) { List entities = new ArrayList<>(); for (ItemStack item : player.getInventory().getContents()) { @@ -72,12 +73,12 @@ public List dropPlayerInventory(Player player) { if (cursor != null && !cursor.getType().equals(Material.AIR)) entities.add(player.getWorld().dropItemNaturally(player.getLocation(), cursor)); - this.clearInventory(player); + clearInventory(player); return entities; } - public void clearInventory(Player player) { + public static void clearInventory(Player player) { player.getInventory().clear(); // Clear the 2x2 crafting grid slots (indices 1-4 of the player's open inventory) for (int i = 1; i <= 4; i++) @@ -86,44 +87,37 @@ public void clearInventory(Player player) { player.setItemOnCursor(null); } - public void setCollidesWithEntities(Player player, boolean bool) { + public static void setCollidesWithEntities(Player player, boolean bool) { player.setCollidable(bool); } - @Override - public int getPing(Player player) { + public static int getPing(Player player) { return player.getPing(); } - @Override - public ItemStack[] getInventoryStorageContent(Player player) { + public static ItemStack[] getInventoryStorageContent(Player player) { return player.getInventory().getStorageContents(); } - @Override - public double getPlayerHealth(Player player) { + public static double getPlayerHealth(Player player) { return player.getHealth() + player.getAbsorptionAmount(); } - @Override - public void setActiveInventoryTitle(Player player, String title) { + public static void setActiveInventoryTitle(Player player, String title) { player.getOpenInventory().setTitle(StringUtil.CC(title)); } - @Override - public void setPlayerListName(Player player, Component component) { + public static void setPlayerListName(Player player, Component component) { player.playerListName(component); } - @Override - public Fireball shootFireball(Player player, double speed) { + public static Fireball shootFireball(Player player, double speed) { final Fireball fireball = player.launchProjectile(Fireball.class); fireball.setAcceleration(fireball.getAcceleration().normalize().multiply(speed)); return fireball; } - @Override - public void applyFireballKnockback(final Player player, final Fireball fireball) { + public static void applyFireballKnockback(final Player player, final Fireball fireball) { final Location playerLoc = player.getLocation(); final Location fireballLoc = fireball.getLocation(); @@ -188,8 +182,7 @@ public void applyFireballKnockback(final Player player, final Fireball fireball) }, 1L); } - @Override - public void applyTntKnockback(Player player, TNTPrimed tnt) { + public static void applyTntKnockback(Player player, TNTPrimed tnt) { final Location playerLoc = player.getLocation(); final Location tntLoc = tnt.getLocation(); final float yield = tnt.getYield(); @@ -221,8 +214,7 @@ public void applyTntKnockback(Player player, TNTPrimed tnt) { }, 1L); } - @Override - public void setAttackSpeed(Player player, int hitDelay) { + public static void setAttackSpeed(Player player, int hitDelay) { // ...existing code... org.bukkit.attribute.AttributeInstance attackSpeed = player.getAttribute(org.bukkit.attribute.Attribute.ATTACK_SPEED); diff --git a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/StatisticListener.java b/core/src/main/java/dev/nandi0813/practice/moved/StatisticListener.java similarity index 71% rename from spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/StatisticListener.java rename to core/src/main/java/dev/nandi0813/practice/moved/StatisticListener.java index 87333f6d..7231d546 100644 --- a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/StatisticListener.java +++ b/core/src/main/java/dev/nandi0813/practice/moved/StatisticListener.java @@ -1,4 +1,4 @@ -package dev.nandi0813.practice_modern.interfaces; +package dev.nandi0813.practice.moved; import dev.nandi0813.practice.ZonePractice; import dev.nandi0813.practice.manager.backend.ConfigManager; @@ -12,7 +12,8 @@ import dev.nandi0813.practice.manager.profile.Profile; import dev.nandi0813.practice.manager.profile.ProfileManager; import dev.nandi0813.practice.manager.profile.enums.ProfileStatus; -import dev.nandi0813.practice.module.util.ClassImport; +import dev.nandi0813.practice.manager.sidebar.SidebarManager; +import lombok.Getter; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -28,13 +29,26 @@ import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; import org.bukkit.scheduler.BukkitRunnable; +import org.jetbrains.annotations.NotNull; -public class StatisticListener extends dev.nandi0813.practice.module.interfaces.StatisticListener implements Listener { +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +public class StatisticListener implements Listener { private boolean CUSTOM_COOLDOWN_ENABLED; private boolean ONLY_SWORD; private double CUSTOM_COOLDOWN_VALUE; + @Getter + protected final ZonePractice practice = ZonePractice.getInstance(); + @Getter + protected static final Map CURRENT_CPS = new ConcurrentHashMap<>(); + @Getter + protected static final Map CPS = new ConcurrentHashMap<>(); + @Getter + protected static final Map CURRENT_COMBO = new ConcurrentHashMap<>(); + public StatisticListener() { Bukkit.getScheduler().runTaskLater(ZonePractice.getInstance(), () -> { CUSTOM_COOLDOWN_ENABLED = ConfigManager.getBoolean("MATCH-SETTINGS.BOXING.CUSTOM-ATTACK-COOLDOWN.ENABLED"); @@ -52,7 +66,7 @@ public void onClick(PlayerInteractEvent e) { Player player = e.getPlayer(); Profile profile = ProfileManager.getInstance().getProfile(player); - if (ClassImport.getClasses().getPlayerUtil().getItemInUse(player, Material.FISHING_ROD) != null) { + if (dev.nandi0813.practice.moved.PlayerUtil.getItemInUse(player, Material.FISHING_ROD) != null) { return; } @@ -87,6 +101,53 @@ public void onClick(PlayerInteractEvent e) { task.runTaskLaterAsynchronously(ZonePractice.getInstance(), 20L); } + protected static @NotNull BukkitRunnable cpsRunnable(final Statistic statistic, Player player) { + return new BukkitRunnable() { + @Override + public void run() { + // Remove atomically — avoids the TOCTOU race between containsKey and get + // that can return null and cause an NPE when unboxing to int. + Integer current = CURRENT_CPS.remove(player); + if (current != null && current > 2) { + statistic.getCps().put(System.currentTimeMillis(), current); + CPS.put(player, current); + } + } + }; + } + + protected static @NotNull BukkitRunnable hitRunnable(final Player attacker, final Statistic attackerStats, final Player defender, final Statistic defenderStats) { + return new BukkitRunnable() { + @Override + public void run() { + if (attackerStats != null) { + attackerStats.setHit(attackerStats.getHit() + 1); + + CURRENT_COMBO.putIfAbsent(attacker, 1); + CURRENT_COMBO.computeIfPresent(attacker, (key, val) -> val + 1); + } + + if (defenderStats != null) { + defenderStats.setGetHit(defenderStats.getGetHit() + 1); + + if (CURRENT_COMBO.containsKey(defender) && defenderStats.getLongestCombo() < CURRENT_COMBO.get(defender)) { + defenderStats.setLongestCombo(CURRENT_COMBO.get(defender)); + } + CURRENT_COMBO.put(defender, 0); + } + + // Immediately update scoreboards for real-time hit counter display + // Schedule on main thread since scoreboard updates must be on main thread + if (attacker != null && defender != null) { + ZonePractice.getInstance().getServer().getScheduler().runTask( + ZonePractice.getInstance(), + () -> SidebarManager.getInstance().updatePlayersSidebar(attacker, defender) + ); + } + } + }; + } + @EventHandler ( priority = EventPriority.LOWEST ) public void onPlayerHit(EntityDamageByEntityEvent e) { if (e.isCancelled()) return; diff --git a/core/src/main/java/dev/nandi0813/practice/module/util/VersionChecker.java b/core/src/main/java/dev/nandi0813/practice/moved/VersionChecker.java similarity index 72% rename from core/src/main/java/dev/nandi0813/practice/module/util/VersionChecker.java rename to core/src/main/java/dev/nandi0813/practice/moved/VersionChecker.java index f35fe939..0f942be7 100644 --- a/core/src/main/java/dev/nandi0813/practice/module/util/VersionChecker.java +++ b/core/src/main/java/dev/nandi0813/practice/moved/VersionChecker.java @@ -1,4 +1,4 @@ -package dev.nandi0813.practice.module.util; +package dev.nandi0813.practice.moved; import lombok.Getter; import org.bukkit.Bukkit; @@ -35,9 +35,7 @@ public static BukkitVersion getBukkitVersion() { return null; } - if (mcVersion.startsWith("1.8")) - bukkitVersion = BukkitVersion.v1_8_R3; - else if (mcVersion.equals("1.20.6")) + if (mcVersion.equals("1.20.6")) bukkitVersion = BukkitVersion.v1_20_R4; else if (mcVersion.startsWith("1.21")) bukkitVersion = BukkitVersion.v1_21_R3; @@ -61,19 +59,8 @@ private static String extractMcVersion(final String bukkitVersionString) { @Getter public enum BukkitVersion { - v1_8_R3("1_8_8", "1.8.8/", false), // 1.8.8 - v1_20_R4("modern", "modern/", true), // 1.20.6 - v1_21_R3("modern", "modern/", true); // 1.21.4 - - private final String moduleVersionExtension; - private final String filePath; - private final boolean secondHand; - - BukkitVersion(final String moduleVersionExtension, final String filePath, final boolean secondHand) { - this.moduleVersionExtension = moduleVersionExtension; - this.filePath = filePath; - this.secondHand = secondHand; - } + v1_20_R4, // 1.20.6 + v1_21_R3; // 1.21.X } } diff --git a/core/src/main/java/dev/nandi0813/practice/module/VersionNotSupportedException.java b/core/src/main/java/dev/nandi0813/practice/moved/VersionNotSupportedException.java similarity index 90% rename from core/src/main/java/dev/nandi0813/practice/module/VersionNotSupportedException.java rename to core/src/main/java/dev/nandi0813/practice/moved/VersionNotSupportedException.java index b0180042..5c1b9833 100644 --- a/core/src/main/java/dev/nandi0813/practice/module/VersionNotSupportedException.java +++ b/core/src/main/java/dev/nandi0813/practice/moved/VersionNotSupportedException.java @@ -1,4 +1,4 @@ -package dev.nandi0813.practice.module; +package dev.nandi0813.practice.moved; import dev.nandi0813.practice.ZonePractice; import org.bukkit.Bukkit; diff --git a/core/src/main/java/dev/nandi0813/practice/util/Cuboid.java b/core/src/main/java/dev/nandi0813/practice/util/Cuboid.java index 08a67eb9..7b42857d 100644 --- a/core/src/main/java/dev/nandi0813/practice/util/Cuboid.java +++ b/core/src/main/java/dev/nandi0813/practice/util/Cuboid.java @@ -402,96 +402,6 @@ public byte getAverageLightLevel() { return n > 0 ? (byte) (total / n) : 0; } - /** - * Contract the Cuboid, returning a Cuboid with any air around the edges removed, just large enough to include all non-air blocks. - * - * @return A new Cuboid with no external air blocks - */ - public Cuboid contract() { - return this.contract(CuboidDirection.Down).contract(CuboidDirection.South).contract(CuboidDirection.East).contract(CuboidDirection.Up).contract(CuboidDirection.North).contract(CuboidDirection.West); - } - - /** - * Contract the Cuboid in the given direction, returning a new Cuboid which has no exterior empty space. - * E.g. A direction of Down will push the top face downwards as much as possible. - * - * @param dir - The direction in which to contract - * @return A new Cuboid contracted in the given direction - */ - public Cuboid contract(CuboidDirection dir) { - Cuboid face = getFace(dir.opposite()); - return switch (dir) { - case Down -> { - while (face.containsOnly(0) && face.getLowerY() > this.getLowerY()) { - face = face.shift(CuboidDirection.Down, 1); - } - yield new Cuboid(this.worldName, this.x1, this.y1, this.z1, this.x2, face.getUpperY(), this.z2); - } - case Up -> { - while (face.containsOnly(0) && face.getUpperY() < this.getUpperY()) { - face = face.shift(CuboidDirection.Up, 1); - } - yield new Cuboid(this.worldName, this.x1, face.getLowerY(), this.z1, this.x2, this.y2, this.z2); - } - case North -> { - while (face.containsOnly(0) && face.getLowerX() > this.getLowerX()) { - face = face.shift(CuboidDirection.North, 1); - } - yield new Cuboid(this.worldName, this.x1, this.y1, this.z1, face.getUpperX(), this.y2, this.z2); - } - case South -> { - while (face.containsOnly(0) && face.getUpperX() < this.getUpperX()) { - face = face.shift(CuboidDirection.South, 1); - } - yield new Cuboid(this.worldName, face.getLowerX(), this.y1, this.z1, this.x2, this.y2, this.z2); - } - case East -> { - while (face.containsOnly(0) && face.getLowerZ() > this.getLowerZ()) { - face = face.shift(CuboidDirection.East, 1); - } - yield new Cuboid(this.worldName, this.x1, this.y1, this.z1, this.x2, this.y2, face.getUpperZ()); - } - case West -> { - while (face.containsOnly(0) && face.getUpperZ() < this.getUpperZ()) { - face = face.shift(CuboidDirection.West, 1); - } - yield new Cuboid(this.worldName, this.x1, this.y1, face.getLowerZ(), this.x2, this.y2, this.z2); - } - default -> throw new IllegalArgumentException("Invalid direction " + dir); - }; - } - - /** - * Get the Cuboid representing the face of this Cuboid. The resulting Cuboid will be one block thick in the axis perpendicular to the requested face. - * - * @param dir - which face of the Cuboid to get - * @return The Cuboid representing this Cuboid's requested face - */ - public Cuboid getFace(CuboidDirection dir) { - return switch (dir) { - case Down -> new Cuboid(this.worldName, this.x1, this.y1, this.z1, this.x2, this.y1, this.z2); - case Up -> new Cuboid(this.worldName, this.x1, this.y2, this.z1, this.x2, this.y2, this.z2); - case North -> new Cuboid(this.worldName, this.x1, this.y1, this.z1, this.x1, this.y2, this.z2); - case South -> new Cuboid(this.worldName, this.x2, this.y1, this.z1, this.x2, this.y2, this.z2); - case East -> new Cuboid(this.worldName, this.x1, this.y1, this.z1, this.x2, this.y2, this.z1); - case West -> new Cuboid(this.worldName, this.x1, this.y1, this.z2, this.x2, this.y2, this.z2); - default -> throw new IllegalArgumentException("Invalid direction " + dir); - }; - } - - /** - * Check if the Cuboid contains only blocks of the given type - * - * @param blockId - The block ID to check for - * @return true if this Cuboid contains only blocks of the given type - */ - public boolean containsOnly(int blockId) { - for (Block b : this) { - if (b.getTypeId() != blockId) return false; - } - return true; - } - /** * Get the Cuboid big enough to hold both this Cuboid and the given one. * diff --git a/core/src/main/java/dev/nandi0813/practice/util/SaveResource.java b/core/src/main/java/dev/nandi0813/practice/util/SaveResource.java index d55e4c15..c6321441 100644 --- a/core/src/main/java/dev/nandi0813/practice/util/SaveResource.java +++ b/core/src/main/java/dev/nandi0813/practice/util/SaveResource.java @@ -7,19 +7,26 @@ import dev.dejvokep.boostedyaml.settings.loader.LoaderSettings; import dev.dejvokep.boostedyaml.settings.updater.UpdaterSettings; import dev.nandi0813.practice.ZonePractice; -import dev.nandi0813.practice.module.util.VersionChecker; -import org.apache.commons.io.FileUtils; import org.jetbrains.annotations.NotNull; import java.io.File; import java.io.IOException; import java.io.InputStream; -import java.util.Objects; public class SaveResource { - // Ladders common to all versions - private static final String[] COMMON_LADDER_NAMES = { + private static final String[] ROOT_FILES = { + "language.yml", + "sidebar.yml", + "groups.yml", + "config.yml", + "divisions.yml", + "guis.yml", + "inventories.yml", + "playerkit.yml" + }; + + private static final String[] LADDER_FILES = { "archer.yml", "axe.yml", "battlerush.yml", @@ -27,104 +34,36 @@ public class SaveResource { "boxing.yml", "bridges.yml", "builduhc.yml", + "crystal.yml", "debuff.yml", "fireball.yml", "gapple.yml", + "mace.yml", "nodebuff.yml", "pearlfight.yml", "sg.yml", "skywars.yml", "soup.yml", + "spear.yml", "spleef.yml", "sumo.yml", "vanilla.yml" }; - // Ladders exclusive to 1.8.8 - private static final String[] LEGACY_ONLY_LADDER_NAMES = { - "combo.yml" - }; - - // Ladders exclusive to modern versions (1.20+) - private static final String[] MODERN_ONLY_LADDER_NAMES = { - "mace.yml", - "crystal.yml", - "spear.yml" - }; - - /** - * Gets the appropriate ladder list for the current server version - * - * @return Array of ladder file names to save - */ - private String[] getLadderNames() { - VersionChecker.BukkitVersion version = VersionChecker.getBukkitVersion(); - if (version == null) { - Common.sendConsoleMMMessage("Could not detect version, using common ladders only."); - return COMMON_LADDER_NAMES; - } - - // Combine common ladders with version-specific ones - if (version == VersionChecker.BukkitVersion.v1_8_R3) { - // 1.8.8: Common + Legacy-only - return combineArrays(COMMON_LADDER_NAMES, LEGACY_ONLY_LADDER_NAMES); - } else { - // Modern versions: Common + Modern-only - return combineArrays(COMMON_LADDER_NAMES, MODERN_ONLY_LADDER_NAMES); - } - } - - /** - * Combines two string arrays into one - */ - private String[] combineArrays(String[] array1, String[] array2) { - String[] result = new String[array1.length + array2.length]; - System.arraycopy(array1, 0, result, 0, array1.length); - System.arraycopy(array2, 0, result, array1.length, array2.length); - return result; - } - public void saveResources(ZonePractice practice) { - saveResource( - new File(practice.getDataFolder(), "language.yml"), - practice.getResource("language.yml")); - saveResource( - new File(practice.getDataFolder(), "sidebar.yml"), - practice.getResource("sidebar.yml")); - saveResource( - new File(practice.getDataFolder(), "groups.yml"), - practice.getResource("groups.yml")); - saveResource( - new File(practice.getDataFolder(), "config.yml"), - practice.getResource(this.getVersionPath() + "config.yml")); - saveResource( - new File(practice.getDataFolder(), "divisions.yml"), - practice.getResource(this.getVersionPath() + "divisions.yml")); - saveResource( - new File(practice.getDataFolder(), "guis.yml"), - practice.getResource(this.getVersionPath() + "guis.yml")); - saveResource( - new File(practice.getDataFolder(), "inventories.yml"), - practice.getResource(this.getVersionPath() + "inventories.yml")); - saveResource( - new File(practice.getDataFolder(), "playerkit.yml"), - practice.getResource(this.getVersionPath() + "playerkit.yml")); - - File ladderFolder = new File(practice.getDataFolder(), "/ladders"); - if (!ladderFolder.exists()) { - if (!ladderFolder.mkdir()) { - Common.sendConsoleMMMessage("Couldn't create ladders folder."); - } - - // Use version-specific ladder list - for (String ladder : getLadderNames()) { - saveLadder(practice, this.getVersionPath(), ladder); + for (String fileName : ROOT_FILES) { + InputStream resource = practice.getResource(fileName); + if (resource == null) { + Common.sendConsoleMMMessage("Missing bundled resource: " + fileName); + continue; } + saveResource(new File(practice.getDataFolder(), fileName), resource); + } - try { - FileUtils.deleteDirectory(new File(practice.getDataFolder(), this.getVersionPath().replace("/", ""))); - } catch (IOException e) { - throw new RuntimeException(e); + File ladderFolder = new File(practice.getDataFolder(), "ladders"); + if (!ladderFolder.exists()) { + for (String fileName : LADDER_FILES) { + practice.saveResource("ladders/" + fileName, false); } } } @@ -132,29 +71,13 @@ public void saveResources(ZonePractice practice) { private void saveResource(@NotNull File document, @NotNull InputStream defaults) { try { YamlDocument.create(document, defaults, - GeneralSettings.DEFAULT, LoaderSettings.builder().setAutoUpdate(true).build(), - DumperSettings.DEFAULT, UpdaterSettings.builder().setVersioning(new BasicVersioning("VERSION")).build()); - + GeneralSettings.DEFAULT, + LoaderSettings.builder().setAutoUpdate(true).build(), + DumperSettings.DEFAULT, + UpdaterSettings.builder().setVersioning(new BasicVersioning("VERSION")).build()); } catch (IOException e) { Common.sendConsoleMMMessage("Couldn't load " + document.getName() + "."); } } - private String getVersionPath() { - return Objects.requireNonNull(VersionChecker.getBukkitVersion()).getFilePath(); - } - - private static void saveLadder(ZonePractice practice, String path, String fileName) { - practice.saveResource(path + "ladders/" + fileName, false); - File file = getFile(path + "ladders/" + fileName); - if (file.exists()) { - if (!file.renameTo(new File(practice.getDataFolder() + "/ladders/", fileName))) - Common.sendConsoleMMMessage("Couldn't move " + fileName + " to ladders folder."); - } - } - - private static File getFile(String path) { - return new File(ZonePractice.getInstance().getDataFolder(), path); - } - } diff --git a/core/src/main/java/dev/nandi0813/practice/util/entityhider/PlayerHider.java b/core/src/main/java/dev/nandi0813/practice/util/entityhider/PlayerHider.java index 0c42306e..722ed3cc 100644 --- a/core/src/main/java/dev/nandi0813/practice/util/entityhider/PlayerHider.java +++ b/core/src/main/java/dev/nandi0813/practice/util/entityhider/PlayerHider.java @@ -1,5 +1,7 @@ package dev.nandi0813.practice.util.entityhider; +import com.github.retrooper.packetevents.PacketEvents; +import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerPlayerInfoUpdate; import dev.nandi0813.api.Event.Spectate.Start.MatchSpectateStartEvent; import dev.nandi0813.practice.ZonePractice; import dev.nandi0813.practice.manager.backend.LanguageManager; @@ -10,7 +12,6 @@ import dev.nandi0813.practice.manager.profile.enums.ProfileStatus; import dev.nandi0813.practice.manager.server.ServerManager; import dev.nandi0813.practice.manager.server.WorldEnum; -import dev.nandi0813.practice.module.util.ClassImport; import dev.nandi0813.practice.util.Common; import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -241,11 +242,21 @@ public void toggleStaffVisibility(Player player) { public void hidePlayer(Player observer, Player target, boolean fullHide) { - ClassImport.getClasses().getPlayerHiderUtil().hidePlayer(observer, target, fullHide); + if (observer.canSee(target)) + observer.hidePlayer(ZonePractice.getInstance(), target); + + if (!fullHide) { + WrapperPlayServerPlayerInfoUpdate playerInfoUpdate = new WrapperPlayServerPlayerInfoUpdate( + WrapperPlayServerPlayerInfoUpdate.Action.UPDATE_LISTED, + new WrapperPlayServerPlayerInfoUpdate.PlayerInfo(target.getUniqueId()) + ); + + PacketEvents.getAPI().getPlayerManager().sendPacket(observer, playerInfoUpdate); + } } public void showPlayer(Player observer, Player target) { - ClassImport.getClasses().getPlayerHiderUtil().showPlayer(observer, target); + observer.showPlayer(ZonePractice.getInstance(), target); } /* diff --git a/core/src/main/java/dev/nandi0813/practice/util/fightmapchange/FightChangeOptimized.java b/core/src/main/java/dev/nandi0813/practice/util/fightmapchange/FightChangeOptimized.java index d1947b26..49c2e808 100644 --- a/core/src/main/java/dev/nandi0813/practice/util/fightmapchange/FightChangeOptimized.java +++ b/core/src/main/java/dev/nandi0813/practice/util/fightmapchange/FightChangeOptimized.java @@ -1,7 +1,7 @@ package dev.nandi0813.practice.util.fightmapchange; import dev.nandi0813.practice.ZonePractice; -import dev.nandi0813.practice.module.interfaces.ChangedBlock; +import dev.nandi0813.practice.moved.ChangedBlock; import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.Cuboid; import dev.nandi0813.practice.util.interfaces.Spectatable; diff --git a/core/src/main/java/dev/nandi0813/practice/util/interfaces/Spectatable.java b/core/src/main/java/dev/nandi0813/practice/util/interfaces/Spectatable.java index ed855419..c53f3530 100644 --- a/core/src/main/java/dev/nandi0813/practice/util/interfaces/Spectatable.java +++ b/core/src/main/java/dev/nandi0813/practice/util/interfaces/Spectatable.java @@ -3,7 +3,7 @@ import dev.nandi0813.practice.manager.fight.ffa.game.FFA; import dev.nandi0813.practice.manager.fight.match.Match; import dev.nandi0813.practice.manager.gui.GUIItem; -import dev.nandi0813.practice.module.interfaces.ChangedBlock; +import dev.nandi0813.practice.moved.ChangedBlock; import dev.nandi0813.practice.util.Cuboid; import dev.nandi0813.practice.util.fightmapchange.FightChangeOptimized; import org.bukkit.entity.Entity; diff --git a/core/src/main/java/dev/nandi0813/practice/util/playerutil/PlayerUtil.java b/core/src/main/java/dev/nandi0813/practice/util/playerutil/PlayerUtil.java index 9b724d83..034682a8 100644 --- a/core/src/main/java/dev/nandi0813/practice/util/playerutil/PlayerUtil.java +++ b/core/src/main/java/dev/nandi0813/practice/util/playerutil/PlayerUtil.java @@ -4,7 +4,6 @@ import dev.nandi0813.practice.manager.backend.LanguageManager; import dev.nandi0813.practice.manager.profile.Profile; import dev.nandi0813.practice.manager.profile.ProfileManager; -import dev.nandi0813.practice.module.util.ClassImport; import dev.nandi0813.practice.util.Common; import org.bukkit.Bukkit; import org.bukkit.GameMode; @@ -25,7 +24,7 @@ public static void clearPlayer(Player player, boolean deleteInv, boolean fly, bo player.setGameMode(GameMode.SURVIVAL); player.setAllowFlight(fly); player.setFlying(fly); - ClassImport.getClasses().getPlayerUtil().setCollidesWithEntities(player, entityCollide); + dev.nandi0813.practice.moved.PlayerUtil.setCollidesWithEntities(player, entityCollide); if (ZonePractice.getInstance().isEnabled()) { Bukkit.getScheduler().runTaskLater(ZonePractice.getInstance(), () -> player.setFireTicks(0), 2L); @@ -33,7 +32,7 @@ public static void clearPlayer(Player player, boolean deleteInv, boolean fly, bo player.setFireTicks(0); } - if (deleteInv) ClassImport.getClasses().getPlayerUtil().clearInventory(player); + if (deleteInv) dev.nandi0813.practice.moved.PlayerUtil.clearInventory(player); for (PotionEffect potionEffect : player.getActivePotionEffects()) player.removePotionEffect(potionEffect.getType()); diff --git a/core/src/main/java/dev/nandi0813/practice/util/playerutil/ProfileStatData.java b/core/src/main/java/dev/nandi0813/practice/util/playerutil/ProfileStatData.java index 3b0ba998..ddd83795 100644 --- a/core/src/main/java/dev/nandi0813/practice/util/playerutil/ProfileStatData.java +++ b/core/src/main/java/dev/nandi0813/practice/util/playerutil/ProfileStatData.java @@ -3,7 +3,7 @@ import dev.nandi0813.practice.manager.ladder.LadderManager; import dev.nandi0813.practice.manager.ladder.abstraction.normal.NormalLadder; import dev.nandi0813.practice.manager.profile.Profile; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; public enum ProfileStatData { ; diff --git a/core/src/main/resources/1.8.8/config.yml b/core/src/main/resources/1.8.8/config.yml deleted file mode 100644 index f753cc80..00000000 --- a/core/src/main/resources/1.8.8/config.yml +++ /dev/null @@ -1,520 +0,0 @@ -VERSION: 18 - -# Mysql database setup. -MYSQL-DATABASE: - ENABLED: false - SAVE-PERIOD: 5 # The server saves the player statistics for this minute interval to the mysql database. - CONNECTION: - HOST: localhost - PORT: 3306 - DATABASE: zonepractice - USER: root - PASSWORD: "" -# Knockback modifier - it very much depends on the hit delay. You should test what is the optimal for you. -KNOCKBACK: - NORMAL: - AIR-HORIZONTAL: 0.93 - AIR-VERTICAL: 0.93 - HORIZONTAL: 0.82 - VERTICAL: 0.88 - COMBO: - AIR-HORIZONTAL: 2.8 - AIR-VERTICAL: 2.8 - HORIZONTAL: 2.5 - VERTICAL: 2.5 -# -# Queue settings -QUEUE: - UNRANKED: - MAX-QUEUE-TIME: 300 # In sec. - GUI-UPDATE-MINUTE: 2 - DIVISION-SEARCH: - ENABLED: true - SETTINGS: - SEARCH-IN-OWN-DIVISIONS: 20 # In sec. - EXTEND-DIVISION-SEARCH: 10 # In sec. - SELECTOR-GUI: - SHOW-DISABLED-LADDERS: true - FIRST-CATEGORY: - SIZE: 4 - GO-TO-SECOND-CATEGORY-SLOT: 35 - LADDER-SLOTS: - - "BATTLERUSH::10" - - "BEDWARS::11" - - "BOXING::12" - - "BRIDGES::14" - - "FIREBALL::15" - - "GAPPLE::16" - - "NODEBUFF::20" - - "COMBO::21" - - "SUMO::22" - - "BUILDUHC::23" - - "PEARLFIGHT::24" - SECOND-CATEGORY: - ENABLED: true - BACK-TO-FIRST-CATEGORY-SLOT: 35 - SIZE: 4 - LADDER-SLOTS: - - "ARCHER::10" - - "AXE::11" - - "DEBUFF::12" - - "SG::14" - - "SKYWARS::15" - - "SOUP::16" - - "SPLEEF::20" - - "VANILLA::24" - RANKED: - MAX-QUEUE-TIME: 300 # In sec. - GUI-UPDATE-MINUTE: 1 - DEFAULT-ELO: 1000 - ELO-RANGE-TIME: 5 # Sec - ELO-RANGE-INCREASE: 20 # Range - ELO-CHANGE: 5-12 # Players receive a random elo between these two numbers. - MAX-PING: 300 # Maximum ping a player can join a ranked queue. - SELECTOR-GUI: - SHOW-DISABLED-LADDERS: true - FIRST-CATEGORY: - SIZE: 4 - GO-TO-SECOND-CATEGORY-SLOT: 35 - LADDER-SLOTS: - - "BATTLERUSH::10" - - "BEDWARS::11" - - "BOXING::12" - - "BRIDGES::14" - - "FIREBALL::15" - - "GAPPLE::16" - - "NODEBUFF::20" - - "COMBO::21" - - "SUMO::22" - - "BUILDUHC::23" - - "PEARLFIGHT::24" - SECOND-CATEGORY: - ENABLED: true - BACK-TO-FIRST-CATEGORY-SLOT: 18 - SIZE: 3 - LADDER-SLOTS: - - "DEBUFF::11" - - "SG::12" - - "SKYWARS::13" - - "SOUP::14" - - "SPLEEF::15" -# -# Admin settings -ADMIN-SETTINGS: - OP-BYPASS-ELO-CHANGE: true # If true, op players ladder elo's cannot be changed by commands. - OP-BYPASS-UNRANKED-CHANGE: true # If true, commands cannot change op players' daily unranked limit. - OP-BYPASS-RANKED-CHANGE: true # If true, commands cannot change op players daily ranked limit. - OP-BYPASS-EXP-CHANGE: true # If true, commands cannot change op players' experience. - OP-BYPASS-INFOGUI: true # If true, op players info gui can only be opened by themselves. - OP-BYPASS-FULL-RESET: true # If true, they can only reset op players themselves. -# -# Auto save settings -# -# It basically doesn't affect the server performance since it happens async. -AUTO-SAVE: - ENABLED: true # It is recommended to enable this, as the plugin is only saved during automatic backups and when the server is shut down. If it crashes and auto-save is disabled, all progress will be lost. - ALERT: true - INTERVAL: 10 # minutes -# -# Match settings -MATCH-SETTINGS: - TEAMS: - TEAM1: - NAME: "[B]" - COLOR: "" - NAMETAG: - PREFIX: " " - NAME-COLOR: "BLUE" - SUFFIX: "" - TEAM2: - NAME: "[R]" - COLOR: "" - NAMETAG: - PREFIX: " " - NAME-COLOR: "RED" - SUFFIX: "" - FFA: - COLOR: - "" - MATCH-TYPE-NAMES: - DUEL: "&e&lDuel" - PARTY_FFA: "&e&lParty FFA" - PARTY_SPLIT: "&e&lParty Split" - PARTY_VS_PARTY: "&e&lParty Vs Party" - WEIGHT-CLASS: - UNRANKED: "&aUnranked" - RANKED: "&cRanked" - LEAVE-COMMAND: - ENABLED: true - WEIGHT-CLASS: - UNRANKED: true - RANKED: false - END-COMMAND: - DUEL: - UNRANKED: - WINNER-COMMANDS: - - "" - LOSER-COMMANDS: - - "" - RANKED: - WINNER-COMMANDS: - - "" - LOSER-COMMANDS: - - "" - START-COMMAND: - LADDER_NAME: # like GAPPLE etc. always write with upper case - MATCH: - - "" - ROUND: - - "" - MATCH-STATISTIC: - REMOVE-AFTER: 60 # After the seconds, the players won't be able to open their match statistics. - MAX-QUEUE-TIME: 300 # Sec - BUILD-LIMIT-DEFAULT: 4 # Counts from the first players positions Y level. You can set a unique number for this for every arena, then it will consider where you are standing. - AFTER-COUNTDOWN: 3 # After the match is over this countdown start, and when it's over, the players teleport back to the lobby. - GOLDEN-HEAD: # Golden head settings. - ITEM: - NAME: "&e&lGolden Head" - MATERIAL: GOLDEN_APPLE - DAMAGE: 1 - LORE: - - "" - - "&7This apple gives you extra" - - "&7health and effects." - - "" - # - # You can add any potion effects for the golden head. - # But it has to follow a strict format like below: - # POTION_TYPE::DURATION_IN_SECONDS::STRENGTH - # You can find the potion types in here: https://hub.spigotmc.org/javadocs/spigot/org/bukkit/potion/PotionEffectType.html - EFFECTS: - - "ABSORPTION::90::1" - - "REGENERATION::20::2" - REMOVE-EMPTY-BOTTLE: true # Removes empty potion bottles after the player use it. - DUEL: - SWORD-TO-DUEL: true # When enabled, hitting a player with the unranked sword in the lobby sends a duel request. - INVITATION-EXPIRY: 60 # After the seconds, the duel request will expire. - ROUND-SELECTOR: - MAX: 10 - MIN: 1 # Can't be lower than 1. - ENDERPEARL: - COOLDOWN: 13 # This is the default cooldown. You can change it in the ladder settings. - EXP-BAR: true # Countdown shows on exp bar. - FIREBALL-FIGHT: # These are multiplier values, so please test what is optimal for you and don't change them too much at once or the difference will multiply. - FIREBALL-SPEED: 1.3 - FIREBALL-YIELD: 2f - EXPLOSION: - TNT: - HORIZONTAL: 1.9 - VERTICAL: 2.1 - FIREBALL: - HORIZONTAL: 1.7 - VERTICAL: 1.7 - PARTY: - SPLIT-TEAM-DAMAGE: false # In party split games, players with the same team can't hurt each other (if false). - PARTY-VS-PARTY-TEAM-DAMAGE: false # In party vs party games, players with the same party can't hurt each other (if false). - REMATCH: # Players get an item in their lobby inventory after duels, so they can easily request a rematch. - ENABLED: true - EXPIRE-TIME: 20 # sec - KIT-ITEMS: - DEFAULT-KIT: - NAME: "&e&lDefault Kit" - MATERIAL: ENCHANTED_BOOK - CUSTOM-KIT: - NAME: "&a&lKit %kit%" - MATERIAL: ENCHANTED_BOOK - LADDER-SETTINGS: - BRIDGE: - REGENERATING-ARROW: - ENABLED: true - EXP-BAR: true - TIME: 5 # In sec. - DISPLAY-ARROW-HIT-HEALTH: true # If true, the player will see the health of the player they hit. -# -# FFA settings -FFA: - ROLLBACK: - SECONDS: 300 # After the seconds, the arena will be reseted back to its original state (only on build arenas). - DISPLAY-ARROW-HIT-HEALTH: true # If true, the player will see the health of the player they hit. - ENDER-PEARL-EXP-BAR: true # If true, the ender pearl cooldown will be displayed on the exp bar. - ALLOW-DESTROYABLE-BLOCK: true # If true, player can destroy the fixed blocks in the arena that their ladder has. - ENABLE_TNT: true # If true, players can use TNT in the arena (ONLY IN BUILD MODE). -# -# Spectator settings -SPECTATOR-SETTINGS: - SPECTATOR-MODE: true # If false, player can't use spectator mode, only watch single matches. - SPECTATOR-MENU: true # Turn on/off the spectator menu. - VANISH-COOLDOWN: 5 # Between vanish toggles this many seconds has to pass. - RANDOM-MATCH-COOLDOWN: 10 # Between random match searches, this many seconds has to pass. - SPECTATOR-SPEED: 2 # The spectators flying speed. Between 1 and 10 -# -# Party settings -PARTY: - SETTINGS: - MAX-PARTY-MEMBERS: - DEFAULT: 6 # Maximum party members, if the owner doesn't have permission to change it. - PERMISSION: 20 # The maximum limit the party leader can set for the party. - DEFAULT: - PUBLIC-PARTY: false - ALL-INVITE: false - PARTY-CHAT: true - DUEL-REQUESTS: true - PUBLIC-BROADCAST-TIME: 20 # The party will be advertised at these intervals (seconds). - BROADCAST-TIMES: 5 # This many times the party will broadcast in the chat. - PARTY-INVITE-COOLDOWN: 60 # After these seconds, the party invite will expire. - REQUEST-EXPIRY: 60 # After the seconds the party vs party request will expire. - END-MATCH-ON-DISBAND: true # If the party is disbanded, the ongoing match will end. -# -# Staff mode -STAFF-MODE: - JOIN-HIDE-FROM-PLAYERS: false # When a staff joins, the server instantly hides them from other players. - STAFF-SPECTATOR-SPEED: 2 # Staff mode spectation flying speed. -# -# Sounds - You can find the sound list here: https://helpch.at/docs/1.8.8/index.html?org/bukkit/Sound.html -SOUNDS: - MATCH_START_COUNTDOWN: - ENABLED: true - SOUND: NOTE_PLING - VOLUME: 1 - PITCH: 1 - MATCH_STARTED: - ENABLED: true - SOUND: LEVEL_UP - VOLUME: 1 - PITCH: 1 - BED_BREAK: - ENABLED: true - SOUND: ENDERDRAGON_GROWL - VOLUME: 1 - PITCH: 1 - MATCH_PLAYER_TEMP_DEATH: # When a bed fight player dies in a match while he still has his bed. - ENABLED: true - SOUND: LEVEL_UP - VOLUME: 1 - PITCH: 1 - MATCH_PLAYER_DEATH: - ENABLED: true - SOUND: BLAZE_DEATH - VOLUME: 1 - PITCH: 1 - EVENT_QUEUE_COUNTDOWN: - ENABLED: true - SOUND: NOTE_PLING - VOLUME: 1 - PITCH: 1 - EVENT_START_COUNTDOWN: - ENABLED: true - SOUND: NOTE_PLING - VOLUME: 1 - PITCH: 1 -# -# Leaderboard settings -LEADERBOARD: - HOLOGRAM: - DYNAMIC-UPDATE: 10 # Sec. This type of hologram is switching between ladders. - STATIC-UPDATE: 30 # Sec. This type of hologram is always show one ladder or global elo stats. - FORMAT: # Also placeholders: %division%, %division_short%, %group%, %ladder_name% - NULL-LINE: "&6%number%. &cN/A" - NOTHING-TO-DISPLAY: "&cThere is nothing to display." - ELO: - TITLE-LINE-SPACING: 0.5 - LINE-SPACING: 0.3 - FORMAT: "&6%placement%. %division% | %player%&8: &e%score%" - LINES: - GLOBAL: - - "&6ELO Top" - - "%top%" - LADDER: - - "&6ELO Top &7- &e%ladder_displayName%" - - "%top%" - WIN: - TITLE-LINE-SPACING: 0.5 - LINE-SPACING: 0.3 - FORMAT: "&6%placement%. %division% | %player%&8: &e%score%" - LINES: - GLOBAL: - - "&6Win Top" - - "%top%" - LADDER: - - "&6Win Top &7- &e%ladder_displayName%" - - "%top%" - KILLS: - TITLE-LINE-SPACING: 0.5 - LINE-SPACING: 0.3 - FORMAT: "&6%placement%. %division% | %player%&8: &e%score%" - LINES: - GLOBAL: - - "&6Kill Top" - - "%top%" - LADDER: - - "&6Kill Top &7- &e%ladder_displayName%" - - "%top%" - DEATHS: - TITLE-LINE-SPACING: 0.5 - LINE-SPACING: 0.3 - FORMAT: "&6%placement%. %division% | %player%&8: &e%score%" - LINES: - GLOBAL: - - "&6Deaths Top" - - "%top%" - LADDER: - - "&6Deaths Top &7- &e%ladder_displayName%" - - "%top%" - WIN_STREAK: - TITLE-LINE-SPACING: 0.5 - LINE-SPACING: 0.3 - FORMAT: "&6%placement%. %division% | %player%&8: &e%score%" - LINES: - GLOBAL: - - "&6Win Streak Top" - - "%top%" - LADDER: - - "&6Win Streak Top &7- &e%ladder_displayName%" - - "%top%" - BEST_WIN_STREAK: - TITLE-LINE-SPACING: 0.5 - LINE-SPACING: 0.3 - FORMAT: "&6%placement%. %division% | %player%&8: &e%score%" - LINES: - GLOBAL: - - "&6Best Win Streak Top" - - "%top%" - LADDER: - - "&6Best Win Streak Top &7- &e%ladder_displayName%" - - "%top%" - LOSE_STREAK: - TITLE-LINE-SPACING: 0.5 - LINE-SPACING: 0.3 - FORMAT: "&6%placement%. %division% | %player%&8: &e%score%" - LINES: - GLOBAL: - - "&6Lose Streak Top" - - "%top%" - LADDER: - - "&6Lose Streak Top &7- &e%ladder_displayName%" - - "%top%" - BEST_LOSE_STREAK: - TITLE-LINE-SPACING: 0.5 - LINE-SPACING: 0.3 - FORMAT: "&6%placement%. %division% | %player%&8: &e%score%" - LINES: - GLOBAL: - - "&6Best Lose Streak Top" - - "%top%" - LADDER: - - "&6Best Lose Streak Top &7- &e%ladder_displayName%" - - "%top%" - SETUP-HOLO: - TITLE: "&cThis hologram must be set." - LINE: "&6Hologram Name: &e%name%" -# -# Sidebar settings -SIDEBAR: - UPDATE-TIME: 20 # In ticks. 20 ticks = 1 second -# -# Arena settings -ARENA: - LOAD-CHUNKS: true # If true, the server will load the enabled arena's chunks. - TELEPORT-TO-COPY: false # Recommend: false, If you copy an arena, the server will teleport you there, so you can watch it happening. - FAST-COPY: false # If true, the server more likely to be slow, but it triples the copy performance. 100x50x65 arena copy takes 1,5 minutes with fast copy. - DEFAULT-ICON: # If default icon is enabled it won't be necessary to set an arena icon, but you still can. - ENABLED: false - ICON: - NAME: "&6%arena%" - MATERIAL: FIREWORK_CHARGE - # DAMAGE: 4 # You can set the damage to the material as well. -# -# Event settings -EVENT: - MULTIPLE: false # If true, multiple events can happen in the same time. But only one can be in the collecting phase. - AUTO-EVENTS: true - ENDERPEARL-COOLDOWN: 10 # In sec. - BROADCAST: - ENABLE: true - MESSAGE-TO: - IN-PARTY: true # If true and the player is a member of a party, he will receive the broadcast message. - IN-UNRANKED-MATCH: true # If true and the player is in an unranked match, he will receive the broadcast message. - IN-RANKED-MATCH: false # If true and the player is in a ranked match, he will receive the broadcast message. - IN-EVENT: true # If true and the player is in another event, he will receive the broadcast message. - PLAYER-TRACKER: # Shows the nearest player. - NAME: "&cPlayer Tracker &7(Right-Click)" - MATERIAL: COMPASS - LMS: # Please be aware that building is not yet supported for the event. - NAME: "LMS" - SETTINGS: - DROP-INVENTORY: true # If a player dies, drop his inventory. - WINNER-COMMAND: - - "practice ranked add %player% 3" - AUTO-EVENTS: # At this time of the day an automatic lms event is going to start. You can extend the list, and add it to other events as well. If you have any question about this, please join the discord server. - - "18:30" - OITC: - NAME: "OITC" - SETTINGS: - PLAYER-LIFE: 5 # Every player gets this many lives. When they die, they loose 1 life. - WINNER-COMMAND: - - "practice ranked add %player% 3" - - "eco give %player% 10" - TNTTAG: - NAME: "TNT Tag" - WINNER-COMMAND: - - "practice ranked add %player% 3" - TAGGED-ITEM: - NAME: "&cYou're IT, tag someone!" - MATERIAL: TNT - BRACKETS: # Please be aware that building is not yet supported for the event. - NAME: "Brackets" - WINNER-COMMAND: - - "practice ranked add %player% 3" - SUMO: - NAME: "Sumo" - WINNER-COMMAND: - - "practice ranked add %player% 3" - SPLEGG: # Please be aware that building is not yet supported for the event. - NAME: "Splegg" - WINNER-COMMAND: - - "practice ranked add %player% 3" - EGG-LAUNCHER-ITEM: - NAME: "&aShoot The Blocks &7(Right-Click)" - MATERIAL: IRON_SPADE - JUGGERNAUT: # Please be aware that building is not yet supported for the event. - NAME: "Juggernaut" - WINNER-COMMAND: - - "practice ranked add %player% 3" -# -# Player settings -PLAYER: - DELETE-INACTIVE-USER: - ENABLED: true - DAYS: 30 # After this number of days, the inactive player profiles will be deleted. - SETTINGS-DELAY: 3 # Sec between settings can be changed. It can be bypassed. - LOBBY-NAMETAG: - ENABLED: true - NAMETAG-MANAGEMENT: - ENABLED: true # If false, ZonePractice will not manage nametags (above-head prefix/suffix/color) or the tab-list at all. - JOIN-TELEPORT-LOBBY: true # If true, the player will be teleported to the lobby when they join the server. - GROUP-CHAT: - ENABLED: true # If enabled, the player's chat will be formatted by their group. It is only viable if "SERVER-CHAT" is also enabled. - DEFAULT-SETTINGS: - DUELREQUEST: true - SIDEBAR: true - HIDEPLAYERS: false - PARTYINVITES: true - ALLOWSPECTATE: true - PRIVATEMESSAGE: true - FLYING: false - WORLD-TIME: DAY # Options: SUNRISE, DAY, SUNSET, NIGHT -# -# Division settings -DIVISIONS: - ENABLED: true - NEW-DIVISION-MESSAGE: true - MIN-DIVISION-FOR-RANKED: SILVER2 # Have to give the config name, not the full name -# -# Chat settings -CHAT: - SERVER-CHAT-ENABLED: true - PARTY-CHAT-ENABLED: true - STAFF-CHAT: - ENABLED: true - SHORTCUT: true # If true, you can use send message like #hello world instead of enabling staff chat each time. - PRIVATE-CHAT-ENABLED: true # Private message system /message (/m) and /reply (/re, /r) \ No newline at end of file diff --git a/core/src/main/resources/1.8.8/divisions.yml b/core/src/main/resources/1.8.8/divisions.yml deleted file mode 100644 index 9babfdd2..00000000 --- a/core/src/main/resources/1.8.8/divisions.yml +++ /dev/null @@ -1,279 +0,0 @@ -VERSION: 3 - -############################## -# You can only create maximum 28 divisions. Anything above that the server is going to ignore. -############################## -# Placeholders: %division%, %division_short% -############################## -REQUIRE: # if both are false wins will be set to true in the backend - WINS: true - ELO: true # depends on the global elo - -DIVISIONS: - RECRUIT: - DATA: - NAME: - FULL: "%color%Recruit" - SHORT: "%color%R" - COLOR: "" - ICON-MATERIAL: IRON_INGOT - REQUIREMENTS: - EXPERIENCE: 0 - WINS: 0 - ELO: 0 - SILVER1: - DATA: - NAME: - FULL: "%color%Silver I" - SHORT: "%color%I" - COLOR: "" - ICON-MATERIAL: IRON_INGOT - REQUIREMENTS: - EXPERIENCE: 1000 - WINS: 10 - ELO: 1050 - SILVER2: - DATA: - NAME: - FULL: "%color%Silver II" - SHORT: "%color%II" - COLOR: "" - ICON-MATERIAL: IRON_INGOT - REQUIREMENTS: - EXPERIENCE: 2000 - WINS: 20 - ELO: 1100 - SILVER3: - DATA: - NAME: - FULL: "%color%Silver III" - SHORT: "%color%III" - COLOR: "" - ICON-MATERIAL: IRON_INGOT - REQUIREMENTS: - EXPERIENCE: 3000 - WINS: 30 - ELO: 1150 - SILVER4: - DATA: - NAME: - FULL: "%color%Silver IV" - SHORT: "%color%IV" - COLOR: "" - ICON-MATERIAL: IRON_INGOT - REQUIREMENTS: - EXPERIENCE: 4000 - WINS: 40 - ELO: 1200 - SILVER5: - DATA: - NAME: - FULL: "%color%Silver V" - SHORT: "%color%V" - COLOR: "" - ICON-MATERIAL: IRON_INGOT - REQUIREMENTS: - EXPERIENCE: 5000 - WINS: 50 - ELO: 1250 - GOLD1: - DATA: - NAME: - FULL: "%color%Gold I" - SHORT: "%color%I" - COLOR: "" - ICON-MATERIAL: GOLD_INGOT - REQUIREMENTS: - EXPERIENCE: 7000 - WINS: 70 - ELO: 1300 - GOLD2: - DATA: - NAME: - FULL: "%color%Gold II" - SHORT: "%color%II" - COLOR: "" - ICON-MATERIAL: GOLD_INGOT - REQUIREMENTS: - EXPERIENCE: 9000 - WINS: 90 - ELO: 1350 - GOLD3: - DATA: - NAME: - FULL: "%color%Gold III" - SHORT: "%color%III" - COLOR: "" - ICON-MATERIAL: GOLD_INGOT - REQUIREMENTS: - EXPERIENCE: 11000 - WINS: 110 - ELO: 1400 - GOLD4: - DATA: - NAME: - FULL: "%color%Gold IV" - SHORT: "%color%IV" - COLOR: "" - ICON-MATERIAL: GOLD_INGOT - REQUIREMENTS: - EXPERIENCE: 13000 - WINS: 130 - ELO: 1450 - GOLD5: - DATA: - NAME: - FULL: "%color%Gold V" - SHORT: "%color%V" - COLOR: "" - ICON-MATERIAL: GOLD_INGOT - REQUIREMENTS: - EXPERIENCE: 15000 - WINS: 150 - ELO: 1500 - PLATINUM1: - DATA: - NAME: - FULL: "%color%Platinum I" - SHORT: "%color%I" - COLOR: "" - ICON-MATERIAL: QUARTZ - REQUIREMENTS: - EXPERIENCE: 18000 - WINS: 180 - ELO: 1550 - PLATINUM2: - DATA: - NAME: - FULL: "%color%Platinum II" - SHORT: "%color%II" - COLOR: "" - ICON-MATERIAL: QUARTZ - REQUIREMENTS: - EXPERIENCE: 21000 - WINS: 210 - ELO: 1600 - PLATINUM3: - DATA: - NAME: - FULL: "%color%Platinum III" - SHORT: "%color%III" - COLOR: "" - ICON-MATERIAL: QUARTZ - REQUIREMENTS: - EXPERIENCE: 24000 - WINS: 240 - ELO: 1650 - EMERALD1: - DATA: - NAME: - FULL: "%color%Emerald I" - SHORT: "%color%I" - COLOR: "" - ICON-MATERIAL: EMERALD - REQUIREMENTS: - EXPERIENCE: 28000 - WINS: 280 - ELO: 1700 - EMERALD2: - DATA: - NAME: - FULL: "%color%Emerald II" - SHORT: "%color%II" - COLOR: "" - ICON-MATERIAL: EMERALD - REQUIREMENTS: - EXPERIENCE: 32000 - WINS: 320 - ELO: 1750 - EMERALD3: - DATA: - NAME: - FULL: "%color%Emerald III" - SHORT: "%color%III" - COLOR: "" - ICON-MATERIAL: EMERALD - REQUIREMENTS: - EXPERIENCE: 36000 - WINS: 360 - ELO: 1800 - DIAMOND1: - DATA: - NAME: - FULL: "%color%Diamond I" - SHORT: "%color%I" - COLOR: "" - ICON-MATERIAL: DIAMOND - REQUIREMENTS: - EXPERIENCE: 41000 - WINS: 410 - ELO: 1850 - DIAMOND2: - DATA: - NAME: - FULL: "%color%Diamond II" - SHORT: "%color%II" - COLOR: "" - ICON-MATERIAL: DIAMOND - REQUIREMENTS: - EXPERIENCE: 46000 - WINS: 460 - ELO: 1900 - DIAMOND3: - DATA: - NAME: - FULL: "%color%Diamond III" - SHORT: "%color%III" - COLOR: "" - ICON-MATERIAL: DIAMOND - REQUIREMENTS: - EXPERIENCE: 51000 - WINS: 510 - ELO: 1950 - SAPPHIRE1: - DATA: - NAME: - FULL: "%color%Sapphire I" - SHORT: "%color%I" - COLOR: "" - ICON-MATERIAL: INK_SACK - ICON-DAMAGE: 4 - REQUIREMENTS: - EXPERIENCE: 57000 - WINS: 570 - ELO: 2000 - SAPPHIRE2: - DATA: - NAME: - FULL: "%color%Sapphire II" - SHORT: "%color%II" - COLOR: "" - ICON-MATERIAL: INK_SACK - ICON-DAMAGE: 4 - REQUIREMENTS: - EXPERIENCE: 63000 - WINS: 630 - ELO: 2050 - SAPPHIRE3: - DATA: - NAME: - FULL: "%color%Sapphire III" - SHORT: "%color%III" - COLOR: "" - ICON-MATERIAL: INK_SACK - ICON-DAMAGE: 4 - REQUIREMENTS: - EXPERIENCE: 69000 - WINS: 690 - ELO: 2100 - MASTER: - DATA: - NAME: - FULL: "%color%Master" - SHORT: "%color%M" - COLOR: "" - ICON-MATERIAL: BLAZE_POWDER - REQUIREMENTS: - EXPERIENCE: 100000 - WINS: 1000 - ELO: 2500 \ No newline at end of file diff --git a/core/src/main/resources/1.8.8/guis.yml b/core/src/main/resources/1.8.8/guis.yml deleted file mode 100644 index 47208dc5..00000000 --- a/core/src/main/resources/1.8.8/guis.yml +++ /dev/null @@ -1,2894 +0,0 @@ -VERSION: 13 - -GENERAL-FILLER-ITEM: - NAME: " " - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 15 -GUIS: - ARENA-CREATE: - TITLE: "&6What type for &c%arena%&6?" - LADDER-CREATE: - TITLE: "&6What type for &c%ladder%&6?" - VALIDATION-GUI: - TITLE: "&8Validation" - ICONS: - CANCEL: - NAME: "&cCancel" - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 14 - APPROVE: - NAME: "&aApprove" - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 5 - KIT-EDITOR: # %ladder% display the Display Name of the ladder (official icon name), but you can also use %ladderOriginal% which is the given name of the ladder. - EDITOR-MENU: - TITLE: "&6&lSelect what to edit" - ICONS: - FILLER_ITEM: - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 15 - PREMADE-LADDER: - NAME: "&6&lPremade Ladder" - MATERIAL: GOLD_SWORD - LORE: - - "&8&m------------------------" - - "&7Click here to edit a &6premade" - - "&7ladder." - - "&8&m------------------------" - PLAYER-LADDER: - NAME: "&a&lOwn Ladder" - MATERIAL: FIREBALL - LORE: - - "&8&m------------------------" - - "&7Click here to edit your &aown" - - "&7ladder." - - "&8&m------------------------" - PLAYER-CUSTOM-KIT-SELECTOR: - TITLE: "&8Select a kit to edit" - ICONS: - KIT: - NAME: "&7[&f%kit%&7]" - MATERIAL: WRITTEN_BOOK - UNSELECTED: - NAME: "&7[&fUnselected&7]" - MATERIAL: WOOL - DAMAGE: 8 - SELECTED: - NAME: "&7[&aSelected&7]" - MATERIAL: WOOL - DAMAGE: 10 - GUIDE: - NAME: "&bGuide" - MATERIAL: PAPER - LORE: - - "&fAfter selecting a kit, you can" - - "&fplay with it by dueling other" - - "&fplayers or play in parties." - LADDER-SELECTOR: - TITLE: "&9&lSelect a kit to edit." - ICONS: - NAME: "%ladder%" - LORE: - - "" - - "&aClick here to select &e%ladder%&a." - DUEL-ROUND-SELECTOR: - TITLE: "&8Select the amount of rounds" - ICONS: - BACK-TO: - NAME: "&cBack to" - MATERIAL: ARROW - ROUND-SELECTOR: - NAME: "&7Rounds: &6%rounds%" - MATERIAL: FIREWORK_CHARGE - LORE: - - "" - - "&7The first player/team to reach" - - "&7the, winning rounds wins." - - "" - - "&7Recommended: &e%recommended_rounds% rounds&7." - - "" - - "&a&lLEFT-CLICK &ato reduce the rounds." - - "&b&lRIGHT-CLICK &bto increase the rounds." - SHOW-ARENA: - NAME: "&eSelected Arena: %arena%" - MATERIAL: DIRT # In case the arena doesn't have an icon - LORE: - - "" - - "&7You've selected this arena for the match." - SHOW-LADDER: - NAME: "&eSelected Ladder: %ladder%" - MATERIAL: DIRT # In case the ladder doesn't have an icon - LORE: - - "" - - "&7You've selected this ladder for the match." - START-MATCH: - NAME: "&aStart Match" - MATERIAL: EMERALD - LORE: - - "" - - "&7Click here to start the match." - - "&7The match will start with the selected" - - "&7arena and ladder." - KIT-SELECTOR: - TITLE: "&8Viewing %ladder% kits" - ICONS: - BACK-TO-KIT-SELECTOR: - NAME: "&cBack to kit selector" - MATERIAL: ARROW - CREATE-KIT: - NAME: "&a&lCreate Kit" - MATERIAL: STONE_SWORD - EXISTING-KIT: - NAME: "&6&lKit %kit%" - MATERIAL: GOLD_SWORD - EDIT-KIT: - NAME: "&a&lEdit Kit" - MATERIAL: BOOK - DELETE-KIT: - NAME: "&c&lDelete Kit" - MATERIAL: REDSTONE - LORE: - - "&8&m------------------------" - - "&c&lYou won't be able to" - - "&crecover this kit." - - "&8&m------------------------" - NO-PERMISSION: - NAME: "&cYou don't have permission" - MATERIAL: WOOD_SWORD - FILLER-ITEM-1: - NAME: " " - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 14 - FILLER-ITEM-2: - NAME: " " - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 7 - KIT-EDITOR: - TITLE: "&8Editing Kit %kit%" # Also available: %weightClass% - ICONS: - INFO: - NAME: "&2Informations" - MATERIAL: NAME_TAG - LORE: - - "&8&m------------------------" - - " &e» &7Ladder: &e%ladder%" - - " &e» &7Kit: &e%kit%" - - " &e» &7WeightClass: &e%weightClass%" - - "&8&m------------------------" - SAVE: - NAME: "&a&lSave" - MATERIAL: WOOL - DAMAGE: 5 - LORE: - - "&8&m------------------------" - - "&e&lClick here &eto save" - - "ðe custom kit." - - "&8&m------------------------" - LOAD-DEFAULT: - NAME: "&e&lLoad Default Kit" - MATERIAL: WOOL - DAMAGE: 4 - LORE: - - "&8&m------------------------" - - "&e&lClick here &eto load the default" - - "&ekit to your inventory." - - "&8&m------------------------" - CANCEL: - NAME: "&c&lCancel" - MATERIAL: WOOL - DAMAGE: 14 - LORE: - - "&8&m------------------------" - - "&e&lClick here &eto abort editing the" - - "&ekit, and return to the kit menu." - - "&8&m------------------------" - FILLER-ITEM: - NAME: " " - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 1 - SWITCH-TO-UNRANKED: - NAME: "&aSwitch to %weightClass%" - MATERIAL: WOOD_SWORD - SWITCH-TO-RANKED: - NAME: "&aSwitch to %weightClass%" - MATERIAL: IRON_SWORD - ONLY-UNRANKED: - NAME: "&cThis ladder is only %weightClass%" - MATERIAL: REDSTONE - ONLY-RANKED: - NAME: "&cThis ladder is only %weightClass%" - MATERIAL: REDSTONE - NO-EFFECT: - NAME: "&5Effects" - MATERIAL: POTION - DAMAGE: 8233 - LORE: - - "&8&m------------------------" - - "&7This ladder has no effects." - - "&8&m------------------------" - HAS-EFFECT: - FORMAT: "&d%name% %amplifier% &7for %time%" - ICON: - NAME: "&5Effects" - MATERIAL: POTION - DAMAGE: 8233 - LORE: - - "&8&m------------------------" - - "&eYou will get these effects," - - "&ewhen the game starts." - - "" - - "%effects%" - - "&8&m------------------------" - STATISTICS: - SELECTOR: - TITLE: "&cSelect statistics to view" - ICONS: - FILLER-ITEM: - MATERIAL: STAINED_GLASS_PANE - OWN-PLAYER-STATS: - NAME: "&c%player% &7- &fStatistic" - LORE: - - "&8&m------------------------" - - "&7Click here to view your personal" - - "&7statistics for each kit." - - "&8&m------------------------" - PLAYER-STATS: - NAME: "&c%target% &7- &fStatistic" - LORE: - - "&8&m------------------------" - - "&7Click here to view" - - "&c%target%'s &7kit statistics." - - "&8&m------------------------" - ELO-LEADERBOARD: - NAME: "&eELO Leaderboards" - MATERIAL: SNOW_BALL - LORE: - - "&8&m------------------------" - - "&7Click here to view the" - - "&eelo &7leaderboards." - - "&8&m------------------------" - TOP-WIN-LEADERBOARD: - NAME: "&6Top Win Leaderboard" - MATERIAL: SLIME_BALL - LORE: - - "&8&m------------------------" - - "&7Click here to view the" - - "&6top win &7leaderboards." - - "&8&m------------------------" - VIEW-DIVISIONS: - HAS-NEXT: - NAME: "&cDivisions" - MATERIAL: BOOK - LORE: - - "" - - " &c┃ &fCurrent Division: %division_fullName%" - - " &c┃ &fExperience: &c%exp%" - - " &c┃ &fWins: &c%wins%" - - " &c┃ &fElo: &c%elo%" - - "" - - " &c┃ &fNext Division: %nextDivision_fullName%" - - " &c┃ &fProgress: &a%progress_bar% &f(%progress_percent%%)" - - "" - - "&aLeft Click &7to view all division." - NO-NEXT: - NAME: "&cDivisions" - MATERIAL: BOOK - LORE: - - "" - - " &c┃ &fYour Division: %division_fullName%" - - " &c┃ &fExperience: &c%exp%" - - " &c┃ &fWins: &c%wins%" - - " &c┃ &fElo: &c%elo%" - - "" - - "&eYou have reached the last division." - ELO-LEADERBOARD: - TITLE: "&eTop ELO Leaderboard" - ICONS: - FILLER-ITEM: - NAME: " " - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 4 - BACK-TO-HUB: - NAME: "&eBack to hub" - MATERIAL: ARROW - REFRESH-ITEM: - NAME: "&cRefresh" - MATERIAL: CLAY_BALL - LORE: - - "&8&m------------------------" - - "&7Click here to refresh" - - "&7the leaderboard" - - "" - - "&c&lNOTE: &7The leaderboards automatically" - - "&7refresh every time you open the GUI." - - "&8&m------------------------" - GLOBAL-LEADERBOARD: - NAME: "&eGlobal Elo Leaderboard &7- &fTop %number%" - MATERIAL: "NETHER_STAR" - LORE: - FORMAT: "&6%number%. %division% | %player%&8: &e%global_elo%" - FORMAT-NULL: "&6%number%. &7| &cN/A" - LEADERBOARD: - - "&8&m------------------------" - - "%top%" - - "&8&m------------------------" - NO-LEADERBOARD: - - "&8&m------------------------" - - "&cThere is no leaderboard to display" - - "&8&m------------------------" - LADDER-LEADERBOARD: - NAME: "%ladder% &eELO &7- &fTop %number%" - LORE: - FORMAT: "&6%number%. %division% | %player%&8: &e%ladder_elo%" - FORMAT-NULL: "&6%number%. &7| &cN/A" - LEADERBOARD: - - "&8&m------------------------" - - "%top%" - - "&8&m------------------------" - NO-LEADERBOARD: - - "&8&m------------------------" - - "&cThere is no leaderboard to display" - - "&8&m------------------------" - WIN-LEADERBOARD: - TITLE: "&6Top Wins Leaderboards" - ICONS: - FILLER-ITEM: - NAME: " " - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 1 - BACK-TO-HUB: - NAME: "&eBack to hub" - MATERIAL: ARROW - GLOBAL-LEADERBOARD: - NAME: "&eGlobal Elo Leaderboard &7- &fTop %number%" - MATERIAL: "NETHER_STAR" - LORE: - FORMAT: "&6%number%. %division% | %player%&8: &e%global_win%" - FORMAT-NULL: "&6%number%. &7| &cN/A" - LEADERBOARD: - - "&8&m------------------------" - - "%top%" - - "&8&m------------------------" - NO-LEADERBOARD: - - "&8&m------------------------" - - "&cThere is no leaderboard to display" - - "&8&m------------------------" - LADDER-LEADERBOARD: - NAME: "%ladder% &6Win &7- &fTop %number%" - LORE: - FORMAT: "&6%number%. &e%player%&8: &f%ladder_win%" - FORMAT-NULL: "&6%number%. &cN/A" - LEADERBOARD: - - "&8&m------------------------" - - "%top%" - - "&8&m------------------------" - NO-LEADERBOARD: - - "&8&m------------------------" - - "&cThere is no leaderboard to display" - - "&8&m------------------------" - PLAYER-STATISTICS: - TITLE: "&c%player%'s &8Stats" - ICONS: - FILLER-ITEM: - NAME: " " - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 1 - BACK-TO-HUB: - NAME: "&eBack to hub" - MATERIAL: ARROW - ALL-STAT: - NAME: "&c%player% &7- &fStatistics" - LORE: - - "&8&m------------------------" - - "&eUnranked Wins: &f%unranked_wins%" - - "&eUnranked Losses: &f%unranked_losses%" - - "&eUnranked W/L Ratio: &f%unranked_w/l_ratio%" - - "" - - "&eRanked Wins: &f%ranked_wins%" - - "&eRanked Losses: &f%ranked_losses%" - - "&eRanked W/L Ratio: &f%ranked_w/l_ratio%" - - "" - - "&eWins: &f%global_wins%" - - "&eLosses: &f%global_losses%" - - "&eW/L Ratio: &f%w/l_ratio%" - - "" - - "&eGlobal ELO: &f%global_elo%" - - "&eDivision: %division%" - - "&8&m------------------------" - UNRANKED-LADDER-STATS: - NAME: "%ladder%" - LORE: - - "&8&m------------------------" - - "&eUnranked Wins: &f%unranked_wins%" - - "&eUnranked Losses: &f%unranked_losses%" - - "&eUnranked W/L Ratio: &f%unranked_w/l_ratio%" - - "&8&m------------------------" - RANKED-LADDER-STATS: - NAME: "%ladder%" - LORE: - - "&8&m------------------------" - - "&eRanked Wins: &f%ranked_wins%" - - "&eRanked Losses: &f%ranked_losses%" - - "&eRanked W/L Ratio: &f%ranked_w/l_ratio%" - - "" - - "&eELO: &f%elo%" - - "&8&m------------------------" - UNRANKED-RANKED-STATS: - NAME: "%ladder%" - LORE: - - "&8&m------------------------" - - "&eUnranked Wins: &f%unranked_wins%" - - "&eUnranked Losses: &f%unranked_losses%" - - "&eUnranked W/L Ratio: &f%unranked_w/l_ratio%" - - "" - - "&eRanked Wins: &f%ranked_wins%" - - "&eRanked Losses: &f%ranked_losses%" - - "&eRanked W/L Ratio: &f%ranked_w/l_ratio%" - - "" - - "&eELO: &f%elo%" - - "" - - "&eOverall W/L Ratio: &f%overall_w/l_ratio%" - - "&eDivision: %division%" - - "&8&m------------------------" - PARTY: - PARTY-GAMES: - TITLE: "&8Party Games" - ICONS: - FILLER-ITEM: - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 15 - PARTY_SPLIT: - NAME: "&bSplit Fight" - MATERIAL: FIREWORK_CHARGE - PARTY_FFA: - NAME: "&aParty FFA" - MATERIAL: SLIME_BALL - PARTY-SETTINGS: - TITLE: "&8Party Settings" - ICONS: - FILLER-ITEM: - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 15 - PLAYER-LIMIT: - NAME: "&ePlayer Limit: &c%limit%" - MATERIAL: SKULL_ITEM - DAMAGE: 3 - LORE: - - "&8&m------------------------" - - "&7That many player can join" - - "&7your party maximum." - - "" - - "&a&lLEFT-CLICK &ato decrease the limit." - - "&b&lRIGHT-CLICK &bto increase the limit." - - "&8&m------------------------" - ACCESS-MODIFIERS: - PUBLIC: - NAME: "&ePublic: &aTrue" - MATERIAL: CHEST - LORE: - - "&8&m------------------------" - - "&7The party is &apublic" - - "&7anyone can join." - - "" - - "&e&lClick here &7to change the status." - - "&8&m------------------------" - PRIVATE: - NAME: "&ePublic: &cFalse" - MATERIAL: CHEST - LORE: - - "&8&m------------------------" - - "&7The party is &cprivate &7only" - - "&7players with invite can join." - - "" - - "&e&lClick here &7to change the status." - - "&8&m------------------------" - BROADCAST: - ENABLED: - NAME: "&eBroadcast Party: &aOn" - MATERIAL: PAPER - LORE: - - "&8&m------------------------" - - "&7The party is broadcasting" - - "&7to the players of the server." - - "" - - "&e&lClick here &7to &cturn off &7broadcasting." - - "&8&m------------------------" - DISABLED: - NAME: "&eBroadcast Party: &cOff" - MATERIAL: PAPER - LORE: - - "&8&m------------------------" - - "&7The party isn't broadcasting." - - "" - - "&e&lClick here &7to &aturn on &7broadcasting." - - "&8&m------------------------" - ALL-INVITE: - ENABLED: - NAME: "&eAll Invite: &aTrue" - MATERIAL: NAME_TAG - LORE: - - "&8&m------------------------" - - "&7Everyone can invite players" - - "&7to the party." - - "" - - "&e&lClick here &7to change the status." - - "&8&m------------------------" - DISABLED: - NAME: "&eAll Invite: &cFalse" - MATERIAL: NAME_TAG - LORE: - - "&8&m------------------------" - - "&7Only the party leader can invite" - - "&7players to the party." - - "" - - "&e&lClick here &7to change the status." - - "&8&m------------------------" - DUEL-REQUESTS: - ENABLED: - NAME: "&eDuel Requests: &aTrue" - MATERIAL: DIAMOND_SWORD - LORE: - - "&8&m------------------------" - - "&7Players can send duel requests" - - "&7to the party." - - "" - - "&e&lClick here &7to change the status." - - "&8&m------------------------" - DISABLED: - NAME: "&eDuel Requests: &cFalse" - MATERIAL: DIAMOND_SWORD - LORE: - - "&8&m------------------------" - - "&7Players can't send duel requests" - - "&7to the party." - - "" - - "&e&lClick here &7to change the status." - - "&8&m------------------------" - PARTY-CHAT: - ENABLED: - NAME: "&eParty Chat: &aOn" - MATERIAL: NOTE_BLOCK - LORE: - - "&8&m------------------------" - - "&7Party members can use" - - "&7the party chat." - - "" - - "&e&lClick here &7to &cturn off &7party chat." - - "&8&m------------------------" - DISABLED: - NAME: "&eParty Chat: &cOff" - MATERIAL: NOTE_BLOCK - LORE: - - "&8&m------------------------" - - "&7Party members can't use" - - "&7the party chat." - - "" - - "&e&lClick here &7to &aturn on &7party chat." - - "&8&m------------------------" - OTHER-PARTIES: - TITLE: "&8Other Parties" - ICONS: - FILLER-ITEM: - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 15 - PARTY-ITEM: - NAME: "&b%leader%'s Party &7(&f%partySize%&7)" - LORE: - MEMBER-FORMAT: " &7- &b%player%" - LORE: - - "&7&m------------------------" - - "%members%" - - "" - - "&f&lClick here &fto duel this party." - - "&7&m------------------------" - DIVISION: - TITLE: "&8Division" - ICONS: - BACK-TO: - NAME: "&cBack to" - MATERIAL: ARROW - FILLER-ITEM: - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 15 - FILLER-ITEM2: - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 3 - PAST-DIVISION: - NAME: "%fullName% &c(Past)" - LORE: - - "" - - " %color%┃ &fProgress: &a%progress_bar% &f(%progress_percent%%)" - - "" - - " &c┃ &fYou have passed this division." - CURRENT-DIVISION: - NAME: "%fullName% &a(Current)" - LORE: - - "" - - " %color%┃ &fProgress: &a%progress_bar% &f(%progress_percent%%)" - - "" - - " &c┃ &fThis is your current division." - NEXT-DIVISION: - NAME: "%fullName%" - LORE: - - "" - - " %color%┃ &fWins: %color%%current_wins%/%required_wins% &f(%win_progress_percent%%)" - - " %color%┃ &fElo: %color%%current_elo%/%required_elo% &f(%elo_progress_percent%%)" - - " %color%┃ &fExperience: %color%%current_exp%/%required_exp% &f(%exp_progress_percent%%)" - - "" - - " %color%┃ &fProgress: &a%progress_bar% &f(%progress_percent%%)" - - "" - FFA: - ARENA-SELECTOR: - TITLE: "&8Select an &6FFA Arena" - ROWS: 3 - ICONS: - ARENA: - BUILD-STATUS: - ENABLED: "&aEnabled" - DISABLED: "&cDisabled" - NAME: "&6%arena%" - LORE: - - "" - - "&eBuild: &f%build_status%" - - "&eRe-Kit After Kill: &f%rekit_after_kill%" - - "&eLobby After Death: &f%lobby_after_death%" - - "&eLadders: &f%ladders%" - - "&ePlayers: &f%players%" - - "" - - "&aClick to join this arena!" - FILLER: - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 1 - LADDER-SELECTOR: - TITLE: "&8Select a &6ladder &8to join" - ICONS: - LADDER: - NAME: "%ladder%" - LORE: - - "" - - "&aClick here to select %ladder%&a." - FILLER: - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 3 - PLAYER-SETTINGS: - TITLE: "&8Player Settings" # %player% - ICONS: - FILLER-ITEM: - NAME: " " - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 15 - DUEL-REQUEST: - ENABLED: - NAME: "&cToggle Duel Requests" - MATERIAL: DIAMOND_SWORD - LORE: - - "&8&m--------------------------------" - - "&7If enabled, player will be" - - "&7able to send you duel requests." - - "" - - " &a&l► &7Allow other players to duel you." - - " &7&l► &7Don't allow other players to duel you." - - "&8&m--------------------------------" - DISABLED: - NAME: "&cToggle Duel Requests" - MATERIAL: DIAMOND_SWORD - LORE: - - "&8&m--------------------------------" - - "&7If enabled, player will be" - - "&7able to send you duel requests." - - "" - - " &7&l► &7Allow other players to duel you." - - " &c&l► &7Don't allow other players to duel you." - - "&8&m--------------------------------" - SIDEBAR: - ENABLED: - NAME: "&6Toggle Scoreboard" - MATERIAL: PAINTING - LORE: - - "&8&m--------------------------------" - - "&7If enabled, you will be able" - - "&7to see the scoreboard." - - "" - - " &a&l► &7Show scoreboard." - - " &7&l► &7Hide scoreboard." - - "&8&m--------------------------------" - DISABLED: - NAME: "&6Toggle Scoreboard" - MATERIAL: PAINTING - LORE: - - "&8&m--------------------------------" - - "&7If enabled, you will be able" - - "&7to see the scoreboard." - - "" - - " &7&l► &7Show scoreboard." - - " &c&l► &7Hide scoreboard." - - "&8&m--------------------------------" - PARTY-INVITE: - ENABLED: - NAME: "&dParty Invite Requests" - MATERIAL: FEATHER - LORE: - - "&8&m--------------------------------" - - "&7If enabled, players will be able" - - "&7to send you party invites." - - "" - - " &a&l► &7Allow party leaders to invite you." - - " &7&l► &7Don't allow party leaders to invite you." - - "&8&m--------------------------------" - DISABLED: - NAME: "&dParty Invite Requests" - MATERIAL: FEATHER - LORE: - - "&8&m--------------------------------" - - "&7If enabled, players will be able" - - "&7to send you party invites." - - "" - - " &7&l► &7Allow party leaders to invite you." - - " &c&l► &7Don't allow party leaders to invite you." - - "&8&m--------------------------------" - PRIVATE-MESSAGE: - ENABLED: - NAME: "&9Private Messages" - MATERIAL: PAPER - LORE: - - "&8&m--------------------------------" - - "&7If enabled, players will be" - - "&7able to message you." - - "" - - " &a&l► &7Let players send messages to you." - - " &7&l► &7Don't let players send messages to you." - - "&8&m--------------------------------" - DISABLED: - NAME: "&9Private Messages" - MATERIAL: PAPER - LORE: - - "&8&m--------------------------------" - - "&7If enabled, players will be" - - "&7able to message you." - - "" - - " &7&l► &7Let players send messages to you." - - " &c&l► &7Don't let players send messages to you." - - "&8&m--------------------------------" - HIDE-PLAYERS: - ENABLED: - NAME: "&9Player Visibility" - MATERIAL: GHAST_TEAR - LORE: - - "&8&m--------------------------------" - - "&7If enabled, you will be able to" - - "&7see other players in the lobby." - - "" - - " &a&l► &7See players in the lobby." - - " &7&l► &7Don't see players in the lobby." - - "&8&m--------------------------------" - DISABLED: - NAME: "&9Player Visibility" - MATERIAL: GHAST_TEAR - LORE: - - "&8&m--------------------------------" - - "&7If enabled, you will be able to" - - "&7see other players in the lobby." - - "" - - " &7&l► &7See players in the lobby." - - " &c&l► &7Don't see players in the lobby." - - "&8&m--------------------------------" - ALLOW-SPECTATORS: - ENABLED: - NAME: "&7Allow Spectators" - MATERIAL: EMERALD - LORE: - - "&8&m--------------------------------" - - "&7If enabled, players can" - - "&7spectate your matches." - - "" - - " &a&l► &7Let players spectate your matches." - - " &7&l► &7Don't let players spectate your matches." - - "&8&m--------------------------------" - DISABLED: - NAME: "&7Allow Spectators" - MATERIAL: EMERALD - LORE: - - "&8&m--------------------------------" - - "&7If enabled, players can" - - "&7spectate your matches." - - "" - - " &7&l► &7Let players spectate your matches." - - " &c&l► &7Don't let players spectate your matches." - - "&8&m--------------------------------" - FLYING: - ENABLED: - NAME: "&7Flying" - MATERIAL: ENDER_PEARL - LORE: - - "&8&m--------------------------------" - - "&7If enabled, you can fly in the lobby." - - "" - - " &a&l► &7Enabled." - - " &7&l► &7Disabled." - - "&8&m--------------------------------" - DISABLED: - NAME: "&7Flying" - MATERIAL: ENDER_PEARL - LORE: - - "&8&m--------------------------------" - - "&7If enabled, you can fly in the lobby." - - "" - - " &7&l► &7Enabled." - - " &c&l► &7Disabled." - - "&8&m--------------------------------" - WORLD-TIME: - NAME: "&eWorld Time: &a%worldTime%" - MATERIAL: BLAZE_POWDER - LORE: - - "&8&m--------------------------------" - - "&7Click here to change time." - - "&8&m--------------------------------" - PLAYER-INFORMATION: # /prac info command - MAIN-PAGE: - TITLE: "&c%player%'s &8info" - ICONS: - REFRESH: - NAME: "&aRefresh Page" - MATERIAL: NETHER_STAR - LORE: - - "&8&m------------------------" - - "&7Click here to refresh the page." - - "&8&m------------------------" - BASIC-INFO: - NAME: "&6Basic Informations" - ONLINE-STATUS: "&aOnline" - LORE: - - "&8&m------------------------" - - "&eName: &7%player%" - - "&eUUID: &7%uuid%" - - "" - - "&eFirst Played: &7%first_played%" - - "&eLast Joined: &7%last_played%" - - "" - - "&eUnranked Left: &7%unranked_left%" - - "&eRanked Left: &7%ranked_left%" - - "" - - "&eDivision: &7%division_fullName%" - - "&8&m------------------------" - RANKED-BAN: - NAME: "&6%player% &7is banned from playing ranked." - MATERIAL: EMERALD - LORE: - - "&8&m------------------------" - - "&eBanner: &7%banner%" - - "&eReason: &7%reason%" - - "&eBanned at: &7%time%" - - "&8&m------------------------" - - "&aClick here &7to &eunban &7the player." - - "&8&m------------------------" - ONLINE-INFO: - PLAYER-OFFLINE: - NAME: "&cPlayer is not online!" - MATERIAL: FEATHER - PLAYER-ONLINE: - NAME: "&6Online Players Information's" - MATERIAL: FEATHER - LORE: - - "&8&m------------------------" - - "&eIn World: &7%world%" - - "&eGamemode: &7%gamemode%" - - "&eFlying: &7%flying%" - - "&eTablist Name: &7%tablist_name%" - - "&eHealth: &7%health%" - - "&eFood Level: &7%food%" - - "&eHit Delay: &7%hit_delay%" - - "&ePing: &7%ping%ms" - - "&8&m------------------------" - GAME: - OFFLINE: - NAME: "&cPlayer is offline" - MATERIAL: REDSTONE - IN-MATCH: - NAME: "&ePlayer is in a match." - MATERIAL: WATCH - LORE: - - "&8&m------------------------" - - "&eLeft-Click &7to start spectating the match." - - "&6Right-Click &7to get the player out of the match." - - "&8&m------------------------" - IN-EVENT: - NAME: "&ePlayer is in a event." - MATERIAL: WATCH - LORE: - - "&8&m------------------------" - - "&eLeft-Click &7to start spectating the event." - - "&6Right-Click &7to get the player out of the event." - - "&8&m------------------------" - IN-FFA: - NAME: "&ePlayer is in a FFA." - MATERIAL: WATCH - LORE: - - "&8&m------------------------" - - "&eLeft-Click &7to start spectating the FFA." - - "&6Right-Click &7to get the player out of the FFA." - - "&8&m------------------------" - SPECTATING: - NAME: "&ePlayer is spectating." - MATERIAL: WATCH - LORE: - - "&8&m------------------------" - - "&eLeft-Click &7to start spectating the same thing." - - "&6Right-Click &7to end the spectating." - - "&8&m------------------------" - NOTHING: - NAME: "&cPlayer does nothing" - MATERIAL: REDSTONE - LORE: - - "&8&m------------------------" - - "&7Player does not play in a" - - "&7match or event and does not" - - "&7spectate anything." - - "&8&m------------------------" - PARTY: - IN-PARTY: - NAME: "&aPlayer is in a party." - MATERIAL: NAME_TAG - NOT-IN-PARTY: - NAME: "&cPlayer is not in a party." - MATERIAL: NAME_TAG - STATISTICS: - NAME: "&cStatistics" - MATERIAL: FIREWORK_CHARGE - LORE: - - "&8&m------------------------" - - "&7Click here to view the" - - "&7player's statistics." - - "&8&m------------------------" - LADDER-STATS: - TITLE: "&8%player% ladder stats" - ICONS: - BACK-TO-HUB: - NAME: "&eBack to hub" - MATERIAL: ARROW - REFRESH: - NAME: "&aRefresh Page" - MATERIAL: NETHER_STAR - LORE: - - "&8&m------------------------" - - "&7Click here to refresh the page." - - "&8&m------------------------" - RESET-ALL-STATS: - NAME: "&cReset ALL Stats" - MATERIAL: GHAST_TEAR - LORE: - - "&8&m------------------------" - - "&7Click here to restart all" - - "&7the player's ladder statistics." - - "&8&m------------------------" - LADDER: - NULL-STAT: "&cN/A" - UNRANKED-LADDER-STATS: - NAME: "&e%ladder% ladder" - DEFAULT-MATERIAL: BEDROCK - LORE: - - "&8&m------------------------" - - "&eWins: &f%wins%" - - "&eLosses: &f%losses%" - - "" - - "&eCustom Kits: &f%custom_kits%" - - "&8&m------------------------" - - "&cClick here &7to reset the ladder stats." - - "&8&m------------------------" - RANKED-LADDER-STATS: - NAME: "&e%ladder% ladder" - DEFAULT-MATERIAL: BEDROCK - LORE: - - "&8&m------------------------" - - "&eUnranked Wins: &f%unranked_wins%" - - "&eUnranked Losses: &f%unranked_losses%" - - "&eUnranked Custom Kits: &f%unranked_custom_kits%" - - "" - - "&eRanked Wins: &f%ranked_wins%" - - "&eRanked Losses: &f%ranked_losses%" - - "&eRanked Custom Kits: &f%ranked_custom_kits%" - - "" - - "&eELO: &f%elo%" - - "&8&m------------------------" - - "&cClick here &7to reset the ladder stats." - - "&8&m------------------------" - SELECTORS: - ARENA-SELECTOR: - TITLE: "%matchType% &8- Arena" - ICONS: - BACK-TO-SELECTOR: - NAME: "&eBack to kit selector" - MATERIAL: ARROW - RANDOM-ARENA: - NAME: "&6Random Arena" - MATERIAL: NETHER_STAR - LORE: - - "&8&m------------------------" - - "&7Click here to pick a" - - "&erandom &7arena for the match." - - "&8&m------------------------" - ARENA-ICON: - NAME: "%arena%" - LORE: - - "&8&m------------------------" - - "&7Click here to select" - - "&7arena %arena%&7." - - "&8&m------------------------" - LADDER-SELECTOR: - TITLE: "%matchType% &8- Kit" - ICONS: - LADDER: - NAME: "%ladder%" - LORE: - - "&8&m------------------------" - - "&7Click here to select" - - "&7ladder %ladder%&7." - - "&8&m------------------------" - FILLER-ITEM: - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 15 - BASE-CUSTOM-PLAYER-KIT-ICON: - NAME: "&6Custom Kit" - MATERIAL: DIAMOND_SWORD - LORE: - - "&8&m------------------------" - - "&7Click here to play" - - "&7with your own custom kit." - - "&8&m------------------------" - EVENT-HOST: # You can set each event icon in the game. - TITLE: "&4Host Event" - LADDER-PREVIEW: - TITLE: "&8Preview of %ladder%" - ICONS: - NO-EFFECT: - NAME: "&5Ladder Effects" - MATERIAL: POTION - DAMAGE: 8233 - LORE: - - "&8&m------------------------" - - "&7This ladder has no effects." - - "&8&m------------------------" - HAS-EFFECT: - FORMAT: "&d%name% %amplifier% &7for %time%" - ICON: - NAME: "&5Ladder Effects" - MATERIAL: POTION - DAMAGE: 8233 - LORE: - - "&8&m------------------------" - - "&eYou will get these effects," - - "&ewhen the game starts." - - "" - - "%effects%" - - "&8&m------------------------" - MATCH-STATISTICS: - TITLE: - MULTIPLE-ROUND: "&8%player%'s Stat - R: %round%" - SINGLE-ROUND: "&8%player%'s Stat" - ICONS: - POTION: - NAME: "&cHealth Potions: &f%potion_left%" - MATERIAL: POTION - DAMAGE: 16421 - LORE: - - "&8&m--------------------" - - "&cPotions Thrown: &f%potion_thrown%" - - "&cPotions Missed: &f%potion_missed%" - - "&cPotion Accuracy: &f%potion_accuracy%" - - "&8&m--------------------" - HEALTH: - NAME: "&cHealth: &f20/%end_hearth% &c♥" - MATERIAL: SKULL_ITEM - HUNGER: - NAME: "&cHunger: &f20/%end_hunger%" - MATERIAL: COOKED_BEEF - EFFECT: - NO-EFFECT: - NAME: "&cPotion Effects" - MATERIAL: BREWING_STAND_ITEM - LORE: - - "&8&m------------------------" - - "&cPlayer didn't have any effects" - - "&cleft at the end of the game." - - "&8&m------------------------" - HAS-EFFECT: - FORMAT: " &f✱ &c%name% %amplifier% &7- &f %time%" - ICON: - NAME: "&cPotion Effects" - MATERIAL: POTION - DAMAGE: 8233 - LORE: - - "&8&m------------------------" - - "%effects%" - - "&8&m------------------------" - STATS: - NAME: "&cMatch Statistics" - MATERIAL: DIAMOND_SWORD - LORE: - - "&8&m------------------------" - - " &f✱ &cTotal Hits: &f%total_hits%" - - " &f✱ &cTotal Hits Received: &f%total_hits_received%" - - "" - - " &f✱ &cLongest Combo: &f%longest_combo%" - - " &f✱ &cAvarage CPS: &f%avarage_cps%" - - "&8&m------------------------" - VIEW-ROUND: - NAME: "&7&lClick-here &7to view your round &c%round% &7statstics." - MATERIAL: PAPER - PLAYER-INVENTORY: - TITLE: "&c%player%'s &8inventory" - ICONS: - FILLER-ITEM: - NAME: " " - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 15 - HEALTH: - NAME: "&cHealth: &f20/%health% &c♥" - MATERIAL: REDSTONE - HUNGER: - NAME: "&cHunger: &f20/%hunger%" - MATERIAL: COOKED_BEEF - EFFECT: - FORMAT: " &f✱ &c%name% %amplifier% &7- &f %time%" - ICON: - NAME: "&cPotion Effects" - MATERIAL: POTION - DAMAGE: 8233 - LORE: - - "&8&m------------------------" - - "%effects%" - - "&8&m------------------------" - UNRANKED-GUI: - LB-FORMAT: "&e%placement%# &f%player% &7» &f%score%" - FIRST-CATEGORY: - TITLE: "&9&lJoin %weight_class% Queue" - ICONS: - LADDER: - NAME: "%ladder%" - LORE: # Options: %elo%, %win%, %kills%, %deaths%, %win_streak%, %best_win_streak%, %lose_streak%, %best_lose_streak% - - " &c&l» &eUnranked" - - " &fFighting: &e%in_fight%" - - " &fQueueing: &e%in_queue%" - - "" - - "&eWinstreak Top 3" - - "%lb_win_streak_1%" - - "%lb_win_streak_2%" - - "%lb_win_streak_3%" - - "" - - "&eClick here to join the %weight_class% %ladder% &equeue." - FILLER-ITEM: - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 15 - GO-TO-SECOND-CATEGORY: - NAME: "&9&lNext Page" - MATERIAL: ARROW - SECOND-CATEGORY: - TITLE: "&9&lJoin %weight_class% Queue" - ICONS: - LADDER: - NAME: "%ladder%" - LORE: # Options: %elo%, %win%, %kills%, %deaths%, %win_streak%, %best_win_streak%, %lose_streak%, %best_lose_streak% - - " &c&l» &eUnranked" - - " &fFighting: &e%in_fight%" - - " &fQueueing: &e%in_queue%" - - "" - - "&eWinstreak Top 3" - - "%lb_win_streak_1%" - - "%lb_win_streak_2%" - - "%lb_win_streak_3%" - - "" - - "&eClick here to join the %weight_class% %ladder% &equeue." - FILLER-ITEM: - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 15 - GO-BACK-TO-FIRST-CATEGORY: - NAME: "&9&lPrevious Page" - MATERIAL: ARROW - ICONS: - FROZEN-LADDER-ITEM: # You can set different material and damage for this item. - NAME: "%ladder%" - LORE: - - "" - - "&eThis ladder is &bfrozen&e." - DISABLED-LADDER-ITEM: # You can set different material and damage for this item. - NAME: "%ladder%" - LORE: - - "" - - "&eThis ladder is &cdisabled&e." - RANKED-GUI: - LB-FORMAT: "&e%placement%# &f%player% &7» &f%score%" - FIRST-CATEGORY: - TITLE: "&4&lJoin %weight_class% Queue" - ICONS: - LADDER: - NAME: "%ladder%" - LORE: # Options: %elo%, %win%, %kills%, %deaths%, %win_streak%, %best_win_streak%, %lose_streak%, %best_lose_streak% - - " &c&l» &cRanked" - - " &fFighting: &e%in_fight%" - - " &fQueueing: &e%in_queue%" - - "" - - "&eElo Top 3" - - "%lb_elo_1%" - - "%lb_elo_2%" - - "%lb_elo_3%" - - "" - - "&eClick here to join the %weight_class% %ladder% &equeue." - FILLER-ITEM: - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 15 - GO-TO-SECOND-CATEGORY: - NAME: "&9&lNext Page" - MATERIAL: ARROW - SECOND-CATEGORY: - TITLE: "&4&lJoin %weight_class% Queue" - ICONS: - LADDER: - NAME: "%ladder%" - LORE: # Options: %elo%, %win%, %kills%, %deaths%, %win_streak%, %best_win_streak%, %lose_streak%, %best_lose_streak% - - " &c&l» &cRanked" - - " &fFighting: &e%in_fight%" - - " &fQueueing: &e%in_queue%" - - "" - - "&eWinstreak Top 3" - - "%lb_win_streak_1%" - - "%lb_win_streak_2%" - - "%lb_win_streak_3%" - - "" - - "&eClick here to join the %weight_class% %ladder% &equeue." - FILLER-ITEM: - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 15 - GO-BACK-TO-FIRST-CATEGORY: - NAME: "&9&lPrevious Page" - MATERIAL: ARROW - ICONS: - FROZEN-LADDER-ITEM: # You can set different material and damage for this item. - NAME: "%ladder%" - LORE: - - "" - - "&eThis ladder is &bfrozen&e." - DISABLED-LADDER-ITEM: # You can set different material and damage for this item. - NAME: "%ladder%" - LORE: - - "" - - "&eThis ladder is &cdisabled&e." - SPECTATOR-MENU: - TITLE: "&8Spectator Menu - Page %page%" - ICONS: - PAGE-LEFT: - NAME: "&6Go to Page %page%" - MATERIAL: ARROW - CLOSE: - NAME: "&cClose Spectator Menu" - MATERIAL: ARROW - PAGE-RIGHT: - NAME: "&6Go to Page %page%" - MATERIAL: ARROW - FILLER-ITEM: - NAME: " " - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 15 - MATCH-ICON: - NAME: "%match_type%" - LORE: - - "&8#%match_id%" - - "%weight_class%" - - "" - - "&eMatch Type: &f%match_type%" - - "&eKit: &f%ladder%" - - "&eArena: &f%arena%" - - "&eRound: &f%round%" - - "&eDuration: &f%roundDuration%" - - "&eSpectators: &f%spectators%" - - "" - - "&a» Click to spectate «" - EVENT-ICON: - NAME: "&e%event_type%" - LORE: - - "&eDuration: &f%event_duration%" - - "&ePlayers: &f%players%" - - "&eSpectators: &f%spectators%" - - "" - - "&a» Click to spectate «" - FFA-ICON: - BUILD-STATUS: - ENABLED: "&aEnabled" - DISABLED: "&cDisabled" - NAME: "&6FFA" - LORE: - - "&eBuild: &f%build_status%" - - "&eArena: &f%arena%" - - "&ePlayers: &f%players%" - - "&eSpectators: &f%spectators%" - - "" - - "&a» Click to spectate «" - SETUP: - HUB: - TITLE: "&cServer Manager" - ICONS: - GENERAL-FILLER-ITEM: - NAME: " " - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 1 - ARENA-MANAGER: - NAME: "&6Arena Manager" - MATERIAL: NETHER_STAR - LADDER-MANAGER: - NAME: "&eLadder Manager" - MATERIAL: GOLD_SWORD - HOLOGRAM-MANAGER: - NAME: "&bHologram Manager" - MATERIAL: PAPER - EVENT-MANAGER: - NAME: "&2Event Manager" - MATERIAL: IRON_HELMET - SERVER-MANAGER: - NAME: "&cServer Manager" - MATERIAL: NAME_TAG - FFA-ARENA: - MAIN: - TITLE: "&9%arenaName% &8- Arena" - ICONS: - GO-BACK: - NAME: "&cGo Back" - MATERIAL: ARROW - DELETE: - NAME: "&cDelete Arena" - MATERIAL: INK_SACK - DAMAGE: 1 - ARENA-NAME: - NAME: "&6%arenaDisplayName%" - MATERIAL: BEDROCK - LORE: - - "" - - "&eArena Type: &b%arenaType%" - - "" - - "&e&lLeft-Click here &7to get detailed information." - - "&6&lRight-Click here &7to get a setup item for the arena." - - "" - - "&7You can set the arenas icon by using the" - - "&7&l/arena set icon %arenaName% &7command." - - "" - - "&c&lNote: &7You have to hold the item in your hand" - - "&7and name it first with the &7&l/prac rename &7command." - SETTINGS: - NAME: "&5Settings" - MATERIAL: REDSTONE - LORE: - - "" - - "&e&lClick here &7to open the settings gui." - - "" - - "&c&lNote: &7You can change the build setting," - - "&7re-kit after kill setting and the lobby after" - - "&7death setting." - STATUS: - ENABLED: - NAME: "&7Status: &aEnabled" - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 5 - LORE: - - "" - - "&e&lClick here &7to &cdisable &7the arena." - - "" - - "&c&lNote: &7This will remove all the" - - "&7players from the arena." - DISABLED: - NAME: "&7Status: &cDisabled" - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 14 - LORE: - - "" - - "&e&lClick here &7to &aenable &7the arena." - - "" - - "&c&lNote: &7The arena has to meet some" - - "&7requirements to be enable:" - - " &8» &eMark all the corners." - - " &8» &eAdd spawn positions." - - " &8» &eSet an icon." - LOCATION: - NAME: "&5Locations" - MATERIAL: COMPASS - LORE: - - "" - - "&5&lCurrently Marked:" - - " &5» &dCorner 1: &7%corner1%" - - " &5» &dCorner 2: &7%corner2%" - - "" - - " &5» &dSpawn Positions: &7%ffa_pos_num%" - LADDER: - NAME: "&cLadder Types" - MATERIAL: GOLD_SWORD - LORE: - - "" - - "&e&lClick here &7to open the ladder assign gui." - - "" - - "&c&lNote: &7You can only assign basic or build" - - "&7ladders to your FFA arena depending on the arenas" - - "&7build setting." - - "" - - "&c&lNote: &7You have to assign at least" - - "&7one ladder before enabling." - OPEN-STATUS: - OPEN: - NAME: "&7The &eFFA &7is currently &aopen" - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 5 - LORE: - - "" - - "&7This means that players can join" - - "&7and play in the arena." - - "" - - "&e&lClick here &7to &cCLOSE &7the arena." - - "" - - "&c&lNote: &7This will remove all the" - - "&7players from the arena." - CLOSE: - NAME: "&7The &eFFA &7is currently &cclosed" - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 14 - LORE: - - "" - - "&e&lClick here &7to &aOPEN &7the arena." - - "" - - "&c&lNote: &7The arena has to be enabled." - SETTINGS: - TITLE: "&4%arenaName% &8- Settings" - ICONS: - GO-BACK: - NAME: "&cGo Back" - MATERIAL: ARROW - FILLER: - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 15 - BUILD: - ENABLED: - NAME: "&7Build: &aEnabled" - MATERIAL: IRON_PICKAXE - LORE: - - "" - - "&e&lClick here &7to &cdisable &7the" - - "&2building &7in the arena." - - "" - - "&c&lNote: &7This will remove all the" - - "&7assigned ladders from the arena." - DISABLED: - NAME: "&7Build: &cDisabled" - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 14 - LORE: - - "" - - "&e&lClick here &7to &aenable &7the" - - "&2building &7in the arena." - - "" - - "&c&lNote: &7This will remove all the" - - "&7assigned ladders from the arena." - RE-KIT-AFTER-KILL: - ENABLED: - NAME: "&7Re-Kit After Kill: &aEnabled" - MATERIAL: DIAMOND_SWORD - LORE: - - "" - - "&eAfter a player kills somebody" - - "ðey get a new kit." - - "" - - "&e&lClick here &7to &cdisable &7the" - - "&2re-kit after kill &7in the arena." - DISABLED: - NAME: "&7Re-Kit After Kill: &cDisabled" - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 14 - LORE: - - "" - - "&eAfter a player kills somebody" - - "ðey get a new kit." - - "" - - "&e&lClick here &7to &aenable &7the" - - "&2re-kit after kill &7in the arena." - LOBBY-AFTER-DEATH: - ENABLED: - NAME: "&7Lobby After Death: &aEnabled" - MATERIAL: DIAMOND_SWORD - LORE: - - "" - - "&eAfter a player dies they get" - - "&eteleported back to the arena." - - "" - - "&e&lClick here &7to &cdisable &7the" - - "&2lobby after death &7setting in the arena." - DISABLED: - NAME: "&7Lobby After Death: &cDisabled" - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 14 - LORE: - - "" - - "&eAfter a player dies they get" - - "&eteleported back to the arena." - - "" - - "&e&lClick here &7to &aenable &7the" - - "&2lobby after death &7setting in the arena." - ARENA-LADDERS-SINGLE: - TITLE: "&4%arenaName% &8- Ladders" - ICONS: - BACK-TO: - NAME: "&cGo Back" - MATERIAL: ARROW - LADDER-ICONS: - ASSIGNED: - NAME: "&a%ladderDisplayName%" - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 5 - LORE: - - "" - - "&7This ladder is &aassigned&7 for the arena." - - "" - - "&eClick here &7to &cunassign&7." - NOT-ASSIGNED: - NAME: "&c%ladderDisplayName%" - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 14 - LORE: - - "" - - "&7This ladder is &cunassigned&7 for the arena." - - "" - - "&eClick here &7to &aassign&7." - DISABLED: - NAME: "&7%ladderDisplayName%" - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 7 - LORE: - - "" - - "&7This ladder or it's ladder type" - - "&7is currently &cdisabled&7." - ARENA: - ARENA-MANAGER: - TITLE: "&8Arena Manager - Page %page%" - ICONS: - PAGE-LEFT: - NAME: "&6Go to Page %page%" - MATERIAL: ARROW - BACK-TO: - NAME: "&cBack to Server Manager" - MATERIAL: ARROW - PAGE-RIGHT: - NAME: "&6Go to Page %page%" - MATERIAL: ARROW - ARENA-ICON: - STATUS-NAMES: - ENABLED: "&aEnabled" - DISABLED: "&cDisabled" - BUILD: - NAME: "&6%arenaName%" - MATERIAL: BEDROCK - LORE: - - "" - - "&6Arena Information:" - - " &7» &eType: &b%type%" - - " &7» &eState: &b%state%" - - " &7» &eCopies: &7%copies%/64" - - " &7» &eLadders: &7%assigned_ladders%/%assignable_ladders%" - - "" - - "&a&lLeft-Click &ato open arena settings." - - "&b&lRight-Click &bto to teleport to arena." - NON-BUILD: - NAME: "&6%arenaName%" - MATERIAL: BEDROCK - LORE: - - "" - - "&6Arena Information:" - - " &7» &eType: &b%type%" - - " &7» &eState: &b%state%" - - " &7» &eLadders: &7%assigned_ladders%/%assignable_ladders%" - - "" - - "&a&lLeft-Click &ato open arena settings." - - "&b&lRight-Click &bto to teleport to arena." - FFA: - NAME: "&6%arenaName%" - MATERIAL: BEDROCK - LORE: - - "" - - "&6Arena Information:" - - " &7» &eType: &bFFA" - - " &7» &eState: &b%state%" - - " &7» &eBuild: &b%build%" - - "" - - "&a&lLeft-Click &ato open arena settings." - - "&b&lRight-Click &bto to teleport to arena." - ARENA-MAIN: - TITLE: "&4%arenaName% &8- Arena" - ICONS: - GO-BACK: - NAME: "&cGo Back" - MATERIAL: ARROW - DELETE: - NAME: "&cDelete Arena" - MATERIAL: INK_SACK - DAMAGE: 1 - ARENA-NAME: - NAME: "&6%arenaDisplayName%" - MATERIAL: BEDROCK - LORE: - - "" - - "&eArena Type: &b%arenaType%" - - "" - - "&e&lLeft-Click here &7to get detailed information." - - "&6&lRight-Click here &7to get a setup item for the arena." - - "" - - "&7You can set the arenas icon by using the" - - "&7&l/arena seticon %arenaName% &7command." - - "&c&lNote: &7You have to hold the item in your hand" - - "&7and name it first with the &7&l/prac rename &7command." - STATUS: - ENABLED: - NAME: "&7Status: &aEnabled" - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 5 - LORE: - - "" - - "&e&lClick here &7to &cdisable &7the arena." - DISABLED: - NAME: "&7Status: &cDisabled" - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 14 - LORE: - - "" - - "&e&lClick here &7to &aenable &7the arena." - - "" - - "&c&lNote: &7The arena has to meet some" - - "&7requirements to be enable:" - - " &8» &eMark all the corners." - - " &8» &eSet all the positions." - - " &8» &eSet an icon." - LOCATION: - BUILD: - NAME: "&5Locations" - MATERIAL: COMPASS - LORE: - - "" - - "&5&lCurrently Marked:" - - " &5» &dCorner 1: &7%corner1%" - - " &5» &dCorner 2: &7%corner2%" - - "" - - " &5» &dSide Build Limit: &7%sideBuildLimit%" - - " &5» &dBuild Max Y: &7%buildMaxY%" - - " &5» &dDeath Zone Y: &7%deathZoneY%" - - "" - - " &5» &dPlayer 1 Position: &7%position1%" - - " &5» &dPlayer 2 Position: &7%position2%" - - "" - - " &5» &dBed 1: &7%bed1%" - - " &5» &dBed 2: &7%bed2%" - - " &5» &dPortal 1: &7%portal1%" - - " &5» &dPortal 2: &7%portal2%" - NOT-BUILD: - NAME: "&5Locations" - MATERIAL: COMPASS - LORE: - - "" - - "&5&lCurrently Marked:" - - " &5» &dCorner 1: &7%corner1%" - - " &5» &dCorner 2: &7%corner2%" - - "" - - " &5» &dDeath Zone Y: &7%deathZoneY%" - - "" - - " &5» &dPlayer 1 Position: &7%position1%" - - " &5» &dPlayer 2 Position: &7%position2%" - LADDER: - NAME: "&cLadder Types" - MATERIAL: GOLD_SWORD - LORE: - - "" - - "&e&lClick here &7to open the ladder type setup gui." - - "" - - "&c&lNote: &7You won't be able to enable" - - "&7non-build ladders for build arenas and vice versa." - - "" - - "&c&lNote: &7You have to add at least" - - "&7one ladder before enabling." - COPIES: - NAME: "&eArena Copies" - MATERIAL: HOPPER - LORE: - - "" - - "&e&lClick here &7to complete the following" - - "&7tasks with the arena copies:" - - " &8» &7Create" - - " &8» &7Delete" - - " &8» &7Look through" - - " &8» &7Teleport" - FREEZE: - FROZEN: - NAME: "&eThe arena is &bfrozen&e." - MATERIAL: SNOW_BALL - LORE: - - "" - - "&7Click here to &adefrost&7." - - "" - - "&7The players will be able to" - - "&7play in this arena again." - NOT-FROZEN: - NAME: "&eThe arena is &anot frozen&e." - MATERIAL: DOUBLE_PLANT - LORE: - - "" - - "&eClick here to &bfreeze &eit." - - "" - - "&7This means that the players won't be" - - "&7able to start a new match in this arena." - ARENA-COPY: - TITLE: "&4%arenaName% &8- Copies, Page %page%" - ICONS: - NAV-MAIN: - NAME: "&c%arenaDisplayName% &7Arena Copies Manager" - MATERIAL: REDSTONE - LORE: - - "" - - "&7Copies: &e%copies%&7/64" - - "" - - "&cNote: &7You can't change anything in the" - - "&7copies, nor the arena, if it has copies." - COPY-ARENA: - NAME: "&c%arenaDisplayName% &7(&e%copyNumber%&7)" - MATERIAL: HOPPER - LORE: - - "" - - "&e&lClick here &7to teleport to the copy arena." - PAGE-LEFT: - NAME: "&6Go to Page %page%" - MATERIAL: ARROW - BACK-TO: - NAME: "&cGo Back" - MATERIAL: ARROW - PAGE-RIGHT: - NAME: "&6Go to Page %page%" - MATERIAL: ARROW - DELETE: - NAME: "&eClick here to &cdelete ðe &6last &ecopy." - MATERIAL: ARROW - GENERATE: - NAME: "&eClick here to &agenerate &ea &6new &ecopy." - MATERIAL: ARROW - ARENA-LADDERS-TYPE: - TITLE: "&4%arenaName% &8- Ladders" - ICONS: - BACK-TO: - NAME: "&cGo Back" - MATERIAL: ARROW - GO-TO-LADDERS: - NAME: "&cLadders" - MATERIAL: GOLDEN_CARROT - LORE: - - "" - - "&e&lClick here &7to open the ladder setup gui." - - "" - - "&c&lNote: &7The plugin automatically assign" - - "&7every ladder of which type is enabled." - LADDER-TYPE-ICONS: - ENABLED: - NAME: "&a%ladderTypeName%" - LORE: - - "" - - "&7Ladder type is &aenabled&7." - - "" - - "&eClick here &7to &cdisable &7it." - DISABLED: - NAME: "&c%ladderTypeName%" - LORE: - - "" - - "&7Ladder type is &cdisabled&7." - - "" - - "&eClick here &7to &aenable &7it." - CUSTOM-KIT-ICONS: - ICON: - NAME: "&eCustom Kit: %status%" - MATERIAL: ARROW - LORE: - - "" - - "&7This setting decides if the players" - - "&7can use their custom kits in this arena." - ARENA-LADDERS-SINGLE: - TITLE: "&4%arenaName% &8- Ladders" - ICONS: - BACK-TO: - NAME: "&cGo Back" - MATERIAL: ARROW - LADDER-ICONS: - ASSIGNED: - NAME: "&a%ladderDisplayName%" - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 5 - LORE: - - "" - - "&7This ladder is &aassigned&7 for the arena." - - "" - - "&eClick here &7to &cunassign&7." - NOT-ASSIGNED: - NAME: "&c%ladderDisplayName%" - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 14 - LORE: - - "" - - "&7This ladder is &cunassigned&7 for the arena." - - "" - - "&eClick here &7to &aassign&7." - DISABLED: - NAME: "&7%ladderDisplayName%" - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 7 - LORE: - - "" - - "&7This ladder or it's ladder type" - - "&7is currently &cdisabled&7." - NOT-COMPATIBLE: - NAME: "&7%ladderDisplayName%" - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 7 - LORE: - - "" - - "&7This ladder is &cnot compatible" - - "&7with the arena because of the" - - "&7build status." - LADDER: - LADDER-MANAGER: - TITLE: "&8Ladder Manager" - ICONS: - BACK-TO: - NAME: "&cBack to Server Manager" - MATERIAL: ARROW - LADDER-ICON: - STATUS-NAMES: - ENABLED: "&aEnabled" - DISABLED: "&cDisabled" - NAME: "&6%ladder%" - MATERIAL: BEDROCK - LORE: - - "" - - "&6Ladder Information:" - - " &7» &eType: &b%type%" - - " &7» &eState: %ladderState%" - - " &7» &eRanked: %rankedState%" - - " &7» &eFreeze: %freezeState%" - - "" - - "&b&lClick here &bto open ladder settings." - LADDER-MAIN: - TITLE: "&1%ladder% &8- Ladder" - ICONS: - BACK-TO: - NAME: "&cGo Back" - MATERIAL: ARROW - LADDER-NAME: - NAME: "&6%ladder%" - MATERIAL: BEDROCK - LORE: - - "" - - "&eLadder Type: &b%type%" - - "" - - "&7You can set the ladders icon by using the" - - "&7&l/ladder seticon %ladder% &7command." - - "" - - "&b&lNote: &7You have to hold the item in your hand and" - - "&7you have to name it first with the &l/prac rename &7command." - STATUS: - ENABLED: - NAME: "&7Status: &aEnabled" - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 5 - LORE: - - "" - - "&e&lClick here &7to &cdisable &7the ladder." - - "" - - "&c&lNote: &cThis will delete all the players" - - "&ccustom kits with this ladder." - - "&c&lYou won't be able to reverse this action." - DISABLED: - NAME: "&7Status: &cDisabled" - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 14 - LORE: - - "" - - "&e&lClick here &7to &aenable &7the ladder." - - "" - - "&c&lNote: &7The ladder has to meet some" - - "&7requirements to be enable:" - - " &8» &eSet an icon." - - " &8» &eSet the inventory." - FREEZE: - FROZEN: - NAME: "&eThe ladder is &bfrozen&e." - MATERIAL: SNOW_BALL - LORE: - - "" - - "&7Click here to &adefrost&7." - - "" - - "&7The players will be able to edit" - - "&7and play with this ladder again." - NOT-FROZEN: - NAME: "&eThe ladder is &anot frozen&e." - MATERIAL: DOUBLE_PLANT - LORE: - - "" - - "&eClick here to &bfreeze &eit." - - "" - - "&7This means that the players" - - "&7won't be able to start a new match" - - "&7and edit this ladder." - INVENTORY: - NAME: "&3Inventory & Armor" - MATERIAL: DIAMOND_CHESTPLATE - LORE: - - "" - - "&b&lClick here &7to edit the inventory" - - "&7and armor content of the ladder." - - "&7You can also view the added effects as well." - DESTROYABLE-BLOCKS: - NAME: "&cDestroyable Blocks" - MATERIAL: ENDER_STONE - LORE: - - "" - - "&c&lClick here &7to edit the blocks" - - "&7that can be destroyed during the game" - - "&7and are already placed in the arena." - SETTINGS: - NAME: "&4Settings" - MATERIAL: REDSTONE - LORE: - - "" - - "&e&lClick here &7to adjust the ladders" - - "&7other settings, such as:" - - " &8» &cRounds" - - " &8» &cRanked" - - " &8» &cPlayer Regeneration" - - " &8» &cPlayer Hunger" - - " &cetc..." - MATCH-TYPE: - NAME: "&6Match Types" - MATERIAL: BOOK - LORE: - - "" - - "&6&lClick here &7to set which" - - "&7match types should be available" - - "&7for the ladder." - DELETE: - NAME: "&cDelete Ladder" - MATERIAL: INK_SACK - DAMAGE: 1 - SETTINGS: - TITLE: "&1%ladder% &8- Settings" - ICONS: - GO-BACK: - NAME: "&cGo Back" - MATERIAL: ARROW - REGENERATION: - ENABLED: - NAME: "&7Regeneration: &aEnabled" - MATERIAL: GLOWSTONE_DUST - LORE: - - "" - - "&7Players health is automatically regenerate (normally)." - - "" - - "&e&lClick here &7to &cdisable&7." - DISABLED: - NAME: "&7Regeneration: &cDisabled" - MATERIAL: GLOWSTONE_DUST - LORE: - - "" - - "&7Players health is not regenerate." - - "" - - "&e&lClick here &7to &aenable&7." - HUNGER: - ENABLED: - NAME: "&7Hunger: &aEnabled" - MATERIAL: COOKED_BEEF - LORE: - - "" - - "&7Players starve during the game." - - "" - - "&e&lClick here &7to &cdisable&7." - DISABLED: - NAME: "&7Hunger: &cDisabled" - MATERIAL: COOKED_BEEF - LORE: - - "" - - "&7Players don't starve." - - "" - - "&e&lClick here &7to &aenable&7." - ROUNDS: - NAME: "&7Rounds: &6%rounds%" - MATERIAL: FIREWORK_CHARGE - LORE: - - "" - - "&7The first player/team to reach" - - "&7the, winning rounds wins." - - "" - - "&a&lLEFT-CLICK &ato reduce the rounds." - - "&b&lRIGHT-CLICK &bto increase the rounds." - KNOCKBACK: - NAME: "&eKnockback Modifier" - MATERIAL: STICK - LORE: - - "" - - "%knockbackTypes%" - - "" - - "&c&lNote: &7Default won't change the knockback." - - "&7You can change the normal and combo knockbacks" - - "&7in the config file." - HITDELAY: - NAME: "&7Hitdelay: &6%hitdelay% tick" - MATERIAL: DIAMOND_SWORD - LORE: - - "" - - "&7Players can hit each other" - - "&7at these intervals." - - "" - - "&c&lNote: &71 sec = 20 tick" - - "" - - "&a&lLEFT-CLICK &ato reduce the rounds." - - "&b&lRIGHT-CLICK &bto increase the rounds." - MAX-DURATION: - NAME: "&7Max Duration: &6%maxDuration% sec" - MATERIAL: WATCH - LORE: - - "" - - "&7The maximum time the match can last." - - "" - - "&a&lLEFT-CLICK &ato reduce the time." - - "&b&lRIGHT-CLICK &bto increase the time." - TNT-FUSE-TIME: - NAME: "&7TNT Fuse Time: &6%tntFuseTime% sec" - MATERIAL: TNT - LORE: - - "" - - "&7The time until the tnt explodes." - - "" - - "&a&lLEFT-CLICK &ato reduce the time." - - "&b&lRIGHT-CLICK &bto increase the time." - EDITABLE: - ENABLED: - NAME: "&7Editable: &aEnabled" - MATERIAL: BOOK - LORE: - - "" - - "&7Players can customize the ladder." - - "" - - "&e&lClick here &7to &cdisable&7." - DISABLED: - NAME: "&7Editable: &cDisabled" - MATERIAL: BOOK - LORE: - - "" - - "&7Players can't customize the ladder." - - "" - - "&e&lClick here &7to &aenable&7." - WEIGHT-CLASS: - NAME: "&eWeight Class Selector" - MATERIAL: DOUBLE_PLANT - LORE: - - "" - - "%weightClassTypes%" - START-COUNTDOWN: - NAME: "&7Start Countdown: &6%startCountdown%" - MATERIAL: WATCH - LORE: - - "" - - "&7When the match/round starts the server" - - "&7counts down this amount of time." - - "" - - "&a&lLEFT-CLICK &ato reduce the time." - - "&b&lRIGHT-CLICK &bto increase the time." - START-MOVING: - ENABLED: - NAME: "&7Start moving: &aEnabled" - MATERIAL: DIRT - LORE: - - "" - - "&7Players can move during" - - "&7round start countdown." - - "" - - "&e&lClick here &7to &cdisable&7." - DISABLED: - NAME: "&7Start moving: &cDisabled" - MATERIAL: DIRT - LORE: - - "" - - "&7Players can't move during" - - "&7round start countdown." - - "" - - "&e&lClick here &7to &aenable&7." - HEALTH-BELOW-NAME: - ENABLED: - NAME: "&7Health Below Name: &aEnabled" - MATERIAL: INK_SACK - DAMAGE: 1 - LORE: - - "" - - "&7Players will display their hearts" - - "&7during the match." - - "" - - "&e&lClick here &7to &cdisable&7." - DISABLED: - NAME: "&7Health Below Name: &cDisabled" - MATERIAL: INK_SACK - DAMAGE: 1 - LORE: - - "" - - "&7Players will display their hearts" - - "&7during the match." - - "" - - "&e&lClick here &7to &aenable&7." - RESET-BUILD-AFTER-ROUND: - ENABLED: - NAME: "&7Reset Build After Round: &aEnabled" - MATERIAL: GRASS - LORE: - - "" - - "&7The arena will be reset after each" - - "&7round, before the next one starts." - - "" - - "&e&lClick here &7to &cdisable&7." - DISABLED: - NAME: "&7Reset Build After Round: &cDisabled" - MATERIAL: GRASS - LORE: - - "" - - "&7The arena will not be reset between" - - "&7rounds. Placed blocks persist." - - "" - - "&e&lClick here &7to &aenable&7." - BREAK-ALL-BLOCKS: - ENABLED: - NAME: "&7Break All Blocks: &aEnabled" - MATERIAL: DIAMOND_PICKAXE - LORE: - - "" - - "&7Players can break any block in the arena," - - "&7not just blocks they placed themselves." - - "" - - "&e&lClick here &7to &cdisable&7." - DISABLED: - NAME: "&7Break All Blocks: &cDisabled" - MATERIAL: WOOD_PICKAXE - LORE: - - "" - - "&7Players can only break blocks they" - - "&7placed during the match." - - "" - - "&e&lClick here &7to &aenable&7." - FIREBALL-BLOCK-DESTROY: - ENABLED: - NAME: "&7Fireball Block Destroy: &aEnabled" - MATERIAL: FIREBALL - LORE: - - "" - - "&7Fireball explosions will destroy" - - "&7blocks placed by players." - - "&8(Arena blocks are not affected)" - - "" - - "&e&lClick here &7to &cdisable&7." - DISABLED: - NAME: "&7Fireball Block Destroy: &cDisabled" - MATERIAL: FIREBALL - LORE: - - "" - - "&7Fireball explosions will not" - - "&7destroy any blocks." - - "" - - "&e&lClick here &7to &aenable&7." - SPLEEF-SNOWBALL-MODE: - ENABLED: - NAME: "&7Snowball Mode: &aEnabled" - MATERIAL: SNOW_BALL - LORE: - - "" - - "&7Breaking a snow block gives a snowball." - - "&7Throw snowballs to destroy snow blocks" - - "&7beneath other players." - - "" - - "&e&lClick here &7to &cdisable&7." - DISABLED: - NAME: "&7Snowball Mode: &cDisabled" - MATERIAL: SNOW_BALL - LORE: - - "" - - "&7Enable to let players collect and throw" - - "&7snowballs that destroy snow blocks." - - "" - - "&e&lClick here &7to &aenable&7." - ENDERPEARL-COOLDOWN: - NAME: "&7EnderPearl Cooldown: &6%epCooldown% sec" - MATERIAL: ENDER_PEARL - LORE: - - "" - - "&7Players must wait this long before" - - "&7they can throw the next enderpearl." - - "" - - "&a&lLEFT-CLICK &ato reduce the cooldown." - - "&b&lRIGHT-CLICK &bto increase the cooldown." - GOLDENAPPLE-COOLDOWN: - NAME: "&7Golden Apple Cooldown: &6%golden_apple_cooldown%" - MATERIAL: GOLDEN_APPLE - LORE: - - "" - - "&7Players must wait this long before" - - "&7they can consume the next golden apple." - - "" - - "&7This setting includes both enchanted" - - "&7and non-enchanted golden apples." - - "" - - "&a&lLEFT-CLICK &ato reduce the cooldown." - - "&b&lRIGHT-CLICK &bto increase the cooldown." - DROP-INVENTORY-PARTY-GAMES: - ENABLED: - NAME: "&7Drop Inventory: &aEnabled" - MATERIAL: GHAST_TEAR - LORE: - - "" - - "&7When several players are playing a" - - "&7party match and someone dies, should" - - "&7the inventory be dropped out or not." - - "" - - "&e&lClick here &7to &cdisable&7." - DISABLED: - NAME: "&7Drop Inventory: &cDisabled" - MATERIAL: GHAST_TEAR - LORE: - - "" - - "&7When several players are playing a" - - "&7party match and someone dies, should" - - "&7the inventory be dropped out or not." - - "" - - "&e&lClick here &7to &aenable&7." - MULTI-ROUND-START-COUNTDOWN: - ENABLED: - NAME: "&7Multi Round Start Countdown: &aEnabled" - MATERIAL: QUARTZ - LORE: - - "" - - "&7If a ladder has several rounds," - - "&7you have the option to turn off" - - "&7the start counter before the" - - "&7round with this setting." - - "" - - "&c&lNote: &7At the start of the match," - - "&7the counter will work the same way." - - "" - - "&e&lClick here &7to &cdisable&7." - DISABLED: - NAME: "&7Multi Round Start Countdown: &cDisabled" - MATERIAL: QUARTZ - LORE: - - "" - - "&7If a ladder has several rounds," - - "&7you have the option to turn off" - - "&7the start counter before the" - - "&7round with this setting." - - "" - - "&c&lNote: &7At the start of the match," - - "&7the counter will work the same way." - - "" - - "&e&lClick here &7to &aenable&7." - SKYWARS: - NAME: "&6SkyWars Chest Loot" - MATERIAL: CHEST - LORE: - - "" - - "&e&lClick here &7to edit the" - - "&7loot which the players get when" - - "&7they open chests during the game." - TEMP-BUILD: - NAME: "&7Temp Build delay: &6%tempBuildDelay% sec" - MATERIAL: MELON_BLOCK - LORE: - - "" - - "&7All blocks placed during the match." - - "&7will disappear after this time" - - "" - - "&a&lLEFT-CLICK &ato reduce the delay." - - "&b&lRIGHT-CLICK &bto increase the delay." - BOXING: - NAME: "&7Boxing Strokes to Win: &6%boxingWinHits%" - MATERIAL: LEVER - LORE: - - "" - - "&7A player or team wins if they have" - - "&7gained that many strokes." - - "&7In a team match, player's" - - "&7strokes are added together." - - "" - - "&a&lLEFT-CLICK &ato reduce the strokes." - - "&b&lRIGHT-CLICK &bto increase the strokes." - RESPAWN: - NAME: "&7Respawn Time: &6%respawnTime%" - MATERIAL: BED - LORE: - - "" - - "&7That's how long it takes" - - "&7for a player to come back to life" - - "&7when he dies without his bed being broken" - - "&7or when the ladder type is battle rush / bridges." - - "" - - "&a&lLEFT-CLICK &ato reduce the time." - - "&b&lRIGHT-CLICK &bto increase the time." - FIREBALL-COOLDOWN: - NAME: "&7Fireball Cooldown: &6%cooldown% sec" - MATERIAL: FIREBALL - LORE: - - "" - - "&7Players must wait this long before" - - "&7they throw another fireball." - - "" - - "&a&lLEFT-CLICK &ato reduce the cooldown." - - "&b&lRIGHT-CLICK &bto increase the cooldown." - INVENTORY: - TITLE: "&1%ladder% &8- Inventory" - ICONS: - BACK-TO: - NAME: "&cGo Back" - MATERIAL: ARROW - CUSTOM-KIT-EDITOR: - EDITABLE: - NAME: "&6Custom Kit &7Editor" - MATERIAL: BOOK - LORE: - - "" - - "&6&lClick here &7to customize" - - "&7what extra items the players" - - "&7can add to the custom kit." - NOT-EDITABLE: - NAME: "&6Custom Kit &7Editor" - MATERIAL: BOOK - LORE: - - "" - - "&cThis ladder is not editable" - - "&cby the players." - EFFECTS: - HAS-EFFECT: - EFFECT-FORMAT: "&d%name% %amplifier% &7for %time%" - NAME: "&5Effects" - MATERIAL: POTION - DAMAGE: 8233 - LORE: - - "&8&m------------------------" - - "&c&lNote: &7You can set the effects by using" - - "&7the &7&l/ladder seteffects %ladder% &7command." - - "" - - "&aCurrently set effects:" - - "%effects%" - - "&8&m------------------------" - NO-EFFECT: - NAME: "&5Effects" - MATERIAL: POTION - DAMAGE: 8233 - LORE: - - "&8&m------------------------" - - "&7This ladder has no effects." - - "&8&m------------------------" - DESTROYABLE-BLOCKS: - TITLE: "&1%ladder% &8- D-Blocks" - ICONS: - BACK-TO: - NAME: "&cGo Back" - MATERIAL: ARROW - CUSTOM-KIT: - TITLE: "&1%ladder% &8- Custom Kit" - ICONS: - GO-BACK: - NAME: "&cGo Back" - MATERIAL: ARROW - SAVE: - NAME: "&a&lSave" - MATERIAL: WOOL - DAMAGE: 5 - LORE: - - "" - - "&cThis is just a showcase item, which" - - "&ccurrently has no functionality, but" - - "&cit demonstrates how the kit editor will look like." - LOAD: - NAME: "&e&lLoad default kit" - MATERIAL: WOOL - DAMAGE: 4 - LORE: - - "" - - "&cThis is just a showcase item, which" - - "&ccurrently has no functionality, but" - - "&cit demonstrates how the kit editor will look like." - CANCEL: - NAME: "&c&lCancel" - MATERIAL: WOOL - DAMAGE: 14 - LORE: - - "" - - "&cThis is just a showcase item, which" - - "&ccurrently has no functionality, but" - - "&cit demonstrates how the kit editor will look like." - SWITCH-WEIGHTCLASS: - ONLY-UNRANKED: - NAME: "&cThis ladder is only %weightClass%." - MATERIAL: REDSTONE - ONLY-RANKED: - NAME: "&cThis ladder is only %weightClass%." - MATERIAL: REDSTONE - SWITCH-TO-UNRANKED: - NAME: "&aSwitch to %weightClass%" - MATERIAL: WOOD_SWORD - SWITCH-TO-RANKED: - NAME: "&aSwitch to %weightClass%" - MATERIAL: IRON_SWORD - MATCH-TYPE: - TITLE: "&1%ladder% &8- Match Types" - ICONS: - GO-BACK: - NAME: "&cGo Back" - MATERIAL: ARROW - ENABLED: - NAME: "%matchType%" - MATERIAL: INK_SACK - DAMAGE: 10 - LORE: - - "" - - "&eClick here &7to &cdisable %matchType%" - - "&7match type for the ladder." - DISABLED: - NAME: "%matchType%" - MATERIAL: INK_SACK - DAMAGE: 8 - LORE: - - "" - - "&eClick here &7to &aenable %matchType%" - - "&7match type for the ladder." - SKYWARS-LOOT: - TITLE: "&1%ladder% &8- SkyWars loot" - ICONS: - GO-BACK: - NAME: "&cGo Back" - MATERIAL: ARROW - EVENT: - EVENT-MANAGER: - TITLE: "&8Event Manager" - ICONS: - BACK-TO: - NAME: "&cBack to Server Manager" - MATERIAL: ARROW - EVENT-ICON: - STATUS-NAMES: - ENABLED: "&aEnabled" - DISABLED: "&cDisabled" - NAME: "&e%eventName%" - LORE: - - "" - - "&6Event Information:" - - " &7» &eState: %state%" - - "" - - "&b&lClick here &bto open event settings." - EVENT-MAIN: - TITLE: "%eventName% &8- Event" - ICONS: - BACK-TO: - NAME: "&cGo Back" - MATERIAL: ARROW - EVENT-NAME: - NAME: "&e%eventName%" - LORE: - - "" - - "&7&lIcon Customization:" - - "&b» LEFT-CLICK &7with an item to set as icon" - - "" - - "&7&lQuick Teleport:" - - "&b» RIGHT-CLICK &7to teleport to event arena" - - "" - - "&7Change the visual icon shown in the" - - "&7Event Host GUI by clicking with any item." - SETTINGS: - NAME: "&4Settings" - MATERIAL: REDSTONE - LORE: - - "" - - "&e&lCLICK &7to configure event settings:" - - "" - - " &8» &cBroadcast Interval &7(chat announcements)" - - " &8» &cQueue Wait Time &7(before start)" - - " &8» &cMax Queue Time &7(before cancel)" - - " &8» &cGame Duration &7(match length)" - - " &8» &cStart Countdown &7(game start delay)" - - " &8» &cMin/Max Players &7(requirements)" - - "" - - "&7Fine-tune event behavior and timings." - STATUS: - ENABLED: - NAME: "&7Status: &aEnabled" - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 5 - LORE: - - "" - - "&e&lClick here &7to &cdisable &7the event." - - "" - - "&eYou can only edit the event if its disabled." - DISABLED: - NAME: "&7Status: &cDisabled" - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 14 - LORE: - - "" - - "&e&lCLICK &7to &aenable &7the event." - - "" - - "&c&lRequirements to Enable:" - - " &8» &eEvent region (2 corners) must be set" - - " &8» &eAt least 2 spawn points must be set" - - " &8» &eAll settings must be configured" - - "" - - "&7&oUse the LOCATION button to set these up!" - LOCATION: - NAME: "&5Locations" - MATERIAL: COMPASS - LORE: - - "" - - "&d&lLEFT-CLICK &7to start interactive setup mode." - - "" - - "&5&lSetup Process:" - - "&71. &dReceive Event Wand &7to configure locations" - - "&72. &dSet Corners: &7Left/Right click to mark region" - - "&73. &dAdd Spawns: &7Right click blocks to add spawn points" - - "&74. &dCycle Modes: &7Shift + Left/Right click" - - "&75. &dExit Setup: &7Drop (Q) the wand" - - "" - - "&5&lCurrently Configured:" - - " &5» &dCorner 1: &7%corner1%" - - " &5» &dCorner 2: &7%corner2%" - - " &5» &dSpawn Points: &7%spawnPositions% set" - - "" - - "&7&oNo commands needed - use the wand!" - EVENT-SETTINGS: - TITLE: "&1%eventName% &8- Settings" - ICONS: - BACK-TO: - NAME: "&cGo Back" - MATERIAL: ARROW - BROADCAST-INTERVAL: - NAME: "&7Broadcast Interval: &6%broadcastInterval% &7sec" - MATERIAL: WATCH - LORE: - - "" - - "&7The event will be announced" - - "&7every so often on the chat." - - "" - - "&a&lLEFT-CLICK &ato reduce the time." - - "&b&lRIGHT-CLICK &bto increase the time." - WAIT-BEFORE-START: - NAME: "&7Wait before event start: &6%waitBeforeStart% &7sec" - MATERIAL: ANVIL - LORE: - - "" - - "&7The event waits up to this number" - - "&7of seconds before starts the game" - - "&7if it reaches the minimum number of players." - - "" - - "&a&lLEFT-CLICK &ato reduce the time." - - "&b&lRIGHT-CLICK &bto increase the time." - MAX-QUEUE-TIME: - NAME: "&7Maximum Queue Time: &6%queueTime% &7min" - MATERIAL: BOOK - LORE: - - "" - - "&7The event waits up to this number" - - "&7of minutes before it stops the" - - "&7queue if the game does not start." - - "" - - "&a&lLEFT-CLICK &ato reduce the time." - - "&b&lRIGHT-CLICK &bto increase the time." - DURATION: - TNTTAG: - NAME: "&7Tnt Explode Time: &6%explodeTime% &7sec" - MATERIAL: TNT - LORE: - - "" - - "&7After all this time, the tnt explodes." - - "" - - "&a&lLEFT-CLICK &ato reduce the time." - - "&b&lRIGHT-CLICK &bto increase the time." - SUMO&BRACKETS: - NAME: "&7Duel Duration: &6%roundDuration% &7min" - MATERIAL: BLAZE_ROD - LORE: - - "" - - "&7This is how long 1 game session lasts." - - "" - - "&a&lLEFT-CLICK &ato reduce the time." - - "&b&lRIGHT-CLICK &bto increase the time." - OTHER: - NAME: "&7Game Duration: &6%duration% &7min" - MATERIAL: BLAZE_ROD - LORE: - - "" - - "&7That's how long the game lasts." - - "" - - "&a&lLEFT-CLICK &ato reduce the time." - - "&b&lRIGHT-CLICK &bto increase the time." - START-TIME: - NAME: "&7Start Countdown: &6%startTime% &7sec" - MATERIAL: FEATHER - LORE: - - "" - - "&7The game starts after this time." - - "" - - "&a&lLEFT-CLICK &ato reduce the time." - - "&b&lRIGHT-CLICK &bto increase the time." - MIN-PLAYER: - NAME: "&7Min Player: &6%minPlayer%" - MATERIAL: SNOW_BALL - LORE: - - "" - - "&7At least this many players must" - - "&7join the event for it to start." - - "" - - "&a&lLEFT-CLICK &ato reduce the amount." - - "&b&lRIGHT-CLICK &bto increase the amount." - MAX-PLAYER: - NAME: "&7Max Player: &6%maxPlayer%" - MATERIAL: GHAST_TEAR - LORE: - - "" - - "&7Maximum number of players" - - "&7allowed to join the event." - - "" - - "&a&lLEFT-CLICK &ato reduce the amount." - - "&b&lRIGHT-CLICK &bto increase the amount." - HOLOGRAM: - HOLOGRAM-MANAGER: - TITLE: "&8Hologram Manager" - ICONS: - BACK-TO: - NAME: "&cBack to Server Manager" - MATERIAL: ARROW - HOLOGRAM-ICON: - STATUS-NAMES: - ENABLED: "&aEnabled" - DISABLED: "&cDisabled" - TYPE-NULL: "&cN/A" - NAME: "&6%hologramName%" - MATERIAL: PAPER - LORE: - - "" - - "&6Hologram Information:" - - " &7» &eState: %state%" - - " &7» &eType: &f%type%" - - " &7» &eStats Show: &f%statsShow%" - - "" - - "&b&lLEFT-CLICK &bto open hologram settings." - - "&a&lRIGHT-CLICK &ato teleport to the hologram." - HOLOGRAM-MAIN: - TITLE: "&1%hologram% &8- Hologram" - ICONS: - BACK-TO: - NAME: "&cGo Back" - MATERIAL: ARROW - DELETE: - NAME: "&cDelete Hologram" - MATERIAL: INK_SACK - DAMAGE: 1 - EVENT-TYPE: - NAME: "&6Hologram Type" - MATERIAL: NETHER_STAR - LORE: - - "" - - "%eventTypes%" - - "" - - "&b&lClick here &bto change the hologram's type." - LADDER: - NO-LADDER-SETTINGS: - NAME: "&cThis hologram type has no ladder settings!" - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 14 - HAS-LADDER-SETTINGS: - NAME: "&3Ladder Settings" - MATERIAL: GOLD_SWORD - LORE: - - "" - - "&b&lClick here &bto open the hologram's" - - "&bladder settings." - SHOW-STATS: - NAME: "&cShow Statistics: &f%showStats%" - MATERIAL: SKULL_ITEM - DAMAGE: 3 - LORE: - - "" - - "&7The hologram will show the" - - "&7first this many statistics." - - "" - - "&a&lLEFT-CLICK &ato decrease the number." - - "&b&lRIGHT-CLICK &bto increase the number." - STATUS: - ENABLED: - NAME: "&7Status: &aEnabled" - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 5 - LORE: - - "" - - "&e&lClick here &7to &cdisable &7the hologram." - DISABLED: - NAME: "&7Status: &cDisabled" - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 14 - LORE: - - "" - - "&e&lClick here &7to &aenable &7the hologram." - - "" - - "&c&lNote: &7The hologram has to meet some" - - "&7requirements to be enabled:" - - " &8» &eSet a type." - - " &8» &eSet the ladder(s) if necessary." - HOLOGRAM-LADDERS: - TITLE: "&1%hologram% &8- Ladders" - ICONS: - GO-BACK: - NAME: "&cGo Back" - MATERIAL: ARROW - ENABLED-LADDER: - NAME: "&a%ladder%" - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 5 - LORE: - - "" - - "&7This ladder is &aenabled&7." - - "" - - "&eClick here &7to &cdisable&7." - DISABLED-LADDER: - NAME: "&c%ladder%" - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 14 - LORE: - - "" - - "&7This ladder is &cdisabled&7." - - "" - - "&eClick here &7to &aenable&7." - SERVER: - SERVER-MANAGER: - TITLE: "&8Server Manager" - ICONS: - BACK-TO: - NAME: "&eBack to hub" - MATERIAL: ARROW - INFORMATIONS: - STATUS-NAMES: - SET: "&aSet" - UNSET: "&cNot-Set" - NAME: "&eInformations" - MATERIAL: BOOK - LORE: - - "&8&m------------------------" - - "&7Online players: &e%onlinePlayers%" - - "&7Online staff: &e%onlineStaffs%" - - "" - - "&7Required unranked for ranked matches: &e%requiredDivision%" - - "" - - "&7Lobby status: %lobbyStatus%" - - "" - - "&7Enabled arenas: &e%enabledArena%" - - "&7Enabled ladders: &e%enabledLadder%" - - "&7Enabled events: &e%enabledEvents%" - - "&8&m------------------------" - LOBBY-ARMORS: - NAME: "&eLobby Armors" - MATERIAL: DIAMOND_CHESTPLATE - LORE: - - "&8&m------------------------" - - "&7Click here to edit the lobby armors." - - "&8&m------------------------" - SAVE: - NAME: "&eSave Data" - MATERIAL: SUGAR - LORE: - - "&8&m------------------------" - - "&aLeft Click &7to open a GUI" - - "&7where you can save your" - - "&7server data in sections." - - "" - - "&bRight Click &7to save all" - - "&7the server data manually." - - "&8&m------------------------" - MATCHES: - NAME: "&eLive Matches" - MATERIAL: IRON_SWORD - LORE: - - "&8&m------------------------" - - "&7Click here to view the" - - "&7live matches." - - "" - - "&7Live matches: &e%liveMatches%" - - "&8&m------------------------" - EVENTS: - NAME: "&eLive Events" - MATERIAL: BOW - LORE: - - "&8&m------------------------" - - "&7Click here to view the" - - "&7live events." - - "" - - "&7Live events: &e%liveEvents%" - - "&8&m------------------------" - LOBBY-ARMORS: - TITLE: "&8Lobby Armors" - ICONS: - BACK-TO: - NAME: "&cBack to Server Manager" - MATERIAL: ARROW - FILLER-ITEM: - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 15 - FILLER-ITEM2: - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 7 - NAME-ITEM: - NAME: "&e%inventoryName%" - MATERIAL: NAME_TAG - EVENTS: - TITLE: "&8Events" - ICONS: - BACK-TO: - NAME: "&cBack to Server Manager" - MATERIAL: ARROW - REFRESH-PAGE: - NAME: "&aRefresh Page" - MATERIAL: NETHER_STAR - LORE: - - "&8&m------------------------" - - "&7Click here to refresh the page." - - "&8&m------------------------" - EVENT-ITEM: - NAME: "%eventName%" - LORE: - - "&8&m------------------------" - - "&eEvent Type: &f%type%" - - "" - - "&ePlayers: &f%players%" - - "&eSpectators: &f%spectators%" - - "" - - "&aLeft Click &7to spectate the event." - - "&bRight Click &7to &cend &7the event." - - "&8&m------------------------" - MATCHES: - TITLE: "&8Matches - Page %page%" - ICONS: - BACK-TO: - NAME: "&cBack to Server Manager" - MATERIAL: ARROW - GO-PAGE-LEFT: - NAME: "&6Go to Page %page%" - MATERIAL: ARROW - GO-PAGE-RIGHT: - NAME: "&6Go to Page %page%" - MATERIAL: ARROW - REFRESH: - NAME: "&aRefresh Pages" - MATERIAL: NETHER_STAR - LORE: - - "&8&m------------------------" - - "&7Click here to refresh the pages." - - "&8&m------------------------" - MATCH-ICON: - NAME: "%matchType%" - LORE: - - "&8&m------------------------" - - "&8#%matchId%" - - "%weightClass%" - - "" - - "&eMatch Type: &f%matchType%" - - "&eKit: &f%ladder%" - - "&eArena: &f%arena%" - - "&eDuration: &f%roundDuration%" - - "&eSpectators: &f%spectators%" - - "" - - "&aLeft Click &7to spectate the match." - - "&bRight Click &7to &cend &7the match." - - "&8&m------------------------" - FILE-SAVE: - TITLE: "&8Data Saver" - ICONS: - BACK-TO: - NAME: "&cBack to Server Manager" - MATERIAL: ARROW - DATA-SAVE: - NAME: "&e%data% Data Save" - MATERIAL: PAPER - LORE: - - "&8&m------------------------" - - "&7Click here to manually" - - "&7save the %data% data." - - "&8&m------------------------" \ No newline at end of file diff --git a/core/src/main/resources/1.8.8/inventories.yml b/core/src/main/resources/1.8.8/inventories.yml deleted file mode 100644 index d0f23ce0..00000000 --- a/core/src/main/resources/1.8.8/inventories.yml +++ /dev/null @@ -1,249 +0,0 @@ -VERSION: 1 - -# -# Spawn inventories -# Set the slot to -1 if you don't want to display the item. -# -LOBBY-BASIC: - NORMAL: - UNRANKED: - SLOT: 0 - ITEM: - NAME: "&eUnranked Queue &7(Right-Click)" - MATERIAL: WOOD_SWORD - RANKED: - SLOT: 1 - ITEM: - NAME: "&cRanked Queue &7(Right-Click)" - MATERIAL: IRON_SWORD - ENABLE-SPECTATE-MODE: - SLOT: 3 - ITEM: - NAME: "&aEnable &eSpectate Mode &7(Right-Click)" - MATERIAL: REDSTONE_TORCH_ON - PARTY-CREATE: - SLOT: 4 - ITEM: - NAME: "&dCreate Party &7(Right-Click)" - MATERIAL: NAME_TAG - SETTINGS: - SLOT: 7 - ITEM: - NAME: "&aSettings &7(Right-Click)" - MATERIAL: WATCH - KIT-EDITOR: - SLOT: 8 - ITEM: - NAME: "&6Kit Editor &7(Right-Click)" - MATERIAL: BOOK - SETUP: - SLOT: 5 - ITEM: - NAME: "&cManage Server &7(Right-Click)" - MATERIAL: REDSTONE - STAFF-MODE: - SLOT: 5 - ITEM: - NAME: "&aEnable &dStaff Mode &7(Right-Click)" - MATERIAL: INK_SACK - DAMAGE: 5 - REMATCH: - SLOT: 3 - ITEM: - NAME: "&6Rematch &7(Right-Click)" - MATERIAL: BLAZE_POWDER - STATISTICS: - SLOT: 6 - ITEM: - NAME: "&2Statistics &7(Right-Click)" - MATERIAL: EMERALD - EXTRA: - # HERE YOU CAN PUT THE EXTRA ITEMS LIKE THIS: - #STUFF-ITEM: - # COMMAND: unranked # Don't write the / character before the command. - # SLOT: 2 - # ITEM: - # NAME: "&cStuff Item" - # MATERIAL: DIRT - # DAMAGE: 0 - # LORE: - # - "" - # - "&dLore" -# -# Party inventory items -# -PARTY: - NORMAL: - HOST-PARTY-GAME: - SLOT: 0 - ITEM: - NAME: "&eHost Party Event &7(Right-Click)" - MATERIAL: GOLD_AXE - PARTY-INFO: - SLOT: 1 - ITEM: - NAME: "&bParty Information &7(Right-Click)" - MATERIAL: NETHER_STAR - OTHER-PARTIES: - SLOT: 2 - ITEM: - NAME: "&aOther Parties &7(Right-Click)" - MATERIAL: SKULL_ITEM - LEAVE-PARTY: - SLOT: 8 - ITEM: - NAME: "&cLeave Party &7(Right-Click)" - MATERIAL: INK_SACK - DAMAGE: 1 - PARTY-SETTINGS: - SLOT: 4 - ITEM: - NAME: "&6Party Settings &7(Right-Click)" - MATERIAL: WATCH - PARTY-KIT-EDITOR: - SLOT: 7 - ITEM: - NAME: "&6Kit Editor &7(Right-Click)" - MATERIAL: BOOK - EXTRA: - # EXTRA ITEMS LIKE UPPER -# -# Queue items -# -QUEUE: - MATCH: - NORMAL: - LEAVE-MATCH-QUEUE: - SLOT: 4 - ITEM: - NAME: "&cLeave Queue &7(Right-Click)" - MATERIAL: INK_SACK - DAMAGE: 1 - EXTRA: - # EXTRA ITEMS LIKE UPPER - EVENT: - NORMAL: - LEAVE-EVENT-QUEUE: - SLOT: 4 - ITEM: - NAME: "&cLeave &e%event% &cEvent Queue &7(Right-Click)" - MATERIAL: INK_SACK - DAMAGE: 1 - EXTRA: - # EXTRA ITEMS LIKE UPPER -# -# Spectator items -# -SPECTATOR: - LOBBY: - NORMAL: - MENU: - SLOT: 5 - ITEM: - NAME: "&bSpectate Menu &7(Right-Click)" - MATERIAL: PAPER - DISABLE: - SLOT: 4 - ITEM: - NAME: "&cDisable &eSpectate Mode &7(Right-Click)" - MATERIAL: REDSTONE_TORCH_ON - RANDOM: - SLOT: 3 - ITEM: - NAME: "&aSpectate Random Match &7(Right-Click)" - MATERIAL: COMPASS - EXTRA: - # EXTRA ITEMS LIKE UPPER - MATCH: - NORMAL: - MENU: - SLOT: 5 - ITEM: - NAME: "&bSpectate Menu &7(Right-Click)" - MATERIAL: PAPER - RANDOM: - SLOT: 4 - ITEM: - NAME: "&dSpectate Random Match &7(Right-Click)" - MATERIAL: COMPASS - SHOW-SPECTATORS: - SLOT: 0 - ITEM: - NAME: "&eShow Spectators &7(Right-Click)" - MATERIAL: INK_SACK - DAMAGE: 8 - HIDE-SPECTATORS: - SLOT: 0 - ITEM: - NAME: "&eHide Spectators &7(Right-Click)" - MATERIAL: INK_SACK - DAMAGE: 10 - LEAVE: - SLOT: 8 - ITEM: - NAME: "&cStop Spectating &7(Right-Click)" - MATERIAL: INK_SACK - DAMAGE: 1 - EXTRA: - # EXTRA ITEMS LIKE UPPER - EVENT: - NORMAL: - LEAVE: - SLOT: 8 - ITEM: - NAME: "&cStop Spectating &7(Right-Click)" - MATERIAL: INK_SACK - DAMAGE: 1 - EXTRA: - # EXTRA ITEMS LIKE UPPER - FFA: - NORMAL: - LEAVE: - SLOT: 8 - ITEM: - NAME: "&cStop Spectating &7(Right-Click)" - MATERIAL: INK_SACK - DAMAGE: 1 - EXTRA: - # EXTRA ITEMS LIKE UPPER -# -# Staff Mode items -# -STAFF-MODE: - NORMAL: - RANDOM-GAME-SPECTATE: - SLOT: 0 - ITEM: - NAME: "&dSpectate Random Match &7(Right-Click)" - MATERIAL: COMPASS - PLAYER-INVENTORY: - SLOT: 1 - ITEM: - NAME: "&6View Player's Inventory &7(Right-Click)" - MATERIAL: STICK - HIDE-FROM-PLAYERS-ON: - SLOT: 8 - ITEM: - NAME: "&eShow Myself To Players &7(Right-Click)" - MATERIAL: INK_SACK - DAMAGE: 8 - HIDE-FROM-PLAYERS-OFF: - SLOT: 8 - ITEM: - NAME: "&eHide Myself From Players &7(Right-Click)" - MATERIAL: INK_SACK - DAMAGE: 10 - TURN-OFF: - SLOT: 4 - ITEM: - NAME: "&cTurn Off StaffMode &7(Right-Click)" - MATERIAL: INK_SACK - DAMAGE: 1 - LEAVE-SPECTATE: - SLOT: 7 - ITEM: - NAME: "&cLeave Spectation &7(Right-Click)" - MATERIAL: INK_SACK - DAMAGE: 1 - EXTRA: - # EXTRA ITEMS LIKE UPPER \ No newline at end of file diff --git a/core/src/main/resources/1.8.8/ladders/archer.yml b/core/src/main/resources/1.8.8/ladders/archer.yml deleted file mode 100644 index a8a21174..00000000 --- a/core/src/main/resources/1.8.8/ladders/archer.yml +++ /dev/null @@ -1,52 +0,0 @@ -name: Archer -enabled: true -type: BASIC -settings: - regen: false - hunger: false - ranked: false - editable: true - hitdelay: 20 - rounds: 2 - epcooldown: 13 - startcountdown: 5 - knockback: DEFAULT - gacooldown: 0 - drop-inventory: true - matchtypes: - - DUEL - - PARTY_FFA - - PARTY_SPLIT - - PARTY_VS_PARTY -effects: [] -icon: - ==: org.bukkit.inventory.ItemStack - type: BOW - meta: - ==: ItemMeta - meta-type: UNSPECIFIC - display-name: §6Archer -armor: | - rO0ABXcEAAAABHNyABpvcmcuYnVra2l0LnV0aWwuaW8uV3JhcHBlcvJQR+zxEm8FAgABTAADbWFw - dAAPTGphdmEvdXRpbC9NYXA7eHBzcgA1Y29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFi - bGVNYXAkU2VyaWFsaXplZEZvcm0AAAAAAAAAAAIAAlsABGtleXN0ABNbTGphdmEvbGFuZy9PYmpl - Y3Q7WwAGdmFsdWVzcQB+AAR4cHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAA - AAJ0AAI9PXQABHR5cGV1cQB+AAYAAAACdAAeb3JnLmJ1a2tpdC5pbnZlbnRvcnkuSXRlbVN0YWNr - dAANTEVBVEhFUl9CT09UU3NxAH4AAHNxAH4AA3VxAH4ABgAAAAJxAH4ACHEAfgAJdXEAfgAGAAAA - AnEAfgALdAAQTEVBVEhFUl9MRUdHSU5HU3NxAH4AAHNxAH4AA3VxAH4ABgAAAAJxAH4ACHEAfgAJ - dXEAfgAGAAAAAnEAfgALdAASTEVBVEhFUl9DSEVTVFBMQVRFc3EAfgAAc3EAfgADdXEAfgAGAAAA - AnEAfgAIcQB+AAl1cQB+AAYAAAACcQB+AAt0AA5MRUFUSEVSX0hFTE1FVA== -inventory: | - rO0ABXcEAAAAJHNyABpvcmcuYnVra2l0LnV0aWwuaW8uV3JhcHBlcvJQR+zxEm8FAgABTAADbWFw - dAAPTGphdmEvdXRpbC9NYXA7eHBzcgA1Y29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFi - bGVNYXAkU2VyaWFsaXplZEZvcm0AAAAAAAAAAAIAAlsABGtleXN0ABNbTGphdmEvbGFuZy9PYmpl - Y3Q7WwAGdmFsdWVzcQB+AAR4cHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAA - AAN0AAI9PXQABHR5cGV0AARtZXRhdXEAfgAGAAAAA3QAHm9yZy5idWtraXQuaW52ZW50b3J5Lkl0 - ZW1TdGFja3QAA0JPV3NxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHQACW1ldGEtdHlwZXQACGVu - Y2hhbnRzdXEAfgAGAAAAA3QACEl0ZW1NZXRhdAAKVU5TUEVDSUZJQ3NxAH4AA3VxAH4ABgAAAAN0 - AAxBUlJPV19EQU1BR0V0AApEVVJBQklMSVRZdAAOQVJST1dfSU5GSU5JVEV1cQB+AAYAAAADc3IA - EWphdmEubGFuZy5JbnRlZ2VyEuKgpPeBhzgCAAFJAAV2YWx1ZXhyABBqYXZhLmxhbmcuTnVtYmVy - hqyVHQuU4IsCAAB4cAAAAAFzcQB+ABwAAAADcQB+AB5zcQB+AABzcQB+AAN1cQB+AAYAAAACcQB+ - AAhxAH4ACXVxAH4ABgAAAAJxAH4ADHQAC0VOREVSX1BFQVJMcHBwcHBwc3EAfgAAc3EAfgADdXEA - fgAGAAAAAnEAfgAIcQB+AAl1cQB+AAYAAAACcQB+AAx0AAVBUlJPV3BwcHBwcHBwcHBwcHBwcHBw - cHBwcHBwcHBwcA== diff --git a/core/src/main/resources/1.8.8/ladders/axe.yml b/core/src/main/resources/1.8.8/ladders/axe.yml deleted file mode 100644 index 93e6f5a8..00000000 --- a/core/src/main/resources/1.8.8/ladders/axe.yml +++ /dev/null @@ -1,74 +0,0 @@ -name: Axe -enabled: true -type: BASIC -settings: - regen: true - hunger: true - ranked: false - editable: true - hitdelay: 20 - rounds: 1 - epcooldown: 13 - startcountdown: 5 - knockback: DEFAULT - gacooldown: 0 - drop-inventory: false - matchtypes: - - DUEL - - PARTY_FFA - - PARTY_SPLIT - - PARTY_VS_PARTY -effects: [] -icon: - ==: org.bukkit.inventory.ItemStack - type: IRON_AXE - meta: - ==: ItemMeta - meta-type: UNSPECIFIC - display-name: §7Axe -armor: | - rO0ABXcEAAAABHNyABpvcmcuYnVra2l0LnV0aWwuaW8uV3JhcHBlcvJQR+zxEm8FAgABTAADbWFw - dAAPTGphdmEvdXRpbC9NYXA7eHBzcgA1Y29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFi - bGVNYXAkU2VyaWFsaXplZEZvcm0AAAAAAAAAAAIAAlsABGtleXN0ABNbTGphdmEvbGFuZy9PYmpl - Y3Q7WwAGdmFsdWVzcQB+AAR4cHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAA - AAJ0AAI9PXQABHR5cGV1cQB+AAYAAAACdAAeb3JnLmJ1a2tpdC5pbnZlbnRvcnkuSXRlbVN0YWNr - dAAKSVJPTl9CT09UU3NxAH4AAHNxAH4AA3VxAH4ABgAAAAJxAH4ACHEAfgAJdXEAfgAGAAAAAnEA - fgALdAANSVJPTl9MRUdHSU5HU3NxAH4AAHNxAH4AA3VxAH4ABgAAAAJxAH4ACHEAfgAJdXEAfgAG - AAAAAnEAfgALdAAPSVJPTl9DSEVTVFBMQVRFc3EAfgAAc3EAfgADdXEAfgAGAAAAAnEAfgAIcQB+ - AAl1cQB+AAYAAAACcQB+AAt0AAtJUk9OX0hFTE1FVA== -inventory: | - rO0ABXcEAAAAJHNyABpvcmcuYnVra2l0LnV0aWwuaW8uV3JhcHBlcvJQR+zxEm8FAgABTAADbWFw - dAAPTGphdmEvdXRpbC9NYXA7eHBzcgA1Y29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFi - bGVNYXAkU2VyaWFsaXplZEZvcm0AAAAAAAAAAAIAAlsABGtleXN0ABNbTGphdmEvbGFuZy9PYmpl - Y3Q7WwAGdmFsdWVzcQB+AAR4cHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAA - AAN0AAI9PXQABHR5cGV0AARtZXRhdXEAfgAGAAAAA3QAHm9yZy5idWtraXQuaW52ZW50b3J5Lkl0 - ZW1TdGFja3QACElST05fQVhFc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIdAAJbWV0YS10eXBl - dAAIZW5jaGFudHN1cQB+AAYAAAADdAAISXRlbU1ldGF0AApVTlNQRUNJRklDc3IAN2NvbS5nb29n - bGUuY29tbW9uLmNvbGxlY3QuSW1tdXRhYmxlQmlNYXAkU2VyaWFsaXplZEZvcm0AAAAAAAAAAAIA - AHhxAH4AA3VxAH4ABgAAAAF0AApEQU1BR0VfQUxMdXEAfgAGAAAAAXNyABFqYXZhLmxhbmcuSW50 - ZWdlchLioKT3gYc4AgABSQAFdmFsdWV4cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHAA - AAABc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAl0AAZkYW1hZ2V1cQB+AAYAAAADcQB+ - AAx0AAZQT1RJT05zcgAPamF2YS5sYW5nLlNob3J0aE03EzRg2lICAAFTAAV2YWx1ZXhxAH4AHCAi - c3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAlxAH4AIXVxAH4ABgAAAANxAH4ADHEAfgAj - c3EAfgAkQCVzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4ACXEAfgAhdXEAfgAGAAAAA3EA - fgAMcQB+ACNzcQB+ACRAJXNxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgAJcQB+ACF1cQB+ - AAYAAAADcQB+AAxxAH4AI3NxAH4AJEAlc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAlx - AH4AIXVxAH4ABgAAAANxAH4ADHEAfgAjc3EAfgAkQCVzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+ - AAhxAH4ACXEAfgAhdXEAfgAGAAAAA3EAfgAMcQB+ACNzcQB+ACRAJXNxAH4AAHNxAH4AA3VxAH4A - BgAAAANxAH4ACHEAfgAJcQB+ACF1cQB+AAYAAAADcQB+AAxxAH4AI3NxAH4AJEAlc3EAfgAAc3EA - fgADdXEAfgAGAAAAA3EAfgAIcQB+AAl0AAZhbW91bnR1cQB+AAYAAAADcQB+AAx0AAxHT0xERU5f - QVBQTEVzcQB+ABsAAAAMcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHNxAH4AAHNxAH4AA3VxAH4A - BgAAAANxAH4ACHEAfgAJcQB+ACF1cQB+AAYAAAADcQB+AAxxAH4AI3NxAH4AJEAlc3EAfgAAc3EA - fgADdXEAfgAGAAAAA3EAfgAIcQB+AAlxAH4AIXVxAH4ABgAAAANxAH4ADHEAfgAjc3EAfgAkICI= -custom-kit-extra-items: - unranked: | - rO0ABXcEAAAAHHNyABpvcmcuYnVra2l0LnV0aWwuaW8uV3JhcHBlcvJQR+zxEm8FAgABTAADbWFw - dAAPTGphdmEvdXRpbC9NYXA7eHBzcgA1Y29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFi - bGVNYXAkU2VyaWFsaXplZEZvcm0AAAAAAAAAAAIAAlsABGtleXN0ABNbTGphdmEvbGFuZy9PYmpl - Y3Q7WwAGdmFsdWVzcQB+AAR4cHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAA - AAN0AAI9PXQABHR5cGV0AAZhbW91bnR1cQB+AAYAAAADdAAeb3JnLmJ1a2tpdC5pbnZlbnRvcnku - SXRlbVN0YWNrdAAMQkFLRURfUE9UQVRPc3IAEWphdmEubGFuZy5JbnRlZ2VyEuKgpPeBhzgCAAFJ - AAV2YWx1ZXhyABBqYXZhLmxhbmcuTnVtYmVyhqyVHQuU4IsCAAB4cAAAAEBzcQB+AABzcQB+AAN1 - cQB+AAYAAAADcQB+AAhxAH4ACXEAfgAKdXEAfgAGAAAAA3EAfgAMdAANR09MREVOX0NBUlJPVHEA - fgAQc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAlxAH4ACnVxAH4ABgAAAANxAH4ADHQA - C0NPT0tFRF9CRUVGcQB+ABBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBw diff --git a/core/src/main/resources/1.8.8/ladders/battlerush.yml b/core/src/main/resources/1.8.8/ladders/battlerush.yml deleted file mode 100644 index a8ff5201..00000000 --- a/core/src/main/resources/1.8.8/ladders/battlerush.yml +++ /dev/null @@ -1,58 +0,0 @@ -name: BattleRush -enabled: true -type: BATTLE_RUSH -settings: - regen: true - hunger: false - ranked: true - editable: true - drop-inventory: false - multiRoundStartCountdown: true - hitdelay: 20 - rounds: 3 - epcooldown: 13 - gacooldown: 0 - startcountdown: 3 - knockback: DEFAULT - matchtypes: - - DUEL - - PARTY_SPLIT - - PARTY_VS_PARTY -respawn-time: 3 -tempbuild-delay: 10 -icon: - ==: org.bukkit.inventory.ItemStack - type: WATER_LILY - meta: - ==: ItemMeta - meta-type: UNSPECIFIC - display-name: §2Battle§7Rush -inventory: | - rO0ABXcEAAAAJHNyABpvcmcuYnVra2l0LnV0aWwuaW8uV3JhcHBlcvJQR+zxEm8FAgABTAADbWFw - dAAPTGphdmEvdXRpbC9NYXA7eHBzcgA1Y29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFi - bGVNYXAkU2VyaWFsaXplZEZvcm0AAAAAAAAAAAIAAlsABGtleXN0ABNbTGphdmEvbGFuZy9PYmpl - Y3Q7WwAGdmFsdWVzcQB+AAR4cHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAA - AAJ0AAI9PXQABHR5cGV1cQB+AAYAAAACdAAeb3JnLmJ1a2tpdC5pbnZlbnRvcnkuSXRlbVN0YWNr - dAAGU0hFQVJTc3EAfgAAc3EAfgADdXEAfgAGAAAABHEAfgAIcQB+AAl0AAZkYW1hZ2V0AAZhbW91 - bnR1cQB+AAYAAAAEcQB+AAt0AARXT09Mc3IAD2phdmEubGFuZy5TaG9ydGhNNxM0YNpSAgABUwAF - dmFsdWV4cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHAADnNyABFqYXZhLmxhbmcuSW50 - ZWdlchLioKT3gYc4AgABSQAFdmFsdWV4cQB+ABUAAABAcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBw - cHBwcHBwcHBwcA== -armor: | - rO0ABXcEAAAABHNyABpvcmcuYnVra2l0LnV0aWwuaW8uV3JhcHBlcvJQR+zxEm8FAgABTAADbWFw - dAAPTGphdmEvdXRpbC9NYXA7eHBzcgA1Y29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFi - bGVNYXAkU2VyaWFsaXplZEZvcm0AAAAAAAAAAAIAAlsABGtleXN0ABNbTGphdmEvbGFuZy9PYmpl - Y3Q7WwAGdmFsdWVzcQB+AAR4cHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAA - AAN0AAI9PXQABHR5cGV0AARtZXRhdXEAfgAGAAAAA3QAHm9yZy5idWtraXQuaW52ZW50b3J5Lkl0 - ZW1TdGFja3QADUxFQVRIRVJfQk9PVFNzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAh0AAltZXRh - LXR5cGV0AAVjb2xvcnVxAH4ABgAAAAN0AAhJdGVtTWV0YXQADUxFQVRIRVJfQVJNT1JzcQB+AABz - cQB+AAN1cQB+AAYAAAAEcQB+AAh0AANSRUR0AARCTFVFdAAFR1JFRU51cQB+AAYAAAAEdAAFQ29s - b3JzcgARamF2YS5sYW5nLkludGVnZXIS4qCk94GHOAIAAUkABXZhbHVleHIAEGphdmEubGFuZy5O - dW1iZXKGrJUdC5TgiwIAAHhwAAAA/3NxAH4AHgAAAABxAH4AIXNxAH4AAHNxAH4AA3VxAH4ABgAA - AANxAH4ACHEAfgAJcQB+AAp1cQB+AAYAAAADcQB+AAx0ABBMRUFUSEVSX0xFR0dJTkdTc3EAfgAA - c3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+ABFxAH4AEnVxAH4ABgAAAANxAH4AFHEAfgAVc3EAfgAA - c3EAfgADdXEAfgAGAAAABHEAfgAIcQB+ABlxAH4AGnEAfgAbdXEAfgAGAAAABHEAfgAdc3EAfgAe - AAAA/3EAfgAhcQB+ACFzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4ACXEAfgAKdXEAfgAG - AAAAA3EAfgAMdAASTEVBVEhFUl9DSEVTVFBMQVRFc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAI - cQB+ABFxAH4AEnVxAH4ABgAAAANxAH4AFHEAfgAVc3EAfgAAc3EAfgADdXEAfgAGAAAABHEAfgAI - cQB+ABlxAH4AGnEAfgAbdXEAfgAGAAAABHEAfgAdc3EAfgAeAAAA/3EAfgAhcQB+ACFw \ No newline at end of file diff --git a/core/src/main/resources/1.8.8/ladders/bedwars.yml b/core/src/main/resources/1.8.8/ladders/bedwars.yml deleted file mode 100644 index f131d5dd..00000000 --- a/core/src/main/resources/1.8.8/ladders/bedwars.yml +++ /dev/null @@ -1,58 +0,0 @@ -name: Bedwars -enabled: true -type: BEDWARS -settings: - regen: true - hunger: false - ranked: true - editable: true - hitdelay: 20 - rounds: 1 - epcooldown: 13 - startcountdown: 3 - knockback: DEFAULT - gacooldown: 0 - drop-inventory: false - matchtypes: - - DUEL - - PARTY_SPLIT - - PARTY_VS_PARTY -effects: [] -bedwars-respawn: 4 -icon: - ==: org.bukkit.inventory.ItemStack - type: BED - meta: - ==: ItemMeta - meta-type: UNSPECIFIC - display-name: §eBedwars -armor: | - rO0ABXcEAAAABHNyABpvcmcuYnVra2l0LnV0aWwuaW8uV3JhcHBlcvJQR+zxEm8FAgABTAADbWFw - dAAPTGphdmEvdXRpbC9NYXA7eHBzcgA1Y29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFi - bGVNYXAkU2VyaWFsaXplZEZvcm0AAAAAAAAAAAIAAlsABGtleXN0ABNbTGphdmEvbGFuZy9PYmpl - Y3Q7WwAGdmFsdWVzcQB+AAR4cHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAA - AAJ0AAI9PXQABHR5cGV1cQB+AAYAAAACdAAeb3JnLmJ1a2tpdC5pbnZlbnRvcnkuSXRlbVN0YWNr - dAAKSVJPTl9CT09UU3NxAH4AAHNxAH4AA3VxAH4ABgAAAAJxAH4ACHEAfgAJdXEAfgAGAAAAAnEA - fgALdAANSVJPTl9MRUdHSU5HU3NxAH4AAHNxAH4AA3VxAH4ABgAAAAJxAH4ACHEAfgAJdXEAfgAG - AAAAAnEAfgALdAASTEVBVEhFUl9DSEVTVFBMQVRFc3EAfgAAc3EAfgADdXEAfgAGAAAAAnEAfgAI - cQB+AAl1cQB+AAYAAAACcQB+AAt0AA5MRUFUSEVSX0hFTE1FVA== -inventory: | - rO0ABXcEAAAAJHNyABpvcmcuYnVra2l0LnV0aWwuaW8uV3JhcHBlcvJQR+zxEm8FAgABTAADbWFw - dAAPTGphdmEvdXRpbC9NYXA7eHBzcgA1Y29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFi - bGVNYXAkU2VyaWFsaXplZEZvcm0AAAAAAAAAAAIAAlsABGtleXN0ABNbTGphdmEvbGFuZy9PYmpl - Y3Q7WwAGdmFsdWVzcQB+AAR4cHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAA - AAJ0AAI9PXQABHR5cGV1cQB+AAYAAAACdAAeb3JnLmJ1a2tpdC5pbnZlbnRvcnkuSXRlbVN0YWNr - dAAKV09PRF9TV09SRHNxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgAJdAAGYW1vdW50dXEA - fgAGAAAAA3EAfgALdAAEV09PTHNyABFqYXZhLmxhbmcuSW50ZWdlchLioKT3gYc4AgABSQAFdmFs - dWV4cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHAAAABAc3EAfgAAc3EAfgADdXEAfgAG - AAAAAnEAfgAIcQB+AAl1cQB+AAYAAAACcQB+AAt0AAZTSEVBUlNzcQB+AABzcQB+AAN1cQB+AAYA - AAADcQB+AAhxAH4ACXQABG1ldGF1cQB+AAYAAAADcQB+AAt0AAhXT09EX0FYRXNxAH4AAHNxAH4A - A3VxAH4ABgAAAANxAH4ACHQACW1ldGEtdHlwZXQACGVuY2hhbnRzdXEAfgAGAAAAA3QACEl0ZW1N - ZXRhdAAKVU5TUEVDSUZJQ3NyADdjb20uZ29vZ2xlLmNvbW1vbi5jb2xsZWN0LkltbXV0YWJsZUJp - TWFwJFNlcmlhbGl6ZWRGb3JtAAAAAAAAAAACAAB4cQB+AAN1cQB+AAYAAAABdAAJRElHX1NQRUVE - dXEAfgAGAAAAAXNxAH4AEwAAAAFzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4ACXEAfgAe - dXEAfgAGAAAAA3EAfgALdAAMV09PRF9QSUNLQVhFc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAI - cQB+ACRxAH4AJXVxAH4ABgAAAANxAH4AJ3EAfgAoc3EAfgApdXEAfgAGAAAAAXEAfgAsdXEAfgAG - AAAAAXEAfgAucHBzcQB+AABzcQB+AAN1cQB+AAYAAAACcQB+AAhxAH4ACXVxAH4ABgAAAAJxAH4A - C3QADEdPTERFTl9BUFBMRXNxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgAJcQB+ABB1cQB+ - AAYAAAADcQB+AAt0AAZMQURERVJzcQB+ABMAAAAQcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBw diff --git a/core/src/main/resources/1.8.8/ladders/boxing.yml b/core/src/main/resources/1.8.8/ladders/boxing.yml deleted file mode 100644 index 6a9195e8..00000000 --- a/core/src/main/resources/1.8.8/ladders/boxing.yml +++ /dev/null @@ -1,109 +0,0 @@ -name: Boxing -enabled: true -type: BOXING -settings: - regen: true - hunger: false - ranked: true - editable: true - hitdelay: 20 - rounds: 1 - epcooldown: 13 - startcountdown: 5 - knockback: DEFAULT - gacooldown: 0 - drop-inventory: false - matchtypes: - - DUEL - - PARTY_FFA - - PARTY_SPLIT - - PARTY_VS_PARTY -effects: -- ==: PotionEffect - effect: 1 - duration: 12000 - amplifier: 1 - ambient: false - has-particles: true -boxing-winhit: 100 -icon: - ==: org.bukkit.inventory.ItemStack - type: JUKEBOX - meta: - ==: ItemMeta - meta-type: TILE_ENTITY - display-name: §aBoxing - blockMaterial: JUKEBOX -armor: | - rO0ABXcEAAAABHBwcHA= -inventory: | - rO0ABXcEAAAAJHNyABpvcmcuYnVra2l0LnV0aWwuaW8uV3JhcHBlcvJQR+zxEm8FAgABTAADbWFw - dAAPTGphdmEvdXRpbC9NYXA7eHBzcgA1Y29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFi - bGVNYXAkU2VyaWFsaXplZEZvcm0AAAAAAAAAAAIAAlsABGtleXN0ABNbTGphdmEvbGFuZy9PYmpl - Y3Q7WwAGdmFsdWVzcQB+AAR4cHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAA - AAN0AAI9PXQABHR5cGV0AARtZXRhdXEAfgAGAAAAA3QAHm9yZy5idWtraXQuaW52ZW50b3J5Lkl0 - ZW1TdGFja3QADURJQU1PTkRfU1dPUkRzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAh0AAltZXRh - LXR5cGV0AAhlbmNoYW50c3VxAH4ABgAAAAN0AAhJdGVtTWV0YXQAClVOU1BFQ0lGSUNzcgA3Y29t - Lmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFibGVCaU1hcCRTZXJpYWxpemVkRm9ybQAAAAAA - AAAAAgAAeHEAfgADdXEAfgAGAAAAAXQACkRBTUFHRV9BTEx1cQB+AAYAAAABc3IAEWphdmEubGFu - Zy5JbnRlZ2VyEuKgpPeBhzgCAAFJAAV2YWx1ZXhyABBqYXZhLmxhbmcuTnVtYmVyhqyVHQuU4IsC - AAB4cAAAAAFwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcA== -custom-kit-extra-items: - unranked: | - rO0ABXcEAAAAHHNyABpvcmcuYnVra2l0LnV0aWwuaW8uV3JhcHBlcvJQR+zxEm8FAgABTAADbWFw - dAAPTGphdmEvdXRpbC9NYXA7eHBzcgA1Y29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFi - bGVNYXAkU2VyaWFsaXplZEZvcm0AAAAAAAAAAAIAAlsABGtleXN0ABNbTGphdmEvbGFuZy9PYmpl - Y3Q7WwAGdmFsdWVzcQB+AAR4cHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAA - AAN0AAI9PXQABHR5cGV0AARtZXRhdXEAfgAGAAAAA3QAHm9yZy5idWtraXQuaW52ZW50b3J5Lkl0 - ZW1TdGFja3QACklST05fU1dPUkRzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAh0AAltZXRhLXR5 - cGV0AAhlbmNoYW50c3VxAH4ABgAAAAN0AAhJdGVtTWV0YXQAClVOU1BFQ0lGSUNzcQB+AAN1cQB+ - AAYAAAACdAAKREFNQUdFX0FMTHQACkRVUkFCSUxJVFl1cQB+AAYAAAACc3IAEWphdmEubGFuZy5J - bnRlZ2VyEuKgpPeBhzgCAAFJAAV2YWx1ZXhyABBqYXZhLmxhbmcuTnVtYmVyhqyVHQuU4IsCAAB4 - cAAAAAFzcQB+ABsAAAADc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAlxAH4ACnVxAH4A - BgAAAANxAH4ADHQACkdPTERfU1dPUkRzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4AEXEA - fgASdXEAfgAGAAAAA3EAfgAUcQB+ABVzcQB+AAN1cQB+AAYAAAACcQB+ABhxAH4AGXVxAH4ABgAA - AAJxAH4AHXEAfgAec3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAlxAH4ACnVxAH4ABgAA - AANxAH4ADHQAC1NUT05FX1NXT1JEc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+ABFxAH4A - EnVxAH4ABgAAAANxAH4AFHEAfgAVc3EAfgADdXEAfgAGAAAAAnEAfgAYcQB+ABl1cQB+AAYAAAAC - cQB+AB1xAH4AHnNxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgAJcQB+AAp1cQB+AAYAAAAD - cQB+AAx0AApXT09EX1NXT1JEc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+ABFxAH4AEnVx - AH4ABgAAAANxAH4AFHEAfgAVc3EAfgADdXEAfgAGAAAAAnEAfgAYcQB+ABl1cQB+AAYAAAACcQB+ - AB1xAH4AHnNxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgAJcQB+AAp1cQB+AAYAAAADcQB+ - AAx0AAhSQVdfRklTSHNxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgARcQB+ABJ1cQB+AAYA - AAADcQB+ABRxAH4AFXNyADdjb20uZ29vZ2xlLmNvbW1vbi5jb2xsZWN0LkltbXV0YWJsZUJpTWFw - JFNlcmlhbGl6ZWRGb3JtAAAAAAAAAAACAAB4cQB+AAN1cQB+AAYAAAABcQB+ABh1cQB+AAYAAAAB - cQB+AB1wc3EAfgAAc3EAfgADdXEAfgAGAAAAAnEAfgAIcQB+AAl1cQB+AAYAAAACcQB+AAx0AA1E - SUFNT05EX1NXT1JEc3EAfgAAc3EAfgADdXEAfgAGAAAAAnEAfgAIcQB+AAl1cQB+AAYAAAACcQB+ - AAxxAH4AI3NxAH4AAHNxAH4AA3VxAH4ABgAAAAJxAH4ACHEAfgAJdXEAfgAGAAAAAnEAfgAMcQB+ - AC9zcQB+AABzcQB+AAN1cQB+AAYAAAACcQB+AAhxAH4ACXVxAH4ABgAAAAJxAH4ADHEAfgA7c3EA - fgAAc3EAfgADdXEAfgAGAAAAAnEAfgAIcQB+AAl1cQB+AAYAAAACcQB+AAxxAH4AR3BwcHBwcHBw - cHBwcHBwcHBw - ranked: | - rO0ABXcEAAAAHHNyABpvcmcuYnVra2l0LnV0aWwuaW8uV3JhcHBlcvJQR+zxEm8FAgABTAADbWFw - dAAPTGphdmEvdXRpbC9NYXA7eHBzcgA1Y29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFi - bGVNYXAkU2VyaWFsaXplZEZvcm0AAAAAAAAAAAIAAlsABGtleXN0ABNbTGphdmEvbGFuZy9PYmpl - Y3Q7WwAGdmFsdWVzcQB+AAR4cHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAA - AAN0AAI9PXQABHR5cGV0AARtZXRhdXEAfgAGAAAAA3QAHm9yZy5idWtraXQuaW52ZW50b3J5Lkl0 - ZW1TdGFja3QACklST05fU1dPUkRzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAh0AAltZXRhLXR5 - cGV0AAhlbmNoYW50c3VxAH4ABgAAAAN0AAhJdGVtTWV0YXQAClVOU1BFQ0lGSUNzcQB+AAN1cQB+ - AAYAAAACdAAKREFNQUdFX0FMTHQACkRVUkFCSUxJVFl1cQB+AAYAAAACc3IAEWphdmEubGFuZy5J - bnRlZ2VyEuKgpPeBhzgCAAFJAAV2YWx1ZXhyABBqYXZhLmxhbmcuTnVtYmVyhqyVHQuU4IsCAAB4 - cAAAAAFzcQB+ABsAAAADc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAlxAH4ACnVxAH4A - BgAAAANxAH4ADHQACkdPTERfU1dPUkRzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4AEXEA - fgASdXEAfgAGAAAAA3EAfgAUcQB+ABVzcQB+AAN1cQB+AAYAAAACcQB+ABhxAH4AGXVxAH4ABgAA - AAJxAH4AHXEAfgAec3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAlxAH4ACnVxAH4ABgAA - AANxAH4ADHQAC1NUT05FX1NXT1JEc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+ABFxAH4A - EnVxAH4ABgAAAANxAH4AFHEAfgAVc3EAfgADdXEAfgAGAAAAAnEAfgAYcQB+ABl1cQB+AAYAAAAC - cQB+AB1xAH4AHnNxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgAJcQB+AAp1cQB+AAYAAAAD - cQB+AAx0AApXT09EX1NXT1JEc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+ABFxAH4AEnVx - AH4ABgAAAANxAH4AFHEAfgAVc3EAfgADdXEAfgAGAAAAAnEAfgAYcQB+ABl1cQB+AAYAAAACcQB+ - AB1xAH4AHnNxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgAJcQB+AAp1cQB+AAYAAAADcQB+ - AAx0AAhSQVdfRklTSHNxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgARcQB+ABJ1cQB+AAYA - AAADcQB+ABRxAH4AFXNyADdjb20uZ29vZ2xlLmNvbW1vbi5jb2xsZWN0LkltbXV0YWJsZUJpTWFw - JFNlcmlhbGl6ZWRGb3JtAAAAAAAAAAACAAB4cQB+AAN1cQB+AAYAAAABcQB+ABh1cQB+AAYAAAAB - cQB+AB1wc3EAfgAAc3EAfgADdXEAfgAGAAAAAnEAfgAIcQB+AAl1cQB+AAYAAAACcQB+AAx0AA1E - SUFNT05EX1NXT1JEc3EAfgAAc3EAfgADdXEAfgAGAAAAAnEAfgAIcQB+AAl1cQB+AAYAAAACcQB+ - AAxxAH4AI3NxAH4AAHNxAH4AA3VxAH4ABgAAAAJxAH4ACHEAfgAJdXEAfgAGAAAAAnEAfgAMcQB+ - AC9zcQB+AABzcQB+AAN1cQB+AAYAAAACcQB+AAhxAH4ACXVxAH4ABgAAAAJxAH4ADHEAfgA7c3EA - fgAAc3EAfgADdXEAfgAGAAAAAnEAfgAIcQB+AAl1cQB+AAYAAAACcQB+AAxxAH4AR3BwcHBwcHBw - cHBwcHBwcHBw diff --git a/core/src/main/resources/1.8.8/ladders/bridges.yml b/core/src/main/resources/1.8.8/ladders/bridges.yml deleted file mode 100644 index 968bfc13..00000000 --- a/core/src/main/resources/1.8.8/ladders/bridges.yml +++ /dev/null @@ -1,71 +0,0 @@ -name: Bridges -enabled: true -type: BRIDGES -settings: - regen: true - hunger: false - ranked: true - editable: true - drop-inventory: false - multiRoundStartCountdown: false - hitdelay: 20 - rounds: 5 - epcooldown: 13 - gacooldown: 0 - startcountdown: 3 - respawntime: 3 - knockback: DEFAULT - matchtypes: - - DUEL - - PARTY_SPLIT - - PARTY_VS_PARTY - weightClass: UNRANKED_AND_RANKED -icon: - ==: org.bukkit.inventory.ItemStack - type: STAINED_CLAY - meta: - ==: ItemMeta - meta-type: UNSPECIFIC - display-name: §eBridges -inventory: | - rO0ABXcEAAAAJHNyABpvcmcuYnVra2l0LnV0aWwuaW8uV3JhcHBlcvJQR+zxEm8FAgABTAADbWFw - dAAPTGphdmEvdXRpbC9NYXA7eHBzcgA1Y29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFi - bGVNYXAkU2VyaWFsaXplZEZvcm0AAAAAAAAAAAIAAlsABGtleXN0ABNbTGphdmEvbGFuZy9PYmpl - Y3Q7WwAGdmFsdWVzcQB+AAR4cHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAA - AAJ0AAI9PXQABHR5cGV1cQB+AAYAAAACdAAeb3JnLmJ1a2tpdC5pbnZlbnRvcnkuSXRlbVN0YWNr - dAAKSVJPTl9TV09SRHNxAH4AAHNxAH4AA3VxAH4ABgAAAAJxAH4ACHEAfgAJdXEAfgAGAAAAAnEA - fgALdAADQk9Xc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAl0AARtZXRhdXEAfgAGAAAA - A3EAfgALdAAPRElBTU9ORF9QSUNLQVhFc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIdAAJbWV0 - YS10eXBldAAIZW5jaGFudHN1cQB+AAYAAAADdAAISXRlbU1ldGF0AApVTlNQRUNJRklDc3IAN2Nv - bS5nb29nbGUuY29tbW9uLmNvbGxlY3QuSW1tdXRhYmxlQmlNYXAkU2VyaWFsaXplZEZvcm0AAAAA - AAAAAAIAAHhxAH4AA3VxAH4ABgAAAAF0AAlESUdfU1BFRUR1cQB+AAYAAAABc3IAEWphdmEubGFu - Zy5JbnRlZ2VyEuKgpPeBhzgCAAFJAAV2YWx1ZXhyABBqYXZhLmxhbmcuTnVtYmVyhqyVHQuU4IsC - AAB4cAAAAAJzcQB+AABzcQB+AAN1cQB+AAYAAAAEcQB+AAhxAH4ACXQABmRhbWFnZXQABmFtb3Vu - dHVxAH4ABgAAAARxAH4AC3QADFNUQUlORURfQ0xBWXNyAA9qYXZhLmxhbmcuU2hvcnRoTTcTNGDa - UgIAAVMABXZhbHVleHEAfgAmAA5zcQB+ACUAAABAc3EAfgAAc3EAfgADdXEAfgAGAAAABHEAfgAI - cQB+AAlxAH4AK3EAfgAsdXEAfgAGAAAABHEAfgALcQB+AC5xAH4AMHEAfgAxc3EAfgAAc3EAfgAD - dXEAfgAGAAAAA3EAfgAIcQB+AAlxAH4ALHVxAH4ABgAAAANxAH4AC3QADEdPTERFTl9BUFBMRXNx - AH4AJQAAAAhwcHNxAH4AAHNxAH4AA3VxAH4ABgAAAAJxAH4ACHEAfgAJdXEAfgAGAAAAAnEAfgAL - dAAFQVJST1dwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHA= -armor: | - rO0ABXcEAAAABHNyABpvcmcuYnVra2l0LnV0aWwuaW8uV3JhcHBlcvJQR+zxEm8FAgABTAADbWFw - dAAPTGphdmEvdXRpbC9NYXA7eHBzcgA1Y29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFi - bGVNYXAkU2VyaWFsaXplZEZvcm0AAAAAAAAAAAIAAlsABGtleXN0ABNbTGphdmEvbGFuZy9PYmpl - Y3Q7WwAGdmFsdWVzcQB+AAR4cHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAA - AAN0AAI9PXQABHR5cGV0AARtZXRhdXEAfgAGAAAAA3QAHm9yZy5idWtraXQuaW52ZW50b3J5Lkl0 - ZW1TdGFja3QADUxFQVRIRVJfQk9PVFNzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAh0AAltZXRh - LXR5cGV0AAVjb2xvcnVxAH4ABgAAAAN0AAhJdGVtTWV0YXQADUxFQVRIRVJfQVJNT1JzcQB+AABz - cQB+AAN1cQB+AAYAAAAEcQB+AAh0AANSRUR0AARCTFVFdAAFR1JFRU51cQB+AAYAAAAEdAAFQ29s - b3JzcgARamF2YS5sYW5nLkludGVnZXIS4qCk94GHOAIAAUkABXZhbHVleHIAEGphdmEubGFuZy5O - dW1iZXKGrJUdC5TgiwIAAHhwAAAA/3NxAH4AHgAAAABxAH4AIXNxAH4AAHNxAH4AA3VxAH4ABgAA - AANxAH4ACHEAfgAJcQB+AAp1cQB+AAYAAAADcQB+AAx0ABBMRUFUSEVSX0xFR0dJTkdTc3EAfgAA - c3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+ABFxAH4AEnVxAH4ABgAAAANxAH4AFHEAfgAVc3EAfgAA - c3EAfgADdXEAfgAGAAAABHEAfgAIcQB+ABlxAH4AGnEAfgAbdXEAfgAGAAAABHEAfgAdc3EAfgAe - AAAA/3EAfgAhcQB+ACFzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4ACXEAfgAKdXEAfgAG - AAAAA3EAfgAMdAASTEVBVEhFUl9DSEVTVFBMQVRFc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAI - cQB+ABFxAH4AEnVxAH4ABgAAAANxAH4AFHEAfgAVc3EAfgAAc3EAfgADdXEAfgAGAAAABHEAfgAI - cQB+ABlxAH4AGnEAfgAbdXEAfgAGAAAABHEAfgAdc3EAfgAeAAAA/3EAfgAhcQB+ACFw -custom-kit-extra-items: {} -destroyable-blocks: - - STAINED_CLAY::11 - - STAINED_CLAY::14 \ No newline at end of file diff --git a/core/src/main/resources/1.8.8/ladders/builduhc.yml b/core/src/main/resources/1.8.8/ladders/builduhc.yml deleted file mode 100644 index 1e2473b6..00000000 --- a/core/src/main/resources/1.8.8/ladders/builduhc.yml +++ /dev/null @@ -1,87 +0,0 @@ -name: BuildUHC -enabled: true -type: BUILD -settings: - regen: false - hunger: true - ranked: true - editable: true - hitdelay: 20 - rounds: 1 - epcooldown: 13 - startcountdown: 5 - knockback: DEFAULT - gacooldown: 0 - drop-inventory: false - matchtypes: - - DUEL - - PARTY_FFA - - PARTY_SPLIT - - PARTY_VS_PARTY -effects: [] -icon: - ==: org.bukkit.inventory.ItemStack - type: LAVA_BUCKET - meta: - ==: ItemMeta - meta-type: UNSPECIFIC - display-name: §cBuildUHC -armor: | - rO0ABXcEAAAABHNyABpvcmcuYnVra2l0LnV0aWwuaW8uV3JhcHBlcvJQR+zxEm8FAgABTAADbWFw - dAAPTGphdmEvdXRpbC9NYXA7eHBzcgA1Y29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFi - bGVNYXAkU2VyaWFsaXplZEZvcm0AAAAAAAAAAAIAAlsABGtleXN0ABNbTGphdmEvbGFuZy9PYmpl - Y3Q7WwAGdmFsdWVzcQB+AAR4cHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAA - AAN0AAI9PXQABHR5cGV0AARtZXRhdXEAfgAGAAAAA3QAHm9yZy5idWtraXQuaW52ZW50b3J5Lkl0 - ZW1TdGFja3QADURJQU1PTkRfQk9PVFNzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAh0AAltZXRh - LXR5cGV0AAhlbmNoYW50c3VxAH4ABgAAAAN0AAhJdGVtTWV0YXQAClVOU1BFQ0lGSUNzcQB+AAN1 - cQB+AAYAAAADdAAKRFVSQUJJTElUWXQAD1BST1RFQ1RJT05fRkFMTHQAFVBST1RFQ1RJT05fUFJP - SkVDVElMRXVxAH4ABgAAAANzcgARamF2YS5sYW5nLkludGVnZXIS4qCk94GHOAIAAUkABXZhbHVl - eHIAEGphdmEubGFuZy5OdW1iZXKGrJUdC5TgiwIAAHhwAAAAA3NxAH4AHAAAAARzcQB+ABwAAAAC - c3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAlxAH4ACnVxAH4ABgAAAANxAH4ADHQAEERJ - QU1PTkRfTEVHR0lOR1NzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4AEXEAfgASdXEAfgAG - AAAAA3EAfgAUcQB+ABVzcQB+AAN1cQB+AAYAAAACdAAYUFJPVEVDVElPTl9FTlZJUk9OTUVOVEFM - cQB+ABh1cQB+AAYAAAACcQB+ACBxAH4AHnNxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgAJ - cQB+AAp1cQB+AAYAAAADcQB+AAx0ABJESUFNT05EX0NIRVNUUExBVEVzcQB+AABzcQB+AAN1cQB+ - AAYAAAADcQB+AAhxAH4AEXEAfgASdXEAfgAGAAAAA3EAfgAUcQB+ABVzcQB+AAN1cQB+AAYAAAAC - cQB+ACxxAH4AGHVxAH4ABgAAAAJxAH4AIHEAfgAec3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAI - cQB+AAlxAH4ACnVxAH4ABgAAAANxAH4ADHQADkRJQU1PTkRfSEVMTUVUc3EAfgAAc3EAfgADdXEA - fgAGAAAAA3EAfgAIcQB+ABFxAH4AEnVxAH4ABgAAAANxAH4AFHEAfgAVc3EAfgADdXEAfgAGAAAA - AnEAfgAacQB+ABh1cQB+AAYAAAACcQB+ACBxAH4AHg== -inventory: | - rO0ABXcEAAAAJHNyABpvcmcuYnVra2l0LnV0aWwuaW8uV3JhcHBlcvJQR+zxEm8FAgABTAADbWFw - dAAPTGphdmEvdXRpbC9NYXA7eHBzcgA1Y29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFi - bGVNYXAkU2VyaWFsaXplZEZvcm0AAAAAAAAAAAIAAlsABGtleXN0ABNbTGphdmEvbGFuZy9PYmpl - Y3Q7WwAGdmFsdWVzcQB+AAR4cHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAA - AAN0AAI9PXQABHR5cGV0AARtZXRhdXEAfgAGAAAAA3QAHm9yZy5idWtraXQuaW52ZW50b3J5Lkl0 - ZW1TdGFja3QADURJQU1PTkRfU1dPUkRzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAh0AAltZXRh - LXR5cGV0AAhlbmNoYW50c3VxAH4ABgAAAAN0AAhJdGVtTWV0YXQAClVOU1BFQ0lGSUNzcQB+AAN1 - cQB+AAYAAAACdAAKREFNQUdFX0FMTHQACkRVUkFCSUxJVFl1cQB+AAYAAAACc3IAEWphdmEubGFu - Zy5JbnRlZ2VyEuKgpPeBhzgCAAFJAAV2YWx1ZXhyABBqYXZhLmxhbmcuTnVtYmVyhqyVHQuU4IsC - AAB4cAAAAANxAH4AHXNxAH4AAHNxAH4AA3VxAH4ABgAAAAJxAH4ACHEAfgAJdXEAfgAGAAAAAnEA - fgAMdAALRklTSElOR19ST0RzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4ACXEAfgAKdXEA - fgAGAAAAA3EAfgAMdAADQk9Xc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+ABFxAH4AEnVx - AH4ABgAAAANxAH4AFHEAfgAVc3EAfgADdXEAfgAGAAAAAnQADEFSUk9XX0RBTUFHRXEAfgAZdXEA - fgAGAAAAAnEAfgAdcQB+AB1zcQB+AABzcQB+AAN1cQB+AAYAAAACcQB+AAhxAH4ACXVxAH4ABgAA - AAJxAH4ADHQAC0xBVkFfQlVDS0VUc3EAfgAAc3EAfgADdXEAfgAGAAAAAnEAfgAIcQB+AAl1cQB+ - AAYAAAACcQB+AAx0AAxXQVRFUl9CVUNLRVRzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4A - CXQABmFtb3VudHVxAH4ABgAAAANxAH4ADHQADEdPTERFTl9BUFBMRXNxAH4AGwAAAAZzcQB+AABz - cQB+AAN1cQB+AAYAAAAFcQB+AAhxAH4ACXQABmRhbWFnZXEAfgA9cQB+AAp1cQB+AAYAAAAFcQB+ - AAxxAH4AP3NyAA9qYXZhLmxhbmcuU2hvcnRoTTcTNGDaUgIAAVMABXZhbHVleHEAfgAcAAFzcQB+ - ABsAAAADc3EAfgAAc3EAfgADdXEAfgAGAAAABXEAfgAIcQB+ABF0AAxkaXNwbGF5LW5hbWV0AARs - b3JldAAJSXRlbUZsYWdzdXEAfgAGAAAABXEAfgAUcQB+ABV0ABHCp2XCp2xHb2xkZW4gSGVhZHNy - ADZjb20uZ29vZ2xlLmNvbW1vbi5jb2xsZWN0LkltbXV0YWJsZUxpc3QkU2VyaWFsaXplZEZvcm0A - AAAAAAAAAAIAAVsACGVsZW1lbnRzcQB+AAR4cHVxAH4ABgAAAAR0AAB0AB3CpzdUaGlzIGFwcGxl - IGdpdmVzIHlvdSBleHRyYXQAFsKnN2hlYWx0aCBhbmQgZWZmZWN0cy5xAH4AVHNyABFqYXZhLnV0 - aWwuSGFzaFNldLpEhZWWuLc0AwAAeHB3DAAAABA/QAAAAAAABnQADkhJREVfUExBQ0VEX09OdAAN - SElERV9FTkNIQU5UU3QAEEhJREVfVU5CUkVBS0FCTEV0ABNISURFX1BPVElPTl9FRkZFQ1RTdAAP - SElERV9BVFRSSUJVVEVTdAANSElERV9ERVNUUk9ZU3hzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+ - AAhxAH4ACXEAfgA9dXEAfgAGAAAAA3EAfgAMdAALQ09PS0VEX0JFRUZzcQB+ABsAAABAc3EAfgAA - c3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAlxAH4APXVxAH4ABgAAAANxAH4ADHQAC0NPQkJMRVNU - T05FcQB+AGRwcHBwcHBwcHBwcHBwcHBwcHBzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4A - CXEAfgA9dXEAfgAGAAAAA3EAfgAMdAAFQVJST1dzcQB+ABsAAAAgc3EAfgAAc3EAfgADdXEAfgAG - AAAAAnEAfgAIcQB+AAl1cQB+AAYAAAACcQB+AAx0AAtESUFNT05EX0FYRXNxAH4AAHNxAH4AA3Vx - AH4ABgAAAAJxAH4ACHEAfgAJdXEAfgAGAAAAAnEAfgAMdAAPRElBTU9ORF9QSUNLQVhFc3EAfgAA - c3EAfgADdXEAfgAGAAAAAnEAfgAIcQB+AAl1cQB+AAYAAAACcQB+AAxxAH4ANHNxAH4AAHNxAH4A - A3VxAH4ABgAAAAJxAH4ACHEAfgAJdXEAfgAGAAAAAnEAfgAMcQB+ADlwcHBzcQB+AABzcQB+AAN1 - cQB+AAYAAAAEcQB+AAhxAH4ACXEAfgBEcQB+AD11cQB+AAYAAAAEcQB+AAx0AARXT09Ec3EAfgBG - AAJxAH4AZA== diff --git a/core/src/main/resources/1.8.8/ladders/combo.yml b/core/src/main/resources/1.8.8/ladders/combo.yml deleted file mode 100644 index 0385538e..00000000 --- a/core/src/main/resources/1.8.8/ladders/combo.yml +++ /dev/null @@ -1,83 +0,0 @@ -name: Combo -enabled: true -type: BASIC -settings: - regen: true - hunger: true - ranked: true - editable: true - hitdelay: 2 - rounds: 1 - epcooldown: 13 - startcountdown: 5 - knockback: COMBO - gacooldown: 0 - drop-inventory: false - matchtypes: - - DUEL - - PARTY_FFA - - PARTY_SPLIT - - PARTY_VS_PARTY -effects: -- ==: PotionEffect - effect: 1 - duration: 9600 - amplifier: 1 - ambient: false - has-particles: true -icon: - ==: org.bukkit.inventory.ItemStack - type: RAW_FISH - damage: 3 - meta: - ==: ItemMeta - meta-type: UNSPECIFIC - display-name: §eCombo -armor: | - rO0ABXcEAAAABHNyABpvcmcuYnVra2l0LnV0aWwuaW8uV3JhcHBlcvJQR+zxEm8FAgABTAADbWFw - dAAPTGphdmEvdXRpbC9NYXA7eHBzcgA1Y29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFi - bGVNYXAkU2VyaWFsaXplZEZvcm0AAAAAAAAAAAIAAlsABGtleXN0ABNbTGphdmEvbGFuZy9PYmpl - Y3Q7WwAGdmFsdWVzcQB+AAR4cHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAA - AAN0AAI9PXQABHR5cGV0AARtZXRhdXEAfgAGAAAAA3QAHm9yZy5idWtraXQuaW52ZW50b3J5Lkl0 - ZW1TdGFja3QADURJQU1PTkRfQk9PVFNzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAh0AAltZXRh - LXR5cGV0AAhlbmNoYW50c3VxAH4ABgAAAAN0AAhJdGVtTWV0YXQAClVOU1BFQ0lGSUNzcQB+AAN1 - cQB+AAYAAAADdAAYUFJPVEVDVElPTl9FTlZJUk9OTUVOVEFMdAAKRFVSQUJJTElUWXQAD1BST1RF - Q1RJT05fRkFMTHVxAH4ABgAAAANzcgARamF2YS5sYW5nLkludGVnZXIS4qCk94GHOAIAAUkABXZh - bHVleHIAEGphdmEubGFuZy5OdW1iZXKGrJUdC5TgiwIAAHhwAAAABHNxAH4AHAAAAAVxAH4AHnNx - AH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgAJcQB+AAp1cQB+AAYAAAADcQB+AAx0ABBESUFN - T05EX0xFR0dJTkdTc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+ABFxAH4AEnVxAH4ABgAA - AANxAH4AFHEAfgAVc3EAfgADdXEAfgAGAAAAAnEAfgAYcQB+ABl1cQB+AAYAAAACcQB+AB5xAH4A - H3NxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgAJcQB+AAp1cQB+AAYAAAADcQB+AAx0ABJE - SUFNT05EX0NIRVNUUExBVEVzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4AEXEAfgASdXEA - fgAGAAAAA3EAfgAUcQB+ABVzcQB+AAN1cQB+AAYAAAACcQB+ABhxAH4AGXVxAH4ABgAAAAJxAH4A - HnEAfgAfc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAlxAH4ACnVxAH4ABgAAAANxAH4A - DHQADkRJQU1PTkRfSEVMTUVUc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+ABFxAH4AEnVx - AH4ABgAAAANxAH4AFHEAfgAVc3EAfgADdXEAfgAGAAAAAnEAfgAYcQB+ABl1cQB+AAYAAAACcQB+ - AB5xAH4AHw== -inventory: | - rO0ABXcEAAAAJHNyABpvcmcuYnVra2l0LnV0aWwuaW8uV3JhcHBlcvJQR+zxEm8FAgABTAADbWFw - dAAPTGphdmEvdXRpbC9NYXA7eHBzcgA1Y29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFi - bGVNYXAkU2VyaWFsaXplZEZvcm0AAAAAAAAAAAIAAlsABGtleXN0ABNbTGphdmEvbGFuZy9PYmpl - Y3Q7WwAGdmFsdWVzcQB+AAR4cHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAA - AAN0AAI9PXQABHR5cGV0AARtZXRhdXEAfgAGAAAAA3QAHm9yZy5idWtraXQuaW52ZW50b3J5Lkl0 - ZW1TdGFja3QADURJQU1PTkRfU1dPUkRzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAh0AAltZXRh - LXR5cGV0AAhlbmNoYW50c3VxAH4ABgAAAAN0AAhJdGVtTWV0YXQAClVOU1BFQ0lGSUNzcQB+AAN1 - cQB+AAYAAAADdAAKREFNQUdFX0FMTHQACkRVUkFCSUxJVFl0AAtGSVJFX0FTUEVDVHVxAH4ABgAA - AANzcgARamF2YS5sYW5nLkludGVnZXIS4qCk94GHOAIAAUkABXZhbHVleHIAEGphdmEubGFuZy5O - dW1iZXKGrJUdC5TgiwIAAHhwAAAAA3EAfgAec3EAfgAcAAAAAnNxAH4AAHNxAH4AA3VxAH4ABgAA - AARxAH4ACHEAfgAJdAAGZGFtYWdldAAGYW1vdW50dXEAfgAGAAAABHEAfgAMdAAMR09MREVOX0FQ - UExFc3IAD2phdmEubGFuZy5TaG9ydGhNNxM0YNpSAgABUwAFdmFsdWV4cQB+AB0AAXNxAH4AHAAA - AEBzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4ACXEAfgAKdXEAfgAGAAAAA3EAfgAMdAAO - RElBTU9ORF9IRUxNRVRzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4AEXEAfgASdXEAfgAG - AAAAA3EAfgAUcQB+ABVzcQB+AAN1cQB+AAYAAAACdAAYUFJPVEVDVElPTl9FTlZJUk9OTUVOVEFM - cQB+ABl1cQB+AAYAAAACc3EAfgAcAAAABHNxAH4AHAAAAAVzcQB+AABzcQB+AAN1cQB+AAYAAAAD - cQB+AAhxAH4ACXEAfgAKdXEAfgAGAAAAA3EAfgAMdAANRElBTU9ORF9CT09UU3NxAH4AAHNxAH4A - A3VxAH4ABgAAAANxAH4ACHEAfgARcQB+ABJ1cQB+AAYAAAADcQB+ABRxAH4AFXNxAH4AA3VxAH4A - BgAAAANxAH4ANXEAfgAZdAAPUFJPVEVDVElPTl9GQUxMdXEAfgAGAAAAA3EAfgA3cQB+ADhxAH4A - N3NxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgAJcQB+AAp1cQB+AAYAAAADcQB+AAx0ABBE - SUFNT05EX0xFR0dJTkdTc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+ABFxAH4AEnVxAH4A - BgAAAANxAH4AFHEAfgAVc3EAfgADdXEAfgAGAAAAAnEAfgA1cQB+ABl1cQB+AAYAAAACcQB+ADdx - AH4AOHNxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgAJcQB+AAp1cQB+AAYAAAADcQB+AAx0 - ABJESUFNT05EX0NIRVNUUExBVEVzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4AEXEAfgAS - dXEAfgAGAAAAA3EAfgAUcQB+ABVzcQB+AAN1cQB+AAYAAAACcQB+ADVxAH4AGXVxAH4ABgAAAAJx - AH4AN3EAfgA4cHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBw diff --git a/core/src/main/resources/1.8.8/ladders/debuff.yml b/core/src/main/resources/1.8.8/ladders/debuff.yml deleted file mode 100644 index 0c699c79..00000000 --- a/core/src/main/resources/1.8.8/ladders/debuff.yml +++ /dev/null @@ -1,129 +0,0 @@ -name: Debuff -enabled: true -type: BASIC -settings: - regen: true - hunger: true - ranked: true - editable: true - hitdelay: 20 - rounds: 1 - epcooldown: 13 - startcountdown: 5 - knockback: DEFAULT - gacooldown: 0 - drop-inventory: true - matchtypes: - - DUEL - - PARTY_FFA - - PARTY_SPLIT - - PARTY_VS_PARTY -effects: [] -icon: - ==: org.bukkit.inventory.ItemStack - type: POTION - damage: 8260 - meta: - ==: ItemMeta - meta-type: POTION - display-name: §aDebuff -armor: | - rO0ABXcEAAAABHNyABpvcmcuYnVra2l0LnV0aWwuaW8uV3JhcHBlcvJQR+zxEm8FAgABTAADbWFw - dAAPTGphdmEvdXRpbC9NYXA7eHBzcgA1Y29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFi - bGVNYXAkU2VyaWFsaXplZEZvcm0AAAAAAAAAAAIAAlsABGtleXN0ABNbTGphdmEvbGFuZy9PYmpl - Y3Q7WwAGdmFsdWVzcQB+AAR4cHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAA - AAN0AAI9PXQABHR5cGV0AARtZXRhdXEAfgAGAAAAA3QAHm9yZy5idWtraXQuaW52ZW50b3J5Lkl0 - ZW1TdGFja3QADURJQU1PTkRfQk9PVFNzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAh0AAltZXRh - LXR5cGV0AAhlbmNoYW50c3VxAH4ABgAAAAN0AAhJdGVtTWV0YXQAClVOU1BFQ0lGSUNzcQB+AAN1 - cQB+AAYAAAADdAAYUFJPVEVDVElPTl9FTlZJUk9OTUVOVEFMdAAKRFVSQUJJTElUWXQAD1BST1RF - Q1RJT05fRkFMTHVxAH4ABgAAAANzcgARamF2YS5sYW5nLkludGVnZXIS4qCk94GHOAIAAUkABXZh - bHVleHIAEGphdmEubGFuZy5OdW1iZXKGrJUdC5TgiwIAAHhwAAAAAnNxAH4AHAAAAANzcQB+ABwA - AAAEc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAlxAH4ACnVxAH4ABgAAAANxAH4ADHQA - EERJQU1PTkRfTEVHR0lOR1NzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4AEXEAfgASdXEA - fgAGAAAAA3EAfgAUcQB+ABVzcQB+AAN1cQB+AAYAAAACcQB+ABhxAH4AGXVxAH4ABgAAAAJxAH4A - HnEAfgAfc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAlxAH4ACnVxAH4ABgAAAANxAH4A - DHQAEkRJQU1PTkRfQ0hFU1RQTEFURXNxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgARcQB+ - ABJ1cQB+AAYAAAADcQB+ABRxAH4AFXNxAH4AA3VxAH4ABgAAAAJxAH4AGHEAfgAZdXEAfgAGAAAA - AnEAfgAecQB+AB9zcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4ACXEAfgAKdXEAfgAGAAAA - A3EAfgAMdAAORElBTU9ORF9IRUxNRVRzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4AEXEA - fgASdXEAfgAGAAAAA3EAfgAUcQB+ABVzcQB+AAN1cQB+AAYAAAACcQB+ABhxAH4AGXVxAH4ABgAA - AAJxAH4AHnEAfgAf -inventory: | - rO0ABXcEAAAAJHNyABpvcmcuYnVra2l0LnV0aWwuaW8uV3JhcHBlcvJQR+zxEm8FAgABTAADbWFw - dAAPTGphdmEvdXRpbC9NYXA7eHBzcgA1Y29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFi - bGVNYXAkU2VyaWFsaXplZEZvcm0AAAAAAAAAAAIAAlsABGtleXN0ABNbTGphdmEvbGFuZy9PYmpl - Y3Q7WwAGdmFsdWVzcQB+AAR4cHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAA - AAN0AAI9PXQABHR5cGV0AARtZXRhdXEAfgAGAAAAA3QAHm9yZy5idWtraXQuaW52ZW50b3J5Lkl0 - ZW1TdGFja3QADURJQU1PTkRfU1dPUkRzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAh0AAltZXRh - LXR5cGV0AAhlbmNoYW50c3VxAH4ABgAAAAN0AAhJdGVtTWV0YXQAClVOU1BFQ0lGSUNzcQB+AAN1 - cQB+AAYAAAADdAAKREFNQUdFX0FMTHQACkRVUkFCSUxJVFl0AAtGSVJFX0FTUEVDVHVxAH4ABgAA - AANzcgARamF2YS5sYW5nLkludGVnZXIS4qCk94GHOAIAAUkABXZhbHVleHIAEGphdmEubGFuZy5O - dW1iZXKGrJUdC5TgiwIAAHhwAAAAA3EAfgAec3EAfgAcAAAAAnNxAH4AAHNxAH4AA3VxAH4ABgAA - AANxAH4ACHEAfgAJdAAGYW1vdW50dXEAfgAGAAAAA3EAfgAMdAALRU5ERVJfUEVBUkxzcQB+ABwA - AAAQc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAl0AAZkYW1hZ2V1cQB+AAYAAAADcQB+ - AAx0AAZQT1RJT05zcgAPamF2YS5sYW5nLlNob3J0aE03EzRg2lICAAFTAAV2YWx1ZXhxAH4AHSBD - c3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAlxAH4AKnVxAH4ABgAAAANxAH4ADHEAfgAs - c3EAfgAtICJzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4ACXEAfgAqdXEAfgAGAAAAA3EA - fgAMcQB+ACxzcQB+AC1AJXNxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgAJcQB+ACp1cQB+ - AAYAAAADcQB+AAxxAH4ALHNxAH4ALUAlc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAlx - AH4AKnVxAH4ABgAAAANxAH4ADHEAfgAsc3EAfgAtQCVzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+ - AAhxAH4ACXEAfgAqdXEAfgAGAAAAA3EAfgAMcQB+ACxzcQB+AC1AJXNxAH4AAHNxAH4AA3VxAH4A - BgAAAANxAH4ACHEAfgAJcQB+ACN1cQB+AAYAAAADcQB+AAx0AAtDT09LRURfQkVFRnNxAH4AHAAA - AEBzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4ACXEAfgAqdXEAfgAGAAAAA3EAfgAMcQB+ - ACxzcQB+AC1AKnNxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgAJcQB+ACp1cQB+AAYAAAAD - cQB+AAxxAH4ALHNxAH4ALUAEc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAlxAH4AKnVx - AH4ABgAAAANxAH4ADHEAfgAsc3EAfgAtQCVzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4A - CXEAfgAqdXEAfgAGAAAAA3EAfgAMcQB+ACxzcQB+AC1AJXNxAH4AAHNxAH4AA3VxAH4ABgAAAANx - AH4ACHEAfgAJcQB+ACp1cQB+AAYAAAADcQB+AAxxAH4ALHNxAH4ALUAlc3EAfgAAc3EAfgADdXEA - fgAGAAAAA3EAfgAIcQB+AAlxAH4AKnVxAH4ABgAAAANxAH4ADHEAfgAsc3EAfgAtQCVzcQB+AABz - cQB+AAN1cQB+AAYAAAADcQB+AAhxAH4ACXEAfgAqdXEAfgAGAAAAA3EAfgAMcQB+ACxzcQB+AC1A - JXNxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgAJcQB+ACp1cQB+AAYAAAADcQB+AAxxAH4A - LHNxAH4ALUAlc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAlxAH4AKnVxAH4ABgAAAANx - AH4ADHEAfgAsc3EAfgAtICJzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4ACXEAfgAqdXEA - fgAGAAAAA3EAfgAMcQB+ACxzcQB+AC1AKnNxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgAJ - cQB+ACp1cQB+AAYAAAADcQB+AAxxAH4ALHNxAH4ALUAEc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EA - fgAIcQB+AAlxAH4AKnVxAH4ABgAAAANxAH4ADHEAfgAsc3EAfgAtQCVzcQB+AABzcQB+AAN1cQB+ - AAYAAAADcQB+AAhxAH4ACXEAfgAqdXEAfgAGAAAAA3EAfgAMcQB+ACxzcQB+AC1AJXNxAH4AAHNx - AH4AA3VxAH4ABgAAAANxAH4ACHEAfgAJcQB+ACp1cQB+AAYAAAADcQB+AAxxAH4ALHNxAH4ALUAl - c3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAlxAH4AKnVxAH4ABgAAAANxAH4ADHEAfgAs - c3EAfgAtQCVzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4ACXEAfgAqdXEAfgAGAAAAA3EA - fgAMcQB+ACxzcQB+AC1AJXNxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgAJcQB+ACp1cQB+ - AAYAAAADcQB+AAxxAH4ALHNxAH4ALUAlc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAlx - AH4AKnVxAH4ABgAAAANxAH4ADHEAfgAsc3EAfgAtICJzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+ - AAhxAH4ACXEAfgAqdXEAfgAGAAAAA3EAfgAMcQB+ACxzcQB+AC1AJXNxAH4AAHNxAH4AA3VxAH4A - BgAAAANxAH4ACHEAfgAJcQB+ACp1cQB+AAYAAAADcQB+AAxxAH4ALHNxAH4ALUAlc3EAfgAAc3EA - fgADdXEAfgAGAAAAA3EAfgAIcQB+AAlxAH4AKnVxAH4ABgAAAANxAH4ADHEAfgAsc3EAfgAtQCVz - cQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4ACXEAfgAqdXEAfgAGAAAAA3EAfgAMcQB+ACxz - cQB+AC1AJXNxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgAJcQB+ACp1cQB+AAYAAAADcQB+ - AAxxAH4ALHNxAH4ALUAlc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAlxAH4AKnVxAH4A - BgAAAANxAH4ADHEAfgAsc3EAfgAtQCVzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4ACXEA - fgAqdXEAfgAGAAAAA3EAfgAMcQB+ACxzcQB+AC1AJXNxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4A - CHEAfgAJcQB+ACp1cQB+AAYAAAADcQB+AAxxAH4ALHNxAH4ALUAlc3EAfgAAc3EAfgADdXEAfgAG - AAAAA3EAfgAIcQB+AAlxAH4AKnVxAH4ABgAAAANxAH4ADHEAfgAsc3EAfgAtICI= -custom-kit-extra-items: - unranked: | - rO0ABXcEAAAAHHNyABpvcmcuYnVra2l0LnV0aWwuaW8uV3JhcHBlcvJQR+zxEm8FAgABTAADbWFw - dAAPTGphdmEvdXRpbC9NYXA7eHBzcgA1Y29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFi - bGVNYXAkU2VyaWFsaXplZEZvcm0AAAAAAAAAAAIAAlsABGtleXN0ABNbTGphdmEvbGFuZy9PYmpl - Y3Q7WwAGdmFsdWVzcQB+AAR4cHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAA - AAN0AAI9PXQABHR5cGV0AAZkYW1hZ2V1cQB+AAYAAAADdAAeb3JnLmJ1a2tpdC5pbnZlbnRvcnku - SXRlbVN0YWNrdAAGUE9USU9Oc3IAD2phdmEubGFuZy5TaG9ydGhNNxM0YNpSAgABUwAFdmFsdWV4 - cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHBABHNxAH4AAHNxAH4AA3VxAH4ABgAAAANx - AH4ACHEAfgAJcQB+AAp1cQB+AAYAAAADcQB+AAxxAH4ADXNxAH4ADkAqc3EAfgAAc3EAfgADdXEA - fgAGAAAAA3EAfgAIcQB+AAlxAH4ACnVxAH4ABgAAAANxAH4ADHEAfgANc3EAfgAOICJzcQB+AABz - cQB+AAN1cQB+AAYAAAADcQB+AAhxAH4ACXEAfgAKdXEAfgAGAAAAA3EAfgAMcQB+AA1zcQB+AA4g - Q3NxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgAJcQB+AAp1cQB+AAYAAAADcQB+AAxxAH4A - DXNxAH4ADkAlcHBzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4ACXQABmFtb3VudHVxAH4A - BgAAAANxAH4ADHQADEJBS0VEX1BPVEFUT3NyABFqYXZhLmxhbmcuSW50ZWdlchLioKT3gYc4AgAB - SQAFdmFsdWV4cQB+AA8AAABAc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAlxAH4AKHVx - AH4ABgAAAANxAH4ADHQADUdPTERFTl9DQVJST1RxAH4ALHBwcHBwcHBwcHBwcHBwcHBwcHA= - ranked: | - rO0ABXcEAAAAHHNyABpvcmcuYnVra2l0LnV0aWwuaW8uV3JhcHBlcvJQR+zxEm8FAgABTAADbWFw - dAAPTGphdmEvdXRpbC9NYXA7eHBzcgA1Y29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFi - bGVNYXAkU2VyaWFsaXplZEZvcm0AAAAAAAAAAAIAAlsABGtleXN0ABNbTGphdmEvbGFuZy9PYmpl - Y3Q7WwAGdmFsdWVzcQB+AAR4cHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAA - AAN0AAI9PXQABHR5cGV0AAZhbW91bnR1cQB+AAYAAAADdAAeb3JnLmJ1a2tpdC5pbnZlbnRvcnku - SXRlbVN0YWNrdAAMQkFLRURfUE9UQVRPc3IAEWphdmEubGFuZy5JbnRlZ2VyEuKgpPeBhzgCAAFJ - AAV2YWx1ZXhyABBqYXZhLmxhbmcuTnVtYmVyhqyVHQuU4IsCAAB4cAAAAEBzcQB+AABzcQB+AAN1 - cQB+AAYAAAADcQB+AAhxAH4ACXEAfgAKdXEAfgAGAAAAA3EAfgAMdAANR09MREVOX0NBUlJPVHEA - fgAQcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHA= diff --git a/core/src/main/resources/1.8.8/ladders/fireball.yml b/core/src/main/resources/1.8.8/ladders/fireball.yml deleted file mode 100644 index 0955d598..00000000 --- a/core/src/main/resources/1.8.8/ladders/fireball.yml +++ /dev/null @@ -1,77 +0,0 @@ -name: Fireball -enabled: true -type: FIREBALL_FIGHT -settings: - regen: true - hunger: false - ranked: true - editable: true - drop-inventory: false - multiRoundStartCountdown: true - hitdelay: 20 - rounds: 1 - epcooldown: 13 - gacooldown: 0 - startcountdown: 3 - knockback: DEFAULT - matchtypes: - - DUEL - - PARTY_SPLIT - - PARTY_VS_PARTY -custom-kit-extra-items: {} -effects: [] -bed-respawn: 3 -fireball-cooldown: 1.0 -icon: - ==: org.bukkit.inventory.ItemStack - type: FIREBALL - meta: - ==: ItemMeta - meta-type: UNSPECIFIC - display-name: §6Fireball §7Fight -armor: | - rO0ABXcEAAAABHNyABpvcmcuYnVra2l0LnV0aWwuaW8uV3JhcHBlcvJQR+zxEm8FAgABTAADbWFw - dAAPTGphdmEvdXRpbC9NYXA7eHBzcgA1Y29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFi - bGVNYXAkU2VyaWFsaXplZEZvcm0AAAAAAAAAAAIAAlsABGtleXN0ABNbTGphdmEvbGFuZy9PYmpl - Y3Q7WwAGdmFsdWVzcQB+AAR4cHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAA - AAN0AAI9PXQABHR5cGV0AARtZXRhdXEAfgAGAAAAA3QAHm9yZy5idWtraXQuaW52ZW50b3J5Lkl0 - ZW1TdGFja3QADUxFQVRIRVJfQk9PVFNzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAh0AAltZXRh - LXR5cGV0AAVjb2xvcnVxAH4ABgAAAAN0AAhJdGVtTWV0YXQADUxFQVRIRVJfQVJNT1JzcQB+AABz - cQB+AAN1cQB+AAYAAAAEcQB+AAh0AANSRUR0AARCTFVFdAAFR1JFRU51cQB+AAYAAAAEdAAFQ29s - b3JzcgARamF2YS5sYW5nLkludGVnZXIS4qCk94GHOAIAAUkABXZhbHVleHIAEGphdmEubGFuZy5O - dW1iZXKGrJUdC5TgiwIAAHhwAAAA/3NxAH4AHgAAAABxAH4AIXNxAH4AAHNxAH4AA3VxAH4ABgAA - AANxAH4ACHEAfgAJcQB+AAp1cQB+AAYAAAADcQB+AAx0ABBMRUFUSEVSX0xFR0dJTkdTc3EAfgAA - c3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+ABFxAH4AEnVxAH4ABgAAAANxAH4AFHEAfgAVc3EAfgAA - c3EAfgADdXEAfgAGAAAABHEAfgAIcQB+ABlxAH4AGnEAfgAbdXEAfgAGAAAABHEAfgAdc3EAfgAe - AAAA/3EAfgAhcQB+ACFzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4ACXEAfgAKdXEAfgAG - AAAAA3EAfgAMdAASTEVBVEhFUl9DSEVTVFBMQVRFc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAI - cQB+ABFxAH4AEnVxAH4ABgAAAANxAH4AFHEAfgAVc3EAfgAAc3EAfgADdXEAfgAGAAAABHEAfgAI - cQB+ABlxAH4AGnEAfgAbdXEAfgAGAAAABHEAfgAdc3EAfgAeAAAA/3EAfgAhcQB+ACFzcQB+AABz - cQB+AAN1cQB+AAYAAAADcQB+AAhxAH4ACXEAfgAKdXEAfgAGAAAAA3EAfgAMdAAOTEVBVEhFUl9I - RUxNRVRzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4AEXEAfgASdXEAfgAGAAAAA3EAfgAU - cQB+ABVzcQB+AABzcQB+AAN1cQB+AAYAAAAEcQB+AAhxAH4AGXEAfgAacQB+ABt1cQB+AAYAAAAE - cQB+AB1zcQB+AB4AAAD/cQB+ACFxAH4AIQ== -inventory: | - rO0ABXcEAAAAJHNyABpvcmcuYnVra2l0LnV0aWwuaW8uV3JhcHBlcvJQR+zxEm8FAgABTAADbWFw - dAAPTGphdmEvdXRpbC9NYXA7eHBzcgA1Y29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFi - bGVNYXAkU2VyaWFsaXplZEZvcm0AAAAAAAAAAAIAAlsABGtleXN0ABNbTGphdmEvbGFuZy9PYmpl - Y3Q7WwAGdmFsdWVzcQB+AAR4cHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAA - AAJ0AAI9PXQABHR5cGV1cQB+AAYAAAACdAAeb3JnLmJ1a2tpdC5pbnZlbnRvcnkuSXRlbVN0YWNr - dAALU1RPTkVfU1dPUkRzcQB+AABzcQB+AAN1cQB+AAYAAAAEcQB+AAhxAH4ACXQABmRhbWFnZXQA - BmFtb3VudHVxAH4ABgAAAARxAH4AC3QABFdPT0xzcgAPamF2YS5sYW5nLlNob3J0aE03EzRg2lIC - AAFTAAV2YWx1ZXhyABBqYXZhLmxhbmcuTnVtYmVyhqyVHQuU4IsCAAB4cAAOc3IAEWphdmEubGFu - Zy5JbnRlZ2VyEuKgpPeBhzgCAAFJAAV2YWx1ZXhxAH4AFQAAAEBzcQB+AABzcQB+AAN1cQB+AAYA - AAADcQB+AAhxAH4ACXEAfgARdXEAfgAGAAAAA3EAfgALdAALRU5ERVJfU1RPTkVzcQB+ABcAAAAI - c3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAlxAH4AEXVxAH4ABgAAAANxAH4AC3QACEZJ - UkVCQUxMc3EAfgAXAAAABnNxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgAJcQB+ABF1cQB+ - AAYAAAADcQB+AAt0AANUTlRzcQB+ABcAAAACc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+ - AAl0AARtZXRhdXEAfgAGAAAAA3EAfgALdAAMV09PRF9QSUNLQVhFc3EAfgAAc3EAfgADdXEAfgAG - AAAAA3EAfgAIdAAJbWV0YS10eXBldAAIZW5jaGFudHN1cQB+AAYAAAADdAAISXRlbU1ldGF0AApV - TlNQRUNJRklDc3IAN2NvbS5nb29nbGUuY29tbW9uLmNvbGxlY3QuSW1tdXRhYmxlQmlNYXAkU2Vy - aWFsaXplZEZvcm0AAAAAAAAAAAIAAHhxAH4AA3VxAH4ABgAAAAF0AAlESUdfU1BFRUR1cQB+AAYA - AAABc3EAfgAXAAAAAXNxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgAJcQB+AC51cQB+AAYA - AAADcQB+AAt0AAhXT09EX0FYRXNxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgA0cQB+ADV1 - cQB+AAYAAAADcQB+ADdxAH4AOHNxAH4AOXVxAH4ABgAAAAFxAH4APHVxAH4ABgAAAAFxAH4APnNx - AH4AAHNxAH4AA3VxAH4ABgAAAAJxAH4ACHEAfgAJdXEAfgAGAAAAAnEAfgALdAAGU0hFQVJTc3EA - fgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAlxAH4AEXVxAH4ABgAAAANxAH4AC3QABkxBRERF - UnEAfgAecHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBw diff --git a/core/src/main/resources/1.8.8/ladders/gapple.yml b/core/src/main/resources/1.8.8/ladders/gapple.yml deleted file mode 100644 index fee87bc0..00000000 --- a/core/src/main/resources/1.8.8/ladders/gapple.yml +++ /dev/null @@ -1,89 +0,0 @@ -name: Gapple -enabled: true -type: BASIC -settings: - regen: true - hunger: true - ranked: true - editable: true - hitdelay: 20 - rounds: 1 - epcooldown: 13 - startcountdown: 5 - knockback: DEFAULT - gacooldown: 0 - drop-inventory: true - matchtypes: - - DUEL - - PARTY_FFA - - PARTY_SPLIT - - PARTY_VS_PARTY -effects: -- ==: PotionEffect - effect: 1 - duration: 9600 - amplifier: 1 - ambient: false - has-particles: true -- ==: PotionEffect - effect: 5 - duration: 9600 - amplifier: 1 - ambient: false - has-particles: true -icon: - ==: org.bukkit.inventory.ItemStack - type: GOLDEN_APPLE - damage: 1 - meta: - ==: ItemMeta - meta-type: UNSPECIFIC - display-name: §eGapple -armor: | - rO0ABXcEAAAABHNyABpvcmcuYnVra2l0LnV0aWwuaW8uV3JhcHBlcvJQR+zxEm8FAgABTAADbWFw - dAAPTGphdmEvdXRpbC9NYXA7eHBzcgA1Y29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFi - bGVNYXAkU2VyaWFsaXplZEZvcm0AAAAAAAAAAAIAAlsABGtleXN0ABNbTGphdmEvbGFuZy9PYmpl - Y3Q7WwAGdmFsdWVzcQB+AAR4cHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAA - AAN0AAI9PXQABHR5cGV0AARtZXRhdXEAfgAGAAAAA3QAHm9yZy5idWtraXQuaW52ZW50b3J5Lkl0 - ZW1TdGFja3QADURJQU1PTkRfQk9PVFNzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAh0AAltZXRh - LXR5cGV0AAhlbmNoYW50c3VxAH4ABgAAAAN0AAhJdGVtTWV0YXQAClVOU1BFQ0lGSUNzcQB+AAN1 - cQB+AAYAAAACdAAYUFJPVEVDVElPTl9FTlZJUk9OTUVOVEFMdAAPUFJPVEVDVElPTl9GQUxMdXEA - fgAGAAAAAnNyABFqYXZhLmxhbmcuSW50ZWdlchLioKT3gYc4AgABSQAFdmFsdWV4cgAQamF2YS5s - YW5nLk51bWJlcoaslR0LlOCLAgAAeHAAAAADc3EAfgAbAAAABHNxAH4AAHNxAH4AA3VxAH4ABgAA - AANxAH4ACHEAfgAJcQB+AAp1cQB+AAYAAAADcQB+AAx0ABBESUFNT05EX0xFR0dJTkdTc3EAfgAA - c3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+ABFxAH4AEnVxAH4ABgAAAANxAH4AFHEAfgAVc3IAN2Nv - bS5nb29nbGUuY29tbW9uLmNvbGxlY3QuSW1tdXRhYmxlQmlNYXAkU2VyaWFsaXplZEZvcm0AAAAA - AAAAAAIAAHhxAH4AA3VxAH4ABgAAAAFxAH4AGHVxAH4ABgAAAAFxAH4AHXNxAH4AAHNxAH4AA3Vx - AH4ABgAAAANxAH4ACHEAfgAJcQB+AAp1cQB+AAYAAAADcQB+AAx0ABJESUFNT05EX0NIRVNUUExB - VEVzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4AEXEAfgASdXEAfgAGAAAAA3EAfgAUcQB+ - ABVzcQB+ACh1cQB+AAYAAAABcQB+ABh1cQB+AAYAAAABcQB+AB1zcQB+AABzcQB+AAN1cQB+AAYA - AAADcQB+AAhxAH4ACXEAfgAKdXEAfgAGAAAAA3EAfgAMdAAORElBTU9ORF9IRUxNRVRzcQB+AABz - cQB+AAN1cQB+AAYAAAADcQB+AAhxAH4AEXEAfgASdXEAfgAGAAAAA3EAfgAUcQB+ABVzcQB+ACh1 - cQB+AAYAAAABcQB+ABh1cQB+AAYAAAABcQB+AB0= -inventory: | - rO0ABXcEAAAAJHNyABpvcmcuYnVra2l0LnV0aWwuaW8uV3JhcHBlcvJQR+zxEm8FAgABTAADbWFw - dAAPTGphdmEvdXRpbC9NYXA7eHBzcgA1Y29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFi - bGVNYXAkU2VyaWFsaXplZEZvcm0AAAAAAAAAAAIAAlsABGtleXN0ABNbTGphdmEvbGFuZy9PYmpl - Y3Q7WwAGdmFsdWVzcQB+AAR4cHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAA - AAN0AAI9PXQABHR5cGV0AARtZXRhdXEAfgAGAAAAA3QAHm9yZy5idWtraXQuaW52ZW50b3J5Lkl0 - ZW1TdGFja3QADURJQU1PTkRfU1dPUkRzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAh0AAltZXRh - LXR5cGV0AAhlbmNoYW50c3VxAH4ABgAAAAN0AAhJdGVtTWV0YXQAClVOU1BFQ0lGSUNzcQB+AAN1 - cQB+AAYAAAACdAAKREFNQUdFX0FMTHQAC0ZJUkVfQVNQRUNUdXEAfgAGAAAAAnNyABFqYXZhLmxh - bmcuSW50ZWdlchLioKT3gYc4AgABSQAFdmFsdWV4cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCL - AgAAeHAAAAAFc3EAfgAbAAAAAnNxAH4AAHNxAH4AA3VxAH4ABgAAAARxAH4ACHEAfgAJdAAGZGFt - YWdldAAGYW1vdW50dXEAfgAGAAAABHEAfgAMdAAMR09MREVOX0FQUExFc3IAD2phdmEubGFuZy5T - aG9ydGhNNxM0YNpSAgABUwAFdmFsdWV4cQB+ABwAAXNxAH4AGwAAAEBzcQB+AABzcQB+AAN1cQB+ - AAYAAAADcQB+AAhxAH4ACXEAfgAKdXEAfgAGAAAAA3EAfgAMdAAORElBTU9ORF9IRUxNRVRzcQB+ - AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4AEXEAfgASdXEAfgAGAAAAA3EAfgAUcQB+ABVzcgA3 - Y29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFibGVCaU1hcCRTZXJpYWxpemVkRm9ybQAA - AAAAAAAAAgAAeHEAfgADdXEAfgAGAAAAAXQAGFBST1RFQ1RJT05fRU5WSVJPTk1FTlRBTHVxAH4A - BgAAAAFzcQB+ABsAAAADc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAlxAH4ACnVxAH4A - BgAAAANxAH4ADHQADURJQU1PTkRfQk9PVFNzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4A - EXEAfgASdXEAfgAGAAAAA3EAfgAUcQB+ABVzcQB+AAN1cQB+AAYAAAACcQB+ADV0AA9QUk9URUNU - SU9OX0ZBTEx1cQB+AAYAAAACcQB+ADdzcQB+ABsAAAAEc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EA - fgAIcQB+AAlxAH4ACnVxAH4ABgAAAANxAH4ADHQAEERJQU1PTkRfTEVHR0lOR1NzcQB+AABzcQB+ - AAN1cQB+AAYAAAADcQB+AAhxAH4AEXEAfgASdXEAfgAGAAAAA3EAfgAUcQB+ABVzcQB+ADJ1cQB+ - AAYAAAABcQB+ADV1cQB+AAYAAAABcQB+ADdzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4A - CXEAfgAKdXEAfgAGAAAAA3EAfgAMdAASRElBTU9ORF9DSEVTVFBMQVRFc3EAfgAAc3EAfgADdXEA - fgAGAAAAA3EAfgAIcQB+ABFxAH4AEnVxAH4ABgAAAANxAH4AFHEAfgAVc3EAfgAydXEAfgAGAAAA - AXEAfgA1dXEAfgAGAAAAAXEAfgA3cHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBw diff --git a/core/src/main/resources/1.8.8/ladders/nodebuff.yml b/core/src/main/resources/1.8.8/ladders/nodebuff.yml deleted file mode 100644 index eb528672..00000000 --- a/core/src/main/resources/1.8.8/ladders/nodebuff.yml +++ /dev/null @@ -1,129 +0,0 @@ -name: NoDebuff -enabled: true -type: BASIC -settings: - regen: true - hunger: true - ranked: true - editable: true - hitdelay: 20 - rounds: 1 - epcooldown: 13 - startcountdown: 5 - knockback: DEFAULT - gacooldown: 0 - drop-inventory: true - matchtypes: - - DUEL - - PARTY_FFA - - PARTY_SPLIT - - PARTY_VS_PARTY -effects: [] -icon: - ==: org.bukkit.inventory.ItemStack - type: POTION - damage: 8261 - meta: - ==: ItemMeta - meta-type: POTION - display-name: §aNo Debuff -armor: | - rO0ABXcEAAAABHNyABpvcmcuYnVra2l0LnV0aWwuaW8uV3JhcHBlcvJQR+zxEm8FAgABTAADbWFw - dAAPTGphdmEvdXRpbC9NYXA7eHBzcgA1Y29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFi - bGVNYXAkU2VyaWFsaXplZEZvcm0AAAAAAAAAAAIAAlsABGtleXN0ABNbTGphdmEvbGFuZy9PYmpl - Y3Q7WwAGdmFsdWVzcQB+AAR4cHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAA - AAN0AAI9PXQABHR5cGV0AARtZXRhdXEAfgAGAAAAA3QAHm9yZy5idWtraXQuaW52ZW50b3J5Lkl0 - ZW1TdGFja3QADURJQU1PTkRfQk9PVFNzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAh0AAltZXRh - LXR5cGV0AAhlbmNoYW50c3VxAH4ABgAAAAN0AAhJdGVtTWV0YXQAClVOU1BFQ0lGSUNzcQB+AAN1 - cQB+AAYAAAADdAAYUFJPVEVDVElPTl9FTlZJUk9OTUVOVEFMdAAKRFVSQUJJTElUWXQAD1BST1RF - Q1RJT05fRkFMTHVxAH4ABgAAAANzcgARamF2YS5sYW5nLkludGVnZXIS4qCk94GHOAIAAUkABXZh - bHVleHIAEGphdmEubGFuZy5OdW1iZXKGrJUdC5TgiwIAAHhwAAAAAnNxAH4AHAAAAANzcQB+ABwA - AAAEc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAlxAH4ACnVxAH4ABgAAAANxAH4ADHQA - EERJQU1PTkRfTEVHR0lOR1NzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4AEXEAfgASdXEA - fgAGAAAAA3EAfgAUcQB+ABVzcQB+AAN1cQB+AAYAAAACcQB+ABhxAH4AGXVxAH4ABgAAAAJxAH4A - HnEAfgAfc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAlxAH4ACnVxAH4ABgAAAANxAH4A - DHQAEkRJQU1PTkRfQ0hFU1RQTEFURXNxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgARcQB+ - ABJ1cQB+AAYAAAADcQB+ABRxAH4AFXNxAH4AA3VxAH4ABgAAAAJxAH4AGHEAfgAZdXEAfgAGAAAA - AnEAfgAecQB+AB9zcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4ACXEAfgAKdXEAfgAGAAAA - A3EAfgAMdAAORElBTU9ORF9IRUxNRVRzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4AEXEA - fgASdXEAfgAGAAAAA3EAfgAUcQB+ABVzcQB+AAN1cQB+AAYAAAACcQB+ABhxAH4AGXVxAH4ABgAA - AAJxAH4AHnEAfgAf -inventory: | - rO0ABXcEAAAAJHNyABpvcmcuYnVra2l0LnV0aWwuaW8uV3JhcHBlcvJQR+zxEm8FAgABTAADbWFw - dAAPTGphdmEvdXRpbC9NYXA7eHBzcgA1Y29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFi - bGVNYXAkU2VyaWFsaXplZEZvcm0AAAAAAAAAAAIAAlsABGtleXN0ABNbTGphdmEvbGFuZy9PYmpl - Y3Q7WwAGdmFsdWVzcQB+AAR4cHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAA - AAN0AAI9PXQABHR5cGV0AARtZXRhdXEAfgAGAAAAA3QAHm9yZy5idWtraXQuaW52ZW50b3J5Lkl0 - ZW1TdGFja3QADURJQU1PTkRfU1dPUkRzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAh0AAltZXRh - LXR5cGV0AAhlbmNoYW50c3VxAH4ABgAAAAN0AAhJdGVtTWV0YXQAClVOU1BFQ0lGSUNzcQB+AAN1 - cQB+AAYAAAADdAAKREFNQUdFX0FMTHQACkRVUkFCSUxJVFl0AAtGSVJFX0FTUEVDVHVxAH4ABgAA - AANzcgARamF2YS5sYW5nLkludGVnZXIS4qCk94GHOAIAAUkABXZhbHVleHIAEGphdmEubGFuZy5O - dW1iZXKGrJUdC5TgiwIAAHhwAAAAA3EAfgAec3EAfgAcAAAAAnNxAH4AAHNxAH4AA3VxAH4ABgAA - AANxAH4ACHEAfgAJdAAGYW1vdW50dXEAfgAGAAAAA3EAfgAMdAALRU5ERVJfUEVBUkxzcQB+ABwA - AAAQc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAl0AAZkYW1hZ2V1cQB+AAYAAAADcQB+ - AAx0AAZQT1RJT05zcgAPamF2YS5sYW5nLlNob3J0aE03EzRg2lICAAFTAAV2YWx1ZXhxAH4AHSBD - c3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAlxAH4AKnVxAH4ABgAAAANxAH4ADHEAfgAs - c3EAfgAtICJzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4ACXEAfgAqdXEAfgAGAAAAA3EA - fgAMcQB+ACxzcQB+AC1AJXNxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgAJcQB+ACp1cQB+ - AAYAAAADcQB+AAxxAH4ALHNxAH4ALUAlc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAlx - AH4AKnVxAH4ABgAAAANxAH4ADHEAfgAsc3EAfgAtQCVzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+ - AAhxAH4ACXEAfgAqdXEAfgAGAAAAA3EAfgAMcQB+ACxzcQB+AC1AJXNxAH4AAHNxAH4AA3VxAH4A - BgAAAANxAH4ACHEAfgAJcQB+ACN1cQB+AAYAAAADcQB+AAx0AAtDT09LRURfQkVFRnNxAH4AHAAA - AEBzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4ACXEAfgAqdXEAfgAGAAAAA3EAfgAMcQB+ - ACxzcQB+AC1AJXNxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgAJcQB+ACp1cQB+AAYAAAAD - cQB+AAxxAH4ALHNxAH4ALUAlc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAlxAH4AKnVx - AH4ABgAAAANxAH4ADHEAfgAsc3EAfgAtQCVzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4A - CXEAfgAqdXEAfgAGAAAAA3EAfgAMcQB+ACxzcQB+AC1AJXNxAH4AAHNxAH4AA3VxAH4ABgAAAANx - AH4ACHEAfgAJcQB+ACp1cQB+AAYAAAADcQB+AAxxAH4ALHNxAH4ALUAlc3EAfgAAc3EAfgADdXEA - fgAGAAAAA3EAfgAIcQB+AAlxAH4AKnVxAH4ABgAAAANxAH4ADHEAfgAsc3EAfgAtQCVzcQB+AABz - cQB+AAN1cQB+AAYAAAADcQB+AAhxAH4ACXEAfgAqdXEAfgAGAAAAA3EAfgAMcQB+ACxzcQB+AC1A - JXNxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgAJcQB+ACp1cQB+AAYAAAADcQB+AAxxAH4A - LHNxAH4ALUAlc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAlxAH4AKnVxAH4ABgAAAANx - AH4ADHEAfgAsc3EAfgAtICJzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4ACXEAfgAqdXEA - fgAGAAAAA3EAfgAMcQB+ACxzcQB+AC1AJXNxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgAJ - cQB+ACp1cQB+AAYAAAADcQB+AAxxAH4ALHNxAH4ALUAlc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EA - fgAIcQB+AAlxAH4AKnVxAH4ABgAAAANxAH4ADHEAfgAsc3EAfgAtQCVzcQB+AABzcQB+AAN1cQB+ - AAYAAAADcQB+AAhxAH4ACXEAfgAqdXEAfgAGAAAAA3EAfgAMcQB+ACxzcQB+AC1AJXNxAH4AAHNx - AH4AA3VxAH4ABgAAAANxAH4ACHEAfgAJcQB+ACp1cQB+AAYAAAADcQB+AAxxAH4ALHNxAH4ALUAl - c3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAlxAH4AKnVxAH4ABgAAAANxAH4ADHEAfgAs - c3EAfgAtQCVzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4ACXEAfgAqdXEAfgAGAAAAA3EA - fgAMcQB+ACxzcQB+AC1AJXNxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgAJcQB+ACp1cQB+ - AAYAAAADcQB+AAxxAH4ALHNxAH4ALUAlc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAlx - AH4AKnVxAH4ABgAAAANxAH4ADHEAfgAsc3EAfgAtICJzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+ - AAhxAH4ACXEAfgAqdXEAfgAGAAAAA3EAfgAMcQB+ACxzcQB+AC1AJXNxAH4AAHNxAH4AA3VxAH4A - BgAAAANxAH4ACHEAfgAJcQB+ACp1cQB+AAYAAAADcQB+AAxxAH4ALHNxAH4ALUAlc3EAfgAAc3EA - fgADdXEAfgAGAAAAA3EAfgAIcQB+AAlxAH4AKnVxAH4ABgAAAANxAH4ADHEAfgAsc3EAfgAtQCVz - cQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4ACXEAfgAqdXEAfgAGAAAAA3EAfgAMcQB+ACxz - cQB+AC1AJXNxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgAJcQB+ACp1cQB+AAYAAAADcQB+ - AAxxAH4ALHNxAH4ALUAlc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAlxAH4AKnVxAH4A - BgAAAANxAH4ADHEAfgAsc3EAfgAtQCVzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4ACXEA - fgAqdXEAfgAGAAAAA3EAfgAMcQB+ACxzcQB+AC1AJXNxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4A - CHEAfgAJcQB+ACp1cQB+AAYAAAADcQB+AAxxAH4ALHNxAH4ALUAlc3EAfgAAc3EAfgADdXEAfgAG - AAAAA3EAfgAIcQB+AAlxAH4AKnVxAH4ABgAAAANxAH4ADHEAfgAsc3EAfgAtICI= -custom-kit-extra-items: - unranked: | - rO0ABXcEAAAAHHNyABpvcmcuYnVra2l0LnV0aWwuaW8uV3JhcHBlcvJQR+zxEm8FAgABTAADbWFw - dAAPTGphdmEvdXRpbC9NYXA7eHBzcgA1Y29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFi - bGVNYXAkU2VyaWFsaXplZEZvcm0AAAAAAAAAAAIAAlsABGtleXN0ABNbTGphdmEvbGFuZy9PYmpl - Y3Q7WwAGdmFsdWVzcQB+AAR4cHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAA - AAN0AAI9PXQABHR5cGV0AAZkYW1hZ2V1cQB+AAYAAAADdAAeb3JnLmJ1a2tpdC5pbnZlbnRvcnku - SXRlbVN0YWNrdAAGUE9USU9Oc3IAD2phdmEubGFuZy5TaG9ydGhNNxM0YNpSAgABUwAFdmFsdWV4 - cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHAgInNxAH4AAHNxAH4AA3VxAH4ABgAAAANx - AH4ACHEAfgAJcQB+AAp1cQB+AAYAAAADcQB+AAxxAH4ADXNxAH4ADiBDc3EAfgAAc3EAfgADdXEA - fgAGAAAAA3EAfgAIcQB+AAlxAH4ACnVxAH4ABgAAAANxAH4ADHEAfgANc3EAfgAOQCVwc3EAfgAA - c3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAl0AAZhbW91bnR1cQB+AAYAAAADcQB+AAx0AAxCQUtF - RF9QT1RBVE9zcgARamF2YS5sYW5nLkludGVnZXIS4qCk94GHOAIAAUkABXZhbHVleHEAfgAPAAAA - QHNxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgAJcQB+AB51cQB+AAYAAAADcQB+AAx0AA1H - T0xERU5fQ0FSUk9UcQB+ACJzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4ACXEAfgAedXEA - fgAGAAAAA3EAfgAMdAALQ09PS0VEX0JFRUZxAH4AInBwcHBwcHBwcHBwcHBwcHBwcHBwcA== - ranked: | - rO0ABXcEAAAAHHNyABpvcmcuYnVra2l0LnV0aWwuaW8uV3JhcHBlcvJQR+zxEm8FAgABTAADbWFw - dAAPTGphdmEvdXRpbC9NYXA7eHBzcgA1Y29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFi - bGVNYXAkU2VyaWFsaXplZEZvcm0AAAAAAAAAAAIAAlsABGtleXN0ABNbTGphdmEvbGFuZy9PYmpl - Y3Q7WwAGdmFsdWVzcQB+AAR4cHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAA - AAN0AAI9PXQABHR5cGV0AAZhbW91bnR1cQB+AAYAAAADdAAeb3JnLmJ1a2tpdC5pbnZlbnRvcnku - SXRlbVN0YWNrdAAMQkFLRURfUE9UQVRPc3IAEWphdmEubGFuZy5JbnRlZ2VyEuKgpPeBhzgCAAFJ - AAV2YWx1ZXhyABBqYXZhLmxhbmcuTnVtYmVyhqyVHQuU4IsCAAB4cAAAAEBzcQB+AABzcQB+AAN1 - cQB+AAYAAAADcQB+AAhxAH4ACXEAfgAKdXEAfgAGAAAAA3EAfgAMdAANR09MREVOX0NBUlJPVHEA - fgAQc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAlxAH4ACnVxAH4ABgAAAANxAH4ADHQA - C0NPT0tFRF9CRUVGcQB+ABBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBw diff --git a/core/src/main/resources/1.8.8/ladders/pearlfight.yml b/core/src/main/resources/1.8.8/ladders/pearlfight.yml deleted file mode 100644 index cff04c41..00000000 --- a/core/src/main/resources/1.8.8/ladders/pearlfight.yml +++ /dev/null @@ -1,53 +0,0 @@ -name: PearlFight -enabled: true -type: PEARL_FIGHT -settings: - regen: true - hunger: false - ranked: true - editable: true - hitdelay: 20 - rounds: 3 - epcooldown: 0 - startcountdown: 3 - knockback: DEFAULT - gacooldown: 0 - drop-inventory: false - matchtypes: - - DUEL - - PARTY_FFA - - PARTY_SPLIT - - PARTY_VS_PARTY -tempbuild-delay: 6 -icon: - ==: org.bukkit.inventory.ItemStack - type: ENDER_PEARL - meta: - ==: ItemMeta - meta-type: UNSPECIFIC - display-name: §bPearl Fight -armor: | - rO0ABXcEAAAABHNyABpvcmcuYnVra2l0LnV0aWwuaW8uV3JhcHBlcvJQR+zxEm8FAgABTAADbWFw - dAAPTGphdmEvdXRpbC9NYXA7eHBzcgA1Y29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFi - bGVNYXAkU2VyaWFsaXplZEZvcm0AAAAAAAAAAAIAAlsABGtleXN0ABNbTGphdmEvbGFuZy9PYmpl - Y3Q7WwAGdmFsdWVzcQB+AAR4cHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAA - AAJ0AAI9PXQABHR5cGV1cQB+AAYAAAACdAAeb3JnLmJ1a2tpdC5pbnZlbnRvcnkuSXRlbVN0YWNr - dAANTEVBVEhFUl9CT09UU3NxAH4AAHNxAH4AA3VxAH4ABgAAAAJxAH4ACHEAfgAJdXEAfgAGAAAA - AnEAfgALdAAQTEVBVEhFUl9MRUdHSU5HU3NxAH4AAHNxAH4AA3VxAH4ABgAAAAJxAH4ACHEAfgAJ - dXEAfgAGAAAAAnEAfgALdAASTEVBVEhFUl9DSEVTVFBMQVRFc3EAfgAAc3EAfgADdXEAfgAGAAAA - AnEAfgAIcQB+AAl1cQB+AAYAAAACcQB+AAt0AA5MRUFUSEVSX0hFTE1FVA== -inventory: | - rO0ABXcEAAAAJHNyABpvcmcuYnVra2l0LnV0aWwuaW8uV3JhcHBlcvJQR+zxEm8FAgABTAADbWFw - dAAPTGphdmEvdXRpbC9NYXA7eHBzcgA1Y29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFi - bGVNYXAkU2VyaWFsaXplZEZvcm0AAAAAAAAAAAIAAlsABGtleXN0ABNbTGphdmEvbGFuZy9PYmpl - Y3Q7WwAGdmFsdWVzcQB+AAR4cHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAA - AAN0AAI9PXQABHR5cGV0AARtZXRhdXEAfgAGAAAAA3QAHm9yZy5idWtraXQuaW52ZW50b3J5Lkl0 - ZW1TdGFja3QACUJMQVpFX1JPRHNxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHQACW1ldGEtdHlw - ZXQACGVuY2hhbnRzdXEAfgAGAAAAA3QACEl0ZW1NZXRhdAAKVU5TUEVDSUZJQ3NyADdjb20uZ29v - Z2xlLmNvbW1vbi5jb2xsZWN0LkltbXV0YWJsZUJpTWFwJFNlcmlhbGl6ZWRGb3JtAAAAAAAAAAAC - AAB4cQB+AAN1cQB+AAYAAAABdAAJS05PQ0tCQUNLdXEAfgAGAAAAAXNyABFqYXZhLmxhbmcuSW50 - ZWdlchLioKT3gYc4AgABSQAFdmFsdWV4cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHAA - AAABc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAl0AAZhbW91bnR1cQB+AAYAAAADcQB+ - AAx0AAtFTkRFUl9QRUFSTHNxAH4AGwAAAAhzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4A - CXEAfgAhdXEAfgAGAAAAA3EAfgAMdAAEV09PTHNxAH4AGwAAAAxwcHBwcHBwcHBwcHBwcHBwcHBw - cHBwcHBwcHBwcHBwcHA= diff --git a/core/src/main/resources/1.8.8/ladders/sg.yml b/core/src/main/resources/1.8.8/ladders/sg.yml deleted file mode 100644 index 8058bfd9..00000000 --- a/core/src/main/resources/1.8.8/ladders/sg.yml +++ /dev/null @@ -1,54 +0,0 @@ -name: SG -enabled: true -type: BUILD -settings: - regen: true - hunger: true - ranked: true - editable: true - hitdelay: 20 - rounds: 1 - epcooldown: 13 - startcountdown: 5 - knockback: DEFAULT - gacooldown: 0 - drop-inventory: false - matchtypes: - - DUEL - - PARTY_FFA - - PARTY_SPLIT - - PARTY_VS_PARTY -effects: [] -icon: - ==: org.bukkit.inventory.ItemStack - type: FLINT_AND_STEEL - meta: - ==: ItemMeta - meta-type: UNSPECIFIC - display-name: §aSG -armor: | - rO0ABXcEAAAABHNyABpvcmcuYnVra2l0LnV0aWwuaW8uV3JhcHBlcvJQR+zxEm8FAgABTAADbWFw - dAAPTGphdmEvdXRpbC9NYXA7eHBzcgA1Y29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFi - bGVNYXAkU2VyaWFsaXplZEZvcm0AAAAAAAAAAAIAAlsABGtleXN0ABNbTGphdmEvbGFuZy9PYmpl - Y3Q7WwAGdmFsdWVzcQB+AAR4cHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAA - AAJ0AAI9PXQABHR5cGV1cQB+AAYAAAACdAAeb3JnLmJ1a2tpdC5pbnZlbnRvcnkuSXRlbVN0YWNr - dAAKSVJPTl9CT09UU3NxAH4AAHNxAH4AA3VxAH4ABgAAAAJxAH4ACHEAfgAJdXEAfgAGAAAAAnEA - fgALdAANSVJPTl9MRUdHSU5HU3NxAH4AAHNxAH4AA3VxAH4ABgAAAAJxAH4ACHEAfgAJdXEAfgAG - AAAAAnEAfgALdAAPSVJPTl9DSEVTVFBMQVRFc3EAfgAAc3EAfgADdXEAfgAGAAAAAnEAfgAIcQB+ - AAl1cQB+AAYAAAACcQB+AAt0ABBDSEFJTk1BSUxfSEVMTUVU -inventory: | - rO0ABXcEAAAAJHNyABpvcmcuYnVra2l0LnV0aWwuaW8uV3JhcHBlcvJQR+zxEm8FAgABTAADbWFw - dAAPTGphdmEvdXRpbC9NYXA7eHBzcgA1Y29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFi - bGVNYXAkU2VyaWFsaXplZEZvcm0AAAAAAAAAAAIAAlsABGtleXN0ABNbTGphdmEvbGFuZy9PYmpl - Y3Q7WwAGdmFsdWVzcQB+AAR4cHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAA - AAJ0AAI9PXQABHR5cGV1cQB+AAYAAAACdAAeb3JnLmJ1a2tpdC5pbnZlbnRvcnkuSXRlbVN0YWNr - dAAKSVJPTl9TV09SRHNxAH4AAHNxAH4AA3VxAH4ABgAAAAJxAH4ACHEAfgAJdXEAfgAGAAAAAnEA - fgALdAALRklTSElOR19ST0RzcQB+AABzcQB+AAN1cQB+AAYAAAACcQB+AAhxAH4ACXVxAH4ABgAA - AAJxAH4AC3QAA0JPV3NxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgAJdAAGZGFtYWdldXEA - fgAGAAAAA3EAfgALdAAPRkxJTlRfQU5EX1NURUVMc3IAD2phdmEubGFuZy5TaG9ydGhNNxM0YNpS - AgABUwAFdmFsdWV4cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHAAPHNxAH4AAHNxAH4A - A3VxAH4ABgAAAAJxAH4ACHEAfgAJdXEAfgAGAAAAAnEAfgALdAAMR09MREVOX0FQUExFc3EAfgAA - c3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAl0AAZhbW91bnR1cQB+AAYAAAADcQB+AAt0AAxCQUtF - RF9QT1RBVE9zcgARamF2YS5sYW5nLkludGVnZXIS4qCk94GHOAIAAUkABXZhbHVleHEAfgAeAAAA - BnBwcHNxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgAJcQB+ACh1cQB+AAYAAAADcQB+AAt0 - AAVBUlJPV3NxAH4AKwAAAApwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcA== diff --git a/core/src/main/resources/1.8.8/ladders/skywars.yml b/core/src/main/resources/1.8.8/ladders/skywars.yml deleted file mode 100644 index 862e9856..00000000 --- a/core/src/main/resources/1.8.8/ladders/skywars.yml +++ /dev/null @@ -1,142 +0,0 @@ -name: SkyWars -enabled: true -type: SKYWARS -settings: - regen: true - hunger: true - ranked: true - editable: true - hitdelay: 20 - rounds: 1 - epcooldown: 10 - startcountdown: 3 - knockback: DEFAULT - gacooldown: 0 - drop-inventory: true - matchtypes: - - PARTY_VS_PARTY - - PARTY_SPLIT - - DUEL -effects: [] -icon: - ==: org.bukkit.inventory.ItemStack - type: EYE_OF_ENDER - meta: - ==: ItemMeta - meta-type: UNSPECIFIC - display-name: §3SkyWars -armor: | - rO0ABXcEAAAABHNyABpvcmcuYnVra2l0LnV0aWwuaW8uV3JhcHBlcvJQR+zxEm8FAgABTAADbWFw - dAAPTGphdmEvdXRpbC9NYXA7eHBzcgA1Y29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFi - bGVNYXAkU2VyaWFsaXplZEZvcm0AAAAAAAAAAAIAAlsABGtleXN0ABNbTGphdmEvbGFuZy9PYmpl - Y3Q7WwAGdmFsdWVzcQB+AAR4cHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAA - AAJ0AAI9PXQABHR5cGV1cQB+AAYAAAACdAAeb3JnLmJ1a2tpdC5pbnZlbnRvcnkuSXRlbVN0YWNr - dAAKSVJPTl9CT09UU3NxAH4AAHNxAH4AA3VxAH4ABgAAAAJxAH4ACHEAfgAJdXEAfgAGAAAAAnEA - fgALdAANSVJPTl9MRUdHSU5HU3NxAH4AAHNxAH4AA3VxAH4ABgAAAAJxAH4ACHEAfgAJdXEAfgAG - AAAAAnEAfgALdAAPSVJPTl9DSEVTVFBMQVRFc3EAfgAAc3EAfgADdXEAfgAGAAAAAnEAfgAIcQB+ - AAl1cQB+AAYAAAACcQB+AAt0AAtJUk9OX0hFTE1FVA== -inventory: | - rO0ABXcEAAAAJHNyABpvcmcuYnVra2l0LnV0aWwuaW8uV3JhcHBlcvJQR+zxEm8FAgABTAADbWFw - dAAPTGphdmEvdXRpbC9NYXA7eHBzcgA1Y29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFi - bGVNYXAkU2VyaWFsaXplZEZvcm0AAAAAAAAAAAIAAlsABGtleXN0ABNbTGphdmEvbGFuZy9PYmpl - Y3Q7WwAGdmFsdWVzcQB+AAR4cHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAA - AAJ0AAI9PXQABHR5cGV1cQB+AAYAAAACdAAeb3JnLmJ1a2tpdC5pbnZlbnRvcnkuSXRlbVN0YWNr - dAAKSVJPTl9TV09SRHNxAH4AAHNxAH4AA3VxAH4ABgAAAAJxAH4ACHEAfgAJdXEAfgAGAAAAAnEA - fgALdAALRklTSElOR19ST0RzcQB+AABzcQB+AAN1cQB+AAYAAAACcQB+AAhxAH4ACXVxAH4ABgAA - AAJxAH4AC3QAC0VOREVSX1BFQVJMc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAl0AAZh - bW91bnR1cQB+AAYAAAADcQB+AAt0AARXT09Ec3IAEWphdmEubGFuZy5JbnRlZ2VyEuKgpPeBhzgC - AAFJAAV2YWx1ZXhyABBqYXZhLmxhbmcuTnVtYmVyhqyVHQuU4IsCAAB4cAAAAEBzcQB+AABzcQB+ - AAN1cQB+AAYAAAACcQB+AAhxAH4ACXVxAH4ABgAAAAJxAH4AC3QADFdBVEVSX0JVQ0tFVHNxAH4A - AHNxAH4AA3VxAH4ABgAAAAJxAH4ACHEAfgAJdXEAfgAGAAAAAnEAfgALdAALTEFWQV9CVUNLRVRz - cQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4ACXQABmRhbWFnZXVxAH4ABgAAAANxAH4AC3QA - BlBPVElPTnNyAA9qYXZhLmxhbmcuU2hvcnRoTTcTNGDaUgIAAVMABXZhbHVleHEAfgAeQCVzcQB+ - AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4ACXEAfgAadXEAfgAGAAAAA3EAfgALdAAMR09MREVO - X0FQUExFc3EAfgAdAAAAAnNxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgAJcQB+ABp1cQB+ - AAYAAAADcQB+AAt0AAtDT09LRURfQkVFRnEAfgAfcHBwcHBwcHBwcHBwcHBwcHBzcQB+AABzcQB+ - AAN1cQB+AAYAAAADcQB+AAhxAH4ACXEAfgAtdXEAfgAGAAAAA3EAfgALcQB+AC9zcQB+ADBAJXNx - AH4AAHNxAH4AA3VxAH4ABgAAAAJxAH4ACHEAfgAJdXEAfgAGAAAAAnEAfgALdAANU1RPTkVfUElD - S0FYRXNxAH4AAHNxAH4AA3VxAH4ABgAAAAJxAH4ACHEAfgAJdXEAfgAGAAAAAnEAfgALdAAJU1RP - TkVfQVhFc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAlxAH4AGnVxAH4ABgAAAANxAH4A - C3QAA0VHR3NxAH4AHQAAABBzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4ACXEAfgAadXEA - fgAGAAAAA3EAfgALdAALQ09CQkxFU1RPTkVxAH4AH3BwcHBzcQB+AABzcQB+AAN1cQB+AAYAAAAD - cQB+AAhxAH4ACXEAfgAtdXEAfgAGAAAAA3EAfgALcQB+AC9zcQB+ADBAJQ== -custom-kit-extra-items: - unranked: | - rO0ABXcEAAAAHHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHA= -skywars-loot: | - rO0ABXcEAAAALXNyABpvcmcuYnVra2l0LnV0aWwuaW8uV3JhcHBlcvJQR+zxEm8FAgABTAADbWFw - dAAPTGphdmEvdXRpbC9NYXA7eHBzcgA1Y29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFi - bGVNYXAkU2VyaWFsaXplZEZvcm0AAAAAAAAAAAIAAlsABGtleXN0ABNbTGphdmEvbGFuZy9PYmpl - Y3Q7WwAGdmFsdWVzcQB+AAR4cHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAA - AAN0AAI9PXQABHR5cGV0AARtZXRhdXEAfgAGAAAAA3QAHm9yZy5idWtraXQuaW52ZW50b3J5Lkl0 - ZW1TdGFja3QAA0JPV3NxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHQACW1ldGEtdHlwZXQACGVu - Y2hhbnRzdXEAfgAGAAAAA3QACEl0ZW1NZXRhdAAKVU5TUEVDSUZJQ3NyADdjb20uZ29vZ2xlLmNv - bW1vbi5jb2xsZWN0LkltbXV0YWJsZUJpTWFwJFNlcmlhbGl6ZWRGb3JtAAAAAAAAAAACAAB4cQB+ - AAN1cQB+AAYAAAABdAAMQVJST1dfREFNQUdFdXEAfgAGAAAAAXNyABFqYXZhLmxhbmcuSW50ZWdl - chLioKT3gYc4AgABSQAFdmFsdWV4cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHAAAAAC - c3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAl0AAZhbW91bnR1cQB+AAYAAAADcQB+AAx0 - AAVBUlJPV3NxAH4AGwAAAApzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4ACXEAfgAhdXEA - fgAGAAAAA3EAfgAMcQB+ACNzcQB+ABsAAAAGc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+ - AAlxAH4AIXVxAH4ABgAAAANxAH4ADHEAfgAjc3EAfgAbAAAABHNxAH4AAHNxAH4AA3VxAH4ABgAA - AAJxAH4ACHEAfgAJdXEAfgAGAAAAAnEAfgAMcQB+AA1zcQB+AABzcQB+AAN1cQB+AAYAAAACcQB+ - AAhxAH4ACXVxAH4ABgAAAAJxAH4ADHQAEERJQU1PTkRfTEVHR0lOR1NzcQB+AABzcQB+AAN1cQB+ - AAYAAAACcQB+AAhxAH4ACXVxAH4ABgAAAAJxAH4ADHQADkRJQU1PTkRfSEVMTUVUc3EAfgAAc3EA - fgADdXEAfgAGAAAAA3EAfgAIcQB+AAlxAH4AIXVxAH4ABgAAAANxAH4ADHQABVNUSUNLcQB+AB1z - cQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4ACXEAfgAhdXEAfgAGAAAAA3EAfgAMdAADV0VC - c3EAfgAbAAAABXNxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgAJcQB+AAp1cQB+AAYAAAAD - cQB+AAxxAH4APHNxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgARcQB+ABJ1cQB+AAYAAAAD - cQB+ABRxAH4AFXNxAH4AFnVxAH4ABgAAAAF0ABhQUk9URUNUSU9OX0VOVklST05NRU5UQUx1cQB+ - AAYAAAABc3EAfgAbAAAAAXNxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgAJcQB+AAp1cQB+ - AAYAAAADcQB+AAx0ABJESUFNT05EX0NIRVNUUExBVEVzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+ - AAhxAH4AEXEAfgASdXEAfgAGAAAAA3EAfgAUcQB+ABVzcQB+ABZ1cQB+AAYAAAABcQB+AFJ1cQB+ - AAYAAAABcQB+AFRzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4ACXEAfgAKdXEAfgAGAAAA - A3EAfgAMcQB+ADdzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4AEXEAfgASdXEAfgAGAAAA - A3EAfgAUcQB+ABVzcQB+ABZ1cQB+AAYAAAABcQB+AFJ1cQB+AAYAAAABcQB+AFRzcQB+AABzcQB+ - AAN1cQB+AAYAAAADcQB+AAhxAH4ACXEAfgAKdXEAfgAGAAAAA3EAfgAMdAANRElBTU9ORF9CT09U - U3NxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgARcQB+ABJ1cQB+AAYAAAADcQB+ABRxAH4A - FXNxAH4AFnVxAH4ABgAAAAFxAH4AUnVxAH4ABgAAAAFxAH4AVHNxAH4AAHNxAH4AA3VxAH4ABgAA - AAJxAH4ACHEAfgAJdXEAfgAGAAAAAnEAfgAMdAANRElBTU9ORF9TV09SRHNxAH4AAHNxAH4AA3Vx - AH4ABgAAAAJxAH4ACHEAfgAJdXEAfgAGAAAAAnEAfgAMdAAPRElBTU9ORF9QSUNLQVhFc3EAfgAA - c3EAfgADdXEAfgAGAAAAAnEAfgAIcQB+AAl1cQB+AAYAAAACcQB+AAx0AAtESUFNT05EX0FYRXNx - AH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgAJdAAGZGFtYWdldXEAfgAGAAAAA3EAfgAMdAAG - UE9USU9Oc3IAD2phdmEubGFuZy5TaG9ydGhNNxM0YNpSAgABUwAFdmFsdWV4cQB+ABxAI3NxAH4A - AHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgAJcQB+AIp1cQB+AAYAAAADcQB+AAxxAH4AjHNxAH4A - jSAjc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAlxAH4AinVxAH4ABgAAAANxAH4ADHEA - fgCMc3EAfgCNQCVzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4ACXEAfgCKdXEAfgAGAAAA - A3EAfgAMcQB+AIxzcQB+AI1AJXNxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgAJcQB+AIp1 - cQB+AAYAAAADcQB+AAxxAH4AjHNxAH4AjUAlc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+ - AAlxAH4AinVxAH4ABgAAAANxAH4ADHEAfgCMc3EAfgCNQARzcQB+AABzcQB+AAN1cQB+AAYAAAAD - cQB+AAhxAH4ACXEAfgCKdXEAfgAGAAAAA3EAfgAMcQB+AIxzcQB+AI1AAnNxAH4AAHNxAH4AA3Vx - AH4ABgAAAANxAH4ACHEAfgAJcQB+AIp1cQB+AAYAAAADcQB+AAxxAH4AjHNxAH4AjSABc3EAfgAA - c3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAlxAH4AinVxAH4ABgAAAANxAH4ADHEAfgCMc3EAfgCN - QAFzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4ACXEAfgAKdXEAfgAGAAAAA3EAfgAMdAAK - SVJPTl9TUEFERXNxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgARcQB+ABJ1cQB+AAYAAAAD - cQB+ABRxAH4AFXNxAH4AFnVxAH4ABgAAAAF0AAlESUdfU1BFRUR1cQB+AAYAAAABcQB+AB1zcQB+ - AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4ACXEAfgAKdXEAfgAGAAAAA3EAfgAMdAAISVJPTl9B - WEVzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4AEXEAfgASdXEAfgAGAAAAA3EAfgAUcQB+ - ABVzcQB+ABZ1cQB+AAYAAAABcQB+AMJ1cQB+AAYAAAABcQB+AB1zcQB+AABzcQB+AAN1cQB+AAYA - AAADcQB+AAhxAH4ACXEAfgAKdXEAfgAGAAAAA3EAfgAMdAAMSVJPTl9QSUNLQVhFc3EAfgAAc3EA - fgADdXEAfgAGAAAAA3EAfgAIcQB+ABFxAH4AEnVxAH4ABgAAAANxAH4AFHEAfgAVc3EAfgAWdXEA - fgAGAAAAAXEAfgDCdXEAfgAGAAAAAXEAfgAdc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+ - AAlxAH4AIXVxAH4ABgAAAANxAH4ADHQAB0RJQU1PTkRxAH4AHXNxAH4AAHNxAH4AA3VxAH4ABgAA - AANxAH4ACHEAfgAJcQB+ACF1cQB+AAYAAAADcQB+AAx0AAxHT0xERU5fQVBQTEVzcQB+ABsAAAAD - c3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAlxAH4AIXVxAH4ABgAAAANxAH4ADHEAfgDl - cQB+AB1zcQB+AABzcQB+AAN1cQB+AAYAAAACcQB+AAhxAH4ACXVxAH4ABgAAAAJxAH4ADHEAfgDl - c3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAlxAH4AIXVxAH4ABgAAAANxAH4ADHQAA0VH - R3EAfgAuc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAlxAH4AIXVxAH4ABgAAAANxAH4A - DHEAfgDzc3EAfgAbAAAACHNxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgAJcQB+ACF1cQB+ - AAYAAAADcQB+AAxxAH4A83NxAH4AGwAAABBzcQB+AABzcQB+AAN1cQB+AAYAAAACcQB+AAhxAH4A - CXVxAH4ABgAAAAJxAH4ADHQAC0xBVkFfQlVDS0VUc3EAfgAAc3EAfgADdXEAfgAGAAAAAnEAfgAI - cQB+AAl1cQB+AAYAAAACcQB+AAxxAH4BAnNxAH4AAHNxAH4AA3VxAH4ABgAAAAJxAH4ACHEAfgAJ - dXEAfgAGAAAAAnEAfgAMdAAPRkxJTlRfQU5EX1NURUVMc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EA - fgAIcQB+AAlxAH4AIXVxAH4ABgAAAANxAH4ADHQAA1ROVHEAfgAdc3EAfgAAc3EAfgADdXEAfgAG - AAAAA3EAfgAIcQB+AAlxAH4AIXVxAH4ABgAAAANxAH4ADHEAfgEQcQB+AC5zcQB+AABzcQB+AAN1 - cQB+AAYAAAADcQB+AAhxAH4ACXEAfgCKdXEAfgAGAAAAA3EAfgAMcQB+AIxzcQB+AI1AKnNxAH4A - AHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgAJcQB+AIp1cQB+AAYAAAADcQB+AAxxAH4AjHNxAH4A - jUBMc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAlxAH4AinVxAH4ABgAAAANxAH4ADHEA - fgCMc3EAfgCNQAtzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4ACXEAfgAKdXEAfgAGAAAA - A3EAfgAMdAANR09MRF9MRUdHSU5HU3NxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgARcQB+ - ABJ1cQB+AAYAAAADcQB+ABRxAH4AFXNxAH4AFnVxAH4ABgAAAAFxAH4AUnVxAH4ABgAAAAFxAH4A - 5nNxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgAJcQB+AAp1cQB+AAYAAAADcQB+AAx0AA9H - T0xEX0NIRVNUUExBVEVzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4AEXEAfgASdXEAfgAG - AAAAA3EAfgAUcQB+ABVzcQB+ABZ1cQB+AAYAAAABcQB+AFJ1cQB+AAYAAAABcQB+AOY= diff --git a/core/src/main/resources/1.8.8/ladders/soup.yml b/core/src/main/resources/1.8.8/ladders/soup.yml deleted file mode 100644 index cd0ca348..00000000 --- a/core/src/main/resources/1.8.8/ladders/soup.yml +++ /dev/null @@ -1,94 +0,0 @@ -name: Soup -enabled: true -type: BASIC -settings: - regen: false - hunger: false - ranked: true - editable: true - hitdelay: 20 - rounds: 1 - epcooldown: 13 - startcountdown: 5 - knockback: DEFAULT - gacooldown: 0 - drop-inventory: true - matchtypes: - - DUEL - - PARTY_SPLIT - - PARTY_VS_PARTY - - PARTY_FFA -effects: -- ==: PotionEffect - effect: 1 - duration: 4800 - amplifier: 1 - ambient: false - has-particles: true -- ==: PotionEffect - effect: 5 - duration: 4800 - amplifier: 1 - ambient: false - has-particles: true -icon: - ==: org.bukkit.inventory.ItemStack - type: MUSHROOM_SOUP - meta: - ==: ItemMeta - meta-type: UNSPECIFIC - display-name: §6Soup -armor: | - rO0ABXcEAAAABHNyABpvcmcuYnVra2l0LnV0aWwuaW8uV3JhcHBlcvJQR+zxEm8FAgABTAADbWFw - dAAPTGphdmEvdXRpbC9NYXA7eHBzcgA1Y29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFi - bGVNYXAkU2VyaWFsaXplZEZvcm0AAAAAAAAAAAIAAlsABGtleXN0ABNbTGphdmEvbGFuZy9PYmpl - Y3Q7WwAGdmFsdWVzcQB+AAR4cHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAA - AAJ0AAI9PXQABHR5cGV1cQB+AAYAAAACdAAeb3JnLmJ1a2tpdC5pbnZlbnRvcnkuSXRlbVN0YWNr - dAAKSVJPTl9CT09UU3NxAH4AAHNxAH4AA3VxAH4ABgAAAAJxAH4ACHEAfgAJdXEAfgAGAAAAAnEA - fgALdAANSVJPTl9MRUdHSU5HU3NxAH4AAHNxAH4AA3VxAH4ABgAAAAJxAH4ACHEAfgAJdXEAfgAG - AAAAAnEAfgALdAAPSVJPTl9DSEVTVFBMQVRFc3EAfgAAc3EAfgADdXEAfgAGAAAAAnEAfgAIcQB+ - AAl1cQB+AAYAAAACcQB+AAt0AAtJUk9OX0hFTE1FVA== -inventory: | - rO0ABXcEAAAAJHNyABpvcmcuYnVra2l0LnV0aWwuaW8uV3JhcHBlcvJQR+zxEm8FAgABTAADbWFw - dAAPTGphdmEvdXRpbC9NYXA7eHBzcgA1Y29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFi - bGVNYXAkU2VyaWFsaXplZEZvcm0AAAAAAAAAAAIAAlsABGtleXN0ABNbTGphdmEvbGFuZy9PYmpl - Y3Q7WwAGdmFsdWVzcQB+AAR4cHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAA - AAN0AAI9PXQABHR5cGV0AARtZXRhdXEAfgAGAAAAA3QAHm9yZy5idWtraXQuaW52ZW50b3J5Lkl0 - ZW1TdGFja3QADURJQU1PTkRfU1dPUkRzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAh0AAltZXRh - LXR5cGV0AAhlbmNoYW50c3VxAH4ABgAAAAN0AAhJdGVtTWV0YXQAClVOU1BFQ0lGSUNzcgA3Y29t - Lmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFibGVCaU1hcCRTZXJpYWxpemVkRm9ybQAAAAAA - AAAAAgAAeHEAfgADdXEAfgAGAAAAAXQACkRBTUFHRV9BTEx1cQB+AAYAAAABc3IAEWphdmEubGFu - Zy5JbnRlZ2VyEuKgpPeBhzgCAAFJAAV2YWx1ZXhyABBqYXZhLmxhbmcuTnVtYmVyhqyVHQuU4IsC - AAB4cAAAAAFzcQB+AABzcQB+AAN1cQB+AAYAAAACcQB+AAhxAH4ACXVxAH4ABgAAAAJxAH4ADHQA - DU1VU0hST09NX1NPVVBzcQB+AABzcQB+AAN1cQB+AAYAAAACcQB+AAhxAH4ACXVxAH4ABgAAAAJx - AH4ADHEAfgAic3EAfgAAc3EAfgADdXEAfgAGAAAAAnEAfgAIcQB+AAl1cQB+AAYAAAACcQB+AAxx - AH4AInNxAH4AAHNxAH4AA3VxAH4ABgAAAAJxAH4ACHEAfgAJdXEAfgAGAAAAAnEAfgAMcQB+ACJz - cQB+AABzcQB+AAN1cQB+AAYAAAACcQB+AAhxAH4ACXVxAH4ABgAAAAJxAH4ADHEAfgAic3EAfgAA - c3EAfgADdXEAfgAGAAAAAnEAfgAIcQB+AAl1cQB+AAYAAAACcQB+AAxxAH4AInNxAH4AAHNxAH4A - A3VxAH4ABgAAAAJxAH4ACHEAfgAJdXEAfgAGAAAAAnEAfgAMcQB+ACJzcQB+AABzcQB+AAN1cQB+ - AAYAAAACcQB+AAhxAH4ACXVxAH4ABgAAAAJxAH4ADHEAfgAic3EAfgAAc3EAfgADdXEAfgAGAAAA - AnEAfgAIcQB+AAl1cQB+AAYAAAACcQB+AAxxAH4AInNxAH4AAHNxAH4AA3VxAH4ABgAAAAJxAH4A - CHEAfgAJdXEAfgAGAAAAAnEAfgAMcQB+ACJzcQB+AABzcQB+AAN1cQB+AAYAAAACcQB+AAhxAH4A - CXVxAH4ABgAAAAJxAH4ADHEAfgAic3EAfgAAc3EAfgADdXEAfgAGAAAAAnEAfgAIcQB+AAl1cQB+ - AAYAAAACcQB+AAxxAH4AInNxAH4AAHNxAH4AA3VxAH4ABgAAAAJxAH4ACHEAfgAJdXEAfgAGAAAA - AnEAfgAMcQB+ACJzcQB+AABzcQB+AAN1cQB+AAYAAAACcQB+AAhxAH4ACXVxAH4ABgAAAAJxAH4A - DHEAfgAic3EAfgAAc3EAfgADdXEAfgAGAAAAAnEAfgAIcQB+AAl1cQB+AAYAAAACcQB+AAxxAH4A - InNxAH4AAHNxAH4AA3VxAH4ABgAAAAJxAH4ACHEAfgAJdXEAfgAGAAAAAnEAfgAMcQB+ACJzcQB+ - AABzcQB+AAN1cQB+AAYAAAACcQB+AAhxAH4ACXVxAH4ABgAAAAJxAH4ADHEAfgAic3EAfgAAc3EA - fgADdXEAfgAGAAAAAnEAfgAIcQB+AAl1cQB+AAYAAAACcQB+AAxxAH4AInNxAH4AAHNxAH4AA3Vx - AH4ABgAAAAJxAH4ACHEAfgAJdXEAfgAGAAAAAnEAfgAMcQB+ACJzcQB+AABzcQB+AAN1cQB+AAYA - AAACcQB+AAhxAH4ACXVxAH4ABgAAAAJxAH4ADHEAfgAic3EAfgAAc3EAfgADdXEAfgAGAAAAAnEA - fgAIcQB+AAl1cQB+AAYAAAACcQB+AAxxAH4AInNxAH4AAHNxAH4AA3VxAH4ABgAAAAJxAH4ACHEA - fgAJdXEAfgAGAAAAAnEAfgAMcQB+ACJzcQB+AABzcQB+AAN1cQB+AAYAAAACcQB+AAhxAH4ACXVx - AH4ABgAAAAJxAH4ADHEAfgAic3EAfgAAc3EAfgADdXEAfgAGAAAAAnEAfgAIcQB+AAl1cQB+AAYA - AAACcQB+AAxxAH4AInNxAH4AAHNxAH4AA3VxAH4ABgAAAAJxAH4ACHEAfgAJdXEAfgAGAAAAAnEA - fgAMcQB+ACJzcQB+AABzcQB+AAN1cQB+AAYAAAACcQB+AAhxAH4ACXVxAH4ABgAAAAJxAH4ADHEA - fgAic3EAfgAAc3EAfgADdXEAfgAGAAAAAnEAfgAIcQB+AAl1cQB+AAYAAAACcQB+AAxxAH4AInNx - AH4AAHNxAH4AA3VxAH4ABgAAAAJxAH4ACHEAfgAJdXEAfgAGAAAAAnEAfgAMcQB+ACJzcQB+AABz - cQB+AAN1cQB+AAYAAAACcQB+AAhxAH4ACXVxAH4ABgAAAAJxAH4ADHEAfgAic3EAfgAAc3EAfgAD - dXEAfgAGAAAAAnEAfgAIcQB+AAl1cQB+AAYAAAACcQB+AAxxAH4AInNxAH4AAHNxAH4AA3VxAH4A - BgAAAAJxAH4ACHEAfgAJdXEAfgAGAAAAAnEAfgAMcQB+ACJzcQB+AABzcQB+AAN1cQB+AAYAAAAC - cQB+AAhxAH4ACXVxAH4ABgAAAAJxAH4ADHEAfgAic3EAfgAAc3EAfgADdXEAfgAGAAAAAnEAfgAI - cQB+AAl1cQB+AAYAAAACcQB+AAxxAH4AInNxAH4AAHNxAH4AA3VxAH4ABgAAAAJxAH4ACHEAfgAJ - dXEAfgAGAAAAAnEAfgAMcQB+ACJzcQB+AABzcQB+AAN1cQB+AAYAAAACcQB+AAhxAH4ACXVxAH4A - BgAAAAJxAH4ADHEAfgAi diff --git a/core/src/main/resources/1.8.8/ladders/spleef.yml b/core/src/main/resources/1.8.8/ladders/spleef.yml deleted file mode 100644 index 09a20229..00000000 --- a/core/src/main/resources/1.8.8/ladders/spleef.yml +++ /dev/null @@ -1,76 +0,0 @@ -name: Spleef -enabled: true -type: SPLEEF -settings: - regen: true - hunger: false - ranked: true - editable: true - hitdelay: 20 - rounds: 1 - epcooldown: 13 - startcountdown: 3 - knockback: DEFAULT - gacooldown: 0 - drop-inventory: false - matchtypes: - - DUEL - - PARTY_FFA - - PARTY_SPLIT - - PARTY_VS_PARTY -effects: [] -icon: - ==: org.bukkit.inventory.ItemStack - type: DIAMOND_SPADE - meta: - ==: ItemMeta - meta-type: UNSPECIFIC - display-name: §3Spleef -armor: | - rO0ABXcEAAAABHNyABpvcmcuYnVra2l0LnV0aWwuaW8uV3JhcHBlcvJQR+zxEm8FAgABTAADbWFw - dAAPTGphdmEvdXRpbC9NYXA7eHBzcgA1Y29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFi - bGVNYXAkU2VyaWFsaXplZEZvcm0AAAAAAAAAAAIAAlsABGtleXN0ABNbTGphdmEvbGFuZy9PYmpl - Y3Q7WwAGdmFsdWVzcQB+AAR4cHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAA - AAR0AAI9PXQABHR5cGV0AAZkYW1hZ2V0AAZhbW91bnR1cQB+AAYAAAAEdAAeb3JnLmJ1a2tpdC5p - bnZlbnRvcnkuSXRlbVN0YWNrdAADQUlSc3IAD2phdmEubGFuZy5TaG9ydGhNNxM0YNpSAgABUwAF - dmFsdWV4cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHD//3NyABFqYXZhLmxhbmcuSW50 - ZWdlchLioKT3gYc4AgABSQAFdmFsdWV4cQB+ABAAAAAAc3EAfgAAc3EAfgADdXEAfgAGAAAABHEA - fgAIcQB+AAlxAH4ACnEAfgALdXEAfgAGAAAABHEAfgANcQB+AA5xAH4AEXEAfgATc3EAfgAAc3EA - fgADdXEAfgAGAAAABHEAfgAIcQB+AAlxAH4ACnEAfgALdXEAfgAGAAAABHEAfgANcQB+AA5xAH4A - EXEAfgATc3EAfgAAc3EAfgADdXEAfgAGAAAABHEAfgAIcQB+AAlxAH4ACnEAfgALdXEAfgAGAAAA - BHEAfgANcQB+AA5xAH4AEXEAfgAT -inventory: | - rO0ABXcEAAAAJHNyABpvcmcuYnVra2l0LnV0aWwuaW8uV3JhcHBlcvJQR+zxEm8FAgABTAADbWFw - dAAPTGphdmEvdXRpbC9NYXA7eHBzcgA1Y29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFi - bGVNYXAkU2VyaWFsaXplZEZvcm0AAAAAAAAAAAIAAlsABGtleXN0ABNbTGphdmEvbGFuZy9PYmpl - Y3Q7WwAGdmFsdWVzcQB+AAR4cHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAA - AAN0AAI9PXQABHR5cGV0AARtZXRhdXEAfgAGAAAAA3QAHm9yZy5idWtraXQuaW52ZW50b3J5Lkl0 - ZW1TdGFja3QADURJQU1PTkRfU1BBREVzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAh0AAltZXRh - LXR5cGV0AAhlbmNoYW50c3VxAH4ABgAAAAN0AAhJdGVtTWV0YXQAClVOU1BFQ0lGSUNzcQB+AAN1 - cQB+AAYAAAACdAAJRElHX1NQRUVEdAAKRFVSQUJJTElUWXVxAH4ABgAAAAJzcgARamF2YS5sYW5n - LkludGVnZXIS4qCk94GHOAIAAUkABXZhbHVleHIAEGphdmEubGFuZy5OdW1iZXKGrJUdC5TgiwIA - AHhwAAAABXNxAH4AGwAAAANwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcA== -custom-kit-extra-items: - unranked: | - rO0ABXcEAAAAHHNyABpvcmcuYnVra2l0LnV0aWwuaW8uV3JhcHBlcvJQR+zxEm8FAgABTAADbWFw - dAAPTGphdmEvdXRpbC9NYXA7eHBzcgA1Y29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFi - bGVNYXAkU2VyaWFsaXplZEZvcm0AAAAAAAAAAAIAAlsABGtleXN0ABNbTGphdmEvbGFuZy9PYmpl - Y3Q7WwAGdmFsdWVzcQB+AAR4cHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAA - AAN0AAI9PXQABHR5cGV0AARtZXRhdXEAfgAGAAAAA3QAHm9yZy5idWtraXQuaW52ZW50b3J5Lkl0 - ZW1TdGFja3QADURJQU1PTkRfU1BBREVzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAh0AAltZXRh - LXR5cGV0AAhlbmNoYW50c3VxAH4ABgAAAAN0AAhJdGVtTWV0YXQAClVOU1BFQ0lGSUNzcQB+AAN1 - cQB+AAYAAAACdAAJRElHX1NQRUVEdAAKRFVSQUJJTElUWXVxAH4ABgAAAAJzcgARamF2YS5sYW5n - LkludGVnZXIS4qCk94GHOAIAAUkABXZhbHVleHIAEGphdmEubGFuZy5OdW1iZXKGrJUdC5TgiwIA - AHhwAAAABXNxAH4AGwAAAANzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4ACXEAfgAKdXEA - fgAGAAAAA3EAfgAMdAAKSVJPTl9TUEFERXNxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgAR - cQB+ABJ1cQB+AAYAAAADcQB+ABRxAH4AFXNxAH4AA3VxAH4ABgAAAAJxAH4AGHEAfgAZdXEAfgAG - AAAAAnEAfgAdcQB+AB5zcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4ACXEAfgAKdXEAfgAG - AAAAA3EAfgAMdAALU1RPTkVfU1BBREVzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4AEXEA - fgASdXEAfgAGAAAAA3EAfgAUcQB+ABVzcQB+AAN1cQB+AAYAAAACcQB+ABhxAH4AGXVxAH4ABgAA - AAJxAH4AHXEAfgAec3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAlxAH4ACnVxAH4ABgAA - AANxAH4ADHQACkdPTERfU1BBREVzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4AEXEAfgAS - dXEAfgAGAAAAA3EAfgAUcQB+ABVzcQB+AAN1cQB+AAYAAAACcQB+ABhxAH4AGXVxAH4ABgAAAAJx - AH4AHXEAfgAec3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAlxAH4ACnVxAH4ABgAAAANx - AH4ADHQACldPT0RfU1BBREVzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4AEXEAfgASdXEA - fgAGAAAAA3EAfgAUcQB+ABVzcQB+AAN1cQB+AAYAAAACcQB+ABhxAH4AGXVxAH4ABgAAAAJxAH4A - HXEAfgAecHBwcHBwcHBwcHBwcHBwcHBwcHBwcHA= diff --git a/core/src/main/resources/1.8.8/ladders/sumo.yml b/core/src/main/resources/1.8.8/ladders/sumo.yml deleted file mode 100644 index 6febb4a8..00000000 --- a/core/src/main/resources/1.8.8/ladders/sumo.yml +++ /dev/null @@ -1,32 +0,0 @@ -name: Sumo -enabled: true -type: SUMO -settings: - regen: false - hunger: false - ranked: true - editable: false - hitdelay: 20 - rounds: 3 - epcooldown: 13 - startcountdown: 3 - knockback: DEFAULT - gacooldown: 0 - drop-inventory: false - matchtypes: - - DUEL -effects: [] -icon: - ==: org.bukkit.inventory.ItemStack - type: STICK - meta: - ==: ItemMeta - meta-type: UNSPECIFIC - display-name: §6Sumo -armor: | - rO0ABXcEAAAABHBwcHA= -inventory: | - rO0ABXcEAAAAJHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcA== -custom-kit-extra-items: - unranked: | - rO0ABXcEAAAAHHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHA= diff --git a/core/src/main/resources/1.8.8/ladders/vanilla.yml b/core/src/main/resources/1.8.8/ladders/vanilla.yml deleted file mode 100644 index 4c1a93d4..00000000 --- a/core/src/main/resources/1.8.8/ladders/vanilla.yml +++ /dev/null @@ -1,126 +0,0 @@ -name: Vanilla -enabled: true -type: BASIC -settings: - regen: true - hunger: true - ranked: false - editable: true - hitdelay: 20 - rounds: 1 - epcooldown: 13 - startcountdown: 5 - knockback: DEFAULT - gacooldown: 0 - drop-inventory: false - matchtypes: - - DUEL - - PARTY_FFA - - PARTY_SPLIT - - PARTY_VS_PARTY -effects: [] -armor: | - rO0ABXcEAAAABHNyABpvcmcuYnVra2l0LnV0aWwuaW8uV3JhcHBlcvJQR+zxEm8FAgABTAADbWFw - dAAPTGphdmEvdXRpbC9NYXA7eHBzcgA1Y29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFi - bGVNYXAkU2VyaWFsaXplZEZvcm0AAAAAAAAAAAIAAlsABGtleXN0ABNbTGphdmEvbGFuZy9PYmpl - Y3Q7WwAGdmFsdWVzcQB+AAR4cHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAA - AAN0AAI9PXQABHR5cGV0AARtZXRhdXEAfgAGAAAAA3QAHm9yZy5idWtraXQuaW52ZW50b3J5Lkl0 - ZW1TdGFja3QADURJQU1PTkRfQk9PVFNzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAh0AAltZXRh - LXR5cGV0AAhlbmNoYW50c3VxAH4ABgAAAAN0AAhJdGVtTWV0YXQAClVOU1BFQ0lGSUNzcQB+AAN1 - cQB+AAYAAAADdAAYUFJPVEVDVElPTl9FTlZJUk9OTUVOVEFMdAAKRFVSQUJJTElUWXQAD1BST1RF - Q1RJT05fRkFMTHVxAH4ABgAAAANzcgARamF2YS5sYW5nLkludGVnZXIS4qCk94GHOAIAAUkABXZh - bHVleHIAEGphdmEubGFuZy5OdW1iZXKGrJUdC5TgiwIAAHhwAAAABHNxAH4AHAAAAANxAH4AHnNx - AH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgAJcQB+AAp1cQB+AAYAAAADcQB+AAx0ABBESUFN - T05EX0xFR0dJTkdTc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+ABFxAH4AEnVxAH4ABgAA - AANxAH4AFHEAfgAVc3EAfgADdXEAfgAGAAAAAnEAfgAYcQB+ABl1cQB+AAYAAAACcQB+AB5xAH4A - H3NxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgAJcQB+AAp1cQB+AAYAAAADcQB+AAx0ABJE - SUFNT05EX0NIRVNUUExBVEVzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4AEXEAfgASdXEA - fgAGAAAAA3EAfgAUcQB+ABVzcQB+AAN1cQB+AAYAAAACcQB+ABhxAH4AGXVxAH4ABgAAAAJxAH4A - HnEAfgAfc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAlxAH4ACnVxAH4ABgAAAANxAH4A - DHQADkRJQU1PTkRfSEVMTUVUc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+ABFxAH4AEnVx - AH4ABgAAAANxAH4AFHEAfgAVc3EAfgADdXEAfgAGAAAAAnEAfgAYcQB+ABl1cQB+AAYAAAACcQB+ - AB5xAH4AHw== -inventory: | - rO0ABXcEAAAAJHNyABpvcmcuYnVra2l0LnV0aWwuaW8uV3JhcHBlcvJQR+zxEm8FAgABTAADbWFw - dAAPTGphdmEvdXRpbC9NYXA7eHBzcgA1Y29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFi - bGVNYXAkU2VyaWFsaXplZEZvcm0AAAAAAAAAAAIAAlsABGtleXN0ABNbTGphdmEvbGFuZy9PYmpl - Y3Q7WwAGdmFsdWVzcQB+AAR4cHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAA - AAN0AAI9PXQABHR5cGV0AARtZXRhdXEAfgAGAAAAA3QAHm9yZy5idWtraXQuaW52ZW50b3J5Lkl0 - ZW1TdGFja3QADURJQU1PTkRfU1dPUkRzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAh0AAltZXRh - LXR5cGV0AAhlbmNoYW50c3VxAH4ABgAAAAN0AAhJdGVtTWV0YXQAClVOU1BFQ0lGSUNzcQB+AAN1 - cQB+AAYAAAADdAAKREFNQUdFX0FMTHQACkRVUkFCSUxJVFl0AAtGSVJFX0FTUEVDVHVxAH4ABgAA - AANzcgARamF2YS5sYW5nLkludGVnZXIS4qCk94GHOAIAAUkABXZhbHVleHIAEGphdmEubGFuZy5O - dW1iZXKGrJUdC5TgiwIAAHhwAAAABXNxAH4AHAAAAANzcQB+ABwAAAACc3EAfgAAc3EAfgADdXEA - fgAGAAAAA3EAfgAIcQB+AAl0AAZhbW91bnR1cQB+AAYAAAADcQB+AAx0AAtFTkRFUl9QRUFSTHNx - AH4AHAAAABBzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4ACXQABmRhbWFnZXVxAH4ABgAA - AANxAH4ADHQABlBPVElPTnNyAA9qYXZhLmxhbmcuU2hvcnRoTTcTNGDaUgIAAVMABXZhbHVleHEA - fgAdIENzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4ACXEAfgArdXEAfgAGAAAAA3EAfgAM - cQB+AC1zcQB+AC4gInNxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgAJcQB+ACt1cQB+AAYA - AAADcQB+AAxxAH4ALXNxAH4ALiApc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAlxAH4A - K3VxAH4ABgAAAANxAH4ADHEAfgAtc3EAfgAuIEFzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhx - AH4ACXEAfgArdXEAfgAGAAAAA3EAfgAMcQB+AC1zcQB+AC5AJXNxAH4AAHNxAH4AA3VxAH4ABgAA - AANxAH4ACHEAfgAJcQB+ACt1cQB+AAYAAAADcQB+AAxxAH4ALXNxAH4ALkAlc3EAfgAAc3EAfgAD - dXEAfgAGAAAAA3EAfgAIcQB+AAlxAH4AJHVxAH4ABgAAAANxAH4ADHQAC0NPT0tFRF9CRUVGc3EA - fgAcAAAAQHNxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgAJcQB+ACt1cQB+AAYAAAADcQB+ - AAxxAH4ALXNxAH4ALkBKc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAlxAH4AK3VxAH4A - BgAAAANxAH4ADHEAfgAtc3EAfgAuQEpzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4ACXEA - fgArdXEAfgAGAAAAA3EAfgAMcQB+AC1zcQB+AC5AJXNxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4A - CHEAfgAJcQB+ACt1cQB+AAYAAAADcQB+AAxxAH4ALXNxAH4ALkAlc3EAfgAAc3EAfgADdXEAfgAG - AAAAA3EAfgAIcQB+AAlxAH4AK3VxAH4ABgAAAANxAH4ADHEAfgAtc3EAfgAuQCVzcQB+AABzcQB+ - AAN1cQB+AAYAAAADcQB+AAhxAH4ACXEAfgArdXEAfgAGAAAAA3EAfgAMcQB+AC1zcQB+AC5AJXNx - AH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgAJcQB+ACt1cQB+AAYAAAADcQB+AAxxAH4ALXNx - AH4ALkAlc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAlxAH4AK3VxAH4ABgAAAANxAH4A - DHEAfgAtc3EAfgAuQCVzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4ACXEAfgArdXEAfgAG - AAAAA3EAfgAMcQB+AC1zcQB+AC5AJXNxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgAJcQB+ - ACt1cQB+AAYAAAADcQB+AAxxAH4ALXNxAH4ALkAhc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAI - cQB+AAlxAH4AK3VxAH4ABgAAAANxAH4ADHEAfgAtc3EAfgAuQEhzcQB+AABzcQB+AAN1cQB+AAYA - AAADcQB+AAhxAH4ACXEAfgArdXEAfgAGAAAAA3EAfgAMcQB+AC1zcQB+AC5AJXNxAH4AAHNxAH4A - A3VxAH4ABgAAAANxAH4ACHEAfgAJcQB+ACt1cQB+AAYAAAADcQB+AAxxAH4ALXNxAH4ALkAlc3EA - fgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAlxAH4AK3VxAH4ABgAAAANxAH4ADHEAfgAtc3EA - fgAuQCVzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4ACXEAfgArdXEAfgAGAAAAA3EAfgAM - cQB+AC1zcQB+AC5AJXNxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgAJcQB+ACt1cQB+AAYA - AAADcQB+AAxxAH4ALXNxAH4ALiBBc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAlxAH4A - K3VxAH4ABgAAAANxAH4ADHEAfgAtc3EAfgAuICJzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhx - AH4ACXEAfgArdXEAfgAGAAAAA3EAfgAMcQB+AC1zcQB+AC4gKXNxAH4AAHNxAH4AA3VxAH4ABgAA - AANxAH4ACHEAfgAJcQB+ACt1cQB+AAYAAAADcQB+AAxxAH4ALXNxAH4ALkBEc3EAfgAAc3EAfgAD - dXEAfgAGAAAAA3EAfgAIcQB+AAlxAH4AK3VxAH4ABgAAAANxAH4ADHEAfgAtc3EAfgAuQCRzcQB+ - AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4ACXEAfgArdXEAfgAGAAAAA3EAfgAMcQB+AC1zcQB+ - AC5AJXNxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgAJcQB+ACt1cQB+AAYAAAADcQB+AAxx - AH4ALXNxAH4ALkAlc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAlxAH4AK3VxAH4ABgAA - AANxAH4ADHEAfgAtc3EAfgAuQCVzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4ACXEAfgAr - dXEAfgAGAAAAA3EAfgAMcQB+AC1zcQB+AC5AJXNxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHEA - fgAJcQB+ACt1cQB+AAYAAAADcQB+AAxxAH4ALXNxAH4ALiBBc3EAfgAAc3EAfgADdXEAfgAGAAAA - A3EAfgAIcQB+AAlxAH4AK3VxAH4ABgAAAANxAH4ADHEAfgAtc3EAfgAuICJzcQB+AABzcQB+AAN1 - cQB+AAYAAAADcQB+AAhxAH4ACXEAfgArdXEAfgAGAAAAA3EAfgAMcQB+AC1zcQB+AC4gKQ== -custom-kit-extra-items: - unranked: | - rO0ABXcEAAAAHHNyABpvcmcuYnVra2l0LnV0aWwuaW8uV3JhcHBlcvJQR+zxEm8FAgABTAADbWFw - dAAPTGphdmEvdXRpbC9NYXA7eHBzcgA1Y29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFi - bGVNYXAkU2VyaWFsaXplZEZvcm0AAAAAAAAAAAIAAlsABGtleXN0ABNbTGphdmEvbGFuZy9PYmpl - Y3Q7WwAGdmFsdWVzcQB+AAR4cHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAA - AAN0AAI9PXQABHR5cGV0AAZkYW1hZ2V1cQB+AAYAAAADdAAeb3JnLmJ1a2tpdC5pbnZlbnRvcnku - SXRlbVN0YWNrdAAGUE9USU9Oc3IAD2phdmEubGFuZy5TaG9ydGhNNxM0YNpSAgABUwAFdmFsdWV4 - cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHBASnNxAH4AAHNxAH4AA3VxAH4ABgAAAANx - AH4ACHEAfgAJcQB+AAp1cQB+AAYAAAADcQB+AAxxAH4ADXNxAH4ADkBEc3EAfgAAc3EAfgADdXEA - fgAGAAAAA3EAfgAIcQB+AAlxAH4ACnVxAH4ABgAAAANxAH4ADHEAfgANc3EAfgAOQEhzcQB+AABz - cQB+AAN1cQB+AAYAAAADcQB+AAhxAH4ACXEAfgAKdXEAfgAGAAAAA3EAfgAMcQB+AA1zcQB+AA5A - IXNxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgAJcQB+AAp1cQB+AAYAAAADcQB+AAxxAH4A - DXNxAH4ADkAkc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAlxAH4ACnVxAH4ABgAAAANx - AH4ADHEAfgANc3EAfgAOQCVwc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAlxAH4ACnVx - AH4ABgAAAANxAH4ADHEAfgANc3EAfgAOICJzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4A - CXEAfgAKdXEAfgAGAAAAA3EAfgAMcQB+AA1zcQB+AA4gKXNxAH4AAHNxAH4AA3VxAH4ABgAAAANx - AH4ACHEAfgAJcQB+AAp1cQB+AAYAAAADcQB+AAxxAH4ADXNxAH4ADiBDc3EAfgAAc3EAfgADdXEA - fgAGAAAAA3EAfgAIcQB+AAlxAH4ACnVxAH4ABgAAAANxAH4ADHEAfgANc3EAfgAOICFwcHBzcQB+ - AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4ACXEAfgAKdXEAfgAGAAAAA3EAfgAMcQB+AA1zcQB+ - AA5AInNxAH4AAHNxAH4AA3VxAH4ABgAAAANxAH4ACHEAfgAJcQB+AAp1cQB+AAYAAAADcQB+AAxx - AH4ADXNxAH4ADkApc3EAfgAAc3EAfgADdXEAfgAGAAAAA3EAfgAIcQB+AAlxAH4ACnVxAH4ABgAA - AANxAH4ADHEAfgANc3EAfgAOQENzcQB+AABzcQB+AAN1cQB+AAYAAAADcQB+AAhxAH4ACXEAfgAK - dXEAfgAGAAAAA3EAfgAMcQB+AA1zcQB+AA5AQXBwcHBwcHBwcHA= -icon: - ==: org.bukkit.inventory.ItemStack - type: POTION - damage: 8257 - meta: - ==: ItemMeta - meta-type: POTION - display-name: §dVanilla diff --git a/core/src/main/resources/1.8.8/playerkit.yml b/core/src/main/resources/1.8.8/playerkit.yml deleted file mode 100644 index d648f882..00000000 --- a/core/src/main/resources/1.8.8/playerkit.yml +++ /dev/null @@ -1,635 +0,0 @@ -VERSION: 2 - -GUI: - MAIN: - TITLE: "&8%name%" - ICONS: - BACK-TO: - NAME: "&7&lBack" - MATERIAL: ARROW - LORE: - - "&7Click to go back" - CUSTOM-SETTINGS: - NAME: "&bCustom Settings" - MATERIAL: REDSTONE - GUIDE: - NAME: "&b&lGuide" - MATERIAL: PAPER - LORE: - - "&fLeft click to change item" - - "&fShit left click to remove item" - - "&fRight click to enchant or change count" - - "&fShift right click to copy or paste item" - RESET-KIT: - NAME: "&cReset Kit" - MATERIAL: BLAZE_POWDER - CHANGE-NAME: - NAME: "&bChange the name of kit" - MATERIAL: NAME_TAG - SHARE-KIT: - NAME: "&bShare Kit" - MATERIAL: SIGN - KIT-SLOT-PLACEHOLDERS: - HEAD: - NAME: "&7Head" - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 11 - LORE: - - "&3Click to add" - CHEST: - NAME: "&7Chest" - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 11 - LORE: - - "&3Click to add" - LEGS: - NAME: "&7Legs" - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 11 - LORE: - - "&3Click to add" - BOOTS: - NAME: "&7Feet" - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 11 - LORE: - - "&3Click to add" - OFFHAND: - NAME: "&7Offhand" - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 11 - LORE: - - "&3Click to add" - HOTBAR: - NAME: "&7None" - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 3 - LORE: - - "&3Click to add" - OTHER-INVENTORY: - NAME: "&7None" - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 7 - LORE: - - "&3Click to add" - MAIN-ARMOR: - TITLE: "&8Armor" - SIZE: 6 - ICONS: - OFFICIAL: - BACK-TO: - NAME: "&7&lBack" - MATERIAL: ARROW - SLOT: 45 - LORE: - - "&7Click to go back" - NONE: - NAME: "&7None" - SLOT: 18 - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 7 - HELMETS: - LEATHER: - MATERIAL: LEATHER_HELMET - SLOT: 19 - GOLD: - MATERIAL: GOLD_HELMET - SLOT: 20 - CHAIN: - MATERIAL: CHAINMAIL_HELMET - SLOT: 21 - IRON: - MATERIAL: IRON_HELMET - SLOT: 22 - DIAMOND: - MATERIAL: DIAMOND_HELMET - SLOT: 23 - CHESTPLATES: - LEATHER: - MATERIAL: LEATHER_CHESTPLATE - SLOT: 19 - GOLD: - MATERIAL: GOLD_CHESTPLATE - SLOT: 20 - CHAIN: - MATERIAL: CHAINMAIL_CHESTPLATE - SLOT: 21 - IRON: - MATERIAL: IRON_CHESTPLATE - SLOT: 22 - DIAMOND: - MATERIAL: DIAMOND_CHESTPLATE - SLOT: 23 - LEGGINGS: - LEATHER: - MATERIAL: LEATHER_LEGGINGS - SLOT: 19 - GOLD: - MATERIAL: GOLD_LEGGINGS - SLOT: 20 - CHAIN: - MATERIAL: CHAINMAIL_LEGGINGS - SLOT: 21 - IRON: - MATERIAL: IRON_LEGGINGS - SLOT: 22 - DIAMOND: - MATERIAL: DIAMOND_LEGGINGS - SLOT: 23 - BOOTS: - LEATHER: - MATERIAL: LEATHER_BOOTS - SLOT: 19 - GOLD: - MATERIAL: GOLD_BOOTS - SLOT: 20 - CHAIN: - MATERIAL: CHAINMAIL_BOOTS - SLOT: 21 - IRON: - MATERIAL: IRON_BOOTS - SLOT: 22 - DIAMOND: - MATERIAL: DIAMOND_BOOTS - SLOT: 23 - CUSTOM-SETTINGS: - TITLE: "&8Settings" - ICONS: - NAV: - GO-BACK: - NAME: "&cGo Back" - MATERIAL: ARROW - NORMAL-SETTINGS: - REGENERATION: - ENABLED: - NAME: "&7Regeneration: &aEnabled" - MATERIAL: GLOWSTONE_DUST - LORE: - - "" - - "&7Players health is automatically regenerate." - - "" - - "&e&lClick here &7to &cdisable&7." - DISABLED: - NAME: "&7Regeneration: &cDisabled" - MATERIAL: GLOWSTONE_DUST - LORE: - - "" - - "&7Players health is not regenerate." - - "" - - "&e&lClick here &7to &aenable&7." - HUNGER: - ENABLED: - NAME: "&7Hunger: &aEnabled" - MATERIAL: COOKED_BEEF - LORE: - - "" - - "&7Players starve during the game." - - "" - - "&e&lClick here &7to &cdisable&7." - DISABLED: - NAME: "&7Hunger: &cDisabled" - MATERIAL: COOKED_BEEF - LORE: - - "" - - "&7Players don't starve." - - "" - - "&e&lClick here &7to &aenable&7." - BUILD: - ENABLED: - NAME: "&7Build: &aEnabled" - MATERIAL: DIAMOND_PICKAXE - LORE: - - "" - - "&7Players can build during the game." - - "" - - "&e&lClick here &7to &cdisable&7." - DISABLED: - NAME: "&7Build: &cDisabled" - MATERIAL: DIAMOND_PICKAXE - LORE: - - "" - - "&7Players can't build." - - "" - - "&e&lClick here &7to &aenable&7." - ROUNDS: - NAME: "&7Rounds: &6%rounds%" - MATERIAL: FIREWORK_CHARGE - LORE: - - "" - - "&7The first player/team to reach" - - "&7the, winning rounds wins." - - "" - - "&a&lLEFT-CLICK &ato reduce the rounds." - - "&b&lRIGHT-CLICK &bto increase the rounds." - KNOCKBACK: - NAME: "&eKnockback Modifier" - MATERIAL: STICK - LORE: - - "" - - "%knockbackTypes%" - HITDELAY: - NAME: "&7Hitdelay: &6%hitdelay% tick" - MATERIAL: DIAMOND_SWORD - LORE: - - "" - - "&7Players can hit each other" - - "&7at these intervals." - - "" - - "&c&lNote: &71 sec = 20 tick" - - "" - - "&a&lLEFT-CLICK &ato reduce the rounds." - - "&b&lRIGHT-CLICK &bto increase the rounds." - ENDERPEARL-COOLDOWN: - NAME: "&7EnderPearl Cooldown: &6%epCooldown% sec" - MATERIAL: ENDER_PEARL - LORE: - - "" - - "&7Players must wait this long before" - - "&7they can throw the next enderpearl." - - "" - - "&a&lLEFT-CLICK &ato reduce the cooldown." - - "&b&lRIGHT-CLICK &bto increase the cooldown." - GOLDENAPPLE-COOLDOWN: - NAME: "&7Golden Apple Cooldown: &6%gaCooldown%" - MATERIAL: GOLDEN_APPLE - LORE: - - "" - - "&7Players must wait this long before" - - "&7they can consume the next golden apple." - - "" - - "&7This setting includes both enchanted" - - "&7and non-enchanted golden apples." - - "" - - "&a&lLEFT-CLICK &ato reduce the cooldown." - - "&b&lRIGHT-CLICK &bto increase the cooldown." - ITEMS: - CATEGORY-GUI: - TITLE: "&8Item categories" - SIZE: 6 - ICONS: - BACK-TO: - NAME: "&7&lBack" - MATERIAL: ARROW - SLOT: 45 - LORE: - - "&7Click to go back" - NONE: - NAME: "&bNone" - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 7 - SLOT: 18 - ARMOR: - NAME: "&bArmor" - MATERIAL: DIAMOND_CHESTPLATE - SLOT: 19 - WEAPONS-TOOLS: - NAME: "&bWeapons & Tools" - MATERIAL: IRON_SWORD - SLOT: 20 - BOWS-ARROWS: - NAME: "&bBows & Arrows" - MATERIAL: BOW - SLOT: 21 - POTIONS: - NAME: "&bPotions" - MATERIAL: POTION - DAMAGE: 8229 - SLOT: 22 - FOOD: - NAME: "&bFood" - MATERIAL: COOKED_BEEF - SLOT: 23 - BLOCKS: - NAME: "&bBlocks" - MATERIAL: COBBLESTONE - SLOT: 24 - ITEMS-GUI: - SIZE: 6 - OFFICIAL-ICONS: - BACK-TO: - NAME: "&7&lBack" - MATERIAL: ARROW - LORE: - - "&7Click to go back" - NEXT-PAGE: - NAME: "&7&lNext Page" - MATERIAL: ARROW - LORE: - - "&7Click" - PREVIOUS-PAGE: - NAME: "&7&lPrevious Page" - MATERIAL: ARROW - LORE: - - "&7Click" - CATEGORIES: - ARMOR: - TITLE: "&8Armor" - ITEMS: - - "LEATHER_HELMET" - - "GOLD_HELMET" - - "CHAINMAIL_HELMET" - - "IRON_HELMET" - - "DIAMOND_HELMET" - - "" - - "" - - "" - - "" - - "LEATHER_CHESTPLATE" - - "GOLD_CHESTPLATE" - - "CHAINMAIL_CHESTPLATE" - - "IRON_CHESTPLATE" - - "DIAMOND_CHESTPLATE" - - "" - - "" - - "" - - "" - - "LEATHER_LEGGINGS" - - "GOLD_LEGGINGS" - - "CHAINMAIL_LEGGINGS" - - "IRON_LEGGINGS" - - "DIAMOND_LEGGINGS" - - "" - - "" - - "" - - "" - - "LEATHER_BOOTS" - - "GOLD_BOOTS" - - "CHAINMAIL_BOOTS" - - "IRON_BOOTS" - - "DIAMOND_BOOTS" - WEAPONS-TOOLS: - TITLE: "&8Weapons and Tools" - ITEMS: - - "WOOD_SWORD" - - "GOLD_SWORD" - - "STONE_SWORD" - - "IRON_SWORD" - - "DIAMOND_SWORD" - - "BUCKET" - - "WATER_BUCKET" - - "LAVA_BUCKET" - - "MILK_BUCKET" - - "WOOD_AXE" - - "GOLD_AXE" - - "STONE_AXE" - - "IRON_AXE" - - "DIAMOND_AXE" - - "FLINT_AND_STEEL" - - "SHEARS" - - "FISHING_ROD" - - "EXP_BOTTLE" - - "WOOD_PICKAXE" - - "GOLD_PICKAXE" - - "STONE_PICKAXE" - - "IRON_PICKAXE" - - "DIAMOND_PICKAXE" - - "SNOW_BALL" - - "ENDER_PEARL" - - "" - - "" - - "WOOD_SPADE" - - "GOLD_SPADE" - - "STONE_SPADE" - - "IRON_SPADE" - - "DIAMOND_SPADE" - - "" - - "" - - "" - - "" - - "WOOD_HOE" - - "GOLD_HOE" - - "STONE_HOE" - - "IRON_HOE" - - "DIAMOND_HOE" - BOWS-ARROWS: - TITLE: "&8Bows and Arrows" - ITEMS: - - "BOW" - - "ARROW" - POTION: - TITLE: "&8Potions" - OFFICIAL-ICONS: - BACK-TO: - NAME: "&7&lBack" - MATERIAL: ARROW - LORE: - - "&7Click to go back" - SWITCH-TO-SPLASH: - NAME: "&bShow splash potions" - MATERIAL: POTION - DAMAGE: 16421 - SWITCH-TO-DRINKABLE: - NAME: "&bShow drinkable potions" - MATERIAL: POTION - DAMAGE: 8229 - DRINKABLE-POTIONS: - ITEMS: - - "POTION::8230" # Night Vision (3:00) - - "POTION::8262" # Long Night Vision (8:00) - - "POTION::8238" # Invisibility (3:00) - - "POTION::8270" # Long Invisibility (8:00) - - "POTION::8203" # Leaping (3:00 - Jump Boost) - - "POTION::8235" # Long Leaping (1:30 - Jump Boost II) - - "POTION::8201" # Strength (3:00) - - "POTION::8233" # Strength II (1:30) - - "POTION::8227" # Fire Resistance (3:00) - - "POTION::8259" # Long Fire Resistance (8:00) - - "POTION::8194" # Swiftness (3:00) - - "POTION::8258" # Long Swiftness (8:00) - - "POTION::8234" # Slowness (1:30) - - "POTION::8266" # Long Slowness (4:00) - - "POTION::8237" # Water Breathing (3:00) - - "POTION::8269" # Long Water Breathing (8:00) - - "POTION::8229" # Healing (Instant Health II) - - "POTION::8261" # Healing (Instant Health) - - "POTION::8196" # Poison (0:45) - - "POTION::8260" # Long Poison (1:30/2:00) - - "POTION::8236" # Harming (Instant Damage II) - - "POTION::8268" # Harming (Instant Damage) - - "POTION::8193" # Regeneration (0:45) - - "POTION::8257" # Long Regeneration (1:30/2:00) - - "POTION::8202" # Weakness (1:30) - - "POTION::8264" # Long Weakness (4:00) - - "POTION::8225" # Regeneration II (0:22) - SPLASH-POTIONS: - ITEMS: - - "POTION::16422" # Night Vision (3:00) - - "POTION::16454" # Long Night Vision (8:00) - - "POTION::16430" # Invisibility (3:00) - - "POTION::16462" # Long Invisibility (8:00) - - "POTION::16395" # Leaping (3:00 - Jump Boost) - - "POTION::16427" # Long Leaping (1:30 - Jump Boost II) - - "POTION::16393" # Strength (3:00) - - "POTION::16425" # Strength II (1:30) - - "POTION::16419" # Fire Resistance (3:00) - - "POTION::16451" # Long Fire Resistance (8:00) - - "POTION::16386" # Swiftness (3:00) - - "POTION::16450" # Long Swiftness (8:00) - - "POTION::16426" # Slowness (1:30) - - "POTION::16458" # Long Slowness (4:00) - - "POTION::16429" # Water Breathing (3:00) - - "POTION::16461" # Long Water Breathing (8:00) - - "POTION::16421" # Healing (Instant Health II) - - "POTION::16453" # Healing (Instant Health) - - "POTION::16388" # Poison (0:45) - - "POTION::16452" # Long Poison (1:30) - - "POTION::16428" # Harming (Instant Damage II) - - "POTION::16460" # Harming (Instant Damage) - - "POTION::16385" # Regeneration (0:45) - - "POTION::16449" # Long Regeneration (1:30) - - "POTION::16424" # Weakness (1:30) - - "POTION::16456" # Long Weakness (4:00) - FOOD: - TITLE: "&8Food" - ITEMS: - - "APPLE" - - "MUSHROOM_SOUP" - - "BREAD" - - "PORK" - - "GRILLED_PORK" - - "GOLDEN_APPLE" - - "GOLDEN_APPLE::1" - - "CAKE" - - "COOKIE" - - "RAW_BEEF" - - "COOKED_BEEF" - - "RAW_CHICKEN" - - "COOKED_CHICKEN" - - "ROTTEN_FLESH" - - "SPIDER_EYE" - - "BAKED_POTATO" - - "GOLDEN_CARROT" - - "PUMPKIN_PIE" - - "RABBIT" - - "COOKED_RABBIT" - - "RABBIT_STEW" - - "MUTTON" - - "COOKED_MUTTON" - BLOCKS: - TITLE: "&8Blocks" - ITEMS: - - "OBSIDIAN" - - "ANVIL" - - "ENCHANTMENT_TABLE" - - "ENDER_CHEST" - - "ENDER_STONE" - - "COBBLESTONE" - - "COAL_BLOCK" - - "IRON_BLOCK" - - "GOLD_BLOCK" - - "DIAMOND_BLOCK" - - "EMERALD_BLOCK" - - "IRON_DOOR" - - "WEB" - - "WOOD" - - "LAPIS_BLOCK" - - "WORKBENCH" - - "LOG" - - "PUMPKIN" - - "MELON" - - "SANDSTONE" - - "WOOL" - - "STONE" - - "QUARTZ_BLOCK" - - "GRAVEL" - - "CLAY" - - "SPONGE" - - "PACKED_ICE" - - "SOUL_SAND" - - "HAY_BLOCK" - - "DIRT" - - "SAND" - - "ICE" - - "SOIL" - - "NETHERRACK" - - "GLASS" - - "GLOWSTONE" - - "SNOW_BLOCK" - - "SLIME_BLOCK" - - "TNT" - - "REDSTONE_BLOCK" - - "NOTE_BLOCK" - - "PISTON_BASE" - - "PISTON_STICKY_BASE" - - "DISPENSER" - - "RAILS" - - "POWERED_RAIL" - - "ACTIVATOR_RAIL" - - "DETECTOR_RAIL" - - "TRIPWIRE_HOOK" - - "STRING" - ENCHANT-GUI: - TITLE: "&8Add enchantments" - ICONS: - BACK-TO: - NAME: "&7&lBack" - MATERIAL: ARROW - LORE: - - "&7Click to go back" - MAKE-UNBREAKABLE: - NAME: "&bMake unbreakable" - MATERIAL: BRICK - MAKE-BREAKABLE: - NAME: "&bMake breakable" - MATERIAL: BRICK - CLEAR-ENCHANTS: - NAME: "&bClear Enchants" - MATERIAL: BARRIER - CHANGE-DURABILITY: - NAME: "&bChange Durability" - MATERIAL: ANVIL - SET-ENCHANTMENT-LEVEL: - NAME: "&d%enchantment% &7- &e%level%" - MATERIAL: SUGAR - LORE: - - "&8&m------------------------" - - "&7Click here to set the level of" - - "&7the &d%enchantment% &7enchantment." - - "&8&m------------------------" - SET-ENCHANTMENT-LEVEL-PLACEHOLDER: - NAME: " " - MATERIAL: STAINED_GLASS_PANE - DAMAGE: 11 - ENCHANTMENT-ICON: - NAME: "&d%enchantment%" - MATERIAL: ENCHANTED_BOOK - LORE: - - "&8&m------------------------" - - "&7Click here to select" - - "&7the &d%enchantment% &7enchantment." - - "&8&m------------------------" - CUSTOM-DURABILITY-GUI: - TITLE: "1-%max%" - CHANGE-COUNT-GUI: - TITLE: "&8Change item count" - ICONS: - BACK-TO: - NAME: "&7&lBack" - MATERIAL: ARROW - LORE: - - "&7Click to go back" - CUSTOM-COUNT: - NAME: "&bCustom Amount" - MATERIAL: PAPER - CUSTOM-COUNT-GUI: - TITLE: "Enter a number 1-%max%" -DISABLED-ENCHANTS: - _CHESTPLATE: - - "THORNS" - - "BINDING_CURSE" - - "VANISHING_CURSE" - IRON_SWORD: - - "SHARPNESS" - -DEFAULT-SETTINGS: - NAME: "Kit %id%" - REGENERATION: true - HUNGER: true - BUILD: true - ROUNDS: 1 - HITDELAY: 20 - EP_COOLDOWN: 13 - GA_COOLDOWN: 5 - -MATCH-TYPES: # Options: DUEL, PARTY_FFA, PARTY_SPLIT, PARTY_VS_PARTY - - "DUEL" \ No newline at end of file diff --git a/core/src/main/resources/modern/config.yml b/core/src/main/resources/config.yml similarity index 100% rename from core/src/main/resources/modern/config.yml rename to core/src/main/resources/config.yml diff --git a/core/src/main/resources/modern/divisions.yml b/core/src/main/resources/divisions.yml similarity index 100% rename from core/src/main/resources/modern/divisions.yml rename to core/src/main/resources/divisions.yml diff --git a/core/src/main/resources/modern/guis.yml b/core/src/main/resources/guis.yml similarity index 100% rename from core/src/main/resources/modern/guis.yml rename to core/src/main/resources/guis.yml diff --git a/core/src/main/resources/modern/inventories.yml b/core/src/main/resources/inventories.yml similarity index 100% rename from core/src/main/resources/modern/inventories.yml rename to core/src/main/resources/inventories.yml diff --git a/core/src/main/resources/modern/ladders/archer.yml b/core/src/main/resources/ladders/archer.yml similarity index 100% rename from core/src/main/resources/modern/ladders/archer.yml rename to core/src/main/resources/ladders/archer.yml diff --git a/core/src/main/resources/modern/ladders/axe.yml b/core/src/main/resources/ladders/axe.yml similarity index 100% rename from core/src/main/resources/modern/ladders/axe.yml rename to core/src/main/resources/ladders/axe.yml diff --git a/core/src/main/resources/modern/ladders/battlerush.yml b/core/src/main/resources/ladders/battlerush.yml similarity index 100% rename from core/src/main/resources/modern/ladders/battlerush.yml rename to core/src/main/resources/ladders/battlerush.yml diff --git a/core/src/main/resources/modern/ladders/bedwars.yml b/core/src/main/resources/ladders/bedwars.yml similarity index 100% rename from core/src/main/resources/modern/ladders/bedwars.yml rename to core/src/main/resources/ladders/bedwars.yml diff --git a/core/src/main/resources/modern/ladders/boxing.yml b/core/src/main/resources/ladders/boxing.yml similarity index 100% rename from core/src/main/resources/modern/ladders/boxing.yml rename to core/src/main/resources/ladders/boxing.yml diff --git a/core/src/main/resources/modern/ladders/bridges.yml b/core/src/main/resources/ladders/bridges.yml similarity index 100% rename from core/src/main/resources/modern/ladders/bridges.yml rename to core/src/main/resources/ladders/bridges.yml diff --git a/core/src/main/resources/modern/ladders/builduhc.yml b/core/src/main/resources/ladders/builduhc.yml similarity index 100% rename from core/src/main/resources/modern/ladders/builduhc.yml rename to core/src/main/resources/ladders/builduhc.yml diff --git a/core/src/main/resources/modern/ladders/crystal.yml b/core/src/main/resources/ladders/crystal.yml similarity index 100% rename from core/src/main/resources/modern/ladders/crystal.yml rename to core/src/main/resources/ladders/crystal.yml diff --git a/core/src/main/resources/modern/ladders/debuff.yml b/core/src/main/resources/ladders/debuff.yml similarity index 100% rename from core/src/main/resources/modern/ladders/debuff.yml rename to core/src/main/resources/ladders/debuff.yml diff --git a/core/src/main/resources/modern/ladders/fireball.yml b/core/src/main/resources/ladders/fireball.yml similarity index 100% rename from core/src/main/resources/modern/ladders/fireball.yml rename to core/src/main/resources/ladders/fireball.yml diff --git a/core/src/main/resources/modern/ladders/gapple.yml b/core/src/main/resources/ladders/gapple.yml similarity index 100% rename from core/src/main/resources/modern/ladders/gapple.yml rename to core/src/main/resources/ladders/gapple.yml diff --git a/core/src/main/resources/modern/ladders/mace.yml b/core/src/main/resources/ladders/mace.yml similarity index 100% rename from core/src/main/resources/modern/ladders/mace.yml rename to core/src/main/resources/ladders/mace.yml diff --git a/core/src/main/resources/modern/ladders/nodebuff.yml b/core/src/main/resources/ladders/nodebuff.yml similarity index 100% rename from core/src/main/resources/modern/ladders/nodebuff.yml rename to core/src/main/resources/ladders/nodebuff.yml diff --git a/core/src/main/resources/modern/ladders/pearlfight.yml b/core/src/main/resources/ladders/pearlfight.yml similarity index 100% rename from core/src/main/resources/modern/ladders/pearlfight.yml rename to core/src/main/resources/ladders/pearlfight.yml diff --git a/core/src/main/resources/modern/ladders/sg.yml b/core/src/main/resources/ladders/sg.yml similarity index 100% rename from core/src/main/resources/modern/ladders/sg.yml rename to core/src/main/resources/ladders/sg.yml diff --git a/core/src/main/resources/modern/ladders/skywars.yml b/core/src/main/resources/ladders/skywars.yml similarity index 100% rename from core/src/main/resources/modern/ladders/skywars.yml rename to core/src/main/resources/ladders/skywars.yml diff --git a/core/src/main/resources/modern/ladders/soup.yml b/core/src/main/resources/ladders/soup.yml similarity index 100% rename from core/src/main/resources/modern/ladders/soup.yml rename to core/src/main/resources/ladders/soup.yml diff --git a/core/src/main/resources/modern/ladders/spear.yml b/core/src/main/resources/ladders/spear.yml similarity index 100% rename from core/src/main/resources/modern/ladders/spear.yml rename to core/src/main/resources/ladders/spear.yml diff --git a/core/src/main/resources/modern/ladders/spleef.yml b/core/src/main/resources/ladders/spleef.yml similarity index 100% rename from core/src/main/resources/modern/ladders/spleef.yml rename to core/src/main/resources/ladders/spleef.yml diff --git a/core/src/main/resources/modern/ladders/sumo.yml b/core/src/main/resources/ladders/sumo.yml similarity index 100% rename from core/src/main/resources/modern/ladders/sumo.yml rename to core/src/main/resources/ladders/sumo.yml diff --git a/core/src/main/resources/modern/ladders/vanilla.yml b/core/src/main/resources/ladders/vanilla.yml similarity index 100% rename from core/src/main/resources/modern/ladders/vanilla.yml rename to core/src/main/resources/ladders/vanilla.yml diff --git a/core/src/main/resources/modern/playerkit.yml b/core/src/main/resources/playerkit.yml similarity index 100% rename from core/src/main/resources/modern/playerkit.yml rename to core/src/main/resources/playerkit.yml diff --git a/distribution/pom.xml b/distribution/pom.xml index 557c0d91..0c8427f5 100644 --- a/distribution/pom.xml +++ b/distribution/pom.xml @@ -28,20 +28,6 @@ ${project.parent.version} compile - - - dev.nandi0813 - practice-spigot_modern - ${project.parent.version} - compile - - - - dev.nandi0813 - practice-spigot_1_8_8 - ${project.parent.version} - compile - diff --git a/pom.xml b/pom.xml index e08fd06d..ff8752d7 100644 --- a/pom.xml +++ b/pom.xml @@ -18,8 +18,6 @@ core - spigot_1_8_8 - spigot_modern distribution diff --git a/spigot_1_8_8/pom.xml b/spigot_1_8_8/pom.xml deleted file mode 100644 index 97a978d7..00000000 --- a/spigot_1_8_8/pom.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - 4.0.0 - - - dev.nandi0813 - practice-parent - 6.4.6-SNAPSHOT - - - practice-spigot_1_8_8 - - - - - org.github.paperspigot - paperspigot-api - 1.8.8-R0.1-SNAPSHOT - provided - - - - dev.nandi0813 - practice-core - ${project.parent.version} - provided - - - - \ No newline at end of file diff --git a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/Classes.java b/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/Classes.java deleted file mode 100644 index 7201f388..00000000 --- a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/Classes.java +++ /dev/null @@ -1,51 +0,0 @@ -package dev.nandi0813.practice_1_8_8; - -import dev.nandi0813.practice.ZonePractice; -import dev.nandi0813.practice.module.interfaces.*; -import dev.nandi0813.practice_1_8_8.interfaces.LadderUtil; -import dev.nandi0813.practice_1_8_8.interfaces.BuildListener; -import dev.nandi0813.practice_1_8_8.interfaces.LegacyItemCooldownHandler; -import dev.nandi0813.practice_1_8_8.interfaces.PlayerHiderUtil; -import dev.nandi0813.practice_1_8_8.listener.ArenaListener; -import dev.nandi0813.practice_1_8_8.listener.FFAListener; -import dev.nandi0813.practice_1_8_8.listener.MatchListener; -import dev.nandi0813.practice_1_8_8.listener.PlayerChatListener; -import lombok.Getter; -import org.bukkit.Bukkit; - -@Getter -public class Classes implements dev.nandi0813.practice.module.util.Classes { - - public WorldCreate worldCreate = new dev.nandi0813.practice_1_8_8.interfaces.WorldCreate(); - public PlayerHiderInterface playerHiderUtil = new PlayerHiderUtil(); - public ItemMaterialUtil itemMaterialUtil = new dev.nandi0813.practice_1_8_8.interfaces.ItemMaterialUtil(); - public LadderUtil ladderUtil = new LadderUtil(); - public ItemCreateUtil itemCreateUtil = new dev.nandi0813.practice_1_8_8.interfaces.ItemCreateUtil(); - public PlayerUtil playerUtil = new dev.nandi0813.practice_1_8_8.interfaces.PlayerUtil(); - public ArenaUtil arenaUtil = new dev.nandi0813.practice_1_8_8.interfaces.ArenaUtil(); - public ArenaCopyUtil arenaCopyUtil = new dev.nandi0813.practice_1_8_8.interfaces.ArenaCopyUtil(); - - public BedUtil bedUtil = new dev.nandi0813.practice_1_8_8.interfaces.BedUtil(); - public EntityHider entityHider = new dev.nandi0813.practice_1_8_8.interfaces.EntityHider(ZonePractice.getInstance(), EntityHider.Policy.BLACKLIST); - public StatisticListener statisticListener = new dev.nandi0813.practice_1_8_8.interfaces.StatisticListener(); - public ConfigItemProvider configItemProvider = new dev.nandi0813.practice_1_8_8.interfaces.LegacyConfigItemProvider(); - public AbstractBuildListener buildListener = new BuildListener(); - - public Class changedBlockClass = dev.nandi0813.practice_1_8_8.interfaces.ChangedBlock.class; - public Class kitDataClass = dev.nandi0813.practice_1_8_8.interfaces.KitData.class; - public Class actionBarClass = dev.nandi0813.practice_1_8_8.interfaces.ActionBar.class; - - public ItemCooldownHandler itemCooldownHandler = new LegacyItemCooldownHandler(); - - public Classes() { - Bukkit.getServer().getPluginManager().registerEvents(arenaCopyUtil, ZonePractice.getInstance()); - Bukkit.getServer().getPluginManager().registerEvents(statisticListener, ZonePractice.getInstance()); - Bukkit.getServer().getPluginManager().registerEvents(new MatchListener(), ZonePractice.getInstance()); - Bukkit.getServer().getPluginManager().registerEvents(new FFAListener(), ZonePractice.getInstance()); - Bukkit.getServer().getPluginManager().registerEvents(new ArenaListener(), ZonePractice.getInstance()); - - Bukkit.getServer().getPluginManager().registerEvents(new EPCountdownListener(), ZonePractice.getInstance()); - Bukkit.getServer().getPluginManager().registerEvents(new PlayerChatListener(), ZonePractice.getInstance()); - } - -} diff --git a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/EPCountdownListener.java b/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/EPCountdownListener.java deleted file mode 100644 index 738dab82..00000000 --- a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/EPCountdownListener.java +++ /dev/null @@ -1,66 +0,0 @@ -package dev.nandi0813.practice_1_8_8; - -import dev.nandi0813.practice.manager.fight.ffa.FFAManager; -import dev.nandi0813.practice.manager.fight.ffa.game.FFA; -import dev.nandi0813.practice.manager.fight.match.Match; -import dev.nandi0813.practice.manager.fight.match.MatchManager; -import dev.nandi0813.practice.manager.fight.match.enums.RoundStatus; -import dev.nandi0813.practice.module.util.ClassImport; -import dev.nandi0813.practice.util.PermanentConfig; -import org.bukkit.Material; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerInteractEvent; - -public class EPCountdownListener implements Listener { - - @EventHandler - public void onEnderPearlShoot(PlayerInteractEvent e) { - Player player = e.getPlayer(); - - if (ClassImport.getClasses().getPlayerUtil().isItemInUse(player, Material.ENDER_PEARL)) { - FFA ffa = FFAManager.getInstance().getFFAByPlayer(player); - if (ffa != null) { - int duration = ffa.getPlayers().get(player).getEnderPearlCooldown(); - if (duration <= 0) { - return; - } - - ClassImport.getClasses().getItemCooldownHandler().handleEnderPearlFFA( - player, - ffa.getFightPlayers().get(player), - duration, - PermanentConfig.FFA_EXP_BAR, - e, - "FFA.GAME.COOLDOWN.ENDER-PEARL" - ); - return; - } - - Match match = MatchManager.getInstance().getLiveMatchByPlayer(player); - if (match != null) { - int duration = match.getLadder().getEnderPearlCooldown(); - if (duration <= 0) { - return; - } - - if (!match.getCurrentRound().getRoundStatus().equals(RoundStatus.LIVE)) { - e.setCancelled(true); - player.updateInventory(); - return; - } - - ClassImport.getClasses().getItemCooldownHandler().handleEnderPearlMatch( - player, - match.getMatchPlayers().get(player), - duration, - PermanentConfig.MATCH_EXP_BAR, - e, - "MATCH.COOLDOWN.ENDER-PEARL" - ); - } - } - } - -} diff --git a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/cooldown/EnderPearlRunnable.java b/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/cooldown/EnderPearlRunnable.java deleted file mode 100644 index 577b1f01..00000000 --- a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/cooldown/EnderPearlRunnable.java +++ /dev/null @@ -1,18 +0,0 @@ -package dev.nandi0813.practice_1_8_8.cooldown; - -import dev.nandi0813.practice.manager.fight.util.FightPlayer; -import dev.nandi0813.practice.manager.fight.util.Runnable.GameRunnable; -import dev.nandi0813.practice.util.cooldown.CooldownObject; -import org.bukkit.entity.Player; - -public class EnderPearlRunnable extends GameRunnable { - - public EnderPearlRunnable(Player player, FightPlayer fightPlayer, int seconds, boolean expBar) { - super(player, fightPlayer, seconds, CooldownObject.ENDER_PEARL, expBar); - } - - @Override - public void abstractCancel() { - } - -} diff --git a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/cooldown/FireballRunnable.java b/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/cooldown/FireballRunnable.java deleted file mode 100644 index 3e8ebf19..00000000 --- a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/cooldown/FireballRunnable.java +++ /dev/null @@ -1,68 +0,0 @@ -package dev.nandi0813.practice_1_8_8.cooldown; - -import dev.nandi0813.practice.ZonePractice; -import dev.nandi0813.practice.manager.fight.event.EventManager; -import dev.nandi0813.practice.manager.fight.event.enums.EventStatus; -import dev.nandi0813.practice.manager.fight.event.interfaces.Event; -import dev.nandi0813.practice.manager.fight.match.Match; -import dev.nandi0813.practice.manager.fight.match.MatchManager; -import dev.nandi0813.practice.manager.fight.util.Stats.Statistic; -import dev.nandi0813.practice.manager.profile.Profile; -import dev.nandi0813.practice.manager.profile.ProfileManager; -import dev.nandi0813.practice.manager.profile.enums.ProfileStatus; -import dev.nandi0813.practice.util.cooldown.CooldownObject; -import dev.nandi0813.practice.util.cooldown.PlayerCooldown; -import lombok.Getter; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import org.bukkit.scheduler.BukkitRunnable; - -@Getter -public class FireballRunnable extends BukkitRunnable { - - private final Player player; - private final Profile profile; - private boolean running; - private final double seconds; - - public FireballRunnable(Player player, double seconds) { - this.player = player; - this.seconds = seconds; - profile = ProfileManager.getInstance().getProfile(player); - } - - public void begin() { - running = true; - PlayerCooldown.addCooldown(player, CooldownObject.FIREBALL_FIGHT_FIREBALL, seconds); - this.runTaskTimerAsynchronously(ZonePractice.getInstance(), 0, 10L); - } - - @Override - public void cancel() { - if (running) { - Bukkit.getScheduler().cancelTask(this.getTaskId()); - running = false; - PlayerCooldown.removeCooldown(player, CooldownObject.FIREBALL_FIGHT_FIREBALL); - } - } - - @Override - public void run() { - if (PlayerCooldown.isActive(player, CooldownObject.FIREBALL_FIGHT_FIREBALL)) { - if (profile.getStatus().equals(ProfileStatus.MATCH)) { - Match match = MatchManager.getInstance().getLiveMatchByPlayer(player); - Statistic roundStatistic = match.getCurrentStat(player); - - if (roundStatistic.isSet()) - cancel(); - } else if (profile.getStatus().equals(ProfileStatus.EVENT)) { - Event event = EventManager.getInstance().getEventByPlayer(player); - - if (event.getStatus().equals(EventStatus.END)) - cancel(); - } else - cancel(); - } else - cancel(); - } -} diff --git a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/cooldown/FireworkRocketRunnable.java b/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/cooldown/FireworkRocketRunnable.java deleted file mode 100644 index 964179c7..00000000 --- a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/cooldown/FireworkRocketRunnable.java +++ /dev/null @@ -1,18 +0,0 @@ -package dev.nandi0813.practice_1_8_8.cooldown; - -import dev.nandi0813.practice.manager.fight.util.FightPlayer; -import dev.nandi0813.practice.manager.fight.util.Runnable.GameRunnable; -import dev.nandi0813.practice.util.cooldown.CooldownObject; -import org.bukkit.entity.Player; - -public class FireworkRocketRunnable extends GameRunnable { - - public FireworkRocketRunnable(Player player, FightPlayer fightPlayer, int seconds, boolean expBar) { - super(player, fightPlayer, seconds, CooldownObject.FIREWORK_ROCKET, expBar); - } - - @Override - public void abstractCancel() { - } - -} diff --git a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/cooldown/GoldenAppleRunnable.java b/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/cooldown/GoldenAppleRunnable.java deleted file mode 100644 index 50fd2ea9..00000000 --- a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/cooldown/GoldenAppleRunnable.java +++ /dev/null @@ -1,58 +0,0 @@ -package dev.nandi0813.practice_1_8_8.cooldown; - -import dev.nandi0813.practice.ZonePractice; -import dev.nandi0813.practice.manager.fight.match.MatchManager; -import dev.nandi0813.practice.manager.fight.util.Stats.Statistic; -import dev.nandi0813.practice.manager.profile.Profile; -import dev.nandi0813.practice.manager.profile.ProfileManager; -import dev.nandi0813.practice.manager.profile.enums.ProfileStatus; -import dev.nandi0813.practice.util.cooldown.CooldownObject; -import dev.nandi0813.practice.util.cooldown.PlayerCooldown; -import lombok.Getter; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import org.bukkit.scheduler.BukkitRunnable; - -@Getter -public class GoldenAppleRunnable extends BukkitRunnable { - - private final Player player; - private final Profile profile; - private boolean running; - private final int seconds; - - public GoldenAppleRunnable(Player player, int seconds) { - this.player = player; - this.seconds = seconds; - profile = ProfileManager.getInstance().getProfile(player); - } - - public void begin() { - running = true; - PlayerCooldown.addCooldown(player, CooldownObject.GOLDEN_APPLE, seconds); - this.runTaskTimerAsynchronously(ZonePractice.getInstance(), 0, 10L); - } - - @Override - public void cancel() { - if (running) { - Bukkit.getScheduler().cancelTask(this.getTaskId()); - running = false; - PlayerCooldown.removeCooldown(player, CooldownObject.GOLDEN_APPLE); - } - } - - @Override - public void run() { - if (PlayerCooldown.isActive(player, CooldownObject.GOLDEN_APPLE)) { - if (profile.getStatus().equals(ProfileStatus.MATCH) || profile.getStatus().equals(ProfileStatus.FFA)) { - Statistic roundStatistic = MatchManager.getInstance().getLiveMatchByPlayer(player).getCurrentStat(player); - - if (roundStatistic.isSet()) - cancel(); - } else - cancel(); - } else - cancel(); - } -} diff --git a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/ActionBar.java b/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/ActionBar.java deleted file mode 100644 index efa1b1b8..00000000 --- a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/ActionBar.java +++ /dev/null @@ -1,40 +0,0 @@ -package dev.nandi0813.practice_1_8_8.interfaces; - -import dev.nandi0813.practice.manager.profile.Profile; -import dev.nandi0813.practice.util.StringUtil; -import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; -import net.minecraft.server.v1_8_R3.ChatComponentText; -import net.minecraft.server.v1_8_R3.PacketPlayOutChat; -import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer; -import org.bukkit.entity.Player; - -public class ActionBar extends dev.nandi0813.practice.module.interfaces.actionbar.ActionBar { - - public ActionBar(Profile profile) { - super(profile); - } - - @Override - public void send() { - Player player = profile.getPlayer().getPlayer(); - - if (player != null) { - sendActionText(player, StringUtil.CC(LegacyComponentSerializer.legacyAmpersand().serialize(this.message))); - } - } - - @Override - public void clear() { - Player player = profile.getPlayer().getPlayer(); - - if (player != null) { - sendActionText(player, ""); - } - } - - public void sendActionText(Player player, String message) { - PacketPlayOutChat packet = new PacketPlayOutChat(new ChatComponentText(message), (byte) 2); - ((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet); - } - -} diff --git a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/ArenaCopyUtil.java b/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/ArenaCopyUtil.java deleted file mode 100644 index 0e7d5c77..00000000 --- a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/ArenaCopyUtil.java +++ /dev/null @@ -1,41 +0,0 @@ -package dev.nandi0813.practice_1_8_8.interfaces; - -import dev.nandi0813.practice.manager.arena.arenas.ArenaCopy; -import dev.nandi0813.practice.manager.profile.Profile; -import dev.nandi0813.practice.util.Cuboid; -import org.bukkit.Location; -import org.bukkit.block.Block; -import org.bukkit.block.BlockState; - -public class ArenaCopyUtil extends dev.nandi0813.practice.module.interfaces.ArenaCopyUtil { - - @Override - protected void copyBlock(Block oldBlock, Block newBlock) { - try { - // OPTIMIZATION: Disable physics during copy for massive speedup - newBlock.setType(oldBlock.getType(), false); - - BlockState oldState = oldBlock.getState(); - BlockState newState = newBlock.getState(); - - newState.setData(oldState.getData().clone()); - newState.update(true, false); // force=true, applyPhysics=false - - newBlock.setBiome(oldBlock.getBiome()); - } catch (Exception e) { - // Skip problematic blocks (e.g., MaterialData type incompatibilities like Torch) - // This allows the copy process to continue without halting - } - } - - @Override - protected void copyArena(Profile profile, ArenaCopy arenaCopy, Cuboid copyFrom, Location reference, Location newLocation) { - copyNormal(profile, arenaCopy, copyFrom, reference, newLocation); - } - - @Override - public void deleteArena(final String arena, final Cuboid cuboid) { - deleteNormal(arena, cuboid); - } - -} diff --git a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/ArenaUtil.java b/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/ArenaUtil.java deleted file mode 100644 index 395f77da..00000000 --- a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/ArenaUtil.java +++ /dev/null @@ -1,123 +0,0 @@ -package dev.nandi0813.practice_1_8_8.interfaces; - -import dev.nandi0813.practice.manager.arena.arenas.interfaces.BasicArena; -import dev.nandi0813.practice.manager.ladder.abstraction.Ladder; -import dev.nandi0813.practice.manager.ladder.abstraction.normal.NormalLadder; -import dev.nandi0813.practice.util.BasicItem; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.entity.ArmorStand; -import org.bukkit.inventory.ItemStack; - -public class ArenaUtil implements dev.nandi0813.practice.module.interfaces.ArenaUtil { - - @Override - public boolean turnsToDirt(Block block) { - Material type = block.getType(); - return - type.equals(Material.GRASS) || - type.equals(Material.MYCEL) || - type.equals(Material.DIRT) && - block.getData() == 2; - } - - @Override - public boolean containsDestroyableBlock(Ladder ladder, Block block) { - if (!(ladder instanceof NormalLadder)) return false; - NormalLadder normalLadder = (NormalLadder) ladder; - - if (!ladder.isBuild()) return false; - if (normalLadder.getDestroyableBlocks().isEmpty()) return false; - if (block == null) return false; - - for (BasicItem basicItem : normalLadder.getDestroyableBlocks()) { - ItemStack itemStack = block.getState().getData().toItemStack(); - if (basicItem.getMaterial().equals(itemStack.getType()) && basicItem.getDamage() == itemStack.getDurability()) - return true; - } - return false; - } - - @Override - public boolean requiresSupport(Block block) { - switch (block.getType()) { - case LONG_GRASS: // tall grass / fern - case DEAD_BUSH: - case YELLOW_FLOWER: // dandelion - case RED_ROSE: // all small flowers share this Material in 1.8.8 - case SAPLING: - case TORCH: - case REDSTONE_TORCH_ON: - case REDSTONE_TORCH_OFF: - case REDSTONE_WIRE: - case LEVER: - case STONE_BUTTON: - case WOOD_BUTTON: - case DIODE_BLOCK_ON: - case DIODE_BLOCK_OFF: - case REDSTONE_COMPARATOR_ON: - case REDSTONE_COMPARATOR_OFF: - case TRIPWIRE_HOOK: - case TRIPWIRE: - case SNOW: - case SUGAR_CANE_BLOCK: - case CROPS: // wheat - case CARROT: - case POTATO: - case NETHER_WARTS: - case PUMPKIN_STEM: - case MELON_STEM: - case CACTUS: - case VINE: // vines attach to the side of a block - case WATER_LILY: - case DOUBLE_PLANT: // sunflower, lilac, rose bush, peony, tall grass (double) - return true; - default: - return false; - } - } - - @Override - public void loadArenaChunks(BasicArena arena) { - if (arena.getCuboid() == null) return; - // 1.8.8 has no async chunk-load API — stagger each chunk one tick apart so - // the server never freezes trying to load all chunks in a single tick. - org.bukkit.plugin.Plugin plugin = dev.nandi0813.practice.ZonePractice.getInstance(); - org.bukkit.World world = arena.getCuboid().getWorld(); - if (world == null) return; - - int minCX = arena.getCuboid().getLowerX() >> 4; - int maxCX = arena.getCuboid().getUpperX() >> 4; - int minCZ = arena.getCuboid().getLowerZ() >> 4; - int maxCZ = arena.getCuboid().getUpperZ() >> 4; - - long delay = 0; - for (int cx = minCX; cx <= maxCX; cx++) { - for (int cz = minCZ; cz <= maxCZ; cz++) { - final int x = cx; - final int z = cz; - org.bukkit.Bukkit.getScheduler().runTaskLater(plugin, () -> { - if (!world.isChunkLoaded(x, z)) { - world.loadChunk(x, z); - } - }, delay++); - } - } - } - - @Override - public void setArmorStandItemInHand(ArmorStand armorStand, ItemStack item, boolean rightHand) { - if (armorStand == null) return; - - // In 1.8.8, there's only one hand (right hand) - armorStand.setItemInHand(item); - } - - @Override - public void setArmorStandInvulnerable(ArmorStand armorStand) { - // 1.8.8 doesn't have setInvulnerable or setPersistent methods - // We'll handle invulnerability through event cancellation instead - // Armor stands in 1.8.8 are already non-persistent by default - } - -} diff --git a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/BedUtil.java b/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/BedUtil.java deleted file mode 100644 index a6a814d2..00000000 --- a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/BedUtil.java +++ /dev/null @@ -1,111 +0,0 @@ -package dev.nandi0813.practice_1_8_8.interfaces; - -import dev.nandi0813.practice.manager.arena.util.BedLocation; -import dev.nandi0813.practice.manager.backend.LanguageManager; -import dev.nandi0813.practice.manager.fight.match.Match; -import dev.nandi0813.practice.manager.fight.match.enums.TeamEnum; -import dev.nandi0813.practice.manager.fight.match.interfaces.Team; -import dev.nandi0813.practice.module.util.ClassImport; -import dev.nandi0813.practice.util.Common; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; -import org.bukkit.block.BlockState; -import org.bukkit.entity.Player; -import org.bukkit.event.block.BlockBreakEvent; -import org.bukkit.material.Bed; -import org.jetbrains.annotations.NotNull; - -import java.util.Map; - -public class BedUtil extends dev.nandi0813.practice.module.interfaces.BedUtil { - - @Override - public BedLocation getBedLocation(Block block) { - if (block == null) return null; - - Location bedLoc = block.getLocation(); - Bed bed = (Bed) block.getState().getData(); - - if (bed.isHeadOfBed()) - bedLoc = block.getRelative(bed.getFacing().getOppositeFace()).getLocation(); - - return new BedLocation(bedLoc.getWorld(), bedLoc.getX(), bedLoc.getY(), bedLoc.getZ(), bed.getFacing()); - } - - @Override - public void placeBed(Location loc, BlockFace face) { - Block bedFootBlock = loc.getBlock(); - Block bedHeadBlock = bedFootBlock.getRelative(face); - - BlockState bedFootState = bedFootBlock.getState(); - bedFootState.setType(Material.BED_BLOCK); - Bed bedFootData = new Bed(Material.BED_BLOCK); - bedFootData.setHeadOfBed(false); - bedFootData.setFacingDirection(face); - bedFootState.setData(bedFootData); - bedFootState.update(true); - - BlockState bedHeadState = bedHeadBlock.getState(); - bedHeadState.setType(Material.BED_BLOCK); - Bed bedHeadData = new Bed(Material.BED_BLOCK); - bedHeadData.setHeadOfBed(true); - bedHeadData.setFacingDirection(face); - bedHeadState.setData(bedHeadData); - bedHeadState.update(true); - } - - @Override - public boolean onBedBreak(final @NotNull BlockBreakEvent e, final @NotNull Match match) { - Player player = e.getPlayer(); - - if (match.getCurrentStat(player).isSet()) return false; - - final Map bedStatus = match.getCurrentRound().getBedStatus(); - if (!bedStatus.get(TeamEnum.TEAM1) && !bedStatus.get(TeamEnum.TEAM2)) return false; - - Block bedBlock = e.getBlock(); - if (bedBlock == null || !bedBlock.getType().equals(Material.BED_BLOCK)) return false; - - TeamEnum team = ((Team) match).getTeam(player); - Location bedLoc = bedBlock.getLocation(); - Bed bed = (Bed) e.getBlock().getState().getData(); - - boolean destroy = false; - if (match.getArena().getBedLoc1().getLocation().equals(bedLoc) - || match.getArena().getBedLoc1().getLocation().getBlock().getRelative(match.getArena().getBedLoc1().getFacing()).getLocation().equals(bedLoc)) { - e.setCancelled(true); - - if (team.equals(TeamEnum.TEAM2)) { - destroy = true; - - bedStatus.replace(TeamEnum.TEAM1, false); - sendBedDestroyMessage(match, TeamEnum.TEAM1); - } else - Common.sendMMMessage(player, LanguageManager.getString("MATCH.CANT-BREAK-OWN-BED")); - } else if (match.getArena().getBedLoc2().getLocation().equals(bedLoc) - || match.getArena().getBedLoc2().getLocation().getBlock().getRelative(match.getArena().getBedLoc2().getFacing()).getLocation().equals(bedLoc)) { - e.setCancelled(true); - - if (team.equals(TeamEnum.TEAM1)) { - destroy = true; - - bedStatus.replace(TeamEnum.TEAM2, false); - sendBedDestroyMessage(match, TeamEnum.TEAM2); - } else - Common.sendMMMessage(player, LanguageManager.getString("MATCH.CANT-BREAK-OWN-BED")); - } - - if (destroy) { - match.addBlockChange(ClassImport.createChangeBlock(e.getBlock())); - if (bed.isHeadOfBed()) - bedLoc.getBlock().getRelative(bed.getFacing().getOppositeFace()).setType(Material.AIR); - else - bedBlock.setType(Material.AIR); - } - - return destroy; - } - -} diff --git a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/BuildListener.java b/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/BuildListener.java deleted file mode 100644 index 1908e50d..00000000 --- a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/BuildListener.java +++ /dev/null @@ -1,15 +0,0 @@ -package dev.nandi0813.practice_1_8_8.interfaces; - -import dev.nandi0813.practice.module.interfaces.AbstractBuildListener; - -/** - * 1.8.8 implementation of the build-block listener. - * All functionality is inherited from {@link AbstractBuildListener}: - * explosions, TNT tracking via EntitySpawnEvent, pistons, block form, - * liquid flow and block spread all work out of the box. - * No additional API calls exist on 1.8.8 that need to be handled here. - */ -public class BuildListener extends AbstractBuildListener { - // isTntBlockAlreadyTracked() returns false by default → EntitySpawnEvent - // captures the TNT block with the Material.TNT override as needed for 1.8.8. -} \ No newline at end of file diff --git a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/ChangedBlock.java b/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/ChangedBlock.java deleted file mode 100644 index 2755e721..00000000 --- a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/ChangedBlock.java +++ /dev/null @@ -1,92 +0,0 @@ -package dev.nandi0813.practice_1_8_8.interfaces; - -import dev.nandi0813.practice.manager.backend.LanguageManager; -import dev.nandi0813.practice.module.util.ClassImport; -import dev.nandi0813.practice.util.Common; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.block.Chest; -import org.bukkit.event.block.BlockPlaceEvent; -import org.bukkit.material.Bed; -import org.bukkit.material.MaterialData; - -public class ChangedBlock extends dev.nandi0813.practice.module.interfaces.ChangedBlock { - - private final MaterialData materialData; - - public ChangedBlock(final Block oldBlock) { - super(oldBlock); - this.materialData = oldBlock.getState().getData(); - } - - public ChangedBlock(final Block oldBlock, final Material originalMaterial) { - super(oldBlock, originalMaterial); - // Block is already AIR/changed; use the default MaterialData for the original material - this.materialData = new org.bukkit.material.MaterialData(originalMaterial); - } - - public ChangedBlock(final BlockPlaceEvent e) { - super(e); - this.materialData = e.getBlockReplacedState().getData(); - } - - protected void saveChest(Location loc) { - try { - Block block = loc.getBlock(); - - if (block.getType() == Material.CHEST || block.getType() == Material.TRAPPED_CHEST) { - Chest chest = (Chest) block.getState(); - chestInventory = chest.getInventory().getContents().clone(); - } - } catch (Exception e) { - Common.sendConsoleMMMessage(LanguageManager.getString("ARENA.ARENA-REGEN-FAILED-CHEST")); - } - } - - protected void saveBed(Location loc) { - Block block = loc.getBlock(); - - if (block != null && block.getType() == Material.BED_BLOCK) { - Bed bed = (Bed) block.getState().getData(); - if (bed.isHeadOfBed()) { - this.location = block.getRelative(bed.getFacing().getOppositeFace(), 1).getLocation(); - } - - this.bedFace = bed.getFacing(); - } - } - - public void reset() { - if (location == null) return; - - if (bedFace != null) { - ClassImport.getClasses().getBedUtil().placeBed(location, bedFace); - return; - } - - try { - // Capture a single BlockState snapshot and apply all mutations to it before - // committing — calling block.getState() multiple times returns independent - // snapshots, so setData() on one has no effect on another's update() call. - block.setType(material); - org.bukkit.block.BlockState state = block.getState(); - state.setType(material); - state.setData(materialData); - state.update(true, false); - - if (chestInventory != null && block.getState() instanceof Chest) { - Chest chest = (Chest) block.getState(); - chest.getInventory().setContents(chestInventory); - } - } catch (IllegalArgumentException e) { - // Handle MaterialData type incompatibilities (e.g., Tree, Torch) - // Fall back to setting the material only, without custom MaterialData - block.setType(material); - org.bukkit.block.BlockState state = block.getState(); - state.setType(material); - state.update(true, false); - } - } - -} diff --git a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/EntityHider.java b/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/EntityHider.java deleted file mode 100644 index e50c3d66..00000000 --- a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/EntityHider.java +++ /dev/null @@ -1,51 +0,0 @@ -package dev.nandi0813.practice_1_8_8.interfaces; - -import com.github.retrooper.packetevents.PacketEvents; -import com.github.retrooper.packetevents.util.Vector3d; -import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerDestroyEntities; -import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerSpawnEntity; -import io.github.retrooper.packetevents.util.SpigotConversionUtil; -import org.bukkit.entity.Entity; -import org.bukkit.entity.Player; -import org.bukkit.event.Listener; -import org.bukkit.plugin.Plugin; - -public class EntityHider extends dev.nandi0813.practice.module.interfaces.EntityHider implements Listener { - - public EntityHider(Plugin plugin, Policy policy) { - super(plugin, policy); - } - - @Override - public void showEntity(Player observer, Entity entity) { - validate(observer, entity); - boolean hiddenBefore = !setVisibility(observer, entity.getEntityId(), true); - - // Resend packets - if (hiddenBefore) { - WrapperPlayServerSpawnEntity spawnEntity = new WrapperPlayServerSpawnEntity( - entity.getEntityId(), - entity.getUniqueId(), - SpigotConversionUtil.fromBukkitEntityType(entity.getType()), - SpigotConversionUtil.fromBukkitLocation(entity.getLocation()), - entity.getLocation().getYaw(), - 0, - new Vector3d(entity.getVelocity().getX(), entity.getVelocity().getY(), entity.getVelocity().getZ()) - ); - - PacketEvents.getAPI().getPlayerManager().sendPacket(observer, spawnEntity); - } - } - - @Override - public void hideEntity(Player observer, Entity entity) { - validate(observer, entity); - boolean visibleBefore = setVisibility(observer, entity.getEntityId(), false); - - if (visibleBefore) { - WrapperPlayServerDestroyEntities destroyEntities = new WrapperPlayServerDestroyEntities(new int[]{entity.getEntityId()}); - PacketEvents.getAPI().getPlayerManager().sendPacket(observer, destroyEntities); - } - } - -} diff --git a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/ItemCreateUtil.java b/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/ItemCreateUtil.java deleted file mode 100644 index ea2844c3..00000000 --- a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/ItemCreateUtil.java +++ /dev/null @@ -1,103 +0,0 @@ -package dev.nandi0813.practice_1_8_8.interfaces; - -import dev.nandi0813.practice.util.StringUtil; -import org.bukkit.Material; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; - -import java.util.List; - -public class ItemCreateUtil extends dev.nandi0813.practice.module.interfaces.ItemCreateUtil { - - @Override - public ItemStack createItem(String displayname, Material material, Short damage, int amount, List lore) { - ItemStack itemstack = new ItemStack(material, amount, damage); - ItemMeta itemmeta = itemstack.getItemMeta(); - itemmeta.setDisplayName(StringUtil.CC(displayname)); - itemmeta.setLore(StringUtil.CC(lore)); - hideItemFlags(itemmeta); - itemstack.setItemMeta(itemmeta); - return itemstack; - } - - @Override - public ItemStack createItem(String displayname, Material material) { - ItemStack itemstack = new ItemStack(material); - ItemMeta itemmeta = itemstack.getItemMeta(); - itemmeta.setDisplayName(StringUtil.CC(displayname)); - hideItemFlags(itemmeta); - itemstack.setItemMeta(itemmeta); - return itemstack; - } - - @Override - public ItemStack createItem(Material material, Short damage) { - ItemStack itemstack = new ItemStack(material, 1, damage); - ItemMeta itemmeta = itemstack.getItemMeta(); - hideItemFlags(itemmeta); - itemstack.setItemMeta(itemmeta); - return itemstack; - } - - @Override - public ItemStack createItem(String displayname, Material material, Short damage) { - ItemStack itemstack = new ItemStack(material, 1, damage); - ItemMeta itemmeta = itemstack.getItemMeta(); - itemmeta.setDisplayName(StringUtil.CC(displayname)); - itemstack.setItemMeta(itemmeta); - return itemstack; - } - - @Override - public ItemStack createItem(String displayname, Material material, List lore) { - ItemStack itemstack = new ItemStack(material); - ItemMeta itemmeta = itemstack.getItemMeta(); - itemmeta.setDisplayName(StringUtil.CC(displayname)); - itemmeta.setLore(StringUtil.CC(lore)); - hideItemFlags(itemmeta); - itemstack.setItemMeta(itemmeta); - return itemstack; - } - - @Override - public ItemStack createItem(String displayname, Material material, Short damage, List lore) { - ItemStack itemstack = new ItemStack(material, 1, damage); - ItemMeta itemmeta = itemstack.getItemMeta(); - itemmeta.setDisplayName(StringUtil.CC(displayname)); - itemmeta.setLore(StringUtil.CC(lore)); - hideItemFlags(itemmeta); - itemstack.setItemMeta(itemmeta); - return itemstack; - } - - @Override - public ItemStack createItem(ItemStack item, List lore) { - ItemStack itemstack = new ItemStack(item.getType()); - itemstack.setDurability(item.getDurability()); - if (item.hasItemMeta()) { - ItemMeta itemmeta = itemstack.getItemMeta(); - itemmeta.setDisplayName(StringUtil.CC(item.getItemMeta().getDisplayName())); - itemmeta.setLore(StringUtil.CC(lore)); - hideItemFlags(itemmeta); - itemstack.setItemMeta(itemmeta); - } - return itemstack; - } - - @Override - public ItemStack createItem(ItemStack item, String name, List lore) { - ItemStack itemStack = new ItemStack(item.getType()); - itemStack.setDurability(item.getDurability()); - - ItemMeta itemMeta = itemStack.getItemMeta(); - - itemMeta.setDisplayName(name); - itemMeta.setLore(lore); - hideItemFlags(itemMeta); - - itemStack.setItemMeta(itemMeta); - - return itemStack; - } - -} diff --git a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/ItemMaterialUtil.java b/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/ItemMaterialUtil.java deleted file mode 100644 index b47552f3..00000000 --- a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/ItemMaterialUtil.java +++ /dev/null @@ -1,124 +0,0 @@ -package dev.nandi0813.practice_1_8_8.interfaces; - -import org.bukkit.Color; -import org.bukkit.Material; -import org.bukkit.OfflinePlayer; -import org.bukkit.entity.EntityType; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.LeatherArmorMeta; -import org.bukkit.inventory.meta.SkullMeta; - -public class ItemMaterialUtil implements dev.nandi0813.practice.module.interfaces.ItemMaterialUtil { - - @Override - public Material getSnowball() { - return Material.SNOW_BALL; - } - - @Override - public Material getIronShovel() { - return Material.IRON_SPADE; - } - - @Override - public Material getEyeOfEnder() { - return Material.EYE_OF_ENDER; - } - - @Override - public Material getRedBed() { - return Material.BED; - } - - @Override - public Material getMushroomSoup() { - return Material.MUSHROOM_SOUP; - } - - @Override - public Material getWater() { - return Material.STATIONARY_WATER; - } - - @Override - public Material getLava() { - return Material.STATIONARY_LAVA; - } - - @Override - public Material getFireball() { - return Material.FIREBALL; - } - - @Override - public Material getEndPortal() { - return Material.ENDER_PORTAL; - } - - @Override - public Material getLilyPad() { - return Material.WATER_LILY; - } - - @Override - public Material getStainedClay() { - return Material.STAINED_CLAY; - } - - @Override - public Material getSplashPotion() { - return Material.POTION; - } - - @Override - public Material getGoldSword() { - return Material.GOLD_SWORD; - } - - @Override - public Material getClock() { - return Material.WATCH; - } - - @Override - public EntityType getTNTMineCart() { - return EntityType.MINECART_TNT; - } - - @Override - public ItemStack getPlayerHead(OfflinePlayer player) { - ItemStack item = new ItemStack(Material.SKULL_ITEM, 1, (short) 3); - SkullMeta skull = (SkullMeta) item.getItemMeta(); - skull.setOwner(player.getName()); - item.setItemMeta(skull); - return item; - } - - @Override - public ItemStack getSword() { - return new ItemStack(Material.DIAMOND_SWORD); - } - - @Override - public ItemStack getRedBlock() { - // In 1.8.8, use red wool (damage value 14) - return new ItemStack(Material.WOOL, 1, (short) 14); - } - - @Override - public ItemStack getDefaultPlayerHead() { - // In 1.8.8, use Steve head (skull with damage 3, no owner) - return new ItemStack(Material.SKULL_ITEM, 1, (short) 3); - } - - @Override - public ItemStack getRedBoots() { - ItemStack boots = new ItemStack(Material.LEATHER_BOOTS); - LeatherArmorMeta meta = (LeatherArmorMeta) boots.getItemMeta(); - if (meta != null) { - meta.setColor(Color.RED); - boots.setItemMeta(meta); - } - return boots; - } -} diff --git a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/KitData.java b/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/KitData.java deleted file mode 100644 index d432f512..00000000 --- a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/KitData.java +++ /dev/null @@ -1,43 +0,0 @@ -package dev.nandi0813.practice_1_8_8.interfaces; - -import org.bukkit.entity.Player; - -public class KitData extends dev.nandi0813.practice.module.interfaces.KitData { - - public KitData() { - super(); - } - - public KitData(dev.nandi0813.practice.module.interfaces.KitData kitData) { - super(kitData); - } - - @Override - public void setStorage(Player player) { - this.storage = player.getInventory().getContents().clone(); - } - - @Override - public void setArmor(Player player) { - this.armor = player.getInventory().getArmorContents().clone(); - } - - @Override - public void setExtra(Player player) { - this.extra = null; - } - - @Override - public void loadStorage(Player player) { - player.getInventory().setContents(this.storage.clone()); - } - - @Override - public void loadArmor(Player player) { - player.getInventory().setArmorContents(this.armor.clone()); - } - - @Override - public void loadExtra(Player player) { /* Unsued */ } - -} diff --git a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/LadderUtil.java b/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/LadderUtil.java deleted file mode 100644 index 5c43be8a..00000000 --- a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/LadderUtil.java +++ /dev/null @@ -1,125 +0,0 @@ -package dev.nandi0813.practice_1_8_8.interfaces; - -import dev.nandi0813.practice.ZonePractice; -import dev.nandi0813.practice.manager.fight.match.Match; -import dev.nandi0813.practice.manager.ladder.type.FireballFight; -import dev.nandi0813.practice.module.interfaces.ItemCreateUtil; -import dev.nandi0813.practice.util.Common; -import dev.nandi0813.practice.util.StringUtil; -import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.Color; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Player; -import org.bukkit.entity.TNTPrimed; -import org.bukkit.event.block.BlockPlaceEvent; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; -import org.bukkit.inventory.meta.LeatherArmorMeta; -import org.bukkit.material.MaterialData; -import org.bukkit.metadata.FixedMetadataValue; - -import java.util.Objects; - -import static dev.nandi0813.practice.util.PermanentConfig.FIGHT_ENTITY; - -public class LadderUtil implements dev.nandi0813.practice.module.interfaces.LadderUtil { - - @Override - public void loadInventory(Player player, ItemStack[] armor, ItemStack[] inventory, ItemStack[] extra) { - player.getInventory().setArmorContents(armor); - player.getInventory().setContents(inventory); - } - - public ItemStack changeItemColor(ItemStack item, Component teamColor) { - Material itemType = item.getType(); - String color = LegacyComponentSerializer.legacyAmpersand().serialize(teamColor.append(Component.text("-"))); - color = color.replace("-", ""); - - if (itemType.equals(Material.WOOL) || - itemType.equals(Material.STAINED_CLAY) || - itemType.equals(Material.STAINED_GLASS) || - itemType.equals(Material.STAINED_GLASS_PANE) || - itemType.equals(Material.CARPET)) { - item.setDurability(ItemCreateUtil.getDurabilityByColor(color.charAt(1))); - } else if (item.getType().name().startsWith("LEATHER_")) { - Color c = StringUtil.translateChatColorToColor(Objects.requireNonNull(ChatColor.getByChar(color.charAt(1)))); - - if (c != null) { - LeatherArmorMeta lch = (LeatherArmorMeta) item.getItemMeta(); - lch.setColor(c); - item.setItemMeta(lch); - } - } - - return item; - } - - @Override - public ItemStack getPotionItem(String string) { - try { - if (string.contains("::")) { - String[] split = string.split("::"); - ItemStack itemStack = new ItemStack(Material.valueOf(split[0])); - - if (itemStack.getType() == Material.POTION) { - itemStack.setDurability((((short) Integer.parseInt(split[1])))); - } - return itemStack; - } - } catch (Exception e) { - Common.sendConsoleMMMessage("Invalid item: " + string); - } - return null; - } - - @Override - public boolean isUnbreakable(ItemStack item) { - if (item.hasItemMeta() && item.getItemMeta() != null) { - item.getItemMeta().spigot().isUnbreakable(); - } - return false; - } - - @Override - public ItemMeta setUnbreakable(ItemMeta itemMeta, boolean unbreakable) { - if (itemMeta != null) { - itemMeta.spigot().setUnbreakable(unbreakable); - } - return itemMeta; - } - - @Override - public ItemStack setDurability(ItemStack itemStack, int durability) { - itemStack.setDurability((short) (itemStack.getType().getMaxDurability() - durability)); - return itemStack; - } - - @Override - public void placeTnt(BlockPlaceEvent e, Match match) { - Bukkit.getScheduler().runTaskLater(ZonePractice.getInstance(), () -> { - if (e.isCancelled()) { - return; - } - - Block block = e.getBlock(); - block.setType(Material.AIR); - block.getState().setData(new MaterialData(Material.AIR)); - block.getState().update(); - - TNTPrimed tnt = (TNTPrimed) block.getWorld().spawnEntity(block.getLocation().subtract(-0.5, 0, -0.5), EntityType.PRIMED_TNT); - tnt.setMetadata(FIGHT_ENTITY, new FixedMetadataValue(ZonePractice.getInstance(), match)); - tnt.setIsIncendiary(false); - - if (match.getLadder() instanceof FireballFight) { - tnt.setMetadata(FireballFight.FIREBALL_FIGHT_TNT, new FixedMetadataValue(ZonePractice.getInstance(), match)); - tnt.setMetadata(FireballFight.FIREBALL_FIGHT_TNT_SHOOTER, new FixedMetadataValue(ZonePractice.getInstance(), e.getPlayer())); - } - }, 2L); - } - -} diff --git a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/LegacyConfigItemProvider.java b/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/LegacyConfigItemProvider.java deleted file mode 100644 index 473f02bd..00000000 --- a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/LegacyConfigItemProvider.java +++ /dev/null @@ -1,97 +0,0 @@ -package dev.nandi0813.practice_1_8_8.interfaces; - -import dev.nandi0813.practice.manager.gui.GUIItem; -import dev.nandi0813.practice.module.interfaces.ConfigItemProvider; -import dev.nandi0813.practice.util.Common; -import org.bukkit.Material; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.enchantments.Enchantment; -import org.bukkit.inventory.ItemFlag; - -import java.util.List; - -/** - * Legacy (1.8.8) implementation of ConfigItemProvider. - * In 1.8, the DAMAGE value is used for item data/color (e.g., wool colors, glass colors). - */ -public class LegacyConfigItemProvider implements ConfigItemProvider { - - @Override - public GUIItem getGuiItem(YamlConfiguration config, String loc) { - GUIItem guiItem = new GUIItem(); - - if (config.isString(loc + ".NAME")) { - guiItem.setName(config.getString(loc + ".NAME")); - } - - if (config.isString(loc + ".MATERIAL")) { - guiItem.setMaterial(Material.valueOf(config.getString(loc + ".MATERIAL"))); - } - - if (config.isInt(loc + ".AMOUNT")) { - int amount = config.getInt(loc + ".AMOUNT"); - if (amount <= 0 || amount > 64) { - amount = 1; - } - guiItem.setAmount(amount); - } - - if (config.isInt(loc + ".DURABILITY")) { - int durability = config.getInt(loc + ".DURABILITY"); - if (durability < 0) { - durability = 1; - } - guiItem.setDurability(durability); - } - - // In 1.8, DAMAGE is used for item data (colors, variants, etc.) - if (config.isInt(loc + ".DAMAGE")) { - short damage = (short) config.getInt(loc + ".DAMAGE"); - - if (damage != 0) { - guiItem.setDamage(damage); - } - } - - if (config.isList(loc + ".LORE")) { - guiItem.setLore(config.getStringList(loc + ".LORE")); - } - - if (config.isList(loc + ".FLAGS")) { - List flags = config.getStringList(loc + ".FLAGS"); - for (String flag : flags) { - try { - ItemFlag itemFlag = ItemFlag.valueOf(flag); - guiItem.addItemFlag(itemFlag); - } catch (IllegalArgumentException e) { - Common.sendConsoleMMMessage("Invalid ItemFlag: " + flag); - } - } - } - - if (config.isList(loc + ".ENCHANTMENTS")) { - for (String s : config.getStringList(loc + ".ENCHANTMENTS")) { - String[] enchantmentSplit = s.split(":"); - if (enchantmentSplit.length != 2) { - continue; - } - - try { - Enchantment enchantment = Enchantment.getByName(enchantmentSplit[0]); - int level = Integer.parseInt(enchantmentSplit[1]); - - if (enchantment.getStartLevel() > level) { - level = enchantment.getStartLevel(); - } - - guiItem.addEnchantment(enchantment, level); - } catch (Exception e) { - Common.sendConsoleMMMessage("Enchantment not found: " + e); - } - } - } - - return guiItem; - } - -} diff --git a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/LegacyItemCooldownHandler.java b/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/LegacyItemCooldownHandler.java deleted file mode 100644 index a5c1f04b..00000000 --- a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/LegacyItemCooldownHandler.java +++ /dev/null @@ -1,158 +0,0 @@ -package dev.nandi0813.practice_1_8_8.interfaces; - -import dev.nandi0813.practice.manager.backend.LanguageManager; -import dev.nandi0813.practice.manager.fight.util.FightPlayer; -import dev.nandi0813.practice_1_8_8.cooldown.EnderPearlRunnable; -import dev.nandi0813.practice_1_8_8.cooldown.FireworkRocketRunnable; -import dev.nandi0813.practice.module.interfaces.ItemCooldownHandler; -import dev.nandi0813.practice.util.Common; -import dev.nandi0813.practice.util.StringUtil; -import dev.nandi0813.practice.util.cooldown.CooldownObject; -import dev.nandi0813.practice_1_8_8.cooldown.GoldenAppleRunnable; -import dev.nandi0813.practice.util.cooldown.PlayerCooldown; -import dev.nandi0813.practice_1_8_8.cooldown.FireballRunnable; -import org.bukkit.entity.Player; -import org.bukkit.event.Cancellable; -import org.bukkit.event.player.PlayerInteractEvent; - -/** - * Legacy (1.8.8) implementation of {@link ItemCooldownHandler}. - * - *

    When a cooldown is active the action is cancelled, the player's inventory - * is refreshed, and a chat message is sent with the remaining time. - * No native hotbar cooldown visualisation is available on 1.8.8. - */ -public class LegacyItemCooldownHandler implements ItemCooldownHandler { - - // ------------------------------------------------------------------------- - // Ender Pearl - // ------------------------------------------------------------------------- - - @Override - public void handleEnderPearlFFA(Player player, FightPlayer fightPlayer, int duration, boolean expBar, - Cancellable event, String langKey) { - if (PlayerCooldown.isActive(player, CooldownObject.ENDER_PEARL)) { - Common.sendMMMessage(player, StringUtil.replaceSecondString( - LanguageManager.getString(langKey), - PlayerCooldown.getLeftInDouble(player, CooldownObject.ENDER_PEARL))); - event.setCancelled(true); - refreshInventory(event, player); - } else { - EnderPearlRunnable runnable = new EnderPearlRunnable(player, fightPlayer, duration, expBar); - runnable.begin(); - } - } - - @Override - public void handleEnderPearlMatch(Player player, FightPlayer fightPlayer, int duration, boolean expBar, - Cancellable event, String langKey) { - if (PlayerCooldown.isActive(player, CooldownObject.ENDER_PEARL)) { - Common.sendMMMessage(player, StringUtil.replaceSecondString( - LanguageManager.getString(langKey), - PlayerCooldown.getLeftInDouble(player, CooldownObject.ENDER_PEARL))); - event.setCancelled(true); - refreshInventory(event, player); - } else { - EnderPearlRunnable runnable = new EnderPearlRunnable(player, fightPlayer, duration, expBar); - runnable.begin(); - } - } - - // ------------------------------------------------------------------------- - // Golden Apple - // ------------------------------------------------------------------------- - - @Override - public void handleGoldenAppleFFA(Player player, int duration, Cancellable event, String langKey) { - if (PlayerCooldown.isActive(player, CooldownObject.GOLDEN_APPLE)) { - event.setCancelled(true); - Common.sendMMMessage(player, StringUtil.replaceSecondString( - LanguageManager.getString(langKey), - PlayerCooldown.getLeftInDouble(player, CooldownObject.GOLDEN_APPLE))); - player.updateInventory(); - } else { - GoldenAppleRunnable runnable = new GoldenAppleRunnable(player, duration); - runnable.begin(); - } - } - - @Override - public void handleGoldenAppleMatch(Player player, int duration, Cancellable event, String langKey) { - if (PlayerCooldown.isActive(player, CooldownObject.GOLDEN_APPLE)) { - event.setCancelled(true); - Common.sendMMMessage(player, StringUtil.replaceSecondString( - LanguageManager.getString(langKey), - PlayerCooldown.getLeftInDouble(player, CooldownObject.GOLDEN_APPLE))); - player.updateInventory(); - } else { - GoldenAppleRunnable runnable = new GoldenAppleRunnable(player, duration); - runnable.begin(); - } - } - - // ------------------------------------------------------------------------- - // Firework Rocket - // ------------------------------------------------------------------------- - - @Override - public void handleFireworkRocketFFA(Player player, FightPlayer fightPlayer, int duration, - Cancellable event, String langKey) { - if (PlayerCooldown.isActive(player, CooldownObject.FIREWORK_ROCKET)) { - Common.sendMMMessage(player, StringUtil.replaceSecondString( - LanguageManager.getString(langKey), - PlayerCooldown.getLeftInDouble(player, CooldownObject.FIREWORK_ROCKET))); - event.setCancelled(true); - refreshInventory(event, player); - } else { - FireworkRocketRunnable runnable = new FireworkRocketRunnable(player, fightPlayer, duration, false); - runnable.begin(); - } - } - - @Override - public void handleFireworkRocketMatch(Player player, FightPlayer fightPlayer, int duration, - Cancellable event, String langKey) { - if (PlayerCooldown.isActive(player, CooldownObject.FIREWORK_ROCKET)) { - Common.sendMMMessage(player, StringUtil.replaceSecondString( - LanguageManager.getString(langKey), - PlayerCooldown.getLeftInDouble(player, CooldownObject.FIREWORK_ROCKET))); - event.setCancelled(true); - refreshInventory(event, player); - } else { - FireworkRocketRunnable runnable = new FireworkRocketRunnable(player, fightPlayer, duration, false); - runnable.begin(); - } - } - - // ------------------------------------------------------------------------- - // Helpers - // ------------------------------------------------------------------------- - - /** Calls {@link Player#updateInventory()} when the underlying event is a {@link PlayerInteractEvent}. */ - private static void refreshInventory(Cancellable event, Player player) { - if (event instanceof PlayerInteractEvent) { - player.updateInventory(); - } - } - - // ------------------------------------------------------------------------- - // Fireball - // ------------------------------------------------------------------------- - - @Override - public boolean handleFireballMatch(Player player, double duration, String langKey) { - if (PlayerCooldown.isActive(player, CooldownObject.FIREBALL_FIGHT_FIREBALL)) { - Common.sendMMMessage(player, StringUtil.replaceSecondString( - LanguageManager.getString(langKey), - PlayerCooldown.getLeftInDouble(player, CooldownObject.FIREBALL_FIGHT_FIREBALL))); - return false; - } else { - FireballRunnable fireballRunnable = new FireballRunnable(player, duration); - fireballRunnable.begin(); - return true; - } - } -} - - - diff --git a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/PlayerHiderUtil.java b/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/PlayerHiderUtil.java deleted file mode 100644 index fba12d1c..00000000 --- a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/PlayerHiderUtil.java +++ /dev/null @@ -1,32 +0,0 @@ -package dev.nandi0813.practice_1_8_8.interfaces; - -import dev.nandi0813.practice.module.interfaces.PlayerHiderInterface; -import net.minecraft.server.v1_8_R3.EntityPlayer; -import net.minecraft.server.v1_8_R3.PacketPlayOutPlayerInfo; -import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer; -import org.bukkit.entity.Player; - -public class PlayerHiderUtil implements PlayerHiderInterface { - - @Override - public void hidePlayer(Player observer, Player target, boolean fullHide) { - if (observer.canSee(target)) - observer.hidePlayer(target); - - EntityPlayer entityTarget = ((CraftPlayer) target).getHandle(); - - PacketPlayOutPlayerInfo packet; - if (!fullHide) { - packet = new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.ADD_PLAYER, entityTarget); - } else { - packet = new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.REMOVE_PLAYER, entityTarget); - } - ((CraftPlayer) observer).getHandle().playerConnection.sendPacket(packet); - } - - @Override - public void showPlayer(Player observer, Player target) { - observer.showPlayer(target); - } - -} diff --git a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/PlayerUtil.java b/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/PlayerUtil.java deleted file mode 100644 index 3de32c2c..00000000 --- a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/PlayerUtil.java +++ /dev/null @@ -1,233 +0,0 @@ -package dev.nandi0813.practice_1_8_8.interfaces; - -import dev.nandi0813.practice.ZonePractice; -import dev.nandi0813.practice.util.StringUtil; -import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.entity.Entity; -import org.bukkit.entity.Fireball; -import org.bukkit.entity.Player; -import org.bukkit.entity.TNTPrimed; -import org.bukkit.inventory.ItemStack; -import org.bukkit.util.Vector; - -import java.util.ArrayList; -import java.util.List; - -public class PlayerUtil implements dev.nandi0813.practice.module.interfaces.PlayerUtil { - - @Override - public ItemStack getPlayerMainHand(Player player) { - return player.getItemInHand(); - } - - @Override - public boolean isItemInUse(Player player, Material material) { - ItemStack itemInHand = player.getInventory().getItemInHand(); - return itemInHand != null && itemInHand.getType().equals(material); - } - - @Override - public ItemStack getItemInUse(Player player, Material material) { - ItemStack itemInHand = player.getInventory().getItemInHand(); - if (itemInHand != null && itemInHand.getType().equals(material)) { - return itemInHand; - } else { - return null; - } - } - - @Override - public void setItemInUseIf(Player player, Material material, ItemStack itemStack) { - ItemStack itemInHand = player.getInventory().getItemInHand(); - if (itemInHand != null && itemInHand.getType().equals(material)) { - player.setItemInHand(itemStack); - } - } - - @Override - public List dropPlayerInventory(Player player) { - List entities = new ArrayList<>(); - - for (ItemStack item : player.getInventory().getContents()) { - if (item == null) continue; - if (item.getType().equals(Material.AIR)) continue; - - entities.add(player.getWorld().dropItemNaturally(player.getLocation(), item)); - } - for (ItemStack item : player.getInventory().getArmorContents()) { - if (item == null) continue; - if (item.getType().equals(Material.AIR)) continue; - - entities.add(player.getWorld().dropItemNaturally(player.getLocation(), item)); - } - // Drop items from the 2x2 crafting grid (indices 1-4 of the open inventory) - for (int i = 1; i <= 4; i++) { - ItemStack item = player.getOpenInventory().getItem(i); - if (item == null || item.getType().equals(Material.AIR)) continue; - entities.add(player.getWorld().dropItemNaturally(player.getLocation(), item)); - } - // Drop cursor item if any - ItemStack cursor = player.getItemOnCursor(); - if (cursor != null && !cursor.getType().equals(Material.AIR)) - entities.add(player.getWorld().dropItemNaturally(player.getLocation(), cursor)); - - this.clearInventory(player); - - return entities; - } - - @Override - public void clearInventory(Player player) { - player.getInventory().clear(); - player.getInventory().setArmorContents(null); - // Clear the 2x2 crafting grid slots (indices 1-4 of the player's open inventory) - for (int i = 1; i <= 4; i++) - player.getOpenInventory().setItem(i, null); - // Clear any item held on the cursor - player.setItemOnCursor(null); - player.updateInventory(); - } - - @Override - public void setCollidesWithEntities(Player player, boolean bool) { - player.spigot().setCollidesWithEntities(bool); - } - - @Override - public int getPing(Player player) { - return player.spigot().getPing(); - } - - @Override - public ItemStack[] getInventoryStorageContent(Player player) { - return player.getInventory().getContents(); - } - - @Override - public double getPlayerHealth(Player player) { - return player.getHealth(); - } - - @Override - public void setActiveInventoryTitle(Player player, String title) { - } - - @Override - public void setPlayerListName(Player player, Component component) { - player.setPlayerListName(StringUtil.CC(LegacyComponentSerializer.legacyAmpersand().serialize(component))); - } - - @Override - public Fireball shootFireball(Player player, double speed) { - Vector direction = player.getEyeLocation().getDirection(); - - final Fireball fireball = player.launchProjectile(Fireball.class); - fireball.setVelocity(direction.multiply(speed)); - return fireball; - } - - @Override - public void applyFireballKnockback(final Player player, final Fireball fireball) { - final Location playerLoc = player.getLocation(); - final Location fireballLoc = fireball.getLocation(); - final float yield = fireball.getYield() > 0 ? fireball.getYield() : 1.0f; - - Bukkit.getScheduler().runTaskLater(ZonePractice.getInstance(), () -> { - double dx = playerLoc.getX() - fireballLoc.getX(); - double dz = playerLoc.getZ() - fireballLoc.getZ(); - double horizontalDistance = Math.sqrt(dx * dx + dz * dz); - - // Use only horizontal distance for factor calculation so that jumping - // (which only increases vertical separation) does not reduce the knockback strength. - double effectiveDistance = horizontalDistance; - - double safeDistance = 0.6; - double factor = 1.0; - - if (effectiveDistance > safeDistance) { - double decayRange = yield * 2.0; - factor = 1.0 - ((effectiveDistance - safeDistance) / decayRange); - } - - if (factor < 0) factor = 0; - if (factor > 1) factor = 1; - - // Compute horizontal direction separately so the vertical component - // of the direction vector doesn't steal from horizontal velocity. - double horizontalLen = Math.sqrt(dx * dx + dz * dz); - double horizDirX; - double horizDirZ; - - if (horizontalLen < 0.001) { - // Fireball is almost directly below – pick the player's facing direction - Vector facing = playerLoc.getDirection(); - double facingLen = Math.sqrt(facing.getX() * facing.getX() + facing.getZ() * facing.getZ()); - if (facingLen < 0.001) { - horizDirX = 0; - horizDirZ = 0; - } else { - horizDirX = facing.getX() / facingLen; - horizDirZ = facing.getZ() / facingLen; - } - } else { - horizDirX = dx / horizontalLen; - horizDirZ = dz / horizontalLen; - } - - // Apply a slight reduction when airborne so it's weaker than grounded, but not drastically - double airMultiplier = player.isOnGround() ? 1.0 : 0.8; - - Vector velocity = new Vector( - horizDirX * FB_VELOCITY_HORIZONTAL_MULTIPLICATIVE * factor * airMultiplier, - FB_VELOCITY_VERTICAL_MULTIPLICATIVE * factor, - horizDirZ * FB_VELOCITY_HORIZONTAL_MULTIPLICATIVE * factor * airMultiplier - ); - - player.setVelocity(velocity); - }, 1L); - } - - @Override - public void applyTntKnockback(Player player, TNTPrimed tnt) { - final Location playerLoc = player.getLocation(); - final Location tntLoc = tnt.getLocation(); - - final float yield = 4.0f; - - Bukkit.getScheduler().runTaskLater(ZonePractice.getInstance(), () -> { - double distance = playerLoc.distance(tntLoc); - - double impactRadius = yield * 1.3; - double factor = 1.0 - (distance / impactRadius); - - if (factor <= 0.1) return; - if (factor > 1) factor = 1; - - Vector direction = playerLoc.toVector().subtract(tntLoc.toVector()); - if (direction.lengthSquared() == 0) { - direction = new Vector(0, 0.1, 0); - } else { - direction.normalize(); - } - - Vector velocity = new Vector( - direction.getX() * TNT_VELOCITY_HORIZONTAL_MULTIPLICATIVE * factor, - TNT_VELOCITY_VERTICAL_MULTIPLICATIVE * factor, - direction.getZ() * TNT_VELOCITY_HORIZONTAL_MULTIPLICATIVE * factor - ); - - player.setVelocity(velocity); - }, 1L); - } - - @Override - public void setAttackSpeed(Player player, int hitDelay) { - // No-op for 1.8.8 - attack speed attribute doesn't exist - // Hit delay is handled by setMaximumNoDamageTicks in the core - } - -} diff --git a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/StatisticListener.java b/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/StatisticListener.java deleted file mode 100644 index 4609a458..00000000 --- a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/StatisticListener.java +++ /dev/null @@ -1,156 +0,0 @@ -package dev.nandi0813.practice_1_8_8.interfaces; - -import dev.nandi0813.practice.ZonePractice; -import dev.nandi0813.practice.manager.fight.ffa.FFAManager; -import dev.nandi0813.practice.manager.fight.ffa.game.FFA; -import dev.nandi0813.practice.manager.fight.match.Match; -import dev.nandi0813.practice.manager.fight.match.MatchManager; -import dev.nandi0813.practice.manager.fight.match.enums.RoundStatus; -import dev.nandi0813.practice.manager.fight.util.Stats.Statistic; -import dev.nandi0813.practice.manager.profile.Profile; -import dev.nandi0813.practice.manager.profile.ProfileManager; -import dev.nandi0813.practice.manager.profile.enums.ProfileStatus; -import dev.nandi0813.practice.module.util.ClassImport; -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.entity.Player; -import org.bukkit.entity.ThrownPotion; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.block.Action; -import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.bukkit.event.entity.PotionSplashEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.scheduler.BukkitRunnable; - -public class StatisticListener extends dev.nandi0813.practice.module.interfaces.StatisticListener implements Listener { - - @Override - public void onClick(PlayerInteractEvent e) { - Player player = e.getPlayer(); - Profile profile = ProfileManager.getInstance().getProfile(player); - - if (ClassImport.getClasses().getPlayerUtil().getPlayerMainHand(player) != null && player.getItemInHand().getType() == Material.FISHING_ROD) - return; - - Statistic statistic = null; - switch (profile.getStatus()) { - case MATCH: - Match match = MatchManager.getInstance().getLiveMatchByPlayer(player); - if (match != null && match.getCurrentRound().getRoundStatus().equals(RoundStatus.LIVE)) { - statistic = match.getCurrentStat(player); - } - break; - case FFA: - FFA ffa = FFAManager.getInstance().getFFAByPlayer(player); - if (ffa != null) { - statistic = ffa.getStatistics().get(player); - } - break; - } - - if (!e.getAction().equals(Action.LEFT_CLICK_AIR) && !e.getAction().equals(Action.LEFT_CLICK_BLOCK)) { - return; - } - - if (statistic == null || statistic.isSet()) { - return; - } - - CURRENT_CPS.putIfAbsent(player, 1); - CURRENT_CPS.computeIfPresent(player, (key, val) -> val + 1); - - BukkitRunnable task = cpsRunnable(statistic, player); - task.runTaskLaterAsynchronously(ZonePractice.getInstance(), 20L); - } - - @EventHandler ( priority = EventPriority.LOWEST ) - public void onPlayerHit(EntityDamageByEntityEvent e) { - if (e.isCancelled()) return; - - if (!(e.getDamager() instanceof Player)) return; - Player attacker = (Player) e.getDamager(); - Profile attackerProfile = ProfileManager.getInstance().getProfile(attacker); - - if (!(e.getEntity() instanceof Player)) return; - Player defender = (Player) e.getEntity(); - Profile defenderProfile = ProfileManager.getInstance().getProfile(defender); - - Bukkit.getScheduler().runTaskAsynchronously(practice, () -> - { - Statistic attackerStats = null; - Statistic defenderStats = null; - switch (attackerProfile.getStatus()) { - case MATCH: - if (!defenderProfile.getStatus().equals(ProfileStatus.MATCH)) - return; - - Match match = MatchManager.getInstance().getLiveMatchByPlayer(attacker); - if (match == null) - return; - if (!match.getCurrentRound().getRoundStatus().equals(RoundStatus.LIVE)) - return; - - attackerStats = match.getCurrentStat(attacker); - defenderStats = match.getCurrentStat(defender); - break; - case FFA: - FFA ffa = FFAManager.getInstance().getFFAByPlayer(attacker); - if (ffa == null) - return; - - attackerStats = ffa.getStatistics().get(attacker); - defenderStats = ffa.getStatistics().get(defender); - break; - } - - if (attackerStats == null) return; - if (attackerStats.isSet()) return; - - BukkitRunnable task = hitRunnable(attacker, attackerStats, defender, defenderStats); - task.runTaskAsynchronously(ZonePractice.getInstance()); - }); - } - - @EventHandler ( priority = EventPriority.LOWEST ) - public void onPotionSplash(PotionSplashEvent e) { - ThrownPotion potion = e.getPotion(); - if (!(potion.getShooter() instanceof Player)) return; - Player player = (Player) potion.getShooter(); - - Profile profile = ProfileManager.getInstance().getProfile(player); - - Statistic statistic = null; - switch (profile.getStatus()) { - case MATCH: - Match match = MatchManager.getInstance().getLiveMatchByPlayer(player); - if (match == null) - return; - - statistic = match.getCurrentStat(player); - break; - case FFA: - FFA ffa = FFAManager.getInstance().getFFAByPlayer(player); - if (ffa == null) - return; - - statistic = ffa.getStatistics().get(player); - break; - } - - if (statistic == null || statistic.isSet()) { - return; - } - - // Check if the potion is a health potion - if (potion.getItem().getDurability() == 16421) { - statistic.setPotionThrown(statistic.getPotionThrown() + 1); - - if (!e.getAffectedEntities().contains(player)) { - statistic.setPotionMissed(statistic.getPotionMissed() + 1); - } - } - } - -} \ No newline at end of file diff --git a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/WorldCreate.java b/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/WorldCreate.java deleted file mode 100644 index e7636fdc..00000000 --- a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/interfaces/WorldCreate.java +++ /dev/null @@ -1,17 +0,0 @@ -package dev.nandi0813.practice_1_8_8.interfaces; - -import org.bukkit.World; -import org.bukkit.WorldCreator; -import org.bukkit.WorldType; - -public class WorldCreate implements dev.nandi0813.practice.module.interfaces.WorldCreate { - - @Override - public World createEmptyWorld(String worldName) { - WorldCreator wc = new WorldCreator(worldName); - wc.type(WorldType.FLAT); - wc.generatorSettings("2;0;1;"); - return wc.createWorld(); - } - -} diff --git a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/listener/ArenaListener.java b/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/listener/ArenaListener.java deleted file mode 100644 index c060f9db..00000000 --- a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/listener/ArenaListener.java +++ /dev/null @@ -1,21 +0,0 @@ -package dev.nandi0813.practice_1_8_8.listener; - -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.world.ChunkUnloadEvent; - -import static dev.nandi0813.practice.manager.arena.ArenaManager.LOADED_CHUNKS; -import static dev.nandi0813.practice.manager.arena.ArenaManager.LOAD_CHUNKS; - -public class ArenaListener implements Listener { - - @EventHandler - public void onChunkUnload(ChunkUnloadEvent e) { - if (LOAD_CHUNKS) { - if (LOADED_CHUNKS.contains(e.getChunk())) { - e.setCancelled(true); - } - } - } - -} diff --git a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/listener/FFAListener.java b/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/listener/FFAListener.java deleted file mode 100644 index ea39ea65..00000000 --- a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/listener/FFAListener.java +++ /dev/null @@ -1,84 +0,0 @@ -package dev.nandi0813.practice_1_8_8.listener; - -import dev.nandi0813.practice.manager.fight.ffa.FFAManager; -import dev.nandi0813.practice.manager.fight.ffa.game.FFA; -import dev.nandi0813.practice.manager.fight.util.DeathCause; -import dev.nandi0813.practice.manager.fight.util.FightUtil; -import dev.nandi0813.practice.manager.fight.util.Stats.Statistic; -import dev.nandi0813.practice.manager.profile.Profile; -import dev.nandi0813.practice.manager.profile.ProfileManager; -import org.bukkit.entity.Arrow; -import org.bukkit.entity.Player; -import org.bukkit.entity.Projectile; -import org.bukkit.event.EventHandler; -import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.bukkit.event.entity.EntityDamageEvent; - -public class FFAListener extends dev.nandi0813.practice.manager.fight.ffa.FFAListener { - - @EventHandler - public void onPlayerDamage(EntityDamageEvent e) { - if (!(e.getEntity() instanceof Player)) return; - Player player = (Player) e.getEntity(); - - Profile profile = ProfileManager.getInstance().getProfile(player); - if (profile == null) return; - - FFA ffa = FFAManager.getInstance().getFFAByPlayer(player); - if (ffa == null) return; - - // Void deaths are already handled by onPlayerMove in the core FFAListener. - // Skip here to avoid sending the death message twice. - if (e.getCause() == EntityDamageEvent.DamageCause.VOID) { - e.setDamage(0); - return; - } - - if (e instanceof EntityDamageByEntityEvent) { - onEntityDamageByEntity((EntityDamageByEntityEvent) e); - } - - if (player.getHealth() - e.getFinalDamage() <= 0) { - e.setDamage(0); - - if (e instanceof EntityDamageByEntityEvent) { - Player killer = FightUtil.getKiller(((EntityDamageByEntityEvent) e).getDamager()); - - ffa.killPlayer(player, killer, DeathCause.convert(e.getCause()).getMessage().replace("%killer%", killer != null ? killer.getName() : "Unknown")); - - if (killer != null) { - Statistic statistic = ffa.getStatistics().get(killer); - statistic.setKills(statistic.getKills() + 1); - } - } else - ffa.killPlayer(player, null, DeathCause.convert(e.getCause()).getMessage()); - } - } - - private static void onEntityDamageByEntity(EntityDamageByEntityEvent e) { - if (!(e.getEntity() instanceof Player)) return; - Player target = (Player) e.getEntity(); - - FFA ffa = FFAManager.getInstance().getFFAByPlayer(target); - - Player attacker = null; - if (e.getDamager() instanceof Player) { - attacker = (Player) e.getDamager(); - } else if (e.getDamager() instanceof Projectile) { - Projectile projectile = (Projectile) e.getDamager(); - if (projectile.getShooter() instanceof Player) { - attacker = (Player) projectile.getShooter(); - - if (projectile instanceof Arrow) { - arrowDisplayHearth(attacker, target, e.getFinalDamage()); - } - } - } - - // Record the attacker for void-kill attribution - if (attacker != null && ffa != null) { - ffa.recordAttack(target, attacker); - } - } - -} diff --git a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/listener/MatchListener.java b/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/listener/MatchListener.java deleted file mode 100644 index 14c4b8b5..00000000 --- a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/listener/MatchListener.java +++ /dev/null @@ -1,135 +0,0 @@ -package dev.nandi0813.practice_1_8_8.listener; - -import dev.nandi0813.practice.manager.fight.match.Match; -import dev.nandi0813.practice.manager.fight.match.MatchManager; -import dev.nandi0813.practice.manager.fight.match.enums.RoundStatus; -import dev.nandi0813.practice.manager.fight.match.listener.LadderTypeListener; -import dev.nandi0813.practice.manager.fight.match.util.KnockbackUtil; -import dev.nandi0813.practice.manager.fight.match.util.TeamUtil; -import dev.nandi0813.practice.manager.fight.util.DeathCause; -import dev.nandi0813.practice.manager.fight.util.FightUtil; -import dev.nandi0813.practice.manager.fight.util.ListenerUtil; -import dev.nandi0813.practice.manager.fight.util.Stats.Statistic; -import dev.nandi0813.practice.manager.ladder.abstraction.interfaces.LadderHandle; -import dev.nandi0813.practice.manager.ladder.enums.KnockbackType; -import dev.nandi0813.practice.manager.profile.Profile; -import dev.nandi0813.practice.manager.profile.ProfileManager; -import dev.nandi0813.practice.manager.profile.enums.ProfileStatus; -import org.bukkit.entity.Arrow; -import org.bukkit.entity.Player; -import org.bukkit.entity.Projectile; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.bukkit.event.entity.EntityDamageEvent; - -public class MatchListener extends LadderTypeListener implements Listener { - - @EventHandler - public void onPlayerDamage(EntityDamageEvent e) { - if (!(e.getEntity() instanceof Player)) return; - Player player = (Player) e.getEntity(); - - Profile profile = ProfileManager.getInstance().getProfile(player); - if (profile == null) return; - - Match match = MatchManager.getInstance().getLiveMatchByPlayer(player); - if (match == null) return; - - if (ListenerUtil.cancelEvent(match, player)) { - e.setDamage(0); - e.setCancelled(true); - return; - } - - if (e instanceof EntityDamageByEntityEvent) { - onEntityDamageByEntity((EntityDamageByEntityEvent) e); - } - - if (match.getLadder() instanceof LadderHandle) { - ((LadderHandle) match.getLadder()).handleEvents(e, match); - } - - if (e.isCancelled()) { - return; - } - - if (player.getHealth() - e.getFinalDamage() <= 0) { - e.setDamage(0); - - DeathCause cause = DeathCause.convert(e.getCause()); - - if (e instanceof EntityDamageByEntityEvent) { - Player killer = FightUtil.getKiller(((EntityDamageByEntityEvent) e).getDamager()); - - match.killPlayer(player, killer, cause.getMessage().replace("%killer%", killer != null ? killer.getName() : "Unknown")); - - if (killer != null) { - Statistic statistic = match.getCurrentStat(killer); - statistic.setKills(statistic.getKills() + 1); - } - } else { - match.killPlayer(player, null, cause.getMessage()); - } - } - } - - private static void onEntityDamageByEntity(EntityDamageByEntityEvent e) { - if (!(e.getEntity() instanceof Player)) return; - Player target = (Player) e.getEntity(); - - Player attacker = null; - if (e.getDamager() instanceof Player) { - attacker = (Player) e.getDamager(); - } else if (e.getDamager() instanceof Projectile) { - Projectile projectile = (Projectile) e.getDamager(); - - if (projectile.getShooter() instanceof Player) { - attacker = (Player) projectile.getShooter(); - - if (projectile instanceof Arrow) { - arrowDisplayHearth(attacker, target, e.getFinalDamage()); - } - } - } - - if (attacker == null) return; - - Profile attackerProfile = ProfileManager.getInstance().getProfile(attacker); - Profile targetProfile = ProfileManager.getInstance().getProfile(target); - - if (attackerProfile == null) return; - if (targetProfile == null) return; - if (!attackerProfile.getStatus().equals(ProfileStatus.MATCH)) return; - if (!targetProfile.getStatus().equals(ProfileStatus.MATCH)) return; - - Match match = MatchManager.getInstance().getLiveMatchByPlayer(attacker); - if (!match.equals(MatchManager.getInstance().getLiveMatchByPlayer(target))) return; - - if (!match.getCurrentRound().getRoundStatus().equals(RoundStatus.LIVE)) return; - - boolean cancel = match.getCurrentStat(attacker).isSet() || match.getCurrentStat(target).isSet(); - - if (!cancel) { - cancel = TeamUtil.isSaveTeamMate(match, attacker, target); - } - - if (cancel) { - e.setCancelled(true); - return; - } else { - if (match.getLadder() instanceof LadderHandle) { - ((LadderHandle) match.getLadder()).handleEvents(e, match); - } - } - - // Always record the attacker for void-kill attribution, - // regardless of whether the event was cancelled by a ladder handler. - match.recordAttack(target, attacker); - - if (!e.isCancelled() && !match.getLadder().getLadderKnockback().getKnockbackType().equals(KnockbackType.DEFAULT)) { - KnockbackUtil.setPlayerKnockback(target, match.getLadder().getLadderKnockback().getKnockbackType()); - } - } - -} \ No newline at end of file diff --git a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/listener/PlayerChatListener.java b/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/listener/PlayerChatListener.java deleted file mode 100644 index dee256a8..00000000 --- a/spigot_1_8_8/src/main/java/dev/nandi0813/practice_1_8_8/listener/PlayerChatListener.java +++ /dev/null @@ -1,80 +0,0 @@ -package dev.nandi0813.practice_1_8_8.listener; - -import dev.nandi0813.practice.manager.backend.ConfigManager; -import dev.nandi0813.practice.manager.backend.LanguageManager; -import dev.nandi0813.practice.manager.party.Party; -import dev.nandi0813.practice.manager.party.PartyManager; -import dev.nandi0813.practice.manager.profile.Profile; -import dev.nandi0813.practice.manager.profile.ProfileManager; -import dev.nandi0813.practice.util.ChatFormatUtil; -import dev.nandi0813.practice.util.Common; -import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.player.AsyncPlayerChatEvent; - -public class PlayerChatListener implements Listener { - - @EventHandler(priority = EventPriority.NORMAL) - public void onPlayerChat(AsyncPlayerChatEvent e) { - Player player = e.getPlayer(); - Profile profile = ProfileManager.getInstance().getProfile(player); - Party party = PartyManager.getInstance().getParty(player); - String message = e.getMessage(); - - // --- Party chat --- - if (ConfigManager.getBoolean("CHAT.PARTY-CHAT-ENABLED") && profile.isParty() && party != null && message.startsWith("@")) { - if (party.isPartyChat() || party.getLeader() == player) { - e.getRecipients().clear(); - e.getRecipients().addAll(party.getMembers()); - applyLegacyFormat(e, ChatFormatUtil.buildPartyChatMessage(player, message)); - } else { - e.setCancelled(true); - final String cantUse = LanguageManager.getString("PARTY.CANT-USE-PARTY-CHAT"); - Bukkit.getScheduler().runTask(dev.nandi0813.practice.ZonePractice.getInstance(), - () -> Common.sendMMMessage(player, cantUse)); - } - return; - } - - // --- Staff chat (toggle) --- - if (profile.isStaffChat()) { - applyStaffChat(e, player, message); - return; - } - - // --- Staff chat (shortcut: #message) --- - if (player.hasPermission("zpp.staff") && ConfigManager.getBoolean("CHAT.STAFF-CHAT.SHORTCUT") && message.startsWith("#")) { - applyStaffChat(e, player, message.replaceFirst("#", "")); - return; - } - - // --- Custom server chat --- - if (ConfigManager.getBoolean("CHAT.SERVER-CHAT-ENABLED")) { - applyLegacyFormat(e, ChatFormatUtil.buildServerChatMessage(profile, player, message)); - } - } - - /** - * Restricts recipients to staff and applies the staff chat format. - */ - private void applyStaffChat(AsyncPlayerChatEvent e, Player player, String rawMessage) { - e.getRecipients().clear(); - e.getRecipients().addAll(ChatFormatUtil.getStaffRecipients()); - applyLegacyFormat(e, ChatFormatUtil.buildStaffChatMessage(player, rawMessage)); - } - - /** - * Serialises a MiniMessage string to a legacy §-coloured string and injects - * it into the event via setFormat / setMessage so Bukkit delivers it natively. - */ - private void applyLegacyFormat(AsyncPlayerChatEvent e, String miniMessageString) { - String legacy = LegacyComponentSerializer.legacySection() - .serialize(Common.deserializeMiniMessage(miniMessageString)); - e.setFormat("%2$s"); - e.setMessage(legacy); - } -} diff --git a/spigot_modern/pom.xml b/spigot_modern/pom.xml deleted file mode 100644 index 6b4f54e7..00000000 --- a/spigot_modern/pom.xml +++ /dev/null @@ -1,85 +0,0 @@ - - - 4.0.0 - - - dev.nandi0813 - practice-parent - 6.4.6-SNAPSHOT - - - practice-spigot_modern - - - - - enginehub - https://maven.enginehub.org/repo/ - - - - - - - - com.intellectualsites.bom - bom-newest - 1.55 - import - pom - - - - - - - io.papermc.paper - paper-api - 1.21.11-R0.1-SNAPSHOT - provided - - - - dev.nandi0813 - practice-core - ${project.parent.version} - provided - - - - - com.fastasyncworldedit - FastAsyncWorldEdit-Core - provided - - - - com.fastasyncworldedit - FastAsyncWorldEdit-Bukkit - provided - - - FastAsyncWorldEdit-Core - * - - - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.8.1 - - 21 - 21 - - - - - - diff --git a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/Classes.java b/spigot_modern/src/main/java/dev/nandi0813/practice_modern/Classes.java deleted file mode 100644 index e15263bd..00000000 --- a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/Classes.java +++ /dev/null @@ -1,52 +0,0 @@ -package dev.nandi0813.practice_modern; - -import dev.nandi0813.practice.ZonePractice; -import dev.nandi0813.practice.module.interfaces.*; -import dev.nandi0813.practice_modern.interfaces.BuildListener; -import dev.nandi0813.practice_modern.interfaces.ModernItemCooldownHandler; -import dev.nandi0813.practice_modern.interfaces.PlayerHiderUtil; -import dev.nandi0813.practice_modern.listener.*; -import dev.nandi0813.practice_modern.modern_version.ItemOffHand; -import lombok.Getter; -import org.bukkit.Bukkit; - -@Getter -public class Classes implements dev.nandi0813.practice.module.util.Classes { - - public WorldCreate worldCreate = new dev.nandi0813.practice_modern.interfaces.WorldCreate(); - public PlayerHiderInterface playerHiderUtil = new PlayerHiderUtil(); - public ItemMaterialUtil itemMaterialUtil = new dev.nandi0813.practice_modern.interfaces.ItemMaterialUtil(); - public LadderUtil ladderUtil = new dev.nandi0813.practice_modern.interfaces.LadderUtil(); - public ItemCreateUtil itemCreateUtil = new dev.nandi0813.practice_modern.interfaces.ItemCreateUtil(); - public PlayerUtil playerUtil = new dev.nandi0813.practice_modern.interfaces.PlayerUtil(); - public ArenaUtil arenaUtil = new dev.nandi0813.practice_modern.interfaces.ArenaUtil(); - public ArenaCopyUtil arenaCopyUtil = new dev.nandi0813.practice_modern.interfaces.ArenaCopy.ArenaCopyUtil(); - - public BedUtil bedUtil = new dev.nandi0813.practice_modern.interfaces.BedUtil(); - public EntityHider entityHider = new dev.nandi0813.practice_modern.interfaces.EntityHider(ZonePractice.getInstance(), EntityHider.Policy.BLACKLIST); - public StatisticListener statisticListener = new dev.nandi0813.practice_modern.interfaces.StatisticListener(); - public ConfigItemProvider configItemProvider = new dev.nandi0813.practice_modern.interfaces.ModernConfigItemProvider(); - public AbstractBuildListener buildListener = new BuildListener(); - - public Class changedBlockClass = dev.nandi0813.practice_modern.interfaces.ChangedBlock.class; - public Class kitDataClass = dev.nandi0813.practice_modern.interfaces.KitData.class; - public Class actionBarClass = dev.nandi0813.practice_modern.interfaces.ActionBar.class; - - public ItemCooldownHandler itemCooldownHandler = new ModernItemCooldownHandler(); - - public Classes() { - Bukkit.getServer().getPluginManager().registerEvents(arenaCopyUtil, ZonePractice.getInstance()); - Bukkit.getServer().getPluginManager().registerEvents(statisticListener, ZonePractice.getInstance()); - Bukkit.getServer().getPluginManager().registerEvents(new MatchListener(), ZonePractice.getInstance()); - Bukkit.getServer().getPluginManager().registerEvents(new FFAListener(), ZonePractice.getInstance()); - - // Only 1.20 stuff - Bukkit.getServer().getPluginManager().registerEvents(new ItemOffHand(), ZonePractice.getInstance()); - Bukkit.getServer().getPluginManager().registerEvents(new ArenaListener(), ZonePractice.getInstance()); - - Bukkit.getServer().getPluginManager().registerEvents(new EPCountdownListener(), ZonePractice.getInstance()); - Bukkit.getServer().getPluginManager().registerEvents(new FireworkRocketCooldownListener(), ZonePractice.getInstance()); - Bukkit.getServer().getPluginManager().registerEvents(new PlayerChatListener(), ZonePractice.getInstance()); - } - -} diff --git a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/ActionBar.java b/spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/ActionBar.java deleted file mode 100644 index 803c2238..00000000 --- a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/ActionBar.java +++ /dev/null @@ -1,29 +0,0 @@ -package dev.nandi0813.practice_modern.interfaces; - -import dev.nandi0813.practice.manager.profile.Profile; -import net.kyori.adventure.text.Component; -import org.bukkit.entity.Player; - -public class ActionBar extends dev.nandi0813.practice.module.interfaces.actionbar.ActionBar { - - public ActionBar(Profile profile) { - super(profile); - } - - @Override - public void send() { - Player player = profile.getPlayer().getPlayer(); - if (player != null) { - player.sendActionBar(this.message); - } - } - - @Override - public void clear() { - Player player = profile.getPlayer().getPlayer(); - if (player != null) { - player.sendActionBar(Component.empty()); - } - } - -} diff --git a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/ArenaCopy/ArenaCopyUtil.java b/spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/ArenaCopy/ArenaCopyUtil.java deleted file mode 100644 index ed603536..00000000 --- a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/ArenaCopy/ArenaCopyUtil.java +++ /dev/null @@ -1,59 +0,0 @@ -package dev.nandi0813.practice_modern.interfaces.ArenaCopy; - -import dev.nandi0813.practice.manager.arena.arenas.ArenaCopy; -import dev.nandi0813.practice.manager.gui.GUIManager; -import dev.nandi0813.practice.manager.gui.GUIType; -import dev.nandi0813.practice.manager.gui.setup.arena.ArenaGUISetupManager; -import dev.nandi0813.practice.manager.profile.Profile; -import dev.nandi0813.practice.util.Cuboid; -import dev.nandi0813.practice.util.SoftDependUtil; -import org.bukkit.Location; -import org.bukkit.block.Block; -import org.bukkit.block.BlockState; - -public class ArenaCopyUtil extends dev.nandi0813.practice.module.interfaces.ArenaCopyUtil { - - @Override - protected void copyBlock(Block oldBlock, Block newBlock) { - try { - // OPTIMIZATION: Set type without physics for massive speedup - newBlock.setType(oldBlock.getType(), false); - - BlockState oldState = oldBlock.getState(); - BlockState newState = newBlock.getState(); - - // Clone block data - newState.setBlockData(oldState.getBlockData().clone()); - newState.update(true, false); // force=true, applyPhysics=false - - newBlock.setBiome(oldBlock.getBiome()); - } catch (Exception e) { - // Skip problematic blocks (e.g., MaterialData type incompatibilities) - // This allows the copy process to continue without halting - } - } - - @Override - protected void copyArena(Profile profile, ArenaCopy arenaCopy, Cuboid copyFrom, Location reference, Location newLocation) { - if (SoftDependUtil.isFAWE_ENABLED) { - FaweUtil.copyFAWE(copyFrom, reference, newLocation); - - arenaCopy.getMainArena().getCopies().add(arenaCopy); - ArenaGUISetupManager.getInstance().getArenaSetupGUIs().get(arenaCopy.getMainArena()).get(GUIType.Arena_Copy).update(); - ArenaGUISetupManager.getInstance().getArenaSetupGUIs().get(arenaCopy.getMainArena()).get(GUIType.Arena_Main).update(); - GUIManager.getInstance().searchGUI(GUIType.Arena_Summary).update(); - } else { - this.copyNormal(profile, arenaCopy, copyFrom, reference, newLocation); - } - } - - @Override - public void deleteArena(final String arena, final Cuboid cuboid) { - if (SoftDependUtil.isFAWE_ENABLED) { - FaweUtil.deleteFAWE(cuboid); - } else { - deleteNormal(arena, cuboid); - } - } - -} diff --git a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/ArenaUtil.java b/spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/ArenaUtil.java deleted file mode 100644 index f1d629c8..00000000 --- a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/ArenaUtil.java +++ /dev/null @@ -1,113 +0,0 @@ -package dev.nandi0813.practice_modern.interfaces; - -import dev.nandi0813.practice.manager.arena.arenas.interfaces.BasicArena; -import dev.nandi0813.practice.manager.ladder.abstraction.Ladder; -import dev.nandi0813.practice.manager.ladder.abstraction.normal.NormalLadder; -import dev.nandi0813.practice.util.BasicItem; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.entity.ArmorStand; -import org.bukkit.inventory.EquipmentSlot; -import org.bukkit.inventory.ItemStack; - -public class ArenaUtil implements dev.nandi0813.practice.module.interfaces.ArenaUtil { - - @Override - public boolean turnsToDirt(Block block) { - Material type = block.getType(); - return - type.equals(Material.GRASS_BLOCK) || - type.equals(Material.MYCELIUM) || - type.equals(Material.DIRT_PATH) || - type.equals(Material.FARMLAND) || - type.equals(Material.WARPED_NYLIUM); - } - - @Override - public boolean containsDestroyableBlock(Ladder ladder, Block block) { - if (!(ladder instanceof NormalLadder normalLadder)) return false; - - if (!ladder.isBuild()) return false; - if (normalLadder.getDestroyableBlocks().isEmpty()) return false; - if (block == null) return false; - - for (BasicItem basicItem : normalLadder.getDestroyableBlocks()) { - if (block.getType().equals(basicItem.getMaterial())) - return true; - } - return false; - } - - @Override - public boolean requiresSupport(Block block) { - Material type = block.getType(); - return org.bukkit.Tag.FLOWERS.isTagged(type) - || org.bukkit.Tag.SAPLINGS.isTagged(type) - || org.bukkit.Tag.CROPS.isTagged(type) - || org.bukkit.Tag.WALL_POST_OVERRIDE.isTagged(type) // torches, signs on walls, etc. - || type == Material.DEAD_BUSH - || type == Material.SHORT_GRASS - || type == Material.TALL_GRASS - || type == Material.FERN - || type == Material.LARGE_FERN - || type == Material.VINE - || type == Material.SUGAR_CANE - || type == Material.CACTUS - || type == Material.SNOW - || type == Material.TORCH - || type == Material.SOUL_TORCH - || type == Material.REDSTONE_WIRE - || type == Material.REDSTONE_TORCH - || type == Material.LEVER - || type == Material.COMPARATOR - || type == Material.REPEATER - || type == Material.TRIPWIRE_HOOK - || type == Material.TRIPWIRE - || type == Material.LILY_PAD - || type == Material.NETHER_WART; - } - - @Override - public void loadArenaChunks(BasicArena arena) { - if (arena.getCuboid() == null) return; - org.bukkit.World world = arena.getCuboid().getWorld(); - if (world == null) return; - - // Calculate chunk coordinate range directly from the cuboid bounds - // instead of calling getChunks() which synchronously loads all chunks. - int minCX = arena.getCuboid().getLowerX() >> 4; - int maxCX = arena.getCuboid().getUpperX() >> 4; - int minCZ = arena.getCuboid().getLowerZ() >> 4; - int maxCZ = arena.getCuboid().getUpperZ() >> 4; - - org.bukkit.plugin.Plugin plugin = dev.nandi0813.practice.ZonePractice.getInstance(); - for (int cx = minCX; cx <= maxCX; cx++) { - for (int cz = minCZ; cz <= maxCZ; cz++) { - // addPluginChunkTicket loads the chunk asynchronously if needed - // and prevents it from being unloaded — no main-thread stall. - world.addPluginChunkTicket(cx, cz, plugin); - } - } - } - - @Override - public void setArmorStandItemInHand(ArmorStand armorStand, ItemStack item, boolean rightHand) { - if (armorStand == null) return; - - if (rightHand) { - armorStand.setItem(EquipmentSlot.HAND, item); - } else { - armorStand.setItem(EquipmentSlot.OFF_HAND, item); - } - } - - @Override - public void setArmorStandInvulnerable(ArmorStand armorStand) { - if (armorStand == null) return; - armorStand.setInvulnerable(true); - // Make armor stands non-persistent so they don't survive server restarts - // This prevents orphaned armor stands (markers and holograms) from appearing after restart - armorStand.setPersistent(false); - } - -} diff --git a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/BuildListener.java b/spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/BuildListener.java deleted file mode 100644 index d0ebc7a8..00000000 --- a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/BuildListener.java +++ /dev/null @@ -1,86 +0,0 @@ -package dev.nandi0813.practice_modern.interfaces; - -import dev.nandi0813.practice.manager.fight.match.Match; -import dev.nandi0813.practice.module.interfaces.AbstractBuildListener; -import dev.nandi0813.practice.module.util.ClassImport; -import dev.nandi0813.practice.util.interfaces.Spectatable; -import org.bukkit.Location; -import org.bukkit.entity.TNTPrimed; -import org.bukkit.event.EventHandler; -import org.bukkit.event.block.BlockExplodeEvent; -import org.bukkit.event.block.TNTPrimeEvent; - -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; - -public class BuildListener extends AbstractBuildListener { - - // ========================================================================= - // MODERN-ONLY: BlockExplodeEvent - // ========================================================================= - - @EventHandler - public void onBlockExplode(BlockExplodeEvent e) { - Spectatable spectatable = getByBlock(e.getBlock()); - handleExplosion(e, e.blockList(), spectatable); - } - - // ========================================================================= - // MODERN-ONLY: TNTPrimeEvent — fires BEFORE the block changes, giving us - // the accurate original material. Also records the custom fuse tick so - // onEntitySpawnEvent (in the base class) can apply it when the entity spawns. - // ========================================================================= - - private final Map setFuseTick = new HashMap<>(); - - private String locationKey(Location loc) { - return Objects.requireNonNull(loc.getWorld()).getName() - + ":" + loc.getBlockX() + ":" + loc.getBlockY() + ":" + loc.getBlockZ(); - } - - @EventHandler - public void onTntPrimeEvent(TNTPrimeEvent e) { - Spectatable spectatable = getByBlock(e.getBlock()); - if (spectatable == null) return; - - // Track the TNT block NOW — it is still TNT in the world at this point. - if (spectatable.isBuild()) { - spectatable.getFightChange().addArenaBlockChange(ClassImport.createChangeBlock(e.getBlock())); - } - - // Record custom fuse time for match contexts - if (spectatable instanceof Match match) { - if (!e.getCause().equals(TNTPrimeEvent.PrimeCause.EXPLOSION)) { - setFuseTick.put(locationKey(e.getBlock().getLocation()), - match.getLadder().getTntFuseTime() * 20); - } - } - } - - // ========================================================================= - // OVERRIDES - // ========================================================================= - - /** - * On modern Paper we already captured the TNT block via {@code TNTPrimeEvent}, - * so the base-class {@link #onEntitySpawnEvent} must not add a duplicate entry. - */ - @Override - protected boolean isTntBlockAlreadyTracked() { - return true; - } - - /** - * Apply the fuse time stored by {@link #onTntPrimeEvent} instead of the - * simple player-source check used by the 1.8.8 path. - */ - @Override - protected void onApplyFuseTime(TNTPrimed tnt, Match match) { - final String key = locationKey(tnt.getLocation()); - if (setFuseTick.containsKey(key)) { - tnt.setFuseTicks(setFuseTick.remove(key)); - } - } - -} \ No newline at end of file diff --git a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/EntityHider.java b/spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/EntityHider.java deleted file mode 100644 index 365fb619..00000000 --- a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/EntityHider.java +++ /dev/null @@ -1,33 +0,0 @@ -package dev.nandi0813.practice_modern.interfaces; - -import org.bukkit.entity.Entity; -import org.bukkit.entity.Player; -import org.bukkit.event.Listener; -import org.bukkit.plugin.Plugin; - -public class EntityHider extends dev.nandi0813.practice.module.interfaces.EntityHider implements Listener { - - public EntityHider(Plugin plugin, Policy policy) { - super(plugin, policy); - } - - @Override - public void showEntity(Player observer, Entity entity) { - validate(observer, entity); - boolean hiddenBefore = !setVisibility(observer, entity.getEntityId(), true); - - // Resend packets - if (hiddenBefore) - observer.showEntity(plugin, entity); - } - - @Override - public void hideEntity(Player observer, Entity entity) { - validate(observer, entity); - boolean visibleBefore = setVisibility(observer, entity.getEntityId(), false); - - if (visibleBefore) - observer.hideEntity(plugin, entity); - } - -} diff --git a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/ItemMaterialUtil.java b/spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/ItemMaterialUtil.java deleted file mode 100644 index 34f79f71..00000000 --- a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/ItemMaterialUtil.java +++ /dev/null @@ -1,124 +0,0 @@ -package dev.nandi0813.practice_modern.interfaces; - -import org.bukkit.Color; -import org.bukkit.Material; -import org.bukkit.OfflinePlayer; -import org.bukkit.entity.EntityType; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.LeatherArmorMeta; -import org.bukkit.inventory.meta.SkullMeta; - -public class ItemMaterialUtil implements dev.nandi0813.practice.module.interfaces.ItemMaterialUtil { - @Override - public Material getSnowball() { - return Material.SNOWBALL; - } - - @Override - public Material getIronShovel() { - return Material.IRON_SHOVEL; - } - - @Override - public Material getEyeOfEnder() { - return Material.ENDER_EYE; - } - - @Override - public Material getRedBed() { - return Material.RED_BED; - } - - @Override - public Material getMushroomSoup() { - return Material.MUSHROOM_STEW; - } - - @Override - public Material getWater() { - return Material.WATER; - } - - @Override - public Material getLava() { - return Material.LAVA; - } - - @Override - public Material getFireball() { - return Material.FIRE_CHARGE; - } - - @Override - public Material getEndPortal() { - return Material.END_PORTAL; - } - - @Override - public Material getLilyPad() { - return Material.LILY_PAD; - } - - @Override - public Material getStainedClay() { - return Material.WHITE_TERRACOTTA; - } - - @Override - public Material getSplashPotion() { - return Material.SPLASH_POTION; - } - - @Override - public Material getGoldSword() { - return Material.GOLDEN_SWORD; - } - - @Override - public Material getClock() { - return Material.CLOCK; - } - - @Override - public EntityType getTNTMineCart() { - return EntityType.TNT_MINECART; - } - - @Override - public ItemStack getPlayerHead(OfflinePlayer player) { - ItemStack item = new ItemStack(Material.PLAYER_HEAD); - SkullMeta meta = (SkullMeta) item.getItemMeta(); - if (meta != null) - meta.setOwningPlayer(player); - item.setItemMeta(meta); - - return item; - } - - @Override - public ItemStack getSword() { - return new ItemStack(Material.DIAMOND_SWORD); - } - - @Override - public ItemStack getRedBlock() { - return new ItemStack(Material.RED_CONCRETE); - } - - @Override - public ItemStack getDefaultPlayerHead() { - // Return a default Steve head (no specific player) - return new ItemStack(Material.PLAYER_HEAD); - } - - @Override - public ItemStack getRedBoots() { - ItemStack boots = new ItemStack(Material.LEATHER_BOOTS); - LeatherArmorMeta meta = (LeatherArmorMeta) boots.getItemMeta(); - if (meta != null) { - meta.setColor(Color.RED); - boots.setItemMeta(meta); - } - return boots; - } -} diff --git a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/KitData.java b/spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/KitData.java deleted file mode 100644 index 503e77fb..00000000 --- a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/KitData.java +++ /dev/null @@ -1,45 +0,0 @@ -package dev.nandi0813.practice_modern.interfaces; - -import org.bukkit.entity.Player; - -public class KitData extends dev.nandi0813.practice.module.interfaces.KitData { - - public KitData() { - super(); - } - - public KitData(dev.nandi0813.practice.module.interfaces.KitData kitData) { - super(kitData); - } - - @Override - public void setStorage(Player player) { - this.storage = player.getInventory().getStorageContents().clone(); - } - - @Override - public void setArmor(Player player) { - this.armor = player.getInventory().getArmorContents().clone(); - } - - @Override - public void setExtra(Player player) { - this.extra = player.getInventory().getExtraContents().clone(); - } - - @Override - public void loadStorage(Player player) { - player.getInventory().setContents(this.storage.clone()); - } - - @Override - public void loadArmor(Player player) { - player.getInventory().setArmorContents(this.armor.clone()); - } - - @Override - public void loadExtra(Player player) { - player.getInventory().setExtraContents(this.extra.clone()); - } - -} diff --git a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/ModernConfigItemProvider.java b/spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/ModernConfigItemProvider.java deleted file mode 100644 index 67d819f7..00000000 --- a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/ModernConfigItemProvider.java +++ /dev/null @@ -1,91 +0,0 @@ -package dev.nandi0813.practice_modern.interfaces; - -import dev.nandi0813.practice.manager.gui.GUIItem; -import dev.nandi0813.practice.module.interfaces.ConfigItemProvider; -import dev.nandi0813.practice.util.Common; -import org.bukkit.Material; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.enchantments.Enchantment; -import org.bukkit.inventory.ItemFlag; - -import java.util.List; - -public class ModernConfigItemProvider implements ConfigItemProvider { - - @Override - public GUIItem getGuiItem(YamlConfiguration config, String loc) { - GUIItem guiItem = new GUIItem(); - - if (config.isString(loc + ".NAME")) { - guiItem.setName(config.getString(loc + ".NAME")); - } - - if (config.isString(loc + ".MATERIAL")) { - guiItem.setMaterial(Material.valueOf(config.getString(loc + ".MATERIAL"))); - } - - if (config.isInt(loc + ".AMOUNT")) { - int amount = config.getInt(loc + ".AMOUNT"); - if (amount <= 0 || amount > 64) { - amount = 1; - } - guiItem.setAmount(amount); - } - - if (config.isInt(loc + ".DURABILITY")) { - int durability = config.getInt(loc + ".DURABILITY"); - if (durability < 0) { - durability = 1; - } - guiItem.setDurability(durability); - } - - if (config.isList(loc + ".LORE")) { - guiItem.setLore(config.getStringList(loc + ".LORE")); - } - - if (config.isList(loc + ".FLAGS")) { - List flags = config.getStringList(loc + ".FLAGS"); - for (String flag : flags) { - try { - ItemFlag itemFlag = ItemFlag.valueOf(flag); - guiItem.addItemFlag(itemFlag); - } catch (IllegalArgumentException e) { - Common.sendConsoleMMMessage("Invalid ItemFlag: " + flag); - } - } - } - - // Always add flags to hide unbreakable and attributes for clean lobby items - guiItem.addItemFlag(ItemFlag.HIDE_UNBREAKABLE); - guiItem.addItemFlag(ItemFlag.HIDE_ATTRIBUTES); - - // Set unbreakable to prevent durability bars from showing - guiItem.setUnbreakable(true); - - if (config.isList(loc + ".ENCHANTMENTS")) { - for (String s : config.getStringList(loc + ".ENCHANTMENTS")) { - String[] enchantmentSplit = s.split(":"); - if (enchantmentSplit.length != 2) { - continue; - } - - try { - Enchantment enchantment = Enchantment.getByName(enchantmentSplit[0]); - int level = Integer.parseInt(enchantmentSplit[1]); - - if (enchantment.getStartLevel() > level) { - level = enchantment.getStartLevel(); - } - - guiItem.addEnchantment(enchantment, level); - } catch (Exception e) { - Common.sendConsoleMMMessage("Enchantment not found: " + e); - } - } - } - - return guiItem; - } - -} diff --git a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/PlayerHiderUtil.java b/spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/PlayerHiderUtil.java deleted file mode 100644 index 81d11b79..00000000 --- a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/PlayerHiderUtil.java +++ /dev/null @@ -1,32 +0,0 @@ -package dev.nandi0813.practice_modern.interfaces; - -import com.github.retrooper.packetevents.PacketEvents; -import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerPlayerInfoUpdate; -import dev.nandi0813.practice.ZonePractice; -import dev.nandi0813.practice.module.interfaces.PlayerHiderInterface; -import org.bukkit.entity.Player; - -public class PlayerHiderUtil implements PlayerHiderInterface { - - @Override - public void hidePlayer(Player observer, Player target, boolean fullHide) { - if (observer.canSee(target)) - observer.hidePlayer(ZonePractice.getInstance(), target); - - if (!fullHide) { - WrapperPlayServerPlayerInfoUpdate playerInfoUpdate = new WrapperPlayServerPlayerInfoUpdate( - WrapperPlayServerPlayerInfoUpdate.Action.UPDATE_LISTED, - new WrapperPlayServerPlayerInfoUpdate.PlayerInfo(target.getUniqueId()) - ); - - PacketEvents.getAPI().getPlayerManager().sendPacket(observer, playerInfoUpdate); - } - } - - @Override - public void showPlayer(Player observer, Player target) { - observer.showPlayer(ZonePractice.getInstance(), target); - } - -} - diff --git a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/WorldCreate.java b/spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/WorldCreate.java deleted file mode 100644 index 49d04fea..00000000 --- a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/interfaces/WorldCreate.java +++ /dev/null @@ -1,18 +0,0 @@ -package dev.nandi0813.practice_modern.interfaces; - -import org.bukkit.World; -import org.bukkit.WorldCreator; -import org.bukkit.WorldType; - -public class WorldCreate implements dev.nandi0813.practice.module.interfaces.WorldCreate { - - @Override - public World createEmptyWorld(String worldName) { - WorldCreator wc = new WorldCreator(worldName); - wc.type(WorldType.FLAT); - wc.generateStructures(false); - wc.generatorSettings("{\"layers\": [{\"block\": \"air\", \"height\": 1}, {\"block\": \"air\", \"height\": 1}], \"biome\":\"plains\"}"); - return wc.createWorld(); - } - -} diff --git a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/listener/FFAListener.java b/spigot_modern/src/main/java/dev/nandi0813/practice_modern/listener/FFAListener.java deleted file mode 100644 index 9cc4e3e6..00000000 --- a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/listener/FFAListener.java +++ /dev/null @@ -1,88 +0,0 @@ -package dev.nandi0813.practice_modern.listener; - -import dev.nandi0813.practice.manager.fight.ffa.FFAManager; -import dev.nandi0813.practice.manager.fight.ffa.game.FFA; -import dev.nandi0813.practice.manager.fight.util.DeathCause; -import dev.nandi0813.practice.manager.fight.util.FightUtil; -import dev.nandi0813.practice.manager.fight.util.Stats.Statistic; -import dev.nandi0813.practice.manager.profile.Profile; -import dev.nandi0813.practice.manager.profile.ProfileManager; -import org.bukkit.damage.DamageSource; -import org.bukkit.damage.DamageType; -import org.bukkit.entity.Arrow; -import org.bukkit.entity.Entity; -import org.bukkit.entity.Player; -import org.bukkit.entity.Projectile; -import org.bukkit.event.EventHandler; -import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.bukkit.event.entity.PlayerDeathEvent; - -public class FFAListener extends dev.nandi0813.practice.manager.fight.ffa.FFAListener { - - @EventHandler - public void onPlayerDeath(PlayerDeathEvent e) { - Player player = e.getPlayer(); - - Profile profile = ProfileManager.getInstance().getProfile(player); - if (profile == null) return; - - FFA ffa = FFAManager.getInstance().getFFAByPlayer(player); - if (ffa == null) return; - - e.setCancelled(true); - - DamageSource damageSource = e.getDamageSource(); - - // Void deaths are already handled by onPlayerMove in the core FFAListener. - // Skip here to avoid sending the death message twice. - if (damageSource.getDamageType().equals(DamageType.OUT_OF_WORLD)) { - return; - } - - Player killer = null; - if (damageSource.getCausingEntity() instanceof Entity damageEntity) { - killer = FightUtil.getKiller(damageEntity); - } - - DeathCause cause = dev.nandi0813.practice_modern.listener.FightUtil.convert(damageSource.getDamageType()); - ffa.killPlayer(player, killer, cause.getMessage().replace("%killer%", killer != null ? killer.getName() : "Unknown")); - - if (killer != null) { - Statistic statistic = ffa.getStatistics().get(killer); - statistic.setKills(statistic.getKills() + 1); - } - } - - @EventHandler - public void onEntityDamageByEntity(EntityDamageByEntityEvent e) { - if (!(e.getEntity() instanceof Player target)) { - return; - } - - Profile profile = ProfileManager.getInstance().getProfile(target); - if (profile == null) return; - - FFA ffa = FFAManager.getInstance().getFFAByPlayer(target); - if (ffa == null) return; - - // Resolve the attacker (direct hit or projectile shooter) - Player attacker = null; - if (e.getDamager() instanceof Player damager) { - attacker = damager; - } else if (e.getDamager() instanceof Projectile projectile) { - if (projectile.getShooter() instanceof Player shooter) { - attacker = shooter; - - if (projectile instanceof Arrow) { - arrowDisplayHearth(shooter, target, e.getFinalDamage()); - } - } - } - - // Record the attacker for void-kill attribution - if (attacker != null) { - ffa.recordAttack(target, attacker); - } - } - -} diff --git a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/listener/MatchListener.java b/spigot_modern/src/main/java/dev/nandi0813/practice_modern/listener/MatchListener.java deleted file mode 100644 index 5b3c2c45..00000000 --- a/spigot_modern/src/main/java/dev/nandi0813/practice_modern/listener/MatchListener.java +++ /dev/null @@ -1,245 +0,0 @@ -package dev.nandi0813.practice_modern.listener; - -import com.destroystokyo.paper.event.player.PlayerPickupExperienceEvent; -import dev.nandi0813.practice.ZonePractice; -import dev.nandi0813.practice.manager.backend.LanguageManager; -import dev.nandi0813.practice.manager.fight.event.EventManager; -import dev.nandi0813.practice.manager.fight.event.events.duel.brackets.Brackets; -import dev.nandi0813.practice.manager.fight.event.interfaces.Event; -import dev.nandi0813.practice.manager.fight.match.Match; -import dev.nandi0813.practice.manager.fight.match.MatchManager; -import dev.nandi0813.practice.manager.fight.match.enums.RoundStatus; -import dev.nandi0813.practice.manager.fight.match.listener.LadderTypeListener; -import dev.nandi0813.practice.manager.fight.match.util.KnockbackUtil; -import dev.nandi0813.practice.manager.fight.match.util.MatchFightPlayer; -import dev.nandi0813.practice.manager.fight.match.util.TeamUtil; -import dev.nandi0813.practice.manager.fight.util.DeathCause; -import dev.nandi0813.practice.manager.fight.util.FightUtil; -import dev.nandi0813.practice.manager.fight.util.ListenerUtil; -import dev.nandi0813.practice.manager.fight.util.Stats.Statistic; -import dev.nandi0813.practice.manager.ladder.abstraction.interfaces.LadderHandle; -import dev.nandi0813.practice.manager.ladder.enums.KnockbackType; -import dev.nandi0813.practice.manager.profile.Profile; -import dev.nandi0813.practice.manager.profile.ProfileManager; -import dev.nandi0813.practice.manager.profile.enums.ProfileStatus; -import dev.nandi0813.practice.manager.spectator.SpectatorManager; -import dev.nandi0813.practice.util.Common; -import org.bukkit.Bukkit; -import org.bukkit.damage.DamageSource; -import org.bukkit.entity.*; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.*; -import org.bukkit.event.inventory.InventoryAction; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.event.player.PlayerSwapHandItemsEvent; - -public class MatchListener extends LadderTypeListener implements Listener { - - @EventHandler - public void onPlayerDamage(EntityDamageEvent e) { - if (!(e.getEntity() instanceof Player player)) return; - - Profile profile = ProfileManager.getInstance().getProfile(player); - if (profile == null) return; - - Match match = MatchManager.getInstance().getLiveMatchByPlayer(player); - if (match == null) return; - - if (ListenerUtil.cancelEvent(match, player)) { - e.setDamage(0); - e.setCancelled(true); - return; - } - - if (e instanceof EntityDamageByEntityEvent) { - onEntityDamageByEntity((EntityDamageByEntityEvent) e); - } - - if (match.getLadder() instanceof LadderHandle ladderHandle) { - ladderHandle.handleEvents(e, match); - } - } - - @EventHandler - public void onPlayerDeath(PlayerDeathEvent e) { - Player player = e.getEntity(); - - Profile profile = ProfileManager.getInstance().getProfile(player); - if (profile == null) return; - - Match match = MatchManager.getInstance().getLiveMatchByPlayer(player); - if (match == null) return; - - e.setCancelled(true); - - DamageSource damageSource = e.getDamageSource(); - Player killer; - if (damageSource.getCausingEntity() instanceof Entity damageEntity) { - killer = FightUtil.getKiller(damageEntity); - } else { - killer = null; - } - - DeathCause cause = dev.nandi0813.practice_modern.listener.FightUtil.convert(damageSource.getDamageType()); - Bukkit.getScheduler().runTaskLater(ZonePractice.getInstance(), () -> - match.killPlayer(player, killer, cause.getMessage().replace("%killer%", killer != null ? killer.getName() : "Unknown")), 1L); - - if (killer != null) { - Statistic statistic = match.getCurrentStat(killer); - statistic.setKills(statistic.getKills() + 1); - } - } - - private static void onEntityDamageByEntity(EntityDamageByEntityEvent e) { - if (!(e.getEntity() instanceof Player target)) return; - - Player attacker = null; - if (e.getDamager() instanceof Player) { - attacker = (Player) e.getDamager(); - } else if (e.getDamager() instanceof Projectile projectile) { - if (projectile.getShooter() instanceof Player) { - attacker = (Player) projectile.getShooter(); - - if (projectile instanceof Arrow) { - arrowDisplayHearth(attacker, target, e.getFinalDamage()); - } - } - } - - if (attacker == null) return; - - Profile attackerProfile = ProfileManager.getInstance().getProfile(attacker); - Profile targetProfile = ProfileManager.getInstance().getProfile(target); - - if (!attackerProfile.getStatus().equals(ProfileStatus.MATCH)) return; - if (!targetProfile.getStatus().equals(ProfileStatus.MATCH)) return; - - Match match = MatchManager.getInstance().getLiveMatchByPlayer(attacker); - if (match != MatchManager.getInstance().getLiveMatchByPlayer(target)) { - e.setCancelled(true); - return; - } - - if (!match.getCurrentRound().getRoundStatus().equals(RoundStatus.LIVE)) return; - - boolean cancel = match.getCurrentStat(attacker).isSet() || match.getCurrentStat(target).isSet(); - - if (!cancel) { - cancel = TeamUtil.isSaveTeamMate(match, attacker, target); - } - - if (cancel) { - e.setCancelled(true); - return; - } else { - if (match.getLadder() instanceof LadderHandle ladderHandle) { - ladderHandle.handleEvents(e, match); - } - } - - // Always record the attacker for void-kill attribution, - // regardless of whether the event was cancelled by a ladder handler. - match.recordAttack(target, attacker); - - if (!e.isCancelled() && !match.getLadder().getLadderKnockback().getKnockbackType().equals(KnockbackType.DEFAULT)) { - KnockbackUtil.setPlayerKnockback(target, match.getLadder().getLadderKnockback().getKnockbackType()); - } - } - - @EventHandler - public void onExpPickup(PlayerPickupExperienceEvent e) { - Player player = e.getPlayer(); - - if (SpectatorManager.getInstance().getSpectators().containsKey(player)) { - e.setCancelled(true); - } - } - - @EventHandler - public void onEntityTarget(EntityTargetEvent e) { - if (!(e.getTarget() instanceof Player player)) { - return; - } - - if (SpectatorManager.getInstance().getSpectators().containsKey(player)) { - e.setCancelled(true); - } - } - - /** - * Prevents players from swapping items in their hands before they have chosen a kit. - */ - @EventHandler - public void onPlayerSwapHandItemsEvent(PlayerSwapHandItemsEvent e) { - Player player = e.getPlayer(); - Profile profile = ProfileManager.getInstance().getProfile(player); - - if (profile.getStatus() == ProfileStatus.MATCH) { - Match match = MatchManager.getInstance().getLiveMatchByPlayer(player); - if (match != null) { - MatchFightPlayer matchFightPlayer = match.getMatchPlayers().get(player); - if (!matchFightPlayer.isHasChosenKit()) { - e.setCancelled(true); - } - } - } - } - - /** - * Prevents players from swapping items in their hands before they have chosen a kit. - * Or when they are in the kit editor. - */ - @EventHandler - public void onInventoryClick(InventoryClickEvent e) { - if (!(e.getWhoClicked() instanceof Player player)) { - return; - } - Profile profile = ProfileManager.getInstance().getProfile(player); - - if (e.getAction().equals(InventoryAction.HOTBAR_SWAP)) { - switch (profile.getStatus()) { - case MATCH -> { - Match match = MatchManager.getInstance().getLiveMatchByPlayer(player); - if (match != null) { - MatchFightPlayer matchFightPlayer = match.getMatchPlayers().get(player); - if (!matchFightPlayer.isHasChosenKit()) { - e.setCancelled(true); - } - } - } - case EDITOR -> e.setCancelled(true); - } - } - } - - @EventHandler - public void onWindCharge(ProjectileLaunchEvent e) { - if (!(e.getEntity() instanceof WindCharge)) { - return; - } - - if (!(e.getEntity().getShooter() instanceof Player player)) { - return; - } - - Profile profile = ProfileManager.getInstance().getProfile(player); - switch (profile.getStatus()) { - case MATCH -> { - Match match = MatchManager.getInstance().getLiveMatchByPlayer(player); - if (match != null && !match.getLadder().isBuild()) { - Common.sendMMMessage(player, LanguageManager.getString("MATCH.ONLY-CHARGE-WIND")); - e.setCancelled(true); - } - } - case EVENT -> { - Event event = EventManager.getInstance().getEventByPlayer(player); - if (event instanceof Brackets) { - Common.sendMMMessage(player, LanguageManager.getString("MATCH.ONLY-CHARGE-WIND")); - e.setCancelled(true); - } - } - } - } - -} From 7b996c9de9257c688ccd5fbc32bc66e91283421c Mon Sep 17 00:00:00 2001 From: Nandor Dukat Date: Sun, 15 Mar 2026 09:19:52 +0100 Subject: [PATCH 10/38] fixed code warnings --- .../dev/nandi0813/practice/ZonePractice.java | 3 - .../manager/arena/util/PortalLocation.java | 4 - .../onevsall/juggernaut/JuggernautData.java | 4 +- .../manager/fight/ffa/FFAListener.java | 12 +-- .../premadecustom/CustomLadderEditorGui.java | 3 +- .../gui/guis/profile/ProfileLadderStats.java | 7 +- .../gui/guis/profile/ProfileSetupGui.java | 25 +++--- .../gui/setup/event/EventSetupUtil.java | 18 ----- .../ladder/laddersettings/InventoryGui.java | 6 +- .../handlers/GoldenAppleSettingHandler.java | 10 +-- .../manager/ladder/type/FireballFight.java | 9 ++- .../practice/manager/nametag/FakeTeam.java | 2 - .../practice/manager/playerkit/KitItems.java | 6 +- .../manager/sidebar/adapter/AdapterUtil.java | 41 ++++------ .../practice/moved/EPCountdownListener.java | 20 +---- .../moved/FireworkRocketCooldownListener.java | 23 +----- .../moved/ModernItemCooldownHandler.java | 75 ++---------------- .../practice/moved/VersionChecker.java | 2 +- .../moved/VersionNotSupportedException.java | 13 ---- .../util/playerutil/ProfileStatData.java | 78 ------------------- 20 files changed, 60 insertions(+), 301 deletions(-) delete mode 100644 core/src/main/java/dev/nandi0813/practice/moved/VersionNotSupportedException.java delete mode 100644 core/src/main/java/dev/nandi0813/practice/util/playerutil/ProfileStatData.java diff --git a/core/src/main/java/dev/nandi0813/practice/ZonePractice.java b/core/src/main/java/dev/nandi0813/practice/ZonePractice.java index d9920015..c7267e17 100644 --- a/core/src/main/java/dev/nandi0813/practice/ZonePractice.java +++ b/core/src/main/java/dev/nandi0813/practice/ZonePractice.java @@ -24,7 +24,6 @@ import dev.nandi0813.practice.listener.*; import dev.nandi0813.practice.manager.arena.ArenaListener; import dev.nandi0813.practice.manager.arena.ArenaManager; -import dev.nandi0813.practice.manager.arena.arenas.ArenaCopy; import dev.nandi0813.practice.manager.arena.setup.SpawnMarkerManager; import dev.nandi0813.practice.manager.arena.util.ArenaWorldUtil; import dev.nandi0813.practice.manager.backend.*; @@ -45,10 +44,8 @@ import dev.nandi0813.practice.manager.profile.ProfileManager; import dev.nandi0813.practice.manager.server.ServerManager; import dev.nandi0813.practice.manager.sidebar.SidebarManager; -import dev.nandi0813.practice.moved.VersionChecker; import dev.nandi0813.practice.moved.*; import dev.nandi0813.practice.util.*; -import dev.nandi0813.practice.util.UpdateChecker; import dev.nandi0813.practice.util.placeholderapi.PlayerExpansion; import io.github.retrooper.packetevents.factory.spigot.SpigotPacketEventsBuilder; import lombok.Getter; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/arena/util/PortalLocation.java b/core/src/main/java/dev/nandi0813/practice/manager/arena/util/PortalLocation.java index 4707674f..9a29fad6 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/arena/util/PortalLocation.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/arena/util/PortalLocation.java @@ -48,10 +48,6 @@ public boolean isIn(Player player) { return cuboid.contains(player.getLocation()); } - public boolean isInsidePortalProtection(Location location, int maxDistance) { - return (center.distance(location) + 1) <= maxDistance; - } - public boolean isInsidePortalProtection(Block block, int maxDistance) { return (center.distance(block.getLocation()) + 1) <= maxDistance; } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/onevsall/juggernaut/JuggernautData.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/onevsall/juggernaut/JuggernautData.java index 3977cbf6..80c5bd59 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/onevsall/juggernaut/JuggernautData.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/onevsall/juggernaut/JuggernautData.java @@ -23,9 +23,7 @@ protected void setCustomData() { juggernautKitData.saveData(this.config, "juggernaut-kit"); } - if (playerKitData != null) { - playerKitData.saveData(this.config, "player-kit"); - } + playerKitData.saveData(this.config, "player-kit"); } @Override diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/FFAListener.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/FFAListener.java index fcb8810f..b5bc8138 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/FFAListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/FFAListener.java @@ -16,12 +16,10 @@ import dev.nandi0813.practice.manager.profile.Profile; import dev.nandi0813.practice.manager.profile.ProfileManager; import dev.nandi0813.practice.moved.ChangedBlock; +import dev.nandi0813.practice.moved.ModernItemCooldownHandler; import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.Cuboid; import dev.nandi0813.practice.util.NumberUtil; -import dev.nandi0813.practice.util.StringUtil; -import dev.nandi0813.practice.util.cooldown.CooldownObject; -import dev.nandi0813.practice.util.cooldown.PlayerCooldown; import dev.nandi0813.practice.util.fightmapchange.FightChangeOptimized; import org.bukkit.Material; import org.bukkit.block.Block; @@ -43,7 +41,6 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.metadata.FixedMetadataValue; import org.bukkit.metadata.MetadataValue; -import org.bukkit.scheduler.BukkitRunnable; import static dev.nandi0813.practice.util.PermanentConfig.FIGHT_ENTITY; import static dev.nandi0813.practice.util.PermanentConfig.PLACED_IN_FIGHT; @@ -125,12 +122,7 @@ public void onGoldenHeadConsume(PlayerItemConsumeEvent e) { Ladder ladder = ffa.getPlayers().get(player); if (ladder.getGoldenAppleCooldown() < 1) return; - dev.nandi0813.practice.moved.ModernItemCooldownHandler.handleGoldenAppleFFA( - player, - ladder.getGoldenAppleCooldown(), - e, - "FFA.GAME.COOLDOWN.GOLDEN-APPLE" - ); + ModernItemCooldownHandler.handleGoldenApple(player, ladder.getGoldenAppleCooldown(), e); } @EventHandler diff --git a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/customladder/premadecustom/CustomLadderEditorGui.java b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/customladder/premadecustom/CustomLadderEditorGui.java index a348468e..c3cab69c 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/customladder/premadecustom/CustomLadderEditorGui.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/customladder/premadecustom/CustomLadderEditorGui.java @@ -15,7 +15,6 @@ import dev.nandi0813.practice.manager.profile.ProfileManager; import dev.nandi0813.practice.manager.profile.enums.ProfileStatus; import dev.nandi0813.practice.moved.ItemCreateUtil; -import dev.nandi0813.practice.moved.VersionChecker; import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.InventoryUtil; import dev.nandi0813.practice.util.StringUtil; @@ -273,7 +272,7 @@ private ItemStack getEffectItem() { ItemCreateUtil.hideItemFlags(effectItemMeta); List lore = new ArrayList<>(); - for (String line : effectItem.getItemMeta().getLore()) { + for (String line : Objects.requireNonNull(effectItem.getItemMeta().getLore())) { if (line.contains("%effects%")) lore.addAll(effects); else lore.add(line); } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/profile/ProfileLadderStats.java b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/profile/ProfileLadderStats.java index edf7ae20..71143c5f 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/profile/ProfileLadderStats.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/profile/ProfileLadderStats.java @@ -20,10 +20,7 @@ import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; public class ProfileLadderStats extends GUI { @@ -36,7 +33,7 @@ public ProfileLadderStats(Profile profile, GUI backTo) { this.profile = profile; this.backTo = backTo; - this.gui.put(1, InventoryUtil.createInventory(GUIFile.getString("GUIS.PLAYER-INFORMATION.LADDER-STATS.TITLE").replace("%player%", profile.getPlayer().getName()), 6)); + this.gui.put(1, InventoryUtil.createInventory(GUIFile.getString("GUIS.PLAYER-INFORMATION.LADDER-STATS.TITLE").replace("%player%", Objects.requireNonNull(profile.getPlayer().getName())), 6)); build(); } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/profile/ProfileSetupGui.java b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/profile/ProfileSetupGui.java index 014f3965..58c30c6d 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/profile/ProfileSetupGui.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/profile/ProfileSetupGui.java @@ -18,7 +18,6 @@ import dev.nandi0813.practice.manager.profile.enums.ProfileStatus; import dev.nandi0813.practice.manager.spectator.SpectatorManager; import dev.nandi0813.practice.moved.ItemCreateUtil; -import dev.nandi0813.practice.moved.PlayerUtil; import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.InventoryUtil; import dev.nandi0813.practice.util.StringUtil; @@ -236,20 +235,16 @@ private static ItemStack getOnlineItem(Profile profile) { private static ItemStack getGameItem(Profile profile) { ProfileStatus profileStatus = profile.getStatus(); - switch (profileStatus) { - case OFFLINE: - return GUIFile.getGuiItem("GUIS.PLAYER-INFORMATION.MAIN-PAGE.ICONS.ONLINE-INFO.GAME.OFFLINE").get(); - case MATCH: - return GUIFile.getGuiItem("GUIS.PLAYER-INFORMATION.MAIN-PAGE.ICONS.ONLINE-INFO.GAME.IN-MATCH").get(); - case FFA: - return GUIFile.getGuiItem("GUIS.PLAYER-INFORMATION.MAIN-PAGE.ICONS.ONLINE-INFO.GAME.IN-FFA").get(); - case EVENT: - return GUIFile.getGuiItem("GUIS.PLAYER-INFORMATION.MAIN-PAGE.ICONS.ONLINE-INFO.GAME.IN-EVENT").get(); - case SPECTATE: - return GUIFile.getGuiItem("GUIS.PLAYER-INFORMATION.MAIN-PAGE.ICONS.ONLINE-INFO.GAME.SPECTATING").get(); - default: - return GUIFile.getGuiItem("GUIS.PLAYER-INFORMATION.MAIN-PAGE.ICONS.ONLINE-INFO.GAME.NOTHING").get(); - } + return switch (profileStatus) { + case OFFLINE -> + GUIFile.getGuiItem("GUIS.PLAYER-INFORMATION.MAIN-PAGE.ICONS.ONLINE-INFO.GAME.OFFLINE").get(); + case MATCH -> GUIFile.getGuiItem("GUIS.PLAYER-INFORMATION.MAIN-PAGE.ICONS.ONLINE-INFO.GAME.IN-MATCH").get(); + case FFA -> GUIFile.getGuiItem("GUIS.PLAYER-INFORMATION.MAIN-PAGE.ICONS.ONLINE-INFO.GAME.IN-FFA").get(); + case EVENT -> GUIFile.getGuiItem("GUIS.PLAYER-INFORMATION.MAIN-PAGE.ICONS.ONLINE-INFO.GAME.IN-EVENT").get(); + case SPECTATE -> + GUIFile.getGuiItem("GUIS.PLAYER-INFORMATION.MAIN-PAGE.ICONS.ONLINE-INFO.GAME.SPECTATING").get(); + default -> GUIFile.getGuiItem("GUIS.PLAYER-INFORMATION.MAIN-PAGE.ICONS.ONLINE-INFO.GAME.NOTHING").get(); + }; } private static ItemStack getPartyItem(Profile profile) { diff --git a/core/src/main/java/dev/nandi0813/practice/manager/gui/setup/event/EventSetupUtil.java b/core/src/main/java/dev/nandi0813/practice/manager/gui/setup/event/EventSetupUtil.java index 0f0ff83a..2c2d5b68 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/gui/setup/event/EventSetupUtil.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/gui/setup/event/EventSetupUtil.java @@ -2,29 +2,11 @@ import dev.nandi0813.practice.manager.backend.GUIFile; import dev.nandi0813.practice.manager.fight.event.interfaces.EventData; -import dev.nandi0813.practice.moved.ItemCreateUtil; -import org.bukkit.Material; import org.bukkit.inventory.ItemStack; -import java.util.ArrayList; -import java.util.List; - public enum EventSetupUtil { ; - // Marker item - public static ItemStack getMarkerItem(EventData eventData) { - List lore = new ArrayList<>(); - lore.add(""); - lore.add("&eEvent: &b" + eventData.getType().getName()); - lore.add(""); - lore.add("&e&lLEFT-CLICK &7marks the first corner."); - lore.add("&6&lRIGHT-CLICK &7marks the second corner."); - lore.add(""); - lore.add("&c&lNote: &7This can't be undone."); - return ItemCreateUtil.createItem("&bCorner Marker", Material.STICK, lore); - } - public static ItemStack getBroadcastIntervalItem(final int broadcastInterval) { return GUIFile.getGuiItem("GUIS.SETUP.EVENT.EVENT-SETTINGS.ICONS.BROADCAST-INTERVAL").replace("%broadcastInterval%", String.valueOf(broadcastInterval)).get(); } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/gui/setup/ladder/laddersettings/InventoryGui.java b/core/src/main/java/dev/nandi0813/practice/manager/gui/setup/ladder/laddersettings/InventoryGui.java index 46570865..afd9525b 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/gui/setup/ladder/laddersettings/InventoryGui.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/gui/setup/ladder/laddersettings/InventoryGui.java @@ -11,7 +11,6 @@ import dev.nandi0813.practice.manager.ladder.LadderManager; import dev.nandi0813.practice.manager.ladder.abstraction.normal.NormalLadder; import dev.nandi0813.practice.moved.KitData; -import dev.nandi0813.practice.moved.VersionChecker; import dev.nandi0813.practice.util.ArmorUtil; import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.InventoryUtil; @@ -29,7 +28,10 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.potion.PotionEffect; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Objects; public class InventoryGui extends GUI { diff --git a/core/src/main/java/dev/nandi0813/practice/manager/ladder/settings/handlers/GoldenAppleSettingHandler.java b/core/src/main/java/dev/nandi0813/practice/manager/ladder/settings/handlers/GoldenAppleSettingHandler.java index c55d0562..769c7c0e 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/ladder/settings/handlers/GoldenAppleSettingHandler.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/ladder/settings/handlers/GoldenAppleSettingHandler.java @@ -2,6 +2,7 @@ import dev.nandi0813.practice.manager.fight.match.Match; import dev.nandi0813.practice.manager.ladder.settings.SettingHandler; +import dev.nandi0813.practice.moved.ModernItemCooldownHandler; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.Event; @@ -43,13 +44,8 @@ public boolean handleEvent(Event event, Match match, Player player) { return false; // Golden heads don't have cooldown } - dev.nandi0813.practice.moved.ModernItemCooldownHandler.handleGoldenAppleMatch( - player, - cooldown, - e, - "MATCH.COOLDOWN.GOLDEN-APPLE" - ); - // Return true only if the event was cancelled (cooldown was active) + ModernItemCooldownHandler.handleGoldenApple(player, cooldown, e); + return e.isCancelled(); } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/ladder/type/FireballFight.java b/core/src/main/java/dev/nandi0813/practice/manager/ladder/type/FireballFight.java index c69eac91..8e248031 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/ladder/type/FireballFight.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/ladder/type/FireballFight.java @@ -15,6 +15,8 @@ import dev.nandi0813.practice.manager.ladder.enums.LadderType; import dev.nandi0813.practice.moved.ChangedBlock; import dev.nandi0813.practice.moved.LadderUtil; +import dev.nandi0813.practice.moved.ModernItemCooldownHandler; +import dev.nandi0813.practice.moved.PlayerUtil; import lombok.Getter; import lombok.Setter; import org.bukkit.Material; @@ -148,12 +150,11 @@ private static void onFireballLaunch(final @NotNull PlayerInteractEvent e, final if (ladder.fireballCooldown <= 0) return; - if (!dev.nandi0813.practice.moved.ModernItemCooldownHandler.handleFireballMatch( - player, ladder.fireballCooldown, "MATCH.COOLDOWN.FIREBALL")) { + if (!ModernItemCooldownHandler.handleFireballMatch(player, ladder.fireballCooldown)) { return; } - final Fireball fireball = dev.nandi0813.practice.moved.PlayerUtil.shootFireball(player, FIREBALL_SPEED); + final Fireball fireball = PlayerUtil.shootFireball(player, FIREBALL_SPEED); fireball.setMetadata(FIGHT_ENTITY, new FixedMetadataValue(ZonePractice.getInstance(), match)); fireball.setMetadata(FIREBALL_FIGHT_FIREBALL, new FixedMetadataValue(ZonePractice.getInstance(), match)); fireball.setIsIncendiary(false); @@ -161,7 +162,7 @@ private static void onFireballLaunch(final @NotNull PlayerInteractEvent e, final fireballItem.setAmount(fireballItem.getAmount() - 1); if (fireballItem.getAmount() == 0) { - dev.nandi0813.practice.moved.PlayerUtil.setItemInUseIf( + PlayerUtil.setItemInUseIf( player, Material.FIRE_CHARGE, null); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/nametag/FakeTeam.java b/core/src/main/java/dev/nandi0813/practice/manager/nametag/FakeTeam.java index 2bf91a89..c2a3229f 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/nametag/FakeTeam.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/nametag/FakeTeam.java @@ -1,6 +1,5 @@ package dev.nandi0813.practice.manager.nametag; -import dev.nandi0813.practice.moved.VersionChecker; import lombok.Data; import lombok.Getter; import net.kyori.adventure.text.Component; @@ -8,7 +7,6 @@ import java.util.ArrayList; import java.util.List; -import java.util.Objects; @Data public class FakeTeam { diff --git a/core/src/main/java/dev/nandi0813/practice/manager/playerkit/KitItems.java b/core/src/main/java/dev/nandi0813/practice/manager/playerkit/KitItems.java index 479ad7ce..1a93fff6 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/playerkit/KitItems.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/playerkit/KitItems.java @@ -2,11 +2,13 @@ import dev.nandi0813.practice.manager.playerkit.items.KitItem; import dev.nandi0813.practice.moved.KitData; -import dev.nandi0813.practice.moved.VersionChecker; import lombok.Getter; import org.bukkit.inventory.ItemStack; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; @Getter public class KitItems { diff --git a/core/src/main/java/dev/nandi0813/practice/manager/sidebar/adapter/AdapterUtil.java b/core/src/main/java/dev/nandi0813/practice/manager/sidebar/adapter/AdapterUtil.java index d0115121..ebbc78ff 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/sidebar/adapter/AdapterUtil.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/sidebar/adapter/AdapterUtil.java @@ -15,6 +15,7 @@ import net.kyori.adventure.text.Component; import net.kyori.adventure.text.TextReplacementConfig; import org.bukkit.entity.Player; +import org.intellij.lang.annotations.RegExp; public enum AdapterUtil { ; @@ -26,14 +27,14 @@ public enum AdapterUtil { /** * Creates a text replacement config for a simple string replacement */ - private static TextReplacementConfig replace(String placeholder, String value) { + private static TextReplacementConfig replace(@RegExp String placeholder, String value) { return TextReplacementConfig.builder().match(placeholder).replacement(value).build(); } /** * Creates a text replacement config for a component replacement */ - private static TextReplacementConfig replace(String placeholder, Component value) { + private static TextReplacementConfig replace(@RegExp String placeholder, Component value) { return TextReplacementConfig.builder().match(placeholder).replacement(value).build(); } @@ -89,7 +90,7 @@ private static Component replacePartyFFAPlayerPlaceholders(Component line, Party /** * Replaces colored player name placeholders for boxing (team color + player name) */ - private static Component replaceColoredPlayerName(Component line, String placeholder, TeamEnum team, Player player) { + private static Component replaceColoredPlayerName(Component line, @RegExp String placeholder, TeamEnum team, Player player) { if (player == null) return line.replaceText(replace(placeholder, Component.empty())); return line.replaceText(replace(placeholder, team.getColor().append(Component.text(player.getName())))); } @@ -125,17 +126,12 @@ public static Component replaceMatchPlaceholders(Player player, Component line, line = replaceCommonMatchPlaceholders(line, match, player); // Handle match type specific placeholders - switch (match.getType()) { - case DUEL: - return handleDuelPlaceholders(line, (Duel) match, player); - case PARTY_FFA: - return handlePartyFFAPlaceholders(line, (PartyFFA) match, player); - case PARTY_SPLIT: - return handlePartySplitPlaceholders(line, (PartySplit) match); - case PARTY_VS_PARTY: - return handlePartyVsPartyPlaceholders(line, (PartyVsParty) match, player); - } - return line; + return switch (match.getType()) { + case DUEL -> handleDuelPlaceholders(line, (Duel) match, player); + case PARTY_FFA -> handlePartyFFAPlaceholders(line, (PartyFFA) match, player); + case PARTY_SPLIT -> handlePartySplitPlaceholders(line, (PartySplit) match); + case PARTY_VS_PARTY -> handlePartyVsPartyPlaceholders(line, (PartyVsParty) match, player); + }; } private static Component handleDuelPlaceholders(Component line, Duel duel, Player player) { @@ -237,17 +233,12 @@ public static Component replaceMatchSpectatePlaceholders(Component line, Match m } // Handle match type specific placeholders - switch (match.getType()) { - case DUEL: - return handleSpectatorDuelPlaceholders(line, (Duel) match); - case PARTY_FFA: - return handleSpectatorPartyFFAPlaceholders(line, (PartyFFA) match); - case PARTY_SPLIT: - return handleSpectatorPartySplitPlaceholders(line, (PartySplit) match); - case PARTY_VS_PARTY: - return handleSpectatorPartyVsPartyPlaceholders(line, (PartyVsParty) match); - } - return line; + return switch (match.getType()) { + case DUEL -> handleSpectatorDuelPlaceholders(line, (Duel) match); + case PARTY_FFA -> handleSpectatorPartyFFAPlaceholders(line, (PartyFFA) match); + case PARTY_SPLIT -> handleSpectatorPartySplitPlaceholders(line, (PartySplit) match); + case PARTY_VS_PARTY -> handleSpectatorPartyVsPartyPlaceholders(line, (PartyVsParty) match); + }; } private static Component handleSpectatorDuelPlaceholders(Component line, Duel duel) { diff --git a/core/src/main/java/dev/nandi0813/practice/moved/EPCountdownListener.java b/core/src/main/java/dev/nandi0813/practice/moved/EPCountdownListener.java index 7219ab83..ce4c8105 100644 --- a/core/src/main/java/dev/nandi0813/practice/moved/EPCountdownListener.java +++ b/core/src/main/java/dev/nandi0813/practice/moved/EPCountdownListener.java @@ -5,7 +5,6 @@ import dev.nandi0813.practice.manager.fight.match.Match; import dev.nandi0813.practice.manager.fight.match.MatchManager; import dev.nandi0813.practice.manager.fight.match.enums.RoundStatus; -import dev.nandi0813.practice.util.PermanentConfig; import io.papermc.paper.event.player.PlayerItemCooldownEvent; import org.bukkit.Material; import org.bukkit.entity.EnderPearl; @@ -75,14 +74,8 @@ public void onProjectileShoot(ProjectileLaunchEvent e) { return; } - dev.nandi0813.practice.moved.ModernItemCooldownHandler.handleEnderPearlFFA( - player, - ffa.getFightPlayers().get(player), - duration, - PermanentConfig.FFA_EXP_BAR, - e, - "FFA.GAME.COOLDOWN.ENDER-PEARL" - ); + ModernItemCooldownHandler.handleEnderPearl(player, duration, e); + return; } @@ -98,14 +91,7 @@ public void onProjectileShoot(ProjectileLaunchEvent e) { return; } - dev.nandi0813.practice.moved.ModernItemCooldownHandler.handleEnderPearlMatch( - player, - match.getMatchPlayers().get(player), - duration, - PermanentConfig.MATCH_EXP_BAR, - e, - "MATCH.COOLDOWN.ENDER-PEARL" - ); + ModernItemCooldownHandler.handleEnderPearl(player, duration, e); } } diff --git a/core/src/main/java/dev/nandi0813/practice/moved/FireworkRocketCooldownListener.java b/core/src/main/java/dev/nandi0813/practice/moved/FireworkRocketCooldownListener.java index b5ffa6e8..532adce5 100644 --- a/core/src/main/java/dev/nandi0813/practice/moved/FireworkRocketCooldownListener.java +++ b/core/src/main/java/dev/nandi0813/practice/moved/FireworkRocketCooldownListener.java @@ -11,12 +11,6 @@ import org.bukkit.event.Listener; import org.bukkit.event.entity.EntitySpawnEvent; -/** - * Handles firework rocket cooldown for elytra boost in modern Minecraft versions. - * This prevents spam-boosting with firework rockets when flying with elytra. - * Delegates to {@link dev.nandi0813.practice.module.interfaces.ItemCooldownHandler} - * so the modern implementation can apply a native hotbar visual cooldown. - */ public class FireworkRocketCooldownListener implements Listener { @EventHandler @@ -32,13 +26,8 @@ public void onFireworkSpawn(EntitySpawnEvent e) { int duration = ffa.getPlayers().get(player).getFireworkRocketCooldown(); if (duration <= 0) return; - dev.nandi0813.practice.moved.ModernItemCooldownHandler.handleFireworkRocketFFA( - player, - ffa.getFightPlayers().get(player), - duration, - null, - "MATCH.COOLDOWN.FIREWORK-ROCKET-COOLDOWN" - ); + ModernItemCooldownHandler.handleFireworkRocket(player, duration, null); + return; } @@ -53,13 +42,7 @@ public void onFireworkSpawn(EntitySpawnEvent e) { return; } - dev.nandi0813.practice.moved.ModernItemCooldownHandler.handleFireworkRocketMatch( - player, - match.getMatchPlayers().get(player), - duration, - null, - "MATCH.COOLDOWN.FIREWORK-ROCKET-COOLDOWN" - ); + ModernItemCooldownHandler.handleFireworkRocket(player, duration, null); } } } \ No newline at end of file diff --git a/core/src/main/java/dev/nandi0813/practice/moved/ModernItemCooldownHandler.java b/core/src/main/java/dev/nandi0813/practice/moved/ModernItemCooldownHandler.java index 4d2eff25..2573b756 100644 --- a/core/src/main/java/dev/nandi0813/practice/moved/ModernItemCooldownHandler.java +++ b/core/src/main/java/dev/nandi0813/practice/moved/ModernItemCooldownHandler.java @@ -1,67 +1,24 @@ package dev.nandi0813.practice.moved; import dev.nandi0813.practice.ZonePractice; -import dev.nandi0813.practice.manager.fight.util.FightPlayer; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.Cancellable; -/** - * Modern (Paper) implementation of {@link ItemCooldownHandler}. - * - *

    Uses Paper's native {@link Player#setCooldown(Material, int)} / {@link Player#hasCooldown(Material)} - * exclusively — no runnables, no internal cooldown maps, no chat messages. - * - *

    Ender Pearl: duration is NOT set here. Paper fires {@code PlayerItemCooldownEvent} - * automatically after every pearl throw, and {@code EPCountdownListener.onEnderPearlCooldownSet} - * overrides the tick count to {@code duration * 20} in that event. This handler only - * blocks re-throws while {@code hasCooldown} is true. - * - *

    Golden Apple / Firework Rocket / Fireball: no vanilla cooldown is applied by the - * server, so we call {@code setCooldown} here directly when the action is first performed. - */ public class ModernItemCooldownHandler { - // ------------------------------------------------------------------------- - // Ender Pearl — duration controlled by PlayerItemCooldownEvent in EPCountdownListener - // ------------------------------------------------------------------------- - - public static void handleEnderPearlFFA(Player player, FightPlayer fightPlayer, int duration, boolean expBar, - Cancellable event, String langKey) { - if (player.hasCooldown(Material.ENDER_PEARL)) { - if (event != null) { - event.setCancelled(true); - } - } - // If no cooldown: let the throw proceed; PlayerItemCooldownEvent will set the correct duration. - } - - public static void handleEnderPearlMatch(Player player, FightPlayer fightPlayer, int duration, boolean expBar, - Cancellable event, String langKey) { + public static void handleEnderPearl(Player player, int duration, Cancellable event) { if (player.hasCooldown(Material.ENDER_PEARL)) { if (event != null) { event.setCancelled(true); } - } - // If no cooldown: let the throw proceed; PlayerItemCooldownEvent will set the correct duration. - } - - // ------------------------------------------------------------------------- - // Golden Apple - // ------------------------------------------------------------------------- - - public static void handleGoldenAppleFFA(Player player, int duration, Cancellable event, String langKey) { - if (player.hasCooldown(Material.GOLDEN_APPLE)) { - if (event != null) { - event.setCancelled(true); - } } else { - player.setCooldown(Material.GOLDEN_APPLE, duration * 20); + player.setCooldown(Material.ENDER_PEARL, duration * 20); } } - public static void handleGoldenAppleMatch(Player player, int duration, Cancellable event, String langKey) { + public static void handleGoldenApple(Player player, int duration, Cancellable event) { if (player.hasCooldown(Material.GOLDEN_APPLE)) { if (event != null) { event.setCancelled(true); @@ -71,12 +28,7 @@ public static void handleGoldenAppleMatch(Player player, int duration, Cancellab } } - // ------------------------------------------------------------------------- - // Firework Rocket - // ------------------------------------------------------------------------- - - public static void handleFireworkRocketFFA(Player player, FightPlayer fightPlayer, int duration, - Cancellable event, String langKey) { + public static void handleFireworkRocket(Player player, int duration, Cancellable event) { Bukkit.getScheduler().runTaskLater(ZonePractice.getInstance(), () -> { if (player.hasCooldown(Material.FIREWORK_ROCKET)) { if (event != null) { @@ -88,24 +40,7 @@ public static void handleFireworkRocketFFA(Player player, FightPlayer fightPlaye }, 2L); } - public static void handleFireworkRocketMatch(Player player, FightPlayer fightPlayer, int duration, - Cancellable event, String langKey) { - Bukkit.getScheduler().runTaskLater(ZonePractice.getInstance(), () -> { - if (player.hasCooldown(Material.FIREWORK_ROCKET)) { - if (event != null) { - event.setCancelled(true); - } - } else { - player.setCooldown(Material.FIREWORK_ROCKET, duration * 20); - } - }, 2L); - } - - // ------------------------------------------------------------------------- - // Fireball - // ------------------------------------------------------------------------- - - public static boolean handleFireballMatch(Player player, double duration, String langKey) { + public static boolean handleFireballMatch(Player player, double duration) { if (player.hasCooldown(Material.FIRE_CHARGE)) { return false; } else { diff --git a/core/src/main/java/dev/nandi0813/practice/moved/VersionChecker.java b/core/src/main/java/dev/nandi0813/practice/moved/VersionChecker.java index 0f942be7..473d1498 100644 --- a/core/src/main/java/dev/nandi0813/practice/moved/VersionChecker.java +++ b/core/src/main/java/dev/nandi0813/practice/moved/VersionChecker.java @@ -60,7 +60,7 @@ private static String extractMcVersion(final String bukkitVersionString) { @Getter public enum BukkitVersion { v1_20_R4, // 1.20.6 - v1_21_R3; // 1.21.X + v1_21_R3 // 1.21.X } } diff --git a/core/src/main/java/dev/nandi0813/practice/moved/VersionNotSupportedException.java b/core/src/main/java/dev/nandi0813/practice/moved/VersionNotSupportedException.java deleted file mode 100644 index 5c1b9833..00000000 --- a/core/src/main/java/dev/nandi0813/practice/moved/VersionNotSupportedException.java +++ /dev/null @@ -1,13 +0,0 @@ -package dev.nandi0813.practice.moved; - -import dev.nandi0813.practice.ZonePractice; -import org.bukkit.Bukkit; - -public class VersionNotSupportedException extends RuntimeException { - - public VersionNotSupportedException(Throwable err) { - super("Version is not supported! (" + Bukkit.getServer().getBukkitVersion() + ")", err); - ZonePractice.getInstance().onDisable(); - } - -} diff --git a/core/src/main/java/dev/nandi0813/practice/util/playerutil/ProfileStatData.java b/core/src/main/java/dev/nandi0813/practice/util/playerutil/ProfileStatData.java deleted file mode 100644 index ddd83795..00000000 --- a/core/src/main/java/dev/nandi0813/practice/util/playerutil/ProfileStatData.java +++ /dev/null @@ -1,78 +0,0 @@ -package dev.nandi0813.practice.util.playerutil; - -import dev.nandi0813.practice.manager.ladder.LadderManager; -import dev.nandi0813.practice.manager.ladder.abstraction.normal.NormalLadder; -import dev.nandi0813.practice.manager.profile.Profile; -import org.apache.commons.lang3.StringUtils; - -public enum ProfileStatData { - ; - - // %all_unranked_wins% - // %all_unranked_losses% - // %all_ranked_wins% - // %all_ranked_losses% - // %ladder_unranked_%ladder%_wins% - // %ladder_unranked_%ladder%_losses% - // %ladder_ranked_%ladder%_wins% - // %ladder_ranked_%ladder%_losses% - // %ladder_%ladder%_elo% - // %global_elo% - - public static String replace(Profile profile, String original) { - String[] values = StringUtils.substringsBetween(original, "%", "%"); - - if (values != null) { - for (String s : values) { - String replace = getData(profile, s); - - if (replace != null) - original = original.replace("%" + s + "%", replace); - } - } - - return original; - } - - public static String getData(final Profile profile, final String identifier) { - if (identifier.equalsIgnoreCase("global_elo")) { - return String.valueOf(profile.getStats().getGlobalElo()); - } else if (identifier.contains("all")) { - if (identifier.equalsIgnoreCase("all_unranked_wins")) - return String.valueOf(profile.getStats().getWins(false)); - else if (identifier.equalsIgnoreCase("all_unranked_losses")) - return String.valueOf(profile.getStats().getLosses(false)); - else if (identifier.equalsIgnoreCase("all_ranked_wins")) - return String.valueOf(profile.getStats().getWins(true)); - else if (identifier.equalsIgnoreCase("all_ranked_losses")) - return String.valueOf(profile.getStats().getLosses(true)); - } else if (identifier.contains("ladder")) { - NormalLadder ladder = null; - for (NormalLadder sLadder : LadderManager.getInstance().getLadders()) { - if (identifier.toLowerCase().contains(sLadder.getName().toLowerCase())) { - ladder = sLadder; - break; - } - } - - if (ladder != null) { - if (identifier.contains("unranked")) { - if (identifier.contains("wins")) - return String.valueOf(profile.getStats().getLadderStat(ladder).getUnRankedWins()); - else if (identifier.contains("losses")) - return String.valueOf(profile.getStats().getLadderStat(ladder).getUnRankedLosses()); - } else if (identifier.contains("ranked")) { - if (identifier.contains("wins")) - return String.valueOf(profile.getStats().getLadderStat(ladder).getRankedWins()); - else if (identifier.contains("losses")) - return String.valueOf(profile.getStats().getLadderStat(ladder).getRankedLosses()); - } else if (identifier.contains("elo")) { - return String.valueOf(profile.getStats().getLadderStat(ladder).getElo()); - } - } - } - - return null; - } - -} From 3f7ce7d695efb9223269bc2b7550e878b9211ae0 Mon Sep 17 00:00:00 2001 From: Nandor Dukat Date: Sun, 15 Mar 2026 09:27:29 +0100 Subject: [PATCH 11/38] created AGENTS.md and added to .gitignore --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 3bb5e719..383dd064 100644 --- a/.gitignore +++ b/.gitignore @@ -114,4 +114,4 @@ test_servers/ # Local scripts reset-dev.sh -CLAUDE.md \ No newline at end of file +AGENTS.md \ No newline at end of file From 1461b88452cb46fad490a405c1ba79746d8db2ac Mon Sep 17 00:00:00 2001 From: Nandor Dukat Date: Sun, 15 Mar 2026 09:52:03 +0100 Subject: [PATCH 12/38] changed deprecated methods --- .../command/arena/arguments/Set/IconArg.java | 5 +- .../command/ladder/arguments/EffectArg.java | 15 +-- .../command/ladder/arguments/IconArg.java | 2 +- .../command/practice/arguments/RenameArg.java | 9 +- .../practice/listener/PlayerInteract.java | 9 +- .../arena/arenas/interfaces/DisplayArena.java | 5 +- .../arena/setup/ArenaSetupManager.java | 13 +- .../arena/setup/SpawnMarkerManager.java | 14 +- .../manager/arena/util/PortalLocation.java | 2 +- .../practice/manager/backend/BackendUtil.java | 5 +- .../fight/belowname/BelowNameManager.java | 4 +- .../manager/fight/event/EventListener.java | 3 +- .../duel/brackets/BracketsListener.java | 5 +- .../event/events/ffa/lms/LMSListener.java | 8 +- .../events/ffa/splegg/SpleggListener.java | 8 +- .../event/events/onevsall/tnttag/TNTTag.java | 4 +- .../fight/event/setup/EventSetupListener.java | 14 +- .../event/setup/EventSpawnMarkerManager.java | 40 ++---- .../event/setup/EventWandSetupManager.java | 14 +- .../manager/fight/ffa/FFAListener.java | 13 +- .../practice/manager/fight/ffa/game/FFA.java | 2 +- .../fight/listener/BuildBlockListener.java | 22 ++-- .../practice/manager/fight/match/Match.java | 2 +- .../match/listener/LadderTypeListener.java | 24 ++-- .../manager/fight/match/type/duel/Duel.java | 2 +- .../manager/fight/match/util/MatchUtil.java | 2 +- .../manager/fight/util/BlockUtil.java | 46 +++++-- .../manager/fight/util/ListenerUtil.java | 7 +- .../manager/fight/util/PersistentTagUtil.java | 100 +++++++++++++++ .../practice/manager/gui/GUIItem.java | 47 +++++-- .../manager/gui/guis/MatchStatsGui.java | 11 +- .../manager/gui/guis/PlayerInvGui.java | 2 +- .../gui/guis/arena/ArenaCreateGui.java | 2 +- .../premadecustom/CustomLadderEditorGui.java | 13 +- .../CustomLadderSelectorGui.java | 7 +- .../gui/guis/ladder/LadderCreateGui.java | 2 +- .../gui/guis/ladder/LadderPreviewGui.java | 2 +- .../gui/guis/leaderboard/LbGuiUtil.java | 23 ++-- .../gui/guis/party/OtherPartiesGui.java | 7 +- .../gui/guis/profile/ProfileSetupGui.java | 10 +- .../gui/guis/queue/QueueSelectorGui.java | 27 ++-- .../gui/setup/arena/ArenaSummaryGui.java | 5 +- .../arena/arenasettings/ffa/ArenaMainGui.java | 4 +- .../laddersettings/DestroyableBlocksGui.java | 17 ++- .../ladder/laddersettings/InventoryGui.java | 2 +- .../gui/setup/server/ServerMatchesGui.java | 2 +- .../practice/manager/inventory/Inventory.java | 10 +- .../manager/inventory/InventoryListener.java | 18 +-- .../inventories/EventQueueInventory.java | 4 +- .../inventory/inventories/LobbyInventory.java | 35 +++-- .../manager/ladder/abstraction/Ladder.java | 6 +- .../abstraction/interfaces/TempBuild.java | 15 +-- .../abstraction/normal/PortalFight.java | 16 +-- .../practice/manager/ladder/type/BedWars.java | 5 +- .../manager/ladder/type/FireballFight.java | 45 +++---- .../practice/manager/ladder/type/SkyWars.java | 2 +- .../practice/manager/ladder/type/Spleef.java | 11 +- .../hologram/ArmorStandFactory.java | 5 +- .../hologram/HologramProtectionListener.java | 3 +- .../manager/nametag/TabIntegration.java | 7 +- .../manager/playerkit/PlayerKitUtil.java | 10 +- .../manager/playerkit/StaticItems.java | 5 +- .../manager/playerkit/guis/EnchantGUI.java | 5 +- .../manager/playerkit/guis/MainGUI.java | 2 +- .../manager/playerkit/items/KitItem.java | 3 +- .../manager/server/MysqlSaveRunnable.java | 5 +- .../practice/moved/ArenaCopyUtilListener.java | 2 +- .../dev/nandi0813/practice/moved/BedUtil.java | 8 +- .../practice/moved/BuildListener.java | 73 ++++++----- .../practice/moved/ChangedBlock.java | 4 +- .../practice/moved/ItemCreateUtil.java | 43 ++----- .../dev/nandi0813/practice/moved/KitData.java | 16 ++- .../nandi0813/practice/moved/LadderUtil.java | 10 +- .../practice/moved/VersionChecker.java | 5 +- .../dev/nandi0813/practice/util/Common.java | 120 ++++++++++++++++-- .../nandi0813/practice/util/GoldenHead.java | 11 +- .../nandi0813/practice/util/StringUtil.java | 29 +---- .../fightmapchange/FightChangeOptimized.java | 7 +- .../practice/util/playerutil/PlayerUtil.java | 11 +- 79 files changed, 680 insertions(+), 453 deletions(-) create mode 100644 core/src/main/java/dev/nandi0813/practice/manager/fight/util/PersistentTagUtil.java diff --git a/core/src/main/java/dev/nandi0813/practice/command/arena/arguments/Set/IconArg.java b/core/src/main/java/dev/nandi0813/practice/command/arena/arguments/Set/IconArg.java index 1f356c09..caabeeab 100644 --- a/core/src/main/java/dev/nandi0813/practice/command/arena/arguments/Set/IconArg.java +++ b/core/src/main/java/dev/nandi0813/practice/command/arena/arguments/Set/IconArg.java @@ -6,6 +6,7 @@ import dev.nandi0813.practice.manager.gui.GUIManager; import dev.nandi0813.practice.manager.gui.GUIType; import dev.nandi0813.practice.manager.gui.setup.arena.ArenaGUISetupManager; +import dev.nandi0813.practice.moved.PlayerUtil; import dev.nandi0813.practice.util.Common; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -40,8 +41,8 @@ public static void run(Player player, String label, String[] args) { return; } - ItemStack icon = dev.nandi0813.practice.moved.PlayerUtil.getPlayerMainHand(player); - if (icon == null || icon.getType().equals(Material.AIR)) { + ItemStack icon = PlayerUtil.getPlayerMainHand(player); + if (icon.getType().equals(Material.AIR)) { Common.sendMMMessage(player, LanguageManager.getString("COMMAND.ARENA.ARGUMENTS.ICON.ICON-IN-HAND")); return; } diff --git a/core/src/main/java/dev/nandi0813/practice/command/ladder/arguments/EffectArg.java b/core/src/main/java/dev/nandi0813/practice/command/ladder/arguments/EffectArg.java index 1e823c15..2ff05f7f 100644 --- a/core/src/main/java/dev/nandi0813/practice/command/ladder/arguments/EffectArg.java +++ b/core/src/main/java/dev/nandi0813/practice/command/ladder/arguments/EffectArg.java @@ -8,7 +8,6 @@ import dev.nandi0813.practice.util.Common; import org.bukkit.entity.Player; import org.bukkit.potion.PotionEffect; -import org.bukkit.util.StringUtil; import java.util.ArrayList; import java.util.List; @@ -38,7 +37,7 @@ public static void run(Player player, String label, String[] args) { return; } - List effects = (List) player.getActivePotionEffects(); + List effects = new ArrayList<>(player.getActivePotionEffects()); if (effects.isEmpty()) { Common.sendMMMessage(player, LanguageManager.getString("COMMAND.LADDER.ARGUMENTS.EFFECT.NO-EFFECTS")); return; @@ -51,17 +50,7 @@ public static void run(Player player, String label, String[] args) { } public static List tabComplete(Player player, String[] args) { - List arguments = new ArrayList<>(); - if (!player.hasPermission("zpp.setup")) return arguments; - - if (args.length == 3) { - for (Ladder ladder : LadderManager.getInstance().getLadders()) - arguments.add(ladder.getName()); - - return StringUtil.copyPartialMatches(args[2], arguments, new ArrayList<>()); - } - - return arguments; + return IconArg.tabComplete(player, args); } } diff --git a/core/src/main/java/dev/nandi0813/practice/command/ladder/arguments/IconArg.java b/core/src/main/java/dev/nandi0813/practice/command/ladder/arguments/IconArg.java index 92e615c7..1fa8fa97 100644 --- a/core/src/main/java/dev/nandi0813/practice/command/ladder/arguments/IconArg.java +++ b/core/src/main/java/dev/nandi0813/practice/command/ladder/arguments/IconArg.java @@ -42,7 +42,7 @@ public static void run(Player player, String label, String[] args) { } ItemStack icon = dev.nandi0813.practice.moved.PlayerUtil.getPlayerMainHand(player); - if (icon == null || icon.getType().equals(Material.AIR)) { + if (icon.getType().equals(Material.AIR)) { Common.sendMMMessage(player, LanguageManager.getString("COMMAND.LADDER.ARGUMENTS.ICON.NO-ITEM").replace("%ladder%", ladder.getDisplayName())); return; } diff --git a/core/src/main/java/dev/nandi0813/practice/command/practice/arguments/RenameArg.java b/core/src/main/java/dev/nandi0813/practice/command/practice/arguments/RenameArg.java index d30eb39b..f1184720 100644 --- a/core/src/main/java/dev/nandi0813/practice/command/practice/arguments/RenameArg.java +++ b/core/src/main/java/dev/nandi0813/practice/command/practice/arguments/RenameArg.java @@ -25,7 +25,8 @@ public static void run(Player player, String label, String[] args) { return; } - if (player.getItemInHand() == null || player.getItemInHand().getType().equals(Material.AIR)) { + ItemStack handItem = player.getInventory().getItemInMainHand(); + if (handItem.getType().equals(Material.AIR)) { Common.sendMMMessage(player, LanguageManager.getString("COMMAND.PRACTICE.ARGUMENTS.RENAME.ITEM-IN-HAND")); return; } @@ -39,11 +40,11 @@ public static void run(Player player, String label, String[] args) { builder.append(" "); } - ItemStack item = player.getItemInHand(); + ItemStack item = player.getInventory().getItemInMainHand(); ItemMeta itemMeta = item.getItemMeta(); - itemMeta.setDisplayName(StringUtil.CC(builder.toString())); + itemMeta.displayName(Common.legacyToComponent(StringUtil.CC(builder.toString()))); item.setItemMeta(itemMeta); - player.setItemInHand(item); + player.getInventory().setItemInMainHand(item); } } diff --git a/core/src/main/java/dev/nandi0813/practice/listener/PlayerInteract.java b/core/src/main/java/dev/nandi0813/practice/listener/PlayerInteract.java index 3ff593d4..5af518ca 100644 --- a/core/src/main/java/dev/nandi0813/practice/listener/PlayerInteract.java +++ b/core/src/main/java/dev/nandi0813/practice/listener/PlayerInteract.java @@ -4,6 +4,7 @@ import dev.nandi0813.practice.manager.profile.ProfileManager; import dev.nandi0813.practice.manager.profile.enums.ProfileStatus; import org.bukkit.Material; +import org.bukkit.attribute.Attribute; import org.bukkit.block.Block; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -14,6 +15,8 @@ import org.bukkit.event.player.PlayerTeleportEvent; import org.bukkit.inventory.ItemStack; +import java.util.Objects; + public class PlayerInteract implements Listener { @EventHandler @@ -34,7 +37,7 @@ public void onSoup(PlayerInteractEvent e) { if (item != null && item.getType().equals(Material.MUSHROOM_STEW)) { int food = player.getFoodLevel(); double health = player.getHealth(); - double maxHealth = player.getMaxHealth(); + double maxHealth = Objects.requireNonNull(player.getAttribute(Attribute.MAX_HEALTH)).getValue(); double regen = 6.5; if (food < 20) e.setCancelled(true); @@ -42,10 +45,10 @@ public void onSoup(PlayerInteractEvent e) { if (health == maxHealth) return; if ((health + regen) < maxHealth) { - player.getInventory().getItemInHand().setType(Material.BOWL); + player.getInventory().setItemInMainHand(new ItemStack(Material.BOWL)); player.setHealth(health + regen); } else if ((health + regen) >= maxHealth) { - player.getInventory().getItemInHand().setType(Material.BOWL); + player.getInventory().setItemInMainHand(new ItemStack(Material.BOWL)); player.setHealth(maxHealth); } player.updateInventory(); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/arena/arenas/interfaces/DisplayArena.java b/core/src/main/java/dev/nandi0813/practice/manager/arena/arenas/interfaces/DisplayArena.java index a7287c63..80842102 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/arena/arenas/interfaces/DisplayArena.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/arena/arenas/interfaces/DisplayArena.java @@ -16,15 +16,14 @@ import dev.nandi0813.practice.manager.gui.GUIType; import dev.nandi0813.practice.manager.gui.setup.arena.ArenaGUISetupManager; import dev.nandi0813.practice.manager.ladder.abstraction.normal.NormalLadder; +import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.StringUtil; import lombok.Getter; import lombok.Setter; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; -import java.util.ArrayList; import java.util.HashSet; -import java.util.List; import java.util.Set; @Getter @@ -62,7 +61,7 @@ public void setIcon(final ItemStack icon) { this.icon = icon.clone(); if (icon.hasItemMeta()) - this.displayName = StringUtil.CC(icon.getItemMeta().getDisplayName()); + this.displayName = StringUtil.CC(Common.getItemDisplayName(icon)); else this.displayName = name; } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/arena/setup/ArenaSetupManager.java b/core/src/main/java/dev/nandi0813/practice/manager/arena/setup/ArenaSetupManager.java index ee28e0c5..56b891b5 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/arena/setup/ArenaSetupManager.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/arena/setup/ArenaSetupManager.java @@ -18,6 +18,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; public class ArenaSetupManager { @@ -118,13 +119,13 @@ public List getPlayersSettingUpArena(DisplayArena arena) { } public boolean isSetupWand(ItemStack item) { - return item != null && item.getType() == Material.BLAZE_ROD && item.hasItemMeta() && item.getItemMeta().hasDisplayName() && item.getItemMeta().getDisplayName().contains("Arena Wand"); + return item != null && item.getType() == Material.BLAZE_ROD && item.hasItemMeta() && Common.getItemDisplayName(item).contains("Arena Wand"); } public SetupMode getNextMode(DisplayArena arena, SetupMode current) { List validModes = getValidModes(arena); int currentIndex = validModes.indexOf(current); - if (currentIndex == -1) return validModes.get(0); + if (currentIndex == -1) return validModes.getFirst(); int nextIndex = (currentIndex + 1) % validModes.size(); return validModes.get(nextIndex); @@ -133,7 +134,7 @@ public SetupMode getNextMode(DisplayArena arena, SetupMode current) { public SetupMode getPreviousMode(DisplayArena arena, SetupMode current) { List validModes = getValidModes(arena); int currentIndex = validModes.indexOf(current); - if (currentIndex == -1) return validModes.get(0); + if (currentIndex == -1) return validModes.getFirst(); int prevIndex = (currentIndex - 1 + validModes.size()) % validModes.size(); return validModes.get(prevIndex); @@ -177,7 +178,7 @@ public void updateWand(Player player) { ItemMeta meta = wand.getItemMeta(); SetupMode mode = session.getCurrentMode(); - meta.setDisplayName(Common.colorize("&6Arena Wand &7(&e" + mode.getDisplayName() + "&7)")); + meta.displayName(Common.legacyToComponent(Common.colorize("&6Arena Wand &7(&e" + mode.getDisplayName() + "&7)"))); List lore = new ArrayList<>(); lore.add(Common.colorize("&7Editing: &a" + arena.getName())); @@ -197,9 +198,9 @@ public void updateWand(Player player) { lore.add(""); lore.add(Common.colorize("&cDrop (Q): &7Exit Setup")); - meta.setLore(lore); + meta.lore(lore.stream().map(Common::legacyToComponent).collect(Collectors.toList())); wand.setItemMeta(meta); - player.getInventory().setItemInHand(wand); + player.getInventory().setItemInMainHand(wand); } } \ No newline at end of file diff --git a/core/src/main/java/dev/nandi0813/practice/manager/arena/setup/SpawnMarkerManager.java b/core/src/main/java/dev/nandi0813/practice/manager/arena/setup/SpawnMarkerManager.java index cc9b02eb..f4a2ddac 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/arena/setup/SpawnMarkerManager.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/arena/setup/SpawnMarkerManager.java @@ -5,7 +5,9 @@ import dev.nandi0813.practice.manager.arena.arenas.interfaces.DisplayArena; import dev.nandi0813.practice.manager.arena.util.ArenaUtil; import dev.nandi0813.practice.moved.ItemCreateUtil; +import dev.nandi0813.practice.util.Common; import lombok.Getter; +import net.kyori.adventure.text.Component; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.entity.ArmorStand; @@ -108,7 +110,7 @@ private ArmorStand createMarker(Location location, String name) { armorStand.setGravity(false); armorStand.setCanPickupItems(false); armorStand.setCustomNameVisible(true); - armorStand.setCustomName(dev.nandi0813.practice.util.StringUtil.CC(name)); + armorStand.customName(Component.text(dev.nandi0813.practice.util.StringUtil.CC(name))); armorStand.setMarker(false); // Don't use marker mode so it has full size armorStand.setBasePlate(false); armorStand.setArms(true); @@ -125,11 +127,11 @@ private ArmorStand createMarker(Location location, String name) { // Set player head (Steve head) for helmet ItemStack playerHead = new ItemStack(Material.PLAYER_HEAD); - armorStand.setHelmet(playerHead); + armorStand.getEquipment().setHelmet(playerHead); // Set red boots for visibility ItemStack boots = ItemCreateUtil.getRedBoots(); - armorStand.setBoots(boots); + armorStand.getEquipment().setBoots(boots); // Track this armor stand markerStandIds.add(armorStand.getUniqueId()); @@ -150,7 +152,7 @@ private ArmorStand createLabelOnly(Location location, String text) { labelStand.setGravity(false); labelStand.setCanPickupItems(false); labelStand.setCustomNameVisible(true); - labelStand.setCustomName(dev.nandi0813.practice.util.StringUtil.CC(text)); + labelStand.customName(Component.text(dev.nandi0813.practice.util.StringUtil.CC(text))); labelStand.setMarker(true); // Tiny marker mode labelStand.setBasePlate(false); labelStand.setSmall(true); // Make it small @@ -333,10 +335,10 @@ public int cleanupOrphanedMarkers(org.bukkit.World world) { for (org.bukkit.entity.Entity entity : world.getEntities()) { if (entity instanceof ArmorStand armorStand) { // Check if this looks like one of our markers but isn't tracked - if (armorStand.getCustomName() != null && + String customName = armorStand.customName() == null ? null : Common.serializeComponentToLegacyString(armorStand.customName()); + if (customName != null && !markerStandIds.contains(armorStand.getUniqueId())) { - String customName = armorStand.getCustomName(); // Check if it matches our marker naming patterns if (customName.contains("Spawn") || customName.contains("Right-click to remove")) { toRemove.add(armorStand); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/arena/util/PortalLocation.java b/core/src/main/java/dev/nandi0813/practice/manager/arena/util/PortalLocation.java index 9a29fad6..3155cda9 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/arena/util/PortalLocation.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/arena/util/PortalLocation.java @@ -29,7 +29,7 @@ public Location getCenter() { public void setPortal() { for (Block block : cuboid.getBlocks()) { - block.setType(Material.END_PORTAL_FRAME); + block.setBlockData(Material.END_PORTAL_FRAME.createBlockData()); block.getState().update(); } } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/backend/BackendUtil.java b/core/src/main/java/dev/nandi0813/practice/manager/backend/BackendUtil.java index 2a40cc3b..a555b9b2 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/backend/BackendUtil.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/backend/BackendUtil.java @@ -70,9 +70,12 @@ public static GUIItem getGuiItem(YamlConfiguration config, String loc) { } try { - Enchantment enchantment = Enchantment.getByName(enchantmentSplit[0]); + Enchantment enchantment = Common.resolveEnchantment(enchantmentSplit[0]); int level = Integer.parseInt(enchantmentSplit[1]); + if (enchantment == null) { + throw new IllegalArgumentException("Enchantment not found: " + enchantmentSplit[0]); + } if (enchantment.getStartLevel() > level) { level = enchantment.getStartLevel(); } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/belowname/BelowNameManager.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/belowname/BelowNameManager.java index de09bec8..3915e734 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/belowname/BelowNameManager.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/belowname/BelowNameManager.java @@ -8,8 +8,8 @@ import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerUpdateScore; import dev.nandi0813.practice.ZonePractice; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Bukkit; -import org.bukkit.ChatColor; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; @@ -29,7 +29,7 @@ public static BelowNameManager getInstance() { } private final String objectiveName = "ZPP_BELOW_NAME"; - private final Component displayName = Component.text(ChatColor.RED + "♥"); + private final Component displayName = Component.text("♥", NamedTextColor.RED); private final Map registeredUsers = Collections.synchronizedMap(new HashMap<>()); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/EventListener.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/EventListener.java index 82cf8ce0..a3e6f5e3 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/EventListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/EventListener.java @@ -8,6 +8,7 @@ import dev.nandi0813.practice.manager.fight.event.events.onevsall.tnttag.TNTTag; import dev.nandi0813.practice.manager.fight.event.interfaces.Event; import dev.nandi0813.practice.manager.fight.event.util.EventUtil; +import dev.nandi0813.practice.manager.fight.util.BlockUtil; import dev.nandi0813.practice.manager.profile.Profile; import dev.nandi0813.practice.manager.profile.ProfileManager; import dev.nandi0813.practice.manager.profile.enums.ProfileStatus; @@ -144,7 +145,7 @@ public void onEnderPearlLaunch(ProjectileLaunchEvent e) { public void onEntityExplode(EntityExplodeEvent e) { Entity entity = e.getEntity(); - if (entity.hasMetadata(TNTTag.TNT_TAG_TNT_METADATA)) { + if (BlockUtil.hasMetadata(entity, TNTTag.TNT_TAG_TNT_METADATA)) { e.blockList().clear(); } } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/duel/brackets/BracketsListener.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/duel/brackets/BracketsListener.java index a9f1d8fb..f8367fef 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/duel/brackets/BracketsListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/duel/brackets/BracketsListener.java @@ -5,11 +5,14 @@ import dev.nandi0813.practice.manager.fight.event.events.duel.interfaces.DuelFight; import dev.nandi0813.practice.manager.fight.event.events.duel.interfaces.DuelListener; import dev.nandi0813.practice.manager.fight.event.interfaces.Event; +import org.bukkit.attribute.Attribute; import org.bukkit.entity.Player; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.ProjectileLaunchEvent; import org.bukkit.event.player.PlayerEggThrowEvent; +import java.util.Objects; + public class BracketsListener extends DuelListener { @Override @@ -34,7 +37,7 @@ public void onEntityDamage(Event event, EntityDamageEvent e) { if (player.getHealth() - e.getFinalDamage() <= 0) { e.setDamage(0); - player.setHealth(player.getMaxHealth()); + player.setHealth(Objects.requireNonNull(player.getAttribute(Attribute.MAX_HEALTH)).getValue()); brackets.killPlayer(player, true); } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/ffa/lms/LMSListener.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/ffa/lms/LMSListener.java index e04e4e2f..0510d984 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/ffa/lms/LMSListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/ffa/lms/LMSListener.java @@ -3,6 +3,7 @@ import dev.nandi0813.practice.manager.fight.event.enums.EventStatus; import dev.nandi0813.practice.manager.fight.event.events.ffa.interfaces.FFAListener; import dev.nandi0813.practice.manager.fight.event.interfaces.Event; +import org.bukkit.attribute.Attribute; import org.bukkit.entity.Player; import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageEvent; @@ -12,6 +13,8 @@ import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerMoveEvent; +import java.util.Objects; + public class LMSListener extends FFAListener { @Override @@ -31,7 +34,7 @@ public void onEntityDamage(Event event, EntityDamageEvent e) { if (player.getHealth() - e.getFinalDamage() <= 0) { e.setDamage(0); - player.setHealth(player.getMaxHealth()); + player.setHealth(Objects.requireNonNull(player.getAttribute(Attribute.MAX_HEALTH)).getValue()); event.killPlayer(player, false); } } @@ -47,10 +50,9 @@ public void onProjectileLaunch(Event event, ProjectileLaunchEvent e) { @Override public void onPlayerMove(Event event, PlayerMoveEvent e) { - if (event instanceof LMS) { + if (event instanceof LMS lms) { if (event.getStatus().equals(EventStatus.LIVE)) { Player player = e.getPlayer(); - LMS lms = (LMS) event; if (!lms.getEventData().getCuboid().contains(player.getLocation())) { lms.killPlayer(player, true); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/ffa/splegg/SpleggListener.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/ffa/splegg/SpleggListener.java index 149a39ab..ef9866d2 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/ffa/splegg/SpleggListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/ffa/splegg/SpleggListener.java @@ -5,6 +5,7 @@ import dev.nandi0813.practice.manager.fight.event.interfaces.Event; import dev.nandi0813.practice.moved.ChangedBlock; import dev.nandi0813.practice.util.Cuboid; +import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.entity.Egg; @@ -75,7 +76,7 @@ public void onPlayerInteract(Event event, PlayerInteractEvent e) { ItemStack item = dev.nandi0813.practice.moved.PlayerUtil.getItemInUse(player, splegg.getEventData().getEggLauncher().getType()); if (item != null) { Egg egg = player.launchProjectile(Egg.class); - egg.setCustomName("SPLEGG"); + egg.customName(Component.text("SPLEGG")); splegg.getShotEggs().replace(player, splegg.getShotEggs().get(player) + 1); } } @@ -87,8 +88,7 @@ public void onPlayerEggThrow(Event event, PlayerEggThrowEvent e) { Player player = e.getPlayer(); Egg egg = e.getEgg(); - if (egg.getCustomName() == null) return; - if (!egg.getCustomName().equals("SPLEGG")) return; + if (!Component.text("SPLEGG").equals(egg.customName())) return; e.setHatching(false); e.setNumHatches((byte) 0); @@ -111,7 +111,7 @@ public void onPlayerEggThrow(Event event, PlayerEggThrowEvent e) { if (materialName.equals("WOOL") || materialName.endsWith("_WOOL")) { splegg.getFightChange().addBlockChange(new ChangedBlock(hitBlock)); - hitBlock.setType(Material.AIR); + hitBlock.setBlockData(Material.AIR.createBlockData()); splegg.getShotBlocks().replace(player, splegg.getShotBlocks().get(player) + 1); } } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/onevsall/tnttag/TNTTag.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/onevsall/tnttag/TNTTag.java index 6b3a2855..dc4a4ec4 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/onevsall/tnttag/TNTTag.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/onevsall/tnttag/TNTTag.java @@ -11,6 +11,7 @@ import dev.nandi0813.practice.manager.fight.event.runnables.DurationRunnable; import dev.nandi0813.practice.manager.fight.event.runnables.StartRunnable; import dev.nandi0813.practice.manager.fight.event.util.EventUtil; +import dev.nandi0813.practice.manager.fight.util.BlockUtil; import dev.nandi0813.practice.manager.server.ServerManager; import dev.nandi0813.practice.util.entityhider.PlayerHider; import dev.nandi0813.practice.util.playerutil.PlayerUtil; @@ -24,7 +25,6 @@ import org.bukkit.entity.Player; import org.bukkit.entity.TNTPrimed; import org.bukkit.inventory.ItemStack; -import org.bukkit.metadata.FixedMetadataValue; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; @@ -319,7 +319,7 @@ private static void setResistancePotion(Player player) { private void sendExplosion(Location location) { TNTPrimed tnt = (TNTPrimed) location.getWorld().spawnEntity(location.subtract(-0.5, 0, -0.5), EntityType.TNT); - tnt.setMetadata(TNT_TAG_TNT_METADATA, new FixedMetadataValue(ZonePractice.getInstance(), this)); + BlockUtil.setMetadata(tnt, TNT_TAG_TNT_METADATA, this); tnt.setFuseTicks(1); } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/setup/EventSetupListener.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/setup/EventSetupListener.java index ad81898a..2fd1bf6b 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/setup/EventSetupListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/setup/EventSetupListener.java @@ -19,11 +19,7 @@ import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.player.*; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import java.util.UUID; +import java.util.*; public class EventSetupListener implements Listener { @@ -74,7 +70,7 @@ public void onInteract(PlayerInteractEvent event) { Action action = event.getAction(); if (player.isSneaking()) { - handleModeSwitch(player, session, eventData, action); + handleModeSwitch(player, session, action); return; } @@ -122,7 +118,7 @@ public void onPlayerDropItem(PlayerDropItemEvent e) { public void onPlayerInteractAtEntity(PlayerInteractAtEntityEvent event) { Player player = event.getPlayer(); - if (!setupManager.isSettingUp(player) || !setupManager.isSetupWand(player.getItemInHand())) { + if (!setupManager.isSettingUp(player) || !setupManager.isSetupWand(player.getInventory().getItemInMainHand())) { return; } @@ -144,7 +140,7 @@ public void onPlayerInteractAtEntity(PlayerInteractAtEntityEvent event) { return; } - int spawnIndex = markerManager.getSpawnIndex(armorStand, eventData); + int spawnIndex = markerManager.getSpawnIndex(armorStand); if (spawnIndex == -1) { player.sendMessage(Common.colorize("&cCouldn't find spawn point for this marker.")); return; @@ -216,7 +212,7 @@ public void onEventEnd(EventEndEvent event) { } } - private void handleModeSwitch(Player player, EventWandSetupManager.SetupSession session, EventData eventData, Action action) { + private void handleModeSwitch(Player player, EventWandSetupManager.SetupSession session, Action action) { if (action == Action.LEFT_CLICK_AIR || action == Action.LEFT_CLICK_BLOCK) { session.setCurrentMode(setupManager.getNextMode(session.getCurrentMode())); } else if (action == Action.RIGHT_CLICK_AIR || action == Action.RIGHT_CLICK_BLOCK) { diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/setup/EventSpawnMarkerManager.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/setup/EventSpawnMarkerManager.java index 3e223570..ee942b80 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/setup/EventSpawnMarkerManager.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/setup/EventSpawnMarkerManager.java @@ -4,9 +4,11 @@ import dev.nandi0813.practice.moved.ItemCreateUtil; import dev.nandi0813.practice.util.Common; import lombok.Getter; +import net.kyori.adventure.text.Component; import org.bukkit.Location; import org.bukkit.entity.ArmorStand; import org.bukkit.entity.EntityType; +import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; import java.util.*; @@ -52,10 +54,11 @@ public void showMarkers(EventData eventData) { .filter(entity -> entity instanceof ArmorStand) .forEach(entity -> { ArmorStand stand = (ArmorStand) entity; + String customName = stand.customName() == null ? null : Common.serializeComponentToLegacyString(stand.customName()); // Only remove armor stands that look like our markers - if (stand.getCustomName() != null && - (stand.getCustomName().contains("Spawn #") || - stand.getCustomName().contains("Right-click to remove"))) { + if (customName != null && + (customName.contains("Spawn #") || + customName.contains("Right-click to remove"))) { stand.remove(); } }); @@ -77,7 +80,7 @@ public void showMarkers(EventData eventData) { // Create second armor stand above for instruction text Location labelLoc = spawnLoc.clone().add(0, 2.3, 0); - ArmorStand labelStand = createLabelOnly(labelLoc, "&7(Right-click to remove)"); + ArmorStand labelStand = createLabelOnly(labelLoc); if (labelStand != null) { markers.add(labelStand); } @@ -106,7 +109,7 @@ private ArmorStand createMarker(Location location, String name) { armorStand.setGravity(false); armorStand.setCanPickupItems(false); armorStand.setCustomNameVisible(true); - armorStand.setCustomName(Common.colorize(name)); + armorStand.customName(Component.text(Common.colorize(name))); // Make the armor stand face the same direction (yaw) as the saved spawn location Location facingLoc = markerLoc.clone(); @@ -116,7 +119,7 @@ private ArmorStand createMarker(Location location, String name) { // Give it a sword to hold (to make it more visible) ItemStack sword = ItemCreateUtil.createItem("&cSpawn Marker", org.bukkit.Material.DIAMOND_SWORD); - armorStand.setItemInHand(sword); + armorStand.getEquipment().setItem(EquipmentSlot.HAND, sword); // Make it invulnerable and persistent armorStand.setRemoveWhenFarAway(false); @@ -128,7 +131,7 @@ private ArmorStand createMarker(Location location, String name) { /** * Creates a small invisible armor stand just for displaying text label */ - private ArmorStand createLabelOnly(Location location, String text) { + private ArmorStand createLabelOnly(Location location) { if (location == null || location.getWorld() == null) return null; ArmorStand labelStand = (ArmorStand) location.getWorld().spawnEntity(location, EntityType.ARMOR_STAND); @@ -136,7 +139,7 @@ private ArmorStand createLabelOnly(Location location, String text) { labelStand.setGravity(false); labelStand.setCanPickupItems(false); labelStand.setCustomNameVisible(true); - labelStand.setCustomName(Common.colorize(text)); + labelStand.customName(Component.text(Common.colorize("&7(Right-click to remove)"))); labelStand.setMarker(true); // Make it small labelStand.setRemoveWhenFarAway(false); @@ -179,13 +182,6 @@ public void updateMarkers(EventData eventData) { showMarkers(eventData); } - /** - * Checks if markers are currently shown for an event - */ - public boolean hasMarkers(EventData eventData) { - return eventMarkers.containsKey(eventData) && !eventMarkers.get(eventData).isEmpty(); - } - /** * Checks if an armor stand is a spawn marker */ @@ -198,22 +194,10 @@ public boolean isMarker(ArmorStand armorStand) { return false; } - /** - * Finds which event a marker armor stand belongs to - */ - public EventData findEventForMarker(ArmorStand armorStand) { - for (Map.Entry> entry : eventMarkers.entrySet()) { - if (entry.getValue().contains(armorStand)) { - return entry.getKey(); - } - } - return null; - } - /** * Gets the spawn index for a given marker armor stand */ - public int getSpawnIndex(ArmorStand armorStand, EventData eventData) { + public int getSpawnIndex(ArmorStand armorStand) { return markerToSpawnIndex.getOrDefault(armorStand.getUniqueId(), -1); } } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/setup/EventWandSetupManager.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/setup/EventWandSetupManager.java index 4c234dc4..4bee5417 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/setup/EventWandSetupManager.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/setup/EventWandSetupManager.java @@ -18,6 +18,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; public class EventWandSetupManager { @@ -48,9 +49,9 @@ public SetupSession(EventData eventData) { private final Map setupSessions = new HashMap<>(); - public boolean startSetup(Player player, EventData eventData) { + public void startSetup(Player player, EventData eventData) { if (eventData.isEnabled()) { - return false; + return; } if (isSettingUp(player)) { @@ -80,7 +81,6 @@ public boolean startSetup(Player player, EventData eventData) { EventSpawnMarkerManager.getInstance().showMarkers(eventData); player.sendMessage(Common.colorize("&aSetup mode started for event: &e" + eventData.getType().getName() + "&a.")); - return true; } public void stopSetup(Player player) { @@ -125,7 +125,7 @@ public List getPlayersSettingUpEvent(EventData eventData) { } public boolean isSetupWand(ItemStack item) { - return item != null && item.getType() == Material.BLAZE_ROD && item.hasItemMeta() && item.getItemMeta().hasDisplayName() && item.getItemMeta().getDisplayName().contains("Event Wand"); + return item != null && item.getType() == Material.BLAZE_ROD && item.hasItemMeta() && Common.getItemDisplayName(item).contains("Event Wand"); } public EventSetupMode getNextMode(EventSetupMode current) { @@ -153,7 +153,7 @@ public void updateWand(Player player) { ItemMeta meta = wand.getItemMeta(); EventSetupMode mode = session.getCurrentMode(); - meta.setDisplayName(Common.colorize("&6Event Wand &7(&e" + mode.getDisplayName() + "&7)")); + meta.displayName(Common.legacyToComponent(Common.colorize("&6Event Wand &7(&e" + mode.getDisplayName() + "&7)"))); List lore = new ArrayList<>(); lore.add(Common.colorize("&7Editing: &a" + eventData.getType().getName())); @@ -172,9 +172,9 @@ public void updateWand(Player player) { lore.add(""); lore.add(Common.colorize("&cDrop (Q): &7Exit Setup")); - meta.setLore(lore); + meta.lore(lore.stream().map(Common::legacyToComponent).collect(Collectors.toList())); wand.setItemMeta(meta); - player.getInventory().setItemInHand(wand); + player.getInventory().setItemInMainHand(wand); } } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/FFAListener.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/FFAListener.java index b5bc8138..ff31eeb6 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/FFAListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/FFAListener.java @@ -39,8 +39,6 @@ import org.bukkit.event.inventory.CraftItemEvent; import org.bukkit.event.player.*; import org.bukkit.inventory.ItemStack; -import org.bukkit.metadata.FixedMetadataValue; -import org.bukkit.metadata.MetadataValue; import static dev.nandi0813.practice.util.PermanentConfig.FIGHT_ENTITY; import static dev.nandi0813.practice.util.PermanentConfig.PLACED_IN_FIGHT; @@ -142,7 +140,7 @@ public void onProjectileLaunch(ProjectileLaunchEvent e) { // ProjectileLaunch won't remove them on ground-hit, hide from players in // other arenas, and schedule a 5-minute vanilla-style self-removal. if (e.getEntity() instanceof Arrow arrow) { - arrow.setMetadata(FIGHT_ENTITY, new FixedMetadataValue(ZonePractice.getInstance(), ffa)); + BlockUtil.setMetadata(arrow, FIGHT_ENTITY, ffa); // Hide from every online player NOT in this FFA for (org.bukkit.entity.Player online : ZonePractice.getInstance().getServer().getOnlinePlayers()) { @@ -210,8 +208,8 @@ public void onBlockBreak(BlockBreakEvent e) { Block block = e.getBlock(); // Blocks placed during the fight — allow breaking (tracking done by BuildBlockListener) - if (block.hasMetadata(PLACED_IN_FIGHT)) { - MetadataValue mv = BlockUtil.getMetadata(block, PLACED_IN_FIGHT); + if (BlockUtil.hasMetadata(block, PLACED_IN_FIGHT)) { + Object mv = BlockUtil.getMetadata(block, PLACED_IN_FIGHT, Object.class); if (ListenerUtil.checkMetaData(mv)) { e.setCancelled(true); } @@ -345,8 +343,9 @@ public void onItemDrop(PlayerDropItemEvent e) { } @EventHandler - public void onItemPickup(PlayerPickupItemEvent e) { - Player player = e.getPlayer(); + public void onItemPickup(EntityPickupItemEvent e) { + if (!(e.getEntity() instanceof Player player)) return; + FFA ffa = FFAManager.getInstance().getFFAByPlayer(player); if (ffa == null) return; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/game/FFA.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/game/FFA.java index 4ad945cf..29116e35 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/game/FFA.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/game/FFA.java @@ -343,7 +343,7 @@ public void removeSpectator(Player player) { public GUIItem getSpectatorMenuItem() { return GUIFile.getGuiItem("GUIS.SPECTATOR-MENU.ICONS.FFA-ICON") .setMaterial(arena.getIcon().getType()) - .setDamage(arena.getIcon().getDurability()) + .setDamage(Common.getItemDamage(arena.getIcon())) .replace("%players%", String.valueOf(players.size())) .replace("%spectators%", String.valueOf(spectators.size())) .replace("%arena%", arena.getDisplayName()) diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/listener/BuildBlockListener.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/listener/BuildBlockListener.java index 2acb5318..2986b875 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/listener/BuildBlockListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/listener/BuildBlockListener.java @@ -1,11 +1,10 @@ package dev.nandi0813.practice.manager.fight.listener; -import dev.nandi0813.practice.ZonePractice; import dev.nandi0813.practice.manager.arena.util.ArenaUtil; +import dev.nandi0813.practice.manager.fight.match.Match; import dev.nandi0813.practice.manager.fight.util.BlockUtil; -import dev.nandi0813.practice.manager.fight.util.ListenerUtil; import dev.nandi0813.practice.manager.fight.util.FightUtil; -import dev.nandi0813.practice.manager.fight.match.Match; +import dev.nandi0813.practice.manager.fight.util.ListenerUtil; import dev.nandi0813.practice.moved.ChangedBlock; import dev.nandi0813.practice.util.interfaces.Spectatable; import org.bukkit.block.Block; @@ -14,8 +13,6 @@ import org.bukkit.event.Listener; import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockPlaceEvent; -import org.bukkit.metadata.FixedMetadataValue; -import org.bukkit.metadata.MetadataValue; import static dev.nandi0813.practice.util.PermanentConfig.PLACED_IN_FIGHT; @@ -73,10 +70,9 @@ public void onBlockBreak(BlockBreakEvent e) { Block block = e.getBlock(); // Case 1: block was placed during the fight — track it for rollback - if (block.hasMetadata(PLACED_IN_FIGHT)) { - MetadataValue mv = BlockUtil.getMetadata(block, PLACED_IN_FIGHT); - if (ListenerUtil.checkMetaData(mv)) return; - if (!(mv.value() instanceof Spectatable spectatable)) return; + if (BlockUtil.hasMetadata(block, PLACED_IN_FIGHT)) { + Spectatable spectatable = BlockUtil.getMetadata(block, PLACED_IN_FIGHT, Spectatable.class); + if (ListenerUtil.checkMetaData(spectatable)) return; if (!spectatable.isBuild()) return; spectatable.addBlockChange(new ChangedBlock(block)); @@ -106,14 +102,14 @@ public void onBlockPlace(BlockPlaceEvent e) { Block block = e.getBlockPlaced(); Spectatable spectatable; - if (block.hasMetadata(PLACED_IN_FIGHT)) { - MetadataValue mv = BlockUtil.getMetadata(block, PLACED_IN_FIGHT); - if (ListenerUtil.checkMetaData(mv) || !(mv.value() instanceof Spectatable s)) return; + if (BlockUtil.hasMetadata(block, PLACED_IN_FIGHT)) { + Spectatable s = BlockUtil.getMetadata(block, PLACED_IN_FIGHT, Spectatable.class); + if (ListenerUtil.checkMetaData(s)) return; spectatable = s; } else { spectatable = getByBlock(block); if (spectatable == null || !spectatable.isBuild()) return; - block.setMetadata(PLACED_IN_FIGHT, new FixedMetadataValue(ZonePractice.getInstance(), spectatable)); + BlockUtil.setMetadata(block, PLACED_IN_FIGHT, spectatable); } spectatable.addBlockChange(new ChangedBlock(e)); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/Match.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/Match.java index 9151ac07..4badf639 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/Match.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/Match.java @@ -563,7 +563,7 @@ public String getFormattedTime() { public GUIItem getSpectatorMenuItem() { return GUIFile.getGuiItem("GUIS.SPECTATOR-MENU.ICONS.MATCH-ICON") .setMaterial(ladder.getIcon().getType()) - .setDamage(ladder.getIcon().getDurability()) + .setDamage(Common.getItemDamage(ladder.getIcon())) .replace("%match_id%", id) .replace("%weight_class%", ((this instanceof Duel && ((Duel) this).isRanked()) ? WeightClass.RANKED.getName() : WeightClass.UNRANKED.getName())) .replace("%match_type%", type.getName(false)) diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/listener/LadderTypeListener.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/listener/LadderTypeListener.java index 2ebac445..6016e056 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/listener/LadderTypeListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/listener/LadderTypeListener.java @@ -51,8 +51,6 @@ import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.player.*; import org.bukkit.inventory.ItemStack; -import org.bukkit.metadata.FixedMetadataValue; -import org.bukkit.metadata.MetadataValue; import static dev.nandi0813.practice.manager.arena.util.ArenaUtil.containsDestroyableBlock; import static dev.nandi0813.practice.util.PermanentConfig.FIGHT_ENTITY; @@ -101,13 +99,11 @@ protected boolean isWithinBuildLimits(Block block, Match match, Player player) { * Extracts match from item metadata. */ protected Match getMatchFromItemMetadata(Item item) { - if (!item.hasMetadata(HIDDEN_ITEM)) return null; + if (!BlockUtil.hasMetadata(item, HIDDEN_ITEM)) return null; - MetadataValue metadataValue = BlockUtil.getMetadata(item, HIDDEN_ITEM); + Match metadataValue = BlockUtil.getMetadata(item, HIDDEN_ITEM, Match.class); if (ListenerUtil.checkMetaData(metadataValue)) return null; - if (!(metadataValue.value() instanceof Match)) return null; - - return (Match) metadataValue.value(); + return metadataValue; } /** @@ -166,7 +162,7 @@ public void onProjectileLaunch(ProjectileLaunchEvent e) { Match match = MatchManager.getInstance().getLiveMatchByPlayer(player); if (match != null && match.getLadder() instanceof dev.nandi0813.practice.manager.ladder.type.Spleef spleef && spleef.isSnowballMode()) { - snowball.setMetadata(FIGHT_ENTITY, new FixedMetadataValue(ZonePractice.getInstance(), match)); + BlockUtil.setMetadata(snowball, FIGHT_ENTITY, match); } } } @@ -176,10 +172,10 @@ public void onProjectileLaunch(ProjectileLaunchEvent e) { @EventHandler public void onProjectileHit(ProjectileHitEvent e) { Entity entity = e.getEntity(); - MetadataValue mv = BlockUtil.getMetadata(entity, FIGHT_ENTITY); + Match mv = BlockUtil.getMetadata(entity, FIGHT_ENTITY, Match.class); if (ListenerUtil.checkMetaData(mv)) return; - if (!(mv.value() instanceof Match match)) return; + Match match = mv; if (match.getLadder() instanceof LadderHandle ladderHandle) { ladderHandle.handleEvents(e, match); @@ -242,8 +238,8 @@ public void onBlockBreak(BlockBreakEvent e) { Block block = e.getBlock(); // Blocks placed during the fight — allow breaking (tracking done by BuildBlockListener) - if (block.hasMetadata(PLACED_IN_FIGHT)) { - MetadataValue mv = BlockUtil.getMetadata(block, PLACED_IN_FIGHT); + if (BlockUtil.hasMetadata(block, PLACED_IN_FIGHT)) { + Object mv = BlockUtil.getMetadata(block, PLACED_IN_FIGHT, Object.class); if (ListenerUtil.checkMetaData(mv)) { e.setCancelled(true); } @@ -443,7 +439,7 @@ public void onItemDrop(PlayerDropItemEvent e) { Entity entity = e.getItemDrop(); match.addEntityChange(entity); - entity.setMetadata(HIDDEN_ITEM, new FixedMetadataValue(ZonePractice.getInstance(), match)); + BlockUtil.setMetadata(entity, HIDDEN_ITEM, match); } @EventHandler @@ -521,7 +517,7 @@ public void onPlayerShootBow(EntityShootBowEvent e) { // register it for rollback cleanup (and hiding from players in other matches), // and schedule a 5-minute vanilla-style self-removal. if (e.getProjectile() instanceof org.bukkit.entity.Arrow arrow) { - arrow.setMetadata(FIGHT_ENTITY, new FixedMetadataValue(ZonePractice.getInstance(), match)); + BlockUtil.setMetadata(arrow, FIGHT_ENTITY, match); match.addEntityChange(arrow); // hides from other-arena players + rollback tracking } } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/type/duel/Duel.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/type/duel/Duel.java index b086d17a..adf5d80e 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/type/duel/Duel.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/type/duel/Duel.java @@ -52,7 +52,7 @@ public Duel(Ladder ladder, Arena arena, List players, boolean ranked, in this.type = MatchType.DUEL; this.ranked = ranked; - this.player1 = players.get(0); + this.player1 = players.getFirst(); this.playerProfiles.put(player1, ProfileManager.getInstance().getProfile(player1)); NametagManager.getInstance().setNametag(player1, TeamEnum.TEAM1.getPrefix(), TeamEnum.TEAM1.getNameColor(), TeamEnum.TEAM1.getSuffix(), 20); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/util/MatchUtil.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/util/MatchUtil.java index 1364de77..3f250ad1 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/util/MatchUtil.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/util/MatchUtil.java @@ -91,7 +91,7 @@ public static void safePlayerTeleportBlock(Block block) { if (block == null) return; if (!block.getWorld().isChunkLoaded(block.getX() >> 4, block.getZ() >> 4)) return; if (block.getType().equals(Material.AIR)) - block.setType(Material.BEDROCK); + block.setBlockData(Material.BEDROCK.createBlockData()); } public static Player getBoxingTopPlayer(PartyFFA partyFFA, int rank) { diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/util/BlockUtil.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/util/BlockUtil.java index 006f8c9a..6163fd1f 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/util/BlockUtil.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/util/BlockUtil.java @@ -1,13 +1,12 @@ package dev.nandi0813.practice.manager.fight.util; -import dev.nandi0813.practice.ZonePractice; import dev.nandi0813.practice.manager.fight.ffa.game.FFA; import dev.nandi0813.practice.manager.fight.match.Match; import dev.nandi0813.practice.moved.ChangedBlock; import dev.nandi0813.practice.util.interfaces.Spectatable; import org.bukkit.block.Block; -import org.bukkit.metadata.MetadataValue; -import org.bukkit.metadata.Metadatable; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Item; public enum BlockUtil { ; @@ -38,13 +37,40 @@ public static void breakBlock(Spectatable spectatable, Block block) { } } - public static MetadataValue getMetadata(Metadatable metadatable, String tag) { - for (MetadataValue mv : metadatable.getMetadata(tag)) { - if (mv != null && mv.getOwningPlugin() == ZonePractice.getInstance()) { - return mv; - } - } - return null; + public static void setMetadata(Block block, String tag, Object value) { + PersistentTagUtil.setBlockTag(block, tag, value); + } + + public static void setMetadata(Entity entity, String tag, Object value) { + PersistentTagUtil.setEntityTag(entity, tag, value); + } + + public static T getMetadata(Block block, String tag, Class type) { + return PersistentTagUtil.getBlockTag(block, tag, type); + } + + public static T getMetadata(Entity entity, String tag, Class type) { + return PersistentTagUtil.getEntityTag(entity, tag, type); + } + + public static T getMetadata(Item item, String tag, Class type) { + return PersistentTagUtil.getTag(item, tag, type); + } + + public static boolean hasMetadata(Block block, String tag) { + return PersistentTagUtil.hasBlockTag(block, tag); + } + + public static boolean hasMetadata(Entity entity, String tag) { + return PersistentTagUtil.hasEntityTag(entity, tag); + } + + public static boolean hasMetadata(Item item, String tag) { + return PersistentTagUtil.hasTag(item, tag); + } + + public static void clearMetadata(Block block, String tag) { + PersistentTagUtil.clearBlockTag(block, tag); } } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/util/ListenerUtil.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/util/ListenerUtil.java index 27e7ef28..b3d1ffe2 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/util/ListenerUtil.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/util/ListenerUtil.java @@ -5,7 +5,6 @@ import dev.nandi0813.practice.manager.fight.match.Match; import dev.nandi0813.practice.manager.fight.match.enums.RoundStatus; import org.bukkit.entity.Player; -import org.bukkit.metadata.MetadataValue; public enum ListenerUtil { ; @@ -25,7 +24,7 @@ public static int getCalculatedBuildLimit(BasicArena arena) { buildLimit = arena.getBuildMaxValue(); else { if (arena instanceof FFAArena) { - buildLimit = arena.getFfaPositions().get(0).getBlockY() + arena.getBuildMaxValue(); + buildLimit = arena.getFfaPositions().getFirst().getBlockY() + arena.getBuildMaxValue(); } else { buildLimit = arena.getPosition1().getBlockY() + arena.getBuildMaxValue(); } @@ -34,8 +33,8 @@ public static int getCalculatedBuildLimit(BasicArena arena) { return buildLimit; } - public static boolean checkMetaData(MetadataValue metadataValue) { - return metadataValue == null || metadataValue.value() == null; + public static boolean checkMetaData(Object metadataValue) { + return metadataValue == null; } } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/util/PersistentTagUtil.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/util/PersistentTagUtil.java new file mode 100644 index 00000000..68e507eb --- /dev/null +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/util/PersistentTagUtil.java @@ -0,0 +1,100 @@ +package dev.nandi0813.practice.manager.fight.util; + +import dev.nandi0813.practice.ZonePractice; +import org.bukkit.NamespacedKey; +import org.bukkit.block.Block; +import org.bukkit.entity.Entity; +import org.bukkit.persistence.PersistentDataContainer; +import org.bukkit.persistence.PersistentDataHolder; +import org.bukkit.persistence.PersistentDataType; + +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; + +/** + * Runtime tag bridge that stores identifiers in PersistentDataContainer and keeps + * associated live objects in-memory for the current server session. + */ +public enum PersistentTagUtil { + ; + + private static final Map OBJECT_REGISTRY = new ConcurrentHashMap<>(); + private static final Map BLOCK_TAGS = new ConcurrentHashMap<>(); + + private static NamespacedKey key(String tag) { + return new NamespacedKey(ZonePractice.getInstance(), "zpp_" + tag.toLowerCase()); + } + + private static String register(Object value) { + String token = UUID.randomUUID().toString(); + OBJECT_REGISTRY.put(token, value); + return token; + } + + public static void setTag(PersistentDataHolder holder, String tag, Object value) { + String token = register(value); + holder.getPersistentDataContainer().set(key(tag), PersistentDataType.STRING, token); + } + + public static T getTag(PersistentDataHolder holder, String tag, Class type) { + PersistentDataContainer container = holder.getPersistentDataContainer(); + String token = container.get(key(tag), PersistentDataType.STRING); + if (token == null) { + return null; + } + + Object value = OBJECT_REGISTRY.get(token); + if (!type.isInstance(value)) { + return null; + } + return type.cast(value); + } + + public static boolean hasTag(PersistentDataHolder holder, String tag) { + return holder.getPersistentDataContainer().has(key(tag), PersistentDataType.STRING); + } + + public static void setBlockTag(Block block, String tag, Object value) { + String blockKey = blockKey(block, tag); + BLOCK_TAGS.put(blockKey, register(value)); + } + + public static T getBlockTag(Block block, String tag, Class type) { + String token = BLOCK_TAGS.get(blockKey(block, tag)); + if (token == null) { + return null; + } + + Object value = OBJECT_REGISTRY.get(token); + if (!type.isInstance(value)) { + return null; + } + return type.cast(value); + } + + public static boolean hasBlockTag(Block block, String tag) { + return BLOCK_TAGS.containsKey(blockKey(block, tag)); + } + + public static void clearBlockTag(Block block, String tag) { + BLOCK_TAGS.remove(blockKey(block, tag)); + } + + public static void setEntityTag(Entity entity, String tag, Object value) { + setTag(entity, tag, value); + } + + public static T getEntityTag(Entity entity, String tag, Class type) { + return getTag(entity, tag, type); + } + + public static boolean hasEntityTag(Entity entity, String tag) { + return hasTag(entity, tag); + } + + private static String blockKey(Block block, String tag) { + return block.getWorld().getUID() + ":" + block.getX() + ":" + block.getY() + ":" + block.getZ() + ":" + tag; + } +} + diff --git a/core/src/main/java/dev/nandi0813/practice/manager/gui/GUIItem.java b/core/src/main/java/dev/nandi0813/practice/manager/gui/GUIItem.java index b8371ca1..839f0e6d 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/gui/GUIItem.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/gui/GUIItem.java @@ -10,12 +10,11 @@ import org.bukkit.enchantments.Enchantment; import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.Damageable; import org.bukkit.inventory.meta.ItemMeta; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; +import java.util.stream.Collectors; public class GUIItem { @@ -91,12 +90,20 @@ public GUIItem(ItemStack itemStack) { ItemMeta itemMeta = itemStack.getItemMeta(); if (itemMeta != null) { - this.name = itemMeta.getDisplayName(); - this.lore = itemMeta.getLore(); + if (itemMeta.hasDisplayName() && itemMeta.displayName() != null) { + this.name = Common.serializeComponentToLegacyString(itemMeta.displayName()); + } + if (itemMeta.lore() != null) { + this.lore = Objects.requireNonNull(itemMeta.lore()).stream() + .map(Common::serializeComponentToLegacyString) + .collect(Collectors.toList()); + } this.glowing = itemMeta.hasEnchants(); + if (itemMeta instanceof Damageable damageable) { + this.damage = (short) damageable.getDamage(); + } } this.amount = itemStack.getAmount(); - this.damage = itemStack.getDurability(); this.material = itemStack.getType(); // Preserve the full ItemStack so special meta (e.g. PotionMeta) is not lost this.baseItemStack = itemStack.clone(); @@ -130,7 +137,7 @@ public ItemStack get() { } else if (damage == -1) { itemStack = new ItemStack(material, amount); } else { - itemStack = new ItemStack(material, amount, damage); + itemStack = new ItemStack(material, amount); } if (durability > 0) { @@ -140,12 +147,19 @@ public ItemStack get() { ItemMeta itemMeta = itemStack.getItemMeta(); if (itemMeta != null) { + if (damage != -1 && itemMeta instanceof Damageable damageable) { + damageable.setDamage(damage); + itemMeta = damageable; + } + if (name != null) { - itemMeta.setDisplayName(StringUtil.CC(name)); + itemMeta.displayName(Common.legacyToComponent(StringUtil.CC(name))); } if (lore != null) { - itemMeta.setLore(StringUtil.CC(lore)); + itemMeta.lore(StringUtil.CC(lore).stream() + .map(Common::legacyToComponent) + .collect(Collectors.toList())); } if (glowing && enchantments.isEmpty()) { @@ -182,17 +196,24 @@ public ItemStack getForPlayerKit() { } else if (damage == -1) { itemStack = new ItemStack(material, amount); } else { - itemStack = new ItemStack(material, amount, damage); + itemStack = new ItemStack(material, amount); } ItemMeta itemMeta = itemStack.getItemMeta(); if (itemMeta != null) { + if (damage != -1 && itemMeta instanceof Damageable damageable) { + damageable.setDamage(damage); + itemMeta = damageable; + } + if (name != null) { - itemMeta.setDisplayName(StringUtil.CC(name)); + itemMeta.displayName(Common.legacyToComponent(StringUtil.CC(name))); } if (lore != null) { - itemMeta.setLore(StringUtil.CC(lore)); + itemMeta.lore(StringUtil.CC(lore).stream() + .map(Common::legacyToComponent) + .collect(Collectors.toList())); } itemStack.setItemMeta(itemMeta); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/MatchStatsGui.java b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/MatchStatsGui.java index b614c902..512b72e5 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/MatchStatsGui.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/MatchStatsGui.java @@ -7,6 +7,7 @@ import dev.nandi0813.practice.manager.fight.util.Stats.Statistic; import dev.nandi0813.practice.manager.gui.GUI; import dev.nandi0813.practice.manager.gui.GUIType; +import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.InventoryUtil; import dev.nandi0813.practice.util.StringUtil; import org.apache.commons.lang3.StringUtils; @@ -59,9 +60,9 @@ public void update() { while (stats.containsKey(round)) { String title; if (match.getLadder().getRounds() == 1) - title = GUIFile.getString("GUIS.MATCH-STATISTICS.TITLE.SINGLE-ROUND").replace("%player%", player.getName()); + title = GUIFile.getString("GUIS.MATCH-STATISTICS.TITLE.SINGLE-ROUND").replace("%player%", Objects.requireNonNull(player.getName())); else - title = GUIFile.getString("GUIS.MATCH-STATISTICS.TITLE.MULTIPLE-ROUND").replace("%player%", player.getName()).replace("%round%", String.valueOf(round)); + title = GUIFile.getString("GUIS.MATCH-STATISTICS.TITLE.MULTIPLE-ROUND").replace("%player%", Objects.requireNonNull(player.getName())).replace("%round%", String.valueOf(round)); gui.put(round, InventoryUtil.createInventory(title, 6)); Statistic roundStatistic = stats.get(round); @@ -78,7 +79,7 @@ public void update() { if (i < 27) inventory.setItem(i, inventoryContent.get(i + 9)); else inventory.setItem(i, firstLine.get(i - 27)); - if (inventoryContent.get(i) != null && inventoryContent.get(i).getType().equals(Material.POTION) && inventoryContent.get(i).getDurability() == 16421) + if (inventoryContent.get(i) != null && inventoryContent.get(i).getType().equals(Material.POTION) && Common.getItemDamage(inventoryContent.get(i)) == 16421) healthPotionsLeft++; } @@ -143,7 +144,7 @@ private ItemStack getEffectItem(Statistic roundStatistic) { List effects = new ArrayList<>(); for (PotionEffect potionEffect : roundStatistic.getEndPotionEffects()) { effects.add(GUIFile.getString("GUIS.MATCH-STATISTICS.ICONS.EFFECT.HAS-EFFECT.FORMAT") - .replace("%name%", StringUtils.capitalize(potionEffect.getType().getName().replace("_", " ").toLowerCase())) + .replace("%name%", StringUtils.capitalize(potionEffect.getType().getKey().getKey().replace("_", " ").toLowerCase())) .replace("%amplifier%", String.valueOf(potionEffect.getAmplifier() + 1)) .replace("%time%", StringUtil.formatMillisecondsToMinutes((potionEffect.getDuration() / 20) * 1000L)) ); @@ -160,7 +161,7 @@ private ItemStack getEffectItem(Statistic roundStatistic) { ItemStack item = GUIFile.getGuiItem("GUIS.MATCH-STATISTICS.ICONS.EFFECT.HAS-EFFECT.ICON").get(); ItemMeta itemMeta = item.getItemMeta(); - itemMeta.setLore(lore); + itemMeta.lore(StringUtil.CC(lore).stream().map(Common::legacyToComponent).toList()); item.setItemMeta(itemMeta); return item; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/PlayerInvGui.java b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/PlayerInvGui.java index 2c74c6fa..a968bea0 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/PlayerInvGui.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/PlayerInvGui.java @@ -90,7 +90,7 @@ private ItemStack getEffectItem() { List effects = new ArrayList<>(); for (PotionEffect potionEffect : target.getActivePotionEffects()) { effects.add(GUIFile.getString("GUIS.PLAYER-INVENTORY.ICONS.EFFECT.FORMAT") - .replace("%name%", StringUtils.capitalize(potionEffect.getType().getName().replace("_", " ").toLowerCase())) + .replace("%name%", StringUtils.capitalize(potionEffect.getType().getKey().getKey().replace("_", " ").toLowerCase())) .replace("%amplifier%", String.valueOf(potionEffect.getAmplifier() + 1)) .replace("%time%", StringUtil.formatMillisecondsToMinutes((potionEffect.getDuration() / 20) * 1000L)) ); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/arena/ArenaCreateGui.java b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/arena/ArenaCreateGui.java index 5d50566a..1c1118cd 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/arena/ArenaCreateGui.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/arena/ArenaCreateGui.java @@ -63,7 +63,7 @@ public void update() { for (ArenaType type : ArenaType.values()) { ItemStack item = ItemCreateUtil.createItem("&e" + type.getName(), type.getIcon()); ItemMeta itemMeta = item.getItemMeta(); - itemMeta.setLore(type.getDescription()); + itemMeta.lore(type.getDescription().stream().map(Common::legacyToComponent).toList()); item.setItemMeta(itemMeta); int slot = inventory.firstEmpty(); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/customladder/premadecustom/CustomLadderEditorGui.java b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/customladder/premadecustom/CustomLadderEditorGui.java index c3cab69c..82ee92be 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/customladder/premadecustom/CustomLadderEditorGui.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/customladder/premadecustom/CustomLadderEditorGui.java @@ -21,6 +21,7 @@ import dev.nandi0813.practice.util.cooldown.CooldownObject; import dev.nandi0813.practice.util.cooldown.PlayerCooldown; import lombok.Getter; +import net.kyori.adventure.text.Component; import org.apache.commons.lang3.StringUtils; import org.bukkit.Bukkit; import org.bukkit.Material; @@ -120,10 +121,7 @@ public void update() { if (ladder.getCustomKitExtraItems().get(ranked) != null) { for (ItemStack item : ladder.getCustomKitExtraItems().get(ranked)) { - if (item != null) - inventory.setItem(inventory.firstEmpty(), item); - else - inventory.setItem(inventory.firstEmpty(), GUIManager.getDUMMY_ITEM()); + inventory.setItem(inventory.firstEmpty(), Objects.requireNonNullElseGet(item, GUIManager::getDUMMY_ITEM)); } } @@ -261,7 +259,7 @@ private ItemStack getEffectItem() { List effects = new ArrayList<>(); for (PotionEffect potionEffect : ladder.getKitData().getEffects()) { effects.add(GUIFile.getString("GUIS.KIT-EDITOR.KIT-EDITOR.ICONS.HAS-EFFECT.FORMAT") - .replace("%name%", StringUtils.capitalize(potionEffect.getType().getName().replace("_", " ").toLowerCase())) + .replace("%name%", StringUtils.capitalize(potionEffect.getType().getKey().getKey().replace("_", " ").toLowerCase())) .replace("%amplifier%", String.valueOf(potionEffect.getAmplifier() + 1)) .replace("%time%", StringUtil.formatMillisecondsToMinutes((potionEffect.getDuration() / 20) * 1000L)) ); @@ -272,11 +270,12 @@ private ItemStack getEffectItem() { ItemCreateUtil.hideItemFlags(effectItemMeta); List lore = new ArrayList<>(); - for (String line : Objects.requireNonNull(effectItem.getItemMeta().getLore())) { + for (Component lineComponent : Objects.requireNonNull(effectItem.getItemMeta().lore())) { + String line = Common.serializeComponentToLegacyString(lineComponent); if (line.contains("%effects%")) lore.addAll(effects); else lore.add(line); } - effectItemMeta.setLore(lore); + effectItemMeta.lore(lore.stream().map(Common::legacyToComponent).toList()); effectItem.setItemMeta(effectItemMeta); return effectItem; } else { diff --git a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/customladder/premadecustom/CustomLadderSelectorGui.java b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/customladder/premadecustom/CustomLadderSelectorGui.java index 147f6f64..cbf92357 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/customladder/premadecustom/CustomLadderSelectorGui.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/customladder/premadecustom/CustomLadderSelectorGui.java @@ -48,10 +48,9 @@ public void update() { ItemStack icon = ladder.getIcon(); ItemMeta iconMeta = icon.getItemMeta(); if (iconMeta != null) { - iconMeta.setDisplayName(GUIFile.getString("GUIS.KIT-EDITOR.LADDER-SELECTOR.ICONS.NAME") + iconMeta.displayName(Common.legacyToComponent(GUIFile.getString("GUIS.KIT-EDITOR.LADDER-SELECTOR.ICONS.NAME") .replace("%ladder%", ladder.getDisplayName()) - .replace("%ladderOriginal%", ladder.getName()) - ); + .replace("%ladderOriginal%", ladder.getName()))); ItemCreateUtil.hideItemFlags(iconMeta); List lore = new ArrayList<>(); @@ -61,7 +60,7 @@ public void update() { .replace("%ladderOriginal%", ladder.getName())) ; } - iconMeta.setLore(lore); + iconMeta.lore(lore.stream().map(Common::legacyToComponent).toList()); icon.setItemMeta(iconMeta); } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/ladder/LadderCreateGui.java b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/ladder/LadderCreateGui.java index 57766a9a..8f4e15c4 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/ladder/LadderCreateGui.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/ladder/LadderCreateGui.java @@ -56,7 +56,7 @@ public void update() { for (LadderType type : LadderType.values()) { ItemStack item = ItemCreateUtil.createItem("&e" + type.getName(), type.getIcon()); ItemMeta itemMeta = item.getItemMeta(); - itemMeta.setLore(StringUtil.CC(type.getDescription())); + itemMeta.lore(StringUtil.CC(type.getDescription()).stream().map(Common::legacyToComponent).toList()); item.setItemMeta(itemMeta); int slot = inventory.firstEmpty(); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/ladder/LadderPreviewGui.java b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/ladder/LadderPreviewGui.java index 2be9ff7c..64818c06 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/ladder/LadderPreviewGui.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/ladder/LadderPreviewGui.java @@ -87,7 +87,7 @@ private ItemStack getEffectItem() { List effects = new ArrayList<>(); for (PotionEffect potionEffect : kitData.getEffects()) { effects.add(GUIFile.getString("GUIS.LADDER-PREVIEW.ICONS.HAS-EFFECT.FORMAT") - .replace("%name%", StringUtils.capitalize(potionEffect.getType().getName().replace("_", " ").toLowerCase())) + .replace("%name%", StringUtils.capitalize(potionEffect.getType().getKey().getKey().replace("_", " ").toLowerCase())) .replace("%amplifier%", String.valueOf(potionEffect.getAmplifier() + 1)) .replace("%time%", StringUtil.formatMillisecondsToMinutes((potionEffect.getDuration() / 20) * 1000L)) ); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/leaderboard/LbGuiUtil.java b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/leaderboard/LbGuiUtil.java index 937beafb..6f9f102e 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/leaderboard/LbGuiUtil.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/leaderboard/LbGuiUtil.java @@ -22,6 +22,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Objects; public enum LbGuiUtil { ; @@ -29,14 +30,18 @@ public enum LbGuiUtil { // if it says not used don't listen to it, buggy public static ItemStack createProfileStatItem(Profile profile, Player opener) { String playerName = profile.getPlayer().getName(); + if (playerName == null) { + playerName = "Unknown"; + } ItemStack itemStack = ItemCreateUtil.getPlayerHead(profile.getPlayer()); ItemMeta itemMeta = itemStack.getItemMeta(); String displayName; List lore = new ArrayList<>(); if (opener.equals(profile.getPlayer())) { - for (String line : GUIFile.getStringList("GUIS.STATISTICS.SELECTOR.ICONS.OWN-PLAYER-STATS.LORE")) + for (String line : GUIFile.getStringList("GUIS.STATISTICS.SELECTOR.ICONS.OWN-PLAYER-STATS.LORE")) { lore.add(line.replace("%player%", playerName)); + } displayName = GUIFile.getString("GUIS.STATISTICS.SELECTOR.ICONS.OWN-PLAYER-STATS.NAME").replace("%player%", playerName); } else { @@ -46,8 +51,8 @@ public static ItemStack createProfileStatItem(Profile profile, Player opener) { displayName = GUIFile.getString("GUIS.STATISTICS.SELECTOR.ICONS.PLAYER-STATS.NAME").replace("%target%", playerName); } - itemMeta.setDisplayName(StringUtil.CC(displayName)); - itemMeta.setLore(StringUtil.CC(lore)); + itemMeta.displayName(Common.legacyToComponent(StringUtil.CC(displayName))); + itemMeta.lore(StringUtil.CC(lore).stream().map(Common::legacyToComponent).toList()); ItemCreateUtil.hideItemFlags(itemMeta); itemStack.setItemMeta(itemMeta); @@ -111,8 +116,8 @@ public static ItemStack createProfileAllStatItem(Profile profile) { ); } - itemMeta.setDisplayName(GUIFile.getString("GUIS.STATISTICS.PLAYER-STATISTICS.ICONS.ALL-STAT.NAME").replace("%player%", profile.getPlayer().getName())); - itemMeta.setLore(StringUtil.CC(lore)); + itemMeta.displayName(Common.legacyToComponent(GUIFile.getString("GUIS.STATISTICS.PLAYER-STATISTICS.ICONS.ALL-STAT.NAME").replace("%player%", Objects.requireNonNull(profile.getPlayer().getName())))); + itemMeta.lore(StringUtil.CC(lore).stream().map(Common::legacyToComponent).toList()); itemStack.setItemMeta(itemMeta); return itemStack; } @@ -144,7 +149,7 @@ public static ItemStack createEloLbItem(NormalLadder ladder) { topStrings.add(StringUtil.CC(GUIFile.getString("GUIS.STATISTICS.ELO-LEADERBOARD.ICONS.LADDER-LEADERBOARD.LORE.FORMAT") .replace("%number%", String.valueOf(i)) - .replace("%player%", target.getName()) + .replace("%player%", Objects.requireNonNull(target.getName())) .replace("%ladder_elo%", String.valueOf(stat)) .replace("%division%", (targetProfile.getStats().getDivision() != null ? Common.mmToNormal(targetProfile.getStats().getDivision().getFullName()) : "")) .replace("%division_short%", (targetProfile.getStats().getDivision() != null ? Common.mmToNormal(targetProfile.getStats().getDivision().getShortName()) : "")) @@ -199,7 +204,7 @@ public static ItemStack createGlobalEloLb() { .replace("%number%", String.valueOf(i)) .replace("%division%", (division != null ? Common.mmToNormal(division.getFullName()) : "")) .replace("%division_short%", (division != null ? Common.mmToNormal(division.getShortName()) : "")) - .replace("%player%", target.getName()) + .replace("%player%", Objects.requireNonNull(target.getName())) .replace("%global_elo%", String.valueOf(stat)) )); } else @@ -246,7 +251,7 @@ public static ItemStack createWinLbItem(NormalLadder ladder) { topStrings.add(StringUtil.CC(GUIFile.getString("GUIS.STATISTICS.WIN-LEADERBOARD.ICONS.LADDER-LEADERBOARD.LORE.FORMAT") .replace("%number%", String.valueOf(i)) - .replace("%player%", target.getName()) + .replace("%player%", Objects.requireNonNull(target.getName())) .replace("%ladder_win%", String.valueOf(stat)) .replace("%division%", (targetProfile.getStats().getDivision() != null ? Common.mmToNormal(targetProfile.getStats().getDivision().getFullName()) : "")) .replace("%division_short%", (targetProfile.getStats().getDivision() != null ? Common.mmToNormal(targetProfile.getStats().getDivision().getShortName()) : "")) @@ -301,7 +306,7 @@ public static ItemStack createGlobalWinLb() { .replace("%number%", String.valueOf(i)) .replace("%division%", (division != null ? Common.mmToNormal(division.getFullName()) : "")) .replace("%division_short%", (division != null ? Common.mmToNormal(division.getShortName()) : "")) - .replace("%player%", target.getName()) + .replace("%player%", Objects.requireNonNull(target.getName())) .replace("%global_win%", String.valueOf(stat)) )); } else diff --git a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/party/OtherPartiesGui.java b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/party/OtherPartiesGui.java index d0aae902..8870dcc3 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/party/OtherPartiesGui.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/party/OtherPartiesGui.java @@ -132,11 +132,10 @@ public ItemStack getPartyItem(Party party) { lore.add(line); } - itemMeta.setDisplayName(GUIFile.getString("GUIS.PARTY.OTHER-PARTIES.ICONS.PARTY-ITEM.NAME") + itemMeta.displayName(Common.legacyToComponent(GUIFile.getString("GUIS.PARTY.OTHER-PARTIES.ICONS.PARTY-ITEM.NAME") .replace("%leader%", party.getLeader().getName()) - .replace("%partySize%", String.valueOf(party.getMembers().size())) - ); - itemMeta.setLore(lore); + .replace("%partySize%", String.valueOf(party.getMembers().size())))); + itemMeta.lore(lore.stream().map(Common::legacyToComponent).toList()); ItemCreateUtil.hideItemFlags(itemMeta); itemStack.setItemMeta(itemMeta); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/profile/ProfileSetupGui.java b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/profile/ProfileSetupGui.java index 58c30c6d..c6e922c8 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/profile/ProfileSetupGui.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/profile/ProfileSetupGui.java @@ -29,6 +29,8 @@ import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; +import java.util.Objects; + public class ProfileSetupGui extends GUI { private final Profile profile; @@ -39,7 +41,7 @@ public ProfileSetupGui(Profile profile) { this.profile = profile; this.profileLadderStats = new ProfileLadderStats(profile, this); - this.gui.put(1, InventoryUtil.createInventory(GUIFile.getString("GUIS.PLAYER-INFORMATION.MAIN-PAGE.TITLE").replace("%player%", profile.getPlayer().getName()), 4)); + this.gui.put(1, InventoryUtil.createInventory(GUIFile.getString("GUIS.PLAYER-INFORMATION.MAIN-PAGE.TITLE").replace("%player%", Objects.requireNonNull(profile.getPlayer().getName())), 4)); build(); } @@ -219,17 +221,19 @@ private static ItemStack getOnlineItem(Profile profile) { if (profile.getStatus().equals(ProfileStatus.OFFLINE) || player == null) return GUIFile.getGuiItem("GUIS.PLAYER-INFORMATION.MAIN-PAGE.ICONS.ONLINE-INFO.PLAYER-OFFLINE").get(); - else + else { + player.playerListName(); return GUIFile.getGuiItem("GUIS.PLAYER-INFORMATION.MAIN-PAGE.ICONS.ONLINE-INFO.PLAYER-ONLINE") .replace("%world%", player.getWorld().getName()) .replace("%gamemode%", player.getGameMode().name()) .replace("%flying%", String.valueOf(player.isFlying())) - .replace("%tablist_name%", player.getPlayerListName()) + .replace("%tablist_name%", Common.serializeComponentToLegacyString(player.playerListName())) .replace("%health%", String.valueOf(player.getHealth())) .replace("%food%", String.valueOf(player.getFoodLevel())) .replace("%hit_delay%", String.valueOf(player.getMaximumNoDamageTicks())) .replace("%ping%", String.valueOf(dev.nandi0813.practice.moved.PlayerUtil.getPing(player))) .get(); + } } private static ItemStack getGameItem(Profile profile) { diff --git a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/queue/QueueSelectorGui.java b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/queue/QueueSelectorGui.java index 8081c6eb..eab9b3b4 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/queue/QueueSelectorGui.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/queue/QueueSelectorGui.java @@ -12,6 +12,7 @@ import dev.nandi0813.practice.manager.ladder.LadderManager; import dev.nandi0813.practice.manager.ladder.abstraction.normal.NormalLadder; import dev.nandi0813.practice.manager.queue.QueueManager; +import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.InventoryUtil; import org.bukkit.Bukkit; import org.bukkit.Material; @@ -23,11 +24,7 @@ import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.scheduler.BukkitTask; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; +import java.util.*; public abstract class QueueSelectorGui extends GUI { @@ -41,14 +38,6 @@ public abstract class QueueSelectorGui extends GUI { private final Map firstCategoryLadderSlots = new HashMap<>(); private final Map secondCategoryLadderSlots = new HashMap<>(); - /** - * Stores the unresolved template lore for each active ladder slot so the - * real-time ticker can apply fresh %in_queue% / %in_fight% values without - * rebuilding the entire inventory layout. - * - * key = pageId (1 or 2) - * value = map of slot → template ItemStack (with un-replaced placeholders) - */ private final Map> templateItems = new HashMap<>(); private long lastUpdateTime = -1L; @@ -182,21 +171,23 @@ private void tickUpdate() { // Replace dynamic placeholders in display name if (meta.hasDisplayName()) { - meta.setDisplayName(meta.getDisplayName() + String replaced = Common.serializeComponentToLegacyString(meta.displayName()) .replace("%in_queue%", String.valueOf(inQueue)) - .replace("%in_fight%", String.valueOf(inFight))); + .replace("%in_fight%", String.valueOf(inFight)); + meta.displayName(Common.legacyToComponent(replaced)); } // Replace dynamic placeholders in lore - List lore = meta.getLore(); + List lore = meta.lore(); if (lore != null) { List newLore = new ArrayList<>(); - for (String line : lore) { + for (net.kyori.adventure.text.Component lineComponent : lore) { + String line = Common.serializeComponentToLegacyString(lineComponent); newLore.add(line .replace("%in_queue%", String.valueOf(inQueue)) .replace("%in_fight%", String.valueOf(inFight))); } - meta.setLore(newLore); + meta.lore(newLore.stream().map(Common::legacyToComponent).toList()); } updated.setItemMeta(meta); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/gui/setup/arena/ArenaSummaryGui.java b/core/src/main/java/dev/nandi0813/practice/manager/gui/setup/arena/ArenaSummaryGui.java index b9a7345b..67524578 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/gui/setup/arena/ArenaSummaryGui.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/gui/setup/arena/ArenaSummaryGui.java @@ -10,6 +10,7 @@ import dev.nandi0813.practice.manager.gui.GUIItem; import dev.nandi0813.practice.manager.gui.GUIManager; import dev.nandi0813.practice.manager.gui.GUIType; +import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.InventoryUtil; import dev.nandi0813.practice.util.PageUtil; import lombok.Getter; @@ -180,7 +181,7 @@ private static ItemStack getArenaItem(DisplayArena arena) { if (arena.getIcon() != null) { guiItem.setMaterial(arena.getIcon().getType()); - guiItem.setDamage(arena.getIcon().getDurability()); + guiItem.setDamage(Common.getItemDamage(arena.getIcon())); } guiItem @@ -199,7 +200,7 @@ private static ItemStack getArenaItem(Arena arena) { if (arena.getIcon() != null) { guiItem.setMaterial(arena.getIcon().getType()); - guiItem.setDamage(arena.getIcon().getDurability()); + guiItem.setDamage(Common.getItemDamage(arena.getIcon())); } guiItem diff --git a/core/src/main/java/dev/nandi0813/practice/manager/gui/setup/arena/arenasettings/ffa/ArenaMainGui.java b/core/src/main/java/dev/nandi0813/practice/manager/gui/setup/arena/arenasettings/ffa/ArenaMainGui.java index ab171247..69c6a976 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/gui/setup/arena/arenasettings/ffa/ArenaMainGui.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/gui/setup/arena/arenasettings/ffa/ArenaMainGui.java @@ -72,8 +72,8 @@ public void update() { .replace("%arenaDisplayName%", ffaArena.getDisplayName()) .replace("%arenaName%", ffaArena.getName()) .replace("%arenaType%", ffaArena.getType().toString()) - .setMaterial(ffaArena.getIcon() != null && ffaArena.getIcon().getType() != null ? ffaArena.getIcon().getType() : null) - .setDamage(ffaArena.getIcon() != null && ffaArena.getIcon().getDurability() != 0 ? ffaArena.getIcon().getDurability() : -1) + .setMaterial(ffaArena.getIcon() != null ? ffaArena.getIcon().getType() : null) + .setDamage(ffaArena.getIcon() != null && Common.getItemDamage(ffaArena.getIcon()) != 0 ? Common.getItemDamage(ffaArena.getIcon()) : -1) .get()); inventory.setItem(11, ffaArena.isEnabled() ? STATUS_ENABLED_ITEM : STATUS_DISABLED_ITEM); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/gui/setup/ladder/laddersettings/DestroyableBlocksGui.java b/core/src/main/java/dev/nandi0813/practice/manager/gui/setup/ladder/laddersettings/DestroyableBlocksGui.java index 2b554117..10b049a2 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/gui/setup/ladder/laddersettings/DestroyableBlocksGui.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/gui/setup/ladder/laddersettings/DestroyableBlocksGui.java @@ -11,7 +11,9 @@ import dev.nandi0813.practice.util.BasicItem; import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.InventoryUtil; +import dev.nandi0813.practice.util.StringUtil; import lombok.Getter; +import net.kyori.adventure.text.Component; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -21,6 +23,7 @@ import org.bukkit.event.inventory.InventoryDragEvent; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.Damageable; import org.bukkit.inventory.meta.ItemMeta; import java.util.List; @@ -68,7 +71,13 @@ public void update() { for (int i = 0; i <= INVENTORY_LAST_SLOT; i++) { if (i == BACK_SLOT) continue; if (inventory.getItem(i) == null) { - inventory.setItem(i, new ItemStack(block.getMaterial(), 1, block.getDamage())); + ItemStack blockItem = new ItemStack(block.getMaterial(), 1); + ItemMeta blockMeta = blockItem.getItemMeta(); + if (blockMeta instanceof Damageable damageable) { + damageable.setDamage(block.getDamage()); + blockItem.setItemMeta(damageable); + } + inventory.setItem(i, blockItem); break; } } @@ -131,7 +140,7 @@ public void save() { if (i == BACK_SLOT) continue; ItemStack itemStack = this.gui.get(1).getItem(i); if (itemStack != null && !itemStack.getType().equals(Material.AIR)) { - BasicItem block = new BasicItem(itemStack.getType(), itemStack.getDurability()); + BasicItem block = new BasicItem(itemStack.getType(), Common.getItemDamage(itemStack)); basicItems.add(block); } } @@ -168,8 +177,8 @@ private void checkItem(InventoryClickEvent e) { itemStack.setAmount(1); if (itemStack.hasItemMeta()) { ItemMeta itemMeta = itemStack.getItemMeta(); - itemMeta.setDisplayName(itemStack.getType().getData().getSimpleName()); - itemMeta.setLore(null); + itemMeta.displayName(Component.text(StringUtil.getNormalizedName(itemStack.getType().name()))); + itemMeta.lore(null); itemMeta.getItemFlags().clear(); itemStack.setItemMeta(itemMeta); } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/gui/setup/ladder/laddersettings/InventoryGui.java b/core/src/main/java/dev/nandi0813/practice/manager/gui/setup/ladder/laddersettings/InventoryGui.java index afd9525b..50f35d62 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/gui/setup/ladder/laddersettings/InventoryGui.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/gui/setup/ladder/laddersettings/InventoryGui.java @@ -171,7 +171,7 @@ private ItemStack getEffectItem(List effects) { List effectStrings = new ArrayList<>(); for (PotionEffect potionEffect : effects) effectStrings.add(GUIFile.getString("GUIS.SETUP.LADDER.INVENTORY.ICONS.EFFECTS.HAS-EFFECT.EFFECT-FORMAT") - .replace("%name%", StringUtils.capitalize(potionEffect.getType().getName().replace("_", " ").toLowerCase())) + .replace("%name%", StringUtils.capitalize(potionEffect.getType().getKey().getKey().replace("_", " ").toLowerCase())) .replace("%amplifier%", String.valueOf(potionEffect.getAmplifier() + 1)) .replace("%time%", StringUtil.formatMillisecondsToMinutes((potionEffect.getDuration() / 20) * 1000L)) ); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/gui/setup/server/ServerMatchesGui.java b/core/src/main/java/dev/nandi0813/practice/manager/gui/setup/server/ServerMatchesGui.java index 17cc2851..f29ac477 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/gui/setup/server/ServerMatchesGui.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/gui/setup/server/ServerMatchesGui.java @@ -174,7 +174,7 @@ private ItemStack getMatchItem(Match match) { GUIItem guiItem = new GUIItem( GUIFile.getString("GUIS.SETUP.SERVER.MATCHES.ICONS.MATCH-ICON.NAME"), match.getLadder().getIcon().getType(), - match.getLadder().getIcon().getDurability(), + Common.getItemDamage(match.getLadder().getIcon()), GUIFile.getStringList("GUIS.SETUP.SERVER.MATCHES.ICONS.MATCH-ICON.LORE") ); guiItem diff --git a/core/src/main/java/dev/nandi0813/practice/manager/inventory/Inventory.java b/core/src/main/java/dev/nandi0813/practice/manager/inventory/Inventory.java index dcc192f4..f746272f 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/inventory/Inventory.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/inventory/Inventory.java @@ -3,6 +3,7 @@ import dev.nandi0813.practice.manager.inventory.inventoryitem.ExtraInvItem; import dev.nandi0813.practice.manager.inventory.inventoryitem.InvArmor; import dev.nandi0813.practice.manager.inventory.inventoryitem.InvItem; +import dev.nandi0813.practice.util.Common; import lombok.Getter; import org.bukkit.Material; import org.bukkit.configuration.file.YamlConfiguration; @@ -10,6 +11,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.Objects; @Getter public abstract class Inventory { @@ -84,7 +86,7 @@ private void getExtraItems() { YamlConfiguration config = InventoryManager.getInstance().getConfig(); if (config.isConfigurationSection(type.getPath() + ".EXTRA")) { - for (String itemPath : config.getConfigurationSection(type.getPath() + ".EXTRA").getKeys(false)) { + for (String itemPath : Objects.requireNonNull(config.getConfigurationSection(type.getPath() + ".EXTRA")).getKeys(false)) { ExtraInvItem extraInvItem = new ExtraInvItem(type.getPath() + ".EXTRA." + itemPath); invItems.add(extraInvItem); @@ -102,15 +104,15 @@ protected InvItem getInvItem(final int slot, final Material material) { protected InvItem getInvItem(final String name, final Material material) { return invItems.stream().filter(invItem -> - invItem.getItem().getItemMeta().getDisplayName().equalsIgnoreCase(name) && + Common.getItemDisplayName(invItem.getItem()).equalsIgnoreCase(name) && invItem.getItem().getType().equals(material) && invItem.getSlot() != -1 ).findFirst().orElse(null); } - protected InvItem getInvItem(Class c) { + protected InvItem getInvItem() { return invItems.stream().filter(invItem -> - invItem.getClass().equals(c) && + invItem.getClass().equals(dev.nandi0813.practice.manager.inventory.inventoryitem.lobbyitems.RematchInvItem.class) && invItem.getSlot() != -1 ).findFirst().orElse(null); } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/inventory/InventoryListener.java b/core/src/main/java/dev/nandi0813/practice/manager/inventory/InventoryListener.java index 2b6c990e..7f9f217a 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/inventory/InventoryListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/inventory/InventoryListener.java @@ -19,12 +19,12 @@ import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.EntityPickupItemEvent; import org.bukkit.event.entity.FoodLevelChangeEvent; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.player.PlayerDropItemEvent; import org.bukkit.event.player.PlayerInteractEntityEvent; import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerPickupItemEvent; import org.bukkit.inventory.ItemStack; public class InventoryListener implements Listener { @@ -58,15 +58,16 @@ public void onPlayerInteractWithInvItem(PlayerInteractEvent e) { } InvItem invItem; + String itemDisplayName = Common.getItemDisplayName(item); if (ServerManager.getInstance().getInWorld().get(player).equals(WorldEnum.LOBBY) && !player.hasPermission("zpp.admin")) { - invItem = inventory.getHoldItem(item.getItemMeta().getDisplayName(), item.getType(), e.getPlayer().getInventory().getHeldItemSlot()); + invItem = inventory.getHoldItem(itemDisplayName, item.getType(), e.getPlayer().getInventory().getHeldItemSlot()); } else { int slot = -1; if (profile.getStatus().equals(ProfileStatus.QUEUE)) { slot = e.getPlayer().getInventory().getHeldItemSlot(); } - invItem = inventory.getHoldItem(item.getItemMeta().getDisplayName(), item.getType(), slot); + invItem = inventory.getHoldItem(itemDisplayName, item.getType(), slot); } if (invItem != null) { @@ -98,7 +99,7 @@ public void onPlayerInteractWithEntity(PlayerInteractEntityEvent e) { if (inventory instanceof StaffInventory) { ItemStack itemInHand = dev.nandi0813.practice.moved.PlayerUtil.getPlayerMainHand(player); - InvItem invItem = inventory.getInvItem(itemInHand.getItemMeta().getDisplayName(), itemInHand.getType()); + InvItem invItem = inventory.getInvItem(Common.getItemDisplayName(itemInHand), itemInHand.getType()); if (invItem instanceof CheckInventoryInvItem checkInventoryInvItem) { checkInventoryInvItem.handleClickEvent(player, target); @@ -124,9 +125,9 @@ public void onPlayerAttackEntity(EntityDamageByEntityEvent e) { Inventory inventory = InventoryManager.getInstance().getPlayerInventory(player); if (inventory == null) return; ItemStack itemInHand = dev.nandi0813.practice.moved.PlayerUtil.getPlayerMainHand(player); - if (itemInHand == null || itemInHand.getType() == Material.AIR || !itemInHand.hasItemMeta()) return; + if (itemInHand.getType() == Material.AIR || !itemInHand.hasItemMeta()) return; - InvItem heldInvItem = inventory.getInvItem(itemInHand.getItemMeta().getDisplayName(), itemInHand.getType()); + InvItem heldInvItem = inventory.getInvItem(Common.getItemDisplayName(itemInHand), itemInHand.getType()); if (!(heldInvItem instanceof dev.nandi0813.practice.manager.inventory.inventoryitem.lobbyitems.UnrankedInvItem)) return; @@ -194,8 +195,9 @@ public void onPlayerDropItem(PlayerDropItemEvent e) { } @EventHandler - public void onPlayerPickupItem(PlayerPickupItemEvent e) { - Player player = e.getPlayer(); + public void onPlayerPickupItem(EntityPickupItemEvent e) { + if (!(e.getEntity() instanceof Player player)) return; + Profile profile = ProfileManager.getInstance().getProfile(player); ProfileStatus profileStatus = profile.getStatus(); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/inventory/inventories/EventQueueInventory.java b/core/src/main/java/dev/nandi0813/practice/manager/inventory/inventories/EventQueueInventory.java index 4b75ead7..b1161882 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/inventory/inventories/EventQueueInventory.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/inventory/inventories/EventQueueInventory.java @@ -5,6 +5,7 @@ import dev.nandi0813.practice.manager.inventory.Inventory; import dev.nandi0813.practice.manager.inventory.inventoryitem.InvItem; import dev.nandi0813.practice.manager.inventory.inventoryitem.queueitems.EventQueueLeaveInvItem; +import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.StringUtil; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; @@ -35,7 +36,8 @@ protected void set(Player player) { ItemStack item = invItem.getItem().clone(); ItemMeta itemMeta = item.getItemMeta(); - itemMeta.setDisplayName(StringUtil.CC(itemMeta.getDisplayName().replace("%event%", event.getType().getName()))); + String displayName = Common.serializeComponentToLegacyString(itemMeta.displayName()); + itemMeta.displayName(Common.legacyToComponent(StringUtil.CC(displayName.replace("%event%", event.getType().getName())))); item.setItemMeta(itemMeta); playerInventory.setItem(slot, item); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/inventory/inventories/LobbyInventory.java b/core/src/main/java/dev/nandi0813/practice/manager/inventory/inventories/LobbyInventory.java index 500a3cbf..62428b58 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/inventory/inventories/LobbyInventory.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/inventory/inventories/LobbyInventory.java @@ -35,20 +35,27 @@ protected void set(Player player) { if (slot == -1) continue; - if (invItem instanceof SpectateModeInvItem) { - if (!InventoryManager.SPECTATOR_MODE_ENABLED) + switch (invItem) { + case SpectateModeInvItem spectateModeInvItem -> { + if (!InventoryManager.SPECTATOR_MODE_ENABLED) + continue; + } + case SetupInvItem setupInvItem -> { + if (!player.hasPermission("zpp.setup")) + continue; + setupItemSet = true; + } + case StaffMode staffMode -> { + if (!player.hasPermission("zpp.staffmode")) + continue; + if (setupItemSet) + continue; + } + case RematchInvItem rematchInvItem -> { continue; - } else if (invItem instanceof SetupInvItem) { - if (!player.hasPermission("zpp.setup")) - continue; - setupItemSet = true; - } else if (invItem instanceof StaffMode) { - if (!player.hasPermission("zpp.staffmode")) - continue; - if (setupItemSet) - continue; - } else if (invItem instanceof RematchInvItem) { - continue; + } + default -> { + } } playerInventory.setItem(slot, invItem.getItem()); @@ -56,7 +63,7 @@ protected void set(Player player) { } public void addRematchItem(Player player) { - InvItem invItem = this.getInvItem(RematchInvItem.class); + InvItem invItem = this.getInvItem(); if (invItem == null) return; player.getInventory().setItem(invItem.getSlot(), invItem.getItem()); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/ladder/abstraction/Ladder.java b/core/src/main/java/dev/nandi0813/practice/manager/ladder/abstraction/Ladder.java index 5bef433a..de2f17d2 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/ladder/abstraction/Ladder.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/ladder/abstraction/Ladder.java @@ -6,6 +6,7 @@ import dev.nandi0813.practice.manager.ladder.enums.LadderType; import dev.nandi0813.practice.manager.ladder.util.LadderKnockback; import dev.nandi0813.practice.moved.KitData; +import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.StringUtil; import lombok.Getter; import lombok.Setter; @@ -125,8 +126,9 @@ public void setIcon(final ItemStack icon) { this.icon = icon.clone(); - if (icon.hasItemMeta() && icon.getItemMeta().getDisplayName() != null && !icon.getItemMeta().getDisplayName().equalsIgnoreCase(" ")) - this.displayName = StringUtil.CC(icon.getItemMeta().getDisplayName()); + String iconDisplayName = Common.getItemDisplayName(icon); + if (!iconDisplayName.isBlank()) + this.displayName = StringUtil.CC(iconDisplayName); else this.displayName = name; } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/ladder/abstraction/interfaces/TempBuild.java b/core/src/main/java/dev/nandi0813/practice/manager/ladder/abstraction/interfaces/TempBuild.java index d8179f33..a119ff02 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/ladder/abstraction/interfaces/TempBuild.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/ladder/abstraction/interfaces/TempBuild.java @@ -1,6 +1,5 @@ package dev.nandi0813.practice.manager.ladder.abstraction.interfaces; -import dev.nandi0813.practice.ZonePractice; import dev.nandi0813.practice.manager.arena.util.ArenaUtil; import dev.nandi0813.practice.manager.fight.match.Match; import dev.nandi0813.practice.manager.fight.util.BlockUtil; @@ -15,8 +14,6 @@ import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.player.PlayerBucketEmptyEvent; -import org.bukkit.metadata.FixedMetadataValue; -import org.bukkit.metadata.MetadataValue; import org.jetbrains.annotations.NotNull; import static dev.nandi0813.practice.util.PermanentConfig.PLACED_IN_FIGHT; @@ -33,12 +30,12 @@ static void onBucketEmpty(final @NotNull PlayerBucketEmptyEvent e, final @NotNul Player player = e.getPlayer(); Block block = e.getBlockClicked(); - block.getRelative(e.getBlockFace()).setMetadata(PLACED_IN_FIGHT, new FixedMetadataValue(ZonePractice.getInstance(), match)); + BlockUtil.setMetadata(block.getRelative(e.getBlockFace()), PLACED_IN_FIGHT, match); for (BlockFace face : BlockFace.values()) { Block relative = block.getRelative(face, 1); - if (relative.hasMetadata(PLACED_IN_FIGHT)) { - MetadataValue mv = BlockUtil.getMetadata(relative, PLACED_IN_FIGHT); + if (BlockUtil.hasMetadata(relative, PLACED_IN_FIGHT)) { + Object mv = BlockUtil.getMetadata(relative, PLACED_IN_FIGHT, Object.class); if (ListenerUtil.checkMetaData(mv) || relative.getType().isSolid()) continue; match.getFightChange().addBlockChange(new ChangedBlock(block), player, buildDelay); @@ -56,7 +53,7 @@ static void onBlockPlace(final @NotNull BlockPlaceEvent e, final @NotNull Match Player player = e.getPlayer(); Block block = e.getBlockPlaced(); - block.setMetadata(PLACED_IN_FIGHT, new FixedMetadataValue(ZonePractice.getInstance(), match)); + BlockUtil.setMetadata(block, PLACED_IN_FIGHT, match); match.getFightChange().addBlockChange(new ChangedBlock(e), player, buildDelay); @@ -72,9 +69,9 @@ static void onBlockBreak(final @NotNull BlockBreakEvent e, final @NotNull Match Location location = block.getLocation(); FightChangeOptimized fightChange = match.getFightChange(); - if (!block.hasMetadata(PLACED_IN_FIGHT)) return; + if (!BlockUtil.hasMetadata(block, PLACED_IN_FIGHT)) return; - MetadataValue mv = BlockUtil.getMetadata(e.getBlock(), PLACED_IN_FIGHT); + Object mv = BlockUtil.getMetadata(e.getBlock(), PLACED_IN_FIGHT, Object.class); if (ListenerUtil.checkMetaData(mv)) { e.setCancelled(true); return; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/ladder/abstraction/normal/PortalFight.java b/core/src/main/java/dev/nandi0813/practice/manager/ladder/abstraction/normal/PortalFight.java index 779578c0..762ee220 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/ladder/abstraction/normal/PortalFight.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/ladder/abstraction/normal/PortalFight.java @@ -1,6 +1,5 @@ package dev.nandi0813.practice.manager.ladder.abstraction.normal; -import dev.nandi0813.practice.ZonePractice; import dev.nandi0813.practice.manager.arena.arenas.interfaces.NormalArena; import dev.nandi0813.practice.manager.arena.util.ArenaUtil; import dev.nandi0813.practice.manager.arena.util.PortalLocation; @@ -23,8 +22,6 @@ import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.player.PlayerBucketEmptyEvent; import org.bukkit.event.player.PlayerMoveEvent; -import org.bukkit.metadata.FixedMetadataValue; -import org.bukkit.metadata.MetadataValue; import org.jetbrains.annotations.NotNull; import static dev.nandi0813.practice.util.PermanentConfig.PLACED_IN_FIGHT; @@ -89,7 +86,7 @@ protected static void onBlockPlace(final @NotNull BlockPlaceEvent e, final @NotN } if (!e.isCancelled()) { - e.getBlockPlaced().setMetadata(PLACED_IN_FIGHT, new FixedMetadataValue(ZonePractice.getInstance(), match)); + BlockUtil.setMetadata(e.getBlockPlaced(), PLACED_IN_FIGHT, match); match.addBlockChange(new ChangedBlock(e)); Block underBlock = e.getBlockPlaced().getLocation().subtract(0, 1, 0).getBlock(); @@ -123,15 +120,10 @@ protected static void onBlockBreak(final @NotNull BlockBreakEvent e, final @NotN protected static void onLiquidFlow(final @NotNull BlockFromToEvent e) { Block block = e.getBlock(); - if (!block.hasMetadata(PLACED_IN_FIGHT)) return; + if (!BlockUtil.hasMetadata(block, PLACED_IN_FIGHT)) return; - MetadataValue mv = BlockUtil.getMetadata(block, PLACED_IN_FIGHT); - if (mv == null) return; - if (mv.value() == null) return; - - // Check for Match specifically (portal fights are only in matches) - if (!(mv.value() instanceof Match)) return; - Match match = (Match) mv.value(); + Match match = BlockUtil.getMetadata(block, PLACED_IN_FIGHT, Match.class); + if (match == null) return; NormalArena arena = match.getArena(); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/ladder/type/BedWars.java b/core/src/main/java/dev/nandi0813/practice/manager/ladder/type/BedWars.java index e3707ebb..97f0c893 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/ladder/type/BedWars.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/ladder/type/BedWars.java @@ -1,9 +1,9 @@ package dev.nandi0813.practice.manager.ladder.type; -import dev.nandi0813.practice.ZonePractice; import dev.nandi0813.practice.manager.arena.util.ArenaUtil; import dev.nandi0813.practice.manager.fight.match.Match; import dev.nandi0813.practice.manager.fight.match.enums.RoundStatus; +import dev.nandi0813.practice.manager.fight.util.BlockUtil; import dev.nandi0813.practice.manager.ladder.abstraction.interfaces.LadderHandle; import dev.nandi0813.practice.manager.ladder.abstraction.normal.BedFight; import dev.nandi0813.practice.manager.ladder.enums.LadderType; @@ -18,7 +18,6 @@ import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.player.PlayerDropItemEvent; import org.bukkit.event.player.PlayerMoveEvent; -import org.bukkit.metadata.FixedMetadataValue; import org.jetbrains.annotations.NotNull; import static dev.nandi0813.practice.util.PermanentConfig.PLACED_IN_FIGHT; @@ -60,7 +59,7 @@ private static void onBlockPlace(final @NotNull BlockPlaceEvent e, final @NotNul if (block.getType().equals(Material.TNT)) { LadderUtil.placeTnt(e, match); } else { - block.setMetadata(PLACED_IN_FIGHT, new FixedMetadataValue(ZonePractice.getInstance(), match)); + BlockUtil.setMetadata(block, PLACED_IN_FIGHT, match); match.addBlockChange(new ChangedBlock(e)); Block underBlock = e.getBlockPlaced().getLocation().subtract(0, 1, 0).getBlock(); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/ladder/type/FireballFight.java b/core/src/main/java/dev/nandi0813/practice/manager/ladder/type/FireballFight.java index 8e248031..03044a43 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/ladder/type/FireballFight.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/ladder/type/FireballFight.java @@ -38,8 +38,6 @@ import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.inventory.ItemStack; -import org.bukkit.metadata.FixedMetadataValue; -import org.bukkit.metadata.MetadataValue; import org.bukkit.scheduler.BukkitRunnable; import org.jetbrains.annotations.NotNull; @@ -155,8 +153,8 @@ private static void onFireballLaunch(final @NotNull PlayerInteractEvent e, final } final Fireball fireball = PlayerUtil.shootFireball(player, FIREBALL_SPEED); - fireball.setMetadata(FIGHT_ENTITY, new FixedMetadataValue(ZonePractice.getInstance(), match)); - fireball.setMetadata(FIREBALL_FIGHT_FIREBALL, new FixedMetadataValue(ZonePractice.getInstance(), match)); + BlockUtil.setMetadata(fireball, FIGHT_ENTITY, match); + BlockUtil.setMetadata(fireball, FIREBALL_FIGHT_FIREBALL, match); fireball.setIsIncendiary(false); fireball.setShooter(player); @@ -192,7 +190,7 @@ private static void onBlockPlace(final @NotNull BlockPlaceEvent e, final @NotNul if (block.getType().equals(Material.TNT)) { LadderUtil.placeTnt(e, match); } else { - block.setMetadata(PLACED_IN_FIGHT, new FixedMetadataValue(ZonePractice.getInstance(), match)); + BlockUtil.setMetadata(block, PLACED_IN_FIGHT, match); match.addBlockChange(new ChangedBlock(e)); Block underBlock = e.getBlockPlaced().getLocation().subtract(0, 1, 0).getBlock(); @@ -205,11 +203,11 @@ private static void onEntityDamageByEntity(final @NotNull EntityDamageByEntityEv if (!(e.getEntity() instanceof Player player)) return; if (e.getDamager() instanceof Fireball fireball) { - if (!fireball.hasMetadata(FIREBALL_FIGHT_FIREBALL)) { + if (!BlockUtil.hasMetadata(fireball, FIREBALL_FIGHT_FIREBALL)) { return; } - MetadataValue mv = BlockUtil.getMetadata(fireball, FIREBALL_FIGHT_FIREBALL); + Match mv = BlockUtil.getMetadata(fireball, FIREBALL_FIGHT_FIREBALL, Match.class); if (ListenerUtil.checkMetaData(mv)) { return; } @@ -229,17 +227,17 @@ private static void onEntityDamageByEntity(final @NotNull EntityDamageByEntityEv e.setDamage(0); dev.nandi0813.practice.moved.PlayerUtil.applyFireballKnockback(player, fireball); } else if (e.getDamager() instanceof TNTPrimed tnt) { - MetadataValue mv = BlockUtil.getMetadata(tnt, FIREBALL_FIGHT_TNT); + Match mv = BlockUtil.getMetadata(tnt, FIREBALL_FIGHT_TNT, Match.class); if (ListenerUtil.checkMetaData(mv)) { return; } - MetadataValue mv2 = BlockUtil.getMetadata(tnt, FIREBALL_FIGHT_TNT_SHOOTER); + Player mv2 = BlockUtil.getMetadata(tnt, FIREBALL_FIGHT_TNT_SHOOTER, Player.class); if (mv2 == null) { return; } - if (mv2.value() instanceof Player shooter) { + if (mv2 instanceof Player shooter) { if (shooter == player || !TeamUtil.isSaveTeamMate(match, shooter, player)) { dev.nandi0813.practice.moved.PlayerUtil.applyTntKnockback(player, tnt); e.setDamage(0); @@ -256,7 +254,7 @@ private static void onEntityDamageByEntity(final @NotNull EntityDamageByEntityEv private static void onFireballHit(final @NotNull ProjectileHitEvent e) { Entity entity = e.getEntity(); - if (!entity.hasMetadata(FIREBALL_FIGHT_FIREBALL)) { + if (!BlockUtil.hasMetadata(entity, FIREBALL_FIGHT_FIREBALL)) { return; } @@ -270,17 +268,14 @@ private static void onFireballHit(final @NotNull ProjectileHitEvent e) { private static void onEntityExplode(@NotNull EntityExplodeEvent e) { Entity entity = e.getEntity(); - if (entity.hasMetadata(FIREBALL_FIGHT_FIREBALL)) { - MetadataValue fbMv = BlockUtil.getMetadata(entity, FIREBALL_FIGHT_FIREBALL); + if (BlockUtil.hasMetadata(entity, FIREBALL_FIGHT_FIREBALL)) { + Match fbMv = BlockUtil.getMetadata(entity, FIREBALL_FIGHT_FIREBALL, Match.class); if (ListenerUtil.checkMetaData(fbMv)) { e.blockList().clear(); return; } - if (!(fbMv.value() instanceof Match match)) { - e.blockList().clear(); - return; - } + Match match = fbMv; if (!(match.getLadder() instanceof FireballFight fireballFight) || !fireballFight.isFireballBlockDestroy()) { // Setting disabled — no block destruction from fireball, but don't cancel so the sound plays. @@ -294,12 +289,12 @@ private static void onEntityExplode(@NotNull EntityExplodeEvent e) { } // Setting enabled — only destroy player-placed blocks, not arena blocks. - e.blockList().removeIf(block -> !block.hasMetadata(PLACED_IN_FIGHT)); - } else if (entity.hasMetadata(FIREBALL_FIGHT_TNT) && entity.hasMetadata(FIREBALL_FIGHT_TNT_SHOOTER)) { - MetadataValue mv = BlockUtil.getMetadata(entity, FIREBALL_FIGHT_TNT); + e.blockList().removeIf(block -> !BlockUtil.hasMetadata(block, PLACED_IN_FIGHT)); + } else if (BlockUtil.hasMetadata(entity, FIREBALL_FIGHT_TNT) && BlockUtil.hasMetadata(entity, FIREBALL_FIGHT_TNT_SHOOTER)) { + Match mv = BlockUtil.getMetadata(entity, FIREBALL_FIGHT_TNT, Match.class); if (ListenerUtil.checkMetaData(mv)) return; - if (!(mv.value() instanceof Match match)) return; + Match match = mv; if (!match.getCurrentRound().getRoundStatus().equals(RoundStatus.LIVE)) { e.blockList().clear(); return; @@ -309,8 +304,8 @@ private static void onEntityExplode(@NotNull EntityExplodeEvent e) { e.blockList().removeIf(block -> { if (block.getType().equals(Material.TNT)) return false; // keep → chain-explodes if (ArenaUtil.containsDestroyableBlock(match.getLadder(), block)) return false; // keep → destroyable - if (block.hasMetadata(PLACED_IN_FIGHT)) return false; // keep → player placed - if (block.getRelative(0, 1, 0).hasMetadata(PLACED_IN_FIGHT)) return true; // remove → support under player block + if (BlockUtil.hasMetadata(block, PLACED_IN_FIGHT)) return false; // keep → player placed + if (BlockUtil.hasMetadata(block.getRelative(0, 1, 0), PLACED_IN_FIGHT)) return true; // remove → support under player block return true; // remove → pure arena block }); } @@ -326,8 +321,8 @@ private static void onBlockExplode(@NotNull org.bukkit.event.block.BlockExplodeE e.blockList().removeIf(block -> { if (block.getType().equals(Material.TNT)) return false; // keep → chain-explodes if (ArenaUtil.containsDestroyableBlock(match.getLadder(), block)) return false; // keep → destroyable - if (block.hasMetadata(PLACED_IN_FIGHT)) return false; // keep → player placed - if (block.getRelative(0, 1, 0).hasMetadata(PLACED_IN_FIGHT)) return true; // remove → support under player block + if (BlockUtil.hasMetadata(block, PLACED_IN_FIGHT)) return false; // keep → player placed + if (BlockUtil.hasMetadata(block.getRelative(0, 1, 0), PLACED_IN_FIGHT)) return true; // remove → support under player block return true; // remove → pure arena block }); } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/ladder/type/SkyWars.java b/core/src/main/java/dev/nandi0813/practice/manager/ladder/type/SkyWars.java index aaf7e47d..db5ae491 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/ladder/type/SkyWars.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/ladder/type/SkyWars.java @@ -86,7 +86,7 @@ private static void onSkyWarsChestLoot(final @NotNull PlayerInteractEvent e, fin match.addBlockChange(new ChangedBlock(chest)); Bukkit.getScheduler().runTaskLater(ZonePractice.getInstance(), () -> - chest.setType(Material.AIR), 2L); + chest.setBlockData(Material.AIR.createBlockData()), 2L); } } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/ladder/type/Spleef.java b/core/src/main/java/dev/nandi0813/practice/manager/ladder/type/Spleef.java index eea9ef34..e3ce8afd 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/ladder/type/Spleef.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/ladder/type/Spleef.java @@ -2,6 +2,7 @@ import dev.nandi0813.practice.manager.fight.match.Match; import dev.nandi0813.practice.manager.fight.match.enums.RoundStatus; +import dev.nandi0813.practice.manager.fight.util.BlockUtil; import dev.nandi0813.practice.manager.fight.util.DeathCause; import dev.nandi0813.practice.manager.ladder.abstraction.interfaces.CustomConfig; import dev.nandi0813.practice.manager.ladder.abstraction.interfaces.LadderHandle; @@ -22,7 +23,6 @@ import org.bukkit.event.entity.ProjectileHitEvent; import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.inventory.ItemStack; -import org.bukkit.metadata.MetadataValue; import org.bukkit.util.BlockIterator; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -66,13 +66,12 @@ private void onSpleefBlockBreak(final @NotNull BlockBreakEvent e, final @NotNull if (match.getCurrentStat(player).isSet()) return; Block snow = e.getBlock(); - if (snow == null) return; if (!match.getArena().getCuboid().contains(snow)) return; e.setCancelled(true); if (snow.getType().equals(Material.SNOW_BLOCK)) { match.addBlockChange(new ChangedBlock(snow)); - snow.setType(Material.AIR); + snow.setBlockData(Material.AIR.createBlockData()); // Give one snowball per block broken when snowball mode is active. // Uses the version-abstracted getSnowball() (SNOW_BALL on 1.8.8, SNOWBALL on modern). @@ -95,8 +94,8 @@ private void onSnowballHit(final @NotNull ProjectileHitEvent e, final @NotNull M if (!(e.getEntity() instanceof Snowball snowball)) return; // Only handle snowballs that belong to this match. - MetadataValue mv = snowball.getMetadata(PermanentConfig.FIGHT_ENTITY).stream().findFirst().orElse(null); - if (mv == null || !(mv.value() instanceof Match hitMatch) || !hitMatch.equals(match)) return; + Match hitMatch = BlockUtil.getMetadata(snowball, PermanentConfig.FIGHT_ENTITY, Match.class); + if (hitMatch == null || !hitMatch.equals(match)) return; if (!match.getCurrentRound().getRoundStatus().equals(RoundStatus.LIVE)) return; @@ -106,7 +105,7 @@ private void onSnowballHit(final @NotNull ProjectileHitEvent e, final @NotNull M if (!match.getArena().getCuboid().contains(hitBlock)) return; match.addBlockChange(new ChangedBlock(hitBlock)); - hitBlock.setType(Material.AIR); + hitBlock.setBlockData(Material.AIR.createBlockData()); } /** diff --git a/core/src/main/java/dev/nandi0813/practice/manager/leaderboard/hologram/ArmorStandFactory.java b/core/src/main/java/dev/nandi0813/practice/manager/leaderboard/hologram/ArmorStandFactory.java index 952dffbc..1d67943d 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/leaderboard/hologram/ArmorStandFactory.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/leaderboard/hologram/ArmorStandFactory.java @@ -3,6 +3,7 @@ import dev.nandi0813.practice.manager.arena.util.ArenaUtil; import dev.nandi0813.practice.util.StringUtil; import lombok.experimental.UtilityClass; +import net.kyori.adventure.text.Component; import org.bukkit.Location; import org.bukkit.entity.ArmorStand; import org.bukkit.entity.Entity; @@ -45,7 +46,7 @@ public void configure(@NotNull ArmorStand stand, @NotNull String text) { stand.setVisible(false); stand.setGravity(false); stand.setCustomNameVisible(true); - stand.setCustomName(StringUtil.CC(text)); + stand.customName(Component.text(StringUtil.CC(text))); stand.setBasePlate(false); stand.setArms(false); ArenaUtil.setArmorStandInvulnerable(stand); @@ -58,7 +59,7 @@ public void configure(@NotNull ArmorStand stand, @NotNull String text) { * @param text The new display text (will be color-coded) */ public void updateText(@NotNull ArmorStand stand, @NotNull String text) { - stand.setCustomName(StringUtil.CC(text)); + stand.customName(Component.text(StringUtil.CC(text))); } /** diff --git a/core/src/main/java/dev/nandi0813/practice/manager/leaderboard/hologram/HologramProtectionListener.java b/core/src/main/java/dev/nandi0813/practice/manager/leaderboard/hologram/HologramProtectionListener.java index a827fa69..5a0ae410 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/leaderboard/hologram/HologramProtectionListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/leaderboard/hologram/HologramProtectionListener.java @@ -1,6 +1,7 @@ package dev.nandi0813.practice.manager.leaderboard.hologram; import dev.nandi0813.practice.ZonePractice; +import dev.nandi0813.practice.util.Common; import org.bukkit.Bukkit; import org.bukkit.entity.ArmorStand; import org.bukkit.entity.Entity; @@ -94,7 +95,7 @@ public void onEntityDeath(EntityDeathEvent event) { } ArmorStand deadStand = (ArmorStand) entity; - String customName = deadStand.getCustomName(); + String customName = deadStand.customName() == null ? null : Common.serializeComponentToLegacyString(deadStand.customName()); var location = deadStand.getLocation(); // Schedule respawn for next tick diff --git a/core/src/main/java/dev/nandi0813/practice/manager/nametag/TabIntegration.java b/core/src/main/java/dev/nandi0813/practice/manager/nametag/TabIntegration.java index b4f37aeb..6cd0806d 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/nametag/TabIntegration.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/nametag/TabIntegration.java @@ -1,12 +1,12 @@ package dev.nandi0813.practice.manager.nametag; import dev.nandi0813.practice.moved.PlayerUtil; +import dev.nandi0813.practice.util.PermanentConfig; import lombok.Getter; import me.neznamy.tab.api.TabAPI; import me.neznamy.tab.api.TabPlayer; import me.neznamy.tab.api.nametag.NameTagManager; import me.neznamy.tab.api.tablist.TabListFormatManager; -import dev.nandi0813.practice.util.PermanentConfig; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; @@ -121,12 +121,9 @@ public void setNametag(Player player, Component prefix, NamedTextColor nameColor prefixStr = prefixStr + colorCode; } nameTagManager.setPrefix(tabPlayer, prefixStr); - } else if (colorCode != null) { + } else { // No prefix text, but we have a color - set color as prefix nameTagManager.setPrefix(tabPlayer, colorCode); - } else { - // No prefix and no color - nameTagManager.setPrefix(tabPlayer, ""); } // Set the suffix diff --git a/core/src/main/java/dev/nandi0813/practice/manager/playerkit/PlayerKitUtil.java b/core/src/main/java/dev/nandi0813/practice/manager/playerkit/PlayerKitUtil.java index 2b8dd265..341692b1 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/playerkit/PlayerKitUtil.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/playerkit/PlayerKitUtil.java @@ -4,6 +4,8 @@ import dev.nandi0813.practice.util.Common; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.Damageable; +import org.bukkit.inventory.meta.ItemMeta; public enum PlayerKitUtil { ; @@ -30,7 +32,13 @@ public static ItemStack getItem(String string) { // If the part after :: is numeric it's a legacy damage/data value (1.8 only) boolean isNumeric = suffix.chars().allMatch(Character::isDigit); if (isNumeric) { - return new ItemStack(Material.valueOf(split[0]), 1, Short.parseShort(suffix)); + ItemStack itemStack = new ItemStack(Material.valueOf(split[0]), 1); + ItemMeta itemMeta = itemStack.getItemMeta(); + if (itemMeta instanceof Damageable damageable) { + damageable.setDamage(Short.parseShort(suffix)); + itemStack.setItemMeta(damageable); + } + return itemStack; } else { // Named sub-type (PotionType, etc.) – delegate to the version-specific impl return LadderUtil.getPotionItem(string); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/playerkit/StaticItems.java b/core/src/main/java/dev/nandi0813/practice/manager/playerkit/StaticItems.java index 262fe623..36fe195b 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/playerkit/StaticItems.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/playerkit/StaticItems.java @@ -140,7 +140,10 @@ public enum StaticItems { List enchantments = new ArrayList<>(); for (String enchantment : PlayerKitManager.getInstance().getList("DISABLED-ENCHANTS." + path)) { try { - enchantments.add(Enchantment.getByName(enchantment)); + Enchantment parsed = Common.resolveEnchantment(enchantment); + if (parsed != null) { + enchantments.add(parsed); + } } catch (Exception e) { Common.sendConsoleMMMessage("Invalid enchantment name: " + enchantment); } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/playerkit/guis/EnchantGUI.java b/core/src/main/java/dev/nandi0813/practice/manager/playerkit/guis/EnchantGUI.java index 0985d4f4..0b7b5819 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/playerkit/guis/EnchantGUI.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/playerkit/guis/EnchantGUI.java @@ -6,6 +6,7 @@ import dev.nandi0813.practice.manager.gui.GUIType; import dev.nandi0813.practice.manager.playerkit.StaticItems; import dev.nandi0813.practice.manager.playerkit.items.KitItem; +import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.InventoryUtil; import dev.nandi0813.practice.util.StringUtil; import net.wesjd.anvilgui.AnvilGUI; @@ -46,7 +47,7 @@ public void build() { inventory.setItem(44, StaticItems.ENCHANT_GUI_CHANGE_DURABILITY_ICON); inventory.setItem(53, StaticItems.ENCHANT_GUI_CLEAR_ENCHANTS_ICON); - for (Enchantment enchantment : Enchantment.values()) { + for (Enchantment enchantment : Common.getAllEnchantments()) { String name = kitItem.getMaterial().name().toLowerCase(); if (!enchantment.canEnchantItem(kitItem.get())) @@ -63,7 +64,7 @@ public void build() { if (!disabled) { icons.put( - StaticItems.ENCHANT_GUI_ENCHANT_ICON.cloneItem().replace("%enchantment%", StringUtil.getNormalizedName(enchantment.getName())).get(), + StaticItems.ENCHANT_GUI_ENCHANT_ICON.cloneItem().replace("%enchantment%", StringUtil.getNormalizedName(enchantment.getKey().getKey())).get(), enchantment ); } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/playerkit/guis/MainGUI.java b/core/src/main/java/dev/nandi0813/practice/manager/playerkit/guis/MainGUI.java index 3c336a13..09261a31 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/playerkit/guis/MainGUI.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/playerkit/guis/MainGUI.java @@ -230,7 +230,7 @@ private static boolean canBeEnchanted(ItemStack itemStack) { return false; } - for (Enchantment enchantment : Enchantment.values()) { + for (Enchantment enchantment : Common.getAllEnchantments()) { if (enchantment.canEnchantItem(itemStack)) { return true; } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/playerkit/items/KitItem.java b/core/src/main/java/dev/nandi0813/practice/manager/playerkit/items/KitItem.java index 3db54ac7..165a9679 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/playerkit/items/KitItem.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/playerkit/items/KitItem.java @@ -1,6 +1,7 @@ package dev.nandi0813.practice.manager.playerkit.items; import dev.nandi0813.practice.moved.LadderUtil; +import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.StringUtil; import org.bukkit.Bukkit; import org.bukkit.Material; @@ -88,7 +89,7 @@ public boolean isUnbreakable() { // Setters public KitItem setName(String name) { ItemMeta itemMeta = itemStack.getItemMeta(); - itemMeta.setDisplayName(StringUtil.CC(name)); + itemMeta.displayName(Common.legacyToComponent(StringUtil.CC(name))); itemStack.setItemMeta(itemMeta); return this; } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/server/MysqlSaveRunnable.java b/core/src/main/java/dev/nandi0813/practice/manager/server/MysqlSaveRunnable.java index 3fbd8604..02211b6e 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/server/MysqlSaveRunnable.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/server/MysqlSaveRunnable.java @@ -9,7 +9,6 @@ import dev.nandi0813.practice.manager.profile.ProfileManager; import dev.nandi0813.practice.util.Common; import lombok.Getter; -import org.bukkit.ChatColor; import org.bukkit.scheduler.BukkitRunnable; import java.sql.PreparedStatement; @@ -64,7 +63,7 @@ public void loadGlobalMysqlData(Profile profile) { else division = profile.getStats().getDivision().getFullName(); - stmt.setString(10, ChatColor.stripColor(division)); + stmt.setString(10, Common.stripLegacyColor(division)); stmt.execute(); } catch (SQLException e) { Common.sendConsoleMMMessage("Error: " + e.getMessage()); @@ -85,7 +84,7 @@ public void loadGlobalMysqlData(Profile profile) { else division = profile.getStats().getDivision().getFullName(); - stmt.setString(10, ChatColor.stripColor(division)); + stmt.setString(10, Common.stripLegacyColor(division)); stmt.setString(9, profile.getUuid().toString()); stmt.execute(); } catch (SQLException e) { diff --git a/core/src/main/java/dev/nandi0813/practice/moved/ArenaCopyUtilListener.java b/core/src/main/java/dev/nandi0813/practice/moved/ArenaCopyUtilListener.java index 886c316e..c8219f08 100644 --- a/core/src/main/java/dev/nandi0813/practice/moved/ArenaCopyUtilListener.java +++ b/core/src/main/java/dev/nandi0813/practice/moved/ArenaCopyUtilListener.java @@ -298,7 +298,7 @@ public void run() { continue; } - block.setType(Material.AIR); + block.setBlockData(Material.AIR.createBlockData()); changeCounter++; } } catch (Exception e) { diff --git a/core/src/main/java/dev/nandi0813/practice/moved/BedUtil.java b/core/src/main/java/dev/nandi0813/practice/moved/BedUtil.java index 5584b1e0..63553a01 100644 --- a/core/src/main/java/dev/nandi0813/practice/moved/BedUtil.java +++ b/core/src/main/java/dev/nandi0813/practice/moved/BedUtil.java @@ -34,13 +34,13 @@ public static BedLocation getBedLocation(Block block) { public static void placeBed(Location loc, BlockFace face) { Block bedFoot = loc.getBlock(); - bedFoot.setType(Material.RED_BED); + bedFoot.setBlockData(Material.RED_BED.createBlockData()); Bed bedFootData = (Bed) Bukkit.createBlockData(Material.RED_BED); bedFootData.setPart(Bed.Part.FOOT); bedFootData.setFacing(face); Block bedHead = bedFoot.getRelative(face); - bedHead.setType(Material.RED_BED); + bedHead.setBlockData(Material.RED_BED.createBlockData()); Bed bedHeadData = (Bed) Bukkit.createBlockData(Material.RED_BED); bedHeadData.setPart(Bed.Part.HEAD); bedHeadData.setFacing(face); @@ -98,8 +98,8 @@ public static boolean onBedBreak(final @NotNull BlockBreakEvent e, final @NotNul match.addBlockChange(new ChangedBlock(bedLocation.getBlock())); - head.setType(Material.AIR); - bedLocation.getBlock().setType(Material.AIR); + head.setBlockData(Material.AIR.createBlockData()); + bedLocation.getBlock().setBlockData(Material.AIR.createBlockData()); } return destroy; diff --git a/core/src/main/java/dev/nandi0813/practice/moved/BuildListener.java b/core/src/main/java/dev/nandi0813/practice/moved/BuildListener.java index 1d6fc613..f7bbd8a7 100644 --- a/core/src/main/java/dev/nandi0813/practice/moved/BuildListener.java +++ b/core/src/main/java/dev/nandi0813/practice/moved/BuildListener.java @@ -5,6 +5,7 @@ import dev.nandi0813.practice.manager.fight.match.Match; import dev.nandi0813.practice.manager.fight.match.enums.MatchStatus; import dev.nandi0813.practice.manager.fight.match.enums.RoundStatus; +import dev.nandi0813.practice.manager.fight.util.BlockUtil; import dev.nandi0813.practice.manager.fight.util.FightUtil; import dev.nandi0813.practice.manager.ladder.abstraction.Ladder; import dev.nandi0813.practice.manager.ladder.abstraction.interfaces.LadderHandle; @@ -23,8 +24,6 @@ import org.bukkit.event.entity.EntityExplodeEvent; import org.bukkit.event.entity.EntitySpawnEvent; import org.bukkit.event.player.PlayerBucketEmptyEvent; -import org.bukkit.metadata.FixedMetadataValue; -import org.bukkit.metadata.MetadataValue; import java.util.HashMap; import java.util.List; @@ -86,7 +85,7 @@ protected static Spectatable getByBlock(Block block) { * {@code spectatable} and records it for rollback. */ protected static void tagAndTrack(Block block, Spectatable spectatable) { - block.setMetadata(PLACED_IN_FIGHT, new FixedMetadataValue(ZonePractice.getInstance(), spectatable)); + BlockUtil.setMetadata(block, PLACED_IN_FIGHT, spectatable); spectatable.addBlockChange(new ChangedBlock(block)); } @@ -115,7 +114,7 @@ protected static Ladder ladderOf(Spectatable spectatable) { private static void trackDependentBlocksAbove(Block base, Spectatable spectatable) { Block above = base.getRelative(0, 1, 0); while (ArenaUtil.requiresSupport(above)) { - if (!above.hasMetadata(PLACED_IN_FIGHT)) { + if (!BlockUtil.hasMetadata(above, PLACED_IN_FIGHT)) { spectatable.getFightChange().addArenaBlockChange(new ChangedBlock(above)); } above = above.getRelative(0, 1, 0); @@ -152,15 +151,15 @@ protected void handleExplosion(org.bukkit.event.Event event, List blockLi blockList.removeIf(block -> { if (block.getType().equals(Material.TNT)) return false; // keep → chain-explodes if (ArenaUtil.containsDestroyableBlock(l, block)) return false; // keep → destroyable - if (block.hasMetadata(PLACED_IN_FIGHT)) return false; // keep → player placed + if (BlockUtil.hasMetadata(block, PLACED_IN_FIGHT)) return false; // keep → player placed if (breakAll) return false; // keep → break-all-blocks active - if (block.getRelative(0, 1, 0).hasMetadata(PLACED_IN_FIGHT)) return true; // remove → support block protected + if (BlockUtil.hasMetadata(block.getRelative(0, 1, 0), PLACED_IN_FIGHT)) return true; // remove → support block protected return true; // remove → pure arena block }); for (Block block : blockList) { if (block.getType() == Material.TNT || block.getType() == Material.AIR) continue; - if (block.hasMetadata(PLACED_IN_FIGHT)) { + if (BlockUtil.hasMetadata(block, PLACED_IN_FIGHT)) { spectatable.addBlockChange(new ChangedBlock(block)); } else { // Natural arena block — use addArenaBlockChange so no PLACED_IN_FIGHT @@ -193,14 +192,14 @@ public void onEntityExplode(EntityExplodeEvent e) { e.blockList().removeIf(block -> { if (block.getType().equals(Material.TNT)) return false; if (ArenaUtil.containsDestroyableBlock(l, block)) return false; - if (block.hasMetadata(PLACED_IN_FIGHT)) return false; + if (BlockUtil.hasMetadata(block, PLACED_IN_FIGHT)) return false; if (breakAll) return false; - if (block.getRelative(0, 1, 0).hasMetadata(PLACED_IN_FIGHT)) return true; + if (BlockUtil.hasMetadata(block.getRelative(0, 1, 0), PLACED_IN_FIGHT)) return true; return true; }); for (Block block : e.blockList()) { if (block.getType() == Material.TNT || block.getType() == Material.AIR) continue; - if (block.hasMetadata(PLACED_IN_FIGHT)) { + if (BlockUtil.hasMetadata(block, PLACED_IN_FIGHT)) { spectatable.addBlockChange(new ChangedBlock(block)); } else { spectatable.getFightChange().addArenaBlockChange(new ChangedBlock(block)); @@ -335,7 +334,7 @@ public void onBlockForm(BlockFormEvent e) { org.bukkit.Bukkit.getScheduler().runTaskLater(ZonePractice.getInstance(), () -> { Block formed = location.getBlock(); if (formed.getType() == Material.AIR) return; - if (formed.hasMetadata(PLACED_IN_FIGHT)) return; + if (BlockUtil.hasMetadata(formed, PLACED_IN_FIGHT)) return; tagAndTrack(formed, spectatable); }, 2L); } @@ -361,11 +360,11 @@ public void onBucketEmpty(PlayerBucketEmptyEvent e) { // The liquid will be placed on the face the player clicked Block liquidSourceBlock = e.getBlockClicked().getRelative(e.getBlockFace()); - if (liquidSourceBlock.hasMetadata(PLACED_IN_FIGHT)) return; // already tracked + if (BlockUtil.hasMetadata(liquidSourceBlock, PLACED_IN_FIGHT)) return; // already tracked // Capture while still AIR (or pre-existing material) so rollback restores correctly spectatable.getFightChange().addBlockChange(new ChangedBlock(liquidSourceBlock)); - liquidSourceBlock.setMetadata(PLACED_IN_FIGHT, new FixedMetadataValue(ZonePractice.getInstance(), spectatable)); + BlockUtil.setMetadata(liquidSourceBlock, PLACED_IN_FIGHT, spectatable); } // ========================================================================= @@ -381,9 +380,9 @@ public void onBlockFromTo(BlockFromToEvent e) { Match match = null; // Fast path: source block already tagged — O(1) lookup - if (fromBlock.hasMetadata(PLACED_IN_FIGHT)) { - MetadataValue mv = fromBlock.getMetadata(PLACED_IN_FIGHT).get(0); - if (mv.value() instanceof Spectatable s) { + if (BlockUtil.hasMetadata(fromBlock, PLACED_IN_FIGHT)) { + Spectatable s = BlockUtil.getMetadata(fromBlock, PLACED_IN_FIGHT, Spectatable.class); + if (s != null) { spectatable = s; if (spectatable instanceof Match m) match = m; } @@ -397,7 +396,7 @@ public void onBlockFromTo(BlockFromToEvent e) { // Tag the block so future flow events from it hit the fast path and can be // properly cancelled after match end. - fromBlock.setMetadata(PLACED_IN_FIGHT, new FixedMetadataValue(ZonePractice.getInstance(), spectatable)); + BlockUtil.setMetadata(fromBlock, PLACED_IN_FIGHT, spectatable); if (spectatable instanceof Match m) match = m; } @@ -417,8 +416,8 @@ public void onBlockFromTo(BlockFromToEvent e) { // Track all destination blocks so all flowing liquids inside the arena are // properly recorded for rollback — whether the source is player-placed or natural. - if (!toBlock.hasMetadata(PLACED_IN_FIGHT)) { - toBlock.setMetadata(PLACED_IN_FIGHT, new FixedMetadataValue(ZonePractice.getInstance(), spectatable)); + if (!BlockUtil.hasMetadata(toBlock, PLACED_IN_FIGHT)) { + BlockUtil.setMetadata(toBlock, PLACED_IN_FIGHT, spectatable); spectatable.getFightChange().addBlockChange(new ChangedBlock(toBlock)); } } @@ -433,9 +432,9 @@ public void onBlockSpread(BlockSpreadEvent e) { Spectatable spectatable = null; - if (source.hasMetadata(PLACED_IN_FIGHT)) { - MetadataValue mv = source.getMetadata(PLACED_IN_FIGHT).get(0); - if (mv.value() instanceof Spectatable s) { + if (BlockUtil.hasMetadata(source, PLACED_IN_FIGHT)) { + Spectatable s = BlockUtil.getMetadata(source, PLACED_IN_FIGHT, Spectatable.class); + if (s != null) { spectatable = s; } } @@ -457,7 +456,7 @@ public void onBlockSpread(BlockSpreadEvent e) { final Spectatable finalSpectatable = spectatable; final Block newBlock = e.getNewState().getBlock(); org.bukkit.Bukkit.getScheduler().runTask(ZonePractice.getInstance(), () -> { - if (newBlock.hasMetadata(PLACED_IN_FIGHT)) return; + if (BlockUtil.hasMetadata(newBlock, PLACED_IN_FIGHT)) return; tagAndTrack(newBlock, finalSpectatable); }); } @@ -480,9 +479,9 @@ public void onBlockBurn(BlockBurnEvent e) { Spectatable spectatable = null; // Fast path: block already tagged - if (block.hasMetadata(PLACED_IN_FIGHT)) { - MetadataValue mv = block.getMetadata(PLACED_IN_FIGHT).get(0); - if (mv.value() instanceof Spectatable s) { + if (BlockUtil.hasMetadata(block, PLACED_IN_FIGHT)) { + Spectatable s = BlockUtil.getMetadata(block, PLACED_IN_FIGHT, Spectatable.class); + if (s != null) { spectatable = s; } } @@ -503,7 +502,7 @@ public void onBlockBurn(BlockBurnEvent e) { } // Track the block's original state for rollback - if (block.hasMetadata(PLACED_IN_FIGHT)) { + if (BlockUtil.hasMetadata(block, PLACED_IN_FIGHT)) { spectatable.addBlockChange(new ChangedBlock(block)); } else { spectatable.getFightChange().addArenaBlockChange(new ChangedBlock(block)); @@ -518,7 +517,7 @@ public void onBlockBurn(BlockBurnEvent e) { final Spectatable finalSpectatable = spectatable; org.bukkit.Bukkit.getScheduler().runTask(ZonePractice.getInstance(), () -> { String typeName = block.getType().name(); - if ((typeName.equals("FIRE") || typeName.equals("SOUL_FIRE")) && !block.hasMetadata(PLACED_IN_FIGHT)) { + if ((typeName.equals("FIRE") || typeName.equals("SOUL_FIRE")) && !BlockUtil.hasMetadata(block, PLACED_IN_FIGHT)) { tagAndTrack(block, finalSpectatable); } }); @@ -541,7 +540,7 @@ private void trackAdjacentFire(Block center, Spectatable spectatable) { for (Block adj : adjacent) { String typeName = adj.getType().name(); if (!typeName.equals("FIRE") && !typeName.equals("SOUL_FIRE")) continue; - if (adj.hasMetadata(PLACED_IN_FIGHT)) continue; + if (BlockUtil.hasMetadata(adj, PLACED_IN_FIGHT)) continue; tagAndTrack(adj, spectatable); } @@ -573,19 +572,19 @@ public void onFallingBlockChange(EntityChangeBlockEvent e) { boolean isLanding = e.getTo() != Material.AIR; // Fast path: entity was tagged when it first started falling inside the arena - if (fallingBlock.hasMetadata(PLACED_IN_FIGHT)) { - MetadataValue mv = fallingBlock.getMetadata(PLACED_IN_FIGHT).get(0); - if (!(mv.value() instanceof Spectatable spectatable)) return; + if (BlockUtil.hasMetadata(fallingBlock, PLACED_IN_FIGHT)) { + Spectatable spectatable = BlockUtil.getMetadata(fallingBlock, PLACED_IN_FIGHT, Spectatable.class); + if (spectatable == null) return; if (isLanding) { // Landing spot is still AIR at LOWEST — record as AIR so rollback clears it - if (!affectedBlock.hasMetadata(PLACED_IN_FIGHT)) { + if (!BlockUtil.hasMetadata(affectedBlock, PLACED_IN_FIGHT)) { spectatable.getFightChange().addArenaBlockChange( new ChangedBlock(affectedBlock, Material.AIR)); } } else { // Start falling: block is still its original material — capture it now - if (!affectedBlock.hasMetadata(PLACED_IN_FIGHT)) { + if (!BlockUtil.hasMetadata(affectedBlock, PLACED_IN_FIGHT)) { spectatable.getFightChange().addArenaBlockChange( new ChangedBlock(affectedBlock)); } @@ -599,16 +598,16 @@ public void onFallingBlockChange(EntityChangeBlockEvent e) { if (spectatable == null || !spectatable.isBuild()) return; // Tag entity so fast path handles the landing event - fallingBlock.setMetadata(PLACED_IN_FIGHT, new FixedMetadataValue(ZonePractice.getInstance(), spectatable)); + BlockUtil.setMetadata(fallingBlock, PLACED_IN_FIGHT, spectatable); spectatable.addEntityChange(fallingBlock); if (isLanding) { - if (!affectedBlock.hasMetadata(PLACED_IN_FIGHT)) { + if (!BlockUtil.hasMetadata(affectedBlock, PLACED_IN_FIGHT)) { spectatable.getFightChange().addArenaBlockChange( new ChangedBlock(affectedBlock, Material.AIR)); } } else { - if (!affectedBlock.hasMetadata(PLACED_IN_FIGHT)) { + if (!BlockUtil.hasMetadata(affectedBlock, PLACED_IN_FIGHT)) { spectatable.getFightChange().addArenaBlockChange( new ChangedBlock(affectedBlock)); } diff --git a/core/src/main/java/dev/nandi0813/practice/moved/ChangedBlock.java b/core/src/main/java/dev/nandi0813/practice/moved/ChangedBlock.java index 0dc320fa..b9c485b7 100644 --- a/core/src/main/java/dev/nandi0813/practice/moved/ChangedBlock.java +++ b/core/src/main/java/dev/nandi0813/practice/moved/ChangedBlock.java @@ -95,7 +95,7 @@ public void reset() { Block currentBlock = location.getBlock(); try { - currentBlock.setType(material); + currentBlock.setBlockData(material.createBlockData()); currentBlock.setBlockData(blockData); currentBlock.getState().setType(material); currentBlock.getState().setBlockData(blockData); @@ -110,7 +110,7 @@ public void reset() { } catch (Exception e) { // Handle BlockData compatibility issues // Just set the block type without the problematic block data - currentBlock.setType(material); + currentBlock.setBlockData(material.createBlockData()); currentBlock.getState().setType(material); currentBlock.getState().update(); } diff --git a/core/src/main/java/dev/nandi0813/practice/moved/ItemCreateUtil.java b/core/src/main/java/dev/nandi0813/practice/moved/ItemCreateUtil.java index 68ef2706..1c8f8c86 100644 --- a/core/src/main/java/dev/nandi0813/practice/moved/ItemCreateUtil.java +++ b/core/src/main/java/dev/nandi0813/practice/moved/ItemCreateUtil.java @@ -1,6 +1,7 @@ package dev.nandi0813.practice.moved; import dev.nandi0813.practice.util.StringUtil; +import net.kyori.adventure.text.Component; import org.bukkit.Color; import org.bukkit.Material; import org.bukkit.OfflinePlayer; @@ -12,6 +13,7 @@ import org.bukkit.inventory.meta.SkullMeta; import java.util.List; +import java.util.stream.Collectors; public class ItemCreateUtil { @@ -20,8 +22,8 @@ public static ItemStack createItem(String displayname, Material material, Short ItemMeta itemMeta = itemStack.getItemMeta(); if (itemMeta != null) { - itemMeta.setDisplayName(StringUtil.CC(displayname)); - itemMeta.setLore(StringUtil.CC(lore)); + itemMeta.displayName(Component.text(StringUtil.CC(displayname))); + itemMeta.lore(StringUtil.CC(lore).stream().map(Component::text).collect(Collectors.toList())); if (itemMeta instanceof Damageable) ((Damageable) itemMeta).setDamage(damage); @@ -37,7 +39,7 @@ public static ItemStack createItem(String displayname, Material material) { ItemMeta itemMeta = itemStack.getItemMeta(); if (itemMeta != null) { - itemMeta.setDisplayName(StringUtil.CC(displayname)); + itemMeta.displayName(Component.text(StringUtil.CC(displayname))); hideItemFlags(itemMeta); itemStack.setItemMeta(itemMeta); @@ -64,7 +66,7 @@ public static ItemStack createItem(String displayname, Material material, Short ItemMeta itemMeta = itemStack.getItemMeta(); if (itemMeta != null) { - itemMeta.setDisplayName(StringUtil.CC(displayname)); + itemMeta.displayName(Component.text(StringUtil.CC(displayname))); if (itemMeta instanceof Damageable) ((Damageable) itemMeta).setDamage(damage); @@ -80,8 +82,8 @@ public static ItemStack createItem(String displayname, Material material, List lore) { ItemMeta itemMeta = itemStack.getItemMeta(); if (itemMeta != null) { - itemMeta.setLore(StringUtil.CC(lore)); + itemMeta.lore(StringUtil.CC(lore).stream().map(Component::text).collect(Collectors.toList())); hideItemFlags(itemMeta); itemStack.setItemMeta(itemMeta); @@ -124,8 +126,8 @@ public static ItemStack createItem(ItemStack item, String name, List lor ItemMeta itemMeta = itemStack.getItemMeta(); if (itemMeta != null) { - itemMeta.setDisplayName(StringUtil.CC(name)); - itemMeta.setLore(StringUtil.CC(lore)); + itemMeta.displayName(Component.text(StringUtil.CC(name))); + itemMeta.lore(StringUtil.CC(lore).stream().map(Component::text).collect(Collectors.toList())); hideItemFlags(itemMeta); itemStack.setItemMeta(itemMeta); @@ -148,25 +150,6 @@ public static ItemStack hideItemFlags(ItemStack item) { return item; } - public static short getDurabilityByColor(char c) { - return switch (c) { - case '0' -> Short.parseShort("15"); - case '1', '9' -> Short.parseShort("11"); - case '2' -> Short.parseShort("13"); - case '3' -> Short.parseShort("9"); - case '4', 'c' -> Short.parseShort("14"); - case '5' -> Short.parseShort("10"); - case '6' -> Short.parseShort("35"); - case '7' -> Short.parseShort("8"); - case '8' -> Short.parseShort("7"); - case 'a' -> Short.parseShort("5"); - case 'b' -> Short.parseShort("3"); - case 'd' -> Short.parseShort("6"); - case 'e' -> Short.parseShort("4"); - default -> 0; - }; - } - public static ItemStack getPlayerHead(OfflinePlayer player) { ItemStack item = new ItemStack(Material.PLAYER_HEAD); SkullMeta meta = (SkullMeta) item.getItemMeta(); diff --git a/core/src/main/java/dev/nandi0813/practice/moved/KitData.java b/core/src/main/java/dev/nandi0813/practice/moved/KitData.java index 1d5e56aa..a1694d8d 100644 --- a/core/src/main/java/dev/nandi0813/practice/moved/KitData.java +++ b/core/src/main/java/dev/nandi0813/practice/moved/KitData.java @@ -9,6 +9,7 @@ import org.bukkit.potion.PotionEffect; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; @Getter @@ -66,8 +67,19 @@ public void getData(final FileConfiguration config, final String map) { this.armor = ItemSerializationUtil.itemStackArrayFromBase64(config.getString(armorPath)); if (config.isString(extraPath)) this.extra = ItemSerializationUtil.itemStackArrayFromBase64(config.getString(extraPath)); - if (config.isSet(effectsPath)) - this.effects = (List) config.get(effectsPath); + if (config.isSet(effectsPath)) { + this.effects = new ArrayList<>(); + Object rawEffects = config.get(effectsPath); + if (rawEffects instanceof List list) { + for (Object entry : list) { + if (entry instanceof PotionEffect potionEffect) { + this.effects.add(potionEffect); + } + } + } else if (rawEffects instanceof PotionEffect[] array) { + this.effects.addAll(Arrays.asList(array)); + } + } } public void setKitData(final Player player, final boolean setEffect) { diff --git a/core/src/main/java/dev/nandi0813/practice/moved/LadderUtil.java b/core/src/main/java/dev/nandi0813/practice/moved/LadderUtil.java index 0e890e0f..6be91b96 100644 --- a/core/src/main/java/dev/nandi0813/practice/moved/LadderUtil.java +++ b/core/src/main/java/dev/nandi0813/practice/moved/LadderUtil.java @@ -2,6 +2,7 @@ import dev.nandi0813.practice.ZonePractice; import dev.nandi0813.practice.manager.fight.match.Match; +import dev.nandi0813.practice.manager.fight.util.BlockUtil; import dev.nandi0813.practice.manager.ladder.type.FireballFight; import dev.nandi0813.practice.util.Common; import net.kyori.adventure.text.Component; @@ -19,7 +20,6 @@ import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.LeatherArmorMeta; import org.bukkit.inventory.meta.PotionMeta; -import org.bukkit.metadata.FixedMetadataValue; import org.bukkit.potion.PotionType; import org.jetbrains.annotations.NotNull; @@ -135,16 +135,16 @@ public static void placeTnt(BlockPlaceEvent e, Match match) { } Block block = e.getBlock(); - block.setType(Material.AIR); + block.setBlockData(Material.AIR.createBlockData()); block.getState().update(); TNTPrimed tnt = (TNTPrimed) block.getWorld().spawnEntity(block.getLocation().subtract(-0.5, 0, -0.5), EntityType.TNT); - tnt.setMetadata(FIGHT_ENTITY, new FixedMetadataValue(ZonePractice.getInstance(), match)); + BlockUtil.setMetadata(tnt, FIGHT_ENTITY, match); tnt.setIsIncendiary(false); if (match.getLadder() instanceof FireballFight) { - tnt.setMetadata(FireballFight.FIREBALL_FIGHT_TNT, new FixedMetadataValue(ZonePractice.getInstance(), match)); - tnt.setMetadata(FireballFight.FIREBALL_FIGHT_TNT_SHOOTER, new FixedMetadataValue(ZonePractice.getInstance(), e.getPlayer())); + BlockUtil.setMetadata(tnt, FireballFight.FIREBALL_FIGHT_TNT, match); + BlockUtil.setMetadata(tnt, FireballFight.FIREBALL_FIGHT_TNT_SHOOTER, e.getPlayer()); } }, 2L); } diff --git a/core/src/main/java/dev/nandi0813/practice/moved/VersionChecker.java b/core/src/main/java/dev/nandi0813/practice/moved/VersionChecker.java index 473d1498..ebae4b58 100644 --- a/core/src/main/java/dev/nandi0813/practice/moved/VersionChecker.java +++ b/core/src/main/java/dev/nandi0813/practice/moved/VersionChecker.java @@ -1,5 +1,6 @@ package dev.nandi0813.practice.moved; +import dev.nandi0813.practice.ZonePractice; import lombok.Getter; import org.bukkit.Bukkit; @@ -30,7 +31,7 @@ public static BukkitVersion getBukkitVersion() { final String mcVersion = extractMcVersion(versionString); if (mcVersion == null) { - Bukkit.getLogger().warning("Could not extract MC version from: " + versionString); + ZonePractice.getInstance().getLogger().warning("Could not extract MC version from: " + versionString); bukkitVersion = null; return null; } @@ -41,7 +42,7 @@ else if (mcVersion.startsWith("1.21")) bukkitVersion = BukkitVersion.v1_21_R3; else { // Unknown version - keep null but log for visibility - Bukkit.getLogger().warning("Unsupported MC version: " + mcVersion); + ZonePractice.getInstance().getLogger().warning("Unsupported MC version: " + mcVersion); bukkitVersion = null; } } diff --git a/core/src/main/java/dev/nandi0813/practice/util/Common.java b/core/src/main/java/dev/nandi0813/practice/util/Common.java index bd518138..83c2e0f4 100644 --- a/core/src/main/java/dev/nandi0813/practice/util/Common.java +++ b/core/src/main/java/dev/nandi0813/practice/util/Common.java @@ -1,16 +1,24 @@ package dev.nandi0813.practice.util; import dev.nandi0813.practice.ZonePractice; +import io.papermc.paper.registry.RegistryAccess; +import io.papermc.paper.registry.RegistryKey; import me.clip.placeholderapi.PlaceholderAPI; import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.serializer.bungeecord.BungeeComponentSerializer; import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; -import org.bukkit.ChatColor; +import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; +import org.bukkit.NamespacedKey; import org.bukkit.command.CommandSender; +import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.Damageable; +import org.bukkit.inventory.meta.ItemMeta; import java.util.ArrayList; import java.util.List; +import java.util.Locale; +import java.util.Map; public enum Common { ; @@ -23,13 +31,6 @@ public static void send(CommandSender sender, Component component) { return; } catch (Throwable ignored) { } - if (sender instanceof Player p) { - try { - p.spigot().sendMessage(BungeeComponentSerializer.get().serialize(component)); - return; - } catch (Throwable ignored) { } - } - String legacy = LegacyComponentSerializer.legacySection().serialize(component); sender.sendMessage(legacy.isEmpty() ? " " : legacy); } @@ -81,8 +82,22 @@ public static String serializeNormalToMMString(String normalString) { } public static String colorize(String message) { - if (message == null) return ""; - return ChatColor.translateAlternateColorCodes('&', message); + return StringUtil.CC(message); + } + + public static Component legacyToComponent(String message) { + if (message == null) { + return Component.empty(); + } + return LegacyComponentSerializer.legacyAmpersand().deserialize(message); + } + + public static String stripLegacyColor(String message) { + if (message == null || message.isEmpty()) { + return ""; + } + Component component = LegacyComponentSerializer.legacyAmpersand().deserialize(message); + return PlainTextComponentSerializer.plainText().serialize(component); } public static List mmToNormal(List list) { @@ -92,4 +107,87 @@ public static List mmToNormal(List list) { } return newList; } + + public static String getItemDisplayName(ItemMeta itemMeta) { + if (itemMeta == null || !itemMeta.hasDisplayName() || itemMeta.displayName() == null) { + return ""; + } + return serializeComponentToLegacyString(itemMeta.displayName()); + } + + public static String getItemDisplayName(ItemStack itemStack) { + if (itemStack == null || !itemStack.hasItemMeta()) { + return ""; + } + return getItemDisplayName(itemStack.getItemMeta()); + } + + public static short getItemDamage(ItemStack itemStack) { + if (itemStack == null || !itemStack.hasItemMeta()) { + return 0; + } + ItemMeta itemMeta = itemStack.getItemMeta(); + if (itemMeta instanceof Damageable damageable) { + return (short) damageable.getDamage(); + } + return 0; + } + + private static final Map LEGACY_ENCHANTMENT_ALIASES = Map.ofEntries( + Map.entry("DAMAGE_ALL", "sharpness"), + Map.entry("DAMAGE_UNDEAD", "smite"), + Map.entry("DAMAGE_ARTHROPODS", "bane_of_arthropods"), + Map.entry("ARROW_DAMAGE", "power"), + Map.entry("ARROW_KNOCKBACK", "punch"), + Map.entry("ARROW_FIRE", "flame"), + Map.entry("ARROW_INFINITE", "infinity"), + Map.entry("DIG_SPEED", "efficiency"), + Map.entry("DURABILITY", "unbreaking"), + Map.entry("LOOT_BONUS_BLOCKS", "fortune"), + Map.entry("LOOT_BONUS_MOBS", "looting"), + Map.entry("OXYGEN", "respiration"), + Map.entry("PROTECTION_ENVIRONMENTAL", "protection"), + Map.entry("PROTECTION_FIRE", "fire_protection"), + Map.entry("PROTECTION_FALL", "feather_falling"), + Map.entry("PROTECTION_EXPLOSIONS", "blast_protection"), + Map.entry("PROTECTION_PROJECTILE", "projectile_protection"), + Map.entry("WATER_WORKER", "aqua_affinity"), + Map.entry("THORNS", "thorns"), + Map.entry("KNOCKBACK", "knockback"), + Map.entry("FIRE_ASPECT", "fire_aspect"), + Map.entry("SILK_TOUCH", "silk_touch") + ); + + public static Iterable getAllEnchantments() { + return RegistryAccess.registryAccess().getRegistry(RegistryKey.ENCHANTMENT); + } + + public static Enchantment resolveEnchantment(String enchantmentName) { + if (enchantmentName == null || enchantmentName.isBlank()) { + return null; + } + + String normalized = enchantmentName.trim().toLowerCase(Locale.ROOT).replace("minecraft:", ""); + Enchantment enchantment = Enchantment.getByKey(NamespacedKey.minecraft(normalized)); + if (enchantment != null) { + return enchantment; + } + + String mapped = LEGACY_ENCHANTMENT_ALIASES.get(enchantmentName.trim().toUpperCase(Locale.ROOT)); + if (mapped != null) { + enchantment = Enchantment.getByKey(NamespacedKey.minecraft(mapped)); + if (enchantment != null) { + return enchantment; + } + } + + for (Enchantment value : getAllEnchantments()) { + String key = value.getKey().getKey(); + if (key.equalsIgnoreCase(enchantmentName) + || key.equalsIgnoreCase(normalized)) { + return value; + } + } + return null; + } } \ No newline at end of file diff --git a/core/src/main/java/dev/nandi0813/practice/util/GoldenHead.java b/core/src/main/java/dev/nandi0813/practice/util/GoldenHead.java index 73730c31..e99e049b 100644 --- a/core/src/main/java/dev/nandi0813/practice/util/GoldenHead.java +++ b/core/src/main/java/dev/nandi0813/practice/util/GoldenHead.java @@ -5,6 +5,8 @@ import dev.nandi0813.practice.manager.profile.Profile; import dev.nandi0813.practice.manager.profile.ProfileManager; import org.bukkit.Bukkit; +import org.bukkit.NamespacedKey; +import org.bukkit.Registry; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -40,7 +42,10 @@ public void getEffects() { String[] split = effect.split("::"); if (split.length != 3) continue; - PotionEffectType type = PotionEffectType.getByName(split[0]); + PotionEffectType type = Registry.EFFECT.get(NamespacedKey.minecraft(split[0].toLowerCase())); + if (type == null) { + type = Registry.EFFECT.get(NamespacedKey.minecraft(split[0].replace(' ', '_').toLowerCase())); + } if (type == null) continue; if (StringUtil.isNotInteger(split[1])) continue; @@ -80,7 +85,7 @@ public void onGoldenHeadConsume(PlayerInteractEvent e) { int amount = item.getAmount(); if (amount == 1) - player.setItemInHand(null); + player.getInventory().setItemInMainHand(null); else item.setAmount(amount - 1); @@ -101,7 +106,7 @@ public void onGoldenHeadConsume(PlayerInteractEvent e) { } if (activate) - player.addPotionEffect(effect, true); + player.addPotionEffect(effect); } player.updateInventory(); diff --git a/core/src/main/java/dev/nandi0813/practice/util/StringUtil.java b/core/src/main/java/dev/nandi0813/practice/util/StringUtil.java index 4f139d71..d2d74a60 100644 --- a/core/src/main/java/dev/nandi0813/practice/util/StringUtil.java +++ b/core/src/main/java/dev/nandi0813/practice/util/StringUtil.java @@ -1,9 +1,8 @@ package dev.nandi0813.practice.util; import dev.nandi0813.practice.manager.backend.LanguageManager; +import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; import org.apache.commons.lang3.StringUtils; -import org.bukkit.ChatColor; -import org.bukkit.Color; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -14,7 +13,10 @@ public enum StringUtil { ; public static String CC(String string) { - return ChatColor.translateAlternateColorCodes('&', string); + if (string == null) { + return ""; + } + return LegacyComponentSerializer.legacySection().serialize(LegacyComponentSerializer.legacyAmpersand().deserialize(string)); } public static List CC(List stringlist) { @@ -69,27 +71,6 @@ public static String getNormalizedName(String name) { return StringUtils.capitalize(name.replace("_", " ").toLowerCase()); } - public static Color translateChatColorToColor(ChatColor chatColor) { - return switch (chatColor) { - case AQUA -> Color.AQUA; - case BLACK -> Color.BLACK; - case BLUE -> Color.BLUE; - case DARK_AQUA -> Color.TEAL; - case DARK_BLUE -> Color.NAVY; - case DARK_GRAY -> Color.GRAY; - case DARK_GREEN -> Color.GREEN; - case DARK_PURPLE -> Color.PURPLE; - case DARK_RED -> Color.MAROON; - case GOLD -> Color.ORANGE; - case GRAY -> Color.SILVER; - case GREEN -> Color.OLIVE; - case LIGHT_PURPLE -> Color.FUCHSIA; - case RED -> Color.RED; - case WHITE -> Color.WHITE; - case YELLOW -> Color.YELLOW; - default -> null; - }; - } public static String legacyColorToMiniMessage(String string) { return string diff --git a/core/src/main/java/dev/nandi0813/practice/util/fightmapchange/FightChangeOptimized.java b/core/src/main/java/dev/nandi0813/practice/util/fightmapchange/FightChangeOptimized.java index 49c2e808..cbe32c31 100644 --- a/core/src/main/java/dev/nandi0813/practice/util/fightmapchange/FightChangeOptimized.java +++ b/core/src/main/java/dev/nandi0813/practice/util/fightmapchange/FightChangeOptimized.java @@ -1,6 +1,7 @@ package dev.nandi0813.practice.util.fightmapchange; import dev.nandi0813.practice.ZonePractice; +import dev.nandi0813.practice.manager.fight.util.BlockUtil; import dev.nandi0813.practice.moved.ChangedBlock; import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.Cuboid; @@ -112,7 +113,7 @@ public void addBlockChange(ChangedBlock change) { // Store Spectatable (Match/Event/FFA) for efficient metadata caching in BlockFromToEvent if (existing == null && spectatable != null) { Block block = change.getLocation().getBlock(); - block.setMetadata(PLACED_IN_FIGHT, new org.bukkit.metadata.FixedMetadataValue(ZonePractice.getInstance(), spectatable)); + BlockUtil.setMetadata(block, PLACED_IN_FIGHT, spectatable); } } @@ -354,8 +355,8 @@ private void extinguishFire() { for (Block block : cuboid) { String typeName = block.getType().name(); if (typeName.equals("FIRE") || typeName.equals("SOUL_FIRE")) { - block.setType(org.bukkit.Material.AIR, false); - block.removeMetadata(PLACED_IN_FIGHT, ZonePractice.getInstance()); + block.setBlockData(org.bukkit.Material.AIR.createBlockData(), false); + BlockUtil.clearMetadata(block, PLACED_IN_FIGHT); } } } diff --git a/core/src/main/java/dev/nandi0813/practice/util/playerutil/PlayerUtil.java b/core/src/main/java/dev/nandi0813/practice/util/playerutil/PlayerUtil.java index 034682a8..04d31ddb 100644 --- a/core/src/main/java/dev/nandi0813/practice/util/playerutil/PlayerUtil.java +++ b/core/src/main/java/dev/nandi0813/practice/util/playerutil/PlayerUtil.java @@ -7,6 +7,8 @@ import dev.nandi0813.practice.util.Common; import org.bukkit.Bukkit; import org.bukkit.GameMode; +import org.bukkit.attribute.Attribute; +import org.bukkit.attribute.AttributeInstance; import org.bukkit.entity.Player; import org.bukkit.potion.PotionEffect; @@ -47,7 +49,14 @@ public static void setFightPlayer(Player player) { Bukkit.getScheduler().runTaskLater(ZonePractice.getInstance(), () -> player.setHealth(20), 2L); Bukkit.getScheduler().runTaskLater(ZonePractice.getInstance(), () -> player.setFireTicks(0), 2L); player.setFoodLevel(25); - player.resetMaxHealth(); + AttributeInstance maxHealth = player.getAttribute(Attribute.MAX_HEALTH); + if (maxHealth != null) { + maxHealth.setBaseValue(maxHealth.getDefaultValue()); + + if (player.getHealth() > maxHealth.getValue()) { + player.setHealth(maxHealth.getValue()); + } + } player.setFallDistance(0); player.setWalkSpeed(0.2F); for (PotionEffect potionEffect : player.getActivePotionEffects()) From 802095482a7ee9cd4a168566083dfee892c7cf43 Mon Sep 17 00:00:00 2001 From: Nandor Dukat Date: Sun, 15 Mar 2026 10:28:40 +0100 Subject: [PATCH 13/38] fixed copy pom --- .../dev/nandi0813/practice/moved/ItemCreateUtil.java | 2 ++ distribution/pom.xml | 9 ++++----- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/core/src/main/java/dev/nandi0813/practice/moved/ItemCreateUtil.java b/core/src/main/java/dev/nandi0813/practice/moved/ItemCreateUtil.java index 1c8f8c86..132b97c2 100644 --- a/core/src/main/java/dev/nandi0813/practice/moved/ItemCreateUtil.java +++ b/core/src/main/java/dev/nandi0813/practice/moved/ItemCreateUtil.java @@ -141,6 +141,8 @@ public static void hideItemFlags(ItemMeta itemMeta) { itemMeta.addItemFlags(ItemFlag.HIDE_DESTROYS); itemMeta.addItemFlags(ItemFlag.HIDE_UNBREAKABLE); itemMeta.addItemFlags(ItemFlag.HIDE_PLACED_ON); + itemMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); + itemMeta.addItemFlags(ItemFlag.HIDE_ADDITIONAL_TOOLTIP); } public static ItemStack hideItemFlags(ItemStack item) { diff --git a/distribution/pom.xml b/distribution/pom.xml index 0c8427f5..b8c0f0a0 100644 --- a/distribution/pom.xml +++ b/distribution/pom.xml @@ -16,9 +16,8 @@ 8 UTF-8 - - ./target - ./target + + ${maven.multiModuleProjectDirectory} @@ -117,11 +116,11 @@ From 6132718560d0dd054576fb5628b7f445cfd21d1c Mon Sep 17 00:00:00 2001 From: Nandor Dukat Date: Sun, 15 Mar 2026 11:03:57 +0100 Subject: [PATCH 14/38] fixing build listener, still doesnt work --- .../dev/nandi0813/practice/ZonePractice.java | 5 ++++- .../manager/fight/ffa/FFAListener.java | 2 +- .../fight/listener/BuildBlockListener.java | 4 ++-- .../manager/fight/match/MatchManager.java | 4 ++++ .../match/listener/LadderTypeListener.java | 2 +- .../practice/moved/BuildListener.java | 21 +++++++++++-------- .../fightmapchange/FightChangeOptimized.java | 6 ++++-- 7 files changed, 28 insertions(+), 16 deletions(-) diff --git a/core/src/main/java/dev/nandi0813/practice/ZonePractice.java b/core/src/main/java/dev/nandi0813/practice/ZonePractice.java index c7267e17..788264b4 100644 --- a/core/src/main/java/dev/nandi0813/practice/ZonePractice.java +++ b/core/src/main/java/dev/nandi0813/practice/ZonePractice.java @@ -29,6 +29,7 @@ import dev.nandi0813.practice.manager.backend.*; import dev.nandi0813.practice.manager.division.DivisionManager; import dev.nandi0813.practice.manager.fight.event.EventManager; +import dev.nandi0813.practice.manager.fight.ffa.FFAListener; import dev.nandi0813.practice.manager.fight.ffa.FFAManager; import dev.nandi0813.practice.manager.fight.listener.BuildBlockListener; import dev.nandi0813.practice.manager.fight.match.MatchManager; @@ -373,8 +374,10 @@ private void registerListeners(PluginManager pm) { pm.registerEvents(new ArenaListener(), this); pm.registerEvents(new StatisticListener(), this); pm.registerEvents(arenaCopyUtilListener, this); + pm.registerEvents(new BuildListener(), this); pm.registerEvents(new ItemOffHandListener(), this); - pm.registerEvents(new ArenaListener(), this); + pm.registerEvents(new dev.nandi0813.practice.moved.ArenaListener(), this); + pm.registerEvents(new FFAListener(), this); pm.registerEvents(new EPCountdownListener(), this); pm.registerEvents(new FireworkRocketCooldownListener(), this); pm.registerEvents(new PlayerChatListener(), this); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/FFAListener.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/FFAListener.java index ff31eeb6..d0f59833 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/FFAListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/FFAListener.java @@ -51,7 +51,7 @@ * This listener only handles player-specific FFA game logic (damage, movement, crafting, etc.) * and the build validation gates (cancel the event before MONITOR fires for BuildBlockListener).

    */ -public abstract class FFAListener implements Listener { +public class FFAListener implements Listener { @EventHandler public void onRegen(EntityRegainHealthEvent e) { diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/listener/BuildBlockListener.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/listener/BuildBlockListener.java index 2986b875..5f9dd401 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/listener/BuildBlockListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/listener/BuildBlockListener.java @@ -26,8 +26,7 @@ * {@link FightUtil#getActiveBuildSpectatables()}. *

    * All world-driven block events (pistons, liquid flow, form, spread, explosions, TNT, - * falling blocks) are handled by the version-specific {@code MatchTntListener} which - * already covers all Spectatables via the same {@code getActiveBuildSpectatables()} helper. + * falling blocks) are handled by {@link dev.nandi0813.practice.moved.BuildListener}. */ public class BuildBlockListener implements Listener { @@ -116,4 +115,5 @@ public void onBlockPlace(BlockPlaceEvent e) { trackUnderBlockIfDirt(block, spectatable); } + } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/MatchManager.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/MatchManager.java index 20d821cd..e847c5ee 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/MatchManager.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/MatchManager.java @@ -5,6 +5,7 @@ import dev.nandi0813.practice.ZonePractice; import dev.nandi0813.practice.manager.arena.arenas.interfaces.BasicArena; import dev.nandi0813.practice.manager.fight.belowname.BelowNameManager; +import dev.nandi0813.practice.manager.fight.match.listener.LadderTypeListener; import dev.nandi0813.practice.manager.fight.match.listener.MatchEventListener; import dev.nandi0813.practice.manager.fight.match.listener.MatchLifecycleListener; import dev.nandi0813.practice.manager.fight.match.listener.StartListener; @@ -53,6 +54,9 @@ private MatchManager() { // Register start command listener Bukkit.getPluginManager().registerEvents(new StartListener(), practice); + Bukkit.getPluginManager().registerEvents(new LadderTypeListener() { + }, practice); + this.belowNameManager = BelowNameManager.getInstance(); PacketEvents.getAPI().getEventManager().registerListener(this.belowNameManager, PacketListenerPriority.NORMAL); } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/listener/LadderTypeListener.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/listener/LadderTypeListener.java index 6016e056..00c6b21f 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/listener/LadderTypeListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/listener/LadderTypeListener.java @@ -56,7 +56,7 @@ import static dev.nandi0813.practice.util.PermanentConfig.FIGHT_ENTITY; import static dev.nandi0813.practice.util.PermanentConfig.PLACED_IN_FIGHT; -public abstract class LadderTypeListener implements Listener { +public class LadderTypeListener implements Listener { // ========== HELPER METHODS ========== diff --git a/core/src/main/java/dev/nandi0813/practice/moved/BuildListener.java b/core/src/main/java/dev/nandi0813/practice/moved/BuildListener.java index f7bbd8a7..fe4b7791 100644 --- a/core/src/main/java/dev/nandi0813/practice/moved/BuildListener.java +++ b/core/src/main/java/dev/nandi0813/practice/moved/BuildListener.java @@ -326,17 +326,20 @@ public void onBlockPistonRetract(BlockPistonRetractEvent e) { @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onBlockForm(BlockFormEvent e) { - final Location location = e.getBlock().getLocation(); - final Spectatable spectatable = getByBlock(e.getBlock()); + final Block formed = e.getBlock(); + final Spectatable spectatable = getByBlock(formed); if (spectatable == null || !spectatable.isBuild()) return; - // 2-tick delay to guarantee the block has been written to the world - org.bukkit.Bukkit.getScheduler().runTaskLater(ZonePractice.getInstance(), () -> { - Block formed = location.getBlock(); - if (formed.getType() == Material.AIR) return; - if (BlockUtil.hasMetadata(formed, PLACED_IN_FIGHT)) return; - tagAndTrack(formed, spectatable); - }, 2L); + Block below = formed.getRelative(0, -1, 0); + if (ArenaUtil.turnsToDirt(below)) { + spectatable.getFightChange().addArenaBlockChange(new ChangedBlock(below)); + } + + // Track generated block directly so rollback does not miss short-lived form changes. + spectatable.getFightChange().addArenaBlockChange(new ChangedBlock(formed)); + if (!BlockUtil.hasMetadata(formed, PLACED_IN_FIGHT)) { + BlockUtil.setMetadata(formed, PLACED_IN_FIGHT, spectatable); + } } // ========================================================================= diff --git a/core/src/main/java/dev/nandi0813/practice/util/fightmapchange/FightChangeOptimized.java b/core/src/main/java/dev/nandi0813/practice/util/fightmapchange/FightChangeOptimized.java index cbe32c31..d5f886d6 100644 --- a/core/src/main/java/dev/nandi0813/practice/util/fightmapchange/FightChangeOptimized.java +++ b/core/src/main/java/dev/nandi0813/practice/util/fightmapchange/FightChangeOptimized.java @@ -337,7 +337,8 @@ public void quickRollback() { entry.getValue().changedBlock.reset(); Block block = BlockPosition.getBlock(world, entry.getKey()); - block.removeMetadata(PLACED_IN_FIGHT, ZonePractice.getInstance()); + // PLACED_IN_FIGHT uses PersistentTagUtil, so clear through BlockUtil. + BlockUtil.clearMetadata(block, PLACED_IN_FIGHT); iterator.remove(); } @@ -434,7 +435,8 @@ public void run() { blockEntry.changedBlock.reset(); Block block = BlockPosition.getBlock(world, pos); - block.removeMetadata(PLACED_IN_FIGHT, ZonePractice.getInstance()); + // PLACED_IN_FIGHT uses PersistentTagUtil, so clear through BlockUtil. + BlockUtil.clearMetadata(block, PLACED_IN_FIGHT); blocks.remove(pos); // Remove from live map } From 1df9137717a936224e61f7afc333d3e99ebace56 Mon Sep 17 00:00:00 2001 From: Nandor Dukat Date: Mon, 16 Mar 2026 18:07:08 +0100 Subject: [PATCH 15/38] fixed build rollback --- .../manager/fight/ffa/game/BuildRollback.java | 8 ++- .../manager/fight/match/MatchManager.java | 3 +- .../practice/moved/BuildListener.java | 69 ++++++++++++++++++- 3 files changed, 74 insertions(+), 6 deletions(-) diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/game/BuildRollback.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/game/BuildRollback.java index 174a80ce..53c5ffc6 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/game/BuildRollback.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/game/BuildRollback.java @@ -1,5 +1,6 @@ package dev.nandi0813.practice.manager.fight.ffa.game; +import dev.nandi0813.practice.ZonePractice; import dev.nandi0813.practice.manager.backend.ConfigManager; import dev.nandi0813.practice.util.fightmapchange.FightChangeOptimized; import dev.nandi0813.practice.util.interfaces.Runnable; @@ -40,7 +41,12 @@ public void cancel() { public void rollback() { this.seconds = ROLLBACK_SECONDS; - fightChange.rollback(300, 100); + + if (ZonePractice.getInstance().isEnabled()) { + fightChange.rollback(300, 100); + } else { + fightChange.quickRollback(); + } } } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/MatchManager.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/MatchManager.java index e847c5ee..ef318093 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/MatchManager.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/MatchManager.java @@ -54,8 +54,7 @@ private MatchManager() { // Register start command listener Bukkit.getPluginManager().registerEvents(new StartListener(), practice); - Bukkit.getPluginManager().registerEvents(new LadderTypeListener() { - }, practice); + Bukkit.getPluginManager().registerEvents(new LadderTypeListener(), practice); this.belowNameManager = BelowNameManager.getInstance(); PacketEvents.getAPI().getEventManager().registerListener(this.belowNameManager, PacketListenerPriority.NORMAL); diff --git a/core/src/main/java/dev/nandi0813/practice/moved/BuildListener.java b/core/src/main/java/dev/nandi0813/practice/moved/BuildListener.java index fe4b7791..e3b80a92 100644 --- a/core/src/main/java/dev/nandi0813/practice/moved/BuildListener.java +++ b/core/src/main/java/dev/nandi0813/practice/moved/BuildListener.java @@ -324,16 +324,33 @@ public void onBlockPistonRetract(BlockPistonRetractEvent e) { // BLOCK FORM (cobblestone / obsidian generators, ice, etc.) // ========================================================================= - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onBlockForm(BlockFormEvent e) { + /** + * Tracks blocks that turn to dirt when another block forms on top (e.g., grass + * becoming dirt when cobblestone is generated via lava). This runs at LOWEST priority + * to capture the block's state BEFORE it changes to dirt. + */ + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onBlockFormLowest(BlockFormEvent e) { final Block formed = e.getBlock(); final Spectatable spectatable = getByBlock(formed); if (spectatable == null || !spectatable.isBuild()) return; Block below = formed.getRelative(0, -1, 0); + // At LOWEST, the block below is still grass/mycelium/etc. before conversion. + // Capture its current state so rollback restores the exact original type. if (ArenaUtil.turnsToDirt(below)) { - spectatable.getFightChange().addArenaBlockChange(new ChangedBlock(below)); + Material originalMaterial = below.getType(); + spectatable.getFightChange().addArenaBlockChange( + new ChangedBlock(below, originalMaterial)); } + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onBlockForm(BlockFormEvent e) { + final Block formed = e.getBlock(); + final Spectatable spectatable = getByBlock(formed); + if (spectatable == null || !spectatable.isBuild()) return; + // Track generated block directly so rollback does not miss short-lived form changes. spectatable.getFightChange().addArenaBlockChange(new ChangedBlock(formed)); @@ -374,6 +391,30 @@ public void onBucketEmpty(PlayerBucketEmptyEvent e) { // LIQUID FLOW // ========================================================================= + /** + * Tracks blocks that turn to dirt when lava flows on top (e.g., grass + * becoming dirt when lava spreads over it). This runs at LOWEST priority + * to capture the block's state BEFORE it changes to dirt. + */ + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onBlockFromToLowest(BlockFromToEvent e) { + Block toBlock = e.getToBlock(); + Spectatable spectatable = getByBlock(toBlock); + if (spectatable == null || !spectatable.isBuild()) return; + + // Only handle lava flows (lava turns grass to dirt naturally) + Block fromBlock = e.getBlock(); + if (!fromBlock.isLiquid()) return; + + // At LOWEST, the destination block is still grass/mycelium/etc. before conversion. + // Capture its current state so rollback restores the exact original type. + if (ArenaUtil.turnsToDirt(toBlock)) { + Material originalMaterial = toBlock.getType(); + spectatable.getFightChange().addArenaBlockChange( + new ChangedBlock(toBlock, originalMaterial)); + } + } + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onBlockFromTo(BlockFromToEvent e) { Block fromBlock = e.getBlock(); @@ -464,6 +505,28 @@ public void onBlockSpread(BlockSpreadEvent e) { }); } + // ========================================================================= + // BLOCK FADE (grass → dirt, ice melt, etc.) + // ========================================================================= + + /** + * Tracks blocks that fade to another type (e.g. grass/mycelium turning to dirt when + * water is above and blocks light, or ice melting). Runs at LOWEST so the block still + * holds its original material when captured. + */ + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onBlockFade(BlockFadeEvent e) { + Block block = e.getBlock(); + if (!ArenaUtil.turnsToDirt(block)) return; + + Spectatable spectatable = getByBlock(block); + if (spectatable == null || !spectatable.isBuild()) return; + + // At LOWEST the block is still grass/mycelium/etc. — capture the original type. + spectatable.getFightChange().addArenaBlockChange( + new ChangedBlock(block, block.getType())); + } + // ========================================================================= // BLOCK BURN (fire destroying blocks) // ========================================================================= From ab7dcc6bdcb87c1b0247d6509c3472273220e72f Mon Sep 17 00:00:00 2001 From: Nandor Dukat Date: Mon, 16 Mar 2026 18:16:26 +0100 Subject: [PATCH 16/38] fixed backend error --- .../manager/backend/BackendManager.java | 7 ++- .../manager/server/ServerManager.java | 50 +++++++++++++++++-- 2 files changed, 53 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/dev/nandi0813/practice/manager/backend/BackendManager.java b/core/src/main/java/dev/nandi0813/practice/manager/backend/BackendManager.java index 8aca538e..07de882f 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/backend/BackendManager.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/backend/BackendManager.java @@ -43,7 +43,12 @@ public static void save() { try { config.save(file); } catch (IOException e) { - Common.sendConsoleMMMessage("Error: " + e.getMessage()); + Common.sendConsoleMMMessage("Error saving backend.yml: " + e.getMessage()); + } catch (Exception e) { + // Catches NullPointerException thrown by SnakeYAML when a ConfigurationSerializable + // (e.g. Location with a null world WeakReference) produces a null entry in its + // serialize() map. Log clearly instead of letting the async task swallow the trace. + Common.sendConsoleMMMessage("Error serializing backend.yml (possible null world in lobby location): " + e.getMessage()); } } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/server/ServerManager.java b/core/src/main/java/dev/nandi0813/practice/manager/server/ServerManager.java index 62f44459..2de3ed94 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/server/ServerManager.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/server/ServerManager.java @@ -112,20 +112,64 @@ public void loadOfflinePlayers() { public void loadLobby() { try { - // Reload backend to ensure Location objects are properly deserialized now that worlds are loaded + // Reload backend to ensure data is current now that worlds are loaded. BackendManager.reload(); - lobby = (Location) BackendManager.getConfig().get("lobby"); + + Object lobbyObj = BackendManager.getConfig().get("lobby"); + if (lobbyObj instanceof Location) { + // Old format: Location was stored as a ConfigurationSerializable ("==" key). + // Read it, then immediately migrate to the new primitive-field format so + // future async saves never attempt to serialize a Location object again. + lobby = (Location) lobbyObj; + if (lobby.getWorld() != null) { + writeLobbyPrimitives(lobby); + BackendManager.save(); + Common.sendConsoleMMMessage("Migrated lobby location to primitive-field format in backend.yml."); + } + } else if (BackendManager.getConfig().isConfigurationSection("lobby")) { + // New format: plain fields — world, x, y, z, yaw, pitch. + String worldName = BackendManager.getConfig().getString("lobby.world"); + if (worldName != null) { + World world = Bukkit.getWorld(worldName); + lobby = new Location( + world, + BackendManager.getConfig().getDouble("lobby.x"), + BackendManager.getConfig().getDouble("lobby.y"), + BackendManager.getConfig().getDouble("lobby.z"), + (float) BackendManager.getConfig().getDouble("lobby.yaw"), + (float) BackendManager.getConfig().getDouble("lobby.pitch") + ); + } + } } catch (Exception e) { Common.sendConsoleMMMessage("Lobby cannot be found."); } } + /** + * Writes the lobby location to the BackendManager config as individual primitive fields + * (world name + x/y/z/yaw/pitch) so that no {@link org.bukkit.configuration.serialization.ConfigurationSerializable} + * object is ever stored in the config. This prevents SnakeYAML from calling + * {@link Location#serialize()} during async saves, which can throw a NullPointerException + * if the Location's world {@code WeakReference} has been cleared. + */ + private void writeLobbyPrimitives(Location location) { + // Remove any existing entry (could be a Location object or an old section) + BackendManager.getConfig().set("lobby", null); + BackendManager.getConfig().set("lobby.world", location.getWorld().getName()); + BackendManager.getConfig().set("lobby.x", location.getX()); + BackendManager.getConfig().set("lobby.y", location.getY()); + BackendManager.getConfig().set("lobby.z", location.getZ()); + BackendManager.getConfig().set("lobby.yaw", (double) location.getYaw()); + BackendManager.getConfig().set("lobby.pitch", (double) location.getPitch()); + } + public void setLobby(Player player, Location newLobby) { lobby = newLobby; newLobby.getWorld().setSpawnLocation(newLobby.getBlockX(), newLobby.getBlockY(), newLobby.getBlockZ()); InventoryManager.getInstance().setLobbyInventory(player, true); - BackendManager.getConfig().set("lobby", lobby); + writeLobbyPrimitives(newLobby); BackendManager.save(); } From 3fa7260ecc62a1847a26720c7f956c52ce1059e6 Mon Sep 17 00:00:00 2001 From: Nandor Dukat Date: Mon, 16 Mar 2026 18:30:39 +0100 Subject: [PATCH 17/38] cleaned the code --- .github/workflows/maven-build.yml | 10 -- .github/workflows/release.yml | 15 -- README.md | 16 +- .../dev/nandi0813/practice/ZonePractice.java | 12 +- .../command/arena/arguments/Set/IconArg.java | 2 +- .../event/arguments/Events/BracketsArg.java | 2 +- .../event/arguments/Events/JuggernautArg.java | 2 +- .../event/arguments/Events/LMSArg.java | 2 +- .../event/arguments/Events/SumoArg.java | 2 +- .../command/ladder/arguments/IconArg.java | 3 +- .../command/practice/arguments/ArenasArg.java | 3 +- .../PlayerChatListener.java | 4 +- .../StatisticListener.java | 5 +- .../listener}/ArenaCopyUtilListener.java | 4 +- .../arena/{ => listener}/ArenaListener.java | 39 ++++- .../arena/setup/ArenaSetupListener.java | 2 +- .../arena/setup/SpawnMarkerManager.java | 2 +- .../arena/util}/FaweUtil.java | 3 +- .../practice/manager/duel/DuelRequest.java | 5 +- .../fight/belowname/BelowNameManager.java | 3 +- .../manager/fight/event/EventListener.java | 3 +- .../manager/fight/event/enums/EventType.java | 2 +- .../events/duel/brackets/BracketsData.java | 2 +- .../fight/event/events/duel/sumo/Sumo.java | 2 +- .../event/events/duel/sumo/SumoData.java | 2 +- .../fight/event/events/ffa/lms/LMS.java | 2 +- .../fight/event/events/ffa/lms/LMSData.java | 2 +- .../event/events/ffa/oitc/OITCListener.java | 3 +- .../fight/event/events/ffa/splegg/Splegg.java | 3 +- .../events/ffa/splegg/SpleggListener.java | 5 +- .../onevsall/juggernaut/Juggernaut.java | 2 +- .../onevsall/juggernaut/JuggernautData.java | 2 +- .../event/setup/EventSpawnMarkerManager.java | 2 +- .../manager/fight/ffa/FFAListener.java | 9 +- .../fight/listener/BuildBlockListener.java | 4 +- .../fight/listener}/BuildListener.java | 3 +- .../fight/listener}/EPCountdownListener.java | 3 +- .../FireworkRocketCooldownListener.java | 3 +- .../practice/manager/fight/match/Match.java | 2 +- .../practice/manager/fight/match/Round.java | 2 +- .../match/listener/LadderTypeListener.java | 8 +- .../match/listener/MatchEventListener.java | 2 +- .../manager/fight/match/type/duel/Duel.java | 8 +- .../fight/match/type/partyffa/PartyFFA.java | 12 +- .../playersvsplayers/PlayersVsPlayers.java | 10 +- .../manager/fight/match/util/KitUtil.java | 7 +- .../fight/match/util/MatchPlayerUtil.java | 2 +- .../fight/util}/BedUtil.java | 2 +- .../manager/fight/util/BlockUtil.java | 1 - .../fight/util}/ChangedBlock.java | 2 +- .../fight/util}/EntityHider.java | 2 +- .../manager/fight/util/FightUtil.java | 30 ++++ .../util}/ModernItemCooldownHandler.java | 2 +- .../fight/util}/PlayerUtil.java | 2 +- .../manager/fight/util/Stats/Statistic.java | 2 +- .../practice/manager/gui/GUIItem.java | 4 +- .../practice/manager/gui/GUIManager.java | 2 +- .../gui/guis/arena/ArenaCreateGui.java | 2 +- .../premadecustom/CustomLadderEditorGui.java | 9 +- .../CustomLadderSelectorGui.java | 2 +- .../premadecustom/CustomLadderSumGui.java | 5 +- .../gui/guis/ladder/LadderCreateGui.java | 2 +- .../gui/guis/ladder/LadderPreviewGui.java | 2 +- .../gui/guis/leaderboard/LbGuiUtil.java | 2 +- .../gui/guis/party/OtherPartiesGui.java | 2 +- .../gui/guis/profile/ProfileLadderStats.java | 2 +- .../gui/guis/profile/ProfileSetupGui.java | 5 +- .../gui/guis/selectors/ArenaSelectorGui.java | 2 +- .../gui/guis/selectors/LadderSelectorGui.java | 2 +- .../gui/setup/arena/ArenaSetupUtil.java | 2 +- .../ladder/laddersettings/InventoryGui.java | 6 +- .../practice/manager/inventory/Inventory.java | 3 +- .../manager/inventory/InventoryListener.java | 20 ++- .../manager/inventory/InventoryManager.java | 2 +- .../manager/inventory/InventoryUtil.java | 3 +- .../manager/ladder/abstraction/Ladder.java | 2 +- .../abstraction/interfaces/TempBuild.java | 2 +- .../ladder/abstraction/normal/BedFight.java | 2 +- .../abstraction/normal/PortalFight.java | 2 +- .../handlers/GoldenAppleSettingHandler.java | 2 +- .../handlers/HitDelaySettingHandler.java | 3 +- .../practice/manager/ladder/type/BedWars.java | 4 +- .../manager/ladder/type/FireballFight.java | 15 +- .../practice/manager/ladder/type/SkyWars.java | 2 +- .../practice/manager/ladder/type/Spleef.java | 2 +- .../manager/ladder/util/LadderUtil.java | 141 +++++++++++++++- .../manager/nametag/NametagManager.java | 2 +- .../manager/nametag/TabIntegration.java | 2 +- .../practice/manager/playerkit/KitItems.java | 2 +- .../manager/playerkit/PlayerKitUtil.java | 2 +- .../manager/playerkit/StaticItems.java | 2 +- .../manager/playerkit/guis/MainGUI.java | 3 +- .../manager/playerkit/items/KitItem.java | 2 +- .../practice/manager/profile/Profile.java | 2 +- .../practice/manager/queue/QueueManager.java | 3 +- .../queue/runnables/SearchRunnable.java | 2 +- .../manager/server/ServerManager.java | 2 +- .../manager/sidebar/adapter/AdapterUtil.java | 7 +- .../practice/moved/ArenaListener.java | 45 ------ .../nandi0813/practice/moved/FightUtil.java | 38 ----- .../practice/moved/ItemOffHandListener.java | 26 --- .../nandi0813/practice/moved/LadderUtil.java | 152 ------------------ .../dev/nandi0813/practice/util/Common.java | 9 +- .../{moved => util}/ItemCreateUtil.java | 3 +- .../practice/{moved => util}/KitData.java | 3 +- .../{moved => util}/VersionChecker.java | 2 +- .../{moved => util/actionbar}/ActionBar.java | 2 +- .../actionbar}/ActionBarRunnable.java | 2 +- .../fightmapchange/FightChangeOptimized.java | 2 +- .../practice/util/interfaces/Spectatable.java | 2 +- .../practice/util/playerutil/PlayerUtil.java | 4 +- libs/PaperSpigot-1.8.8-R0.1-SNAPSHOT.jar | 3 - 112 files changed, 394 insertions(+), 472 deletions(-) rename core/src/main/java/dev/nandi0813/practice/{moved => listener}/PlayerChatListener.java (99%) rename core/src/main/java/dev/nandi0813/practice/{moved => listener}/StatisticListener.java (98%) rename core/src/main/java/dev/nandi0813/practice/{moved => manager/arena/listener}/ArenaCopyUtilListener.java (99%) rename core/src/main/java/dev/nandi0813/practice/manager/arena/{ => listener}/ArenaListener.java (81%) rename core/src/main/java/dev/nandi0813/practice/{moved => manager/arena/util}/FaweUtil.java (95%) rename core/src/main/java/dev/nandi0813/practice/{moved => manager/fight/listener}/BuildListener.java (99%) rename core/src/main/java/dev/nandi0813/practice/{moved => manager/fight/listener}/EPCountdownListener.java (96%) rename core/src/main/java/dev/nandi0813/practice/{moved => manager/fight/listener}/FireworkRocketCooldownListener.java (92%) rename core/src/main/java/dev/nandi0813/practice/{moved => manager/fight/util}/BedUtil.java (98%) rename core/src/main/java/dev/nandi0813/practice/{moved => manager/fight/util}/ChangedBlock.java (98%) rename core/src/main/java/dev/nandi0813/practice/{moved => manager/fight/util}/EntityHider.java (99%) rename core/src/main/java/dev/nandi0813/practice/{moved => manager/fight/util}/ModernItemCooldownHandler.java (97%) rename core/src/main/java/dev/nandi0813/practice/{moved => manager/fight/util}/PlayerUtil.java (99%) delete mode 100644 core/src/main/java/dev/nandi0813/practice/moved/ArenaListener.java delete mode 100644 core/src/main/java/dev/nandi0813/practice/moved/FightUtil.java delete mode 100644 core/src/main/java/dev/nandi0813/practice/moved/ItemOffHandListener.java delete mode 100644 core/src/main/java/dev/nandi0813/practice/moved/LadderUtil.java rename core/src/main/java/dev/nandi0813/practice/{moved => util}/ItemCreateUtil.java (98%) rename core/src/main/java/dev/nandi0813/practice/{moved => util}/KitData.java (98%) rename core/src/main/java/dev/nandi0813/practice/{moved => util}/VersionChecker.java (98%) rename core/src/main/java/dev/nandi0813/practice/{moved => util/actionbar}/ActionBar.java (98%) rename core/src/main/java/dev/nandi0813/practice/{moved => util/actionbar}/ActionBarRunnable.java (93%) delete mode 100644 libs/PaperSpigot-1.8.8-R0.1-SNAPSHOT.jar diff --git a/.github/workflows/maven-build.yml b/.github/workflows/maven-build.yml index 03814a26..5112d034 100644 --- a/.github/workflows/maven-build.yml +++ b/.github/workflows/maven-build.yml @@ -23,16 +23,6 @@ jobs: distribution: 'temurin' cache: 'maven' - - name: Install Local Dependencies - run: | - mvn install:install-file \ - -Dfile=libs/PaperSpigot-1.8.8-R0.1-SNAPSHOT.jar \ - -DgroupId=org.github.paperspigot \ - -DartifactId=paperspigot-api \ - -Dversion=1.8.8-R0.1-SNAPSHOT \ - -Dpackaging=jar \ - -DgeneratePom=true - - name: Build with Maven run: mvn -B clean install --file pom.xml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index fff7c3bb..5284041f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -27,21 +27,6 @@ jobs: distribution: 'temurin' cache: 'maven' - - name: Install Local Dependencies - run: | - # Ensure this path matches your repo structure - if [ -f "libs/PaperSpigot-1.8.8-R0.1-SNAPSHOT.jar" ]; then - mvn install:install-file \ - -Dfile=libs/PaperSpigot-1.8.8-R0.1-SNAPSHOT.jar \ - -DgroupId=org.github.paperspigot \ - -DartifactId=paperspigot-api \ - -Dversion=1.8.8-R0.1-SNAPSHOT \ - -Dpackaging=jar \ - -DgeneratePom=true - else - echo "Warning: Local dependency not found, skipping install." - fi - - name: Check Version & Tag id: check_version run: | diff --git a/README.md b/README.md index 6bb969c9..3c4b3c14 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ For detailed guides on setup, configuration, and feature usage, please visit our ## Supported Versions -- Primary targets: **1.8.8**, **1.8.9** (legacy), and **modern 1.20.6 / 1.21.X** +- Primary targets: **1.20.6 / 1.21.X** - Actual supported versions are detected at runtime via the `VersionChecker` - The plugin automatically disables itself on unsupported versions @@ -45,11 +45,8 @@ shaded into ZonePractice. ## Repository Structure -- **core/** – main logic and shared systems (`practice-core-*.jar`) -- **spigot_1_8_8/** – legacy 1.8.8 platform build -- **spigot_modern/** – modern 1.20.x / 1.21.x builds +- **core/** – main logic (`practice-core-*.jar`) - **distribution/** – release packaging (`ZonePractice Pro v*.jar`) -- **libs/** – helper jars and forked server builds for development --- @@ -74,11 +71,6 @@ system before cloning or pulling updates: ## Building 1. **Prerequisites:** Install JDK (Java 21 recommended for modern builds, _it is not gonna work on Java 25_) and Maven. -2. **Install Local Dependencies:** - Since the PaperSpigot API is not available in public repositories, install it manually from the `libs` folder: - ```bash - mvn install:install-file -Dfile=libs/PaperSpigot-1.8.8-R0.1-SNAPSHOT.jar -DgroupId=org.github.paperspigot -DartifactId=paperspigot-api -Dversion=1.8.8-R0.1-SNAPSHOT -Dpackaging=jar -DgeneratePom=true - ``` 3. **Build the Project:** ```bash mvn clean package @@ -94,7 +86,7 @@ system before cloning or pulling updates: - Default configuration files are generated automatically. Templates live under `core/src/main/resources//` ( e.g., `config.yml`, `divisions.yml`, `guis.yml`, `inventories.yml`). -- `config.yml` includes a `VERSION` field (e.g., 13 for the legacy 1.8.8 template). Review updated templates when +- `config.yml` includes a `VERSION` field (e.g., 13). Review updated templates when upgrading. - Optional MySQL storage is available via the `MYSQL-DATABASE` section; back up configs before enabling. - Read console output for version validation, warnings and load messages. @@ -256,7 +248,7 @@ Defined in `plugin.yml`: ### MySQL Errors -- Verify MySQL settings in `1.8.8/config.yml` or `modern/config.yml` +- Verify MySQL settings in `config.yml` - Ensure the database accepts external connections - JDBC is handled via `DriverManager`; ensure a suitable MySQL driver is available diff --git a/core/src/main/java/dev/nandi0813/practice/ZonePractice.java b/core/src/main/java/dev/nandi0813/practice/ZonePractice.java index 788264b4..1ce04add 100644 --- a/core/src/main/java/dev/nandi0813/practice/ZonePractice.java +++ b/core/src/main/java/dev/nandi0813/practice/ZonePractice.java @@ -22,8 +22,9 @@ import dev.nandi0813.practice.command.staff.StaffCommand; import dev.nandi0813.practice.command.statistics.StatisticsCommand; import dev.nandi0813.practice.listener.*; -import dev.nandi0813.practice.manager.arena.ArenaListener; import dev.nandi0813.practice.manager.arena.ArenaManager; +import dev.nandi0813.practice.manager.arena.listener.ArenaCopyUtilListener; +import dev.nandi0813.practice.manager.arena.listener.ArenaListener; import dev.nandi0813.practice.manager.arena.setup.SpawnMarkerManager; import dev.nandi0813.practice.manager.arena.util.ArenaWorldUtil; import dev.nandi0813.practice.manager.backend.*; @@ -32,7 +33,11 @@ import dev.nandi0813.practice.manager.fight.ffa.FFAListener; import dev.nandi0813.practice.manager.fight.ffa.FFAManager; import dev.nandi0813.practice.manager.fight.listener.BuildBlockListener; +import dev.nandi0813.practice.manager.fight.listener.BuildListener; +import dev.nandi0813.practice.manager.fight.listener.EPCountdownListener; +import dev.nandi0813.practice.manager.fight.listener.FireworkRocketCooldownListener; import dev.nandi0813.practice.manager.fight.match.MatchManager; +import dev.nandi0813.practice.manager.fight.util.EntityHider; import dev.nandi0813.practice.manager.fight.util.EntityHiderListener; import dev.nandi0813.practice.manager.gui.setup.arena.ArenaGUISetupManager; import dev.nandi0813.practice.manager.inventory.InventoryManager; @@ -45,7 +50,6 @@ import dev.nandi0813.practice.manager.profile.ProfileManager; import dev.nandi0813.practice.manager.server.ServerManager; import dev.nandi0813.practice.manager.sidebar.SidebarManager; -import dev.nandi0813.practice.moved.*; import dev.nandi0813.practice.util.*; import dev.nandi0813.practice.util.placeholderapi.PlayerExpansion; import io.github.retrooper.packetevents.factory.spigot.SpigotPacketEventsBuilder; @@ -101,7 +105,7 @@ public void onEnable() { metrics = new Metrics(this, 16055); if (VersionChecker.getBukkitVersion() == null) { - Common.sendConsoleMMMessage("Unsupported server version! Please use 1.8.8 or 1.8.9 or 1.20.6 or 1.21.X"); + Common.sendConsoleMMMessage("Unsupported server version! Please use 1.20.6 or 1.21.X"); Bukkit.getPluginManager().disablePlugin(this); return; } @@ -375,8 +379,6 @@ private void registerListeners(PluginManager pm) { pm.registerEvents(new StatisticListener(), this); pm.registerEvents(arenaCopyUtilListener, this); pm.registerEvents(new BuildListener(), this); - pm.registerEvents(new ItemOffHandListener(), this); - pm.registerEvents(new dev.nandi0813.practice.moved.ArenaListener(), this); pm.registerEvents(new FFAListener(), this); pm.registerEvents(new EPCountdownListener(), this); pm.registerEvents(new FireworkRocketCooldownListener(), this); diff --git a/core/src/main/java/dev/nandi0813/practice/command/arena/arguments/Set/IconArg.java b/core/src/main/java/dev/nandi0813/practice/command/arena/arguments/Set/IconArg.java index caabeeab..d9d4b194 100644 --- a/core/src/main/java/dev/nandi0813/practice/command/arena/arguments/Set/IconArg.java +++ b/core/src/main/java/dev/nandi0813/practice/command/arena/arguments/Set/IconArg.java @@ -3,10 +3,10 @@ import dev.nandi0813.practice.manager.arena.ArenaManager; import dev.nandi0813.practice.manager.arena.arenas.interfaces.DisplayArena; import dev.nandi0813.practice.manager.backend.LanguageManager; +import dev.nandi0813.practice.manager.fight.util.PlayerUtil; import dev.nandi0813.practice.manager.gui.GUIManager; import dev.nandi0813.practice.manager.gui.GUIType; import dev.nandi0813.practice.manager.gui.setup.arena.ArenaGUISetupManager; -import dev.nandi0813.practice.moved.PlayerUtil; import dev.nandi0813.practice.util.Common; import org.bukkit.Material; import org.bukkit.entity.Player; diff --git a/core/src/main/java/dev/nandi0813/practice/command/event/arguments/Events/BracketsArg.java b/core/src/main/java/dev/nandi0813/practice/command/event/arguments/Events/BracketsArg.java index 26a19312..e86ad064 100644 --- a/core/src/main/java/dev/nandi0813/practice/command/event/arguments/Events/BracketsArg.java +++ b/core/src/main/java/dev/nandi0813/practice/command/event/arguments/Events/BracketsArg.java @@ -5,8 +5,8 @@ import dev.nandi0813.practice.manager.fight.event.enums.EventType; import dev.nandi0813.practice.manager.fight.event.events.duel.brackets.BracketsData; import dev.nandi0813.practice.manager.fight.event.util.EventUtil; -import dev.nandi0813.practice.moved.KitData; import dev.nandi0813.practice.util.Common; +import dev.nandi0813.practice.util.KitData; import org.bukkit.entity.Player; import org.bukkit.util.StringUtil; diff --git a/core/src/main/java/dev/nandi0813/practice/command/event/arguments/Events/JuggernautArg.java b/core/src/main/java/dev/nandi0813/practice/command/event/arguments/Events/JuggernautArg.java index ccf79281..fbb0ec2b 100644 --- a/core/src/main/java/dev/nandi0813/practice/command/event/arguments/Events/JuggernautArg.java +++ b/core/src/main/java/dev/nandi0813/practice/command/event/arguments/Events/JuggernautArg.java @@ -5,8 +5,8 @@ import dev.nandi0813.practice.manager.fight.event.enums.EventType; import dev.nandi0813.practice.manager.fight.event.events.onevsall.juggernaut.JuggernautData; import dev.nandi0813.practice.manager.fight.event.util.EventUtil; -import dev.nandi0813.practice.moved.KitData; import dev.nandi0813.practice.util.Common; +import dev.nandi0813.practice.util.KitData; import org.bukkit.entity.Player; import org.bukkit.util.StringUtil; diff --git a/core/src/main/java/dev/nandi0813/practice/command/event/arguments/Events/LMSArg.java b/core/src/main/java/dev/nandi0813/practice/command/event/arguments/Events/LMSArg.java index 0f3077cd..67e3dbb1 100644 --- a/core/src/main/java/dev/nandi0813/practice/command/event/arguments/Events/LMSArg.java +++ b/core/src/main/java/dev/nandi0813/practice/command/event/arguments/Events/LMSArg.java @@ -5,8 +5,8 @@ import dev.nandi0813.practice.manager.fight.event.enums.EventType; import dev.nandi0813.practice.manager.fight.event.events.ffa.lms.LMSData; import dev.nandi0813.practice.manager.fight.event.util.EventUtil; -import dev.nandi0813.practice.moved.KitData; import dev.nandi0813.practice.util.Common; +import dev.nandi0813.practice.util.KitData; import org.bukkit.entity.Player; import org.bukkit.util.StringUtil; diff --git a/core/src/main/java/dev/nandi0813/practice/command/event/arguments/Events/SumoArg.java b/core/src/main/java/dev/nandi0813/practice/command/event/arguments/Events/SumoArg.java index 473d9ab5..8a3df075 100644 --- a/core/src/main/java/dev/nandi0813/practice/command/event/arguments/Events/SumoArg.java +++ b/core/src/main/java/dev/nandi0813/practice/command/event/arguments/Events/SumoArg.java @@ -5,8 +5,8 @@ import dev.nandi0813.practice.manager.fight.event.enums.EventType; import dev.nandi0813.practice.manager.fight.event.events.duel.sumo.SumoData; import dev.nandi0813.practice.manager.fight.event.util.EventUtil; -import dev.nandi0813.practice.moved.KitData; import dev.nandi0813.practice.util.Common; +import dev.nandi0813.practice.util.KitData; import org.bukkit.entity.Player; import org.bukkit.util.StringUtil; diff --git a/core/src/main/java/dev/nandi0813/practice/command/ladder/arguments/IconArg.java b/core/src/main/java/dev/nandi0813/practice/command/ladder/arguments/IconArg.java index 1fa8fa97..cc6a1f91 100644 --- a/core/src/main/java/dev/nandi0813/practice/command/ladder/arguments/IconArg.java +++ b/core/src/main/java/dev/nandi0813/practice/command/ladder/arguments/IconArg.java @@ -1,6 +1,7 @@ package dev.nandi0813.practice.command.ladder.arguments; import dev.nandi0813.practice.manager.backend.LanguageManager; +import dev.nandi0813.practice.manager.fight.util.PlayerUtil; import dev.nandi0813.practice.manager.gui.GUIManager; import dev.nandi0813.practice.manager.gui.GUIType; import dev.nandi0813.practice.manager.gui.setup.ladder.LadderSetupManager; @@ -41,7 +42,7 @@ public static void run(Player player, String label, String[] args) { return; } - ItemStack icon = dev.nandi0813.practice.moved.PlayerUtil.getPlayerMainHand(player); + ItemStack icon = PlayerUtil.getPlayerMainHand(player); if (icon.getType().equals(Material.AIR)) { Common.sendMMMessage(player, LanguageManager.getString("COMMAND.LADDER.ARGUMENTS.ICON.NO-ITEM").replace("%ladder%", ladder.getDisplayName())); return; diff --git a/core/src/main/java/dev/nandi0813/practice/command/practice/arguments/ArenasArg.java b/core/src/main/java/dev/nandi0813/practice/command/practice/arguments/ArenasArg.java index 6a44a0eb..3bbcd5fa 100644 --- a/core/src/main/java/dev/nandi0813/practice/command/practice/arguments/ArenasArg.java +++ b/core/src/main/java/dev/nandi0813/practice/command/practice/arguments/ArenasArg.java @@ -2,6 +2,7 @@ import dev.nandi0813.practice.manager.arena.util.ArenaWorldUtil; import dev.nandi0813.practice.manager.backend.LanguageManager; +import dev.nandi0813.practice.manager.fight.util.PlayerUtil; import dev.nandi0813.practice.util.Common; import org.bukkit.GameMode; import org.bukkit.entity.Player; @@ -15,7 +16,7 @@ public static void run(Player player) { return; } - dev.nandi0813.practice.moved.PlayerUtil.clearInventory(player); + PlayerUtil.clearInventory(player); player.setGameMode(GameMode.CREATIVE); player.setAllowFlight(true); player.setFlying(true); diff --git a/core/src/main/java/dev/nandi0813/practice/moved/PlayerChatListener.java b/core/src/main/java/dev/nandi0813/practice/listener/PlayerChatListener.java similarity index 99% rename from core/src/main/java/dev/nandi0813/practice/moved/PlayerChatListener.java rename to core/src/main/java/dev/nandi0813/practice/listener/PlayerChatListener.java index 259821e8..5fb21f24 100644 --- a/core/src/main/java/dev/nandi0813/practice/moved/PlayerChatListener.java +++ b/core/src/main/java/dev/nandi0813/practice/listener/PlayerChatListener.java @@ -1,4 +1,4 @@ -package dev.nandi0813.practice.moved; +package dev.nandi0813.practice.listener; import dev.nandi0813.practice.ZonePractice; import dev.nandi0813.practice.manager.backend.ConfigManager; @@ -9,8 +9,8 @@ import dev.nandi0813.practice.manager.profile.ProfileManager; import dev.nandi0813.practice.util.ChatFormatUtil; import dev.nandi0813.practice.util.Common; -import dev.nandi0813.practice.util.SoftDependUtil; import dev.nandi0813.practice.util.PAPIUtil; +import dev.nandi0813.practice.util.SoftDependUtil; import io.papermc.paper.event.player.AsyncChatEvent; import net.kyori.adventure.audience.Audience; import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; diff --git a/core/src/main/java/dev/nandi0813/practice/moved/StatisticListener.java b/core/src/main/java/dev/nandi0813/practice/listener/StatisticListener.java similarity index 98% rename from core/src/main/java/dev/nandi0813/practice/moved/StatisticListener.java rename to core/src/main/java/dev/nandi0813/practice/listener/StatisticListener.java index 7231d546..47793ddb 100644 --- a/core/src/main/java/dev/nandi0813/practice/moved/StatisticListener.java +++ b/core/src/main/java/dev/nandi0813/practice/listener/StatisticListener.java @@ -1,4 +1,4 @@ -package dev.nandi0813.practice.moved; +package dev.nandi0813.practice.listener; import dev.nandi0813.practice.ZonePractice; import dev.nandi0813.practice.manager.backend.ConfigManager; @@ -7,6 +7,7 @@ import dev.nandi0813.practice.manager.fight.match.Match; import dev.nandi0813.practice.manager.fight.match.MatchManager; import dev.nandi0813.practice.manager.fight.match.enums.RoundStatus; +import dev.nandi0813.practice.manager.fight.util.PlayerUtil; import dev.nandi0813.practice.manager.fight.util.Stats.Statistic; import dev.nandi0813.practice.manager.ladder.type.Boxing; import dev.nandi0813.practice.manager.profile.Profile; @@ -66,7 +67,7 @@ public void onClick(PlayerInteractEvent e) { Player player = e.getPlayer(); Profile profile = ProfileManager.getInstance().getProfile(player); - if (dev.nandi0813.practice.moved.PlayerUtil.getItemInUse(player, Material.FISHING_ROD) != null) { + if (PlayerUtil.getItemInUse(player, Material.FISHING_ROD) != null) { return; } diff --git a/core/src/main/java/dev/nandi0813/practice/moved/ArenaCopyUtilListener.java b/core/src/main/java/dev/nandi0813/practice/manager/arena/listener/ArenaCopyUtilListener.java similarity index 99% rename from core/src/main/java/dev/nandi0813/practice/moved/ArenaCopyUtilListener.java rename to core/src/main/java/dev/nandi0813/practice/manager/arena/listener/ArenaCopyUtilListener.java index c8219f08..426ab3e9 100644 --- a/core/src/main/java/dev/nandi0813/practice/moved/ArenaCopyUtilListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/arena/listener/ArenaCopyUtilListener.java @@ -1,4 +1,4 @@ -package dev.nandi0813.practice.moved; +package dev.nandi0813.practice.manager.arena.listener; import dev.nandi0813.practice.ZonePractice; import dev.nandi0813.practice.manager.arena.ArenaManager; @@ -6,6 +6,7 @@ import dev.nandi0813.practice.manager.arena.arenas.ArenaCopy; import dev.nandi0813.practice.manager.arena.util.ArenaWorldUtil; import dev.nandi0813.practice.manager.arena.util.BedLocation; +import dev.nandi0813.practice.manager.arena.util.FaweUtil; import dev.nandi0813.practice.manager.arena.util.PortalLocation; import dev.nandi0813.practice.manager.backend.LanguageManager; import dev.nandi0813.practice.manager.gui.GUIManager; @@ -13,6 +14,7 @@ import dev.nandi0813.practice.manager.gui.setup.arena.ArenaGUISetupManager; import dev.nandi0813.practice.manager.profile.Profile; import dev.nandi0813.practice.util.*; +import dev.nandi0813.practice.util.actionbar.ActionBar; import lombok.Getter; import org.bukkit.Bukkit; import org.bukkit.Location; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/arena/ArenaListener.java b/core/src/main/java/dev/nandi0813/practice/manager/arena/listener/ArenaListener.java similarity index 81% rename from core/src/main/java/dev/nandi0813/practice/manager/arena/ArenaListener.java rename to core/src/main/java/dev/nandi0813/practice/manager/arena/listener/ArenaListener.java index 84594e63..0abba01d 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/arena/ArenaListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/arena/listener/ArenaListener.java @@ -1,5 +1,7 @@ -package dev.nandi0813.practice.manager.arena; +package dev.nandi0813.practice.manager.arena.listener; +import dev.nandi0813.practice.ZonePractice; +import dev.nandi0813.practice.manager.arena.ArenaManager; import dev.nandi0813.practice.manager.arena.arenas.Arena; import dev.nandi0813.practice.manager.arena.arenas.interfaces.BasicArena; import dev.nandi0813.practice.manager.arena.util.ArenaUtil; @@ -8,6 +10,7 @@ import dev.nandi0813.practice.manager.fight.match.MatchManager; import dev.nandi0813.practice.manager.profile.Profile; import dev.nandi0813.practice.manager.profile.ProfileManager; +import dev.nandi0813.practice.manager.server.ServerManager; import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.Cuboid; import org.bukkit.Location; @@ -20,6 +23,11 @@ import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.world.ChunkUnloadEvent; +import org.bukkit.event.world.WorldUnloadEvent; + +import static dev.nandi0813.practice.manager.arena.ArenaManager.LOADED_CHUNKS; +import static dev.nandi0813.practice.manager.arena.ArenaManager.LOAD_CHUNKS; public class ArenaListener implements Listener { @@ -143,4 +151,33 @@ public void onPlayerInteract(PlayerInteractEvent e) { } } + @EventHandler + public void onChunkUnload(ChunkUnloadEvent e) { + if (LOAD_CHUNKS) { + if (LOADED_CHUNKS.contains(e.getChunk())) { + // Use addPluginChunkTicket to force-keep the chunk loaded. + // This is safe from recursion (unlike getChunkAtAsync which can + // trigger chunk scheduling → more unloads → StackOverflowError). + e.getChunk().addPluginChunkTicket(ZonePractice.getInstance()); + } + } + } + + @EventHandler + public void onWorldUnload(WorldUnloadEvent e) { + if (e.getWorld() == ArenaWorldUtil.getArenasWorld()) { + e.setCancelled(true); + return; + } + + if (e.getWorld() == ArenaWorldUtil.getArenasCopyWorld()) { + e.setCancelled(true); + return; + } + + if (ServerManager.getLobby() != null && ServerManager.getLobby().getWorld() == e.getWorld()) { + e.setCancelled(true); + } + } + } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/arena/setup/ArenaSetupListener.java b/core/src/main/java/dev/nandi0813/practice/manager/arena/setup/ArenaSetupListener.java index 7f9bbeea..7076f1ee 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/arena/setup/ArenaSetupListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/arena/setup/ArenaSetupListener.java @@ -9,10 +9,10 @@ import dev.nandi0813.practice.manager.arena.util.PortalLocation; import dev.nandi0813.practice.manager.backend.ConfigManager; import dev.nandi0813.practice.manager.backend.LanguageManager; +import dev.nandi0813.practice.manager.fight.util.BedUtil; import dev.nandi0813.practice.manager.gui.GUIType; import dev.nandi0813.practice.manager.gui.setup.arena.ArenaGUISetupManager; import dev.nandi0813.practice.manager.ladder.enums.LadderType; -import dev.nandi0813.practice.moved.BedUtil; import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.Cuboid; import org.bukkit.Location; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/arena/setup/SpawnMarkerManager.java b/core/src/main/java/dev/nandi0813/practice/manager/arena/setup/SpawnMarkerManager.java index f4a2ddac..9f74d651 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/arena/setup/SpawnMarkerManager.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/arena/setup/SpawnMarkerManager.java @@ -4,8 +4,8 @@ import dev.nandi0813.practice.manager.arena.arenas.FFAArena; import dev.nandi0813.practice.manager.arena.arenas.interfaces.DisplayArena; import dev.nandi0813.practice.manager.arena.util.ArenaUtil; -import dev.nandi0813.practice.moved.ItemCreateUtil; import dev.nandi0813.practice.util.Common; +import dev.nandi0813.practice.util.ItemCreateUtil; import lombok.Getter; import net.kyori.adventure.text.Component; import org.bukkit.Location; diff --git a/core/src/main/java/dev/nandi0813/practice/moved/FaweUtil.java b/core/src/main/java/dev/nandi0813/practice/manager/arena/util/FaweUtil.java similarity index 95% rename from core/src/main/java/dev/nandi0813/practice/moved/FaweUtil.java rename to core/src/main/java/dev/nandi0813/practice/manager/arena/util/FaweUtil.java index 501a36c7..3d501c2b 100644 --- a/core/src/main/java/dev/nandi0813/practice/moved/FaweUtil.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/arena/util/FaweUtil.java @@ -1,4 +1,4 @@ -package dev.nandi0813.practice.moved; +package dev.nandi0813.practice.manager.arena.util; import com.sk89q.worldedit.EditSession; import com.sk89q.worldedit.WorldEdit; @@ -8,7 +8,6 @@ import com.sk89q.worldedit.regions.CuboidRegion; import com.sk89q.worldedit.regions.Region; import com.sk89q.worldedit.world.block.BlockTypes; -import dev.nandi0813.practice.manager.arena.util.ArenaWorldUtil; import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.Cuboid; import org.bukkit.Location; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/duel/DuelRequest.java b/core/src/main/java/dev/nandi0813/practice/manager/duel/DuelRequest.java index 49253555..b03b4aff 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/duel/DuelRequest.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/duel/DuelRequest.java @@ -3,6 +3,7 @@ import dev.nandi0813.practice.manager.arena.arenas.Arena; import dev.nandi0813.practice.manager.backend.LanguageManager; import dev.nandi0813.practice.manager.fight.match.type.duel.Duel; +import dev.nandi0813.practice.manager.fight.util.PlayerUtil; import dev.nandi0813.practice.manager.ladder.abstraction.Ladder; import dev.nandi0813.practice.manager.ladder.util.LadderUtil; import dev.nandi0813.practice.util.Common; @@ -43,7 +44,7 @@ public void sendRequest() { .replace("%arena%", arenaName) .replace("%rounds%", String.valueOf(rounds)) .replace("%target%", target.getName()) - .replace("%targetPing%", String.valueOf(dev.nandi0813.practice.moved.PlayerUtil.getPing(target))) + .replace("%targetPing%", String.valueOf(PlayerUtil.getPing(target))) ); } @@ -53,7 +54,7 @@ public void sendRequest() { .replace("%arena%", arenaName) .replace("%rounds%", String.valueOf(rounds)) .replace("%sender%", sender.getName()) - .replace("%senderPing%", String.valueOf(dev.nandi0813.practice.moved.PlayerUtil.getPing(sender))) + .replace("%senderPing%", String.valueOf(PlayerUtil.getPing(sender))) ); } } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/belowname/BelowNameManager.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/belowname/BelowNameManager.java index 3915e734..89352fde 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/belowname/BelowNameManager.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/belowname/BelowNameManager.java @@ -7,6 +7,7 @@ import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerScoreboardObjective; import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerUpdateScore; import dev.nandi0813.practice.ZonePractice; +import dev.nandi0813.practice.manager.fight.util.PlayerUtil; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Bukkit; @@ -44,7 +45,7 @@ private BelowNameManager() { continue; } - double health = dev.nandi0813.practice.moved.PlayerUtil.getPlayerHealth(otherPlayer); + double health = PlayerUtil.getPlayerHealth(otherPlayer); int hp = (int) Math.round(health); Component formattedHealth = Component.text(String.format("%.1f", health)); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/EventListener.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/EventListener.java index a3e6f5e3..cc3da2da 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/EventListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/EventListener.java @@ -9,6 +9,7 @@ import dev.nandi0813.practice.manager.fight.event.interfaces.Event; import dev.nandi0813.practice.manager.fight.event.util.EventUtil; import dev.nandi0813.practice.manager.fight.util.BlockUtil; +import dev.nandi0813.practice.manager.fight.util.PlayerUtil; import dev.nandi0813.practice.manager.profile.Profile; import dev.nandi0813.practice.manager.profile.ProfileManager; import dev.nandi0813.practice.manager.profile.enums.ProfileStatus; @@ -56,7 +57,7 @@ public void onTrackerUse(PlayerInteractEvent e) { return; } - ItemStack item = dev.nandi0813.practice.moved.PlayerUtil.getItemInUse(player, EventManager.PLAYER_TRACKER.getType()); + ItemStack item = PlayerUtil.getItemInUse(player, EventManager.PLAYER_TRACKER.getType()); if (item == null) { return; } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/enums/EventType.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/enums/EventType.java index f229270a..25c4a1da 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/enums/EventType.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/enums/EventType.java @@ -2,7 +2,7 @@ import dev.nandi0813.practice.manager.backend.ConfigManager; import dev.nandi0813.practice.manager.backend.LanguageManager; -import dev.nandi0813.practice.moved.ItemCreateUtil; +import dev.nandi0813.practice.util.ItemCreateUtil; import lombok.Getter; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/duel/brackets/BracketsData.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/duel/brackets/BracketsData.java index 854aeb53..752e3b5e 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/duel/brackets/BracketsData.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/duel/brackets/BracketsData.java @@ -2,7 +2,7 @@ import dev.nandi0813.practice.manager.fight.event.enums.EventType; import dev.nandi0813.practice.manager.fight.event.events.duel.interfaces.DuelEventData; -import dev.nandi0813.practice.moved.KitData; +import dev.nandi0813.practice.util.KitData; import lombok.Getter; import java.io.IOException; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/duel/sumo/Sumo.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/duel/sumo/Sumo.java index f980a52e..cd58ea88 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/duel/sumo/Sumo.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/duel/sumo/Sumo.java @@ -18,7 +18,7 @@ public SumoData getEventData() { @Override public void teleport(Player player, Location location) { - dev.nandi0813.practice.moved.PlayerUtil.clearInventory(player); + dev.nandi0813.practice.manager.fight.util.PlayerUtil.clearInventory(player); PlayerUtil.setFightPlayer(player); player.teleport(location); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/duel/sumo/SumoData.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/duel/sumo/SumoData.java index 97936121..38ee4078 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/duel/sumo/SumoData.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/duel/sumo/SumoData.java @@ -2,7 +2,7 @@ import dev.nandi0813.practice.manager.fight.event.enums.EventType; import dev.nandi0813.practice.manager.fight.event.events.duel.interfaces.DuelEventData; -import dev.nandi0813.practice.moved.KitData; +import dev.nandi0813.practice.util.KitData; import lombok.Getter; import java.io.IOException; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/ffa/lms/LMS.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/ffa/lms/LMS.java index 91a19fcc..e9649287 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/ffa/lms/LMS.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/ffa/lms/LMS.java @@ -1,7 +1,7 @@ package dev.nandi0813.practice.manager.fight.event.events.ffa.lms; import dev.nandi0813.practice.manager.fight.event.events.ffa.interfaces.FFAEvent; -import dev.nandi0813.practice.moved.KitData; +import dev.nandi0813.practice.util.KitData; import org.bukkit.entity.Player; public class LMS extends FFAEvent { diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/ffa/lms/LMSData.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/ffa/lms/LMSData.java index e235d966..bd2c0898 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/ffa/lms/LMSData.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/ffa/lms/LMSData.java @@ -2,7 +2,7 @@ import dev.nandi0813.practice.manager.fight.event.enums.EventType; import dev.nandi0813.practice.manager.fight.event.interfaces.EventData; -import dev.nandi0813.practice.moved.KitData; +import dev.nandi0813.practice.util.KitData; import lombok.Getter; import java.io.IOException; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/ffa/oitc/OITCListener.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/ffa/oitc/OITCListener.java index a52f918f..180ee796 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/ffa/oitc/OITCListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/ffa/oitc/OITCListener.java @@ -4,6 +4,7 @@ import dev.nandi0813.practice.manager.fight.event.enums.EventStatus; import dev.nandi0813.practice.manager.fight.event.events.ffa.interfaces.FFAListener; import dev.nandi0813.practice.manager.fight.event.interfaces.Event; +import dev.nandi0813.practice.manager.fight.util.PlayerUtil; import dev.nandi0813.practice.manager.profile.Profile; import dev.nandi0813.practice.manager.profile.ProfileManager; import dev.nandi0813.practice.manager.profile.enums.ProfileStatus; @@ -127,7 +128,7 @@ public void onPlayerInteract(Event event, PlayerInteractEvent e) { if (!event.getStatus().equals(EventStatus.LIVE)) { Player player = e.getPlayer(); - if (dev.nandi0813.practice.moved.PlayerUtil.isItemInUse(player, Material.BOW)) { + if (PlayerUtil.isItemInUse(player, Material.BOW)) { e.setCancelled(true); player.updateInventory(); } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/ffa/splegg/Splegg.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/ffa/splegg/Splegg.java index 31aec121..ee1a315e 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/ffa/splegg/Splegg.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/ffa/splegg/Splegg.java @@ -1,6 +1,7 @@ package dev.nandi0813.practice.manager.fight.event.events.ffa.splegg; import dev.nandi0813.practice.manager.fight.event.events.ffa.interfaces.FFAEvent; +import dev.nandi0813.practice.manager.fight.util.PlayerUtil; import lombok.Getter; import org.bukkit.entity.Player; @@ -27,7 +28,7 @@ protected void customCustomStart() { @Override protected void loadInventory(Player player) { - dev.nandi0813.practice.moved.PlayerUtil.clearInventory(player); + PlayerUtil.clearInventory(player); player.getInventory().addItem(this.getEventData().getEggLauncher()); player.updateInventory(); } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/ffa/splegg/SpleggListener.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/ffa/splegg/SpleggListener.java index ef9866d2..add0787a 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/ffa/splegg/SpleggListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/ffa/splegg/SpleggListener.java @@ -3,7 +3,8 @@ import dev.nandi0813.practice.manager.fight.event.enums.EventStatus; import dev.nandi0813.practice.manager.fight.event.events.ffa.interfaces.FFAListener; import dev.nandi0813.practice.manager.fight.event.interfaces.Event; -import dev.nandi0813.practice.moved.ChangedBlock; +import dev.nandi0813.practice.manager.fight.util.ChangedBlock; +import dev.nandi0813.practice.manager.fight.util.PlayerUtil; import dev.nandi0813.practice.util.Cuboid; import net.kyori.adventure.text.Component; import org.bukkit.Material; @@ -73,7 +74,7 @@ public void onPlayerInteract(Event event, PlayerInteractEvent e) { return; } - ItemStack item = dev.nandi0813.practice.moved.PlayerUtil.getItemInUse(player, splegg.getEventData().getEggLauncher().getType()); + ItemStack item = PlayerUtil.getItemInUse(player, splegg.getEventData().getEggLauncher().getType()); if (item != null) { Egg egg = player.launchProjectile(Egg.class); egg.customName(Component.text("SPLEGG")); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/onevsall/juggernaut/Juggernaut.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/onevsall/juggernaut/Juggernaut.java index 3c05d2c8..4ff7e56f 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/onevsall/juggernaut/Juggernaut.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/onevsall/juggernaut/Juggernaut.java @@ -6,7 +6,7 @@ import dev.nandi0813.practice.manager.fight.event.enums.EventStatus; import dev.nandi0813.practice.manager.fight.event.events.ffa.interfaces.FFAEvent; import dev.nandi0813.practice.manager.server.ServerManager; -import dev.nandi0813.practice.moved.KitData; +import dev.nandi0813.practice.util.KitData; import lombok.Getter; import org.bukkit.Bukkit; import org.bukkit.entity.Player; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/onevsall/juggernaut/JuggernautData.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/onevsall/juggernaut/JuggernautData.java index 80c5bd59..edc7333a 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/onevsall/juggernaut/JuggernautData.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/onevsall/juggernaut/JuggernautData.java @@ -2,7 +2,7 @@ import dev.nandi0813.practice.manager.fight.event.enums.EventType; import dev.nandi0813.practice.manager.fight.event.interfaces.EventData; -import dev.nandi0813.practice.moved.KitData; +import dev.nandi0813.practice.util.KitData; import lombok.Getter; import java.io.IOException; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/setup/EventSpawnMarkerManager.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/setup/EventSpawnMarkerManager.java index ee942b80..c7ea31d2 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/setup/EventSpawnMarkerManager.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/setup/EventSpawnMarkerManager.java @@ -1,8 +1,8 @@ package dev.nandi0813.practice.manager.fight.event.setup; import dev.nandi0813.practice.manager.fight.event.interfaces.EventData; -import dev.nandi0813.practice.moved.ItemCreateUtil; import dev.nandi0813.practice.util.Common; +import dev.nandi0813.practice.util.ItemCreateUtil; import lombok.Getter; import net.kyori.adventure.text.Component; import org.bukkit.Location; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/FFAListener.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/FFAListener.java index 12d84f91..5038b8fc 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/FFAListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/FFAListener.java @@ -6,17 +6,12 @@ import dev.nandi0813.practice.manager.backend.ConfigManager; import dev.nandi0813.practice.manager.backend.LanguageManager; import dev.nandi0813.practice.manager.fight.ffa.game.FFA; -import dev.nandi0813.practice.manager.fight.util.BlockUtil; -import dev.nandi0813.practice.manager.fight.util.DeathCause; -import dev.nandi0813.practice.manager.fight.util.FightUtil; -import dev.nandi0813.practice.manager.fight.util.ListenerUtil; +import dev.nandi0813.practice.manager.fight.util.*; import dev.nandi0813.practice.manager.fight.util.Stats.Statistic; import dev.nandi0813.practice.manager.ladder.abstraction.Ladder; import dev.nandi0813.practice.manager.ladder.abstraction.normal.NormalLadder; import dev.nandi0813.practice.manager.profile.Profile; import dev.nandi0813.practice.manager.profile.ProfileManager; -import dev.nandi0813.practice.moved.ChangedBlock; -import dev.nandi0813.practice.moved.ModernItemCooldownHandler; import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.Cuboid; import dev.nandi0813.practice.util.NumberUtil; @@ -383,7 +378,7 @@ public void onPlayerDeath(PlayerDeathEvent e) { killer = FightUtil.getKiller(damageEntity); } - DeathCause cause = dev.nandi0813.practice.moved.FightUtil.convert(damageSource.getDamageType()); + DeathCause cause = FightUtil.convert(damageSource.getDamageType()); ffa.killPlayer(player, killer, cause.getMessage().replace("%killer%", killer != null ? killer.getName() : "Unknown")); if (killer != null) { diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/listener/BuildBlockListener.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/listener/BuildBlockListener.java index 5f9dd401..e6df9bb6 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/listener/BuildBlockListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/listener/BuildBlockListener.java @@ -3,9 +3,9 @@ import dev.nandi0813.practice.manager.arena.util.ArenaUtil; import dev.nandi0813.practice.manager.fight.match.Match; import dev.nandi0813.practice.manager.fight.util.BlockUtil; +import dev.nandi0813.practice.manager.fight.util.ChangedBlock; import dev.nandi0813.practice.manager.fight.util.FightUtil; import dev.nandi0813.practice.manager.fight.util.ListenerUtil; -import dev.nandi0813.practice.moved.ChangedBlock; import dev.nandi0813.practice.util.interfaces.Spectatable; import org.bukkit.block.Block; import org.bukkit.event.EventHandler; @@ -26,7 +26,7 @@ * {@link FightUtil#getActiveBuildSpectatables()}. *

    * All world-driven block events (pistons, liquid flow, form, spread, explosions, TNT, - * falling blocks) are handled by {@link dev.nandi0813.practice.moved.BuildListener}. + * falling blocks) are handled by {@link BuildListener}. */ public class BuildBlockListener implements Listener { diff --git a/core/src/main/java/dev/nandi0813/practice/moved/BuildListener.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/listener/BuildListener.java similarity index 99% rename from core/src/main/java/dev/nandi0813/practice/moved/BuildListener.java rename to core/src/main/java/dev/nandi0813/practice/manager/fight/listener/BuildListener.java index e3b80a92..1a708f06 100644 --- a/core/src/main/java/dev/nandi0813/practice/moved/BuildListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/listener/BuildListener.java @@ -1,4 +1,4 @@ -package dev.nandi0813.practice.moved; +package dev.nandi0813.practice.manager.fight.listener; import dev.nandi0813.practice.ZonePractice; import dev.nandi0813.practice.manager.arena.util.ArenaUtil; @@ -6,6 +6,7 @@ import dev.nandi0813.practice.manager.fight.match.enums.MatchStatus; import dev.nandi0813.practice.manager.fight.match.enums.RoundStatus; import dev.nandi0813.practice.manager.fight.util.BlockUtil; +import dev.nandi0813.practice.manager.fight.util.ChangedBlock; import dev.nandi0813.practice.manager.fight.util.FightUtil; import dev.nandi0813.practice.manager.ladder.abstraction.Ladder; import dev.nandi0813.practice.manager.ladder.abstraction.interfaces.LadderHandle; diff --git a/core/src/main/java/dev/nandi0813/practice/moved/EPCountdownListener.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/listener/EPCountdownListener.java similarity index 96% rename from core/src/main/java/dev/nandi0813/practice/moved/EPCountdownListener.java rename to core/src/main/java/dev/nandi0813/practice/manager/fight/listener/EPCountdownListener.java index ce4c8105..057b2ad9 100644 --- a/core/src/main/java/dev/nandi0813/practice/moved/EPCountdownListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/listener/EPCountdownListener.java @@ -1,10 +1,11 @@ -package dev.nandi0813.practice.moved; +package dev.nandi0813.practice.manager.fight.listener; import dev.nandi0813.practice.manager.fight.ffa.FFAManager; import dev.nandi0813.practice.manager.fight.ffa.game.FFA; import dev.nandi0813.practice.manager.fight.match.Match; import dev.nandi0813.practice.manager.fight.match.MatchManager; import dev.nandi0813.practice.manager.fight.match.enums.RoundStatus; +import dev.nandi0813.practice.manager.fight.util.ModernItemCooldownHandler; import io.papermc.paper.event.player.PlayerItemCooldownEvent; import org.bukkit.Material; import org.bukkit.entity.EnderPearl; diff --git a/core/src/main/java/dev/nandi0813/practice/moved/FireworkRocketCooldownListener.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/listener/FireworkRocketCooldownListener.java similarity index 92% rename from core/src/main/java/dev/nandi0813/practice/moved/FireworkRocketCooldownListener.java rename to core/src/main/java/dev/nandi0813/practice/manager/fight/listener/FireworkRocketCooldownListener.java index 532adce5..a7acd8ed 100644 --- a/core/src/main/java/dev/nandi0813/practice/moved/FireworkRocketCooldownListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/listener/FireworkRocketCooldownListener.java @@ -1,10 +1,11 @@ -package dev.nandi0813.practice.moved; +package dev.nandi0813.practice.manager.fight.listener; import dev.nandi0813.practice.manager.fight.ffa.FFAManager; import dev.nandi0813.practice.manager.fight.ffa.game.FFA; import dev.nandi0813.practice.manager.fight.match.Match; import dev.nandi0813.practice.manager.fight.match.MatchManager; import dev.nandi0813.practice.manager.fight.match.enums.RoundStatus; +import dev.nandi0813.practice.manager.fight.util.ModernItemCooldownHandler; import org.bukkit.entity.Firework; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/Match.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/Match.java index 4badf639..c7323014 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/Match.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/Match.java @@ -15,6 +15,7 @@ import dev.nandi0813.practice.manager.fight.match.util.MatchFightPlayer; import dev.nandi0813.practice.manager.fight.match.util.MatchUtil; import dev.nandi0813.practice.manager.fight.match.util.TeamUtil; +import dev.nandi0813.practice.manager.fight.util.ChangedBlock; import dev.nandi0813.practice.manager.fight.util.Stats.Statistic; import dev.nandi0813.practice.manager.gui.GUIItem; import dev.nandi0813.practice.manager.gui.guis.MatchStatsGui; @@ -29,7 +30,6 @@ import dev.nandi0813.practice.manager.profile.ProfileManager; import dev.nandi0813.practice.manager.profile.enums.ProfileStatus; import dev.nandi0813.practice.manager.spectator.SpectatorManager; -import dev.nandi0813.practice.moved.ChangedBlock; import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.Cuboid; import dev.nandi0813.practice.util.StringUtil; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/Round.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/Round.java index f2bf9e9d..b3f81ed0 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/Round.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/Round.java @@ -11,10 +11,10 @@ import dev.nandi0813.practice.manager.fight.match.util.MatchFightPlayer; import dev.nandi0813.practice.manager.fight.match.util.MatchUtil; import dev.nandi0813.practice.manager.fight.match.util.TempKillPlayer; +import dev.nandi0813.practice.manager.fight.util.BedUtil; import dev.nandi0813.practice.manager.fight.util.Stats.Statistic; import dev.nandi0813.practice.manager.ladder.enums.LadderType; import dev.nandi0813.practice.manager.profile.ProfileManager; -import dev.nandi0813.practice.moved.BedUtil; import dev.nandi0813.practice.util.StringUtil; import dev.nandi0813.practice.util.entityhider.PlayerHider; import dev.nandi0813.practice.util.playerutil.PlayerUtil; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/listener/LadderTypeListener.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/listener/LadderTypeListener.java index 0541dd18..16f8b870 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/listener/LadderTypeListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/listener/LadderTypeListener.java @@ -15,10 +15,7 @@ import dev.nandi0813.practice.manager.fight.match.util.KnockbackUtil; import dev.nandi0813.practice.manager.fight.match.util.MatchFightPlayer; import dev.nandi0813.practice.manager.fight.match.util.TeamUtil; -import dev.nandi0813.practice.manager.fight.util.BlockUtil; -import dev.nandi0813.practice.manager.fight.util.DeathCause; -import dev.nandi0813.practice.manager.fight.util.FightUtil; -import dev.nandi0813.practice.manager.fight.util.ListenerUtil; +import dev.nandi0813.practice.manager.fight.util.*; import dev.nandi0813.practice.manager.fight.util.Stats.Statistic; import dev.nandi0813.practice.manager.ladder.abstraction.Ladder; import dev.nandi0813.practice.manager.ladder.abstraction.interfaces.LadderHandle; @@ -29,7 +26,6 @@ import dev.nandi0813.practice.manager.profile.ProfileManager; import dev.nandi0813.practice.manager.profile.enums.ProfileStatus; import dev.nandi0813.practice.manager.spectator.SpectatorManager; -import dev.nandi0813.practice.moved.ChangedBlock; import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.Cuboid; import dev.nandi0813.practice.util.NumberUtil; @@ -567,7 +563,7 @@ public void onPlayerDeath(PlayerDeathEvent e) { killer = null; } - DeathCause cause = dev.nandi0813.practice.moved.FightUtil.convert(damageSource.getDamageType()); + DeathCause cause = FightUtil.convert(damageSource.getDamageType()); Bukkit.getScheduler().runTaskLater(ZonePractice.getInstance(), () -> match.killPlayer(player, killer, cause.getMessage().replace("%killer%", killer != null ? killer.getName() : "Unknown")), 1L); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/listener/MatchEventListener.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/listener/MatchEventListener.java index 002ee408..d0f0575a 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/listener/MatchEventListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/listener/MatchEventListener.java @@ -5,7 +5,7 @@ import dev.nandi0813.practice.manager.fight.match.enums.TeamEnum; import dev.nandi0813.practice.manager.fight.match.interfaces.Team; import dev.nandi0813.practice.manager.fight.match.util.MatchFightPlayer; -import dev.nandi0813.practice.moved.ChangedBlock; +import dev.nandi0813.practice.manager.fight.util.ChangedBlock; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.entity.Player; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/type/duel/Duel.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/type/duel/Duel.java index adf5d80e..7d4046c9 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/type/duel/Duel.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/type/duel/Duel.java @@ -143,7 +143,7 @@ protected void killPlayer(Player player, String deathMessage) { new TempKillPlayer(round, player, respawnableLadder.getRespawnTime()); SoundManager.getInstance().getSound(SoundType.MATCH_PLAYER_TEMP_DEATH).play(this.getPeople()); }); - dev.nandi0813.practice.moved.PlayerUtil.clearInventory(player); + dev.nandi0813.practice.manager.fight.util.PlayerUtil.clearInventory(player); player.setHealth(20); break; @@ -154,7 +154,7 @@ protected void killPlayer(Player player, String deathMessage) { this.teleportPlayer(player); endRound = true; SoundManager.getInstance().getSound(SoundType.MATCH_PLAYER_DEATH).play(this.getPeople()); - dev.nandi0813.practice.moved.PlayerUtil.clearInventory(player); + dev.nandi0813.practice.manager.fight.util.PlayerUtil.clearInventory(player); player.setHealth(20); } else if (isScoringLadder()) { // Scoring ladder (like Boxing) - death doesn't end round @@ -163,8 +163,8 @@ protected void killPlayer(Player player, String deathMessage) { // Default death behavior for standard ladders this.getCurrentStat(player).end(true); PlayerUtil.setFightPlayer(player); - addEntityChange(dev.nandi0813.practice.moved.PlayerUtil.dropPlayerInventory(player)); - dev.nandi0813.practice.moved.PlayerUtil.clearInventory(player); + addEntityChange(dev.nandi0813.practice.manager.fight.util.PlayerUtil.dropPlayerInventory(player)); + dev.nandi0813.practice.manager.fight.util.PlayerUtil.clearInventory(player); player.setHealth(20); SoundManager.getInstance().getSound(SoundType.MATCH_PLAYER_DEATH).play(this.getPeople()); endRound = true; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/type/partyffa/PartyFFA.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/type/partyffa/PartyFFA.java index ef785b77..5d79b3e8 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/type/partyffa/PartyFFA.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/type/partyffa/PartyFFA.java @@ -10,16 +10,16 @@ import dev.nandi0813.practice.manager.fight.match.enums.MatchType; import dev.nandi0813.practice.manager.fight.match.enums.TeamEnum; import dev.nandi0813.practice.manager.fight.match.util.MatchPlayerUtil; +import dev.nandi0813.practice.manager.fight.match.util.TempKillPlayer; import dev.nandi0813.practice.manager.fight.util.Stats.Statistic; import dev.nandi0813.practice.manager.inventory.InventoryManager; -import dev.nandi0813.practice.manager.ladder.abstraction.interfaces.DeathResult; import dev.nandi0813.practice.manager.ladder.abstraction.Ladder; -import dev.nandi0813.practice.manager.party.Party; +import dev.nandi0813.practice.manager.ladder.abstraction.interfaces.DeathResult; import dev.nandi0813.practice.manager.nametag.NametagManager; +import dev.nandi0813.practice.manager.party.Party; import dev.nandi0813.practice.manager.server.sound.SoundManager; import dev.nandi0813.practice.manager.server.sound.SoundType; import dev.nandi0813.practice.util.playerutil.PlayerUtil; -import dev.nandi0813.practice.manager.fight.match.util.TempKillPlayer; import lombok.Getter; import org.bukkit.entity.Player; @@ -101,7 +101,7 @@ protected void killPlayer(Player player, String deathMessage) { new TempKillPlayer(round, player, respawnableLadder.getRespawnTime()); SoundManager.getInstance().getSound(SoundType.MATCH_PLAYER_TEMP_DEATH).play(this.getPeople()); }); - dev.nandi0813.practice.moved.PlayerUtil.clearInventory(player); + dev.nandi0813.practice.manager.fight.util.PlayerUtil.clearInventory(player); player.setHealth(20); return; @@ -118,9 +118,9 @@ protected void killPlayer(Player player, String deathMessage) { PlayerUtil.setFightPlayer(player); if (ladder.isDropInventoryPartyGames()) - addEntityChange(dev.nandi0813.practice.moved.PlayerUtil.dropPlayerInventory(player)); + addEntityChange(dev.nandi0813.practice.manager.fight.util.PlayerUtil.dropPlayerInventory(player)); else - dev.nandi0813.practice.moved.PlayerUtil.clearInventory(player); + dev.nandi0813.practice.manager.fight.util.PlayerUtil.clearInventory(player); // Send a death notification message String playerDieMsg = LanguageManager.getString("MATCH.PARTY-FFA.PLAYER-DIE"); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/type/playersvsplayers/PlayersVsPlayers.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/type/playersvsplayers/PlayersVsPlayers.java index e13cf0f5..e2936f15 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/type/playersvsplayers/PlayersVsPlayers.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/type/playersvsplayers/PlayersVsPlayers.java @@ -72,7 +72,7 @@ protected void killPlayer(Player player, String deathMessage) { new TempKillPlayer(round, player, respawnableLadder.getRespawnTime()); SoundManager.getInstance().getSound(SoundType.MATCH_PLAYER_TEMP_DEATH).play(this.getPeople()); }); - dev.nandi0813.practice.moved.PlayerUtil.clearInventory(player); + dev.nandi0813.practice.manager.fight.util.PlayerUtil.clearInventory(player); player.setHealth(20); break; @@ -88,7 +88,7 @@ protected void killPlayer(Player player, String deathMessage) { else MatchPlayerUtil.hidePlayerPartyGames(player, this.players); - dev.nandi0813.practice.moved.PlayerUtil.clearInventory(player); + dev.nandi0813.practice.manager.fight.util.PlayerUtil.clearInventory(player); player.setHealth(20); } else if (isScoringLadder()) { // Scoring ladder (like Boxing) - death doesn't end round @@ -101,9 +101,9 @@ protected void killPlayer(Player player, String deathMessage) { PlayerUtil.setFightPlayer(player); if (ladder.isDropInventoryPartyGames()) - addEntityChange(dev.nandi0813.practice.moved.PlayerUtil.dropPlayerInventory(player)); + addEntityChange(dev.nandi0813.practice.manager.fight.util.PlayerUtil.dropPlayerInventory(player)); else - dev.nandi0813.practice.moved.PlayerUtil.clearInventory(player); + dev.nandi0813.practice.manager.fight.util.PlayerUtil.clearInventory(player); if (this.getLanguagePath() != null) { String teamDeathMSG = LanguageManager.getString(this.getLanguagePath() + ".PLAYER-DIE"); @@ -122,7 +122,7 @@ protected void killPlayer(Player player, String deathMessage) { else MatchPlayerUtil.hidePlayerPartyGames(player, this.players); - dev.nandi0813.practice.moved.PlayerUtil.clearInventory(player); + dev.nandi0813.practice.manager.fight.util.PlayerUtil.clearInventory(player); player.setHealth(20); } break; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/util/KitUtil.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/util/KitUtil.java index ac9be193..081b1997 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/util/KitUtil.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/util/KitUtil.java @@ -1,9 +1,10 @@ package dev.nandi0813.practice.manager.fight.match.util; import dev.nandi0813.practice.manager.fight.match.enums.TeamEnum; +import dev.nandi0813.practice.manager.fight.util.PlayerUtil; import dev.nandi0813.practice.manager.ladder.abstraction.Ladder; -import dev.nandi0813.practice.moved.KitData; -import dev.nandi0813.practice.moved.LadderUtil; +import dev.nandi0813.practice.manager.ladder.util.LadderUtil; +import dev.nandi0813.practice.util.KitData; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; @@ -20,7 +21,7 @@ public static void loadDefaultLadderKit(Player player, TeamEnum team, Ladder lad } public static void loadKit(Player player, TeamEnum team, ItemStack[] armor, ItemStack[] inventory, ItemStack[] extra) { - dev.nandi0813.practice.moved.PlayerUtil.clearInventory(player); + PlayerUtil.clearInventory(player); if (team == null) { LadderUtil.loadInventory(player, armor, inventory, extra); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/util/MatchPlayerUtil.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/util/MatchPlayerUtil.java index f59c563d..cae1bb57 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/util/MatchPlayerUtil.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/util/MatchPlayerUtil.java @@ -19,7 +19,7 @@ public static void hidePlayerPartyGames(Player hider, List matchPlayers) PlayerUtil.setFightPlayer(hider); - dev.nandi0813.practice.moved.PlayerUtil.setCollidesWithEntities(hider, false); + dev.nandi0813.practice.manager.fight.util.PlayerUtil.setCollidesWithEntities(hider, false); Bukkit.getScheduler().runTaskLater(ZonePractice.getInstance(), () -> { hider.setAllowFlight(true); diff --git a/core/src/main/java/dev/nandi0813/practice/moved/BedUtil.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/util/BedUtil.java similarity index 98% rename from core/src/main/java/dev/nandi0813/practice/moved/BedUtil.java rename to core/src/main/java/dev/nandi0813/practice/manager/fight/util/BedUtil.java index 63553a01..fad8a509 100644 --- a/core/src/main/java/dev/nandi0813/practice/moved/BedUtil.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/util/BedUtil.java @@ -1,4 +1,4 @@ -package dev.nandi0813.practice.moved; +package dev.nandi0813.practice.manager.fight.util; import dev.nandi0813.practice.manager.arena.util.BedLocation; import dev.nandi0813.practice.manager.backend.LanguageManager; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/util/BlockUtil.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/util/BlockUtil.java index 6163fd1f..e3df6cb0 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/util/BlockUtil.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/util/BlockUtil.java @@ -2,7 +2,6 @@ import dev.nandi0813.practice.manager.fight.ffa.game.FFA; import dev.nandi0813.practice.manager.fight.match.Match; -import dev.nandi0813.practice.moved.ChangedBlock; import dev.nandi0813.practice.util.interfaces.Spectatable; import org.bukkit.block.Block; import org.bukkit.entity.Entity; diff --git a/core/src/main/java/dev/nandi0813/practice/moved/ChangedBlock.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/util/ChangedBlock.java similarity index 98% rename from core/src/main/java/dev/nandi0813/practice/moved/ChangedBlock.java rename to core/src/main/java/dev/nandi0813/practice/manager/fight/util/ChangedBlock.java index b9c485b7..5a19844b 100644 --- a/core/src/main/java/dev/nandi0813/practice/moved/ChangedBlock.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/util/ChangedBlock.java @@ -1,4 +1,4 @@ -package dev.nandi0813.practice.moved; +package dev.nandi0813.practice.manager.fight.util; import dev.nandi0813.practice.manager.backend.LanguageManager; import dev.nandi0813.practice.util.Common; diff --git a/core/src/main/java/dev/nandi0813/practice/moved/EntityHider.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/util/EntityHider.java similarity index 99% rename from core/src/main/java/dev/nandi0813/practice/moved/EntityHider.java rename to core/src/main/java/dev/nandi0813/practice/manager/fight/util/EntityHider.java index 7d6b0756..a26fedf4 100644 --- a/core/src/main/java/dev/nandi0813/practice/moved/EntityHider.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/util/EntityHider.java @@ -1,4 +1,4 @@ -package dev.nandi0813.practice.moved; +package dev.nandi0813.practice.manager.fight.util; import com.github.retrooper.packetevents.PacketEvents; import com.github.retrooper.packetevents.event.PacketListener; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/util/FightUtil.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/util/FightUtil.java index bd580bc2..5471f2ac 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/util/FightUtil.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/util/FightUtil.java @@ -4,6 +4,7 @@ import dev.nandi0813.practice.manager.fight.ffa.FFAManager; import dev.nandi0813.practice.manager.fight.match.MatchManager; import dev.nandi0813.practice.util.interfaces.Spectatable; +import org.bukkit.damage.DamageType; import org.bukkit.entity.Arrow; import org.bukkit.entity.Entity; import org.bukkit.entity.Fireball; @@ -55,4 +56,33 @@ public static List getActiveBuildSpectatables() { return result; } + public static DeathCause convert(DamageType damageType) { + if (damageType == null) { + return DeathCause.DEFAULT; + } + + if (damageType.equals(DamageType.IN_FIRE) || damageType.equals(DamageType.ON_FIRE) || + damageType.equals(DamageType.CAMPFIRE) || damageType.equals(DamageType.HOT_FLOOR)) { + return DeathCause.FIRE; + } else if (damageType.equals(DamageType.LAVA)) { + return DeathCause.LAVA; + } else if (damageType.equals(DamageType.DROWN)) { + return DeathCause.WATER; + } else if (damageType.equals(DamageType.FALL) || damageType.equals(DamageType.STALAGMITE)) { + return DeathCause.FALL; + } else if (damageType.equals(DamageType.EXPLOSION) || damageType.equals(DamageType.PLAYER_EXPLOSION)) { + return DeathCause.EXPLOSION; + } else if (damageType.equals(DamageType.MOB_ATTACK) || damageType.equals(DamageType.PLAYER_ATTACK) + || damageType.equals(DamageType.MACE_SMASH)) { + return DeathCause.PLAYER_ATTACK; + } else if (damageType.equals(DamageType.ARROW) || damageType.equals(DamageType.TRIDENT) || + damageType.equals(DamageType.MOB_PROJECTILE)) { + return DeathCause.PLAYER_PROJECTILE; + } else if (damageType.equals(DamageType.OUT_OF_WORLD)) { + return DeathCause.VOID; + } else { + return DeathCause.DEFAULT; + } + } + } diff --git a/core/src/main/java/dev/nandi0813/practice/moved/ModernItemCooldownHandler.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/util/ModernItemCooldownHandler.java similarity index 97% rename from core/src/main/java/dev/nandi0813/practice/moved/ModernItemCooldownHandler.java rename to core/src/main/java/dev/nandi0813/practice/manager/fight/util/ModernItemCooldownHandler.java index 2573b756..40c6ad2a 100644 --- a/core/src/main/java/dev/nandi0813/practice/moved/ModernItemCooldownHandler.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/util/ModernItemCooldownHandler.java @@ -1,4 +1,4 @@ -package dev.nandi0813.practice.moved; +package dev.nandi0813.practice.manager.fight.util; import dev.nandi0813.practice.ZonePractice; import org.bukkit.Bukkit; diff --git a/core/src/main/java/dev/nandi0813/practice/moved/PlayerUtil.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/util/PlayerUtil.java similarity index 99% rename from core/src/main/java/dev/nandi0813/practice/moved/PlayerUtil.java rename to core/src/main/java/dev/nandi0813/practice/manager/fight/util/PlayerUtil.java index 212a0bbb..0a933eba 100644 --- a/core/src/main/java/dev/nandi0813/practice/moved/PlayerUtil.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/util/PlayerUtil.java @@ -1,4 +1,4 @@ -package dev.nandi0813.practice.moved; +package dev.nandi0813.practice.manager.fight.util; import dev.nandi0813.practice.ZonePractice; import dev.nandi0813.practice.manager.backend.ConfigManager; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/util/Stats/Statistic.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/util/Stats/Statistic.java index 6d3224db..ecfa1d86 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/util/Stats/Statistic.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/util/Stats/Statistic.java @@ -1,6 +1,6 @@ package dev.nandi0813.practice.manager.fight.util.Stats; -import dev.nandi0813.practice.moved.StatisticListener; +import dev.nandi0813.practice.listener.StatisticListener; import dev.nandi0813.practice.util.NumberUtil; import lombok.Getter; import lombok.Setter; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/gui/GUIItem.java b/core/src/main/java/dev/nandi0813/practice/manager/gui/GUIItem.java index 839f0e6d..6ff73163 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/gui/GUIItem.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/gui/GUIItem.java @@ -1,8 +1,8 @@ package dev.nandi0813.practice.manager.gui; -import dev.nandi0813.practice.moved.ItemCreateUtil; -import dev.nandi0813.practice.moved.LadderUtil; +import dev.nandi0813.practice.manager.ladder.util.LadderUtil; import dev.nandi0813.practice.util.Common; +import dev.nandi0813.practice.util.ItemCreateUtil; import dev.nandi0813.practice.util.StringUtil; import lombok.Getter; import lombok.Setter; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/gui/GUIManager.java b/core/src/main/java/dev/nandi0813/practice/manager/gui/GUIManager.java index 11d57138..5b70ff95 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/gui/GUIManager.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/gui/GUIManager.java @@ -7,7 +7,7 @@ import dev.nandi0813.practice.manager.profile.Profile; import dev.nandi0813.practice.manager.profile.ProfileManager; import dev.nandi0813.practice.manager.profile.enums.ProfileStatus; -import dev.nandi0813.practice.moved.ItemCreateUtil; +import dev.nandi0813.practice.util.ItemCreateUtil; import lombok.Getter; import org.bukkit.Bukkit; import org.bukkit.Material; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/arena/ArenaCreateGui.java b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/arena/ArenaCreateGui.java index 1c1118cd..a902d484 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/arena/ArenaCreateGui.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/arena/ArenaCreateGui.java @@ -13,9 +13,9 @@ import dev.nandi0813.practice.manager.gui.GUIManager; import dev.nandi0813.practice.manager.gui.GUIType; import dev.nandi0813.practice.manager.gui.setup.arena.ArenaGUISetupManager; -import dev.nandi0813.practice.moved.ItemCreateUtil; import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.InventoryUtil; +import dev.nandi0813.practice.util.ItemCreateUtil; import lombok.Getter; import org.bukkit.Bukkit; import org.bukkit.entity.Player; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/customladder/premadecustom/CustomLadderEditorGui.java b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/customladder/premadecustom/CustomLadderEditorGui.java index 82ee92be..56ad4423 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/customladder/premadecustom/CustomLadderEditorGui.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/customladder/premadecustom/CustomLadderEditorGui.java @@ -5,6 +5,7 @@ import dev.nandi0813.practice.manager.backend.LanguageManager; import dev.nandi0813.practice.manager.fight.match.enums.WeightClass; import dev.nandi0813.practice.manager.fight.match.util.CustomKit; +import dev.nandi0813.practice.manager.fight.util.PlayerUtil; import dev.nandi0813.practice.manager.gui.GUI; import dev.nandi0813.practice.manager.gui.GUIManager; import dev.nandi0813.practice.manager.gui.GUIType; @@ -14,9 +15,9 @@ import dev.nandi0813.practice.manager.profile.Profile; import dev.nandi0813.practice.manager.profile.ProfileManager; import dev.nandi0813.practice.manager.profile.enums.ProfileStatus; -import dev.nandi0813.practice.moved.ItemCreateUtil; import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.InventoryUtil; +import dev.nandi0813.practice.util.ItemCreateUtil; import dev.nandi0813.practice.util.StringUtil; import dev.nandi0813.practice.util.cooldown.CooldownObject; import dev.nandi0813.practice.util.cooldown.PlayerCooldown; @@ -201,12 +202,12 @@ public void handleCloseEvent(InventoryCloseEvent e) { NormalLadder ladder = customLadderEditorGui.getLadder(); if (ladder.isEnabled() && ladder.isEditable() && !ladder.isFrozen()) { - ItemStack[] inventoryStorageContent = dev.nandi0813.practice.moved.PlayerUtil.getInventoryStorageContent(player); + ItemStack[] inventoryStorageContent = PlayerUtil.getInventoryStorageContent(player); customKit.setInventory(inventoryStorageContent); customKit.setExtra(new ItemStack[]{this.gui.get(1).getItem(14)}); } - dev.nandi0813.practice.moved.PlayerUtil.clearInventory(player); + PlayerUtil.clearInventory(player); Bukkit.getScheduler().runTaskLater(ZonePractice.getInstance(), () -> { @@ -226,7 +227,7 @@ public void open(Player player) { Profile playerProfile = ProfileManager.getInstance().getProfile(player); playerProfile.setStatus(ProfileStatus.EDITOR); - dev.nandi0813.practice.moved.PlayerUtil.clearInventory(player); + PlayerUtil.clearInventory(player); Map kits; if (ranked) kits = profile.getRankedCustomKits().get(ladder); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/customladder/premadecustom/CustomLadderSelectorGui.java b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/customladder/premadecustom/CustomLadderSelectorGui.java index cbf92357..4e8f84e1 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/customladder/premadecustom/CustomLadderSelectorGui.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/customladder/premadecustom/CustomLadderSelectorGui.java @@ -9,9 +9,9 @@ import dev.nandi0813.practice.manager.profile.Profile; import dev.nandi0813.practice.manager.profile.ProfileManager; import dev.nandi0813.practice.manager.profile.enums.ProfileStatus; -import dev.nandi0813.practice.moved.ItemCreateUtil; import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.InventoryUtil; +import dev.nandi0813.practice.util.ItemCreateUtil; import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.inventory.ItemStack; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/customladder/premadecustom/CustomLadderSumGui.java b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/customladder/premadecustom/CustomLadderSumGui.java index cd352963..8ce25481 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/customladder/premadecustom/CustomLadderSumGui.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/customladder/premadecustom/CustomLadderSumGui.java @@ -3,6 +3,7 @@ import dev.nandi0813.practice.ZonePractice; import dev.nandi0813.practice.manager.backend.GUIFile; import dev.nandi0813.practice.manager.backend.LanguageManager; +import dev.nandi0813.practice.manager.fight.util.PlayerUtil; import dev.nandi0813.practice.manager.gui.GUI; import dev.nandi0813.practice.manager.gui.GUIItem; import dev.nandi0813.practice.manager.gui.GUIManager; @@ -142,7 +143,7 @@ public void handleCloseEvent(InventoryCloseEvent e) { Player player = (Player) e.getPlayer(); Profile profile = ProfileManager.getInstance().getProfile(player); - dev.nandi0813.practice.moved.PlayerUtil.clearInventory(player); + PlayerUtil.clearInventory(player); Bukkit.getScheduler().runTaskLater(ZonePractice.getInstance(), () -> { @@ -163,7 +164,7 @@ public void open(Player player) { ItemStack backToItem = GUIFile.getGuiItem("GUIS.KIT-EDITOR.KIT-SELECTOR.ICONS.BACK-TO-KIT-SELECTOR").get(); - dev.nandi0813.practice.moved.PlayerUtil.clearInventory(player); + PlayerUtil.clearInventory(player); for (int i = 0; i < 9; i++) player.getInventory().setItem(i, backToItem); } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/ladder/LadderCreateGui.java b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/ladder/LadderCreateGui.java index 8f4e15c4..2f1fd125 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/ladder/LadderCreateGui.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/ladder/LadderCreateGui.java @@ -11,9 +11,9 @@ import dev.nandi0813.practice.manager.ladder.abstraction.Ladder; import dev.nandi0813.practice.manager.ladder.abstraction.normal.NormalLadder; import dev.nandi0813.practice.manager.ladder.enums.LadderType; -import dev.nandi0813.practice.moved.ItemCreateUtil; import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.InventoryUtil; +import dev.nandi0813.practice.util.ItemCreateUtil; import dev.nandi0813.practice.util.StringUtil; import lombok.Getter; import org.bukkit.Bukkit; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/ladder/LadderPreviewGui.java b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/ladder/LadderPreviewGui.java index 64818c06..d18733cb 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/ladder/LadderPreviewGui.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/ladder/LadderPreviewGui.java @@ -6,8 +6,8 @@ import dev.nandi0813.practice.manager.gui.GUIManager; import dev.nandi0813.practice.manager.gui.GUIType; import dev.nandi0813.practice.manager.ladder.abstraction.normal.NormalLadder; -import dev.nandi0813.practice.moved.KitData; import dev.nandi0813.practice.util.InventoryUtil; +import dev.nandi0813.practice.util.KitData; import dev.nandi0813.practice.util.StringUtil; import org.apache.commons.lang3.StringUtils; import org.bukkit.Bukkit; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/leaderboard/LbGuiUtil.java b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/leaderboard/LbGuiUtil.java index 6f9f102e..c40bbc19 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/leaderboard/LbGuiUtil.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/leaderboard/LbGuiUtil.java @@ -10,8 +10,8 @@ import dev.nandi0813.practice.manager.leaderboard.types.LbSecondaryType; import dev.nandi0813.practice.manager.profile.Profile; import dev.nandi0813.practice.manager.profile.ProfileManager; -import dev.nandi0813.practice.moved.ItemCreateUtil; import dev.nandi0813.practice.util.Common; +import dev.nandi0813.practice.util.ItemCreateUtil; import dev.nandi0813.practice.util.StringUtil; import org.bukkit.Material; import org.bukkit.OfflinePlayer; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/party/OtherPartiesGui.java b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/party/OtherPartiesGui.java index 8870dcc3..b94ad567 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/party/OtherPartiesGui.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/party/OtherPartiesGui.java @@ -11,9 +11,9 @@ import dev.nandi0813.practice.manager.party.PartyManager; import dev.nandi0813.practice.manager.profile.Profile; import dev.nandi0813.practice.manager.profile.ProfileManager; -import dev.nandi0813.practice.moved.ItemCreateUtil; import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.InventoryUtil; +import dev.nandi0813.practice.util.ItemCreateUtil; import lombok.Getter; import org.bukkit.Bukkit; import org.bukkit.entity.Player; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/profile/ProfileLadderStats.java b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/profile/ProfileLadderStats.java index 71143c5f..3189466f 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/profile/ProfileLadderStats.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/profile/ProfileLadderStats.java @@ -10,9 +10,9 @@ import dev.nandi0813.practice.manager.ladder.abstraction.normal.NormalLadder; import dev.nandi0813.practice.manager.profile.Profile; import dev.nandi0813.practice.manager.profile.statistics.LadderStats; -import dev.nandi0813.practice.moved.ItemCreateUtil; import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.InventoryUtil; +import dev.nandi0813.practice.util.ItemCreateUtil; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.entity.Player; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/profile/ProfileSetupGui.java b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/profile/ProfileSetupGui.java index c6e922c8..6a75daf4 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/profile/ProfileSetupGui.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/profile/ProfileSetupGui.java @@ -9,6 +9,7 @@ import dev.nandi0813.practice.manager.fight.ffa.game.FFA; import dev.nandi0813.practice.manager.fight.match.Match; import dev.nandi0813.practice.manager.fight.match.MatchManager; +import dev.nandi0813.practice.manager.fight.util.PlayerUtil; import dev.nandi0813.practice.manager.gui.GUI; import dev.nandi0813.practice.manager.gui.GUIItem; import dev.nandi0813.practice.manager.gui.GUIManager; @@ -17,9 +18,9 @@ import dev.nandi0813.practice.manager.profile.RankedBan; import dev.nandi0813.practice.manager.profile.enums.ProfileStatus; import dev.nandi0813.practice.manager.spectator.SpectatorManager; -import dev.nandi0813.practice.moved.ItemCreateUtil; import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.InventoryUtil; +import dev.nandi0813.practice.util.ItemCreateUtil; import dev.nandi0813.practice.util.StringUtil; import dev.nandi0813.practice.util.interfaces.Spectatable; import org.bukkit.Bukkit; @@ -231,7 +232,7 @@ private static ItemStack getOnlineItem(Profile profile) { .replace("%health%", String.valueOf(player.getHealth())) .replace("%food%", String.valueOf(player.getFoodLevel())) .replace("%hit_delay%", String.valueOf(player.getMaximumNoDamageTicks())) - .replace("%ping%", String.valueOf(dev.nandi0813.practice.moved.PlayerUtil.getPing(player))) + .replace("%ping%", String.valueOf(PlayerUtil.getPing(player))) .get(); } } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/selectors/ArenaSelectorGui.java b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/selectors/ArenaSelectorGui.java index 396bc35c..9b8a7c29 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/selectors/ArenaSelectorGui.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/selectors/ArenaSelectorGui.java @@ -17,9 +17,9 @@ import dev.nandi0813.practice.manager.party.Party; import dev.nandi0813.practice.manager.party.PartyManager; import dev.nandi0813.practice.manager.party.matchrequest.PartyRequest; -import dev.nandi0813.practice.moved.ItemCreateUtil; import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.InventoryUtil; +import dev.nandi0813.practice.util.ItemCreateUtil; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryClickEvent; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/selectors/LadderSelectorGui.java b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/selectors/LadderSelectorGui.java index b0034ec1..4c18159a 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/selectors/LadderSelectorGui.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/gui/guis/selectors/LadderSelectorGui.java @@ -24,9 +24,9 @@ import dev.nandi0813.practice.manager.party.PartyManager; import dev.nandi0813.practice.manager.party.matchrequest.PartyRequest; import dev.nandi0813.practice.manager.profile.Profile; -import dev.nandi0813.practice.moved.ItemCreateUtil; import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.InventoryUtil; +import dev.nandi0813.practice.util.ItemCreateUtil; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryClickEvent; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/gui/setup/arena/ArenaSetupUtil.java b/core/src/main/java/dev/nandi0813/practice/manager/gui/setup/arena/ArenaSetupUtil.java index d03a930a..810e772f 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/gui/setup/arena/ArenaSetupUtil.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/gui/setup/arena/ArenaSetupUtil.java @@ -6,8 +6,8 @@ import dev.nandi0813.practice.manager.backend.GUIFile; import dev.nandi0813.practice.manager.gui.GUIItem; import dev.nandi0813.practice.manager.ladder.abstraction.Ladder; -import dev.nandi0813.practice.moved.ItemCreateUtil; import dev.nandi0813.practice.util.Common; +import dev.nandi0813.practice.util.ItemCreateUtil; import lombok.Getter; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/gui/setup/ladder/laddersettings/InventoryGui.java b/core/src/main/java/dev/nandi0813/practice/manager/gui/setup/ladder/laddersettings/InventoryGui.java index 50f35d62..bee11fe0 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/gui/setup/ladder/laddersettings/InventoryGui.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/gui/setup/ladder/laddersettings/InventoryGui.java @@ -10,11 +10,7 @@ import dev.nandi0813.practice.manager.gui.setup.ladder.LadderSetupManager; import dev.nandi0813.practice.manager.ladder.LadderManager; import dev.nandi0813.practice.manager.ladder.abstraction.normal.NormalLadder; -import dev.nandi0813.practice.moved.KitData; -import dev.nandi0813.practice.util.ArmorUtil; -import dev.nandi0813.practice.util.Common; -import dev.nandi0813.practice.util.InventoryUtil; -import dev.nandi0813.practice.util.StringUtil; +import dev.nandi0813.practice.util.*; import lombok.Getter; import org.apache.commons.lang3.StringUtils; import org.bukkit.Bukkit; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/inventory/Inventory.java b/core/src/main/java/dev/nandi0813/practice/manager/inventory/Inventory.java index f746272f..61e84b10 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/inventory/Inventory.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/inventory/Inventory.java @@ -1,5 +1,6 @@ package dev.nandi0813.practice.manager.inventory; +import dev.nandi0813.practice.manager.fight.util.PlayerUtil; import dev.nandi0813.practice.manager.inventory.inventoryitem.ExtraInvItem; import dev.nandi0813.practice.manager.inventory.inventoryitem.InvArmor; import dev.nandi0813.practice.manager.inventory.inventoryitem.InvItem; @@ -55,7 +56,7 @@ public void setInventory(Player player) { if (currentInventory != null) currentInventory.getPlayers().remove(player); - dev.nandi0813.practice.moved.PlayerUtil.clearInventory(player); + PlayerUtil.clearInventory(player); players.add(player); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/inventory/InventoryListener.java b/core/src/main/java/dev/nandi0813/practice/manager/inventory/InventoryListener.java index 7f9f217a..65ec561a 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/inventory/InventoryListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/inventory/InventoryListener.java @@ -1,6 +1,7 @@ package dev.nandi0813.practice.manager.inventory; import dev.nandi0813.practice.manager.backend.ConfigManager; +import dev.nandi0813.practice.manager.fight.util.PlayerUtil; import dev.nandi0813.practice.manager.inventory.inventories.StaffInventory; import dev.nandi0813.practice.manager.inventory.inventoryitem.InvItem; import dev.nandi0813.practice.manager.inventory.inventoryitem.staffitems.CheckInventoryInvItem; @@ -25,6 +26,7 @@ import org.bukkit.event.player.PlayerDropItemEvent; import org.bukkit.event.player.PlayerInteractEntityEvent; import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerSwapHandItemsEvent; import org.bukkit.inventory.ItemStack; public class InventoryListener implements Listener { @@ -98,7 +100,7 @@ public void onPlayerInteractWithEntity(PlayerInteractEntityEvent e) { if (inventory == null) return; if (inventory instanceof StaffInventory) { - ItemStack itemInHand = dev.nandi0813.practice.moved.PlayerUtil.getPlayerMainHand(player); + ItemStack itemInHand = PlayerUtil.getPlayerMainHand(player); InvItem invItem = inventory.getInvItem(Common.getItemDisplayName(itemInHand), itemInHand.getType()); if (invItem instanceof CheckInventoryInvItem checkInventoryInvItem) { @@ -124,7 +126,7 @@ public void onPlayerAttackEntity(EntityDamageByEntityEvent e) { Inventory inventory = InventoryManager.getInstance().getPlayerInventory(player); if (inventory == null) return; - ItemStack itemInHand = dev.nandi0813.practice.moved.PlayerUtil.getPlayerMainHand(player); + ItemStack itemInHand = PlayerUtil.getPlayerMainHand(player); if (itemInHand.getType() == Material.AIR || !itemInHand.hasItemMeta()) return; InvItem heldInvItem = inventory.getInvItem(Common.getItemDisplayName(itemInHand), itemInHand.getType()); @@ -257,4 +259,18 @@ public void onEntityDamage(EntityDamageEvent e) { } } + @EventHandler + public void onItemSwitchHand(PlayerSwapHandItemsEvent e) { + Player player = e.getPlayer(); + if (player.isOp() || player.hasPermission("*")) return; + + Profile profile = ProfileManager.getInstance().getProfile(player); + + if (profile == null) return; + + switch (profile.getStatus()) { + case LOBBY, QUEUE, EDITOR, SPECTATE -> e.setCancelled(true); + } + } + } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/inventory/InventoryManager.java b/core/src/main/java/dev/nandi0813/practice/manager/inventory/InventoryManager.java index 5b52da22..8ced0f50 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/inventory/InventoryManager.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/inventory/InventoryManager.java @@ -75,7 +75,7 @@ public void setInventory(Player player, Inventory.InventoryType inventoryType) { if (playerInv != null) { playerInv.getPlayers().remove(player); } - dev.nandi0813.practice.moved.PlayerUtil.clearInventory(player); + dev.nandi0813.practice.manager.fight.util.PlayerUtil.clearInventory(player); return; } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/inventory/InventoryUtil.java b/core/src/main/java/dev/nandi0813/practice/manager/inventory/InventoryUtil.java index c9c1b0b9..962c0c86 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/inventory/InventoryUtil.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/inventory/InventoryUtil.java @@ -2,6 +2,7 @@ import dev.nandi0813.api.Utilities.PlayerNametag; import dev.nandi0813.practice.manager.backend.ConfigManager; +import dev.nandi0813.practice.manager.fight.util.PlayerUtil; import dev.nandi0813.practice.manager.nametag.NametagManager; import dev.nandi0813.practice.manager.nametag.TabIntegration; import dev.nandi0813.practice.manager.nametag.TeamPacketBlocker; @@ -41,7 +42,7 @@ public static void setLobbyNametag(Player player, Profile profile) { if (tabIntegration != null && tabIntegration.isAvailable()) { tabIntegration.setTabListName(player, listName); } else { - dev.nandi0813.practice.moved.PlayerUtil.setPlayerListName(player, listName); + PlayerUtil.setPlayerListName(player, listName); } // ── Nametag management (above-head prefix / suffix / color) ── diff --git a/core/src/main/java/dev/nandi0813/practice/manager/ladder/abstraction/Ladder.java b/core/src/main/java/dev/nandi0813/practice/manager/ladder/abstraction/Ladder.java index de2f17d2..2cb12a13 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/ladder/abstraction/Ladder.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/ladder/abstraction/Ladder.java @@ -5,8 +5,8 @@ import dev.nandi0813.practice.manager.fight.match.enums.MatchType; import dev.nandi0813.practice.manager.ladder.enums.LadderType; import dev.nandi0813.practice.manager.ladder.util.LadderKnockback; -import dev.nandi0813.practice.moved.KitData; import dev.nandi0813.practice.util.Common; +import dev.nandi0813.practice.util.KitData; import dev.nandi0813.practice.util.StringUtil; import lombok.Getter; import lombok.Setter; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/ladder/abstraction/interfaces/TempBuild.java b/core/src/main/java/dev/nandi0813/practice/manager/ladder/abstraction/interfaces/TempBuild.java index a119ff02..420dd49e 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/ladder/abstraction/interfaces/TempBuild.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/ladder/abstraction/interfaces/TempBuild.java @@ -3,8 +3,8 @@ import dev.nandi0813.practice.manager.arena.util.ArenaUtil; import dev.nandi0813.practice.manager.fight.match.Match; import dev.nandi0813.practice.manager.fight.util.BlockUtil; +import dev.nandi0813.practice.manager.fight.util.ChangedBlock; import dev.nandi0813.practice.manager.fight.util.ListenerUtil; -import dev.nandi0813.practice.moved.ChangedBlock; import dev.nandi0813.practice.util.fightmapchange.BlockPosition; import dev.nandi0813.practice.util.fightmapchange.FightChangeOptimized; import org.bukkit.Location; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/ladder/abstraction/normal/BedFight.java b/core/src/main/java/dev/nandi0813/practice/manager/ladder/abstraction/normal/BedFight.java index 608440df..8995da82 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/ladder/abstraction/normal/BedFight.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/ladder/abstraction/normal/BedFight.java @@ -7,13 +7,13 @@ import dev.nandi0813.practice.manager.fight.match.enums.TeamEnum; import dev.nandi0813.practice.manager.fight.match.interfaces.Team; import dev.nandi0813.practice.manager.fight.match.util.TempKillPlayer; +import dev.nandi0813.practice.manager.fight.util.BedUtil; import dev.nandi0813.practice.manager.fight.util.DeathCause; import dev.nandi0813.practice.manager.ladder.abstraction.interfaces.DeathResult; import dev.nandi0813.practice.manager.ladder.abstraction.interfaces.RespawnableLadder; import dev.nandi0813.practice.manager.ladder.enums.LadderType; import dev.nandi0813.practice.manager.server.sound.SoundManager; import dev.nandi0813.practice.manager.server.sound.SoundType; -import dev.nandi0813.practice.moved.BedUtil; import dev.nandi0813.practice.util.Cuboid; import lombok.Getter; import lombok.Setter; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/ladder/abstraction/normal/PortalFight.java b/core/src/main/java/dev/nandi0813/practice/manager/ladder/abstraction/normal/PortalFight.java index 762ee220..012a7fdc 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/ladder/abstraction/normal/PortalFight.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/ladder/abstraction/normal/PortalFight.java @@ -11,9 +11,9 @@ import dev.nandi0813.practice.manager.fight.match.interfaces.Team; import dev.nandi0813.practice.manager.fight.match.type.playersvsplayers.PlayersVsPlayersRound; import dev.nandi0813.practice.manager.fight.util.BlockUtil; +import dev.nandi0813.practice.manager.fight.util.ChangedBlock; import dev.nandi0813.practice.manager.fight.util.DeathCause; import dev.nandi0813.practice.manager.ladder.enums.LadderType; -import dev.nandi0813.practice.moved.ChangedBlock; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.entity.Player; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/ladder/settings/handlers/GoldenAppleSettingHandler.java b/core/src/main/java/dev/nandi0813/practice/manager/ladder/settings/handlers/GoldenAppleSettingHandler.java index 769c7c0e..f8466096 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/ladder/settings/handlers/GoldenAppleSettingHandler.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/ladder/settings/handlers/GoldenAppleSettingHandler.java @@ -1,8 +1,8 @@ package dev.nandi0813.practice.manager.ladder.settings.handlers; import dev.nandi0813.practice.manager.fight.match.Match; +import dev.nandi0813.practice.manager.fight.util.ModernItemCooldownHandler; import dev.nandi0813.practice.manager.ladder.settings.SettingHandler; -import dev.nandi0813.practice.moved.ModernItemCooldownHandler; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.Event; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/ladder/settings/handlers/HitDelaySettingHandler.java b/core/src/main/java/dev/nandi0813/practice/manager/ladder/settings/handlers/HitDelaySettingHandler.java index 5e2df4c4..fc73c174 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/ladder/settings/handlers/HitDelaySettingHandler.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/ladder/settings/handlers/HitDelaySettingHandler.java @@ -1,6 +1,7 @@ package dev.nandi0813.practice.manager.ladder.settings.handlers; import dev.nandi0813.practice.manager.fight.match.Match; +import dev.nandi0813.practice.manager.fight.util.PlayerUtil; import dev.nandi0813.practice.manager.ladder.settings.SettingHandler; import org.bukkit.entity.Player; @@ -27,7 +28,7 @@ public void onMatchStart(Match match) { // For modern versions (1.9+), also set the attack speed attribute // This enables spam-clicking for combo mode when hitDelay is low - dev.nandi0813.practice.moved.PlayerUtil.setAttackSpeed(player, hitDelay); + PlayerUtil.setAttackSpeed(player, hitDelay); } } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/ladder/type/BedWars.java b/core/src/main/java/dev/nandi0813/practice/manager/ladder/type/BedWars.java index 97f0c893..3b810639 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/ladder/type/BedWars.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/ladder/type/BedWars.java @@ -4,11 +4,11 @@ import dev.nandi0813.practice.manager.fight.match.Match; import dev.nandi0813.practice.manager.fight.match.enums.RoundStatus; import dev.nandi0813.practice.manager.fight.util.BlockUtil; +import dev.nandi0813.practice.manager.fight.util.ChangedBlock; import dev.nandi0813.practice.manager.ladder.abstraction.interfaces.LadderHandle; import dev.nandi0813.practice.manager.ladder.abstraction.normal.BedFight; import dev.nandi0813.practice.manager.ladder.enums.LadderType; -import dev.nandi0813.practice.moved.ChangedBlock; -import dev.nandi0813.practice.moved.LadderUtil; +import dev.nandi0813.practice.manager.ladder.util.LadderUtil; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.entity.Player; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/ladder/type/FireballFight.java b/core/src/main/java/dev/nandi0813/practice/manager/ladder/type/FireballFight.java index 03044a43..ffe622ed 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/ladder/type/FireballFight.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/ladder/type/FireballFight.java @@ -6,17 +6,12 @@ import dev.nandi0813.practice.manager.fight.match.Match; import dev.nandi0813.practice.manager.fight.match.enums.RoundStatus; import dev.nandi0813.practice.manager.fight.match.util.TeamUtil; -import dev.nandi0813.practice.manager.fight.util.BlockUtil; -import dev.nandi0813.practice.manager.fight.util.DeathCause; -import dev.nandi0813.practice.manager.fight.util.ListenerUtil; +import dev.nandi0813.practice.manager.fight.util.*; import dev.nandi0813.practice.manager.ladder.abstraction.interfaces.CustomConfig; import dev.nandi0813.practice.manager.ladder.abstraction.interfaces.LadderHandle; import dev.nandi0813.practice.manager.ladder.abstraction.normal.BedFight; import dev.nandi0813.practice.manager.ladder.enums.LadderType; -import dev.nandi0813.practice.moved.ChangedBlock; -import dev.nandi0813.practice.moved.LadderUtil; -import dev.nandi0813.practice.moved.ModernItemCooldownHandler; -import dev.nandi0813.practice.moved.PlayerUtil; +import dev.nandi0813.practice.manager.ladder.util.LadderUtil; import lombok.Getter; import lombok.Setter; import org.bukkit.Material; @@ -137,7 +132,7 @@ private static void onFireballLaunch(final @NotNull PlayerInteractEvent e, final Action action = e.getAction(); if (action != Action.RIGHT_CLICK_AIR && action != Action.RIGHT_CLICK_BLOCK) return; - ItemStack fireballItem = dev.nandi0813.practice.moved.PlayerUtil.getItemInUse(player, Material.FIRE_CHARGE); + ItemStack fireballItem = PlayerUtil.getItemInUse(player, Material.FIRE_CHARGE); if (fireballItem == null) { return; } @@ -225,7 +220,7 @@ private static void onEntityDamageByEntity(final @NotNull EntityDamageByEntityEv } e.setDamage(0); - dev.nandi0813.practice.moved.PlayerUtil.applyFireballKnockback(player, fireball); + PlayerUtil.applyFireballKnockback(player, fireball); } else if (e.getDamager() instanceof TNTPrimed tnt) { Match mv = BlockUtil.getMetadata(tnt, FIREBALL_FIGHT_TNT, Match.class); if (ListenerUtil.checkMetaData(mv)) { @@ -239,7 +234,7 @@ private static void onEntityDamageByEntity(final @NotNull EntityDamageByEntityEv if (mv2 instanceof Player shooter) { if (shooter == player || !TeamUtil.isSaveTeamMate(match, shooter, player)) { - dev.nandi0813.practice.moved.PlayerUtil.applyTntKnockback(player, tnt); + PlayerUtil.applyTntKnockback(player, tnt); e.setDamage(0); } else if (TeamUtil.isSaveTeamMate(match, shooter, player)) { e.setCancelled(true); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/ladder/type/SkyWars.java b/core/src/main/java/dev/nandi0813/practice/manager/ladder/type/SkyWars.java index db5ae491..f7b9d7ec 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/ladder/type/SkyWars.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/ladder/type/SkyWars.java @@ -4,11 +4,11 @@ import dev.nandi0813.practice.manager.fight.match.Match; import dev.nandi0813.practice.manager.fight.match.enums.RoundStatus; import dev.nandi0813.practice.manager.fight.match.util.MatchUtil; +import dev.nandi0813.practice.manager.fight.util.ChangedBlock; import dev.nandi0813.practice.manager.ladder.abstraction.interfaces.CustomConfig; import dev.nandi0813.practice.manager.ladder.abstraction.interfaces.LadderHandle; import dev.nandi0813.practice.manager.ladder.abstraction.normal.NormalLadder; import dev.nandi0813.practice.manager.ladder.enums.LadderType; -import dev.nandi0813.practice.moved.ChangedBlock; import dev.nandi0813.practice.util.ItemSerializationUtil; import lombok.Getter; import lombok.Setter; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/ladder/type/Spleef.java b/core/src/main/java/dev/nandi0813/practice/manager/ladder/type/Spleef.java index e3ce8afd..fce9b684 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/ladder/type/Spleef.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/ladder/type/Spleef.java @@ -3,12 +3,12 @@ import dev.nandi0813.practice.manager.fight.match.Match; import dev.nandi0813.practice.manager.fight.match.enums.RoundStatus; import dev.nandi0813.practice.manager.fight.util.BlockUtil; +import dev.nandi0813.practice.manager.fight.util.ChangedBlock; import dev.nandi0813.practice.manager.fight.util.DeathCause; import dev.nandi0813.practice.manager.ladder.abstraction.interfaces.CustomConfig; import dev.nandi0813.practice.manager.ladder.abstraction.interfaces.LadderHandle; import dev.nandi0813.practice.manager.ladder.abstraction.normal.NormalLadder; import dev.nandi0813.practice.manager.ladder.enums.LadderType; -import dev.nandi0813.practice.moved.ChangedBlock; import dev.nandi0813.practice.util.PermanentConfig; import lombok.Getter; import lombok.Setter; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/ladder/util/LadderUtil.java b/core/src/main/java/dev/nandi0813/practice/manager/ladder/util/LadderUtil.java index 10c5e7c8..d8262a27 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/ladder/util/LadderUtil.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/ladder/util/LadderUtil.java @@ -3,10 +3,11 @@ import dev.nandi0813.practice.ZonePractice; import dev.nandi0813.practice.manager.arena.ArenaManager; import dev.nandi0813.practice.manager.arena.arenas.Arena; -import dev.nandi0813.practice.manager.arena.arenas.interfaces.DisplayArena; import dev.nandi0813.practice.manager.backend.LanguageManager; import dev.nandi0813.practice.manager.backend.MysqlManager; +import dev.nandi0813.practice.manager.fight.match.Match; import dev.nandi0813.practice.manager.fight.match.MatchManager; +import dev.nandi0813.practice.manager.fight.util.BlockUtil; import dev.nandi0813.practice.manager.gui.GUI; import dev.nandi0813.practice.manager.gui.GUIManager; import dev.nandi0813.practice.manager.gui.GUIType; @@ -15,6 +16,7 @@ import dev.nandi0813.practice.manager.gui.setup.ladder.LadderSetupManager; import dev.nandi0813.practice.manager.ladder.abstraction.Ladder; import dev.nandi0813.practice.manager.ladder.abstraction.normal.NormalLadder; +import dev.nandi0813.practice.manager.ladder.type.FireballFight; import dev.nandi0813.practice.manager.ladder.type.SkyWars; import dev.nandi0813.practice.manager.leaderboard.LeaderboardManager; import dev.nandi0813.practice.manager.leaderboard.types.LbMainType; @@ -22,13 +24,30 @@ import dev.nandi0813.practice.manager.profile.Profile; import dev.nandi0813.practice.manager.profile.ProfileManager; import dev.nandi0813.practice.util.Common; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.TextColor; import org.bukkit.Bukkit; +import org.bukkit.Color; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; +import org.bukkit.entity.TNTPrimed; +import org.bukkit.event.block.BlockPlaceEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.Damageable; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.LeatherArmorMeta; +import org.bukkit.inventory.meta.PotionMeta; +import org.bukkit.potion.PotionType; +import org.jetbrains.annotations.NotNull; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.*; +import static dev.nandi0813.practice.util.PermanentConfig.FIGHT_ENTITY; + public enum LadderUtil { ; @@ -187,4 +206,124 @@ public static List getLadderNames(List ladders) { return names; } + public static void loadInventory(Player player, ItemStack[] armor, ItemStack[] inventory, ItemStack[] extra) { + player.getInventory().setArmorContents(armor); + player.getInventory().setStorageContents(inventory); + player.getInventory().setExtraContents(extra); + } + + private static final String[] MATERIAL_TYPES = { + "_WOOL", "_STAINED_CLAY", "_STAINED_GLASS", "_STAINED_GLASS_PANE", "_CARPET", + "_CONCRETE", "_CONCRETE_POWDER", "_TERRACOTTA", "_GLAZED_TERRACOTTA", "_CANDLE", "_BANNER" + }; + + public static ItemStack changeItemColor(@NotNull ItemStack item, Component teamColor) { + String itemType = item.getType().toString(); + TextColor textColor = teamColor.color(); + Color color = Color.YELLOW; + if (textColor != null) { + color = Color.fromRGB( + Objects.requireNonNull(teamColor.color()).red(), + Objects.requireNonNull(teamColor.color()).green(), + Objects.requireNonNull(teamColor.color()).blue() + ); + } + + if (item.getType().name().startsWith("LEATHER_")) { + LeatherArmorMeta meta = (LeatherArmorMeta) item.getItemMeta(); + if (meta != null) { + meta.setColor(color); + item.setItemMeta(meta); + } + return item; + } + + for (String type : MATERIAL_TYPES) { + if (itemType.contains(type) && textColor != null) { + try { + Material material = Material.getMaterial(textColor.toString().toUpperCase() + type); + + if (material != null) { + return item.withType(material); + } + } catch (Exception ignored) { + break; + } + } + } + + return item; + } + + public static ItemStack getPotionItem(String string) { + try { + if (string.contains("::")) { + String[] split = string.split("::"); + ItemStack itemStack = new ItemStack(Material.valueOf(split[0])); + + PotionMeta potionMeta = (PotionMeta) itemStack.getItemMeta(); + if (potionMeta != null) + potionMeta.setBasePotionType(PotionType.valueOf(split[1])); + + itemStack.setItemMeta(potionMeta); + return itemStack; + } + } catch (Exception e) { + Common.sendConsoleMMMessage("Invalid item: " + string); + } + return null; + } + + public static boolean isUnbreakable(ItemStack item) { + if (item.hasItemMeta() && item.getItemMeta() != null) { + return item.getItemMeta().isUnbreakable(); + } + return false; + } + + public static ItemMeta setUnbreakable(ItemMeta itemMeta, boolean unbreakable) { + if (itemMeta != null) { + itemMeta.setUnbreakable(unbreakable); + } + return itemMeta; + } + + public static ItemStack setDurability(ItemStack itemStack, int durability) { + if (itemStack.getItemMeta() != null) { + ItemMeta itemMeta = itemStack.getItemMeta(); + if (itemMeta instanceof Damageable damageable) { + int newDamage = itemStack.getType().getMaxDurability() - durability; + if (newDamage < 0 || newDamage > itemStack.getType().getMaxDurability()) { + newDamage = itemStack.getType().getMaxDurability(); + } + + damageable.setDamage(newDamage); + itemStack.setItemMeta(damageable); + return itemStack; + } + } + return itemStack; + } + + public static void placeTnt(BlockPlaceEvent e, Match match) { + Bukkit.getScheduler().runTaskLater(ZonePractice.getInstance(), () -> { + if (e.isCancelled()) { + return; + } + + Block block = e.getBlock(); + block.setBlockData(Material.AIR.createBlockData()); + block.getState().update(); + + TNTPrimed tnt = (TNTPrimed) block.getWorld().spawnEntity(block.getLocation().subtract(-0.5, 0, -0.5), EntityType.TNT); + BlockUtil.setMetadata(tnt, FIGHT_ENTITY, match); + tnt.setIsIncendiary(false); + + if (match.getLadder() instanceof FireballFight) { + BlockUtil.setMetadata(tnt, FireballFight.FIREBALL_FIGHT_TNT, match); + BlockUtil.setMetadata(tnt, FireballFight.FIREBALL_FIGHT_TNT_SHOOTER, e.getPlayer()); + } + }, 2L); + } + } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/nametag/NametagManager.java b/core/src/main/java/dev/nandi0813/practice/manager/nametag/NametagManager.java index b9b1a640..94f28f57 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/nametag/NametagManager.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/nametag/NametagManager.java @@ -1,7 +1,7 @@ package dev.nandi0813.practice.manager.nametag; import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerTeams; -import dev.nandi0813.practice.moved.PlayerUtil; +import dev.nandi0813.practice.manager.fight.util.PlayerUtil; import dev.nandi0813.practice.util.PermanentConfig; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/nametag/TabIntegration.java b/core/src/main/java/dev/nandi0813/practice/manager/nametag/TabIntegration.java index 6cd0806d..5907ed1a 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/nametag/TabIntegration.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/nametag/TabIntegration.java @@ -1,6 +1,6 @@ package dev.nandi0813.practice.manager.nametag; -import dev.nandi0813.practice.moved.PlayerUtil; +import dev.nandi0813.practice.manager.fight.util.PlayerUtil; import dev.nandi0813.practice.util.PermanentConfig; import lombok.Getter; import me.neznamy.tab.api.TabAPI; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/playerkit/KitItems.java b/core/src/main/java/dev/nandi0813/practice/manager/playerkit/KitItems.java index 1a93fff6..de92aba8 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/playerkit/KitItems.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/playerkit/KitItems.java @@ -1,7 +1,7 @@ package dev.nandi0813.practice.manager.playerkit; import dev.nandi0813.practice.manager.playerkit.items.KitItem; -import dev.nandi0813.practice.moved.KitData; +import dev.nandi0813.practice.util.KitData; import lombok.Getter; import org.bukkit.inventory.ItemStack; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/playerkit/PlayerKitUtil.java b/core/src/main/java/dev/nandi0813/practice/manager/playerkit/PlayerKitUtil.java index 341692b1..7bd5e571 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/playerkit/PlayerKitUtil.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/playerkit/PlayerKitUtil.java @@ -1,6 +1,6 @@ package dev.nandi0813.practice.manager.playerkit; -import dev.nandi0813.practice.moved.LadderUtil; +import dev.nandi0813.practice.manager.ladder.util.LadderUtil; import dev.nandi0813.practice.util.Common; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/playerkit/StaticItems.java b/core/src/main/java/dev/nandi0813/practice/manager/playerkit/StaticItems.java index 36fe195b..aa260b92 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/playerkit/StaticItems.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/playerkit/StaticItems.java @@ -1,8 +1,8 @@ package dev.nandi0813.practice.manager.playerkit; import dev.nandi0813.practice.manager.gui.GUIItem; +import dev.nandi0813.practice.manager.ladder.util.LadderUtil; import dev.nandi0813.practice.manager.playerkit.items.EditorIcon; -import dev.nandi0813.practice.moved.LadderUtil; import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.Pair; import org.bukkit.enchantments.Enchantment; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/playerkit/guis/MainGUI.java b/core/src/main/java/dev/nandi0813/practice/manager/playerkit/guis/MainGUI.java index 09261a31..7be1bd8b 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/playerkit/guis/MainGUI.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/playerkit/guis/MainGUI.java @@ -2,6 +2,7 @@ import dev.nandi0813.practice.ZonePractice; import dev.nandi0813.practice.manager.backend.LanguageManager; +import dev.nandi0813.practice.manager.fight.util.PlayerUtil; import dev.nandi0813.practice.manager.gui.GUI; import dev.nandi0813.practice.manager.gui.GUIManager; import dev.nandi0813.practice.manager.gui.GUIType; @@ -216,7 +217,7 @@ public void handleCloseEvent(InventoryCloseEvent e) { public void open(Player player) { super.open(player); - dev.nandi0813.practice.moved.PlayerUtil.setActiveInventoryTitle( + PlayerUtil.setActiveInventoryTitle( player, StaticItems.MAIN_GUI_TITLE.replace("%name%", customLadder.getDisplayName()) ); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/playerkit/items/KitItem.java b/core/src/main/java/dev/nandi0813/practice/manager/playerkit/items/KitItem.java index 165a9679..9f430d70 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/playerkit/items/KitItem.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/playerkit/items/KitItem.java @@ -1,6 +1,6 @@ package dev.nandi0813.practice.manager.playerkit.items; -import dev.nandi0813.practice.moved.LadderUtil; +import dev.nandi0813.practice.manager.ladder.util.LadderUtil; import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.StringUtil; import org.bukkit.Bukkit; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/profile/Profile.java b/core/src/main/java/dev/nandi0813/practice/manager/profile/Profile.java index c7210b3c..ac7b1810 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/profile/Profile.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/profile/Profile.java @@ -10,8 +10,8 @@ import dev.nandi0813.practice.manager.profile.group.Group; import dev.nandi0813.practice.manager.profile.group.GroupManager; import dev.nandi0813.practice.manager.profile.statistics.ProfileStat; -import dev.nandi0813.practice.moved.ActionBar; import dev.nandi0813.practice.util.Common; +import dev.nandi0813.practice.util.actionbar.ActionBar; import lombok.Getter; import lombok.Setter; import net.kyori.adventure.text.Component; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/queue/QueueManager.java b/core/src/main/java/dev/nandi0813/practice/manager/queue/QueueManager.java index 7d9e590d..a0036d17 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/queue/QueueManager.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/queue/QueueManager.java @@ -3,6 +3,7 @@ import dev.nandi0813.practice.ZonePractice; import dev.nandi0813.practice.manager.backend.ConfigManager; import dev.nandi0813.practice.manager.backend.LanguageManager; +import dev.nandi0813.practice.manager.fight.util.PlayerUtil; import dev.nandi0813.practice.manager.ladder.abstraction.Ladder; import dev.nandi0813.practice.manager.ladder.abstraction.normal.NormalLadder; import dev.nandi0813.practice.manager.profile.Profile; @@ -85,7 +86,7 @@ public void createRankedQueue(Player player, NormalLadder ladder) { return; } - if (dev.nandi0813.practice.moved.PlayerUtil.getPing(player) > ConfigManager.getInt("QUEUE.RANKED.MAX-PING")) { + if (PlayerUtil.getPing(player) > ConfigManager.getInt("QUEUE.RANKED.MAX-PING")) { Common.sendMMMessage(player, LanguageManager.getString("QUEUES.RANKED.HIGH-PING")); player.closeInventory(); return; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/queue/runnables/SearchRunnable.java b/core/src/main/java/dev/nandi0813/practice/manager/queue/runnables/SearchRunnable.java index 7370741f..e84c9b24 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/queue/runnables/SearchRunnable.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/queue/runnables/SearchRunnable.java @@ -2,7 +2,7 @@ import dev.nandi0813.practice.manager.queue.Queue; import dev.nandi0813.practice.manager.queue.QueueManager; -import dev.nandi0813.practice.moved.ActionBar; +import dev.nandi0813.practice.util.actionbar.ActionBar; import dev.nandi0813.practice.util.interfaces.Runnable; import org.bukkit.Bukkit; import org.bukkit.scheduler.BukkitTask; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/server/ServerManager.java b/core/src/main/java/dev/nandi0813/practice/manager/server/ServerManager.java index 2de3ed94..b3f64ad0 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/server/ServerManager.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/server/ServerManager.java @@ -210,7 +210,7 @@ public void onTeleport(PlayerTeleportEvent e) { if (from != null && !from.equals(WorldEnum.OTHER)) { if (profile.getStatus().equals(ProfileStatus.LOBBY)) { ProfileManager.getInstance().getProfile(player).setStatus(ProfileStatus.OFFLINE); - dev.nandi0813.practice.moved.PlayerUtil.clearInventory(player); + dev.nandi0813.practice.manager.fight.util.PlayerUtil.clearInventory(player); SidebarManager.getInstance().unLoadSidebar(player); } } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/sidebar/adapter/AdapterUtil.java b/core/src/main/java/dev/nandi0813/practice/manager/sidebar/adapter/AdapterUtil.java index ebbc78ff..5ddfbf0b 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/sidebar/adapter/AdapterUtil.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/sidebar/adapter/AdapterUtil.java @@ -10,6 +10,7 @@ import dev.nandi0813.practice.manager.fight.match.type.playersvsplayers.partysplit.PartySplit; import dev.nandi0813.practice.manager.fight.match.type.playersvsplayers.partyvsparty.PartyVsParty; import dev.nandi0813.practice.manager.fight.match.util.TeamUtil; +import dev.nandi0813.practice.manager.fight.util.PlayerUtil; import dev.nandi0813.practice.manager.fight.util.Stats.Statistic; import dev.nandi0813.practice.manager.sidebar.SidebarManager; import net.kyori.adventure.text.Component; @@ -42,7 +43,7 @@ private static TextReplacementConfig replace(@RegExp String placeholder, Compone * Gets player ping as string or "N/A" if offline */ private static String getPingString(Player player) { - return player.isOnline() ? String.valueOf(dev.nandi0813.practice.moved.PlayerUtil.getPing(player)) : "N/A"; + return player.isOnline() ? String.valueOf(PlayerUtil.getPing(player)) : "N/A"; } /** @@ -54,7 +55,7 @@ private static Component replaceCommonMatchPlaceholders(Component line, Match ma .replaceText(replace("%totalRounds%", String.valueOf(match.getLadder().getRounds()))) .replaceText(replace("%roundDuration%", match.getCurrentRound().getFormattedTime())) .replaceText(replace("%matchDuration%", match.getFormattedTime())) - .replaceText(replace("%ping%", String.valueOf(dev.nandi0813.practice.moved.PlayerUtil.getPing(player)))) + .replaceText(replace("%ping%", String.valueOf(PlayerUtil.getPing(player)))) .replaceText(replace("%arena%", match.getArena().getDisplayName())) .replaceText(replace("%ladder%", match.getLadder().getDisplayName())); } @@ -198,7 +199,7 @@ public static Component replaceFFAPlaceholders(Player player, Component line, FF .replaceText(replace("%players%", String.valueOf(ffa.getPlayers().size()))) .replaceText(replace("%spectators%", String.valueOf(ffa.getSpectators().size()))) .replaceText(replace("%nextReset%", ffa.getBuildRollback() != null ? ffa.getBuildRollback().getFormattedTime() : "N/A")) - .replaceText(replace("%ping%", String.valueOf(dev.nandi0813.practice.moved.PlayerUtil.getPing(player)))) + .replaceText(replace("%ping%", String.valueOf(PlayerUtil.getPing(player)))) .replaceText(replace("%ladder%", ffa.getPlayers().get(player).getDisplayName())) .replaceText(replace("%arena%", ffa.getArena().getDisplayName())) .replaceText(replace("%kills%", String.valueOf(statistic.getKills()))) diff --git a/core/src/main/java/dev/nandi0813/practice/moved/ArenaListener.java b/core/src/main/java/dev/nandi0813/practice/moved/ArenaListener.java deleted file mode 100644 index 29fd15e5..00000000 --- a/core/src/main/java/dev/nandi0813/practice/moved/ArenaListener.java +++ /dev/null @@ -1,45 +0,0 @@ -package dev.nandi0813.practice.moved; - -import dev.nandi0813.practice.ZonePractice; -import dev.nandi0813.practice.manager.arena.util.ArenaWorldUtil; -import dev.nandi0813.practice.manager.server.ServerManager; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.world.ChunkUnloadEvent; -import org.bukkit.event.world.WorldUnloadEvent; - -import static dev.nandi0813.practice.manager.arena.ArenaManager.LOADED_CHUNKS; -import static dev.nandi0813.practice.manager.arena.ArenaManager.LOAD_CHUNKS; - -public class ArenaListener implements Listener { - - @EventHandler - public void onChunkUnload(ChunkUnloadEvent e) { - if (LOAD_CHUNKS) { - if (LOADED_CHUNKS.contains(e.getChunk())) { - // Use addPluginChunkTicket to force-keep the chunk loaded. - // This is safe from recursion (unlike getChunkAtAsync which can - // trigger chunk scheduling → more unloads → StackOverflowError). - e.getChunk().addPluginChunkTicket(ZonePractice.getInstance()); - } - } - } - - @EventHandler - public void onWorldUnload(WorldUnloadEvent e) { - if (e.getWorld() == ArenaWorldUtil.getArenasWorld()) { - e.setCancelled(true); - return; - } - - if (e.getWorld() == ArenaWorldUtil.getArenasCopyWorld()) { - e.setCancelled(true); - return; - } - - if (ServerManager.getLobby() != null && ServerManager.getLobby().getWorld() == e.getWorld()) { - e.setCancelled(true); - } - } - -} diff --git a/core/src/main/java/dev/nandi0813/practice/moved/FightUtil.java b/core/src/main/java/dev/nandi0813/practice/moved/FightUtil.java deleted file mode 100644 index ebe0417b..00000000 --- a/core/src/main/java/dev/nandi0813/practice/moved/FightUtil.java +++ /dev/null @@ -1,38 +0,0 @@ -package dev.nandi0813.practice.moved; - -import dev.nandi0813.practice.manager.fight.util.DeathCause; -import org.bukkit.damage.DamageType; - -public enum FightUtil { - ; - - public static DeathCause convert(DamageType damageType) { - if (damageType == null) { - return DeathCause.DEFAULT; - } - - if (damageType.equals(DamageType.IN_FIRE) || damageType.equals(DamageType.ON_FIRE) || - damageType.equals(DamageType.CAMPFIRE) || damageType.equals(DamageType.HOT_FLOOR)) { - return DeathCause.FIRE; - } else if (damageType.equals(DamageType.LAVA)) { - return DeathCause.LAVA; - } else if (damageType.equals(DamageType.DROWN)) { - return DeathCause.WATER; - } else if (damageType.equals(DamageType.FALL) || damageType.equals(DamageType.STALAGMITE)) { - return DeathCause.FALL; - } else if (damageType.equals(DamageType.EXPLOSION) || damageType.equals(DamageType.PLAYER_EXPLOSION)) { - return DeathCause.EXPLOSION; - } else if (damageType.equals(DamageType.MOB_ATTACK) || damageType.equals(DamageType.PLAYER_ATTACK) - || damageType.equals(DamageType.MACE_SMASH)) { - return DeathCause.PLAYER_ATTACK; - } else if (damageType.equals(DamageType.ARROW) || damageType.equals(DamageType.TRIDENT) || - damageType.equals(DamageType.MOB_PROJECTILE)) { - return DeathCause.PLAYER_PROJECTILE; - } else if (damageType.equals(DamageType.OUT_OF_WORLD)) { - return DeathCause.VOID; - } else { - return DeathCause.DEFAULT; - } - } - -} diff --git a/core/src/main/java/dev/nandi0813/practice/moved/ItemOffHandListener.java b/core/src/main/java/dev/nandi0813/practice/moved/ItemOffHandListener.java deleted file mode 100644 index 6676cbcb..00000000 --- a/core/src/main/java/dev/nandi0813/practice/moved/ItemOffHandListener.java +++ /dev/null @@ -1,26 +0,0 @@ -package dev.nandi0813.practice.moved; - -import dev.nandi0813.practice.manager.profile.Profile; -import dev.nandi0813.practice.manager.profile.ProfileManager; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerSwapHandItemsEvent; - -public class ItemOffHandListener implements Listener { - - @EventHandler - public void onItemSwitchHand(PlayerSwapHandItemsEvent e) { - Player player = e.getPlayer(); - if (player.isOp() || player.hasPermission("*")) return; - - Profile profile = ProfileManager.getInstance().getProfile(player); - - if (profile == null) return; - - switch (profile.getStatus()) { - case LOBBY, QUEUE, EDITOR, SPECTATE -> e.setCancelled(true); - } - } - -} diff --git a/core/src/main/java/dev/nandi0813/practice/moved/LadderUtil.java b/core/src/main/java/dev/nandi0813/practice/moved/LadderUtil.java deleted file mode 100644 index 6be91b96..00000000 --- a/core/src/main/java/dev/nandi0813/practice/moved/LadderUtil.java +++ /dev/null @@ -1,152 +0,0 @@ -package dev.nandi0813.practice.moved; - -import dev.nandi0813.practice.ZonePractice; -import dev.nandi0813.practice.manager.fight.match.Match; -import dev.nandi0813.practice.manager.fight.util.BlockUtil; -import dev.nandi0813.practice.manager.ladder.type.FireballFight; -import dev.nandi0813.practice.util.Common; -import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.format.TextColor; -import org.bukkit.Bukkit; -import org.bukkit.Color; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Player; -import org.bukkit.entity.TNTPrimed; -import org.bukkit.event.block.BlockPlaceEvent; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.Damageable; -import org.bukkit.inventory.meta.ItemMeta; -import org.bukkit.inventory.meta.LeatherArmorMeta; -import org.bukkit.inventory.meta.PotionMeta; -import org.bukkit.potion.PotionType; -import org.jetbrains.annotations.NotNull; - -import java.util.Objects; - -import static dev.nandi0813.practice.util.PermanentConfig.FIGHT_ENTITY; - -public class LadderUtil { - - public static void loadInventory(Player player, ItemStack[] armor, ItemStack[] inventory, ItemStack[] extra) { - player.getInventory().setArmorContents(armor); - player.getInventory().setStorageContents(inventory); - player.getInventory().setExtraContents(extra); - } - - private static final String[] MATERIAL_TYPES = { - "_WOOL", "_STAINED_CLAY", "_STAINED_GLASS", "_STAINED_GLASS_PANE", "_CARPET", - "_CONCRETE", "_CONCRETE_POWDER", "_TERRACOTTA", "_GLAZED_TERRACOTTA", "_CANDLE", "_BANNER" - }; - - public static ItemStack changeItemColor(@NotNull ItemStack item, Component teamColor) { - String itemType = item.getType().toString(); - TextColor textColor = teamColor.color(); - Color color = Color.YELLOW; - if (textColor != null) { - color = Color.fromRGB( - Objects.requireNonNull(teamColor.color()).red(), - Objects.requireNonNull(teamColor.color()).green(), - Objects.requireNonNull(teamColor.color()).blue() - ); - } - - if (item.getType().name().startsWith("LEATHER_")) { - LeatherArmorMeta meta = (LeatherArmorMeta) item.getItemMeta(); - if (meta != null) { - meta.setColor(color); - item.setItemMeta(meta); - } - return item; - } - - for (String type : MATERIAL_TYPES) { - if (itemType.contains(type) && textColor != null) { - try { - Material material = Material.getMaterial(textColor.toString().toUpperCase() + type); - - if (material != null) { - return item.withType(material); - } - } catch (Exception ignored) { - break; - } - } - } - - return item; - } - - public static ItemStack getPotionItem(String string) { - try { - if (string.contains("::")) { - String[] split = string.split("::"); - ItemStack itemStack = new ItemStack(Material.valueOf(split[0])); - - PotionMeta potionMeta = (PotionMeta) itemStack.getItemMeta(); - if (potionMeta != null) - potionMeta.setBasePotionType(PotionType.valueOf(split[1])); - - itemStack.setItemMeta(potionMeta); - return itemStack; - } - } catch (Exception e) { - Common.sendConsoleMMMessage("Invalid item: " + string); - } - return null; - } - - public static boolean isUnbreakable(ItemStack item) { - if (item.hasItemMeta() && item.getItemMeta() != null) { - return item.getItemMeta().isUnbreakable(); - } - return false; - } - - public static ItemMeta setUnbreakable(ItemMeta itemMeta, boolean unbreakable) { - if (itemMeta != null) { - itemMeta.setUnbreakable(unbreakable); - } - return itemMeta; - } - - public static ItemStack setDurability(ItemStack itemStack, int durability) { - if (itemStack.getItemMeta() != null) { - ItemMeta itemMeta = itemStack.getItemMeta(); - if (itemMeta instanceof Damageable damageable) { - int newDamage = itemStack.getType().getMaxDurability() - durability; - if (newDamage < 0 || newDamage > itemStack.getType().getMaxDurability()) { - newDamage = itemStack.getType().getMaxDurability(); - } - - damageable.setDamage(newDamage); - itemStack.setItemMeta(damageable); - return itemStack; - } - } - return itemStack; - } - - public static void placeTnt(BlockPlaceEvent e, Match match) { - Bukkit.getScheduler().runTaskLater(ZonePractice.getInstance(), () -> { - if (e.isCancelled()) { - return; - } - - Block block = e.getBlock(); - block.setBlockData(Material.AIR.createBlockData()); - block.getState().update(); - - TNTPrimed tnt = (TNTPrimed) block.getWorld().spawnEntity(block.getLocation().subtract(-0.5, 0, -0.5), EntityType.TNT); - BlockUtil.setMetadata(tnt, FIGHT_ENTITY, match); - tnt.setIsIncendiary(false); - - if (match.getLadder() instanceof FireballFight) { - BlockUtil.setMetadata(tnt, FireballFight.FIREBALL_FIGHT_TNT, match); - BlockUtil.setMetadata(tnt, FireballFight.FIREBALL_FIGHT_TNT_SHOOTER, e.getPlayer()); - } - }, 2L); - } - -} diff --git a/core/src/main/java/dev/nandi0813/practice/util/Common.java b/core/src/main/java/dev/nandi0813/practice/util/Common.java index 83c2e0f4..caa27cc7 100644 --- a/core/src/main/java/dev/nandi0813/practice/util/Common.java +++ b/core/src/main/java/dev/nandi0813/practice/util/Common.java @@ -25,14 +25,7 @@ public enum Common { public static void send(CommandSender sender, Component component) { if (sender == null) return; - - try { - sender.getClass().getMethod("sendMessage", Component.class).invoke(sender, component); - return; - } catch (Throwable ignored) { } - - String legacy = LegacyComponentSerializer.legacySection().serialize(component); - sender.sendMessage(legacy.isEmpty() ? " " : legacy); + sender.sendMessage(component); } public static void sendMMMessage(Player player, String line) { diff --git a/core/src/main/java/dev/nandi0813/practice/moved/ItemCreateUtil.java b/core/src/main/java/dev/nandi0813/practice/util/ItemCreateUtil.java similarity index 98% rename from core/src/main/java/dev/nandi0813/practice/moved/ItemCreateUtil.java rename to core/src/main/java/dev/nandi0813/practice/util/ItemCreateUtil.java index 132b97c2..36276966 100644 --- a/core/src/main/java/dev/nandi0813/practice/moved/ItemCreateUtil.java +++ b/core/src/main/java/dev/nandi0813/practice/util/ItemCreateUtil.java @@ -1,6 +1,5 @@ -package dev.nandi0813.practice.moved; +package dev.nandi0813.practice.util; -import dev.nandi0813.practice.util.StringUtil; import net.kyori.adventure.text.Component; import org.bukkit.Color; import org.bukkit.Material; diff --git a/core/src/main/java/dev/nandi0813/practice/moved/KitData.java b/core/src/main/java/dev/nandi0813/practice/util/KitData.java similarity index 98% rename from core/src/main/java/dev/nandi0813/practice/moved/KitData.java rename to core/src/main/java/dev/nandi0813/practice/util/KitData.java index a1694d8d..0f00c737 100644 --- a/core/src/main/java/dev/nandi0813/practice/moved/KitData.java +++ b/core/src/main/java/dev/nandi0813/practice/util/KitData.java @@ -1,6 +1,5 @@ -package dev.nandi0813.practice.moved; +package dev.nandi0813.practice.util; -import dev.nandi0813.practice.util.ItemSerializationUtil; import lombok.Getter; import lombok.Setter; import org.bukkit.configuration.file.FileConfiguration; diff --git a/core/src/main/java/dev/nandi0813/practice/moved/VersionChecker.java b/core/src/main/java/dev/nandi0813/practice/util/VersionChecker.java similarity index 98% rename from core/src/main/java/dev/nandi0813/practice/moved/VersionChecker.java rename to core/src/main/java/dev/nandi0813/practice/util/VersionChecker.java index ebae4b58..fdfab2c0 100644 --- a/core/src/main/java/dev/nandi0813/practice/moved/VersionChecker.java +++ b/core/src/main/java/dev/nandi0813/practice/util/VersionChecker.java @@ -1,4 +1,4 @@ -package dev.nandi0813.practice.moved; +package dev.nandi0813.practice.util; import dev.nandi0813.practice.ZonePractice; import lombok.Getter; diff --git a/core/src/main/java/dev/nandi0813/practice/moved/ActionBar.java b/core/src/main/java/dev/nandi0813/practice/util/actionbar/ActionBar.java similarity index 98% rename from core/src/main/java/dev/nandi0813/practice/moved/ActionBar.java rename to core/src/main/java/dev/nandi0813/practice/util/actionbar/ActionBar.java index 1d439969..22f30787 100644 --- a/core/src/main/java/dev/nandi0813/practice/moved/ActionBar.java +++ b/core/src/main/java/dev/nandi0813/practice/util/actionbar/ActionBar.java @@ -1,4 +1,4 @@ -package dev.nandi0813.practice.moved; +package dev.nandi0813.practice.util.actionbar; import dev.nandi0813.practice.ZonePractice; import dev.nandi0813.practice.manager.profile.Profile; diff --git a/core/src/main/java/dev/nandi0813/practice/moved/ActionBarRunnable.java b/core/src/main/java/dev/nandi0813/practice/util/actionbar/ActionBarRunnable.java similarity index 93% rename from core/src/main/java/dev/nandi0813/practice/moved/ActionBarRunnable.java rename to core/src/main/java/dev/nandi0813/practice/util/actionbar/ActionBarRunnable.java index 660ce0cf..489fe15b 100644 --- a/core/src/main/java/dev/nandi0813/practice/moved/ActionBarRunnable.java +++ b/core/src/main/java/dev/nandi0813/practice/util/actionbar/ActionBarRunnable.java @@ -1,4 +1,4 @@ -package dev.nandi0813.practice.moved; +package dev.nandi0813.practice.util.actionbar; import dev.nandi0813.practice.util.interfaces.Runnable; diff --git a/core/src/main/java/dev/nandi0813/practice/util/fightmapchange/FightChangeOptimized.java b/core/src/main/java/dev/nandi0813/practice/util/fightmapchange/FightChangeOptimized.java index d5f886d6..30d74d98 100644 --- a/core/src/main/java/dev/nandi0813/practice/util/fightmapchange/FightChangeOptimized.java +++ b/core/src/main/java/dev/nandi0813/practice/util/fightmapchange/FightChangeOptimized.java @@ -2,7 +2,7 @@ import dev.nandi0813.practice.ZonePractice; import dev.nandi0813.practice.manager.fight.util.BlockUtil; -import dev.nandi0813.practice.moved.ChangedBlock; +import dev.nandi0813.practice.manager.fight.util.ChangedBlock; import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.Cuboid; import dev.nandi0813.practice.util.interfaces.Spectatable; diff --git a/core/src/main/java/dev/nandi0813/practice/util/interfaces/Spectatable.java b/core/src/main/java/dev/nandi0813/practice/util/interfaces/Spectatable.java index c53f3530..3e59727e 100644 --- a/core/src/main/java/dev/nandi0813/practice/util/interfaces/Spectatable.java +++ b/core/src/main/java/dev/nandi0813/practice/util/interfaces/Spectatable.java @@ -2,8 +2,8 @@ import dev.nandi0813.practice.manager.fight.ffa.game.FFA; import dev.nandi0813.practice.manager.fight.match.Match; +import dev.nandi0813.practice.manager.fight.util.ChangedBlock; import dev.nandi0813.practice.manager.gui.GUIItem; -import dev.nandi0813.practice.moved.ChangedBlock; import dev.nandi0813.practice.util.Cuboid; import dev.nandi0813.practice.util.fightmapchange.FightChangeOptimized; import org.bukkit.entity.Entity; diff --git a/core/src/main/java/dev/nandi0813/practice/util/playerutil/PlayerUtil.java b/core/src/main/java/dev/nandi0813/practice/util/playerutil/PlayerUtil.java index 04d31ddb..a9ed192c 100644 --- a/core/src/main/java/dev/nandi0813/practice/util/playerutil/PlayerUtil.java +++ b/core/src/main/java/dev/nandi0813/practice/util/playerutil/PlayerUtil.java @@ -26,7 +26,7 @@ public static void clearPlayer(Player player, boolean deleteInv, boolean fly, bo player.setGameMode(GameMode.SURVIVAL); player.setAllowFlight(fly); player.setFlying(fly); - dev.nandi0813.practice.moved.PlayerUtil.setCollidesWithEntities(player, entityCollide); + dev.nandi0813.practice.manager.fight.util.PlayerUtil.setCollidesWithEntities(player, entityCollide); if (ZonePractice.getInstance().isEnabled()) { Bukkit.getScheduler().runTaskLater(ZonePractice.getInstance(), () -> player.setFireTicks(0), 2L); @@ -34,7 +34,7 @@ public static void clearPlayer(Player player, boolean deleteInv, boolean fly, bo player.setFireTicks(0); } - if (deleteInv) dev.nandi0813.practice.moved.PlayerUtil.clearInventory(player); + if (deleteInv) dev.nandi0813.practice.manager.fight.util.PlayerUtil.clearInventory(player); for (PotionEffect potionEffect : player.getActivePotionEffects()) player.removePotionEffect(potionEffect.getType()); diff --git a/libs/PaperSpigot-1.8.8-R0.1-SNAPSHOT.jar b/libs/PaperSpigot-1.8.8-R0.1-SNAPSHOT.jar deleted file mode 100644 index 9d9b594e..00000000 --- a/libs/PaperSpigot-1.8.8-R0.1-SNAPSHOT.jar +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0610cd4a7ade17cf2d26059d3e2c93f6963435b8e0e314ba5784b411e0590338 -size 19891199 From 794f1e322a3b5b1ab4da9cf9d80378742342d012 Mon Sep 17 00:00:00 2001 From: Nandor Dukat Date: Mon, 16 Mar 2026 18:48:23 +0100 Subject: [PATCH 18/38] changed hologram from armor stands to text displays --- .../arena/listener/ArenaCopyUtilListener.java | 6 +- .../hologram/ArmorStandFactory.java | 99 --------------- .../leaderboard/hologram/Hologram.java | 17 ++- .../leaderboard/hologram/HologramLine.java | 44 +++---- .../hologram/HologramProtectionListener.java | 80 ++---------- .../hologram/TextDisplayFactory.java | 114 ++++++++++++++++++ .../fightmapchange/FightChangeOptimized.java | 18 +-- 7 files changed, 172 insertions(+), 206 deletions(-) delete mode 100644 core/src/main/java/dev/nandi0813/practice/manager/leaderboard/hologram/ArmorStandFactory.java create mode 100644 core/src/main/java/dev/nandi0813/practice/manager/leaderboard/hologram/TextDisplayFactory.java diff --git a/core/src/main/java/dev/nandi0813/practice/manager/arena/listener/ArenaCopyUtilListener.java b/core/src/main/java/dev/nandi0813/practice/manager/arena/listener/ArenaCopyUtilListener.java index 426ab3e9..44fe8736 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/arena/listener/ArenaCopyUtilListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/arena/listener/ArenaCopyUtilListener.java @@ -359,13 +359,13 @@ protected static void cancelTask(BukkitRunnable runnable, ArenaCopy arenaCopy, A /** * Removes all non-player entities from a cuboid. - * NOTE: Skips hologram armor stands to prevent leaderboard holograms from disappearing. + * NOTE: Skips hologram text displays to prevent leaderboard holograms from disappearing. */ protected static void removeNonPlayerEntities(Cuboid cuboid) { cuboid.getEntities().forEach(entity -> { if (!(entity instanceof Player)) { - // Skip hologram armor stands - if (dev.nandi0813.practice.manager.leaderboard.hologram.ArmorStandFactory.isHologramArmorStand(entity)) { + // Skip hologram text displays + if (dev.nandi0813.practice.manager.leaderboard.hologram.TextDisplayFactory.isHologramTextDisplay(entity)) { return; } entity.remove(); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/leaderboard/hologram/ArmorStandFactory.java b/core/src/main/java/dev/nandi0813/practice/manager/leaderboard/hologram/ArmorStandFactory.java deleted file mode 100644 index 1d67943d..00000000 --- a/core/src/main/java/dev/nandi0813/practice/manager/leaderboard/hologram/ArmorStandFactory.java +++ /dev/null @@ -1,99 +0,0 @@ -package dev.nandi0813.practice.manager.leaderboard.hologram; - -import dev.nandi0813.practice.manager.arena.util.ArenaUtil; -import dev.nandi0813.practice.util.StringUtil; -import lombok.experimental.UtilityClass; -import net.kyori.adventure.text.Component; -import org.bukkit.Location; -import org.bukkit.entity.ArmorStand; -import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -/** - * Factory for creating and configuring hologram armor stands. - * Centralizes all armor stand creation logic to prevent code duplication. - */ -@UtilityClass -public class ArmorStandFactory { - - /** - * Creates a new hologram armor stand at the specified location. - * - * @param location The location to spawn at (must have a valid world) - * @param text The display text (will be color-coded) - * @return The created ArmorStand, or null if location is invalid - */ - @Nullable - public ArmorStand create(@NotNull Location location, @NotNull String text) { - if (location.getWorld() == null) { - return null; - } - - ArmorStand stand = (ArmorStand) location.getWorld().spawnEntity(location, EntityType.ARMOR_STAND); - configure(stand, text); - return stand; - } - - /** - * Configures an armor stand for hologram display. - * - * @param stand The armor stand to configure - * @param text The display text (will be color-coded) - */ - public void configure(@NotNull ArmorStand stand, @NotNull String text) { - stand.setVisible(false); - stand.setGravity(false); - stand.setCustomNameVisible(true); - stand.customName(Component.text(StringUtil.CC(text))); - stand.setBasePlate(false); - stand.setArms(false); - ArenaUtil.setArmorStandInvulnerable(stand); - } - - /** - * Updates the display text of an armor stand. - * - * @param stand The armor stand to update - * @param text The new display text (will be color-coded) - */ - public void updateText(@NotNull ArmorStand stand, @NotNull String text) { - stand.customName(Component.text(StringUtil.CC(text))); - } - - /** - * Checks if an entity is a hologram armor stand. - * Hologram armor stands are invisible with custom names visible. - * - * @param entity The entity to check - * @return true if it's a hologram armor stand - */ - public boolean isHologramArmorStand(@Nullable Entity entity) { - return entity instanceof ArmorStand stand - && !stand.isVisible() - && stand.isCustomNameVisible(); - } - - /** - * Safely removes an armor stand if it exists and is not dead. - * - * @param stand The armor stand to remove (can be null) - */ - public void safeRemove(@Nullable ArmorStand stand) { - if (stand != null && !stand.isDead()) { - stand.remove(); - } - } - - /** - * Checks if an armor stand is alive and valid for use. - * - * @param stand The armor stand to check (can be null) - * @return true if the armor stand is alive - */ - public boolean isAlive(@Nullable ArmorStand stand) { - return stand != null && !stand.isDead(); - } -} - diff --git a/core/src/main/java/dev/nandi0813/practice/manager/leaderboard/hologram/Hologram.java b/core/src/main/java/dev/nandi0813/practice/manager/leaderboard/hologram/Hologram.java index 7c4fa2c7..73dfcc01 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/leaderboard/hologram/Hologram.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/leaderboard/hologram/Hologram.java @@ -23,7 +23,10 @@ import org.bukkit.configuration.file.YamlConfiguration; import org.jetbrains.annotations.NotNull; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; import java.util.concurrent.atomic.AtomicBoolean; import java.util.stream.Collectors; import java.util.stream.IntStream; @@ -36,7 +39,7 @@ *

  • Each hologram maintains a List of HologramLines
  • *
  • Smart updates only modify changed content (no flicker)
  • *
  • Thread-safe with atomic state tracking
  • - *
  • Auto-recovery for externally removed armor stands
  • + *
  • Auto-recovery for externally removed text displays
  • * */ @Getter @@ -45,7 +48,7 @@ public abstract class Hologram { // Configuration protected static final YamlConfiguration config = BackendManager.getConfig(); private static final String NULL_LINE_FORMAT = ConfigManager.getString("LEADERBOARD.HOLOGRAM.FORMAT.NULL-LINE"); - private static final double DEFAULT_SPACING = 0.3; + private static final double DEFAULT_SPACING = 0.25; // Core properties protected final String name; @@ -175,7 +178,9 @@ private synchronized void updateSmartly(@NotNull List textLines, @NotNul } } - private static final double BASE_HEIGHT_OFFSET = 0.3; // 0.3 block offset to raise holograms + // ArmorStand custom names rendered ~2 blocks above entity position. + // TextDisplay renders at entity position, so preserve existing configured hologram locations by adding this lift. + private static final double BASE_HEIGHT_OFFSET = 2.2; private List calculatePositions(int count, List spacings) { List positions = new ArrayList<>(); @@ -434,6 +439,10 @@ public void setEnabled(boolean enabled) { } else { this.enabled = false; hologramRunnable.cancel(true); + + // Show setup placeholder immediately when hologram is disabled. + despawn(); + setSetupHologram(SetupHologramType.SETUP); } setData(); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/leaderboard/hologram/HologramLine.java b/core/src/main/java/dev/nandi0813/practice/manager/leaderboard/hologram/HologramLine.java index 0bc995dc..44a71f15 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/leaderboard/hologram/HologramLine.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/leaderboard/hologram/HologramLine.java @@ -3,19 +3,19 @@ import lombok.Getter; import lombok.Setter; import org.bukkit.Location; -import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.TextDisplay; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; /** * Represents a single line in a hologram display. - * Each HologramLine manages exactly ONE ArmorStand entity with strict lifecycle management. + * Each HologramLine manages exactly ONE TextDisplay entity with strict lifecycle management. * *

    Key responsibilities:

    *
      - *
    • Spawning/despawning armor stand entities
    • + *
    • Spawning/despawning text display entities
    • *
    • Updating display text without flicker
    • - *
    • Auto-recovery when armor stands are removed externally
    • + *
    • Auto-recovery when displays are removed externally
    • *
    • Thread-safe state tracking
    • *
    */ @@ -23,7 +23,7 @@ public class HologramLine { @Setter - private ArmorStand entity; + private TextDisplay entity; private Location location; private String text = ""; private boolean spawned; @@ -37,17 +37,17 @@ public HologramLine() { } /** - * Spawns the armor stand at the specified location. + * Spawns the text display at the specified location. * This method is idempotent - calling multiple times won't create duplicates. * * @param loc The spawn location * @param text The display text (supports color codes) - * @return The spawned ArmorStand, or existing one if already spawned + * @return The spawned TextDisplay, or existing one if already spawned */ @Nullable - public ArmorStand spawn(@NotNull Location loc, @NotNull String text) { + public TextDisplay spawn(@NotNull Location loc, @NotNull String text) { // Return existing if already alive - if (spawned && ArmorStandFactory.isAlive(entity)) { + if (spawned && TextDisplayFactory.isAlive(entity)) { return entity; } @@ -58,14 +58,14 @@ public ArmorStand spawn(@NotNull Location loc, @NotNull String text) { return null; } - this.entity = ArmorStandFactory.create(location, text); + this.entity = TextDisplayFactory.create(location, text); this.spawned = (entity != null); return entity; } /** - * Despawns and removes the armor stand entity. + * Despawns and removes the text display entity. * The line can be respawned later with {@link #spawn(Location, String)}. */ public void despawn() { @@ -73,14 +73,14 @@ public void despawn() { return; } - ArmorStandFactory.safeRemove(entity); + TextDisplayFactory.safeRemove(entity); entity = null; spawned = false; } /** * Updates the display text. - * If the armor stand was externally removed, it will be automatically respawned. + * If the display was externally removed, it will be automatically respawned. * * @param newText The new display text (supports color codes) */ @@ -88,19 +88,19 @@ public void updateText(@NotNull String newText) { this.text = newText; // If entity is alive, just update the text - if (ArmorStandFactory.isAlive(entity)) { - ArmorStandFactory.updateText(entity, newText); + if (TextDisplayFactory.isAlive(entity)) { + TextDisplayFactory.updateText(entity, newText); return; } // Auto-respawn if entity was killed externally if (spawned && location != null && location.getWorld() != null) { - this.entity = ArmorStandFactory.create(location, newText); + this.entity = TextDisplayFactory.create(location, newText); } } /** - * Teleports the armor stand to a new location. + * Teleports the text display to a new location. * * @param newLoc The new location * @return true if teleported successfully @@ -115,12 +115,12 @@ public boolean teleport(@NotNull Location newLoc) { } /** - * Checks if this line has a valid, alive armor stand. + * Checks if this line has a valid, alive text display. * * @return true if the entity is alive */ public boolean isValid() { - return spawned && ArmorStandFactory.isAlive(entity); + return spawned && TextDisplayFactory.isAlive(entity); } /** @@ -132,7 +132,7 @@ public double getY() { if (location != null) { return location.getY(); } - return ArmorStandFactory.isAlive(entity) ? entity.getLocation().getY() : 0; + return TextDisplayFactory.isAlive(entity) ? entity.getLocation().getY() : 0; } /** @@ -151,7 +151,7 @@ public boolean update(@NotNull Location newLoc, @NotNull String newText) { this.text = newText; entity.teleport(newLoc); - ArmorStandFactory.updateText(entity, newText); + TextDisplayFactory.updateText(entity, newText); return true; } @@ -161,7 +161,7 @@ public boolean update(@NotNull Location newLoc, @NotNull String newText) { * Use as a recovery method when normal despawn might not work. */ public void forceClean() { - ArmorStandFactory.safeRemove(entity); + TextDisplayFactory.safeRemove(entity); entity = null; spawned = false; } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/leaderboard/hologram/HologramProtectionListener.java b/core/src/main/java/dev/nandi0813/practice/manager/leaderboard/hologram/HologramProtectionListener.java index 5a0ae410..83e92ee1 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/leaderboard/hologram/HologramProtectionListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/leaderboard/hologram/HologramProtectionListener.java @@ -1,27 +1,22 @@ package dev.nandi0813.practice.manager.leaderboard.hologram; import dev.nandi0813.practice.ZonePractice; -import dev.nandi0813.practice.util.Common; import org.bukkit.Bukkit; -import org.bukkit.entity.ArmorStand; -import org.bukkit.entity.Entity; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityDamageEvent; -import org.bukkit.event.entity.EntityDeathEvent; import org.bukkit.event.world.ChunkUnloadEvent; import java.util.Arrays; /** - * Protects hologram armor stands from external removal/damage. + * Protects hologram text displays from external removal/damage. * *

    Protection mechanisms:

    *
      - *
    • Rapid health check (every 5 ticks) to detect and respawn dead armor stands
    • + *
    • Rapid health check (every 5 ticks) to detect and respawn removed displays
    • *
    • Damage event cancellation
    • - *
    • Death event recovery
    • *
    • Chunk unload protection
    • *
    */ @@ -46,7 +41,7 @@ public static void register() { } /** - * Starts a frequent health check to ensure all hologram armor stands are alive. + * Starts a frequent health check to ensure all hologram displays are alive. */ private void startHealthCheck() { Bukkit.getScheduler().runTaskTimer(ZonePractice.getInstance(), this::checkAndRepairHolograms, @@ -54,94 +49,41 @@ private void startHealthCheck() { } /** - * Checks all holograms and respawns any dead armor stands. + * Checks all holograms and respawns any removed displays. */ private void checkAndRepairHolograms() { HologramManager.getInstance().getHolograms().stream() .filter(Hologram::isEnabled) .flatMap(hologram -> hologram.getLines().stream()) - .filter(line -> !ArmorStandFactory.isAlive(line.getEntity())) + .filter(line -> !TextDisplayFactory.isAlive(line.getEntity())) .filter(line -> line.getLocation() != null && line.getLocation().getWorld() != null) .forEach(this::respawnLine); } /** - * Respawns a hologram line's armor stand. + * Respawns a hologram line's text display. */ private void respawnLine(HologramLine line) { - ArmorStand newStand = ArmorStandFactory.create(line.getLocation(), line.getText()); - line.setEntity(newStand); + line.setEntity(TextDisplayFactory.create(line.getLocation(), line.getText())); } /** - * Cancels all damage to hologram armor stands. + * Cancels all damage to hologram text displays. */ @EventHandler(priority = EventPriority.LOWEST) public void onEntityDamage(EntityDamageEvent event) { - if (ArmorStandFactory.isHologramArmorStand(event.getEntity())) { + if (TextDisplayFactory.isHologramTextDisplay(event.getEntity())) { event.setCancelled(true); } } /** - * Respawns hologram armor stands that somehow died. - */ - @EventHandler(priority = EventPriority.MONITOR) - public void onEntityDeath(EntityDeathEvent event) { - Entity entity = event.getEntity(); - - if (!ArmorStandFactory.isHologramArmorStand(entity)) { - return; - } - - ArmorStand deadStand = (ArmorStand) entity; - String customName = deadStand.customName() == null ? null : Common.serializeComponentToLegacyString(deadStand.customName()); - var location = deadStand.getLocation(); - - // Schedule respawn for next tick - Bukkit.getScheduler().runTask(ZonePractice.getInstance(), () -> - findAndRespawnLine(deadStand, location, customName)); - } - - /** - * Finds the hologram line for a dead armor stand and respawns it. - */ - private void findAndRespawnLine(ArmorStand deadStand, org.bukkit.Location location, String customName) { - HologramManager.getInstance().getHolograms().stream() - .flatMap(hologram -> hologram.getLines().stream()) - .filter(line -> isMatchingLine(line, deadStand, location)) - .findFirst() - .ifPresent(line -> { - ArmorStand newStand = ArmorStandFactory.create(line.getLocation(), - customName != null ? customName : line.getText()); - line.setEntity(newStand); - }); - } - - /** - * Checks if a line matches the dead armor stand. - */ - private boolean isMatchingLine(HologramLine line, ArmorStand deadStand, org.bukkit.Location location) { - if (line.getEntity() == deadStand) { - return true; - } - org.bukkit.Location lineLocation = line.getLocation(); - if (lineLocation == null || lineLocation.getWorld() == null || location.getWorld() == null) { - return false; - } - if (!lineLocation.getWorld().equals(location.getWorld())) { - return false; - } - return lineLocation.distanceSquared(location) < 0.5; - } - - /** - * Prevents chunk unloading from affecting hologram armor stands. + * Prevents chunk unloading from affecting hologram text displays. */ @EventHandler(priority = EventPriority.HIGHEST) public void onChunkUnload(ChunkUnloadEvent event) { boolean hasHologram = Arrays.stream(event.getChunk().getEntities()) - .anyMatch(ArmorStandFactory::isHologramArmorStand); + .anyMatch(TextDisplayFactory::isHologramTextDisplay); if (hasHologram) { Bukkit.getScheduler().runTask(ZonePractice.getInstance(), () -> { diff --git a/core/src/main/java/dev/nandi0813/practice/manager/leaderboard/hologram/TextDisplayFactory.java b/core/src/main/java/dev/nandi0813/practice/manager/leaderboard/hologram/TextDisplayFactory.java new file mode 100644 index 00000000..71016ed2 --- /dev/null +++ b/core/src/main/java/dev/nandi0813/practice/manager/leaderboard/hologram/TextDisplayFactory.java @@ -0,0 +1,114 @@ +package dev.nandi0813.practice.manager.leaderboard.hologram; + +import dev.nandi0813.practice.ZonePractice; +import lombok.experimental.UtilityClass; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; +import org.bukkit.Color; +import org.bukkit.Location; +import org.bukkit.entity.Display; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.TextDisplay; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +/** + * Factory for creating and configuring hologram text displays. + * Centralizes all text display creation logic to prevent code duplication. + */ +@UtilityClass +public class TextDisplayFactory { + + /** + * Creates a new hologram text display at the specified location. + * + * @param location The location to spawn at (must have a valid world) + * @param text The display text (will be color-coded) + * @return The created TextDisplay, or null if location is invalid + */ + @Nullable + public TextDisplay create(@NotNull Location location, @NotNull String text) { + if (location.getWorld() == null) { + return null; + } + + TextDisplay display = (TextDisplay) location.getWorld().spawnEntity(location, EntityType.TEXT_DISPLAY); + configure(display, text); + return display; + } + + /** + * Configures a text display for hologram display. + * + * @param display The text display to configure + * @param text The display text (supports legacy formatting) + */ + public void configure(@NotNull TextDisplay display, @NotNull String text) { + display.text(deserializeText(text)); + display.setBillboard(Display.Billboard.CENTER); + display.setDefaultBackground(false); + display.setBackgroundColor(Color.fromARGB(0, 0, 0, 0)); + display.setShadowed(true); + display.setGravity(false); + display.setInvulnerable(true); + display.setPersistent(false); + display.setSilent(true); + display.setSeeThrough(false); + } + + /** + * Updates the display text of a text display. + * + * @param display The text display to update + * @param text The new display text + */ + public void updateText(@NotNull TextDisplay display, @NotNull String text) { + display.text(deserializeText(text)); + } + + private Component deserializeText(@NotNull String text) { + if (text.contains("<") && text.contains(">")) { + return ZonePractice.getMiniMessage().deserialize(text); + } + return LegacyComponentSerializer.legacySection().deserialize(text.replace('&', LegacyComponentSerializer.SECTION_CHAR)); + } + + /** + * Checks if an entity is a hologram text display. + * + * @param entity The entity to check + * @return true if it's a hologram text display + */ + public boolean isHologramTextDisplay(@Nullable Entity entity) { + return entity instanceof TextDisplay display + && display.getBillboard() == Display.Billboard.CENTER + && !display.isDefaultBackground() + && display.isShadowed() + && !display.isPersistent(); + } + + /** + * Safely removes a text display if it exists and is not dead. + * + * @param display The text display to remove (can be null) + */ + public void safeRemove(@Nullable TextDisplay display) { + if (display != null && !display.isDead()) { + display.remove(); + } + } + + /** + * Checks if a text display is alive and valid for use. + * + * @param display The text display to check (can be null) + * @return true if the text display is alive + */ + public boolean isAlive(@Nullable TextDisplay display) { + return display != null && !display.isDead(); + } +} + + + diff --git a/core/src/main/java/dev/nandi0813/practice/util/fightmapchange/FightChangeOptimized.java b/core/src/main/java/dev/nandi0813/practice/util/fightmapchange/FightChangeOptimized.java index 30d74d98..111b3d35 100644 --- a/core/src/main/java/dev/nandi0813/practice/util/fightmapchange/FightChangeOptimized.java +++ b/core/src/main/java/dev/nandi0813/practice/util/fightmapchange/FightChangeOptimized.java @@ -291,15 +291,15 @@ public void rollback(int maxCheck, int maxChange, @org.jetbrains.annotations.Nul /** * Removes all entities efficiently. * Strategy: Remove tracked entities first, then cleanup any remaining cuboid entities. - * NOTE: Skips hologram armor stands (invisible with custom name visible) to prevent + * NOTE: Skips hologram text displays to prevent * leaderboard holograms from disappearing when matches end. */ private void removeAllEntities() { // Remove tracked entities (fast - cached references) for (Entity entity : trackedEntities) { if (entity != null && entity.isValid()) { - // Skip hologram armor stands - if (isHologramArmorStand(entity)) continue; + // Skip hologram text displays + if (isHologramTextDisplay(entity)) continue; entity.remove(); } } @@ -309,8 +309,8 @@ private void removeAllEntities() { // This catches any entities that weren't tracked for (Entity entity : cuboid.getEntities()) { if (entity instanceof Player) continue; - // Skip hologram armor stands - if (isHologramArmorStand(entity)) continue; + // Skip hologram text displays + if (isHologramTextDisplay(entity)) continue; if (entity.isValid()) { entity.remove(); } @@ -318,11 +318,11 @@ private void removeAllEntities() { } /** - * Checks if an entity is a hologram armor stand. - * Delegates to ArmorStandFactory for consistent detection. + * Checks if an entity is a hologram text display. + * Delegates to TextDisplayFactory for consistent detection. */ - private boolean isHologramArmorStand(Entity entity) { - return dev.nandi0813.practice.manager.leaderboard.hologram.ArmorStandFactory.isHologramArmorStand(entity); + private boolean isHologramTextDisplay(Entity entity) { + return dev.nandi0813.practice.manager.leaderboard.hologram.TextDisplayFactory.isHologramTextDisplay(entity); } /** From 3df8454275095ef974cb2ddeada157d924751c87 Mon Sep 17 00:00:00 2001 From: Nandor Dukat Date: Tue, 17 Mar 2026 06:59:05 +0100 Subject: [PATCH 19/38] merged all rollback related setting into BuildListener.java --- .../dev/nandi0813/practice/ZonePractice.java | 2 - .../manager/fight/ffa/FFAListener.java | 14 +- .../fight/listener/BuildBlockListener.java | 119 ---------------- .../manager/fight/listener/BuildListener.java | 129 ++++++++++++------ .../fight/listener/EPCountdownListener.java | 1 - .../match/listener/LadderTypeListener.java | 4 +- .../manager/fight/util/FightUtil.java | 2 +- 7 files changed, 97 insertions(+), 174 deletions(-) delete mode 100644 core/src/main/java/dev/nandi0813/practice/manager/fight/listener/BuildBlockListener.java diff --git a/core/src/main/java/dev/nandi0813/practice/ZonePractice.java b/core/src/main/java/dev/nandi0813/practice/ZonePractice.java index 1ce04add..461684fa 100644 --- a/core/src/main/java/dev/nandi0813/practice/ZonePractice.java +++ b/core/src/main/java/dev/nandi0813/practice/ZonePractice.java @@ -32,7 +32,6 @@ import dev.nandi0813.practice.manager.fight.event.EventManager; import dev.nandi0813.practice.manager.fight.ffa.FFAListener; import dev.nandi0813.practice.manager.fight.ffa.FFAManager; -import dev.nandi0813.practice.manager.fight.listener.BuildBlockListener; import dev.nandi0813.practice.manager.fight.listener.BuildListener; import dev.nandi0813.practice.manager.fight.listener.EPCountdownListener; import dev.nandi0813.practice.manager.fight.listener.FireworkRocketCooldownListener; @@ -364,7 +363,6 @@ private void loadPlaceholderAPI() { * It registers all the events that are used in the plugin */ private void registerListeners(PluginManager pm) { - pm.registerEvents(new BuildBlockListener(), this); pm.registerEvents(new PlayerPreLogin(), this); pm.registerEvents(new PlayerJoin(), this); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/FFAListener.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/FFAListener.java index 5038b8fc..729bb69e 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/FFAListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/FFAListener.java @@ -42,9 +42,9 @@ * FFA-specific event listener. * *

    Block tracking / rollback events (break, place, piston, liquid, explosion, etc.) - * are handled by the unified {@link dev.nandi0813.practice.manager.fight.listener.BuildBlockListener}. + * are handled by the unified {@link dev.nandi0813.practice.manager.fight.listener.BuildListener}. * This listener only handles player-specific FFA game logic (damage, movement, crafting, etc.) - * and the build validation gates (cancel the event before MONITOR fires for BuildBlockListener).

    + * and the build validation gates (cancel the event before MONITOR fires for BuildListener).

    */ public class FFAListener implements Listener { @@ -186,7 +186,7 @@ protected static void arrowDisplayHearth(Player shooter, Player target, double f /** * Validates FFA build rules (build enabled, build limits). - * Actual block tracking is done by {@link dev.nandi0813.practice.manager.fight.listener.BuildBlockListener}. + * Actual block tracking is done by {@link dev.nandi0813.practice.manager.fight.listener.BuildListener}. */ @EventHandler public void onBlockBreak(BlockBreakEvent e) { @@ -202,7 +202,7 @@ public void onBlockBreak(BlockBreakEvent e) { Block block = e.getBlock(); - // Blocks placed during the fight — allow breaking (tracking done by BuildBlockListener) + // Blocks placed during the fight — allow breaking (tracking done by BuildListener) if (BlockUtil.hasMetadata(block, PLACED_IN_FIGHT)) { Object mv = BlockUtil.getMetadata(block, PLACED_IN_FIGHT, Object.class); if (ListenerUtil.checkMetaData(mv)) { @@ -241,7 +241,7 @@ public void onBlockBreak(BlockBreakEvent e) { /** * Validates FFA build rules (build enabled, arena boundary, build limits) and tags block. - * Actual tracking is done by {@link dev.nandi0813.practice.manager.fight.listener.BuildBlockListener}. + * Actual tracking is done by {@link dev.nandi0813.practice.manager.fight.listener.BuildListener}. */ @EventHandler public void onBlockPlace(BlockPlaceEvent e) { @@ -268,12 +268,12 @@ public void onBlockPlace(BlockPlaceEvent e) { Common.sendMMMessage(player, LanguageManager.getString("FFA.GAME.CANT-BUILD-OVER-LIMIT")); e.setCancelled(true); } - // Tagging and tracking handled by BuildBlockListener at MONITOR priority + // Tagging and tracking handled by BuildListener at MONITOR priority } /** * Validates FFA bucket rules and tags the target block. - * Actual tracking is done by {@link dev.nandi0813.practice.manager.fight.listener.BuildBlockListener}. + * Actual tracking is done by {@link dev.nandi0813.practice.manager.fight.listener.BuildListener}. */ @EventHandler public void onBucketEmpty(PlayerBucketEmptyEvent e) { diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/listener/BuildBlockListener.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/listener/BuildBlockListener.java deleted file mode 100644 index e6df9bb6..00000000 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/listener/BuildBlockListener.java +++ /dev/null @@ -1,119 +0,0 @@ -package dev.nandi0813.practice.manager.fight.listener; - -import dev.nandi0813.practice.manager.arena.util.ArenaUtil; -import dev.nandi0813.practice.manager.fight.match.Match; -import dev.nandi0813.practice.manager.fight.util.BlockUtil; -import dev.nandi0813.practice.manager.fight.util.ChangedBlock; -import dev.nandi0813.practice.manager.fight.util.FightUtil; -import dev.nandi0813.practice.manager.fight.util.ListenerUtil; -import dev.nandi0813.practice.util.interfaces.Spectatable; -import org.bukkit.block.Block; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.block.BlockBreakEvent; -import org.bukkit.event.block.BlockPlaceEvent; - -import static dev.nandi0813.practice.util.PermanentConfig.PLACED_IN_FIGHT; - -/** - * Unified MONITOR-priority listener that tags and tracks player-initiated block changes - * (break and place) for all build-enabled {@link Spectatable} contexts. - *

    - * Works for both {@link dev.nandi0813.practice.manager.fight.match.Match} and - * {@link dev.nandi0813.practice.manager.fight.ffa.game.FFA} — and any future type that - * implements {@link Spectatable} and is returned by - * {@link FightUtil#getActiveBuildSpectatables()}. - *

    - * All world-driven block events (pistons, liquid flow, form, spread, explosions, TNT, - * falling blocks) are handled by {@link BuildListener}. - */ -public class BuildBlockListener implements Listener { - - // ========== HELPERS ========== - - /** - * Finds the active build-enabled Spectatable whose cuboid contains the given block. - */ - private static Spectatable getByBlock(Block block) { - for (Spectatable s : FightUtil.getActiveBuildSpectatables()) { - if (s.getCuboid() != null && s.getCuboid().contains(block.getLocation())) { - return s; - } - } - return null; - } - - /** Track the block under a placed block if it will turn to dirt (grass → dirt). */ - private static void trackUnderBlockIfDirt(Block block, Spectatable spectatable) { - Block under = block.getLocation().subtract(0, 1, 0).getBlock(); - if (ArenaUtil.turnsToDirt(under)) { - spectatable.getFightChange().addArenaBlockChange(new ChangedBlock(under)); - } - } - - // ========== BLOCK BREAK ========== - - /** - * When a player breaks a block that was placed during the fight, track it for rollback. - * Runs at MONITOR so the validation listeners (FFAListener / LadderTypeListener) have - * already cancelled invalid breaks. Uses metadata to find the owning Spectatable — works - * for both Match and FFA without any type-specific branching. - *

    - * Also handles destroyable blocks (beds, nexuses, etc.) that are natural arena blocks: - * these are detected by {@code containsDestroyableBlock} and processed via - * {@link BlockUtil#breakBlock} to trigger the game-mode-specific logic. - */ - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onBlockBreak(BlockBreakEvent e) { - Block block = e.getBlock(); - - // Case 1: block was placed during the fight — track it for rollback - if (BlockUtil.hasMetadata(block, PLACED_IN_FIGHT)) { - Spectatable spectatable = BlockUtil.getMetadata(block, PLACED_IN_FIGHT, Spectatable.class); - if (ListenerUtil.checkMetaData(spectatable)) return; - if (!spectatable.isBuild()) return; - - spectatable.addBlockChange(new ChangedBlock(block)); - return; - } - - // Case 2: natural arena block — check if it is a destroyable block (bed, nexus, etc.) - Spectatable spectatable = getByBlock(block); - if (spectatable == null || !spectatable.isBuild()) return; - - var ladder = (spectatable instanceof Match match) ? match.getLadder() : null; - if (ArenaUtil.containsDestroyableBlock(ladder, block)) { - BlockUtil.breakBlock(spectatable, block); - e.setCancelled(true); - } - } - - // ========== BLOCK PLACE ========== - - /** - * Tags a placed block with PLACED_IN_FIGHT metadata and tracks it for rollback. - * Runs at MONITOR so validation listeners have already cancelled invalid placements. - * Finds the owning Spectatable from cuboid lookup if not already tagged. - */ - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onBlockPlace(BlockPlaceEvent e) { - Block block = e.getBlockPlaced(); - - Spectatable spectatable; - if (BlockUtil.hasMetadata(block, PLACED_IN_FIGHT)) { - Spectatable s = BlockUtil.getMetadata(block, PLACED_IN_FIGHT, Spectatable.class); - if (ListenerUtil.checkMetaData(s)) return; - spectatable = s; - } else { - spectatable = getByBlock(block); - if (spectatable == null || !spectatable.isBuild()) return; - BlockUtil.setMetadata(block, PLACED_IN_FIGHT, spectatable); - } - - spectatable.addBlockChange(new ChangedBlock(e)); - trackUnderBlockIfDirt(block, spectatable); - } - - -} diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/listener/BuildListener.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/listener/BuildListener.java index 1a708f06..3766dd25 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/listener/BuildListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/listener/BuildListener.java @@ -8,6 +8,7 @@ import dev.nandi0813.practice.manager.fight.util.BlockUtil; import dev.nandi0813.practice.manager.fight.util.ChangedBlock; import dev.nandi0813.practice.manager.fight.util.FightUtil; +import dev.nandi0813.practice.manager.fight.util.ListenerUtil; import dev.nandi0813.practice.manager.ladder.abstraction.Ladder; import dev.nandi0813.practice.manager.ladder.abstraction.interfaces.LadderHandle; import dev.nandi0813.practice.util.interfaces.Spectatable; @@ -81,6 +82,14 @@ protected static Spectatable getByBlock(Block block) { return getByLocation(block.getLocation()); } + /** Track the block under a placed block if it will naturally turn to dirt (grass -> dirt). */ + private static void trackUnderBlockIfDirt(Block block, Spectatable spectatable) { + Block under = block.getRelative(0, -1, 0); + if (ArenaUtil.turnsToDirt(under)) { + spectatable.getFightChange().addArenaBlockChange(new ChangedBlock(under)); + } + } + /** * Tags {@code block} with {@code PLACED_IN_FIGHT} metadata pointing to * {@code spectatable} and records it for rollback. @@ -98,6 +107,82 @@ protected static Ladder ladderOf(Spectatable spectatable) { return (spectatable instanceof Match) ? ((Match) spectatable).getLadder() : null; } + /** + * Applies explosion block filtering rules and tracks all surviving changed blocks for rollback. + */ + private static void filterAndTrackExplosionBlocks(List blockList, Spectatable spectatable) { + final Ladder l = ladderOf(spectatable); + final boolean breakAll = spectatable.isBreakAllBlocks(); + + blockList.removeIf(block -> { + if (block.getType().equals(Material.TNT)) return false; // keep -> chain-explodes + if (ArenaUtil.containsDestroyableBlock(l, block)) return false; // keep -> destroyable + if (BlockUtil.hasMetadata(block, PLACED_IN_FIGHT)) return false; // keep -> player placed + if (breakAll) return false; // keep -> break-all-blocks active + if (BlockUtil.hasMetadata(block.getRelative(0, 1, 0), PLACED_IN_FIGHT)) return true; // remove -> support block protected + return true; // remove -> pure arena block + }); + + for (Block block : blockList) { + if (block.getType() == Material.TNT || block.getType() == Material.AIR) continue; + if (BlockUtil.hasMetadata(block, PLACED_IN_FIGHT)) { + spectatable.addBlockChange(new ChangedBlock(block)); + } else { + // Natural arena block -> use addArenaBlockChange so no PLACED_IN_FIGHT metadata is set. + spectatable.getFightChange().addArenaBlockChange(new ChangedBlock(block)); + } + trackDependentBlocksAbove(block, spectatable); + } + } + + // ========================================================================= + // PLAYER-DRIVEN BLOCK EVENTS (merged from BuildBlockListener) + // ========================================================================= + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onBlockBreak(BlockBreakEvent e) { + Block block = e.getBlock(); + + // Case 1: block was placed during the fight -> track it for rollback. + if (BlockUtil.hasMetadata(block, PLACED_IN_FIGHT)) { + Spectatable spectatable = BlockUtil.getMetadata(block, PLACED_IN_FIGHT, Spectatable.class); + if (ListenerUtil.checkMetaData(spectatable)) return; + if (!spectatable.isBuild()) return; + + spectatable.addBlockChange(new ChangedBlock(block)); + return; + } + + // Case 2: natural arena block -> only allow configured destroyable blocks. + Spectatable spectatable = getByBlock(block); + if (spectatable == null || !spectatable.isBuild()) return; + + var ladder = (spectatable instanceof Match match) ? match.getLadder() : null; + if (ArenaUtil.containsDestroyableBlock(ladder, block)) { + BlockUtil.breakBlock(spectatable, block); + e.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onBlockPlace(BlockPlaceEvent e) { + Block block = e.getBlockPlaced(); + + Spectatable spectatable; + if (BlockUtil.hasMetadata(block, PLACED_IN_FIGHT)) { + Spectatable s = BlockUtil.getMetadata(block, PLACED_IN_FIGHT, Spectatable.class); + if (ListenerUtil.checkMetaData(s)) return; + spectatable = s; + } else { + spectatable = getByBlock(block); + if (spectatable == null || !spectatable.isBuild()) return; + BlockUtil.setMetadata(block, PLACED_IN_FIGHT, spectatable); + } + + spectatable.addBlockChange(new ChangedBlock(e)); + trackUnderBlockIfDirt(block, spectatable); + } + // ========================================================================= // EXPLOSIONS // ========================================================================= @@ -146,29 +231,7 @@ protected void handleExplosion(org.bukkit.event.Event event, List blockLi } } - final Ladder l = ladderOf(spectatable); - final boolean breakAll = spectatable.isBreakAllBlocks(); - - blockList.removeIf(block -> { - if (block.getType().equals(Material.TNT)) return false; // keep → chain-explodes - if (ArenaUtil.containsDestroyableBlock(l, block)) return false; // keep → destroyable - if (BlockUtil.hasMetadata(block, PLACED_IN_FIGHT)) return false; // keep → player placed - if (breakAll) return false; // keep → break-all-blocks active - if (BlockUtil.hasMetadata(block.getRelative(0, 1, 0), PLACED_IN_FIGHT)) return true; // remove → support block protected - return true; // remove → pure arena block - }); - - for (Block block : blockList) { - if (block.getType() == Material.TNT || block.getType() == Material.AIR) continue; - if (BlockUtil.hasMetadata(block, PLACED_IN_FIGHT)) { - spectatable.addBlockChange(new ChangedBlock(block)); - } else { - // Natural arena block — use addArenaBlockChange so no PLACED_IN_FIGHT - // metadata is set (players can't break it manually) but it is restored. - spectatable.getFightChange().addArenaBlockChange(new ChangedBlock(block)); - } - trackDependentBlocksAbove(block, spectatable); - } + filterAndTrackExplosionBlocks(blockList, spectatable); } @EventHandler @@ -188,25 +251,7 @@ public void onEntityExplode(EntityExplodeEvent e) { return; } } - final Ladder l = ladderOf(spectatable); - final boolean breakAll = spectatable.isBreakAllBlocks(); - e.blockList().removeIf(block -> { - if (block.getType().equals(Material.TNT)) return false; - if (ArenaUtil.containsDestroyableBlock(l, block)) return false; - if (BlockUtil.hasMetadata(block, PLACED_IN_FIGHT)) return false; - if (breakAll) return false; - if (BlockUtil.hasMetadata(block.getRelative(0, 1, 0), PLACED_IN_FIGHT)) return true; - return true; - }); - for (Block block : e.blockList()) { - if (block.getType() == Material.TNT || block.getType() == Material.AIR) continue; - if (BlockUtil.hasMetadata(block, PLACED_IN_FIGHT)) { - spectatable.addBlockChange(new ChangedBlock(block)); - } else { - spectatable.getFightChange().addArenaBlockChange(new ChangedBlock(block)); - } - trackDependentBlocksAbove(block, spectatable); - } + filterAndTrackExplosionBlocks(e.blockList(), spectatable); return; } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/listener/EPCountdownListener.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/listener/EPCountdownListener.java index 057b2ad9..7708470b 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/listener/EPCountdownListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/listener/EPCountdownListener.java @@ -76,7 +76,6 @@ public void onProjectileShoot(ProjectileLaunchEvent e) { } ModernItemCooldownHandler.handleEnderPearl(player, duration, e); - return; } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/listener/LadderTypeListener.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/listener/LadderTypeListener.java index 16f8b870..3570058b 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/listener/LadderTypeListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/listener/LadderTypeListener.java @@ -233,7 +233,7 @@ public void onBlockBreak(BlockBreakEvent e) { Block block = e.getBlock(); - // Blocks placed during the fight — allow breaking (tracking done by BuildBlockListener) + // Blocks placed during the fight — allow breaking (tracking done by BuildListener) if (BlockUtil.hasMetadata(block, PLACED_IN_FIGHT)) { Object mv = BlockUtil.getMetadata(block, PLACED_IN_FIGHT, Object.class); if (ListenerUtil.checkMetaData(mv)) { @@ -294,7 +294,7 @@ public void onBlockPlace(BlockPlaceEvent e) { } delegateToLadderHandle(e, match); - // Tagging and tracking handled by BuildBlockListener at MONITOR priority + // Tagging and tracking handled by BuildListener at MONITOR priority } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/util/FightUtil.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/util/FightUtil.java index 5471f2ac..03173cb1 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/util/FightUtil.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/util/FightUtil.java @@ -43,7 +43,7 @@ public static List getSpectatables() { /** * Returns only the active Spectatables that have build mechanics enabled. - * Used by {@link dev.nandi0813.practice.manager.fight.listener.BuildBlockListener} + * Used by {@link dev.nandi0813.practice.manager.fight.listener.BuildListener} * to quickly find the owner of a block change without iterating all contexts. */ public static List getActiveBuildSpectatables() { From b1c14ddc09da9ecbc0ff22e549374dfdc1c4e048 Mon Sep 17 00:00:00 2001 From: Nandor Dukat Date: Tue, 17 Mar 2026 07:23:32 +0100 Subject: [PATCH 20/38] disabled flower pot integration --- .../practice/listener/PlayerInteract.java | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/dev/nandi0813/practice/listener/PlayerInteract.java b/core/src/main/java/dev/nandi0813/practice/listener/PlayerInteract.java index 9fd5616b..42f03406 100644 --- a/core/src/main/java/dev/nandi0813/practice/listener/PlayerInteract.java +++ b/core/src/main/java/dev/nandi0813/practice/listener/PlayerInteract.java @@ -3,6 +3,7 @@ import dev.nandi0813.practice.manager.profile.Profile; import dev.nandi0813.practice.manager.profile.ProfileManager; import dev.nandi0813.practice.manager.profile.enums.ProfileStatus; +import io.papermc.paper.event.player.PlayerFlowerPotManipulateEvent; import org.bukkit.Material; import org.bukkit.attribute.Attribute; import org.bukkit.block.Block; @@ -12,13 +13,35 @@ import org.bukkit.event.block.Action; import org.bukkit.event.player.PlayerBedEnterEvent; import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerTeleportEvent; import org.bukkit.inventory.ItemStack; import java.util.Objects; public class PlayerInteract implements Listener { + @EventHandler + public void onFlowerPotManipulate(PlayerFlowerPotManipulateEvent e) { + // Only block taking flowers out of pots; placing flowers remains unchanged. + if (e.isPlacing()) { + return; + } + + Profile profile = ProfileManager.getInstance().getProfile(e.getPlayer()); + if (profile == null) { + return; + } + + switch (profile.getStatus()) { + case MATCH: + case FFA: + case EVENT: + e.setCancelled(true); + break; + default: + break; + } + } + @EventHandler public void onSoup(PlayerInteractEvent e) { Player player = e.getPlayer(); From 7ce7d1800e8c00d811443d2954a7094a9347f155 Mon Sep 17 00:00:00 2001 From: Nandor Dukat Date: Tue, 17 Mar 2026 07:23:51 +0100 Subject: [PATCH 21/38] fixed blockplaceevent to search by player not cuboid for rollback --- .../manager/fight/event/interfaces/Event.java | 5 +++ .../practice/manager/fight/ffa/game/FFA.java | 5 +++ .../manager/fight/listener/BuildListener.java | 42 +++++++++++++------ .../practice/manager/fight/match/Match.java | 5 +++ .../practice/util/interfaces/Spectatable.java | 2 + 5 files changed, 47 insertions(+), 12 deletions(-) diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/interfaces/Event.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/interfaces/Event.java index 44494cc7..c9e08148 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/interfaces/Event.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/interfaces/Event.java @@ -304,6 +304,11 @@ public void sendMessage(final String message, final boolean spectator) { Common.sendMMMessage(player, message); } + @Override + public List getActivePlayerList() { + return this.players; + } + public abstract StartRunnable getStartRunnable(); public abstract DurationRunnable getDurationRunnable(); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/game/FFA.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/game/FFA.java index 29116e35..e077bdaf 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/game/FFA.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/game/FFA.java @@ -350,6 +350,11 @@ public GUIItem getSpectatorMenuItem() { .replace("%build_status%", arena.isBuild() ? BUILD_ON : BUILD_OFF); } + @Override + public List getActivePlayerList() { + return new ArrayList<>(players.keySet()); + } + @Override public boolean canDisplay() { return this.open; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/listener/BuildListener.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/listener/BuildListener.java index 3766dd25..8ae0ae03 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/listener/BuildListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/listener/BuildListener.java @@ -12,12 +12,15 @@ import dev.nandi0813.practice.manager.ladder.abstraction.Ladder; import dev.nandi0813.practice.manager.ladder.abstraction.interfaces.LadderHandle; import dev.nandi0813.practice.util.interfaces.Spectatable; +import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.entity.Creeper; import org.bukkit.entity.FallingBlock; +import org.bukkit.entity.Player; import org.bukkit.entity.TNTPrimed; +import org.bukkit.event.Event; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; @@ -82,6 +85,12 @@ protected static Spectatable getByBlock(Block block) { return getByLocation(block.getLocation()); } + protected static Spectatable getByPlayer(Player player) { + return FightUtil.getActiveBuildSpectatables().stream() + .filter(s -> s.getActivePlayerList().contains(player)) + .findFirst().orElse(null); + } + /** Track the block under a placed block if it will naturally turn to dirt (grass -> dirt). */ private static void trackUnderBlockIfDirt(Block block, Spectatable spectatable) { Block under = block.getRelative(0, -1, 0); @@ -165,21 +174,30 @@ public void onBlockBreak(BlockBreakEvent e) { } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onBlockPlace(BlockPlaceEvent e) { - Block block = e.getBlockPlaced(); + public void onBlockPlace(BlockPlaceEvent event) { + Block block = event.getBlockPlaced(); + Spectatable spectatable = null; + boolean needsMetadata = false; - Spectatable spectatable; if (BlockUtil.hasMetadata(block, PLACED_IN_FIGHT)) { - Spectatable s = BlockUtil.getMetadata(block, PLACED_IN_FIGHT, Spectatable.class); - if (ListenerUtil.checkMetaData(s)) return; - spectatable = s; + spectatable = BlockUtil.getMetadata(block, PLACED_IN_FIGHT, Spectatable.class); + if (ListenerUtil.checkMetaData(spectatable)) { + return; + } } else { - spectatable = getByBlock(block); - if (spectatable == null || !spectatable.isBuild()) return; + spectatable = getByPlayer(event.getPlayer()); + needsMetadata = true; + } + + if (spectatable == null || !spectatable.isBuild()) { + return; + } + + if (needsMetadata) { BlockUtil.setMetadata(block, PLACED_IN_FIGHT, spectatable); } - spectatable.addBlockChange(new ChangedBlock(e)); + spectatable.addBlockChange(new ChangedBlock(event)); trackUnderBlockIfDirt(block, spectatable); } @@ -221,7 +239,7 @@ private static void trackDependentBlocksAbove(Block base, Spectatable spectatabl * that silently disappear when their support is destroyed. * */ - protected void handleExplosion(org.bukkit.event.Event event, List blockList, Spectatable spectatable) { + protected void handleExplosion(Event event, List blockList, Spectatable spectatable) { if (spectatable == null) return; if (spectatable instanceof Match match) { @@ -545,7 +563,7 @@ public void onBlockSpread(BlockSpreadEvent e) { final Spectatable finalSpectatable = spectatable; final Block newBlock = e.getNewState().getBlock(); - org.bukkit.Bukkit.getScheduler().runTask(ZonePractice.getInstance(), () -> { + Bukkit.getScheduler().runTask(ZonePractice.getInstance(), () -> { if (BlockUtil.hasMetadata(newBlock, PLACED_IN_FIGHT)) return; tagAndTrack(newBlock, finalSpectatable); }); @@ -627,7 +645,7 @@ public void onBlockBurn(BlockBurnEvent e) { // After the burn event, the burned block may be replaced with fire. // Schedule a 1-tick delayed check to track it if so. final Spectatable finalSpectatable = spectatable; - org.bukkit.Bukkit.getScheduler().runTask(ZonePractice.getInstance(), () -> { + Bukkit.getScheduler().runTask(ZonePractice.getInstance(), () -> { String typeName = block.getType().name(); if ((typeName.equals("FIRE") || typeName.equals("SOUL_FIRE")) && !BlockUtil.hasMetadata(block, PLACED_IN_FIGHT)) { tagAndTrack(block, finalSpectatable); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/Match.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/Match.java index c7323014..df73321e 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/Match.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/Match.java @@ -438,6 +438,11 @@ public void removeSpectator(Player player) { } } + @Override + public List getActivePlayerList() { + return this.players; + } + @Override public boolean isBuild() { return ladder.isBuild(); diff --git a/core/src/main/java/dev/nandi0813/practice/util/interfaces/Spectatable.java b/core/src/main/java/dev/nandi0813/practice/util/interfaces/Spectatable.java index 3e59727e..3387a0a6 100644 --- a/core/src/main/java/dev/nandi0813/practice/util/interfaces/Spectatable.java +++ b/core/src/main/java/dev/nandi0813/practice/util/interfaces/Spectatable.java @@ -13,6 +13,8 @@ public interface Spectatable { + List getActivePlayerList(); + List getSpectators(); void addSpectator(Player spectator, Player target, boolean teleport, boolean message); From 235d2ec72438e1e9cc57f656e4e57e840f70335e Mon Sep 17 00:00:00 2001 From: Nandor Dukat Date: Tue, 17 Mar 2026 07:26:00 +0100 Subject: [PATCH 22/38] changed LICENSE to 2026 --- LICENSE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index 3e5b0132..a33aadb5 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2025 ZonePractice contributors +Copyright (c) 2026 ZonePractice contributors Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal From 6b223debf1b1991c8adeda95325abe7184aaec93 Mon Sep 17 00:00:00 2001 From: Nandor Dukat Date: Tue, 17 Mar 2026 07:33:59 +0100 Subject: [PATCH 23/38] added kit change command to FFA to allow players to switch between kits in the FFA game --- .../practice/command/ffa/FFACommand.java | 4 ++++ .../command/ffa/arguments/KitArg.java | 24 +++++++++++++++++++ .../practice/manager/fight/ffa/game/FFA.java | 9 +++++++ .../fight/ffa/game/LadderSelector.java | 15 +++++++++++- core/src/main/resources/language.yml | 6 ++++- 5 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 core/src/main/java/dev/nandi0813/practice/command/ffa/arguments/KitArg.java diff --git a/core/src/main/java/dev/nandi0813/practice/command/ffa/FFACommand.java b/core/src/main/java/dev/nandi0813/practice/command/ffa/FFACommand.java index d6ad3037..91a4c7f5 100644 --- a/core/src/main/java/dev/nandi0813/practice/command/ffa/FFACommand.java +++ b/core/src/main/java/dev/nandi0813/practice/command/ffa/FFACommand.java @@ -35,6 +35,9 @@ public boolean onCommand(CommandSender sender, Command cmd, String label, String case "leave": LeaveArg.run(player); break; + case "kit": + KitArg.run(player); + break; case "spec": case "spectate": SpectateArg.run(player, label, args); @@ -73,6 +76,7 @@ public List onTabComplete(CommandSender sender, Command command, String if (args.length == 1) { arguments.add("join"); arguments.add("leave"); + arguments.add("kit"); arguments.add("list"); StringUtil.copyPartialMatches(args[0], arguments, completion); diff --git a/core/src/main/java/dev/nandi0813/practice/command/ffa/arguments/KitArg.java b/core/src/main/java/dev/nandi0813/practice/command/ffa/arguments/KitArg.java new file mode 100644 index 00000000..d5f7197b --- /dev/null +++ b/core/src/main/java/dev/nandi0813/practice/command/ffa/arguments/KitArg.java @@ -0,0 +1,24 @@ +package dev.nandi0813.practice.command.ffa.arguments; + +import dev.nandi0813.practice.manager.backend.LanguageManager; +import dev.nandi0813.practice.manager.fight.ffa.FFAManager; +import dev.nandi0813.practice.manager.fight.ffa.game.FFA; +import dev.nandi0813.practice.util.Common; +import org.bukkit.entity.Player; + +public enum KitArg { + ; + + public static void run(Player player) { + FFA ffa = FFAManager.getInstance().getFFAByPlayer(player); + if (ffa == null) { + Common.sendMMMessage(player, LanguageManager.getString("FFA.COMMAND.KIT.NOT-IN-FFA")); + return; + } + + ffa.getLadderSelectorGui().update(); + ffa.getLadderSelectorGui().open(player); + } + +} + diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/game/FFA.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/game/FFA.java index e077bdaf..50332bf0 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/game/FFA.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/game/FFA.java @@ -145,6 +145,15 @@ public void addPlayer(Player player, NormalLadder ladder) { SpectatorManager.getInstance().getSpectatorMenuGui().update(); } + public void changePlayerLadder(Player player, NormalLadder ladder) { + if (!players.containsKey(player) || ladder == null) + return; + + players.put(player, ladder); + PlayerUtil.setFightPlayer(player); + KitUtil.loadDefaultLadderKit(player, TeamEnum.FFA, ladder); + } + public void removePlayer(Player player) { if (!players.containsKey(player)) return; diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/game/LadderSelector.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/game/LadderSelector.java index 2efc232c..cdc8290a 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/game/LadderSelector.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/game/LadderSelector.java @@ -6,6 +6,7 @@ import dev.nandi0813.practice.manager.gui.GUI; import dev.nandi0813.practice.manager.gui.GUIItem; import dev.nandi0813.practice.manager.gui.GUIType; +import dev.nandi0813.practice.manager.ladder.abstraction.Ladder; import dev.nandi0813.practice.manager.ladder.abstraction.normal.NormalLadder; import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.InventoryUtil; @@ -102,7 +103,19 @@ public void handleClickEvent(InventoryClickEvent e) { return; } - ffa.addPlayer(player, ladder); + if (ffa.getPlayers().containsKey(player)) { + Ladder oldLadder = ffa.getPlayers().get(player); + if (oldLadder == ladder) { + Common.sendMMMessage(player, LanguageManager.getString("FFA.COMMAND.KIT.ALREADY-IN-KIT").replace("%ladder%", ladder.getDisplayName())); + return; + } + + ffa.changePlayerLadder(player, ladder); + } else { + ffa.addPlayer(player, ladder); + } + + player.closeInventory(); } } diff --git a/core/src/main/resources/language.yml b/core/src/main/resources/language.yml index 4c7fb27a..10112e3f 100644 --- a/core/src/main/resources/language.yml +++ b/core/src/main/resources/language.yml @@ -1,4 +1,4 @@ -VERSION: 19 +VERSION: 20 CONSOLE-NAME: "Console" CANT-USE-CONSOLE: "You can't use this command from the console." @@ -1594,12 +1594,16 @@ FFA: CANT-JOIN-FFA: "You can't spectate the FFA right now." LEAVE: NOT-IN-FFA: "You are not in a FFA." + KIT: + NOT-IN-FFA: "You are not in a FFA." + ALREADY-IN-KIT: "You are already in this kit." HELP: - "----------------------------------------" - "FFA Commands" - "" - " » /%label% join - Join a FFA." - " » /%label% leave - Leave a FFA." + - " » /%label% kit - Open FFA kit selector." - " » /%label% spectate - Spectate FFA." - " » /%label% list - List all available arenas." - "----------------------------------------" From 13ba09b1552d6f41d5f8c58798a63170007b6663 Mon Sep 17 00:00:00 2001 From: Nandor Dukat Date: Tue, 17 Mar 2026 07:43:00 +0100 Subject: [PATCH 24/38] added rematch request invalidation --- .../practice/listener/PlayerQuit.java | 9 +++ .../practice/manager/duel/DuelManager.java | 16 ++++- .../practice/manager/duel/DuelRequest.java | 12 ++++ .../manager/fight/match/MatchManager.java | 17 ++++++ .../fight/match/util/RematchRequest.java | 59 +++++++++++++------ .../inventory/inventories/LobbyInventory.java | 25 +++++++- .../practice/manager/profile/Profile.java | 17 ++++++ 7 files changed, 133 insertions(+), 22 deletions(-) diff --git a/core/src/main/java/dev/nandi0813/practice/listener/PlayerQuit.java b/core/src/main/java/dev/nandi0813/practice/listener/PlayerQuit.java index 88bd2215..8e093e62 100644 --- a/core/src/main/java/dev/nandi0813/practice/listener/PlayerQuit.java +++ b/core/src/main/java/dev/nandi0813/practice/listener/PlayerQuit.java @@ -1,6 +1,7 @@ package dev.nandi0813.practice.listener; import dev.nandi0813.practice.ZonePractice; +import dev.nandi0813.practice.manager.fight.match.MatchManager; import dev.nandi0813.practice.manager.party.Party; import dev.nandi0813.practice.manager.party.PartyManager; import dev.nandi0813.practice.manager.profile.Profile; @@ -11,6 +12,7 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerKickEvent; import org.bukkit.event.player.PlayerQuitEvent; public class PlayerQuit implements Listener { @@ -25,6 +27,8 @@ public void onPlayerQuit(PlayerQuitEvent e) { if (party != null) party.removeMember(player, false); + MatchManager.getInstance().invalidateRematchByPlayer(player); + if (profile != null) { profile.setLastJoin(System.currentTimeMillis()); @@ -39,4 +43,9 @@ public void onPlayerQuit(PlayerQuitEvent e) { } } + @EventHandler(priority = EventPriority.LOWEST) + public void onPlayerKick(PlayerKickEvent e) { + MatchManager.getInstance().invalidateRematchByPlayer(e.getPlayer()); + } + } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/duel/DuelManager.java b/core/src/main/java/dev/nandi0813/practice/manager/duel/DuelManager.java index a5a45287..bb7cf56c 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/duel/DuelManager.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/duel/DuelManager.java @@ -58,9 +58,21 @@ public void sendRequest(DuelRequest request) { new BukkitRunnable() { @Override public void run() { - getRequests().get(target).remove(request); + List targetRequests = getRequests().get(target); + if (targetRequests == null) { + return; + } + + boolean removed = targetRequests.remove(request); + if (targetRequests.isEmpty()) { + getRequests().remove(target); + } + + if (removed) { + request.handleExpiry(); + } } - }.runTaskLaterAsynchronously(ZonePractice.getInstance(), 20L * ConfigManager.getInt("MATCH-SETTINGS.DUEL.INVITATION-EXPIRY")); + }.runTaskLater(ZonePractice.getInstance(), 20L * ConfigManager.getInt("MATCH-SETTINGS.DUEL.INVITATION-EXPIRY")); } } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/duel/DuelRequest.java b/core/src/main/java/dev/nandi0813/practice/manager/duel/DuelRequest.java index b03b4aff..020dfda3 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/duel/DuelRequest.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/duel/DuelRequest.java @@ -22,13 +22,19 @@ public class DuelRequest { private Ladder ladder; private Arena arena; private int rounds; + private final Runnable expireHandler; public DuelRequest(Player sender, Player target, Ladder ladder, Arena arena, int rounds) { + this(sender, target, ladder, arena, rounds, null); + } + + public DuelRequest(Player sender, Player target, Ladder ladder, Arena arena, int rounds, Runnable expireHandler) { this.sender = sender; this.target = target; this.ladder = ladder; this.arena = arena; this.rounds = rounds; + this.expireHandler = expireHandler; } public void sendRequest() { @@ -82,4 +88,10 @@ public void acceptRequest() { } } + public void handleExpiry() { + if (expireHandler != null) { + expireHandler.run(); + } + } + } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/MatchManager.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/MatchManager.java index ef318093..a1bff9ba 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/MatchManager.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/MatchManager.java @@ -160,4 +160,21 @@ public RematchRequest getRematchRequest(Player player) { return null; } + public void invalidateRematch(RematchRequest rematchRequest) { + if (rematchRequest == null) return; + + if (rematches.remove(rematchRequest)) { + rematchRequest.invalidate(); + } + } + + public void invalidateRematchByPlayer(Player player) { + if (player == null) return; + + RematchRequest rematchRequest = getRematchRequest(player); + if (rematchRequest != null) { + invalidateRematch(rematchRequest); + } + } + } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/util/RematchRequest.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/util/RematchRequest.java index 504f1925..f47f2f6a 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/match/util/RematchRequest.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/match/util/RematchRequest.java @@ -14,11 +14,9 @@ import dev.nandi0813.practice.manager.profile.Profile; import dev.nandi0813.practice.manager.profile.ProfileManager; import dev.nandi0813.practice.manager.profile.enums.ProfileStatus; -import dev.nandi0813.practice.manager.server.ServerManager; import dev.nandi0813.practice.util.Common; import lombok.Getter; import org.bukkit.Bukkit; -import org.bukkit.Location; import org.bukkit.entity.Player; import java.util.ArrayList; @@ -33,6 +31,7 @@ public class RematchRequest { private final int rounds; private boolean isRequested = false; + private boolean invalidated = false; public RematchRequest(Match match) { this.players.addAll(match.getPlayers()); @@ -44,9 +43,15 @@ public RematchRequest(Match match) { } public void sendRematchRequest(Player sender) { + if (invalidated) { + return; + } + Player target = getOtherPlayer(sender); - if (!target.isOnline()) { - Common.sendMMMessage(sender, LanguageManager.getString("MATCH.REMATCH-REQUEST.TARGET-OFFLINE").replace("%target%", target.getName())); + if (target == null || !target.isOnline()) { + String targetName = target != null ? target.getName() : "Unknown"; + Common.sendMMMessage(sender, LanguageManager.getString("MATCH.REMATCH-REQUEST.TARGET-OFFLINE").replace("%target%", targetName)); + MatchManager.getInstance().invalidateRematch(this); return; } @@ -63,7 +68,8 @@ public void sendRematchRequest(Player sender) { return; } - DuelRequest request = new DuelRequest(sender, target, ladder, null, rounds); + DuelRequest request = new DuelRequest(sender, target, ladder, null, rounds, + () -> MatchManager.getInstance().invalidateRematch(this)); DuelManager.getInstance().sendRequest(request); isRequested = true; @@ -81,8 +87,12 @@ public Player getOtherPlayer(Player player) { public void setInventories() { Bukkit.getScheduler().runTaskLater(ZonePractice.getInstance(), () -> { + if (invalidated) { + return; + } + for (Player player : this.players) { - if (!player.isOnline()) return; + if (!player.isOnline()) continue; Inventory inventory = InventoryManager.getInstance().getPlayerInventory(player); if (inventory instanceof LobbyInventory lobbyInventory) { @@ -95,23 +105,34 @@ public void setInventories() { public void startRunnable() { Bukkit.getScheduler().runTaskLater(ZonePractice.getInstance(), () -> { - MatchManager.getInstance().getRematches().remove(this); + MatchManager.getInstance().invalidateRematch(this); + }, + ConfigManager.getInt("MATCH-SETTINGS.REMATCH.EXPIRE-TIME") * 20L); + } - for (Player player : players) { - if (!player.isOnline()) return; + public synchronized void invalidate() { + if (invalidated) { + return; + } - Profile profile = ProfileManager.getInstance().getProfile(player); - if (!profile.getStatus().equals(ProfileStatus.LOBBY)) return; + invalidated = true; - Location lobby = ServerManager.getLobby(); - if (lobby != null && lobby.getWorld() != null && !player.getLocation().getWorld().equals(lobby.getWorld())) { - return; - } + for (Player player : players) { + if (!player.isOnline()) { + continue; + } - InventoryManager.getInstance().setLobbyInventory(player, false); - } - }, - ConfigManager.getInt("MATCH-SETTINGS.REMATCH.EXPIRE-TIME") * 20L); + Profile profile = ProfileManager.getInstance().getProfile(player); + if (profile == null) { + continue; + } + + Inventory inventory = InventoryManager.getInstance().getPlayerInventory(player); + if (inventory instanceof LobbyInventory lobbyInventory + && (profile.getStatus().equals(ProfileStatus.LOBBY) || profile.getStatus().equals(ProfileStatus.SPECTATE))) { + lobbyInventory.removeRematchItem(player); + } + } } } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/inventory/inventories/LobbyInventory.java b/core/src/main/java/dev/nandi0813/practice/manager/inventory/inventories/LobbyInventory.java index 62428b58..16b214ab 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/inventory/inventories/LobbyInventory.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/inventory/inventories/LobbyInventory.java @@ -4,7 +4,9 @@ import dev.nandi0813.practice.manager.inventory.InventoryManager; import dev.nandi0813.practice.manager.inventory.inventoryitem.InvItem; import dev.nandi0813.practice.manager.inventory.inventoryitem.lobbyitems.*; +import org.bukkit.Material; import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.PlayerInventory; public class LobbyInventory extends Inventory { @@ -63,10 +65,31 @@ protected void set(Player player) { } public void addRematchItem(Player player) { - InvItem invItem = this.getInvItem(); + InvItem invItem = getRematchInvItem(); if (invItem == null) return; player.getInventory().setItem(invItem.getSlot(), invItem.getItem()); } + public void removeRematchItem(Player player) { + InvItem invItem = getRematchInvItem(); + if (invItem == null) return; + + int slot = invItem.getSlot(); + if (slot < 0) return; + + ItemStack current = player.getInventory().getItem(slot); + if (current == null || current.getType() == Material.AIR) return; + + // Only clear the slot if the current item is still the rematch item. + if (current.isSimilar(invItem.getItem())) { + player.getInventory().setItem(slot, null); + player.updateInventory(); + } + } + + private InvItem getRematchInvItem() { + return this.getInvItem(); + } + } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/profile/Profile.java b/core/src/main/java/dev/nandi0813/practice/manager/profile/Profile.java index ac7b1810..1613367e 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/profile/Profile.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/profile/Profile.java @@ -1,5 +1,6 @@ package dev.nandi0813.practice.manager.profile; +import dev.nandi0813.practice.manager.fight.match.MatchManager; import dev.nandi0813.practice.manager.fight.match.util.CustomKit; import dev.nandi0813.practice.manager.gui.guis.customladder.PlayerCustomKitSelector; import dev.nandi0813.practice.manager.gui.guis.profile.ProfileSettingsGui; @@ -217,4 +218,20 @@ public void setSelectedCustomLadder(CustomLadder customLadder) { this.selectedCustomLadder = customLadder; } + public void setStatus(ProfileStatus status) { + ProfileStatus previous = this.status; + this.status = status; + + // Leaving lobby/spectate for a new activity invalidates pending rematches. + if ((previous == ProfileStatus.LOBBY || previous == ProfileStatus.SPECTATE) + && status != ProfileStatus.LOBBY + && status != ProfileStatus.SPECTATE + && status != ProfileStatus.OFFLINE) { + Player online = player.getPlayer(); + if (online != null && online.isOnline()) { + MatchManager.getInstance().invalidateRematchByPlayer(online); + } + } + } + } From 7d7a21ac52f50c900300e5f63d139e1b2b90b30d Mon Sep 17 00:00:00 2001 From: Nandor Dukat Date: Tue, 17 Mar 2026 08:13:37 +0100 Subject: [PATCH 25/38] implemented multi block support for splegg event --- .../event/events/ffa/splegg/SpleggData.java | 27 ++++++++++++++++ .../events/ffa/splegg/SpleggListener.java | 32 +++++++++++++++---- core/src/main/resources/config.yml | 4 ++- 3 files changed, 56 insertions(+), 7 deletions(-) diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/ffa/splegg/SpleggData.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/ffa/splegg/SpleggData.java index 4b3a937c..b73ffb5f 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/ffa/splegg/SpleggData.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/ffa/splegg/SpleggData.java @@ -8,11 +8,16 @@ import org.bukkit.inventory.ItemStack; import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Locale; @Getter public class SpleggData extends EventData { private ItemStack eggLauncher; + private List breakableMaterials = Collections.singletonList("WOOL"); public SpleggData() { super(EventType.SPLEGG); @@ -26,6 +31,28 @@ protected void setCustomData() { @Override protected void getCustomData() { this.eggLauncher = ConfigManager.getGuiItem("EVENT.SPLEGG.EGG-LAUNCHER-ITEM").get(); + + List configuredMaterials = ConfigManager.getConfig().getStringList("EVENT.SPLEGG.BREAKABLE-MATERIALS"); + if (configuredMaterials.isEmpty()) { + this.breakableMaterials = Collections.singletonList("WOOL"); + return; + } + + List normalizedMaterials = new ArrayList<>(); + for (String configuredMaterial : configuredMaterials) { + if (configuredMaterial == null) { + continue; + } + + String normalized = configuredMaterial.trim().toUpperCase(Locale.ROOT); + if (!normalized.isEmpty()) { + normalizedMaterials.add(normalized); + } + } + + this.breakableMaterials = normalizedMaterials.isEmpty() + ? Collections.singletonList("WOOL") + : normalizedMaterials; } @Override diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/ffa/splegg/SpleggListener.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/ffa/splegg/SpleggListener.java index add0787a..261fc171 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/ffa/splegg/SpleggListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/ffa/splegg/SpleggListener.java @@ -21,6 +21,8 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.util.BlockIterator; +import java.util.List; + public class SpleggListener extends FFAListener { @Override @@ -107,17 +109,35 @@ public void onPlayerEggThrow(Event event, PlayerEggThrowEvent e) { if (!event.getEventData().getCuboid().contains(hitBlock.getLocation())) return; Material hitBlockType = hitBlock.getType(); - String materialName = hitBlockType.name(); - // Check if block is wool - works for both 1.8.8 (WOOL) and modern versions (WHITE_WOOL, RED_WOOL, etc.) - if (materialName.equals("WOOL") || materialName.endsWith("_WOOL")) { - splegg.getFightChange().addBlockChange(new ChangedBlock(hitBlock)); + if (!isBreakableMaterial(hitBlockType, splegg.getEventData().getBreakableMaterials())) return; + + splegg.getFightChange().addBlockChange(new ChangedBlock(hitBlock)); + hitBlock.setBlockData(Material.AIR.createBlockData()); + splegg.getShotBlocks().replace(player, splegg.getShotBlocks().get(player) + 1); + } + } + + private boolean isBreakableMaterial(Material blockType, List allowedMaterials) { + String materialName = blockType.name(); - hitBlock.setBlockData(Material.AIR.createBlockData()); - splegg.getShotBlocks().replace(player, splegg.getShotBlocks().get(player) + 1); + for (String allowedMaterial : allowedMaterials) { + if (allowedMaterial == null || allowedMaterial.isEmpty()) { + continue; + } + + if (materialName.equals(allowedMaterial)) { + return true; + } + + if (materialName.contains("_") && materialName.endsWith("_" + allowedMaterial)) { + return true; } } + + return false; } + @Override public void onPlayerDropItem(Event event, PlayerDropItemEvent e) { if (event instanceof Splegg) { diff --git a/core/src/main/resources/config.yml b/core/src/main/resources/config.yml index 175ad310..69a1e9f8 100644 --- a/core/src/main/resources/config.yml +++ b/core/src/main/resources/config.yml @@ -1,4 +1,4 @@ -VERSION: 18 +VERSION: 19 # Mysql database setup. MYSQL-DATABASE: @@ -488,6 +488,8 @@ EVENT: NAME: "Splegg" WINNER-COMMAND: - "practice ranked add %player% 3" + BREAKABLE-MATERIALS: # Generic entries like WOOL or TERRACOTTA also match colored variants. + - "WOOL" EGG-LAUNCHER-ITEM: NAME: "&aShoot The Blocks &7(Right-Click)" MATERIAL: IRON_SHOVEL From 630780c6f5fc547418908047247d8992f953a126 Mon Sep 17 00:00:00 2001 From: Nandor Dukat Date: Tue, 17 Mar 2026 08:41:52 +0100 Subject: [PATCH 26/38] changed armor stand markers to mannequins --- .../arena/setup/ArenaSetupListener.java | 43 ++--- .../arena/setup/SpawnMarkerManager.java | 161 +++++++++--------- .../manager/arena/util/ArenaUtil.java | 33 ++-- .../fight/event/setup/EventSetupListener.java | 33 ++-- .../event/setup/EventSpawnMarkerManager.java | 117 +++++++------ .../leaderboard/hologram/Hologram.java | 2 - 6 files changed, 193 insertions(+), 196 deletions(-) diff --git a/core/src/main/java/dev/nandi0813/practice/manager/arena/setup/ArenaSetupListener.java b/core/src/main/java/dev/nandi0813/practice/manager/arena/setup/ArenaSetupListener.java index 7076f1ee..e957e2c1 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/arena/setup/ArenaSetupListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/arena/setup/ArenaSetupListener.java @@ -18,14 +18,17 @@ import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; -import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.Mannequin; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.block.Action; import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.bukkit.event.player.*; +import org.bukkit.event.player.PlayerDropItemEvent; +import org.bukkit.event.player.PlayerInteractAtEntityEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerQuitEvent; import java.util.ArrayList; import java.util.List; @@ -534,25 +537,15 @@ private static void cleanupAfterRegionChange(Player player, DisplayArena arena) updateGui(arena); } - // Prevent players from manipulating marker armor stands + // Handle right-clicking mannequin markers to remove them (FFA ONLY) @EventHandler ( priority = EventPriority.HIGHEST ) - public void onArmorStandManipulate(PlayerArmorStandManipulateEvent event) { - ArmorStand armorStand = event.getRightClicked(); - - if (SpawnMarkerManager.getInstance().isMarker(armorStand)) { - event.setCancelled(true); - } - } - - // Handle right-clicking armor stand markers to remove them (FFA ONLY) - @EventHandler ( priority = EventPriority.HIGHEST ) - public void onArmorStandInteract(PlayerInteractAtEntityEvent event) { - if (!(event.getRightClicked() instanceof ArmorStand armorStand)) return; + public void onMarkerInteract(PlayerInteractAtEntityEvent event) { + if (!(event.getRightClicked() instanceof Mannequin mannequin)) return; Player player = event.getPlayer(); // Check if this is a spawn marker - if (!SpawnMarkerManager.getInstance().isMarker(armorStand)) return; + if (!SpawnMarkerManager.getInstance().isMarker(mannequin)) return; event.setCancelled(true); @@ -563,7 +556,7 @@ public void onArmorStandInteract(PlayerInteractAtEntityEvent event) { } // Find which arena this marker belongs to - DisplayArena arena = SpawnMarkerManager.getInstance().getArenaForMarker(armorStand); + DisplayArena arena = SpawnMarkerManager.getInstance().getArenaForMarker(mannequin); if (arena == null) { player.sendMessage(Common.colorize("&cCould not find arena for this marker.")); return; @@ -571,7 +564,7 @@ public void onArmorStandInteract(PlayerInteractAtEntityEvent event) { // ONLY allow for FFA arenas if (!(arena instanceof FFAArena ffaArena)) { - player.sendMessage(Common.colorize("&cDirect armor stand removal only works for FFA arenas.")); + player.sendMessage(Common.colorize("&cDirect marker removal only works for FFA arenas.")); player.sendMessage(Common.colorize("&7Use left/right click on blocks to set standard arena spawn positions.")); return; } @@ -590,7 +583,7 @@ public void onArmorStandInteract(PlayerInteractAtEntityEvent event) { } // Remove the marker and its spawn position - boolean removed = SpawnMarkerManager.getInstance().removeMarker(armorStand, arena); + boolean removed = SpawnMarkerManager.getInstance().removeMarker(mannequin, arena); if (removed) { SpawnMarkerManager.getInstance().updateMarkers(arena); updateGui(arena); @@ -601,12 +594,12 @@ public void onArmorStandInteract(PlayerInteractAtEntityEvent event) { } } - // Prevent damage to marker armor stands AND handle left-click removal + // Prevent damage to marker mannequins AND handle left-click removal @EventHandler ( priority = EventPriority.HIGHEST ) - public void onArmorStandDamage(EntityDamageByEntityEvent event) { - if (!(event.getEntity() instanceof ArmorStand armorStand)) return; + public void onMarkerDamage(EntityDamageByEntityEvent event) { + if (!(event.getEntity() instanceof Mannequin mannequin)) return; - if (!SpawnMarkerManager.getInstance().isMarker(armorStand)) return; + if (!SpawnMarkerManager.getInstance().isMarker(mannequin)) return; // Cancel damage in all cases event.setCancelled(true); @@ -618,7 +611,7 @@ public void onArmorStandDamage(EntityDamageByEntityEvent event) { if (!setupManager.isSettingUp(player)) return; // Find which arena this marker belongs to - DisplayArena arena = SpawnMarkerManager.getInstance().getArenaForMarker(armorStand); + DisplayArena arena = SpawnMarkerManager.getInstance().getArenaForMarker(mannequin); if (arena == null) return; // ONLY allow left-click removal for FFA arenas @@ -631,7 +624,7 @@ public void onArmorStandDamage(EntityDamageByEntityEvent event) { // Check if in correct mode if (session.getCurrentMode() != SetupMode.FFA_POSITIONS) return; - // Left-click on armor stand = Remove last spawn (same as left-click on block) + // Left-click on mannequin marker = Remove last spawn (same as left-click on block) if (!ffaArena.getFfaPositions().isEmpty()) { int index = ffaArena.getFfaPositions().size() - 1; ffaArena.getFfaPositions().remove(index); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/arena/setup/SpawnMarkerManager.java b/core/src/main/java/dev/nandi0813/practice/manager/arena/setup/SpawnMarkerManager.java index 9f74d651..37a17192 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/arena/setup/SpawnMarkerManager.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/arena/setup/SpawnMarkerManager.java @@ -10,16 +10,16 @@ import net.kyori.adventure.text.Component; import org.bukkit.Location; import org.bukkit.Material; -import org.bukkit.entity.ArmorStand; import org.bukkit.entity.EntityType; +import org.bukkit.entity.Mannequin; import org.bukkit.inventory.ItemStack; -import org.bukkit.util.EulerAngle; +import org.jetbrains.annotations.NotNull; import java.util.*; /** - * Manages armor stand markers that show spawn positions in arena setup mode. - * Armor stands face the direction the player will spawn and hold a sword. + * Manages mannequin markers that show spawn positions in arena setup mode. + * Mannequins face the direction the player will spawn and hold a sword. */ @Getter public class SpawnMarkerManager { @@ -33,13 +33,13 @@ public static SpawnMarkerManager getInstance() { return instance; } - // Map: Arena -> List of marker armor stands - private final Map> arenaMarkers = new HashMap<>(); + // Map: Arena -> List of marker mannequins + private final Map> arenaMarkers = new HashMap<>(); - // Set of all marker armor stand UUIDs for quick lookup + // Set of all marker mannequin UUIDs for quick lookup private final Set markerStandIds = new HashSet<>(); - // Map: Main marker armor stand -> spawn index (for FFA arenas) + // Map: Main marker mannequin -> spawn index (for FFA arenas) private final Map markerToSpawnIndex = new HashMap<>(); private SpawnMarkerManager() { @@ -54,18 +54,18 @@ public void showMarkers(DisplayArena arena) { // Clear existing markers first clearMarkers(arena); - List markers = new ArrayList<>(); + List markers = new ArrayList<>(); if (arena instanceof Arena standardArena) { // Show position 1 if (standardArena.getPosition1() != null) { - ArmorStand marker = createMarker(standardArena.getPosition1(), "&c&lSpawn 1"); + Mannequin marker = createMarker(standardArena.getPosition1(), "&c&lSpawn 1"); if (marker != null) markers.add(marker); } // Show position 2 if (standardArena.getPosition2() != null) { - ArmorStand marker = createMarker(standardArena.getPosition2(), "&c&lSpawn 2"); + Mannequin marker = createMarker(standardArena.getPosition2(), "&c&lSpawn 2"); if (marker != null) markers.add(marker); } } else if (arena instanceof FFAArena ffaArena) { @@ -73,15 +73,15 @@ public void showMarkers(DisplayArena arena) { int index = 0; // Use 0-based index to match the list for (Location spawnLoc : ffaArena.getFfaPositions()) { // Create main marker with player model - ArmorStand marker = createMarker(spawnLoc, "&c&lFFA Spawn #" + (index + 1)); // Display as 1-based + Mannequin marker = createMarker(spawnLoc, "&c&lFFA Spawn #" + (index + 1)); // Display as 1-based if (marker != null) { markers.add(marker); // Track this main marker to its spawn index markerToSpawnIndex.put(marker.getUniqueId(), index); - // Create second armor stand above for instruction text (closer spacing) + // Create second mannequin above for instruction text (closer spacing) Location labelLoc = spawnLoc.clone().add(0, 2.3, 0); - ArmorStand labelStand = createLabelOnly(labelLoc, "&7(Right-click to remove)"); + Mannequin labelStand = createLabelOnly(labelLoc, "&7(Right-click to remove)"); if (labelStand != null) { markers.add(labelStand); } @@ -96,71 +96,72 @@ public void showMarkers(DisplayArena arena) { } /** - * Creates an armor stand marker at the specified location + * Creates a mannequin marker at the specified location */ - private ArmorStand createMarker(Location location, String name) { - if (location == null || location.getWorld() == null) return null; - - // Spawn armor stand at exact player spawn position + private Mannequin createMarker(@NotNull Location location, @NotNull String name) { + // Spawn mannequin at exact player spawn position Location markerLoc = location.clone(); - ArmorStand armorStand = (ArmorStand) markerLoc.getWorld().spawnEntity(markerLoc, EntityType.ARMOR_STAND); - - // Configure armor stand to look like a player - armorStand.setVisible(true); // Show body to represent player - armorStand.setGravity(false); - armorStand.setCanPickupItems(false); - armorStand.setCustomNameVisible(true); - armorStand.customName(Component.text(dev.nandi0813.practice.util.StringUtil.CC(name))); - armorStand.setMarker(false); // Don't use marker mode so it has full size - armorStand.setBasePlate(false); - armorStand.setArms(true); + Mannequin mannequin = (Mannequin) markerLoc.getWorld().spawnEntity(markerLoc, EntityType.MANNEQUIN); + + // Configure mannequin to look like a player marker while staying static. + mannequin.setInvisible(false); // Show body to represent player + mannequin.setGravity(false); + mannequin.setCanPickupItems(false); + mannequin.setCustomNameVisible(true); + mannequin.customName(Component.text(dev.nandi0813.practice.util.StringUtil.CC(name))); + mannequin.setAI(false); + mannequin.setCollidable(false); + mannequin.setSilent(true); + mannequin.setImmovable(true); // Make it invulnerable and prevent interaction - ArenaUtil.setArmorStandInvulnerable(armorStand); + ArenaUtil.setMannequinInvulnerable(mannequin); // Give diamond sword to right hand ItemStack sword = new ItemStack(Material.DIAMOND_SWORD); - ArenaUtil.setArmorStandItemInHand(armorStand, sword, true); - - // Set arm pose to hold sword naturally (slight angle) - armorStand.setRightArmPose(new EulerAngle(Math.toRadians(280), Math.toRadians(10), 0)); + ArenaUtil.setMannequinItemInHand(mannequin, sword, true); // Set player head (Steve head) for helmet ItemStack playerHead = new ItemStack(Material.PLAYER_HEAD); - armorStand.getEquipment().setHelmet(playerHead); + if (mannequin.getEquipment() != null) { + mannequin.getEquipment().setHelmet(playerHead); + } // Set red boots for visibility ItemStack boots = ItemCreateUtil.getRedBoots(); - armorStand.getEquipment().setBoots(boots); + if (mannequin.getEquipment() != null) { + mannequin.getEquipment().setBoots(boots); + } - // Track this armor stand - markerStandIds.add(armorStand.getUniqueId()); + // Track this mannequin + markerStandIds.add(mannequin.getUniqueId()); - return armorStand; + return mannequin; } /** - * Creates a small invisible armor stand just for displaying text label + * Creates a small invisible mannequin just for displaying text label */ - private ArmorStand createLabelOnly(Location location, String text) { + private Mannequin createLabelOnly(Location location, String text) { if (location == null || location.getWorld() == null) return null; - ArmorStand labelStand = (ArmorStand) location.getWorld().spawnEntity(location, EntityType.ARMOR_STAND); + Mannequin labelStand = (Mannequin) location.getWorld().spawnEntity(location, EntityType.MANNEQUIN); // Configure as invisible text-only display - labelStand.setVisible(false); // Invisible + labelStand.setInvisible(true); // Invisible labelStand.setGravity(false); labelStand.setCanPickupItems(false); labelStand.setCustomNameVisible(true); labelStand.customName(Component.text(dev.nandi0813.practice.util.StringUtil.CC(text))); - labelStand.setMarker(true); // Tiny marker mode - labelStand.setBasePlate(false); - labelStand.setSmall(true); // Make it small + labelStand.setAI(false); + labelStand.setCollidable(false); + labelStand.setSilent(true); + labelStand.setImmovable(true); // Make it invulnerable - ArenaUtil.setArmorStandInvulnerable(labelStand); + ArenaUtil.setMannequinInvulnerable(labelStand); - // Track this armor stand too + // Track this mannequin too markerStandIds.add(labelStand.getUniqueId()); return labelStand; @@ -172,15 +173,15 @@ private ArmorStand createLabelOnly(Location location, String text) { public void clearMarkers(DisplayArena arena) { if (arena == null) return; - List markers = arenaMarkers.remove(arena); + List markers = arenaMarkers.remove(arena); if (markers != null) { - for (ArmorStand marker : markers) { + for (Mannequin marker : markers) { if (marker != null) { // Always clean up tracking data markerStandIds.remove(marker.getUniqueId()); markerToSpawnIndex.remove(marker.getUniqueId()); // Clean up spawn index mapping - // Attempt to remove the armor stand if it's still valid + // Attempt to remove the mannequin if it's still valid if (marker.isValid()) { marker.remove(); } @@ -193,9 +194,9 @@ public void clearMarkers(DisplayArena arena) { * Clears all markers for all arenas */ public void clearAllMarkers() { - for (List markers : arenaMarkers.values()) { + for (List markers : arenaMarkers.values()) { if (markers != null) { - for (ArmorStand marker : markers) { + for (Mannequin marker : markers) { if (marker != null) { // Always clean up tracking data markerStandIds.remove(marker.getUniqueId()); @@ -258,20 +259,20 @@ public boolean hasMarkers(DisplayArena arena) { } /** - * Checks if an armor stand is a spawn marker + * Checks if a mannequin is a spawn marker */ - public boolean isMarker(ArmorStand armorStand) { - return armorStand != null && markerStandIds.contains(armorStand.getUniqueId()); + public boolean isMarker(Mannequin mannequin) { + return mannequin != null && markerStandIds.contains(mannequin.getUniqueId()); } /** - * Finds which arena a marker armor stand belongs to + * Finds which arena a marker mannequin belongs to */ - public DisplayArena getArenaForMarker(ArmorStand armorStand) { - if (armorStand == null) return null; + public DisplayArena getArenaForMarker(Mannequin mannequin) { + if (mannequin == null) return null; - for (Map.Entry> entry : arenaMarkers.entrySet()) { - if (entry.getValue().contains(armorStand)) { + for (Map.Entry> entry : arenaMarkers.entrySet()) { + if (entry.getValue().contains(mannequin)) { return entry.getKey(); } } @@ -279,15 +280,15 @@ public DisplayArena getArenaForMarker(ArmorStand armorStand) { } /** - * Removes a specific marker armor stand and its associated spawn position + * Removes a specific marker mannequin and its associated spawn position * * @return true if the marker was found and removed */ - public boolean removeMarker(ArmorStand armorStand, DisplayArena arena) { - if (armorStand == null || arena == null) return false; + public boolean removeMarker(Mannequin mannequin, DisplayArena arena) { + if (mannequin == null || arena == null) return false; - // Check if this armor stand is tracked with a spawn index (it's a main marker) - Integer spawnIndex = markerToSpawnIndex.get(armorStand.getUniqueId()); + // Check if this mannequin is tracked with a spawn index (it's a main marker) + Integer spawnIndex = markerToSpawnIndex.get(mannequin.getUniqueId()); if (spawnIndex == null) return false; // Not a main marker or not tracked // Remove from FFA arena @@ -298,23 +299,23 @@ public boolean removeMarker(ArmorStand armorStand, DisplayArena arena) { } // Clean up the mapping - markerStandIds.remove(armorStand.getUniqueId()); - markerToSpawnIndex.remove(armorStand.getUniqueId()); + markerStandIds.remove(mannequin.getUniqueId()); + markerToSpawnIndex.remove(mannequin.getUniqueId()); - // Remove the armor stand from tracking list - List markers = arenaMarkers.get(arena); + // Remove the mannequin from tracking list + List markers = arenaMarkers.get(arena); if (markers != null) { - markers.remove(armorStand); + markers.remove(mannequin); } - armorStand.remove(); + mannequin.remove(); return true; } /** - * Removes all orphaned marker armor stands from a world. - * This is useful for cleaning up armor stands that persisted after server restart + * Removes all orphaned marker mannequins from a world. + * This is useful for cleaning up mannequins that persisted after server restart * or were not properly removed due to timing issues. *

    * Orphaned markers are identified by: @@ -331,17 +332,17 @@ public int cleanupOrphanedMarkers(org.bukkit.World world) { int removed = 0; List toRemove = new ArrayList<>(); - // Find all armor stands in the world + // Find all mannequins in the world for (org.bukkit.entity.Entity entity : world.getEntities()) { - if (entity instanceof ArmorStand armorStand) { + if (entity instanceof Mannequin mannequin) { // Check if this looks like one of our markers but isn't tracked - String customName = armorStand.customName() == null ? null : Common.serializeComponentToLegacyString(armorStand.customName()); + String customName = mannequin.customName() == null ? null : Common.serializeComponentToLegacyString(mannequin.customName()); if (customName != null && - !markerStandIds.contains(armorStand.getUniqueId())) { + !markerStandIds.contains(mannequin.getUniqueId())) { // Check if it matches our marker naming patterns if (customName.contains("Spawn") || customName.contains("Right-click to remove")) { - toRemove.add(armorStand); + toRemove.add(mannequin); } } } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/arena/util/ArenaUtil.java b/core/src/main/java/dev/nandi0813/practice/manager/arena/util/ArenaUtil.java index d084dc09..db3a006e 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/arena/util/ArenaUtil.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/arena/util/ArenaUtil.java @@ -19,9 +19,8 @@ import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.Mannequin; import org.bukkit.entity.Player; -import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; import java.util.ArrayList; @@ -169,10 +168,12 @@ public static boolean changeStatus(Player player, DisplayArena arena) { public static void setGamerules(World world) { world.setSpawnLocation(0, 60, 0); - world.setGameRuleValue("doDaylightCycle", "false"); - world.setGameRuleValue("doMobSpawning", "false"); - world.setGameRuleValue("showDeathMessages", "false"); - world.setGameRuleValue("doFireTick", "false"); + world.setGameRule(GameRules.SPAWN_MOBS, false); + world.setGameRule(GameRules.SHOW_DEATH_MESSAGES, false); + world.setGameRule(GameRules.ADVANCE_WEATHER, false); + world.setGameRule(GameRules.ALLOW_ENTERING_NETHER_USING_PORTALS, false); + world.setGameRule(GameRules.RAIDS, false); + world.setGameRule(GameRules.SHOW_ADVANCEMENT_MESSAGES, false); } public static void saveBedData(final YamlConfiguration config, final String path, final BedLocation bedLocation) { @@ -277,22 +278,22 @@ public static void loadArenaChunks(BasicArena arena) { } } - public static void setArmorStandItemInHand(ArmorStand armorStand, ItemStack item, boolean rightHand) { - if (armorStand == null) return; + public static void setMannequinItemInHand(Mannequin mannequin, ItemStack item, boolean rightHand) { + if (mannequin == null) return; + if (mannequin.getEquipment() == null) return; if (rightHand) { - armorStand.setItem(EquipmentSlot.HAND, item); + mannequin.getEquipment().setItemInMainHand(item); } else { - armorStand.setItem(EquipmentSlot.OFF_HAND, item); + mannequin.getEquipment().setItemInOffHand(item); } } - public static void setArmorStandInvulnerable(ArmorStand armorStand) { - if (armorStand == null) return; - armorStand.setInvulnerable(true); - // Make armor stands non-persistent so they don't survive server restarts - // This prevents orphaned armor stands (markers and holograms) from appearing after restart - armorStand.setPersistent(false); + public static void setMannequinInvulnerable(Mannequin mannequin) { + if (mannequin == null) return; + mannequin.setInvulnerable(true); + // Keep setup markers non-persistent so they do not survive server restarts. + mannequin.setPersistent(false); } } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/setup/EventSetupListener.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/setup/EventSetupListener.java index 2fd1bf6b..dffccbf5 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/setup/EventSetupListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/setup/EventSetupListener.java @@ -10,14 +10,17 @@ import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; -import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.Mannequin; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.block.Action; import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.bukkit.event.player.*; +import org.bukkit.event.player.PlayerDropItemEvent; +import org.bukkit.event.player.PlayerInteractAtEntityEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerQuitEvent; import java.util.*; @@ -127,7 +130,7 @@ public void onPlayerInteractAtEntity(PlayerInteractAtEntityEvent event) { return; } - if (!(event.getRightClicked() instanceof ArmorStand armorStand)) { + if (!(event.getRightClicked() instanceof Mannequin mannequin)) { return; } @@ -136,11 +139,11 @@ public void onPlayerInteractAtEntity(PlayerInteractAtEntityEvent event) { EventData eventData = session.getEventData(); EventSpawnMarkerManager markerManager = EventSpawnMarkerManager.getInstance(); - if (!markerManager.isMarker(armorStand)) { + if (!markerManager.isMarker(mannequin)) { return; } - int spawnIndex = markerManager.getSpawnIndex(armorStand); + int spawnIndex = markerManager.getSpawnIndex(mannequin); if (spawnIndex == -1) { player.sendMessage(Common.colorize("&cCouldn't find spawn point for this marker.")); return; @@ -153,22 +156,12 @@ public void onPlayerInteractAtEntity(PlayerInteractAtEntityEvent event) { player.sendMessage(Common.colorize("&aRemoved spawn point #" + (spawnIndex + 1) + ". Remaining: " + eventData.getSpawns().size())); } - // Prevent players from manipulating marker armor stands + // Prevent damage to marker mannequins @EventHandler(priority = EventPriority.HIGHEST) - public void onArmorStandManipulate(PlayerArmorStandManipulateEvent event) { - ArmorStand armorStand = event.getRightClicked(); + public void onMarkerDamage(EntityDamageByEntityEvent event) { + if (!(event.getEntity() instanceof Mannequin mannequin)) return; - if (EventSpawnMarkerManager.getInstance().isMarker(armorStand)) { - event.setCancelled(true); - } - } - - // Prevent damage to marker armor stands - @EventHandler(priority = EventPriority.HIGHEST) - public void onArmorStandDamage(EntityDamageByEntityEvent event) { - if (!(event.getEntity() instanceof ArmorStand armorStand)) return; - - if (!EventSpawnMarkerManager.getInstance().isMarker(armorStand)) return; + if (!EventSpawnMarkerManager.getInstance().isMarker(mannequin)) return; // Cancel damage in all cases event.setCancelled(true); @@ -188,7 +181,7 @@ public void onArmorStandDamage(EntityDamageByEntityEvent event) { // Check if in correct mode if (session.getCurrentMode() != EventSetupMode.SPAWN_POINTS) return; - // Left-click on armor stand = Remove last spawn (same as left-click on block) + // Left-click on mannequin marker = Remove last spawn (same as left-click on block) if (!eventData.getSpawns().isEmpty()) { int index = eventData.getSpawns().size() - 1; eventData.getSpawns().remove(index); diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/setup/EventSpawnMarkerManager.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/setup/EventSpawnMarkerManager.java index c7ea31d2..8a0486a9 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/setup/EventSpawnMarkerManager.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/setup/EventSpawnMarkerManager.java @@ -6,16 +6,15 @@ import lombok.Getter; import net.kyori.adventure.text.Component; import org.bukkit.Location; -import org.bukkit.entity.ArmorStand; import org.bukkit.entity.EntityType; -import org.bukkit.inventory.EquipmentSlot; +import org.bukkit.entity.Mannequin; import org.bukkit.inventory.ItemStack; import java.util.*; /** - * Manages armor stand markers that show spawn positions in event setup mode. - * Armor stands face the direction the player will spawn and hold a sword. + * Manages mannequin markers that show spawn positions in event setup mode. + * Mannequins face the direction the player will spawn and hold a sword. */ @Getter public class EventSpawnMarkerManager { @@ -29,10 +28,10 @@ public static EventSpawnMarkerManager getInstance() { return instance; } - // Maps each event to its list of marker armor stands - private final Map> eventMarkers = new HashMap<>(); + // Maps each event to its list of marker mannequins + private final Map> eventMarkers = new HashMap<>(); - // Maps armor stand UUID to spawn index for spawn removal + // Maps mannequin UUID to spawn index for spawn removal private final Map markerToSpawnIndex = new HashMap<>(); /** @@ -44,43 +43,43 @@ public void showMarkers(EventData eventData) { // Clear existing markers first clearMarkers(eventData); - // Additionally, clear any orphaned armor stands near spawn locations that might have been left behind + // Additionally, clear any orphaned mannequins near spawn locations that might have been left behind // This prevents duplicates from previous sessions or crashes if (eventData.getSpawns() != null && !eventData.getSpawns().isEmpty()) { for (Location spawnLoc : eventData.getSpawns()) { if (spawnLoc != null && spawnLoc.getWorld() != null) { - // Remove any nearby armor stands (within 3 blocks) to clean up orphans + // Remove any nearby mannequins (within 3 blocks) to clean up orphans spawnLoc.getWorld().getNearbyEntities(spawnLoc, 3, 3, 3).stream() - .filter(entity -> entity instanceof ArmorStand) + .filter(entity -> entity instanceof Mannequin) .forEach(entity -> { - ArmorStand stand = (ArmorStand) entity; - String customName = stand.customName() == null ? null : Common.serializeComponentToLegacyString(stand.customName()); - // Only remove armor stands that look like our markers + Mannequin mannequin = (Mannequin) entity; + String customName = mannequin.customName() == null ? null : Common.serializeComponentToLegacyString(mannequin.customName()); + // Only remove mannequins that look like our markers if (customName != null && (customName.contains("Spawn #") || customName.contains("Right-click to remove"))) { - stand.remove(); + mannequin.remove(); } }); } } } - List markers = new ArrayList<>(); + List markers = new ArrayList<>(); List spawns = eventData.getSpawns(); if (!spawns.isEmpty()) { int index = 0; for (Location spawnLoc : spawns) { - ArmorStand marker = createMarker(spawnLoc, "&c&lSpawn #" + (index + 1)); + Mannequin marker = createMarker(spawnLoc, "&c&lSpawn #" + (index + 1)); if (marker != null) { markers.add(marker); // Track this main marker to its spawn index markerToSpawnIndex.put(marker.getUniqueId(), index); - // Create second armor stand above for instruction text + // Create second mannequin above for instruction text Location labelLoc = spawnLoc.clone().add(0, 2.3, 0); - ArmorStand labelStand = createLabelOnly(labelLoc); + Mannequin labelStand = createLabelOnly(labelLoc); if (labelStand != null) { markers.add(labelStand); } @@ -95,52 +94,64 @@ public void showMarkers(EventData eventData) { } /** - * Creates an armor stand marker at the specified location + * Creates a mannequin marker at the specified location */ - private ArmorStand createMarker(Location location, String name) { + private Mannequin createMarker(Location location, String name) { if (location == null || location.getWorld() == null) return null; - // Spawn armor stand at exact player spawn position + // Spawn mannequin at exact player spawn position Location markerLoc = location.clone(); - ArmorStand armorStand = (ArmorStand) markerLoc.getWorld().spawnEntity(markerLoc, EntityType.ARMOR_STAND); - - // Configure armor stand to look like a player - armorStand.setVisible(true); // Show body to represent player - armorStand.setGravity(false); - armorStand.setCanPickupItems(false); - armorStand.setCustomNameVisible(true); - armorStand.customName(Component.text(Common.colorize(name))); - - // Make the armor stand face the same direction (yaw) as the saved spawn location + Mannequin mannequin = (Mannequin) markerLoc.getWorld().spawnEntity(markerLoc, EntityType.MANNEQUIN); + + // Configure mannequin to look like a player marker while staying static. + mannequin.setInvisible(false); // Show body to represent player + mannequin.setGravity(false); + mannequin.setCanPickupItems(false); + mannequin.setCustomNameVisible(true); + mannequin.customName(Component.text(Common.colorize(name))); + mannequin.setAI(false); + mannequin.setCollidable(false); + mannequin.setSilent(true); + mannequin.setImmovable(true); + + // Make the mannequin face the same direction (yaw) as the saved spawn location Location facingLoc = markerLoc.clone(); facingLoc.setYaw(location.getYaw()); facingLoc.setPitch(0.0f); - armorStand.teleport(facingLoc); + mannequin.teleport(facingLoc); // Give it a sword to hold (to make it more visible) ItemStack sword = ItemCreateUtil.createItem("&cSpawn Marker", org.bukkit.Material.DIAMOND_SWORD); - armorStand.getEquipment().setItem(EquipmentSlot.HAND, sword); + if (mannequin.getEquipment() != null) { + mannequin.getEquipment().setItemInMainHand(sword); + } - // Make it invulnerable and persistent - armorStand.setRemoveWhenFarAway(false); - armorStand.setMarker(false); + // Make it invulnerable and non-persistent. + mannequin.setInvulnerable(true); + mannequin.setPersistent(false); + mannequin.setRemoveWhenFarAway(false); - return armorStand; + return mannequin; } /** - * Creates a small invisible armor stand just for displaying text label + * Creates a small invisible mannequin just for displaying text label */ - private ArmorStand createLabelOnly(Location location) { + private Mannequin createLabelOnly(Location location) { if (location == null || location.getWorld() == null) return null; - ArmorStand labelStand = (ArmorStand) location.getWorld().spawnEntity(location, EntityType.ARMOR_STAND); - labelStand.setVisible(false); + Mannequin labelStand = (Mannequin) location.getWorld().spawnEntity(location, EntityType.MANNEQUIN); + labelStand.setInvisible(true); labelStand.setGravity(false); labelStand.setCanPickupItems(false); labelStand.setCustomNameVisible(true); labelStand.customName(Component.text(Common.colorize("&7(Right-click to remove)"))); - labelStand.setMarker(true); // Make it small + labelStand.setAI(false); + labelStand.setCollidable(false); + labelStand.setSilent(true); + labelStand.setImmovable(true); + labelStand.setInvulnerable(true); + labelStand.setPersistent(false); labelStand.setRemoveWhenFarAway(false); return labelStand; @@ -150,9 +161,9 @@ private ArmorStand createLabelOnly(Location location) { * Clears all markers for a specific event */ public void clearMarkers(EventData eventData) { - List markers = eventMarkers.get(eventData); + List markers = eventMarkers.get(eventData); if (markers != null) { - for (ArmorStand marker : markers) { + for (Mannequin marker : markers) { markerToSpawnIndex.remove(marker.getUniqueId()); marker.remove(); } @@ -164,8 +175,8 @@ public void clearMarkers(EventData eventData) { * Clears all markers for all events */ public void clearAllMarkers() { - for (List markers : eventMarkers.values()) { - for (ArmorStand marker : markers) { + for (List markers : eventMarkers.values()) { + for (Mannequin marker : markers) { markerToSpawnIndex.remove(marker.getUniqueId()); marker.remove(); } @@ -183,11 +194,11 @@ public void updateMarkers(EventData eventData) { } /** - * Checks if an armor stand is a spawn marker + * Checks if a mannequin is a spawn marker */ - public boolean isMarker(ArmorStand armorStand) { - for (List markers : eventMarkers.values()) { - if (markers.contains(armorStand)) { + public boolean isMarker(Mannequin mannequin) { + for (List markers : eventMarkers.values()) { + if (markers.contains(mannequin)) { return true; } } @@ -195,9 +206,9 @@ public boolean isMarker(ArmorStand armorStand) { } /** - * Gets the spawn index for a given marker armor stand + * Gets the spawn index for a given marker mannequin */ - public int getSpawnIndex(ArmorStand armorStand) { - return markerToSpawnIndex.getOrDefault(armorStand.getUniqueId(), -1); + public int getSpawnIndex(Mannequin mannequin) { + return markerToSpawnIndex.getOrDefault(mannequin.getUniqueId(), -1); } } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/leaderboard/hologram/Hologram.java b/core/src/main/java/dev/nandi0813/practice/manager/leaderboard/hologram/Hologram.java index 73dfcc01..eb13e9b5 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/leaderboard/hologram/Hologram.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/leaderboard/hologram/Hologram.java @@ -178,8 +178,6 @@ private synchronized void updateSmartly(@NotNull List textLines, @NotNul } } - // ArmorStand custom names rendered ~2 blocks above entity position. - // TextDisplay renders at entity position, so preserve existing configured hologram locations by adding this lift. private static final double BASE_HEIGHT_OFFSET = 2.2; private List calculatePositions(int count, List spacings) { From 8aff2b144b52c28b5c06092abc47ac16c10e5e31 Mon Sep 17 00:00:00 2001 From: Nandor Dukat Date: Tue, 17 Mar 2026 08:44:53 +0100 Subject: [PATCH 27/38] fixed possible NPE --- .../manager/sidebar/adapter/PracticeAdapter.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/dev/nandi0813/practice/manager/sidebar/adapter/PracticeAdapter.java b/core/src/main/java/dev/nandi0813/practice/manager/sidebar/adapter/PracticeAdapter.java index 6685b669..69f435d9 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/sidebar/adapter/PracticeAdapter.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/sidebar/adapter/PracticeAdapter.java @@ -53,6 +53,10 @@ public class PracticeAdapter implements SidebarAdapter { + private static String fallbackToZero(String value) { + return value != null ? value : "0"; + } + @Override public Component getTitle(Player player) { return PAPIUtil.runThroughFormat(player, SidebarManager.getInstance().getConfig().getString("TITLE")); @@ -112,13 +116,15 @@ public List getLines(Player player) { ); } } else if (event != null) { - if (event.getQueueRunnable().getFormattedTime() != null) { + String eventQueueTimeLeft = event.getQueueRunnable() != null ? event.getQueueRunnable().getFormattedTime() : null; + + if (eventQueueTimeLeft != null) { for (String line : config.getStringList("LOBBY.EVENT-QUEUE.STARTING")) { sidebar.add(PAPIUtil.runThroughFormat(player, line) .replaceText(TextReplacementConfig.builder().match("%eventName%").replacement(event.getType().getName()).build()) .replaceText(TextReplacementConfig.builder().match("%maxPlayer%").replacement(String.valueOf(event.getType().getMaxPlayer())).build()) .replaceText(TextReplacementConfig.builder().match("%player%").replacement(String.valueOf(event.getPlayers().size())).build()) - .replaceText(TextReplacementConfig.builder().match("%timeLeft%").replacement(event.getQueueRunnable().getFormattedTime()).build()) + .replaceText(TextReplacementConfig.builder().match("%timeLeft%").replacement(fallbackToZero(eventQueueTimeLeft)).build()) .replaceText(TextReplacementConfig.builder().match("%division%").replacement(profile.getStats().getDivision() != null ? profile.getStats().getDivision().getComponentFullName() : Component.empty()).build()) .replaceText(TextReplacementConfig.builder().match("%division_short%").replacement(profile.getStats().getDivision() != null ? profile.getStats().getDivision().getComponentShortName() : Component.empty()).build()) ); From 571788662c16bf6e855462e65789db526831adab Mon Sep 17 00:00:00 2001 From: Nandor Dukat Date: Tue, 17 Mar 2026 08:57:40 +0100 Subject: [PATCH 28/38] fixed possible IllegalStateException --- .../fight/event/setup/EventSetupListener.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/setup/EventSetupListener.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/setup/EventSetupListener.java index dffccbf5..3fa238bb 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/setup/EventSetupListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/setup/EventSetupListener.java @@ -21,6 +21,7 @@ import org.bukkit.event.player.PlayerInteractAtEntityEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.inventory.EquipmentSlot; import java.util.*; @@ -42,6 +43,10 @@ public EventSetupListener(EventWandSetupManager setupManager) { @EventHandler public void onInteract(PlayerInteractEvent event) { + if (event.getHand() != null && event.getHand() != EquipmentSlot.HAND) { + return; + } + Player player = event.getPlayer(); if (!setupManager.isSettingUp(player) || !setupManager.isSetupWand(event.getItem())) { @@ -271,7 +276,14 @@ private void handleSpawnPoints(Player player, EventData eventData, Action action return; } - eventData.addSpawn(spawnLoc); + try { + eventData.addSpawn(spawnLoc); + } catch (IllegalStateException ex) { + // Ignore duplicate/invalid add attempts and show the setup error to the player. + player.sendMessage(Common.colorize("&c" + ex.getMessage())); + return; + } + EventSpawnMarkerManager.getInstance().updateMarkers(eventData); updateGui(eventData); From 5d985f6cec9baf701710e94a533296a24d77c076 Mon Sep 17 00:00:00 2001 From: Nandor Dukat Date: Tue, 17 Mar 2026 09:17:40 +0100 Subject: [PATCH 29/38] fixed sound effect play when there is in the chat --- .../fight/event/events/duel/interfaces/DuelEvent.java | 6 ++++++ .../fight/event/events/ffa/interfaces/FFAEvent.java | 8 +++++++- .../fight/event/events/onevsall/tnttag/TNTTag.java | 6 ++++++ .../manager/fight/event/runnables/StartRunnable.java | 8 -------- 4 files changed, 19 insertions(+), 9 deletions(-) diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/duel/interfaces/DuelEvent.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/duel/interfaces/DuelEvent.java index 168bdf55..79d3e3ea 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/duel/interfaces/DuelEvent.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/events/duel/interfaces/DuelEvent.java @@ -10,6 +10,9 @@ import dev.nandi0813.practice.manager.fight.event.runnables.StartRunnable; import dev.nandi0813.practice.manager.fight.event.util.EventUtil; import dev.nandi0813.practice.manager.server.ServerManager; +import dev.nandi0813.practice.manager.server.sound.SoundEffect; +import dev.nandi0813.practice.manager.server.sound.SoundManager; +import dev.nandi0813.practice.manager.server.sound.SoundType; import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.entityhider.PlayerHider; import dev.nandi0813.practice.util.playerutil.PlayerUtil; @@ -120,6 +123,9 @@ public void handleStartRunnable(StartRunnable startRunnable) { .replace("%seconds%", String.valueOf(seconds)) .replace("%secondName%", (seconds == 1 ? LanguageManager.getString("SECOND-NAME.1SEC") : LanguageManager.getString("SECOND-NAME.1 0) { - SoundEffect sound = SoundManager.getInstance().getSound(SoundType.EVENT_START_COUNTDOWN); - if (sound != null) sound.play(this.event.getPlayers()); - } - this.event.handleStartRunnable(this); } From 8d0bf9d44749c2ec3808945a288a6cd8559e152b Mon Sep 17 00:00:00 2001 From: Nandor Dukat Date: Tue, 17 Mar 2026 09:28:08 +0100 Subject: [PATCH 30/38] fixed eventdata spawn removal on restart --- .../fight/event/interfaces/EventData.java | 70 ++++++++----------- .../fight/event/setup/EventSetupListener.java | 11 +++ 2 files changed, 41 insertions(+), 40 deletions(-) diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/interfaces/EventData.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/interfaces/EventData.java index 5c8a0163..9d1ab58c 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/interfaces/EventData.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/interfaces/EventData.java @@ -1,6 +1,5 @@ package dev.nandi0813.practice.manager.fight.event.interfaces; -import dev.nandi0813.practice.ZonePractice; import dev.nandi0813.practice.manager.backend.ConfigFile; import dev.nandi0813.practice.manager.backend.LanguageManager; import dev.nandi0813.practice.manager.fight.event.EventManager; @@ -11,7 +10,6 @@ import lombok.Setter; import org.bukkit.Location; import org.bukkit.Material; -import org.bukkit.scheduler.BukkitRunnable; import java.io.IOException; import java.util.ArrayList; @@ -21,8 +19,6 @@ @Setter public abstract class EventData extends ConfigFile { - private static final ZonePractice practice = ZonePractice.getInstance(); - protected EventType type; protected boolean enabled; protected GUIItem icon; @@ -58,45 +54,32 @@ public EventData(final EventType type) { } @Override - public void setData() { - BukkitRunnable task = new BukkitRunnable() { - @Override - public void run() { - config.set("enabled", enabled); - config.set("icon", icon.get()); - config.set("settings.broadcastInterval", broadcastInterval); - config.set("settings.waitBeforeStart", waitBeforeStart); - config.set("settings.maxQueueTime", maxQueueTime); - config.set("settings.duration", duration); - config.set("settings.startTime", startTime); - config.set("settings.minPlayer", minPlayer); - config.set("settings.maxPlayer", maxPlayer); - - if (cuboidLoc1 != null) - config.set("cuboid.1", cuboidLoc1); - if (cuboidLoc2 != null) - config.set("cuboid.2", cuboidLoc2); - - if (!spawns.isEmpty()) { - config.set("spawns", spawns); - } - - setCustomData(); - - saveFile(); - } - }; - - if (practice.isEnabled()) - task.runTaskAsynchronously(practice); - else - task.run(); + public synchronized void setData() { + config.set("enabled", enabled); + config.set("icon", icon.get()); + config.set("settings.broadcastInterval", broadcastInterval); + config.set("settings.waitBeforeStart", waitBeforeStart); + config.set("settings.maxQueueTime", maxQueueTime); + config.set("settings.duration", duration); + config.set("settings.startTime", startTime); + config.set("settings.minPlayer", minPlayer); + config.set("settings.maxPlayer", maxPlayer); + + config.set("cuboid.1", cuboidLoc1); + config.set("cuboid.2", cuboidLoc2); + config.set("spawns", spawns.isEmpty() ? null : new ArrayList<>(spawns)); + + setCustomData(); + + saveFile(); } protected abstract void setCustomData(); @Override public void getData() { + spawns.clear(); + if (config.isItemStack("icon")) this.icon = new GUIItem(config.getItemStack("icon")); @@ -127,9 +110,16 @@ public void getData() { this.setCuboidLoc2((Location) config.get("cuboid.2")); if (config.isList("spawns")) { - for (Object obj : config.getList("spawns")) { - if (obj instanceof Location) { - addSpawn((Location) obj); + List savedSpawns = config.getList("spawns"); + if (savedSpawns != null) { + for (Object obj : savedSpawns) { + if (obj instanceof Location location) { + spawns.add(location.clone()); + } + } + + if (cuboid != null) { + spawns.removeIf(spawn -> !cuboid.contains(spawn)); } } } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/setup/EventSetupListener.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/setup/EventSetupListener.java index 3fa238bb..9687f518 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/setup/EventSetupListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/setup/EventSetupListener.java @@ -1,6 +1,7 @@ package dev.nandi0813.practice.manager.fight.event.setup; import dev.nandi0813.api.Event.Event.EventEndEvent; +import dev.nandi0813.practice.ZonePractice; import dev.nandi0813.practice.manager.arena.util.ArenaWorldUtil; import dev.nandi0813.practice.manager.backend.LanguageManager; import dev.nandi0813.practice.manager.fight.event.interfaces.EventData; @@ -157,6 +158,7 @@ public void onPlayerInteractAtEntity(PlayerInteractAtEntityEvent event) { eventData.getSpawns().remove(spawnIndex); markerManager.updateMarkers(eventData); updateGui(eventData); + scheduleSave(eventData); player.sendMessage(Common.colorize("&aRemoved spawn point #" + (spawnIndex + 1) + ". Remaining: " + eventData.getSpawns().size())); } @@ -192,6 +194,7 @@ public void onMarkerDamage(EntityDamageByEntityEvent event) { eventData.getSpawns().remove(index); EventSpawnMarkerManager.getInstance().updateMarkers(eventData); updateGui(eventData); + scheduleSave(eventData); player.sendMessage(Common.colorize("&cRemoved last spawn point. Remaining: " + index)); } else { player.sendMessage(Common.colorize("&cNo spawn points to remove.")); @@ -251,6 +254,7 @@ private void handleCornerSelection(Player player, EventData eventData, Action ac } updateGui(eventData); + scheduleSave(eventData); } private void handleSpawnPoints(Player player, EventData eventData, Action action, PlayerInteractEvent event) { @@ -286,6 +290,7 @@ private void handleSpawnPoints(Player player, EventData eventData, Action action EventSpawnMarkerManager.getInstance().updateMarkers(eventData); updateGui(eventData); + scheduleSave(eventData); player.sendMessage(Common.colorize("&aAdded spawn point #" + eventData.getSpawns().size() + " at your location.")); } @@ -296,6 +301,7 @@ else if (action == Action.LEFT_CLICK_AIR || action == Action.LEFT_CLICK_BLOCK) { eventData.getSpawns().remove(index); EventSpawnMarkerManager.getInstance().updateMarkers(eventData); updateGui(eventData); + scheduleSave(eventData); player.sendMessage(Common.colorize("&cRemoved last spawn point. Remaining: " + index)); } else { player.sendMessage(Common.colorize("&cNo spawn points to remove.")); @@ -333,6 +339,7 @@ private void handleToggleStatus(Player player, EventData eventData, Action actio } updateGui(eventData); + scheduleSave(eventData); } catch (Exception e) { player.sendMessage(Common.colorize("&cError toggling status: " + e.getMessage())); } @@ -353,4 +360,8 @@ private static Location getSnappedLocation(org.bukkit.block.Block clickedBlock, loc.setPitch(0.0f); return loc; } + + private static void scheduleSave(EventData eventData) { + org.bukkit.Bukkit.getScheduler().runTaskAsynchronously(ZonePractice.getInstance(), eventData::setData); + } } From 877811718cc6e874f2477c5b0ef32f090dad9952 Mon Sep 17 00:00:00 2001 From: Nandor Dukat Date: Tue, 17 Mar 2026 09:32:59 +0100 Subject: [PATCH 31/38] fixed IndexOutOfBoundsException --- .../fight/event/setup/EventSetupListener.java | 33 +++++++++++++++++-- .../event/setup/EventSpawnMarkerManager.java | 11 +++++-- 2 files changed, 38 insertions(+), 6 deletions(-) diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/setup/EventSetupListener.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/setup/EventSetupListener.java index 9687f518..98f8b848 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/setup/EventSetupListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/setup/EventSetupListener.java @@ -37,6 +37,7 @@ public class EventSetupListener implements Listener { * processed this tick and skip any duplicate invocation within the same tick. */ private final Set interactCooldown = new HashSet<>(); + private final Set entityInteractCooldown = new HashSet<>(); public EventSetupListener(EventWandSetupManager setupManager) { this.setupManager = setupManager; @@ -44,7 +45,7 @@ public EventSetupListener(EventWandSetupManager setupManager) { @EventHandler public void onInteract(PlayerInteractEvent event) { - if (event.getHand() != null && event.getHand() != EquipmentSlot.HAND) { + if (event.getHand() != EquipmentSlot.HAND) { return; } @@ -125,13 +126,29 @@ public void onPlayerDropItem(PlayerDropItemEvent e) { @EventHandler public void onPlayerInteractAtEntity(PlayerInteractAtEntityEvent event) { + if (event.getHand() != null && event.getHand() != EquipmentSlot.HAND) { + return; + } + Player player = event.getPlayer(); if (!setupManager.isSettingUp(player) || !setupManager.isSetupWand(player.getInventory().getItemInMainHand())) { return; } + if (!entityInteractCooldown.add(player.getUniqueId())) { + return; + } + org.bukkit.Bukkit.getScheduler().runTask( + ZonePractice.getInstance(), + () -> entityInteractCooldown.remove(player.getUniqueId()) + ); + EventWandSetupManager.SetupSession session = setupManager.getSession(player); + if (session == null) { + return; + } + if (session.getCurrentMode() != EventSetupMode.SPAWN_POINTS) { return; } @@ -143,15 +160,25 @@ public void onPlayerInteractAtEntity(PlayerInteractAtEntityEvent event) { event.setCancelled(true); EventData eventData = session.getEventData(); + if (eventData == null) { + return; + } + EventSpawnMarkerManager markerManager = EventSpawnMarkerManager.getInstance(); if (!markerManager.isMarker(mannequin)) { return; } + if (!markerManager.isSpawnMarker(mannequin)) { + return; + } + int spawnIndex = markerManager.getSpawnIndex(mannequin); - if (spawnIndex == -1) { - player.sendMessage(Common.colorize("&cCouldn't find spawn point for this marker.")); + if (spawnIndex < 0 || spawnIndex >= eventData.getSpawns().size()) { + markerManager.updateMarkers(eventData); + updateGui(eventData); + player.sendMessage(Common.colorize("&cThis spawn marker is outdated. Markers have been refreshed.")); return; } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/setup/EventSpawnMarkerManager.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/setup/EventSpawnMarkerManager.java index 8a0486a9..654403e7 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/setup/EventSpawnMarkerManager.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/setup/EventSpawnMarkerManager.java @@ -122,9 +122,7 @@ private Mannequin createMarker(Location location, String name) { // Give it a sword to hold (to make it more visible) ItemStack sword = ItemCreateUtil.createItem("&cSpawn Marker", org.bukkit.Material.DIAMOND_SWORD); - if (mannequin.getEquipment() != null) { - mannequin.getEquipment().setItemInMainHand(sword); - } + mannequin.getEquipment().setItemInMainHand(sword); // Make it invulnerable and non-persistent. mannequin.setInvulnerable(true); @@ -205,6 +203,13 @@ public boolean isMarker(Mannequin mannequin) { return false; } + /** + * Checks if a mannequin is a removable spawn marker (not just a floating label). + */ + public boolean isSpawnMarker(Mannequin mannequin) { + return markerToSpawnIndex.containsKey(mannequin.getUniqueId()); + } + /** * Gets the spawn index for a given marker mannequin */ From 4d9efb83ff08356d6c5de83811954d998306d19f Mon Sep 17 00:00:00 2001 From: Nandor Dukat Date: Tue, 17 Mar 2026 09:51:10 +0100 Subject: [PATCH 32/38] fixed new manequin spawn marker --- .../fight/event/setup/EventSetupListener.java | 25 +++++++++++++++---- .../event/setup/EventSpawnMarkerManager.java | 8 +++--- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/setup/EventSetupListener.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/setup/EventSetupListener.java index 98f8b848..a94dd296 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/setup/EventSetupListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/setup/EventSetupListener.java @@ -5,6 +5,7 @@ import dev.nandi0813.practice.manager.arena.util.ArenaWorldUtil; import dev.nandi0813.practice.manager.backend.LanguageManager; import dev.nandi0813.practice.manager.fight.event.interfaces.EventData; +import dev.nandi0813.practice.manager.gui.GUIManager; import dev.nandi0813.practice.manager.gui.GUIType; import dev.nandi0813.practice.manager.gui.setup.event.EventSetupManager; import dev.nandi0813.practice.util.Common; @@ -18,10 +19,7 @@ import org.bukkit.event.Listener; import org.bukkit.event.block.Action; import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.bukkit.event.player.PlayerDropItemEvent; -import org.bukkit.event.player.PlayerInteractAtEntityEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.event.player.*; import org.bukkit.inventory.EquipmentSlot; import java.util.*; @@ -124,9 +122,25 @@ public void onPlayerDropItem(PlayerDropItemEvent e) { } } + @EventHandler + public void onPlayerInteractEntity(PlayerInteractEntityEvent event) { + if (event.getHand() != EquipmentSlot.HAND) { + return; + } + + Player player = event.getPlayer(); + if (!setupManager.isSettingUp(player) || !setupManager.isSetupWand(player.getInventory().getItemInMainHand())) { + return; + } + + if (event.getRightClicked() instanceof Mannequin mannequin && EventSpawnMarkerManager.getInstance().isMarker(mannequin)) { + event.setCancelled(true); + } + } + @EventHandler public void onPlayerInteractAtEntity(PlayerInteractAtEntityEvent event) { - if (event.getHand() != null && event.getHand() != EquipmentSlot.HAND) { + if (event.getHand() != EquipmentSlot.HAND) { return; } @@ -377,6 +391,7 @@ private void updateGui(EventData eventData) { if (EventSetupManager.getInstance().getEventSetupGUIs().get(eventData).containsKey(GUIType.Event_Main)) { EventSetupManager.getInstance().getEventSetupGUIs().get(eventData).get(GUIType.Event_Main).update(); } + GUIManager.getInstance().getGuis().get(GUIType.Event_Summary).update(); } } diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/setup/EventSpawnMarkerManager.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/setup/EventSpawnMarkerManager.java index 654403e7..2b8156d6 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/setup/EventSpawnMarkerManager.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/setup/EventSpawnMarkerManager.java @@ -1,10 +1,12 @@ package dev.nandi0813.practice.manager.fight.event.setup; +import dev.nandi0813.practice.ZonePractice; import dev.nandi0813.practice.manager.fight.event.interfaces.EventData; import dev.nandi0813.practice.util.Common; import dev.nandi0813.practice.util.ItemCreateUtil; import lombok.Getter; import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.entity.EntityType; import org.bukkit.entity.Mannequin; @@ -186,9 +188,9 @@ public void clearAllMarkers() { * Updates markers for an event (re-creates them) */ public void updateMarkers(EventData eventData) { - // Always update markers - showMarkers will clear old ones first - // This ensures markers appear even when adding the first spawn point - showMarkers(eventData); + clearMarkers(eventData); + // Recreate markers next tick so removed entities are fully despawned first. + Bukkit.getScheduler().runTask(ZonePractice.getInstance(), () -> showMarkers(eventData)); } /** From ce18e8568c6754a5a4a2828a307fa38773c07938 Mon Sep 17 00:00:00 2001 From: Nandor Dukat Date: Tue, 17 Mar 2026 09:59:46 +0100 Subject: [PATCH 33/38] added cooldown for markers --- .../manager/fight/event/setup/EventSetupListener.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/setup/EventSetupListener.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/setup/EventSetupListener.java index a94dd296..f5b5bd90 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/event/setup/EventSetupListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/event/setup/EventSetupListener.java @@ -36,6 +36,7 @@ public class EventSetupListener implements Listener { */ private final Set interactCooldown = new HashSet<>(); private final Set entityInteractCooldown = new HashSet<>(); + private final Set markerDamageCooldown = new HashSet<>(); public EventSetupListener(EventWandSetupManager setupManager) { this.setupManager = setupManager; @@ -217,6 +218,13 @@ public void onMarkerDamage(EntityDamageByEntityEvent event) { // Check if the damager is a player (left-click) if (!(event.getDamager() instanceof Player player)) return; + // Some client/server combos can emit duplicate damage callbacks for one swing. + if (!markerDamageCooldown.add(player.getUniqueId())) return; + org.bukkit.Bukkit.getScheduler().runTask( + ZonePractice.getInstance(), + () -> markerDamageCooldown.remove(player.getUniqueId()) + ); + // Check if player is in setup mode if (!setupManager.isSettingUp(player)) return; From 358ece6bc8d0c9ea9537b017524d32393cccfd19 Mon Sep 17 00:00:00 2001 From: Nandor Dukat Date: Tue, 17 Mar 2026 10:04:31 +0100 Subject: [PATCH 34/38] fixed portal frame creation to use END_PORTAL instead --- .../nandi0813/practice/manager/arena/util/PortalLocation.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/dev/nandi0813/practice/manager/arena/util/PortalLocation.java b/core/src/main/java/dev/nandi0813/practice/manager/arena/util/PortalLocation.java index 3155cda9..30d3f58e 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/arena/util/PortalLocation.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/arena/util/PortalLocation.java @@ -29,7 +29,7 @@ public Location getCenter() { public void setPortal() { for (Block block : cuboid.getBlocks()) { - block.setBlockData(Material.END_PORTAL_FRAME.createBlockData()); + block.setBlockData(Material.END_PORTAL.createBlockData()); block.getState().update(); } } From 2d4715a7a7d53188ab618508b16ecbb8d657eaa2 Mon Sep 17 00:00:00 2001 From: Nandor Dukat Date: Tue, 17 Mar 2026 10:11:34 +0100 Subject: [PATCH 35/38] disabled portal teleport in arena worlds --- .../manager/arena/listener/ArenaListener.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/core/src/main/java/dev/nandi0813/practice/manager/arena/listener/ArenaListener.java b/core/src/main/java/dev/nandi0813/practice/manager/arena/listener/ArenaListener.java index 0abba01d..d6029b62 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/arena/listener/ArenaListener.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/arena/listener/ArenaListener.java @@ -23,6 +23,7 @@ import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerPortalEvent; import org.bukkit.event.world.ChunkUnloadEvent; import org.bukkit.event.world.WorldUnloadEvent; @@ -31,6 +32,18 @@ public class ArenaListener implements Listener { + @EventHandler + public void onPlayerPortalEvent(PlayerPortalEvent e) { + Player player = e.getPlayer(); + World world = player.getWorld(); + + if (world.equals(ArenaWorldUtil.getArenasCopyWorld())) { + e.setCancelled(true); + } else if (world.equals(ArenaWorldUtil.getArenasWorld())) { + e.setCancelled(true); + } + } + @EventHandler ( priority = EventPriority.HIGHEST ) public void onBlockBreak(BlockBreakEvent e) { Player player = e.getPlayer(); From a86fd47237185aba44607808399da72ef79019df Mon Sep 17 00:00:00 2001 From: Nandor Dukat Date: Tue, 17 Mar 2026 10:51:51 +0100 Subject: [PATCH 36/38] changed version to 7.0.0-SNAPSHOT --- core/pom.xml | 2 +- distribution/pom.xml | 4 ++-- pom.xml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/core/pom.xml b/core/pom.xml index cf9be514..cc09fb72 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -7,7 +7,7 @@ dev.nandi0813 practice-parent - 6.4.6-SNAPSHOT + 7.0.0-SNAPSHOT practice-core diff --git a/distribution/pom.xml b/distribution/pom.xml index b8c0f0a0..9898f878 100644 --- a/distribution/pom.xml +++ b/distribution/pom.xml @@ -10,7 +10,7 @@ dev.nandi0813 practice-parent - 6.4.6-SNAPSHOT + 7.0.0-SNAPSHOT @@ -31,7 +31,7 @@ clean install - ZonePractice Pro v6.4.6-SNAPSHOT + ZonePractice Pro v7.0.0-SNAPSHOT diff --git a/pom.xml b/pom.xml index ff8752d7..3290be65 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ dev.nandi0813 practice-parent - 6.4.6-SNAPSHOT + 7.0.0-SNAPSHOT pom ZonePractice Pro From f99263f8148b8cd449ddf648f47e7bf5136017b6 Mon Sep 17 00:00:00 2001 From: Nandor Dukat Date: Tue, 17 Mar 2026 10:52:31 +0100 Subject: [PATCH 37/38] Potential fix for pull request finding 'Dereferenced variable may be null' Co-authored-by: Copilot Autofix powered by AI <223894421+github-code-quality[bot]@users.noreply.github.com> --- .../fight/ffa/game/LadderSelector.java | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/game/LadderSelector.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/game/LadderSelector.java index cdc8290a..30949a53 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/game/LadderSelector.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/ffa/game/LadderSelector.java @@ -87,14 +87,17 @@ public void handleClickEvent(InventoryClickEvent e) { return; NormalLadder ladder = ladderSlots.get(slot); - if (ladder != null) { - if (!ladder.isEnabled() || !ffaArena.getAssignedLadders().contains(ladder)) { - update(); - return; - } else if (ladder.isFrozen()) { - update(); - return; - } + if (ladder == null) { + update(); + return; + } + + if (!ladder.isEnabled() || !ffaArena.getAssignedLadders().contains(ladder)) { + update(); + return; + } else if (ladder.isFrozen()) { + update(); + return; } if (!ffa.isOpen()) { From 9766c1fb8b29f84ccdd65c69915987c4f845d5a3 Mon Sep 17 00:00:00 2001 From: Nandor Dukat Date: Tue, 17 Mar 2026 10:52:49 +0100 Subject: [PATCH 38/38] Update core/src/main/java/dev/nandi0813/practice/manager/ladder/abstraction/normal/NormalLadder.java Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../practice/manager/ladder/abstraction/normal/NormalLadder.java | 1 - 1 file changed, 1 deletion(-) diff --git a/core/src/main/java/dev/nandi0813/practice/manager/ladder/abstraction/normal/NormalLadder.java b/core/src/main/java/dev/nandi0813/practice/manager/ladder/abstraction/normal/NormalLadder.java index fa94a2a8..5969c6ad 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/ladder/abstraction/normal/NormalLadder.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/ladder/abstraction/normal/NormalLadder.java @@ -2,7 +2,6 @@ import dev.nandi0813.practice.manager.arena.ArenaManager; import dev.nandi0813.practice.manager.arena.arenas.Arena; -import dev.nandi0813.practice.manager.arena.arenas.FFAArena; import dev.nandi0813.practice.manager.gui.GUIManager; import dev.nandi0813.practice.manager.gui.GUIType; import dev.nandi0813.practice.manager.gui.guis.ladder.LadderPreviewGui;