Skip to content

Commit 650178f

Browse files
committed
Adding freezeall functionality - nearly done, but needs work on JoinListener
1 parent 7ea6b21 commit 650178f

File tree

16 files changed

+442
-29
lines changed

16 files changed

+442
-29
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>simplexity</groupId>
88
<artifactId>SimplePlayerFreeze</artifactId>
9-
<version>2.1.0</version>
9+
<version>2.2.0</version>
1010
<packaging>jar</packaging>
1111

1212
<name>SimplePlayerFreeze</name>

src/main/java/simplexity/simpleplayerfreeze/SimplePlayerFreeze.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@
33
import org.bukkit.Server;
44
import org.bukkit.command.ConsoleCommandSender;
55
import org.bukkit.plugin.java.JavaPlugin;
6+
import simplexity.simpleplayerfreeze.commands.FreezeAll;
67
import simplexity.simpleplayerfreeze.commands.FreezePlayer;
78
import simplexity.simpleplayerfreeze.commands.FreezeSpy;
89
import simplexity.simpleplayerfreeze.commands.ReloadConfig;
10+
import simplexity.simpleplayerfreeze.commands.UnfreezeAll;
911
import simplexity.simpleplayerfreeze.commands.UnfreezePlayer;
1012
import simplexity.simpleplayerfreeze.configs.ConfigHandler;
1113
import simplexity.simpleplayerfreeze.listeners.AttackListener;
@@ -14,6 +16,7 @@
1416
import simplexity.simpleplayerfreeze.listeners.CraftingListener;
1517
import simplexity.simpleplayerfreeze.listeners.DropListener;
1618
import simplexity.simpleplayerfreeze.listeners.EXPPickupListener;
19+
import simplexity.simpleplayerfreeze.listeners.FreezeListener;
1720
import simplexity.simpleplayerfreeze.listeners.InteractListener;
1821
import simplexity.simpleplayerfreeze.listeners.InventoryOpenListener;
1922
import simplexity.simpleplayerfreeze.listeners.ItemConsumeListener;
@@ -22,6 +25,7 @@
2225
import simplexity.simpleplayerfreeze.listeners.MoveListener;
2326
import simplexity.simpleplayerfreeze.listeners.PickupListener;
2427
import simplexity.simpleplayerfreeze.listeners.SwitchItemListener;
28+
import simplexity.simpleplayerfreeze.listeners.WorldEnterListener;
2529
import simplexity.simpleplayerfreeze.placeholderapi.IsFrozenPlaceholder;
2630

2731
public final class SimplePlayerFreeze extends JavaPlugin {
@@ -40,6 +44,8 @@ public void onEnable() {
4044
this.getCommand("unfreeze").setExecutor(new UnfreezePlayer());
4145
this.getCommand("freezereload").setExecutor(new ReloadConfig());
4246
this.getCommand("freezespy").setExecutor(new FreezeSpy());
47+
this.getCommand("freezeall").setExecutor(new FreezeAll());
48+
this.getCommand("unfreezeall").setExecutor(new UnfreezeAll());
4349
if (papiEnabled) {
4450
new IsFrozenPlaceholder().register();
4551
}
@@ -65,6 +71,8 @@ private void registerListeners() {
6571
getServer().getPluginManager().registerEvents(new CommandListener(), this);
6672
getServer().getPluginManager().registerEvents(new AttackListener(), this);
6773
getServer().getPluginManager().registerEvents(new InventoryOpenListener(), this);
74+
getServer().getPluginManager().registerEvents(new FreezeListener(), this);
75+
getServer().getPluginManager().registerEvents(new WorldEnterListener(), this);
6876
}
6977

7078
public static ConsoleCommandSender getSFConsoleSender() {

src/main/java/simplexity/simpleplayerfreeze/Util.java

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,16 @@
44
import net.kyori.adventure.text.minimessage.MiniMessage;
55
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
66
import org.bukkit.NamespacedKey;
7+
import org.bukkit.World;
78
import org.bukkit.command.CommandSender;
89
import org.bukkit.entity.Player;
910
import org.bukkit.permissions.Permission;
1011
import org.bukkit.persistence.PersistentDataType;
1112
import simplexity.simpleplayerfreeze.configs.ConfigHandler;
1213
import simplexity.simpleplayerfreeze.configs.LocaleHandler;
1314

15+
import java.util.HashMap;
16+
1417
public class Util {
1518

1619
public static MiniMessage miniMessage = MiniMessage.miniMessage();
@@ -24,6 +27,11 @@ public class Util {
2427
public static Permission freezeNotify = new Permission("spf.notify");
2528
public static Permission freezeChatSpy = new Permission("spf.chatspy");
2629
public static Permission reloadPermission = new Permission("spf.reload");
30+
public static Permission freezeAllPermission = new Permission("spf.freezeall");
31+
public static Permission freezeWorldPermission = new Permission("spf.freezeall.world");
32+
public static Permission freezeServerPermission = new Permission("spf.freezeall.server");
33+
public static HashMap<World, Boolean> worldFrozen = new HashMap<>();
34+
public static boolean serverFrozen = false;
2735

2836
public static void sendErrorMessage(CommandSender sender, String message) {
2937
if (message.isEmpty()) return;
@@ -37,10 +45,25 @@ public static void sendUserMessage(CommandSender sender, String message) {
3745

3846
public static void sendUserMessageWithPlayer(CommandSender sender, String message, Player player) {
3947
if (message.isEmpty()) return;
40-
sender.sendMessage(miniMessage.deserialize(ConfigHandler.getInstance().getPrefix() + message,
48+
sender.sendMessage(miniMessage.deserialize(LocaleHandler.getInstance().getPrefix() + message,
4149
Placeholder.component("name", player.displayName())));
4250
}
4351

52+
public static void sendUserMessageWithPlayerAndWorld(CommandSender sender, String message, World world, Player player) {
53+
if (message.isEmpty()) return;
54+
String worldName = world.getName();
55+
sender.sendMessage(miniMessage.deserialize(LocaleHandler.getInstance().getPrefix() + message,
56+
Placeholder.component("name", player.displayName()),
57+
Placeholder.unparsed("world", worldName)));
58+
}
59+
60+
public static void sendUserMessageWithWorld(CommandSender sender, String message, World world) {
61+
if (message.isEmpty()) return;
62+
String worldName = world.getName();
63+
sender.sendMessage(miniMessage.deserialize(LocaleHandler.getInstance().getPrefix(),
64+
Placeholder.unparsed("world", worldName)));
65+
}
66+
4467
public static void formatMutedMessages(CommandSender sender, String format, Player player, Component message) {
4568
if (format.isEmpty()) return;
4669
sender.sendMessage(miniMessage.deserialize(format,
@@ -53,4 +76,12 @@ public static boolean isFrozen(Player player) {
5376
return player.getPersistentDataContainer().getOrDefault(isFrozenKey, PersistentDataType.BOOLEAN, false);
5477
}
5578

79+
public static void setServerFrozen(boolean frozen) {
80+
serverFrozen = frozen;
81+
}
82+
83+
public static boolean isServerFrozen() {
84+
return serverFrozen;
85+
}
86+
5687
}
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
package simplexity.simpleplayerfreeze.commands;
2+
3+
import org.bukkit.World;
4+
import org.bukkit.command.Command;
5+
import org.bukkit.command.CommandSender;
6+
import org.bukkit.command.TabExecutor;
7+
import org.bukkit.entity.Player;
8+
import org.jetbrains.annotations.NotNull;
9+
import org.jetbrains.annotations.Nullable;
10+
import simplexity.simpleplayerfreeze.SimplePlayerFreeze;
11+
import simplexity.simpleplayerfreeze.Util;
12+
import simplexity.simpleplayerfreeze.configs.LocaleHandler;
13+
import simplexity.simpleplayerfreeze.events.PlayerFreezeEvent;
14+
15+
import java.util.ArrayList;
16+
import java.util.Collection;
17+
import java.util.List;
18+
19+
public class FreezeAll implements TabExecutor {
20+
ArrayList<String> tabComplete = new ArrayList<>();
21+
22+
@Override
23+
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String s, @NotNull String[] args) {
24+
if (freezeWorld(sender, args)) return true;
25+
freezeServer(sender);
26+
return true;
27+
}
28+
29+
@Override
30+
public @Nullable List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String s, @NotNull String[] strings) {
31+
tabComplete.clear();
32+
if (!sender.hasPermission(Util.freezeWorldPermission)) {
33+
return List.of("");
34+
}
35+
List<World> worlds = SimplePlayerFreeze.server.getWorlds();
36+
for (World world : worlds) {
37+
tabComplete.add(world.getName());
38+
}
39+
return tabComplete;
40+
}
41+
42+
public boolean freezeWorld(CommandSender sender, String[] args) {
43+
String worldName;
44+
if (args.length == 0) return false;
45+
if (!sender.hasPermission(Util.freezeWorldPermission)) {
46+
Util.sendErrorMessage(sender, LocaleHandler.getInstance().getNoPermission());
47+
return false;
48+
}
49+
worldName = args[0];
50+
World requestedWorld = SimplePlayerFreeze.server.getWorld(worldName);
51+
if (requestedWorld == null) {
52+
Util.sendErrorMessage(sender, LocaleHandler.getInstance().getWorldNotFound());
53+
return false;
54+
}
55+
List<Player> players = requestedWorld.getPlayers();
56+
for (Player player : players) {
57+
SimplePlayerFreeze.getInstance().getServer().getPluginManager().callEvent(new PlayerFreezeEvent(player, true));
58+
}
59+
Util.worldFrozen.put(requestedWorld, true);
60+
Util.sendUserMessageWithWorld(sender, LocaleHandler.getInstance().getFreezeWorldMessage(), requestedWorld);
61+
return true;
62+
}
63+
64+
public void freezeServer(CommandSender sender) {
65+
if (!sender.hasPermission(Util.freezeServerPermission)) {
66+
Util.sendErrorMessage(sender, LocaleHandler.getInstance().getNoPermission());
67+
return;
68+
}
69+
Collection<? extends Player> players = SimplePlayerFreeze.server.getOnlinePlayers();
70+
for (Player player : players) {
71+
SimplePlayerFreeze.getInstance().getServer().getPluginManager().callEvent(new PlayerFreezeEvent(player, true));
72+
}
73+
Util.setServerFrozen(true);
74+
Util.sendUserMessage(sender, LocaleHandler.getInstance().getFreezeServerMessage());
75+
}
76+
}
77+

src/main/java/simplexity/simpleplayerfreeze/commands/FreezePlayer.java

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,15 @@
66
import org.bukkit.command.CommandSender;
77
import org.bukkit.entity.Player;
88
import org.jetbrains.annotations.NotNull;
9+
import simplexity.simpleplayerfreeze.SimplePlayerFreeze;
910
import simplexity.simpleplayerfreeze.Util;
1011
import simplexity.simpleplayerfreeze.configs.LocaleHandler;
11-
import simplexity.simpleplayerfreeze.freeze.FreezeFunctionality;
12+
import simplexity.simpleplayerfreeze.events.PlayerFreezeEvent;
1213

1314
public class FreezePlayer implements CommandExecutor {
14-
15+
1516
// Freezes the player, or unfreezes the player if they are already frozen.
16-
17+
1718
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String s, @NotNull String[] strings) {
1819
if (!sender.hasPermission(Util.freezePermission)) {
1920
Util.sendErrorMessage(sender, LocaleHandler.getInstance().getNoPermission());
@@ -28,18 +29,19 @@ public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command
2829
if (player == null) {
2930
Util.sendErrorMessage(sender, LocaleHandler.getInstance().getNoPermission());
3031
return false;
31-
} else if (player.hasPermission(Util.freezeBypassPermission)) {
32-
Util.sendErrorMessage( sender, LocaleHandler.getInstance().getCannotBeFrozen());
32+
}
33+
if (player.hasPermission(Util.freezeBypassPermission)) {
34+
Util.sendErrorMessage(sender, LocaleHandler.getInstance().getCannotBeFrozen());
3335
return false;
34-
} else if (Util.isFrozen(player) && sender.hasPermission(Util.unfreezePermission)) {
35-
FreezeFunctionality.setUnfrozen(player);
36+
}
37+
if (Util.isFrozen(player)) {
38+
SimplePlayerFreeze.getInstance().getServer().getPluginManager().callEvent(new PlayerFreezeEvent(player, false));
3639
Util.sendUserMessageWithPlayer(sender, LocaleHandler.getInstance().getUnfreezeMessage(), player);
37-
return true;
3840
} else {
39-
FreezeFunctionality.setFrozen(player);
41+
SimplePlayerFreeze.getInstance().getServer().getPluginManager().callEvent(new PlayerFreezeEvent(player, true));
4042
Util.sendUserMessageWithPlayer(sender, LocaleHandler.getInstance().getFreezeMessage(), player);
4143
}
4244
return true;
4345
}
44-
4546
}
47+
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
package simplexity.simpleplayerfreeze.commands;
2+
3+
import org.bukkit.World;
4+
import org.bukkit.command.Command;
5+
import org.bukkit.command.CommandSender;
6+
import org.bukkit.command.TabExecutor;
7+
import org.bukkit.entity.Player;
8+
import org.jetbrains.annotations.NotNull;
9+
import org.jetbrains.annotations.Nullable;
10+
import simplexity.simpleplayerfreeze.SimplePlayerFreeze;
11+
import simplexity.simpleplayerfreeze.Util;
12+
import simplexity.simpleplayerfreeze.configs.LocaleHandler;
13+
import simplexity.simpleplayerfreeze.events.PlayerFreezeEvent;
14+
15+
import java.util.ArrayList;
16+
import java.util.Collection;
17+
import java.util.List;
18+
19+
public class UnfreezeAll implements TabExecutor {
20+
ArrayList<String> tabComplete = new ArrayList<>();
21+
22+
@Override
23+
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String s, @NotNull String[] args) {
24+
if (unfreezeWorld(sender, args)) return true;
25+
freezeServer(sender);
26+
return true;
27+
}
28+
29+
@Override
30+
public @Nullable List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String s, @NotNull String[] strings) {
31+
tabComplete.clear();
32+
if (!sender.hasPermission(Util.freezeWorldPermission)) {
33+
return List.of("");
34+
}
35+
for (World world : Util.worldFrozen.keySet()) {
36+
tabComplete.add(world.getName());
37+
}
38+
return tabComplete;
39+
}
40+
41+
public boolean unfreezeWorld(CommandSender sender, String[] args) {
42+
String worldName;
43+
if (args.length == 0) return false;
44+
if (!sender.hasPermission(Util.freezeWorldPermission)) {
45+
Util.sendErrorMessage(sender, LocaleHandler.getInstance().getNoPermission());
46+
return false;
47+
}
48+
worldName = args[0];
49+
World requestedWorld = SimplePlayerFreeze.server.getWorld(worldName);
50+
if (requestedWorld == null) {
51+
Util.sendErrorMessage(sender, LocaleHandler.getInstance().getWorldNotFound());
52+
return false;
53+
}
54+
List<Player> players = requestedWorld.getPlayers();
55+
for (Player player : players) {
56+
SimplePlayerFreeze.getInstance().getServer().getPluginManager().callEvent(new PlayerFreezeEvent(player, false));
57+
}
58+
Util.worldFrozen.remove(requestedWorld);
59+
Util.sendUserMessageWithWorld(sender, LocaleHandler.getInstance().getUnfreezeWorldMessage(), requestedWorld);
60+
return true;
61+
}
62+
63+
public void freezeServer(CommandSender sender) {
64+
if (!sender.hasPermission(Util.freezeServerPermission)) {
65+
Util.sendErrorMessage(sender, LocaleHandler.getInstance().getNoPermission());
66+
return;
67+
}
68+
Collection<? extends Player> players = SimplePlayerFreeze.server.getOnlinePlayers();
69+
for (Player player : players) {
70+
SimplePlayerFreeze.getInstance().getServer().getPluginManager().callEvent(new PlayerFreezeEvent(player, false));
71+
}
72+
Util.setServerFrozen(false);
73+
Util.sendUserMessage(sender, LocaleHandler.getInstance().getUnfreezeServerMessage());
74+
}
75+
}
76+

src/main/java/simplexity/simpleplayerfreeze/configs/ConfigHandler.java

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,11 @@
99
public class ConfigHandler {
1010

1111
private static ConfigHandler instance;
12-
private String prefix = "";
1312
private String placeholderAPIFormat;
1413
private boolean freezePersist, freezeGlow, freezeDismount, freezeFlight, freezeInvulnerability, preventMovement,
1514
preventInteract, preventCrafting, preventXPPickup, preventItemPickup, preventItemDrop, preventItemUse,
1615
preventHotbarSwitch, preventInventoryInteraction, preventInventoryOpen, preventWalking, preventCommands, preventAttack, consoleSeesMutedMessages,
17-
consoleFreezeLoginNotified, preventJumping;
16+
consoleFreezeLoginNotified, preventJumping, freezeNewLogins, freezeWorldChange, notifyWorldChange, notifyNewLogins;
1817
public static int chatBehavior;
1918
public static ArrayList<String> whitelistedCommandList = new ArrayList<>();
2019

@@ -64,6 +63,10 @@ private void reloadConfigBooleans() {
6463
preventInventoryOpen = config.getBoolean("prevent-inventory-open", true);
6564
consoleSeesMutedMessages = config.getBoolean("console-sees-muted-messages", true);
6665
consoleFreezeLoginNotified = config.getBoolean("console-freeze-login-notified", true);
66+
freezeNewLogins = config.getBoolean("freeze-new-logins", true);
67+
freezeWorldChange = config.getBoolean("freeze-world-change", true);
68+
notifyWorldChange = config.getBoolean("notify-world-change", true);
69+
notifyNewLogins = config.getBoolean("notify-new-logins", true);
6770
}
6871

6972
private static void reloadConfigCommands() {
@@ -158,10 +161,6 @@ public String getPlaceholderAPIFormat() {
158161
return placeholderAPIFormat;
159162
}
160163

161-
public String getPrefix() {
162-
return prefix;
163-
}
164-
165164
public boolean shouldPreventJumping() {
166165
return preventJumping;
167166
}
@@ -173,4 +172,20 @@ public boolean shouldPreventAttack() {
173172
public boolean shouldPreventInventoryOpen() {
174173
return preventInventoryOpen;
175174
}
175+
176+
public boolean shouldFreezeNewLogins() {
177+
return freezeNewLogins;
178+
}
179+
180+
public boolean shouldFreezeWorldChange() {
181+
return freezeWorldChange;
182+
}
183+
184+
public boolean shouldNotifyWorldChange() {
185+
return notifyWorldChange;
186+
}
187+
188+
public boolean shouldNotifyNewLogins() {
189+
return notifyNewLogins;
190+
}
176191
}

0 commit comments

Comments
 (0)