Cooldowns revamp

This commit is contained in:
SuperRonanCraft 2020-08-10 12:02:44 -04:00
parent 481ed0c33e
commit b394f37f93
11 changed files with 92 additions and 40 deletions

View File

@ -1,7 +1,7 @@
package me.SuperRonanCraft.BetterRTP; package me.SuperRonanCraft.BetterRTP;
import me.SuperRonanCraft.BetterRTP.player.PlayerInfo; 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.commands.Commands;
import me.SuperRonanCraft.BetterRTP.player.events.Listener; import me.SuperRonanCraft.BetterRTP.player.events.Listener;
import me.SuperRonanCraft.BetterRTP.references.depends.DepEconomy; import me.SuperRonanCraft.BetterRTP.references.depends.DepEconomy;

View File

@ -1,5 +1,6 @@
package me.SuperRonanCraft.BetterRTP.player.commands; package me.SuperRonanCraft.BetterRTP.player.commands;
import me.SuperRonanCraft.BetterRTP.player.rtp.RTPCooldown;
import me.SuperRonanCraft.BetterRTP.references.file.FileBasics; import me.SuperRonanCraft.BetterRTP.references.file.FileBasics;
import me.SuperRonanCraft.BetterRTP.Main; import me.SuperRonanCraft.BetterRTP.Main;
import org.bukkit.block.Biome; import org.bukkit.block.Biome;
@ -15,21 +16,18 @@ import java.util.UUID;
public class Commands { public class Commands {
private final Main pl; private final Main pl;
public HashMap<UUID, Long> cooldowns = new HashMap<>();
public HashMap<UUID, Boolean> rtping = new HashMap<>(); public HashMap<UUID, Boolean> rtping = new HashMap<>();
private boolean cooldownTimer; public RTPCooldown cooldowns = new RTPCooldown();
private int timer, cooldown; private int delayTimer;
public Commands(Main pl) { public Commands(Main pl) {
this.pl = pl; this.pl = pl;
} }
public void load() { public void load() {
FileBasics.FILETYPE config = pl.getFiles().getType(FileBasics.FILETYPE.CONFIG); FileBasics.FILETYPE config = FileBasics.FILETYPE.CONFIG;
timer = config.getInt("Settings.Delay.Time"); delayTimer = config.getInt("Settings.Delay.Time");
cooldownTimer = config.getBoolean("Settings.Cooldown.Enabled"); cooldowns.load();
cooldown = config.getInt("Settings.Cooldown.Time");
cooldowns.clear();
} }
public void commandExecuted(CommandSender sendi, String label, String[] args) { public void commandExecuted(CommandSender sendi, String label, String[] args) {
@ -122,7 +120,7 @@ public class Commands {
if (checkDelay(sendi, player)) { if (checkDelay(sendi, player)) {
boolean delay = false; boolean delay = false;
if (!pl.getPerms().getBypassDelay(player)) if (!pl.getPerms().getBypassDelay(player))
if (timer != 0) if (delayTimer > 0)
if (sendi == player) if (sendi == player)
delay = true; delay = true;
//pl.getRTP().start(player, sendi, world, biomes, delay); //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? else if (sendi != player || pl.getPerms().getBypassCooldown(player)) //Bypassing/Forced?
return true; return true;
else if (cooldownTimer) { //Cooling down? else if (cooldowns.enabled) { //Cooling down?
Player p = (Player) sendi; Player p = (Player) sendi;
if (cooldowns.containsKey(p.getUniqueId())) { if (cooldowns.exists(p.getUniqueId())) {
long Left = ((cooldowns.get(p.getUniqueId()) / 1000) + cooldown) - (System.currentTimeMillis() / 1000); long Left = cooldowns.timeLeft(p.getUniqueId());
if (!pl.getPerms().getBypassDelay(p)) if (!pl.getPerms().getBypassDelay(p))
Left = Left + timer; Left = Left + delayTimer;
if (Left > 0) { if (Left > 0) {
//Still cooling down //Still cooling down
pl.getText().getCooldown(sendi, String.valueOf(Left)); pl.getText().getCooldown(sendi, String.valueOf(Left));
return false; return false;
} else { } else {
//Reset timer, but allow them to tp //Reset timer, but allow them to tp
cooldowns.put(p.getUniqueId(), System.currentTimeMillis()); cooldowns.add(p.getUniqueId());
return true; return true;
} }
} else } else
cooldowns.put(p.getUniqueId(), System.currentTimeMillis()); cooldowns.add(p.getUniqueId());
} }
return true; return true;
} }

View File

@ -1,8 +1,7 @@
package me.SuperRonanCraft.BetterRTP.player.commands.types; package me.SuperRonanCraft.BetterRTP.player.commands.types;
import me.SuperRonanCraft.BetterRTP.Main; import me.SuperRonanCraft.BetterRTP.Main;
import me.SuperRonanCraft.BetterRTP.player.RTPParticles; import me.SuperRonanCraft.BetterRTP.player.rtp.RTPParticles;
import me.SuperRonanCraft.BetterRTP.player.commands.CommandTypes;
import me.SuperRonanCraft.BetterRTP.player.commands.RTPCommand; import me.SuperRonanCraft.BetterRTP.player.commands.RTPCommand;
import me.SuperRonanCraft.BetterRTP.references.worlds.RTPWorld; import me.SuperRonanCraft.BetterRTP.references.worlds.RTPWorld;
import me.SuperRonanCraft.BetterRTP.references.worlds.RTP_WORLD_TYPE; import me.SuperRonanCraft.BetterRTP.references.worlds.RTP_WORLD_TYPE;

View File

@ -9,11 +9,27 @@ import org.bukkit.event.player.PlayerJoinEvent;
public class Join { public class Join {
void event(PlayerJoinEvent e) { void event(PlayerJoinEvent e) {
Player player = e.getPlayer(); Player p = e.getPlayer();
Main pl = Main.getInstance(); updater(p);
if (!pl.getFiles().getType(FileBasics.FILETYPE.CONFIG).getBoolean("Settings.DisableUpdater") && pl.getPerms().getUpdate(player)) rtpOnFirstJoin(p);
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()); //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();
} }
} }

View File

@ -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.RegionContainer;
import com.sk89q.worldguard.bukkit.WGBukkit; 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.file.FileBasics;
import me.SuperRonanCraft.BetterRTP.references.worlds.*; import me.SuperRonanCraft.BetterRTP.references.worlds.*;
import me.ryanhamshire.GriefPrevention.GriefPrevention; 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.block.Block;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -156,7 +159,7 @@ public class RTP {
// Delaying? Else, just go // Delaying? Else, just go
getPl().getCmd().rtping.put(p.getUniqueId(), true); //Cache player so they cant run '/rtp' again while rtp'ing getPl().getCmd().rtping.put(p.getUniqueId(), true); //Cache player so they cant run '/rtp' again while rtp'ing
if (getPl().getSettings().delayEnabled && delay) { if (getPl().getSettings().delayEnabled && delay) {
new Delay(sendi, pWorld, delayTime, cancelOnMove, cancelOnDamage); new RTPDelay(sendi, pWorld, delayTime, cancelOnMove, cancelOnDamage);
} else } else
tp(sendi, pWorld); tp(sendi, pWorld);
} }

View File

@ -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<UUID, Long> 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);
}
}

View File

@ -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.references.worlds.PlayerWorld;
import me.SuperRonanCraft.BetterRTP.Main; import me.SuperRonanCraft.BetterRTP.Main;
@ -12,12 +12,12 @@ import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.event.player.PlayerMoveEvent;
class Delay implements Listener { class RTPDelay implements Listener {
private int run; private int run;
private final PlayerWorld pWorld; private final PlayerWorld pWorld;
private final boolean cancelOnMove, cancelOnDamage; 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.pWorld = pWorld;
this.cancelOnMove = cancelOnMove; this.cancelOnMove = cancelOnMove;
this.cancelOnDamage = cancelOnDamage; 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 () -> { return () -> {
HandlerList.unregisterAll(cls); HandlerList.unregisterAll(cls);
if (getPl().getCmd().rtping.containsKey(pWorld.getPlayer().getUniqueId())) { if (getPl().getCmd().rtping.containsKey(pWorld.getPlayer().getUniqueId())) {

View File

@ -1,4 +1,4 @@
package me.SuperRonanCraft.BetterRTP.player; package me.SuperRonanCraft.BetterRTP.player.rtp;
import me.SuperRonanCraft.BetterRTP.Main; import me.SuperRonanCraft.BetterRTP.Main;
import me.SuperRonanCraft.BetterRTP.references.file.FileBasics; import me.SuperRonanCraft.BetterRTP.references.file.FileBasics;

View File

@ -1,16 +1,13 @@
package me.SuperRonanCraft.BetterRTP.player; package me.SuperRonanCraft.BetterRTP.player.rtp;
import io.papermc.lib.PaperLib; import io.papermc.lib.PaperLib;
import me.SuperRonanCraft.BetterRTP.Main; import me.SuperRonanCraft.BetterRTP.Main;
import me.SuperRonanCraft.BetterRTP.references.file.FileBasics;
import org.bukkit.Chunk; import org.bukkit.Chunk;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Sound; import org.bukkit.Sound;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.util.Vector;
import xyz.xenondevs.particle.ParticleEffect;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;

View File

@ -7,6 +7,7 @@ public class Settings {
public boolean debug; public boolean debug;
public boolean delayEnabled; public boolean delayEnabled;
public boolean firstJoinRtp;
//Dependencies //Dependencies
private SoftDepends depends = new SoftDepends(); private SoftDepends depends = new SoftDepends();
@ -15,6 +16,7 @@ public class Settings {
FileBasics.FILETYPE config = getPl().getFiles().getType(FileBasics.FILETYPE.CONFIG); FileBasics.FILETYPE config = getPl().getFiles().getType(FileBasics.FILETYPE.CONFIG);
debug = config.getBoolean("Settings.Debugger"); debug = config.getBoolean("Settings.Debugger");
delayEnabled = config.getBoolean("Settings.Delay.Enabled"); delayEnabled = config.getBoolean("Settings.Delay.Enabled");
firstJoinRtp = config.getBoolean("Settings.FirstJoinRtp");
} }
public SoftDepends getsDepends() { public SoftDepends getsDepends() {

View File

@ -16,10 +16,11 @@ Settings:
MinRadius: 25 MinRadius: 25
## Maximum amount of tries before BetterRTP gives up and sends a NotSafeMessage # ## Maximum amount of tries before BetterRTP gives up and sends a NotSafeMessage #
MaxAttempts: 15 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: Cooldown:
Enabled: true Enabled: true # Enabled or disabled cooldown timer
Time: 10 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 # ## Time between command and actually rtp'ing, time is in SECONDS. Set to "0" to disable delay timer #
Delay: Delay:
Enabled: true Enabled: true
@ -56,6 +57,7 @@ BlacklistedBlocks:
- leaves_2 - leaves_2
- air - air
- void_air - void_air
- bedrock
## Worlds to NOT allow /rtp in, unless there is an override to another enabled world # ## Worlds to NOT allow /rtp in, unless there is an override to another enabled world #
DisabledWorlds: DisabledWorlds:
@ -84,7 +86,7 @@ CustomWorlds:
## Override a world and rtp a player executing the command in one world, to another ## Override a world and rtp a player executing the command in one world, to another
Overrides: Overrides:
#FORMAT - <CURRENT>:<OTHER> #FORMAT - <CURRENT WORLD>:<DESIRED WORLD>
- master_world: 'world' - master_world: 'world'
- creative_world: 'world' - creative_world: 'world'