From bdece2c552cb64aa651aa09bafac27b5958f7b73 Mon Sep 17 00:00:00 2001 From: RonanCraft Date: Wed, 9 Mar 2022 11:00:02 -0500 Subject: [PATCH] converted base `/rtp` to be an RTPCommand + commands can now be cancelled --- .../BetterRTPAddons/AddonsHandler.java | 2 +- .../addons/commands/CommandsLoader.java | 1 + .../addons/logger/AddonLogger.java | 1 + .../addons/magicStick/MagicStickEvents.java | 1 + .../addons/menus/AddonMenus.java | 4 - .../addons/portals/PortalsEvents.java | 4 +- .../addons/rtpmenu/AddonRTPMenu.java | 93 +++++++++++++++++++ .../addons/rtpmenu/MenuData.java | 11 +++ .../rtpmenu/RTPMenu_CreateInventory.java | 11 +++ BetterRTPAddons/src/main/resources/config.yml | 11 ++- .../BetterRTP/player/commands/Commands.java | 16 +++- .../player/commands/types/CmdBiome.java | 2 +- .../player/commands/types/CmdTeleport.java | 43 +++++++++ .../player/commands/types/CmdWorld.java | 3 +- .../customEvents/RTP_CommandEvent.java | 14 ++- .../references/helpers/HelperRTP.java | 15 +-- 16 files changed, 206 insertions(+), 26 deletions(-) delete mode 100644 BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/menus/AddonMenus.java create mode 100644 BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/rtpmenu/AddonRTPMenu.java create mode 100644 BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/rtpmenu/MenuData.java create mode 100644 BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/rtpmenu/RTPMenu_CreateInventory.java create mode 100644 src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/types/CmdTeleport.java diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/AddonsHandler.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/AddonsHandler.java index 613e912..412f5f3 100644 --- a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/AddonsHandler.java +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/AddonsHandler.java @@ -50,7 +50,7 @@ public class AddonsHandler { PARTY_RTP(new AddonParty()), //Adds parties! ; - Addon addon; + final Addon addon; Addons(Addon addon) { this.addon = addon; diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/commands/CommandsLoader.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/commands/CommandsLoader.java index 92b4363..e839994 100644 --- a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/commands/CommandsLoader.java +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/commands/CommandsLoader.java @@ -28,6 +28,7 @@ public class CommandsLoader implements Listener { commands.put(type, cmds); } } + HandlerList.unregisterAll(this); Bukkit.getPluginManager().registerEvents(this, Main.getInstance()); } diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/logger/AddonLogger.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/logger/AddonLogger.java index 11d875e..a681649 100644 --- a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/logger/AddonLogger.java +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/logger/AddonLogger.java @@ -37,6 +37,7 @@ public class AddonLogger implements Addon, Listener { @Override public void load() { + HandlerList.unregisterAll(this); Bukkit.getPluginManager().registerEvents(this, Main.getInstance()); this.format = getFile(Files.FILETYPE.CONFIG).getString(name + ".Format"); this.toConsole = getFile(Files.FILETYPE.CONFIG).getBoolean(name + ".LogToConsole"); diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/magicStick/MagicStickEvents.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/magicStick/MagicStickEvents.java index 059c5a0..80920d0 100644 --- a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/magicStick/MagicStickEvents.java +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/magicStick/MagicStickEvents.java @@ -34,6 +34,7 @@ public class MagicStickEvents implements Listener { private final List teleportingPlayers = new ArrayList<>(); void load() { + HandlerList.unregisterAll(this); Bukkit.getPluginManager().registerEvents(this, Main.getInstance()); Files.FILETYPE file = Main.getInstance().getFiles().getType(Files.FILETYPE.CONFIG); String title = file.getString("MagicStick.Item.Name"); diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/menus/AddonMenus.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/menus/AddonMenus.java deleted file mode 100644 index 57c13f3..0000000 --- a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/menus/AddonMenus.java +++ /dev/null @@ -1,4 +0,0 @@ -package me.SuperRonanCraft.BetterRTPAddons.addons.menus; - -public class AddonMenus { -} diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/PortalsEvents.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/PortalsEvents.java index 3b9dac1..63cf3f1 100644 --- a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/PortalsEvents.java +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/PortalsEvents.java @@ -8,6 +8,7 @@ import me.SuperRonanCraft.BetterRTP.references.helpers.HelperRTP; import me.SuperRonanCraft.BetterRTPAddons.Main; import me.SuperRonanCraft.BetterRTPAddons.addons.portals.region.PortalsRegionInfo; import me.SuperRonanCraft.BetterRTPAddons.util.Files; +import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -29,7 +30,8 @@ public class PortalsEvents implements Listener { } public void load() { - Main.getInstance().getServer().getPluginManager().registerEvents(this, Main.getInstance()); + HandlerList.unregisterAll(this); + Bukkit.getServer().getPluginManager().registerEvents(this, Main.getInstance()); ignoreDelay = Main.getInstance().getFiles().getType(Files.FILETYPE.CONFIG).getBoolean("Portals.IgnoreDelay"); ignoreCooldown = Main.getInstance().getFiles().getType(Files.FILETYPE.CONFIG).getBoolean("Portals.IgnoreCooldown"); } diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/rtpmenu/AddonRTPMenu.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/rtpmenu/AddonRTPMenu.java new file mode 100644 index 0000000..0cab2dc --- /dev/null +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/rtpmenu/AddonRTPMenu.java @@ -0,0 +1,93 @@ +package me.SuperRonanCraft.BetterRTPAddons.addons.rtpmenu; + +import me.SuperRonanCraft.BetterRTP.player.commands.RTPCommand; +import me.SuperRonanCraft.BetterRTP.player.commands.types.CmdTeleport; +import me.SuperRonanCraft.BetterRTP.references.customEvents.RTP_CommandEvent; +import me.SuperRonanCraft.BetterRTP.references.player.HelperPlayer; +import me.SuperRonanCraft.BetterRTP.references.player.playerdata.PlayerData; +import me.SuperRonanCraft.BetterRTPAddons.Addon; +import me.SuperRonanCraft.BetterRTPAddons.Main; +import me.SuperRonanCraft.BetterRTPAddons.util.Files; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.HandlerList; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; + +import java.util.HashMap; +import java.util.Objects; + +public class AddonRTPMenu implements Addon, Listener { + + private static String name = "RTPMenu"; + private final HashMap playerData = new HashMap<>(); + + public MenuData getData(Player p) { + return playerData.getOrDefault(p, null); + } + + @Override + public boolean isEnabled() { + return getFile(Files.FILETYPE.CONFIG).getBoolean(name + ".Enabled"); + } + + @Override + public void load() { + for (Player p : playerData.keySet()) + p.closeInventory(); + playerData.clear(); + HandlerList.unregisterAll(this); + Bukkit.getServer().getPluginManager().registerEvents(this, Main.getInstance()); + } + + @Override + public void unload() { + + } + + @Override + public RTPCommand getCmd() { + return null; + } + + @EventHandler + private void onClick(InventoryClickEvent e) { + if (validClick(e)) { + e.getWhoClicked().sendMessage("Menu Inventory!"); + } + } + + @EventHandler + private void onClick(RTP_CommandEvent e) { + if (e.getCmd() instanceof CmdTeleport && e.getCmd() instanceof Player) { + e.setCancelled(true); + RTPMenu_CreateInventory.createInv((Player) e.getSendi()); + } + } + + private boolean validClick(InventoryClickEvent e) { + //Not a player, or Not our inventory + if (!(e.getWhoClicked() instanceof Player) || e.isCancelled()) + return false; + // Item is clicked + else if (e.getCurrentItem() == null || e.getCurrentItem().getType().equals(Material.AIR)) + return false; + else if (e.getWhoClicked() instanceof Player) { + // Clicks the inventory + MenuData data = playerData.getOrDefault((Player) e.getWhoClicked(), null); + if (data != null) { + if (!e.getInventory().equals(data.getMenuInv())) + return false; + // Clicks their own inventory + else if (!Objects.equals(e.getClickedInventory(), data.getMenuInv())) { + e.setCancelled(true); + return false; + } + } else + return false; + } + return true; + } +} diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/rtpmenu/MenuData.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/rtpmenu/MenuData.java new file mode 100644 index 0000000..a68d79d --- /dev/null +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/rtpmenu/MenuData.java @@ -0,0 +1,11 @@ +package me.SuperRonanCraft.BetterRTPAddons.addons.rtpmenu; + +import lombok.Getter; +import lombok.Setter; +import org.bukkit.inventory.Inventory; + +public class MenuData { + + @Getter @Setter Inventory menuInv; + +} diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/rtpmenu/RTPMenu_CreateInventory.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/rtpmenu/RTPMenu_CreateInventory.java new file mode 100644 index 0000000..75b4a8b --- /dev/null +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/rtpmenu/RTPMenu_CreateInventory.java @@ -0,0 +1,11 @@ +package me.SuperRonanCraft.BetterRTPAddons.addons.rtpmenu; + +import org.bukkit.entity.Player; + +public class RTPMenu_CreateInventory { + + public static void createInv(Player p) { + + } + +} diff --git a/BetterRTPAddons/src/main/resources/config.yml b/BetterRTPAddons/src/main/resources/config.yml index b4596a3..15c8127 100644 --- a/BetterRTPAddons/src/main/resources/config.yml +++ b/BetterRTPAddons/src/main/resources/config.yml @@ -44,6 +44,7 @@ MagicStick: - '&7a brand new adventure!' Take: true +#Addon Commands Commands: Enabled: false Events: @@ -56,5 +57,13 @@ Commands: Commands: - 'broadcast &e%player_name% moved while trying to rtp, chump!' +#Addon Parties Parties: - Enabled: true \ No newline at end of file + Enabled: true + +#Addon RTPMenu (Enable `/rtp` world select menu) +RTPMenu: + Enabled: false + Worlds: + - world + - world_nether \ No newline at end of file diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/Commands.java b/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/Commands.java index 566f0c1..9b3b0d8 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/Commands.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/Commands.java @@ -1,6 +1,7 @@ package me.SuperRonanCraft.BetterRTP.player.commands; import me.SuperRonanCraft.BetterRTP.BetterRTP; +import me.SuperRonanCraft.BetterRTP.player.commands.types.CmdTeleport; import me.SuperRonanCraft.BetterRTP.references.helpers.HelperRTP; import me.SuperRonanCraft.BetterRTP.references.rtpinfo.CooldownData; import me.SuperRonanCraft.BetterRTP.references.rtpinfo.CooldownHandler; @@ -13,6 +14,7 @@ import org.bukkit.Bukkit; import org.bukkit.block.Biome; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import org.bukkit.event.Event; import java.util.ArrayList; import java.util.List; @@ -27,7 +29,6 @@ public class Commands { } public void load() { - FileBasics.FILETYPE config = FileBasics.FILETYPE.CONFIG; commands.clear(); for (RTPCommandType cmd : RTPCommandType.values()) registerCommand(cmd.getCmd(), false); @@ -44,17 +45,22 @@ public class Commands { for (RTPCommand cmd : commands) { if (cmd.getName().equalsIgnoreCase(args[0])) { if (cmd.permission(sendi)) { - cmd.execute(sendi, label, args); + RTP_CommandEvent event = new RTP_CommandEvent(sendi, cmd); //Command Event - Bukkit.getServer().getPluginManager().callEvent(new RTP_CommandEvent(sendi, cmd)); + Bukkit.getServer().getPluginManager().callEvent(event); + if (!event.isCancelled()) + cmd.execute(sendi, label, args); } else pl.getText().getNoPermission(sendi); return; } } pl.getText().getInvalid(sendi, label); - } else - HelperRTP.rtp(sendi, label, null, null); + } else { + RTP_CommandEvent event = new RTP_CommandEvent(sendi, new CmdTeleport()); + Bukkit.getServer().getPluginManager().callEvent(event); + event.getCmd().execute(sendi, label, args); + } } else pl.getText().getNoPermission(sendi); } diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/types/CmdBiome.java b/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/types/CmdBiome.java index 80277df..e64c003 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/types/CmdBiome.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/types/CmdBiome.java @@ -20,7 +20,7 @@ public class CmdBiome implements RTPCommand, RTPCommandHelpable { //rtp biome public void execute(CommandSender sendi, String label, String[] args) { if (args.length >= 2) - HelperRTP.rtp(sendi, label, null, HelperRTP_Info.getBiomes(args, 1, sendi)); + CmdTeleport.teleport(sendi, label, null, HelperRTP_Info.getBiomes(args, 1, sendi)); else usage(sendi, label); } diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/types/CmdTeleport.java b/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/types/CmdTeleport.java new file mode 100644 index 0000000..5a81d52 --- /dev/null +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/types/CmdTeleport.java @@ -0,0 +1,43 @@ +package me.SuperRonanCraft.BetterRTP.player.commands.types; + +import me.SuperRonanCraft.BetterRTP.BetterRTP; +import me.SuperRonanCraft.BetterRTP.player.commands.RTPCommand; +import me.SuperRonanCraft.BetterRTP.player.rtp.RTP_TYPE; +import me.SuperRonanCraft.BetterRTP.references.helpers.HelperRTP; +import org.bukkit.World; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.List; + +public class CmdTeleport implements RTPCommand { + + //Label is the %command% placeholder in messages + public static void teleport(CommandSender sendi, String label, String world, List biomes) { + if (sendi instanceof Player) + HelperRTP.tp((Player) sendi, sendi, world, biomes, RTP_TYPE.COMMAND); + else + BetterRTP.getInstance().getText().getNotPlayer(sendi, label); + } + + @Override + public void execute(CommandSender sendi, String label, String[] args) { + teleport(sendi, label, null, null); + } + + @Override + public List tabComplete(CommandSender sendi, String[] args) { + return null; + } + + @Override + public boolean permission(CommandSender sendi) { + return true; + } + + @Override + public String getName() { + return null; + } + +} diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/types/CmdWorld.java b/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/types/CmdWorld.java index 5fcc3f9..fcbbb6a 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/types/CmdWorld.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/types/CmdWorld.java @@ -9,6 +9,7 @@ import me.SuperRonanCraft.BetterRTP.references.helpers.HelperRTP_Info; import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.command.CommandSender; +import org.kingdoms.commands.general.misc.CommandTeleport; import java.util.ArrayList; import java.util.List; @@ -22,7 +23,7 @@ public class CmdWorld implements RTPCommand, RTPCommandHelpable { //rtp world public void execute(CommandSender sendi, String label, String[] args) { if (args.length >= 2) - HelperRTP.rtp(sendi, label, args[1], HelperRTP_Info.getBiomes(args, 2, sendi)); + CmdTeleport.teleport(sendi, label, args[1], HelperRTP_Info.getBiomes(args, 2, sendi)); else usage(sendi, label); } diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/references/customEvents/RTP_CommandEvent.java b/src/main/java/me/SuperRonanCraft/BetterRTP/references/customEvents/RTP_CommandEvent.java index e22275f..8db5ba5 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/references/customEvents/RTP_CommandEvent.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/references/customEvents/RTP_CommandEvent.java @@ -2,10 +2,12 @@ package me.SuperRonanCraft.BetterRTP.references.customEvents; import me.SuperRonanCraft.BetterRTP.player.commands.RTPCommand; import org.bukkit.command.CommandSender; +import org.bukkit.event.Cancellable; import org.bukkit.event.HandlerList; -public class RTP_CommandEvent extends RTPEvent { +public class RTP_CommandEvent extends RTPEvent implements Cancellable { + boolean cancelled; CommandSender sendi; RTPCommand cmd; private static final HandlerList handler = new HandlerList(); @@ -22,4 +24,14 @@ public class RTP_CommandEvent extends RTPEvent { public RTPCommand getCmd() { return cmd; } + + @Override + public boolean isCancelled() { + return cancelled; + } + + @Override + public void setCancelled(boolean b) { + cancelled = b; + } } diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/references/helpers/HelperRTP.java b/src/main/java/me/SuperRonanCraft/BetterRTP/references/helpers/HelperRTP.java index 611348f..04c48c9 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/references/helpers/HelperRTP.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/references/helpers/HelperRTP.java @@ -13,13 +13,6 @@ import java.util.List; public class HelperRTP { - public static void rtp(CommandSender sendi, String cmd, String world, List biomes) { - if (sendi instanceof Player) - HelperRTP.tp((Player) sendi, sendi, world, biomes, RTP_TYPE.COMMAND); - else - BetterRTP.getInstance().getText().getNotPlayer(sendi, cmd); - } - //Teleporter and sender are the same public static void tp(Player player, String world, List biomes, RTP_TYPE rtpType) { tp(player, player, world, biomes, rtpType, false, false); @@ -38,8 +31,8 @@ public class HelperRTP { public static void tp(Player player, CommandSender sendi, String world, List biomes, RTP_TYPE rtpType, boolean ignoreCooldown, boolean ignoreDelay, WorldLocations locations) { - if (checkRTPing(player, sendi)) { //Is RTP'ing - if (ignoreCooldown || checkCooldown(sendi, player)) { //Is Cooling down + if (isRTPing(player, sendi)) { //Is RTP'ing + if (ignoreCooldown || isCoolingDown(sendi, player)) { //Is Cooling down boolean delay = false; if (!ignoreDelay && sendi == player) //Forced? if (getPl().getSettings().delayEnabled && getPl().getSettings().delayTime > 0) //Delay enabled? @@ -53,7 +46,7 @@ public class HelperRTP { } } - private static boolean checkRTPing(Player player, CommandSender sendi) { + private static boolean isRTPing(Player player, CommandSender sendi) { if (getPl().getpInfo().getRtping().containsKey(player) && getPl().getpInfo().getRtping().get(player)) { getPl().getText().getAlready(sendi); return false; @@ -61,7 +54,7 @@ public class HelperRTP { return true; } - private static boolean checkCooldown(CommandSender sendi, Player player) { + private static boolean isCoolingDown(CommandSender sendi, Player player) { if (cooldownApplies(sendi, player)) { //Bypassing/Forced? CooldownHandler cooldownHandler = getPl().getCooldowns(); if (!cooldownHandler.isLoaded() || !cooldownHandler.loadedPlayer(player)) { //Cooldowns have yet to download