diff --git a/NookureStaff-API/src/main/java/com/nookure/staff/api/config/bukkit/partials/messages/FreezeMessagePartial.java b/NookureStaff-API/src/main/java/com/nookure/staff/api/config/bukkit/partials/messages/FreezeMessagePartial.java index 6c2f14dc..67d45f64 100644 --- a/NookureStaff-API/src/main/java/com/nookure/staff/api/config/bukkit/partials/messages/FreezeMessagePartial.java +++ b/NookureStaff-API/src/main/java/com/nookure/staff/api/config/bukkit/partials/messages/FreezeMessagePartial.java @@ -82,6 +82,22 @@ public class FreezeMessagePartial { @Comment("Message sent when a player is punished") private String punishMessage = "Freeze » You have punished {player}."; + @Setting + @Comment("Message sent when the timer has been paused for a player") + private String theTimerHasBeenPausedFor = "Freeze » The timer has been paused for {player}."; + + @Setting + @Comment("Message sent when the staff has paused the timer for a player") + private String theStaffHasPausedTheTimer = "Freeze » The staff has paused the timer for you"; + + @Setting + @Comment("Message sent when a player is not frozen.") + private String playerNotFrozen = "Freeze » That player is not frozen."; + + public String playerNotFrozen() { + return playerNotFrozen; + } + public String frozenMessage() { return frozenMessage; } @@ -141,4 +157,12 @@ public String forgiveMessage() { public String punishMessage() { return punishMessage; } + + public String theTimerHasBeenPausedFor() { + return theTimerHasBeenPausedFor; + } + + public String theStaffHasPausedTheTimer() { + return theStaffHasPausedTheTimer; + } } diff --git a/NookureStaff-Paper/src/main/java/com/nookure/staff/paper/command/FreezeCommand.java b/NookureStaff-Paper/src/main/java/com/nookure/staff/paper/command/FreezeCommand.java index a346e3da..ec4092fa 100644 --- a/NookureStaff-Paper/src/main/java/com/nookure/staff/paper/command/FreezeCommand.java +++ b/NookureStaff-Paper/src/main/java/com/nookure/staff/paper/command/FreezeCommand.java @@ -120,6 +120,11 @@ protected void onStaffCommand(@NotNull StaffPlayerWrapper sender, @NotNull Strin PlayerWrapper target = optionalTarget.get(); + if (args.size() >= 2 && args.get(1).equalsIgnoreCase("pause")) { + freezeExtension.pauseFreeze(target, sender); + return; + } + if (freezeManager.isFrozen(target.getUniqueId())) { freezeExtension.unfreezePlayer(target); } else { @@ -129,6 +134,15 @@ protected void onStaffCommand(@NotNull StaffPlayerWrapper sender, @NotNull Strin @Override public @NotNull List onTabComplete(@NotNull CommandSender sender, @NotNull String label, @NotNull List args) { - return getSuggestionFilter(Bukkit.getOnlinePlayers().stream().map(Player::getName).toList(), args.getFirst()); + switch (args.size()) { + case 1 -> { + return getSuggestionFilter(Bukkit.getOnlinePlayers().stream().map(Player::getName).toList(), args.getFirst()); + } + case 2 -> { + return List.of("pause"); + } + } + + return super.onTabComplete(sender, label, args); } } diff --git a/NookureStaff-Paper/src/main/java/com/nookure/staff/paper/extension/FreezePlayerExtension.java b/NookureStaff-Paper/src/main/java/com/nookure/staff/paper/extension/FreezePlayerExtension.java index cadb009d..e03ed7da 100644 --- a/NookureStaff-Paper/src/main/java/com/nookure/staff/paper/extension/FreezePlayerExtension.java +++ b/NookureStaff-Paper/src/main/java/com/nookure/staff/paper/extension/FreezePlayerExtension.java @@ -68,6 +68,19 @@ public void executeFreezeCommands(@NotNull PlayerWrapper target, @NotNull String config.get().freeze.commands().forEach(command -> execute(target, command, name)); } + public void pauseFreeze(@NotNull final PlayerWrapper target, @NotNull final PlayerWrapper staff) { + freezeManager.getFreezeContainer(target.getUniqueId()).ifPresentOrElse(container -> { + container.setTimeLeft(-1); + target.sendMiniMessage(messages.get().freeze.theStaffHasPausedTheTimer()); + + eventMessenger.publish(staff, new BroadcastMessage(messages.get().freeze.theTimerHasBeenPausedFor() + .replace("{player}", target.getName()) + .replace("{staff}", staff.getName()), + Permissions.STAFF_FREEZE) + ); + }, () -> target.sendMiniMessage(messages.get().freeze.playerNotOnline())); + } + public void execute(@NotNull PlayerWrapper player, @NotNull String command, @NotNull String name) { requireNonNull(player, "Player cannot be null"); requireNonNull(command, "Command cannot be null");