Added Outlaw change timeout

This commit is contained in:
Elias Müller 2023-12-30 00:36:36 +01:00
parent a3fe1bf737
commit 71c413673d
4 changed files with 29 additions and 16 deletions

View File

@ -0,0 +1,7 @@
package eu.mhsl.craftattack.spawn.appliances.outlawed;
public class OutlawChangeNotPermitted extends Exception {
public OutlawChangeNotPermitted(String message) {
super(message);
}
}

View File

@ -1,7 +0,0 @@
package eu.mhsl.craftattack.spawn.appliances.outlawed;
public class OutlawForcedException extends Exception {
public OutlawForcedException(String message) {
super(message);
}
}

View File

@ -15,11 +15,11 @@ import org.bukkit.entity.Player;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.util.List; import java.util.*;
import java.util.Map;
import java.util.WeakHashMap;
public class Outlawed extends Appliance { public class Outlawed extends Appliance {
public final int timeoutInMs = 1000*60*60*6;
private final Map<UUID, Long> timeouts = new HashMap<>();
public enum Status { public enum Status {
DISABLED, DISABLED,
VOLUNTARILY, VOLUNTARILY,
@ -28,6 +28,7 @@ public class Outlawed extends Appliance {
private final Map<Player, Status> playerStatusMap = new WeakHashMap<>(); private final Map<Player, Status> playerStatusMap = new WeakHashMap<>();
private final String voluntarilyEntry = "voluntarily"; private final String voluntarilyEntry = "voluntarily";
public Outlawed() { public Outlawed() {
super("outlawed"); super("outlawed");
Bukkit.getScheduler().runTaskTimerAsynchronously( 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)) { 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); setLawStatus(player, isOutlawed(player) ? Status.DISABLED : Status.VOLUNTARILY);
setTimeout(player);
} }
public void updateForcedStatus(Player player, boolean forced) { public void updateForcedStatus(Player player, boolean forced) {
@ -61,14 +67,13 @@ public class Outlawed extends Appliance {
} }
public Status getLawStatus(Player player) { 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; if(localConfig().getStringList(voluntarilyEntry).contains(p.getUniqueId().toString())) return Status.VOLUNTARILY;
return Status.DISABLED; return Status.DISABLED;
}); });
return status;
} }
public void setLawStatus(Player player, Status status) { private void setLawStatus(Player player, Status status) {
playerStatusMap.put(player, status); playerStatusMap.put(player, status);
Main.instance().getAppliance(DisplayName.class).update(player); Main.instance().getAppliance(DisplayName.class).update(player);
@ -87,6 +92,14 @@ public class Outlawed extends Appliance {
return getLawStatus(player) != Status.DISABLED; 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) { public Component getStatusDescription(Status status) {
return switch (status) { return switch (status) {
case DISABLED -> Component.text("Vogelfreistatus inaktiv: ", NamedTextColor.GREEN) case DISABLED -> Component.text("Vogelfreistatus inaktiv: ", NamedTextColor.GREEN)

View File

@ -20,7 +20,7 @@ public class OutlawedCommand extends ApplianceCommand.PlayerChecked<Outlawed> {
getAppliance() getAppliance()
.getStatusDescription(getAppliance().getLawStatus(getPlayer())) .getStatusDescription(getAppliance().getLawStatus(getPlayer()))
); );
} catch (OutlawForcedException e) { } catch (OutlawChangeNotPermitted e) {
sender.sendMessage(Component.text(e.getMessage(), NamedTextColor.RED)); sender.sendMessage(Component.text(e.getMessage(), NamedTextColor.RED));
} }
} }