diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/Main.java b/src/main/java/me/SuperRonanCraft/BetterRTP/Main.java index 93daea7..2b9a3c4 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/Main.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/Main.java @@ -1,7 +1,7 @@ package me.SuperRonanCraft.BetterRTP; import me.SuperRonanCraft.BetterRTP.player.PlayerInfo; -import me.SuperRonanCraft.BetterRTP.player.RTP; +import me.SuperRonanCraft.BetterRTP.player.rtp.RTP; import me.SuperRonanCraft.BetterRTP.player.commands.Commands; import me.SuperRonanCraft.BetterRTP.player.events.Listener; import me.SuperRonanCraft.BetterRTP.references.depends.DepEconomy; 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 a8b3327..a54fb5c 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/Commands.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/Commands.java @@ -1,5 +1,6 @@ package me.SuperRonanCraft.BetterRTP.player.commands; +import me.SuperRonanCraft.BetterRTP.player.rtp.RTPCooldown; import me.SuperRonanCraft.BetterRTP.references.file.FileBasics; import me.SuperRonanCraft.BetterRTP.Main; import org.bukkit.block.Biome; @@ -15,21 +16,18 @@ import java.util.UUID; public class Commands { private final Main pl; - public HashMap cooldowns = new HashMap<>(); public HashMap rtping = new HashMap<>(); - private boolean cooldownTimer; - private int timer, cooldown; + public RTPCooldown cooldowns = new RTPCooldown(); + private int delayTimer; public Commands(Main pl) { this.pl = pl; } public void load() { - FileBasics.FILETYPE config = pl.getFiles().getType(FileBasics.FILETYPE.CONFIG); - timer = config.getInt("Settings.Delay.Time"); - cooldownTimer = config.getBoolean("Settings.Cooldown.Enabled"); - cooldown = config.getInt("Settings.Cooldown.Time"); - cooldowns.clear(); + FileBasics.FILETYPE config = FileBasics.FILETYPE.CONFIG; + delayTimer = config.getInt("Settings.Delay.Time"); + cooldowns.load(); } public void commandExecuted(CommandSender sendi, String label, String[] args) { @@ -122,7 +120,7 @@ public class Commands { if (checkDelay(sendi, player)) { boolean delay = false; if (!pl.getPerms().getBypassDelay(player)) - if (timer != 0) + if (delayTimer > 0) if (sendi == player) delay = true; //pl.getRTP().start(player, sendi, world, biomes, delay); @@ -138,23 +136,23 @@ public class Commands { } else if (sendi != player || pl.getPerms().getBypassCooldown(player)) //Bypassing/Forced? return true; - else if (cooldownTimer) { //Cooling down? + else if (cooldowns.enabled) { //Cooling down? Player p = (Player) sendi; - if (cooldowns.containsKey(p.getUniqueId())) { - long Left = ((cooldowns.get(p.getUniqueId()) / 1000) + cooldown) - (System.currentTimeMillis() / 1000); + if (cooldowns.exists(p.getUniqueId())) { + long Left = cooldowns.timeLeft(p.getUniqueId()); if (!pl.getPerms().getBypassDelay(p)) - Left = Left + timer; + Left = Left + delayTimer; if (Left > 0) { //Still cooling down pl.getText().getCooldown(sendi, String.valueOf(Left)); return false; } else { //Reset timer, but allow them to tp - cooldowns.put(p.getUniqueId(), System.currentTimeMillis()); + cooldowns.add(p.getUniqueId()); return true; } } else - cooldowns.put(p.getUniqueId(), System.currentTimeMillis()); + cooldowns.add(p.getUniqueId()); } return true; } diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/types/CmdInfo.java b/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/types/CmdInfo.java index aa9c007..0946ee6 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/types/CmdInfo.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/types/CmdInfo.java @@ -1,8 +1,7 @@ package me.SuperRonanCraft.BetterRTP.player.commands.types; import me.SuperRonanCraft.BetterRTP.Main; -import me.SuperRonanCraft.BetterRTP.player.RTPParticles; -import me.SuperRonanCraft.BetterRTP.player.commands.CommandTypes; +import me.SuperRonanCraft.BetterRTP.player.rtp.RTPParticles; import me.SuperRonanCraft.BetterRTP.player.commands.RTPCommand; import me.SuperRonanCraft.BetterRTP.references.worlds.RTPWorld; import me.SuperRonanCraft.BetterRTP.references.worlds.RTP_WORLD_TYPE; diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/player/events/Join.java b/src/main/java/me/SuperRonanCraft/BetterRTP/player/events/Join.java index 2619942..0c69606 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/player/events/Join.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/player/events/Join.java @@ -9,11 +9,27 @@ import org.bukkit.event.player.PlayerJoinEvent; public class Join { void event(PlayerJoinEvent e) { - Player player = e.getPlayer(); - Main pl = Main.getInstance(); - if (!pl.getFiles().getType(FileBasics.FILETYPE.CONFIG).getBoolean("Settings.DisableUpdater") && pl.getPerms().getUpdate(player)) - if (!pl.getDescription().getVersion().equals(Updater.updatedVersion)) - pl.getText().sms(player, "&7There is currently an update for &6BetterRTP &7version &e#" + - Updater.updatedVersion + " &7you have version &e#" + pl.getDescription().getVersion()); + Player p = e.getPlayer(); + updater(p); + rtpOnFirstJoin(p); + } + + //Updater + private void updater(Player p) { + if (!getPl().getFiles().getType(FileBasics.FILETYPE.CONFIG).getBoolean("Settings.DisableUpdater") && getPl().getPerms().getUpdate(p)) + if (!getPl().getDescription().getVersion().equals(Updater.updatedVersion)) + getPl().getText().sms(p, "&7There is currently an update for &6BetterRTP &7version &e#" + + Updater.updatedVersion + " &7you have version &e#" + getPl().getDescription().getVersion()); + } + + //RTP on first join + private void rtpOnFirstJoin(Player p) { + if (getPl().getSettings().firstJoinRtp && !p.hasPlayedBefore()) { + + } + } + + private Main getPl() { + return Main.getInstance(); } } diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/player/RTP.java b/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTP.java similarity index 98% rename from src/main/java/me/SuperRonanCraft/BetterRTP/player/RTP.java rename to src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTP.java index c625bca..8739b0b 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/player/RTP.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTP.java @@ -1,4 +1,4 @@ -package me.SuperRonanCraft.BetterRTP.player; +package me.SuperRonanCraft.BetterRTP.player.rtp; import com.sk89q.worldguard.bukkit.RegionContainer; import com.sk89q.worldguard.bukkit.WGBukkit; @@ -8,7 +8,10 @@ import me.SuperRonanCraft.BetterRTP.Main; import me.SuperRonanCraft.BetterRTP.references.file.FileBasics; import me.SuperRonanCraft.BetterRTP.references.worlds.*; import me.ryanhamshire.GriefPrevention.GriefPrevention; -import org.bukkit.*; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.WorldBorder; import org.bukkit.block.Block; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -156,7 +159,7 @@ public class RTP { // 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 Delay(sendi, pWorld, delayTime, cancelOnMove, cancelOnDamage); + new RTPDelay(sendi, pWorld, delayTime, cancelOnMove, cancelOnDamage); } else tp(sendi, pWorld); } diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPCooldown.java b/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPCooldown.java new file mode 100644 index 0000000..95fb8ed --- /dev/null +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPCooldown.java @@ -0,0 +1,35 @@ +package me.SuperRonanCraft.BetterRTP.player.rtp; + +import me.SuperRonanCraft.BetterRTP.references.file.FileBasics; + +import java.util.HashMap; +import java.util.UUID; + +public class RTPCooldown { + + public HashMap cooldowns = new HashMap<>(); + public boolean enabled; + private int timer; + + public void load() { + FileBasics.FILETYPE config = FileBasics.FILETYPE.CONFIG; + enabled = config.getBoolean("Settings.Cooldown.Enabled"); + timer = config.getInt("Settings.Cooldown.Time"); + } + + public void add(UUID id) { + cooldowns.put(id, System.currentTimeMillis()); + } + + public boolean exists(UUID id) { + return cooldowns.containsKey(id); + } + + public long timeLeft(UUID id) { + return ((cooldowns.getOrDefault(id, (long) 0) / 1000) + timer) - (System.currentTimeMillis() / 1000); + } + + public void remove(UUID id) { + cooldowns.remove(id); + } +} diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/player/Delay.java b/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPDelay.java similarity index 94% rename from src/main/java/me/SuperRonanCraft/BetterRTP/player/Delay.java rename to src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPDelay.java index a8d3991..cbd190f 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/player/Delay.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPDelay.java @@ -1,4 +1,4 @@ -package me.SuperRonanCraft.BetterRTP.player; +package me.SuperRonanCraft.BetterRTP.player.rtp; import me.SuperRonanCraft.BetterRTP.references.worlds.PlayerWorld; import me.SuperRonanCraft.BetterRTP.Main; @@ -12,12 +12,12 @@ import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.player.PlayerMoveEvent; -class Delay implements Listener { +class RTPDelay implements Listener { private int run; private final PlayerWorld pWorld; private final boolean cancelOnMove, cancelOnDamage; - Delay(CommandSender sendi, PlayerWorld pWorld, int delay, boolean cancelOnMove, boolean cancelOnDamage) { + RTPDelay(CommandSender sendi, PlayerWorld pWorld, int delay, boolean cancelOnMove, boolean cancelOnDamage) { this.pWorld = pWorld; this.cancelOnMove = cancelOnMove; this.cancelOnDamage = cancelOnDamage; @@ -85,7 +85,7 @@ class Delay implements Listener { } } - private Runnable run(final CommandSender sendi, final Delay cls) { + private Runnable run(final CommandSender sendi, final RTPDelay cls) { return () -> { HandlerList.unregisterAll(cls); if (getPl().getCmd().rtping.containsKey(pWorld.getPlayer().getUniqueId())) { diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/player/RTPParticles.java b/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPParticles.java similarity index 98% rename from src/main/java/me/SuperRonanCraft/BetterRTP/player/RTPParticles.java rename to src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPParticles.java index acede3e..8230a04 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/player/RTPParticles.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPParticles.java @@ -1,4 +1,4 @@ -package me.SuperRonanCraft.BetterRTP.player; +package me.SuperRonanCraft.BetterRTP.player.rtp; import me.SuperRonanCraft.BetterRTP.Main; import me.SuperRonanCraft.BetterRTP.references.file.FileBasics; diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/player/RTPTeleport.java b/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPTeleport.java similarity index 96% rename from src/main/java/me/SuperRonanCraft/BetterRTP/player/RTPTeleport.java rename to src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPTeleport.java index dc32dad..30b9eb8 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/player/RTPTeleport.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPTeleport.java @@ -1,16 +1,13 @@ -package me.SuperRonanCraft.BetterRTP.player; +package me.SuperRonanCraft.BetterRTP.player.rtp; import io.papermc.lib.PaperLib; import me.SuperRonanCraft.BetterRTP.Main; -import me.SuperRonanCraft.BetterRTP.references.file.FileBasics; import org.bukkit.Chunk; import org.bukkit.Location; import org.bukkit.Sound; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; -import org.bukkit.util.Vector; -import xyz.xenondevs.particle.ParticleEffect; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/references/settings/Settings.java b/src/main/java/me/SuperRonanCraft/BetterRTP/references/settings/Settings.java index 7b473a4..e4576c1 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/references/settings/Settings.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/references/settings/Settings.java @@ -7,6 +7,7 @@ public class Settings { public boolean debug; public boolean delayEnabled; + public boolean firstJoinRtp; //Dependencies private SoftDepends depends = new SoftDepends(); @@ -15,6 +16,7 @@ public class Settings { FileBasics.FILETYPE config = getPl().getFiles().getType(FileBasics.FILETYPE.CONFIG); debug = config.getBoolean("Settings.Debugger"); delayEnabled = config.getBoolean("Settings.Delay.Enabled"); + firstJoinRtp = config.getBoolean("Settings.FirstJoinRtp"); } public SoftDepends getsDepends() { diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 746a3ae..59eb286 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -16,10 +16,11 @@ Settings: MinRadius: 25 ## Maximum amount of tries before BetterRTP gives up and sends a NotSafeMessage # MaxAttempts: 15 - ## Enabled or disabled cooldown timer, time is in SECONDS # + FirstJoinRtp: false # Make the player rtp when joining the server for the first time Cooldown: - Enabled: true - Time: 10 + Enabled: true # Enabled or disabled cooldown timer + LockAfter: 0 # Lock the player in an infinite cooldown after # rtp's (0 to disable) + Time: 10 # in SECONDS ## Time between command and actually rtp'ing, time is in SECONDS. Set to "0" to disable delay timer # Delay: Enabled: true @@ -56,6 +57,7 @@ BlacklistedBlocks: - leaves_2 - air - void_air + - bedrock ## Worlds to NOT allow /rtp in, unless there is an override to another enabled world # DisabledWorlds: @@ -84,7 +86,7 @@ CustomWorlds: ## Override a world and rtp a player executing the command in one world, to another Overrides: - #FORMAT - : + #FORMAT - : - master_world: 'world' - creative_world: 'world'