From 71c413673d5f2da2cc3e87c4c6c1a00604c5d5f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20M=C3=BCller?= Date: Sat, 30 Dec 2023 00:36:36 +0100 Subject: [PATCH] Added Outlaw change timeout --- .../outlawed/OutlawChangeNotPermitted.java | 7 +++++ .../outlawed/OutlawForcedException.java | 7 ----- .../spawn/appliances/outlawed/Outlawed.java | 29 ++++++++++++++----- .../appliances/outlawed/OutlawedCommand.java | 2 +- 4 files changed, 29 insertions(+), 16 deletions(-) create mode 100644 src/main/java/eu/mhsl/craftattack/spawn/appliances/outlawed/OutlawChangeNotPermitted.java delete mode 100644 src/main/java/eu/mhsl/craftattack/spawn/appliances/outlawed/OutlawForcedException.java diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/outlawed/OutlawChangeNotPermitted.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/outlawed/OutlawChangeNotPermitted.java new file mode 100644 index 0000000..080ee1c --- /dev/null +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/outlawed/OutlawChangeNotPermitted.java @@ -0,0 +1,7 @@ +package eu.mhsl.craftattack.spawn.appliances.outlawed; + +public class OutlawChangeNotPermitted extends Exception { + public OutlawChangeNotPermitted(String message) { + super(message); + } +} diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/outlawed/OutlawForcedException.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/outlawed/OutlawForcedException.java deleted file mode 100644 index d3fb430..0000000 --- a/src/main/java/eu/mhsl/craftattack/spawn/appliances/outlawed/OutlawForcedException.java +++ /dev/null @@ -1,7 +0,0 @@ -package eu.mhsl.craftattack.spawn.appliances.outlawed; - -public class OutlawForcedException extends Exception { - public OutlawForcedException(String message) { - super(message); - } -} diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/outlawed/Outlawed.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/outlawed/Outlawed.java index cabca11..80df01a 100644 --- a/src/main/java/eu/mhsl/craftattack/spawn/appliances/outlawed/Outlawed.java +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/outlawed/Outlawed.java @@ -15,11 +15,11 @@ import org.bukkit.entity.Player; import org.bukkit.event.Listener; import org.jetbrains.annotations.NotNull; -import java.util.List; -import java.util.Map; -import java.util.WeakHashMap; +import java.util.*; public class Outlawed extends Appliance { + public final int timeoutInMs = 1000*60*60*6; + private final Map timeouts = new HashMap<>(); public enum Status { DISABLED, VOLUNTARILY, @@ -28,6 +28,7 @@ public class Outlawed extends Appliance { private final Map playerStatusMap = new WeakHashMap<>(); private final String voluntarilyEntry = "voluntarily"; + public Outlawed() { super("outlawed"); Bukkit.getScheduler().runTaskTimerAsynchronously( @@ -48,12 +49,17 @@ public class Outlawed extends Appliance { ); } - public void switchLawStatus(Player player) throws OutlawForcedException { + public void switchLawStatus(Player player) throws OutlawChangeNotPermitted { if(getLawStatus(player).equals(Status.FORCED)) { - throw new OutlawForcedException("Dein Vogelfreistatus wurde als Strafe auferlegt und kann daher nicht verändert werden."); + throw new OutlawChangeNotPermitted("Dein Vogelfreistatus wurde als Strafe auferlegt und kann daher nicht verändert werden."); + } + + if(isTimeout(player)) { + throw new OutlawChangeNotPermitted("Du kannst deinen Vogelfreistatus nicht so schnell wechseln. Bitte warte einige Stunden bevor du umschaltest!"); } setLawStatus(player, isOutlawed(player) ? Status.DISABLED : Status.VOLUNTARILY); + setTimeout(player); } public void updateForcedStatus(Player player, boolean forced) { @@ -61,14 +67,13 @@ public class Outlawed extends Appliance { } public Status getLawStatus(Player player) { - Status status = playerStatusMap.computeIfAbsent(player, p -> { + return playerStatusMap.computeIfAbsent(player, p -> { if(localConfig().getStringList(voluntarilyEntry).contains(p.getUniqueId().toString())) return Status.VOLUNTARILY; return Status.DISABLED; }); - return status; } - public void setLawStatus(Player player, Status status) { + private void setLawStatus(Player player, Status status) { playerStatusMap.put(player, status); Main.instance().getAppliance(DisplayName.class).update(player); @@ -87,6 +92,14 @@ public class Outlawed extends Appliance { return getLawStatus(player) != Status.DISABLED; } + private boolean isTimeout(Player player) { + return timeouts.get(player.getUniqueId()) < System.currentTimeMillis() - timeoutInMs; + } + + private void setTimeout(Player player) { + timeouts.put(player.getUniqueId(), System.currentTimeMillis()); + } + public Component getStatusDescription(Status status) { return switch (status) { case DISABLED -> Component.text("Vogelfreistatus inaktiv: ", NamedTextColor.GREEN) diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/outlawed/OutlawedCommand.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/outlawed/OutlawedCommand.java index e1c394d..3188c5d 100644 --- a/src/main/java/eu/mhsl/craftattack/spawn/appliances/outlawed/OutlawedCommand.java +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/outlawed/OutlawedCommand.java @@ -20,7 +20,7 @@ public class OutlawedCommand extends ApplianceCommand.PlayerChecked { getAppliance() .getStatusDescription(getAppliance().getLawStatus(getPlayer())) ); - } catch (OutlawForcedException e) { + } catch (OutlawChangeNotPermitted e) { sender.sendMessage(Component.text(e.getMessage(), NamedTextColor.RED)); } }