diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/types/CmdPlayer.java b/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/types/CmdPlayer.java index 605d324..c566616 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/types/CmdPlayer.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/types/CmdPlayer.java @@ -40,7 +40,7 @@ public class CmdPlayer implements RTPCommand, RTPCommandHelpable { if (args.length == 2) { for (Player p : Bukkit.getOnlinePlayers()) if (p.getDisplayName().toLowerCase().startsWith(args[1].toLowerCase())) - list.add(p.getDisplayName()); + list.add(p.getName()); } else if (args.length == 3) { for (World w : Bukkit.getWorlds()) if (w.getName().startsWith(args[2]) && !Main.getInstance().getRTP().disabledWorlds().contains(w.getName())) 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 a5b80a9..1e3f1a6 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTP.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTP.java @@ -137,6 +137,45 @@ public class RTP { } public void start(Player p, CommandSender sendi, String world_name, List biomes, boolean delay) { - new RTPPlayer(p, this).teleport(sendi, world_name, biomes, delay); + // Check overrides + if (world_name == null) + world_name = p.getWorld().getName(); + if (overriden.containsKey(world_name)) + world_name = overriden.get(world_name); + // Not forced and has 'betterrtp.world.' + if (sendi == p && !getPl().getPerms().getAWorld(sendi, world_name)) { + //getPl().getCmd().cooldowns.remove(p.getUniqueId()); + getPl().getText().getNoPermissionWorld(p, world_name); + return; + } + // Check disabled worlds + if (disabledWorlds.contains(world_name)) { + getPl().getText().getDisabledWorld(sendi, world_name); + //getPl().getCmd().cooldowns.remove(p.getUniqueId()); + return; + } + // Check if nulled or world doesnt exist + if (Bukkit.getWorld(world_name) == null) { + getPl().getText().getNotExist(sendi, world_name); + //getPl().getCmd().cooldowns.remove(p.getUniqueId()); + return; + } + WorldPlayer pWorld = getPlayerWorld(p, world_name, biomes, true); + // Economy + if (!getPl().getEco().charge(sendi, pWorld)) { + //getPl().getCmd().cooldowns.remove(p.getUniqueId()); + return; + } + //Cooldown + getPl().getCmd().cooldowns.add(p.getUniqueId()); + // Delaying? Else, just go + getPl().getCmd().rtping.put(p.getUniqueId(), true); //Cache player so they cant run '/rtp' again while rtp'ing + RTPPlayer rtp = new RTPPlayer(p, this, pWorld); + if (getPl().getSettings().delayEnabled && delay) { + new RTPDelay(sendi, rtp, delayTime, cancelOnMove, cancelOnDamage); + } else { + teleport.beforeTeleportInstant(sendi, p); + rtp.randomlyTeleport(sendi); + } } } \ No newline at end of file diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPDelay.java b/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPDelay.java index 2286e30..5f267e7 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPDelay.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPDelay.java @@ -13,12 +13,10 @@ import org.bukkit.event.player.PlayerMoveEvent; class RTPDelay implements Listener { private int run; - private final WorldPlayer pWorld; private final boolean cancelOnMove, cancelOnDamage; private final RTPPlayer rtp; - RTPDelay(CommandSender sendi, RTPPlayer rtp, WorldPlayer pWorld, int delay, boolean cancelOnMove, boolean cancelOnDamage) { - this.pWorld = pWorld; + RTPDelay(CommandSender sendi, RTPPlayer rtp, int delay, boolean cancelOnMove, boolean cancelOnDamage) { this.cancelOnMove = cancelOnMove; this.cancelOnDamage = cancelOnDamage; this.rtp = rtp; @@ -26,7 +24,7 @@ class RTPDelay implements Listener { } private void delay(CommandSender sendi, int delay) { - getPl().getRTP().getTeleport().beforeTeleportDelay(pWorld.getPlayer(), delay); + getPl().getRTP().getTeleport().beforeTeleportDelay(rtp.getPlayer(), delay); run = Bukkit.getScheduler().scheduleSyncDelayedTask(Main.getInstance(), run(sendi, this), delay * 20); if (cancelOnMove || cancelOnDamage) Bukkit.getPluginManager().registerEvents(this, Main.getInstance()); @@ -36,7 +34,7 @@ class RTPDelay implements Listener { @SuppressWarnings("unused") private void event(PlayerMoveEvent e) { if (cancelOnMove) - if (e.getPlayer().equals(pWorld.getPlayer()) && + if (e.getPlayer().equals(rtp.getPlayer()) && (e.getTo() != null && (e.getTo().getBlockX() != e.getFrom().getBlockX() || e.getTo().getBlockY() != e.getFrom().getBlockY() || @@ -51,7 +49,7 @@ class RTPDelay implements Listener { private void event(EntityDamageEvent e) { if (cancelOnDamage) if (e.getEntity() instanceof Player){ - if (e.getEntity().equals(pWorld.getPlayer())) + if (e.getEntity().equals(rtp.getPlayer())) cancel(); } } @@ -60,18 +58,18 @@ class RTPDelay implements Listener { Bukkit.getScheduler().cancelTask(run); if (!Bukkit.getScheduler().isCurrentlyRunning(run)) { HandlerList.unregisterAll(this); - getPl().getRTP().getTeleport().cancelledTeleport(pWorld.getPlayer()); - getPl().getEco().unCharge(pWorld.getPlayer(), pWorld.getPrice()); - getPl().getCmd().cooldowns.remove(pWorld.getPlayer().getUniqueId()); - getPl().getCmd().rtping.put(pWorld.getPlayer().getUniqueId(), false); + getPl().getRTP().getTeleport().cancelledTeleport(rtp.getPlayer()); + getPl().getEco().unCharge(rtp.getPlayer(), rtp.pWorld); + getPl().getCmd().cooldowns.remove(rtp.getPlayer().getUniqueId()); + getPl().getCmd().rtping.put(rtp.getPlayer().getUniqueId(), false); } } private Runnable run(final CommandSender sendi, final RTPDelay cls) { return () -> { HandlerList.unregisterAll(cls); - if (getPl().getCmd().rtping.containsKey(pWorld.getPlayer().getUniqueId())) - rtp.findSafeLocation(sendi, pWorld); + if (getPl().getCmd().rtping.containsKey(rtp.getPlayer().getUniqueId())) + rtp.randomlyTeleport(sendi); }; } diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPPlayer.java b/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPPlayer.java index 5216560..155548c 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPPlayer.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPPlayer.java @@ -3,7 +3,6 @@ package me.SuperRonanCraft.BetterRTP.player.rtp; import io.papermc.lib.PaperLib; import me.SuperRonanCraft.BetterRTP.Main; import me.SuperRonanCraft.BetterRTP.references.worlds.*; -import org.bukkit.Bukkit; import org.bukkit.Chunk; import org.bukkit.Location; import org.bukkit.World; @@ -18,64 +17,28 @@ public class RTPPlayer { private final Player p; private final RTP settings; + WorldPlayer pWorld; - RTPPlayer(Player p, RTP settings) { + RTPPlayer(Player p, RTP settings, WorldPlayer pWorld) { this.p = p; this.settings = settings; + this.pWorld = pWorld; } - public void teleport(CommandSender sendi, String worldName, List biomes, boolean delay) { - // Check overrides - if (worldName == null) - worldName = p.getWorld().getName(); - if (settings.overriden.containsKey(worldName)) - worldName = settings.overriden.get(worldName); - // Not forced and has 'betterrtp.world.' - if (sendi == p && !getPl().getPerms().getAWorld(sendi, worldName)) { - //getPl().getCmd().cooldowns.remove(p.getUniqueId()); - getPl().getText().getNoPermissionWorld(p, worldName); - return; - } - // Check disabled worlds - if (settings.disabledWorlds.contains(worldName)) { - getPl().getText().getDisabledWorld(sendi, worldName); - //getPl().getCmd().cooldowns.remove(p.getUniqueId()); - return; - } - // Check if nulled or world doesnt exist - if (Bukkit.getWorld(worldName) == null) { - getPl().getText().getNotExist(sendi, worldName); - //getPl().getCmd().cooldowns.remove(p.getUniqueId()); - return; - } - WorldPlayer pWorld = settings.getPlayerWorld(p, worldName, biomes, true); - // Economy - if (!getPl().getEco().charge(p, pWorld.getPrice())) { - //getPl().getCmd().cooldowns.remove(p.getUniqueId()); - return; - } - //Cooldown - getPl().getCmd().cooldowns.add(p.getUniqueId()); - // Delaying? Else, just go - getPl().getCmd().rtping.put(p.getUniqueId(), true); //Cache player so they cant run '/rtp' again while rtp'ing - if (getPl().getSettings().delayEnabled && delay) { - new RTPDelay(sendi, this, pWorld, settings.delayTime, settings.cancelOnMove, settings.cancelOnDamage); - } else { - settings.teleport.beforeTeleportInstant(p); - findSafeLocation(sendi, pWorld); - } + public Player getPlayer() { + return p; } - void findSafeLocation(CommandSender sendi, WorldPlayer pWorld) { + void randomlyTeleport(CommandSender sendi) { if (pWorld.getAttempts() >= settings.maxAttempts) //Cancel out, too many tried - metMax(sendi, pWorld.getPlayer(), pWorld.getPrice()); + metMax(sendi, p); else { //Try again to find a safe location Location loc = pWorld.generateRandomXZ(settings.defaultWorld); //randomLoc(pWorld); CompletableFuture chunk = PaperLib.getChunkAtAsync(pWorld.getWorld(), loc.getBlockX(), loc.getBlockZ()); chunk.thenAccept(result -> { Location tpLoc; - float yaw = pWorld.getPlayer().getLocation().getYaw(); - float pitch = pWorld.getPlayer().getLocation().getPitch(); + float yaw = p.getLocation().getYaw(); + float pitch = p.getLocation().getPitch(); switch (pWorld.getWorldtype()) { //Get a Y position and check for bad blocks case NETHER: tpLoc = getLocAtNether(loc.getBlockX(), loc.getBlockZ(), pWorld.getWorld(), yaw, pitch, pWorld); break; @@ -84,21 +47,21 @@ public class RTPPlayer { tpLoc = getLocAtNormal(loc.getBlockX(), loc.getBlockZ(), pWorld.getWorld(), yaw, pitch, pWorld); } if (tpLoc != null && checkDepends(tpLoc)) - settings.teleport.sendPlayer(sendi, pWorld.getPlayer(), tpLoc, pWorld.getPrice(), pWorld.getAttempts()); + settings.teleport.sendPlayer(sendi, p, tpLoc, pWorld.getPrice(), pWorld.getAttempts()); else - findSafeLocation(sendi, pWorld); + randomlyTeleport(sendi); }); } } // Compressed code for MaxAttempts being met - private void metMax(CommandSender sendi, Player p, int price) { + private void metMax(CommandSender sendi, Player p) { if (p == sendi) getPl().getText().getFailedNotSafe(sendi, settings.maxAttempts); else - getPl().getText().getOtherNotSafe(sendi, settings.maxAttempts, p.getDisplayName()); + getPl().getText().getOtherNotSafe(sendi, settings.maxAttempts, p.getName()); getPl().getCmd().cooldowns.remove(p.getUniqueId()); - getPl().getEco().unCharge(p, price); + getPl().getEco().unCharge(p, pWorld); getPl().getCmd().rtping.put(p.getUniqueId(), false); } diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPTeleport.java b/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPTeleport.java index 8629234..e02c876 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPTeleport.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPTeleport.java @@ -57,7 +57,7 @@ public class RTPTeleport { public void run() { afterTeleport(p, loc, price, attempts); if (sendi != p) //Tell player who requested that the player rtp'd - sendSuccessMsg(sendi, p.getDisplayName(), loc, price, false, attempts); + sendSuccessMsg(sendi, p.getName(), loc, price, false, attempts); getPl().getCmd().rtping.remove(p.getUniqueId()); //No longer rtp'ing } }); @@ -76,14 +76,14 @@ public class RTPTeleport { ePotions.giveEffects(p); eTitles.showTitle(RTPTitles.RTP_TITLE_TYPE.TELEPORT, p, loc, attempts, 0); if (eTitles.sendMsg(RTPTitles.RTP_TITLE_TYPE.TELEPORT)) - sendSuccessMsg(p, p.getDisplayName(), loc, price, true, attempts); + sendSuccessMsg(p, p.getName(), loc, price, true, attempts); } - public void beforeTeleportInstant(Player p) { + public void beforeTeleportInstant(CommandSender sendi, Player p) { eSounds.playDelay(p); eTitles.showTitle(RTPTitles.RTP_TITLE_TYPE.NODELAY, p, p.getLocation(), 0, 0); if (eTitles.sendMsg(RTPTitles.RTP_TITLE_TYPE.NODELAY)) - getPl().getText().getSuccessTeleport(p); + getPl().getText().getSuccessTeleport(sendi); } public void beforeTeleportDelay(Player p, int delay) { //Only Delays should call this diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/references/depends/DepEconomy.java b/src/main/java/me/SuperRonanCraft/BetterRTP/references/depends/DepEconomy.java index 2759ea8..d2a000a 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/references/depends/DepEconomy.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/references/depends/DepEconomy.java @@ -2,9 +2,11 @@ package me.SuperRonanCraft.BetterRTP.references.depends; import me.SuperRonanCraft.BetterRTP.references.file.FileBasics; import me.SuperRonanCraft.BetterRTP.Main; +import me.SuperRonanCraft.BetterRTP.references.worlds.WorldPlayer; import net.milkbowl.vault.economy.Economy; import net.milkbowl.vault.economy.EconomyResponse; import org.bukkit.GameMode; +import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.plugin.RegisteredServiceProvider; @@ -13,14 +15,17 @@ public class DepEconomy { private int hunger = 0; private boolean checked = false; - public boolean charge(Player player, int price) { + public boolean charge(CommandSender sendi, WorldPlayer pWorld) { check(false); + Player player = pWorld.getPlayer(); //Hunger Stuff boolean took_food = false; - if (hunger != 0 && (player.getGameMode() == GameMode.SURVIVAL || player.getGameMode() == GameMode.ADVENTURE)) { + if (hunger != 0 + && sendi == player + && (player.getGameMode() == GameMode.SURVIVAL || player.getGameMode() == GameMode.ADVENTURE)) { boolean has_hunger = player.getFoodLevel() > hunger; if (!has_hunger) { - Main.getInstance().getText().getFailedHunger(player); + Main.getInstance().getText().getFailedHunger(sendi); return false; } else { player.setFoodLevel(player.getFoodLevel() - hunger); @@ -28,15 +33,16 @@ public class DepEconomy { } } //Economy Stuff - if (e != null && price != 0 && !Main.getInstance().getPerms().getBypassEconomy(player)) { + if (e != null && pWorld.getPrice() != 0 && !Main.getInstance().getPerms().getBypassEconomy(sendi)) { try { - EconomyResponse r = e.withdrawPlayer(player, price); + EconomyResponse r = e.withdrawPlayer(player, pWorld.getPrice()); boolean passed_economy = r.transactionSuccess(); if (!passed_economy) { - Main.getInstance().getText().getFailedPrice(player, price); + Main.getInstance().getText().getFailedPrice(sendi, pWorld.getPrice()); if (took_food) player.setFoodLevel(player.getFoodLevel() + hunger); - } + } else + pWorld.eco_money_taken = true; return passed_economy; } catch (Exception e) { e.printStackTrace(); @@ -46,10 +52,9 @@ public class DepEconomy { return true; } - public void unCharge(Player p, int price) { - if (e != null) - if (price != 0) - e.depositPlayer(p, price); + public void unCharge(Player p, WorldPlayer pWorld) { + if (e != null && pWorld.getPrice() != 0 && pWorld.eco_money_taken) + e.depositPlayer(p, pWorld.getPrice()); } public void load() { diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/references/worlds/WorldPlayer.java b/src/main/java/me/SuperRonanCraft/BetterRTP/references/worlds/WorldPlayer.java index 2bf69a3..931188d 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/references/worlds/WorldPlayer.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/references/worlds/WorldPlayer.java @@ -20,6 +20,8 @@ public class WorldPlayer implements RTPWorld { private final World world; private WORLD_TYPE world_type; private RTPPermissionGroup.RTPPermConfiguration config = null; + //Economy + public boolean eco_money_taken = false; public WorldPlayer(CommandSender p, World world) { this.p = p;