From 418ef2a717598b1a3166f21cce5d83a63a651e51 Mon Sep 17 00:00:00 2001 From: SuperRonanCraft Date: Wed, 27 Dec 2023 23:59:32 -0500 Subject: [PATCH] new RTPOnDeath option for world configuration --- .../BetterRTP/player/events/Death.java | 22 +++ .../player/events/EventListener.java | 10 +- .../BetterRTP/player/rtp/RTP.java | 6 +- .../BetterRTP/player/rtp/RTP_TYPE.java | 1 + .../references/rtpinfo/worlds/RTPWorld.java | 2 + .../rtpinfo/worlds/RTPWorld_Defaulted.java | 3 + .../rtpinfo/worlds/WorldCustom.java | 10 +- .../rtpinfo/worlds/WorldDefault.java | 7 +- .../rtpinfo/worlds/WorldLocation.java | 16 ++- .../rtpinfo/worlds/WorldPermissionGroup.java | 87 ++---------- .../rtpinfo/worlds/WorldPlayer.java | 11 ++ src/main/resources/config-test.yml | 134 ------------------ src/main/resources/config.yml | 2 + 13 files changed, 91 insertions(+), 220 deletions(-) create mode 100644 src/main/java/me/SuperRonanCraft/BetterRTP/player/events/Death.java delete mode 100644 src/main/resources/config-test.yml diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/player/events/Death.java b/src/main/java/me/SuperRonanCraft/BetterRTP/player/events/Death.java new file mode 100644 index 00000000..89feac0c --- /dev/null +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/player/events/Death.java @@ -0,0 +1,22 @@ +package me.SuperRonanCraft.BetterRTP.player.events; + +import me.SuperRonanCraft.BetterRTP.player.rtp.RTPSetupInformation; +import me.SuperRonanCraft.BetterRTP.player.rtp.RTP_TYPE; +import me.SuperRonanCraft.BetterRTP.references.helpers.HelperRTP; +import me.SuperRonanCraft.BetterRTP.references.rtpinfo.worlds.WorldPlayer; +import org.bukkit.entity.Player; +import org.bukkit.event.player.PlayerRespawnEvent; + +public class Death { + + static void respawnEvent(PlayerRespawnEvent e) { + Player p = e.getPlayer(); + WorldPlayer worldPlayer = HelperRTP.getPlayerWorld(new RTPSetupInformation( + p.getWorld(), + p, p, false + )); + if (worldPlayer.getRTPOnDeath()) { + HelperRTP.tp(p, p, p.getWorld(), null, RTP_TYPE.FORCED, true, true); + } + } +} diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/player/events/EventListener.java b/src/main/java/me/SuperRonanCraft/BetterRTP/player/events/EventListener.java index e7f0337d..e6c877b1 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/player/events/EventListener.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/player/events/EventListener.java @@ -6,10 +6,7 @@ import org.bukkit.event.Listener; import org.bukkit.event.block.SignChangeEvent; import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.event.player.PlayerTeleportEvent; +import org.bukkit.event.player.*; import org.bukkit.event.world.WorldLoadEvent; import org.bukkit.plugin.PluginManager; @@ -65,4 +62,9 @@ private void rtpPost(RTP_TeleportPostEvent e) { private void worldLoad(WorldLoadEvent e) { worldLoad.load(e); } + + @EventHandler + private void onRespawn(PlayerRespawnEvent e) { + Death.respawnEvent(e); + } } \ No newline at end of file diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTP.java b/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTP.java index 95bdf304..42426ae3 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTP.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTP.java @@ -22,7 +22,7 @@ public class RTP { - final RTPTeleport teleport = new RTPTeleport(); + @Getter final RTPTeleport teleport = new RTPTeleport(); //Cache public final HashMap overriden = new HashMap<>(); @Getter List disabledWorlds, blockList; @@ -35,10 +35,6 @@ public class RTP { @Getter private final HashMap RTPworldLocations = new HashMap<>(); @Getter private final HashMap permissionGroups = new HashMap<>(); - public RTPTeleport getTeleport() { - return teleport; - } - public void load() { FileOther.FILETYPE config = FileOther.FILETYPE.CONFIG; disabledWorlds = config.getStringList("DisabledWorlds"); diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTP_TYPE.java b/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTP_TYPE.java index 99060c9b..df11f95a 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTP_TYPE.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTP_TYPE.java @@ -3,6 +3,7 @@ public enum RTP_TYPE { COMMAND, //Player executed command FORCED, //Player was forced to rtp (/rtp player ) + RESPAWN, //Player respawned and world has RTPOnDeath enabled JOIN, //Player joined and was rtp'd automatically TEST, //Player was just testing out effects ADDON, //Player RTP'd from the external addons plugin diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/worlds/RTPWorld.java b/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/worlds/RTPWorld.java index 9a624bd5..f9e5feee 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/worlds/RTPWorld.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/worlds/RTPWorld.java @@ -39,4 +39,6 @@ default String getID() { } long getCooldown(); + + boolean getRTPOnDeath(); } diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/worlds/RTPWorld_Defaulted.java b/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/worlds/RTPWorld_Defaulted.java index 54a42701..e834fcef 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/worlds/RTPWorld_Defaulted.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/worlds/RTPWorld_Defaulted.java @@ -32,6 +32,8 @@ public interface RTPWorld_Defaulted { void setCooldown(long value); + void setRTPOnDeath(boolean bool); + default void setupDefaults() { setAllFrom(BetterRTP.getInstance().getRTP().getRTPdefaultWorld()); } @@ -48,5 +50,6 @@ default void setAllFrom(RTPWorld rtpWorld) { setMinY(rtpWorld.getMinY()); setMaxY(rtpWorld.getMaxY()); setCooldown(rtpWorld.getCooldown()); + setRTPOnDeath(rtpWorld.getRTPOnDeath()); } } diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/worlds/WorldCustom.java b/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/worlds/WorldCustom.java index e5f4f5cf..791f0a2d 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/worlds/WorldCustom.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/worlds/WorldCustom.java @@ -14,7 +14,7 @@ public class WorldCustom implements RTPWorld, RTPWorld_Defaulted { public World world; - private boolean useWorldborder; + private boolean useWorldborder, RTPOnDeath; private int centerX, centerZ, maxRad, minRad, price, miny, maxy; private long cooldown; private List biomes; @@ -202,6 +202,10 @@ public long getCooldown() { return cooldown; } + @Override public boolean getRTPOnDeath() { + return RTPOnDeath; + } + //Setters @Override public void setUseWorldBorder(boolean value) { @@ -262,4 +266,8 @@ public void setMaxY(int value) { public void setCooldown(long value) { this.cooldown = value; } + + @Override public void setRTPOnDeath(boolean bool) { + RTPOnDeath = bool; + } } diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/worlds/WorldDefault.java b/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/worlds/WorldDefault.java index d5980fec..d769b745 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/worlds/WorldDefault.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/worlds/WorldDefault.java @@ -13,7 +13,7 @@ import java.util.logging.Logger; public class WorldDefault implements RTPWorld { - private boolean useWorldborder; + private boolean useWorldborder, RTPOnDeath; private int centerX, centerZ, maxRad, minRad, price, miny, maxy; private List Biomes; private final HashMap prices = new HashMap<>(); @@ -26,6 +26,7 @@ public void load() { FileOther.FILETYPE config = BetterRTP.getInstance().getFiles().getType(FileOther.FILETYPE.CONFIG); //Booleans useWorldborder = config.getBoolean(pre + ".UseWorldBorder"); + RTPOnDeath = config.getBoolean(pre + ".RTPOnDeath"); //Integers centerX = config.getInt(pre + ".CenterX"); centerZ = config.getInt(pre + ".CenterZ"); @@ -149,4 +150,8 @@ public int getMaxY() { public long getCooldown() { return BetterRTP.getInstance().getCooldowns().getDefaultCooldownTime(); } + + @Override public boolean getRTPOnDeath() { + return RTPOnDeath; + } } diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/worlds/WorldLocation.java b/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/worlds/WorldLocation.java index 28f9f8aa..7d6a01ed 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/worlds/WorldLocation.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/worlds/WorldLocation.java @@ -14,7 +14,7 @@ import java.util.Map; public class WorldLocation implements RTPWorld, RTPWorld_Defaulted { - private boolean useWorldborder; + private boolean useWorldborder, RTPOnDeath; private int centerX, centerZ, maxRad, minRad, price, miny, maxy; private long cooldown; private List biomes; @@ -143,6 +143,12 @@ public WorldLocation(String location_name) { this.cooldown = Long.parseLong(section.get("Cooldown").toString()); BetterRTP.debug("- - Cooldown: " + cooldown); } + if (section.get("RTPOnDeath") != null) { + if (section.get("RTPOnDeath").getClass() == Boolean.class) { + RTPOnDeath = Boolean.parseBoolean(section.get("RTPOnDeath").toString()); + BetterRTP.debug("- - RTPOnDeath: " + RTPOnDeath); + } + } } } } @@ -217,6 +223,10 @@ public String getID() { public long getCooldown() { return cooldown; } + + @Override public boolean getRTPOnDeath() { + return RTPOnDeath; + } //Setters @Override @@ -278,4 +288,8 @@ public void setMaxY(int value) { public void setCooldown(long value) { this.cooldown = value; } + + @Override public void setRTPOnDeath(boolean bool) { + this.RTPOnDeath = bool; + } } diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/worlds/WorldPermissionGroup.java b/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/worlds/WorldPermissionGroup.java index 72e4475b..3e373ed7 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/worlds/WorldPermissionGroup.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/worlds/WorldPermissionGroup.java @@ -14,7 +14,7 @@ @SuppressWarnings("rawtypes") public class WorldPermissionGroup implements RTPWorld, RTPWorld_Defaulted { - private boolean useWorldborder; + private boolean useWorldborder, RTPOnDeath; private int centerX, centerZ, maxRad, minRad, price, miny, maxy; private List biomes; public World world; @@ -123,6 +123,12 @@ public WorldPermissionGroup(String group, World world, Map.Entry fields) { this.cooldown = Long.parseLong(hash3.getValue().toString()); BetterRTP.debug("- - Cooldown: " + cooldown); } + if (field.equalsIgnoreCase("RTPOnDeath")) { + if (hash3.getValue().getClass() == Boolean.class) { + RTPOnDeath = Boolean.parseBoolean(hash3.getValue().toString()); + BetterRTP.debug("- - RTPOnDeath: " + RTPOnDeath); + } + } } } @@ -186,6 +192,10 @@ public long getCooldown() { return cooldown; } + @Override public boolean getRTPOnDeath() { + return RTPOnDeath; + } + @Override public void setUseWorldBorder(boolean value) { this.useWorldborder = value; @@ -246,78 +256,7 @@ public void setCooldown(long value) { this.cooldown = value; } - /*public static class RTPPermConfiguration { - - boolean valid; - public String name; - public List worlds = new ArrayList<>(); - - RTPPermConfiguration(Map.Entry fields) { - String group = fields.getKey().toString(); - Object value = fields.getValue(); - for (Object worlds : ((ArrayList) value)) { - for (Object hash : ((HashMap) worlds).entrySet()) { - RTPPermConfigurationWorld worldConfig = new RTPPermConfigurationWorld(hash, group); - if (worldConfig.isValid()) - this.worlds.add(worldConfig); - else - BetterRTP.debug("ERROR! Group " + group + " world " + worldConfig.name + " was not setup correctly!"); - } - } - this.name = group; - valid = worlds.size() > 0 && group != null; - } - - boolean isValid() { - return valid; - } + @Override public void setRTPOnDeath(boolean bool) { + this.RTPOnDeath = bool; } - - public static class RTPPermConfigurationWorld { - - boolean valid; - - public int maxRad = -1; - public int minRad = -1; - public int price = -1; - public int centerx = -1; - public int centerz = -1; - public Object useworldborder = null; - - public String name; - - RTPPermConfigurationWorld(Object hash, String group) { - Map.Entry world = (Map.Entry) hash; - this.name = world.getKey().toString(); - //Main.getInstance().getLogger().info("World added to '" + group +"': '" + world.getKey() + "'"); - for (Object hash2 : ((HashMap) world.getValue()).entrySet()) { - Map.Entry hash3 = (Map.Entry) hash2; - String field = hash3.getKey().toString(); - if (field.equalsIgnoreCase("MaxRadius")) { //MaxRadius - maxRad = getInt(hash3.getValue().toString()); - } else if (field.equalsIgnoreCase("MinRadius")) { //MinRadius - minRad = getInt(hash3.getValue().toString()); - } else if (field.equalsIgnoreCase("Price")) { //MinRadius - price = getInt(hash3.getValue().toString()); - } else if (field.equalsIgnoreCase("UseWorldBorder")) { //UseWorldBorder - useworldborder = Boolean.valueOf(hash3.getValue().toString()); - } else if (field.equalsIgnoreCase("CenterX")) { //Center X - centerx = getInt(hash3.getValue().toString()); - } else if (field.equalsIgnoreCase("CenterZ")) { //Center Z - centerz = getInt(hash3.getValue().toString()); - } - } - //Main.getInstance().getLogger().info("World MaxRad '" + world.getKey() + "' is " + maxRad); - //Main.getInstance().getLogger().info("World MinRad '" + world.getKey() + "' is " + minRad); - valid = this.name != null && (minRad != -1 || maxRad != -1); - } - - private int getInt(String input) { - return Integer.parseInt(input); - } - - boolean isValid() { - return valid; - } - }*/ } diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/worlds/WorldPlayer.java b/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/worlds/WorldPlayer.java index 0057d3f2..145fe1d3 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/worlds/WorldPlayer.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/worlds/WorldPlayer.java @@ -18,6 +18,7 @@ public class WorldPlayer implements RTPWorld, RTPWorld_Defaulted { private boolean useWorldborder; + private boolean RTPOnDeath; private int CenterX, CenterZ, maxRad, minRad, price, min_y, max_y; private long cooldown; private List Biomes; @@ -51,6 +52,7 @@ public void setup(String setup_name, RTPWorld world, List biomes) { setup_type = RTP_SETUP_TYPE.PERMISSIONGROUP; this.setup_name = setup_name; setUseWorldBorder(world.getUseWorldborder()); + setRTPOnDeath(world.getRTPOnDeath()); //BetterRTP.getInstance().getLogger().info("WorldPlayer Center x: " + CenterX); setCenterX(world.getCenterX()); @@ -164,6 +166,10 @@ public void setUseWorldBorder(boolean bool) { useWorldborder = bool; } + @Override public void setRTPOnDeath(boolean bool) { + RTPOnDeath = bool; + } + @Override public void setCenterX(int x) { CenterX = x; @@ -240,4 +246,9 @@ public int getMaxY() { public long getCooldown() { return cooldown; } + + @Override public boolean getRTPOnDeath() { + return RTPOnDeath; + } + } diff --git a/src/main/resources/config-test.yml b/src/main/resources/config-test.yml deleted file mode 100644 index 6a1f1101..00000000 --- a/src/main/resources/config-test.yml +++ /dev/null @@ -1,134 +0,0 @@ -# BetterRTP plugin by SuperRonanCraft! (Join my Public Server mc.RonanCraft.net) # -# Need help? go to https://ronancraft.net/discord! # - -Language-File: 'en.yml' - -Settings: - Respect: - ## Respect WorldGuard areas (https://dev.bukkit.org/projects/worldguard) - WorldGuard: false - ## Respect GriefPrevention areas (https://www.spigotmc.org/resources/griefprevention.1884/) - GriefPrevention: false - ## Respect Towny areas (https://www.spigotmc.org/resources/towny.72694/) - Towny: false - ## Respect RedProtect areas (https://www.spigotmc.org/resources/redprotect.15841/) - RedProtect: false - ## Respect FactionsUUID areas (https://www.spigotmc.org/resources/factionsuuid.1035/) - FactionsUUID: false - ## Respect Lands areas (https://www.spigotmc.org/resources/lands.53313/) - Lands: false - ## Respect Residence areas (https://www.spigotmc.org/resources/residence.11480/) - Residence: false - ## Respect KingdomsX areas (https://www.spigotmc.org/resources/kingdomsx.77670/) - KingdomsX: false - ## Output to console some debugging info - Debugger: false - ## Amount of chunks to preload around a safe location - PreloadRadius: 5 - ## Maximum amount of tries before BetterRTP gives up and sends a NotSafeMessage # - MaxAttempts: 32 - RtpOnFirstJoin: # Will execute as console to override delays - Enabled: false # Make the player rtp when joining the server for the first time - World: 'world' # World to first rtp in - SetAsRespawn: false # Save this first rtp as players new spawn point - Cooldown: - Enabled: true # Enabled or disabled cooldown timer - LockAfter: 0 # Lock the player in an infinite cooldown after # rtp's (0 to disable) - Time: 600 # in SECONDS - ## Time between command and actually rtp'ing, time is in SECONDS. Set to "0" to disable delay timer # - Delay: - Enabled: true - Time: 5 - CancelOnMove: true - StatusMessages: true # Send extra information about current status of RTP - DisableUpdater: false - -Default: - UseWorldBorder: false - ## "Biomes: []" means all biomes are allowed! # - ## Biomes are optional, more biomes at https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/block/Biome.html # - Biomes: [] - MaxRadius: 1000 - MinRadius: 10 - ## If "UseWorldBorder" is set to true above, Center X and Z will be ignored! # - CenterX: 0 - CenterZ: 0 - Shape: 'square' - -## Blocks BetterRTP will NOT teleport onto. More Blocks at: https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/Material.html # -BlacklistedBlocks: - - stationary_water - - stationary_lava - - water - - flowing_water - - lava - - flowing_lava - - cactus - - leaves - - leaves_2 - - air - - void_air - - bedrock - - oak_leaves - - jungle_leaves - -## Worlds to NOT allow /rtp in, unless there is an override to another enabled world # -DisabledWorlds: - - prison - - creative - -## Worlds you want to have a custom min/max and spawn center in # -## [MaxRadius] and [MinRadius] MUST be positive! These cannot be equal to each other! -CustomWorlds: - - custom_world_1: - UseWorldBorder: false - ## If UseWorldBorder is true, everything will be ignored EXCEPT "MinRadius"! - MaxRadius: 1000 - MinRadius: 100 - CenterX: 0 - CenterZ: 0 - Price: 50 - Shape: 'square' - - other_custom_world: - MaxRadius: 10000 - MinRadius: 150 - CenterX: 123 - CenterZ: -123 - Price: 0 - ## Biomes are optional, but useful! More biomes: https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/block/Biome.html - Biomes: - - 'desert' - - 'forest' - Shape: 'circle' - -## Override a world and rtp a player executing the command in one world, to another -Overrides: - #FORMAT - : - - master_world: 'world' - - creative_world: 'world' - -WorldType: # Available types are NORMAL, NETHER - - world: NORMAL - - world_nether: NETHER - - world_the_end: NORMAL - -PermissionGroup: #Player requires "betterrtp.group." to trigger these configs - Enabled: false - Groups: - - vip: # permission: betterrtp.config.vip - - Build_World: #World named "Build_World" - MaxRadius: 10000 - MinRadius: 1000 - Price: 100 - - Survival_World: - UseWorldBorder: false - MaxRadius: 5000 - MinRadius: 1000 - CenterX: 10 - CenterZ: 10 - Price: 10 - - vip2: # permission: betterrtp.config.vip2 - - Build_World: - MaxRadius: 25000 - MinRadius: 10000 - Price: 15 \ No newline at end of file diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 57f84e17..2a776f0b 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -81,6 +81,7 @@ Default: Shape: 'square' MaxY: 320 MinY: 0 + RTPOnDeath: false ## Blocks BetterRTP will NOT teleport onto. More Blocks at: https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/Material.html # BlacklistedBlocks: @@ -131,6 +132,7 @@ CustomWorlds: - 'desert' - 'forest' Shape: 'circle' + RTPOnDeath: true ## Override a world and rtp a player executing the command in one world, to another Overrides: