From 18d347deb884cf06381573b8c51deb08680044cd Mon Sep 17 00:00:00 2001 From: NotSoDelayed <72163224+NotSoDelayed@users.noreply.github.com> Date: Thu, 25 Sep 2025 12:12:56 +0800 Subject: [PATCH 01/10] whitelist events, and moved into modules --- src/main/java/ch/njol/skript/Skript.java | 3 +- .../bukkit/whitelist/WhitelistModule.java | 25 +++++ .../elements}/CondIsWhitelisted.java | 2 +- .../elements/CondWillBeWhitelisted.java | 73 +++++++++++++++ .../elements}/EffEnforceWhitelist.java | 2 +- .../whitelist/elements/EvtWhitelist.java | 91 +++++++++++++++++++ .../whitelist/elements}/ExprWhitelist.java | 3 +- .../syntaxes/events/EvtWhitelistTest.java | 33 +++++++ src/test/skript/junit/EvtWhitelist.sk | 48 ++++++++++ 9 files changed, 275 insertions(+), 5 deletions(-) create mode 100644 src/main/java/org/skriptlang/skript/bukkit/whitelist/WhitelistModule.java rename src/main/java/{ch/njol/skript/conditions => org/skriptlang/skript/bukkit/whitelist/elements}/CondIsWhitelisted.java (97%) create mode 100644 src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/CondWillBeWhitelisted.java rename src/main/java/{ch/njol/skript/effects => org/skriptlang/skript/bukkit/whitelist/elements}/EffEnforceWhitelist.java (97%) create mode 100644 src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/EvtWhitelist.java rename src/main/java/{ch/njol/skript/expressions => org/skriptlang/skript/bukkit/whitelist/elements}/ExprWhitelist.java (96%) create mode 100644 src/test/java/org/skriptlang/skript/test/tests/syntaxes/events/EvtWhitelistTest.java create mode 100644 src/test/skript/junit/EvtWhitelist.sk diff --git a/src/main/java/ch/njol/skript/Skript.java b/src/main/java/ch/njol/skript/Skript.java index e91b144678f..dce6a2d825a 100644 --- a/src/main/java/ch/njol/skript/Skript.java +++ b/src/main/java/ch/njol/skript/Skript.java @@ -102,6 +102,7 @@ import org.skriptlang.skript.bukkit.registration.BukkitRegistryKeys; import org.skriptlang.skript.bukkit.registration.BukkitSyntaxInfos; import org.skriptlang.skript.bukkit.tags.TagModule; +import org.skriptlang.skript.bukkit.whitelist.WhitelistModule; import org.skriptlang.skript.lang.comparator.Comparator; import org.skriptlang.skript.lang.comparator.Comparators; import org.skriptlang.skript.lang.converter.Converter; @@ -587,7 +588,7 @@ public void onEnable() { TagModule.load(); FurnaceModule.load(); LootTableModule.load(); - skript.loadModules(new DamageSourceModule()); + skript.loadModules(new DamageSourceModule(), new WhitelistModule()); } catch (final Exception e) { exception(e, "Could not load required .class files: " + e.getLocalizedMessage()); setEnabled(false); diff --git a/src/main/java/org/skriptlang/skript/bukkit/whitelist/WhitelistModule.java b/src/main/java/org/skriptlang/skript/bukkit/whitelist/WhitelistModule.java new file mode 100644 index 00000000000..53a04030bf5 --- /dev/null +++ b/src/main/java/org/skriptlang/skript/bukkit/whitelist/WhitelistModule.java @@ -0,0 +1,25 @@ +package org.skriptlang.skript.bukkit.whitelist; + +import java.io.IOException; + +import ch.njol.skript.Skript; +import org.skriptlang.skript.addon.AddonModule; +import org.skriptlang.skript.addon.SkriptAddon; + +public class WhitelistModule implements AddonModule { + + @Override + public boolean canLoad(SkriptAddon addon) { + return Skript.classExists("com.destroystokyo.paper.event.server.WhitelistToggleEvent"); + } + + @Override + public void load(SkriptAddon addon) { + try { + Skript.getAddonInstance().loadClasses("org.skriptlang.skript.bukkit.whitelist", "elements"); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + +} diff --git a/src/main/java/ch/njol/skript/conditions/CondIsWhitelisted.java b/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/CondIsWhitelisted.java similarity index 97% rename from src/main/java/ch/njol/skript/conditions/CondIsWhitelisted.java rename to src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/CondIsWhitelisted.java index f7f3d1cc4eb..6ed889854fe 100644 --- a/src/main/java/ch/njol/skript/conditions/CondIsWhitelisted.java +++ b/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/CondIsWhitelisted.java @@ -1,4 +1,4 @@ -package ch.njol.skript.conditions; +package org.skriptlang.skript.bukkit.whitelist.elements; import ch.njol.skript.Skript; import ch.njol.skript.doc.Description; diff --git a/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/CondWillBeWhitelisted.java b/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/CondWillBeWhitelisted.java new file mode 100644 index 00000000000..1f1a3785ca4 --- /dev/null +++ b/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/CondWillBeWhitelisted.java @@ -0,0 +1,73 @@ +package org.skriptlang.skript.bukkit.whitelist.elements; + +import com.destroystokyo.paper.event.server.WhitelistToggleEvent; +import io.papermc.paper.event.server.WhitelistStateUpdateEvent; +import org.bukkit.event.Event; +import org.jetbrains.annotations.Nullable; + +import ch.njol.skript.Skript; +import ch.njol.skript.doc.*; +import ch.njol.skript.lang.Condition; +import ch.njol.skript.lang.Expression; +import ch.njol.skript.lang.SkriptParser.ParseResult; +import ch.njol.skript.lang.SyntaxStringBuilder; +import ch.njol.util.Kleenean; + +@Name("Will Be Whitelisted") +@Description("Checks whether the server or a player will be whitelisted in a whitelist event.") +@Keywords("server, player") +@Examples({ + "on server whitelist:", + "\tsend \"Server whitelist has been set to % whether server will be whitelisted%\" to all ops", + "", + "on player whitelist:", + "\tsend \"Whitelist of player % event - player % has been set to % whether server will be whitelisted%\" to all ops" +}) +@Since("INSERT VERSION") +@RequiredPlugins("Paper (server), Paper 1.20+ (player)") +public class CondWillBeWhitelisted extends Condition { + + static { + Skript.registerCondition(CondWillBeWhitelisted.class, + "[the] (:player|server) will be whitelisted", + "[the] (:player|server) (will not|won't) be whitelisted" + ); + } + + private boolean isServer; + + @Override + public boolean init(Expression[] expressions, int matchedPattern, Kleenean isDelayed, ParseResult parseResult) { + isServer = !parseResult.hasTag("player"); + if (isServer) { + if (!getParser().isCurrentEvent(WhitelistToggleEvent.class)) { + Skript.error("The 'server will be whitelisted' condition can only be used in an 'server whitelist' event"); + return false; + } + } else { + if (!getParser().isCurrentEvent(WhitelistStateUpdateEvent.class)) { + Skript.error("The 'player will be whitelisted' condition can only be used in an 'player whitelist' event"); + return false; + } + } + setNegated(matchedPattern == 1); + return true; + } + + @Override + public boolean check(Event event) { + if (isServer) + return ((WhitelistToggleEvent) event).isEnabled() ^ isNegated(); + return (((WhitelistStateUpdateEvent) event).getStatus() == WhitelistStateUpdateEvent.WhitelistStatus.ADDED) ^ isNegated(); + } + + @Override + public String toString(@Nullable Event event, boolean debug) { + return new SyntaxStringBuilder(event, debug) + .append("the") + .append(isServer ? "server" : "player") + .append("will be whitelisted") + .toString(); + } + +} diff --git a/src/main/java/ch/njol/skript/effects/EffEnforceWhitelist.java b/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/EffEnforceWhitelist.java similarity index 97% rename from src/main/java/ch/njol/skript/effects/EffEnforceWhitelist.java rename to src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/EffEnforceWhitelist.java index f1bbe878a74..4ca15e6a7f4 100644 --- a/src/main/java/ch/njol/skript/effects/EffEnforceWhitelist.java +++ b/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/EffEnforceWhitelist.java @@ -1,4 +1,4 @@ -package ch.njol.skript.effects; +package org.skriptlang.skript.bukkit.whitelist.elements; import org.bukkit.Bukkit; import org.bukkit.configuration.file.YamlConfiguration; diff --git a/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/EvtWhitelist.java b/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/EvtWhitelist.java new file mode 100644 index 00000000000..8317f0ba827 --- /dev/null +++ b/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/EvtWhitelist.java @@ -0,0 +1,91 @@ +package org.skriptlang.skript.bukkit.whitelist.elements; + +import com.destroystokyo.paper.event.server.WhitelistToggleEvent; +import io.papermc.paper.event.server.WhitelistStateUpdateEvent; +import org.bukkit.OfflinePlayer; +import org.bukkit.event.Event; +import org.jetbrains.annotations.Nullable; + +import ch.njol.skript.Skript; +import ch.njol.skript.lang.Literal; +import ch.njol.skript.lang.SkriptEvent; +import ch.njol.skript.lang.SkriptParser.ParseResult; +import ch.njol.skript.lang.SyntaxStringBuilder; +import ch.njol.skript.registrations.EventValues; +import ch.njol.util.Kleenean; +import ch.njol.util.coll.CollectionUtils; + +public class EvtWhitelist extends SkriptEvent { + + static { + Skript.registerEvent("Whitelist", EvtWhitelist.class, CollectionUtils.array(WhitelistToggleEvent.class, WhitelistStateUpdateEvent.class), + "server whitelist [state:(:enable[d]|disable[d])]", + "player whitelist [state:(:add[ed]|remove[d])]") + .description( + "Called whenever the server's or a player's whitelist state has been changed.", + "Use will be whitelist condition to check with its state.") + .keywords("player", "server") + .examples( + "on server whitelist enabled:", + "on server whitelist disabled:", + "on player whitelist added:", + "on player whitelist removed:", + "", + "on server whitelist:", + "\tsend \"Server whitelist has been set to %whether server will be whitelisted%\" to all ops", + "", + "on player whitelist:", + "\tsend \"Whitelist of player %event-player% has been set to %whether server will be whitelisted%\" to all ops") + .since("INSERT VERSION") + .requiredPlugins("Paper (server), Paper 1.20+ (player)"); + + EventValues.registerEventValue(WhitelistStateUpdateEvent.class, OfflinePlayer.class, WhitelistStateUpdateEvent::getPlayer); + } + + private boolean isServer; + private Kleenean state; + + @Override + public boolean init(Literal[] args, int matchedPattern, ParseResult parseResult) { + isServer = matchedPattern == 0; + state = Kleenean.UNKNOWN; + if (parseResult.hasTag("state")) { + if (isServer) + state = Kleenean.get(parseResult.hasTag("enable")); + else + state = Kleenean.get(parseResult.hasTag("add")); + } + return true; + } + + @Override + public boolean check(Event event) { + if (isServer) { + if (!(event instanceof WhitelistToggleEvent serverWhitelist)) + return false; + if (!state.isUnknown()) + return state.isTrue() == serverWhitelist.isEnabled(); + } else { + if (!(event instanceof WhitelistStateUpdateEvent playerWhitelist)) + return false; + if (!state.isUnknown()) + return state.isTrue() == (playerWhitelist.getStatus() == WhitelistStateUpdateEvent.WhitelistStatus.ADDED); + } + return true; + } + + @Override + public String toString(@Nullable Event event, boolean debug) { + SyntaxStringBuilder builder = new SyntaxStringBuilder(event, debug) + .append(isServer ? "server" : "player") + .append("whitelist"); + if (!state.isUnknown()) { + if (isServer) + builder.append(state.isTrue() ? "enabled" : "disabled"); + else + builder.append(state.isTrue() ? "added" : "removed"); + } + return builder.toString(); + } + +} diff --git a/src/main/java/ch/njol/skript/expressions/ExprWhitelist.java b/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/ExprWhitelist.java similarity index 96% rename from src/main/java/ch/njol/skript/expressions/ExprWhitelist.java rename to src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/ExprWhitelist.java index 355070c268f..7a6f2733b1f 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprWhitelist.java +++ b/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/ExprWhitelist.java @@ -1,6 +1,5 @@ -package ch.njol.skript.expressions; +package org.skriptlang.skript.bukkit.whitelist.elements; -import ch.njol.skript.effects.EffEnforceWhitelist; import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; import org.bukkit.event.Event; diff --git a/src/test/java/org/skriptlang/skript/test/tests/syntaxes/events/EvtWhitelistTest.java b/src/test/java/org/skriptlang/skript/test/tests/syntaxes/events/EvtWhitelistTest.java new file mode 100644 index 00000000000..7efe319f6c6 --- /dev/null +++ b/src/test/java/org/skriptlang/skript/test/tests/syntaxes/events/EvtWhitelistTest.java @@ -0,0 +1,33 @@ +package org.skriptlang.skript.test.tests.syntaxes.events; + +import com.destroystokyo.paper.event.server.WhitelistToggleEvent; +import io.papermc.paper.event.server.WhitelistStateUpdateEvent; +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; +import org.junit.Before; +import org.junit.Test; + +import ch.njol.skript.test.runner.SkriptJUnitTest; + +public class EvtWhitelistTest extends SkriptJUnitTest { + + static { + setShutdownDelay(1); + } + + private OfflinePlayer player; + + @Before + public void setup() { + player = Bukkit.getOfflinePlayer("Njol"); + } + + @Test + public void test() { + Bukkit.getPluginManager().callEvent(new WhitelistToggleEvent(true)); + Bukkit.getPluginManager().callEvent(new WhitelistToggleEvent(false)); + Bukkit.getPluginManager().callEvent(new WhitelistStateUpdateEvent(player.getPlayerProfile(), WhitelistStateUpdateEvent.WhitelistStatus.ADDED)); + Bukkit.getPluginManager().callEvent(new WhitelistStateUpdateEvent(player.getPlayerProfile(), WhitelistStateUpdateEvent.WhitelistStatus.REMOVED)); + } + +} diff --git a/src/test/skript/junit/EvtWhitelist.sk b/src/test/skript/junit/EvtWhitelist.sk new file mode 100644 index 00000000000..0420e44c9df --- /dev/null +++ b/src/test/skript/junit/EvtWhitelist.sk @@ -0,0 +1,48 @@ +options: + test: "org.skriptlang.skript.test.tests.syntaxes.events.EvtWhitelistTest" + +test "EvtWhitelistTest" when running JUnit: + add "whitelist event - player" to {_events::*} + add "whitelist event - player added" to {_events::*} + add "whitelist event - player removed" to {_events::*} + add "whitelist event - server" to {_events::*} + add "whitelist event - server enabled" to {_events::*} + add "whitelist event - server disabled" to {_events::*} + + add "will be whitelisted - player added" to {_events::*} + add "will be whitelisted - player removed" to {_events::*} + add "will be whitelisted - server enabled" to {_events::*} + add "will be whitelisted - server disabled" to {_events::*} + ensure junit test {@test} completes {_events::*} + +on server whitelist: + junit test is {@test} + complete objective "whitelist event - server" for {@test} + +on server whitelist enabled: + junit test is {@test} + complete objective "whitelist event - server enabled" for {@test} + the server will be whitelisted + complete objective "will be whitelisted - server enabled" for {@test} + +on server whitelist disabled: + junit test is {@test} + complete objective "whitelist event - server disabled" for {@test} + the server will not be whitelisted + complete objective "will be whitelisted - server disabled" for {@test} + +on player whitelist: + junit test is {@test} + complete objective "whitelist event - player" for {@test} + +on player whitelist added: + junit test is {@test} + complete objective "whitelist event - player added" for {@test} + the player will be whitelisted + complete objective "will be whitelisted - player added" for {@test} + +on player whitelist removed: + junit test is {@test} + complete objective "whitelist event - player removed" for {@test} + the player will not be whitelisted + complete objective "will be whitelisted - player removed" for {@test} From b0df7853c633977ddd321824b31a2595b38300f8 Mon Sep 17 00:00:00 2001 From: NotSoDelayed <72163224+NotSoDelayed@users.noreply.github.com> Date: Thu, 25 Sep 2025 12:50:08 +0800 Subject: [PATCH 02/10] Optimize for current standards --- .../whitelist/elements/CondIsWhitelisted.java | 22 +++++++---- .../elements/CondWillBeWhitelisted.java | 6 +-- .../elements/EffEnforceWhitelist.java | 2 - .../whitelist/elements/EvtWhitelist.java | 6 +-- .../whitelist/elements/ExprWhitelist.java | 38 ++++++++----------- 5 files changed, 35 insertions(+), 39 deletions(-) diff --git a/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/CondIsWhitelisted.java b/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/CondIsWhitelisted.java index 6ed889854fe..defca25b689 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/CondIsWhitelisted.java +++ b/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/CondIsWhitelisted.java @@ -4,11 +4,11 @@ import ch.njol.skript.doc.Description; import ch.njol.skript.doc.Examples; import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.RequiredPlugins; import ch.njol.skript.doc.Since; import ch.njol.skript.lang.Condition; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.SkriptParser.ParseResult; +import ch.njol.skript.lang.SyntaxStringBuilder; import ch.njol.util.Kleenean; import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; @@ -23,7 +23,6 @@ "if the server whitelist is enforced:" }) @Since("2.5.2, 2.9.0 (enforce, offline players)") -@RequiredPlugins("MC 1.17+ (enforce)") public class CondIsWhitelisted extends Condition { static { @@ -33,9 +32,7 @@ public class CondIsWhitelisted extends Condition { "[the] server white[ ]list (is|not:(isn't|is not)) enforced"); } - @Nullable private Expression players; - private boolean isServer; private boolean isEnforce; @@ -59,14 +56,23 @@ public boolean check(Event event) { @Override public String toString(@Nullable Event event, boolean debug) { - String negation = isNegated() ? "not" : ""; + SyntaxStringBuilder builder = new SyntaxStringBuilder(event, debug); if (isServer) { if (isEnforce) { - return "the server whitelist is " + negation + " enforced"; + builder.append("the server whitelist") + .append(isNegated() ? "is not" : "is") + .append("enforced"); + } else { + builder.append("the server") + .append(isNegated() ? "is not" : "is") + .append("whitelisted"); } - return "the server is " + negation + " whitelisted"; + } else { + builder.append(players) + .append(isNegated() ? "is not" : "is") + .append("whitelisted"); } - return players.toString(event, debug) + " is " + negation + " whitelisted"; + return builder.toString(); } } diff --git a/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/CondWillBeWhitelisted.java b/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/CondWillBeWhitelisted.java index 1f1a3785ca4..20e17295769 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/CondWillBeWhitelisted.java +++ b/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/CondWillBeWhitelisted.java @@ -18,13 +18,13 @@ @Keywords("server, player") @Examples({ "on server whitelist:", - "\tsend \"Server whitelist has been set to % whether server will be whitelisted%\" to all ops", + "\tsend \"Server whitelist has been set to % whether server will be whitelisted%\" to all ops", "", "on player whitelist:", - "\tsend \"Whitelist of player % event - player % has been set to % whether server will be whitelisted%\" to all ops" + "\tsend \"Whitelist of player % event - player % has been set to % whether server will be whitelisted%\" to all ops" }) @Since("INSERT VERSION") -@RequiredPlugins("Paper (server), Paper 1.20+ (player)") +@RequiredPlugins("Paper") public class CondWillBeWhitelisted extends Condition { static { diff --git a/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/EffEnforceWhitelist.java b/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/EffEnforceWhitelist.java index 4ca15e6a7f4..977cec89b55 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/EffEnforceWhitelist.java +++ b/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/EffEnforceWhitelist.java @@ -13,7 +13,6 @@ import ch.njol.skript.doc.Description; import ch.njol.skript.doc.Examples; import ch.njol.skript.doc.Since; -import ch.njol.skript.doc.RequiredPlugins; import ch.njol.skript.lang.Effect; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.SkriptParser.ParseResult; @@ -30,7 +29,6 @@ "unenforce the whitelist" }) @Since("2.9.0") -@RequiredPlugins("MC 1.17+") public class EffEnforceWhitelist extends Effect { private static String NOT_WHITELISTED_MESSAGE = "You are not whitelisted on this server!"; diff --git a/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/EvtWhitelist.java b/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/EvtWhitelist.java index 8317f0ba827..54c056d7f88 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/EvtWhitelist.java +++ b/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/EvtWhitelist.java @@ -32,12 +32,12 @@ public class EvtWhitelist extends SkriptEvent { "on player whitelist removed:", "", "on server whitelist:", - "\tsend \"Server whitelist has been set to %whether server will be whitelisted%\" to all ops", + "\tsend \"Server whitelist has been set to %whether server will be whitelisted%\" to all ops", "", "on player whitelist:", - "\tsend \"Whitelist of player %event-player% has been set to %whether server will be whitelisted%\" to all ops") + "\tsend \"Whitelist of player %event-player% has been set to %whether server will be whitelisted%\" to all ops") .since("INSERT VERSION") - .requiredPlugins("Paper (server), Paper 1.20+ (player)"); + .requiredPlugins("Paper"); EventValues.registerEventValue(WhitelistStateUpdateEvent.class, OfflinePlayer.class, WhitelistStateUpdateEvent::getPlayer); } diff --git a/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/ExprWhitelist.java b/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/ExprWhitelist.java index 7a6f2733b1f..dc9cc0b1710 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/ExprWhitelist.java +++ b/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/ExprWhitelist.java @@ -48,43 +48,35 @@ protected OfflinePlayer[] get(Event event) { @Override public Class[] acceptChange(ChangeMode mode) { - switch (mode) { - case ADD: - case REMOVE: - return CollectionUtils.array(OfflinePlayer.class); - case DELETE: - case RESET: - case SET: - return CollectionUtils.array(Boolean.class); - } - return null; + return switch (mode) { + case ADD, REMOVE -> CollectionUtils.array(OfflinePlayer.class); + case DELETE, RESET, SET -> CollectionUtils.array(Boolean.class); + default -> null; + }; } @Override public void change(Event event, Object @Nullable [] delta, ChangeMode mode) { switch (mode) { - case SET: - boolean toggle = (Boolean) delta[0]; + case SET -> { + boolean toggle = (boolean) delta[0]; Bukkit.setWhitelist(toggle); if (toggle) EffEnforceWhitelist.reloadWhitelist(); - break; - case ADD: + } + case ADD -> { for (Object player : delta) ((OfflinePlayer) player).setWhitelisted(true); - break; - case REMOVE: + } + case REMOVE -> { for (Object player : delta) ((OfflinePlayer) player).setWhitelisted(false); EffEnforceWhitelist.reloadWhitelist(); - break; - case DELETE: - case RESET: + } + case DELETE, RESET -> { for (OfflinePlayer player : Bukkit.getWhitelistedPlayers()) player.setWhitelisted(false); - break; - default: - assert false; + } } } @@ -100,7 +92,7 @@ public Class getReturnType() { @Override public String toString(@Nullable Event event, boolean debug) { - return "whitelist"; + return "the whitelist"; } } From 1cfa46c1a86d827c4ac837577feb7dcbae440b28 Mon Sep 17 00:00:00 2001 From: NotSoDelayed <72163224+NotSoDelayed@users.noreply.github.com> Date: Thu, 25 Sep 2025 12:55:52 +0800 Subject: [PATCH 03/10] Add missing check --- .../bukkit/whitelist/elements/CondWillBeWhitelisted.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/CondWillBeWhitelisted.java b/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/CondWillBeWhitelisted.java index 20e17295769..387efa7f3d0 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/CondWillBeWhitelisted.java +++ b/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/CondWillBeWhitelisted.java @@ -66,7 +66,8 @@ public String toString(@Nullable Event event, boolean debug) { return new SyntaxStringBuilder(event, debug) .append("the") .append(isServer ? "server" : "player") - .append("will be whitelisted") + .append(isNegated() ? "will not" : "will") + .append("be whitelisted") .toString(); } From 9ac835dc537541e95541373e7845612cde458b0e Mon Sep 17 00:00:00 2001 From: NotSoDelayed <72163224+NotSoDelayed@users.noreply.github.com> Date: Thu, 25 Sep 2025 13:11:05 +0800 Subject: [PATCH 04/10] Fix test script file naming --- src/test/skript/junit/{EvtWhitelist.sk => EvtWhitelistTest.sk} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/test/skript/junit/{EvtWhitelist.sk => EvtWhitelistTest.sk} (100%) diff --git a/src/test/skript/junit/EvtWhitelist.sk b/src/test/skript/junit/EvtWhitelistTest.sk similarity index 100% rename from src/test/skript/junit/EvtWhitelist.sk rename to src/test/skript/junit/EvtWhitelistTest.sk From 65b81dc951aa2942e3c50bada3129ff909b5637c Mon Sep 17 00:00:00 2001 From: NotSoDelayed <72163224+NotSoDelayed@users.noreply.github.com> Date: Thu, 25 Sep 2025 17:58:31 +0800 Subject: [PATCH 05/10] syntax refractor, remove redundant checks --- .../bukkit/whitelist/WhitelistModule.java | 5 - .../elements/EvtPlayerWhitelist.java | 69 ++++++++++++++ .../elements/EvtServerWhitelist.java | 57 ++++++++++++ .../whitelist/elements/EvtWhitelist.java | 91 ------------------- src/test/skript/junit/EvtWhitelistTest.sk | 54 +++++------ 5 files changed, 153 insertions(+), 123 deletions(-) create mode 100644 src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/EvtPlayerWhitelist.java create mode 100644 src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/EvtServerWhitelist.java delete mode 100644 src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/EvtWhitelist.java diff --git a/src/main/java/org/skriptlang/skript/bukkit/whitelist/WhitelistModule.java b/src/main/java/org/skriptlang/skript/bukkit/whitelist/WhitelistModule.java index 53a04030bf5..0a43c72ba15 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/whitelist/WhitelistModule.java +++ b/src/main/java/org/skriptlang/skript/bukkit/whitelist/WhitelistModule.java @@ -8,11 +8,6 @@ public class WhitelistModule implements AddonModule { - @Override - public boolean canLoad(SkriptAddon addon) { - return Skript.classExists("com.destroystokyo.paper.event.server.WhitelistToggleEvent"); - } - @Override public void load(SkriptAddon addon) { try { diff --git a/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/EvtPlayerWhitelist.java b/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/EvtPlayerWhitelist.java new file mode 100644 index 00000000000..ff71efe86a9 --- /dev/null +++ b/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/EvtPlayerWhitelist.java @@ -0,0 +1,69 @@ +package org.skriptlang.skript.bukkit.whitelist.elements; + +import io.papermc.paper.event.server.WhitelistStateUpdateEvent; +import io.papermc.paper.event.server.WhitelistStateUpdateEvent.WhitelistStatus; +import org.bukkit.OfflinePlayer; +import org.bukkit.event.Event; +import org.jetbrains.annotations.Nullable; + +import ch.njol.skript.Skript; +import ch.njol.skript.lang.Literal; +import ch.njol.skript.lang.SkriptEvent; +import ch.njol.skript.lang.SkriptParser.ParseResult; +import ch.njol.skript.lang.SyntaxStringBuilder; +import ch.njol.skript.registrations.EventValues; +import ch.njol.util.Kleenean; + +public class EvtPlayerWhitelist extends SkriptEvent { + + static { + Skript.registerEvent("Player Whitelist", EvtPlayerWhitelist.class, WhitelistStateUpdateEvent.class, + "player whitelist [state] (change[d]|toggle[d]|update[d])", + "player (added to whitelist|whitelist[ed])", + "player (removed from whitelist|unwhitelist[ed])") + .description( + "Called whenever a player has been added to or removed from the server's whitelist.", + "Use will be whitelisted condition to check with its state.") + .examples( + "on player whitelisted:", + "on player unwhitelisted:", + "", + "on player whitelist toggled:", + "\tsend \"Whitelist of player %event-offlineplayer% has been set to %whether server will be whitelisted%\" to all ops") + .since(""); + + EventValues.registerEventValue(WhitelistStateUpdateEvent.class, OfflinePlayer.class, WhitelistStateUpdateEvent::getPlayer); + } + + private Kleenean state = Kleenean.UNKNOWN; + + @Override + public boolean init(Literal[] args, int matchedPattern, ParseResult parseResult) { + if (matchedPattern == 1) + state = Kleenean.TRUE; + else if (matchedPattern == 2) + state = Kleenean.FALSE; + return true; + } + + @Override + public boolean check(Event event) { + if (!state.isUnknown()) + return state.isTrue() == (((WhitelistStateUpdateEvent) event).getStatus() == WhitelistStatus.ADDED); + return true; + } + + @Override + public String toString(@Nullable Event event, boolean debug) { + SyntaxStringBuilder builder = new SyntaxStringBuilder(event, debug) + .append("player"); + if (!state.isUnknown()) { + builder.append(state.isTrue() ? "added to" : "removed from") + .append("whitelist"); + } else { + builder.append("whitelist toggled"); + } + return builder.toString(); + } + +} diff --git a/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/EvtServerWhitelist.java b/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/EvtServerWhitelist.java new file mode 100644 index 00000000000..ca5ac442417 --- /dev/null +++ b/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/EvtServerWhitelist.java @@ -0,0 +1,57 @@ +package org.skriptlang.skript.bukkit.whitelist.elements; + +import com.destroystokyo.paper.event.server.WhitelistToggleEvent; +import org.bukkit.event.Event; +import org.jetbrains.annotations.Nullable; + +import ch.njol.skript.Skript; +import ch.njol.skript.lang.Literal; +import ch.njol.skript.lang.SkriptEvent; +import ch.njol.skript.lang.SkriptParser.ParseResult; +import ch.njol.skript.lang.SyntaxStringBuilder; +import ch.njol.util.Kleenean; + +public class EvtServerWhitelist extends SkriptEvent { + + static { + Skript.registerEvent("Whitelist Toggled", EvtServerWhitelist.class, WhitelistToggleEvent.class, "whitelist toggle[d] [:on|:off]") + .description( + "Called whenever the server's whitelist has been toggled on or off.", + "Use will be whitelisted condition to check with its state.") + .examples( + "on whitelist toggled on:", + "on whitelist toggled off:", + "", + "on whitelist toggled:", + "\tsend \"Server whitelist has been set to %whether server will be whitelisted%\" to all ops") + .since(""); + } + + private Kleenean state = Kleenean.UNKNOWN; + + @Override + public boolean init(Literal[] args, int matchedPattern, ParseResult parseResult) { + if (parseResult.hasTag("on")) + state = Kleenean.TRUE; + else if (parseResult.hasTag("off")) + state = Kleenean.FALSE; + return true; + } + + @Override + public boolean check(Event event) { + if (!state.isUnknown()) + return state.isTrue() == ((WhitelistToggleEvent) event).isEnabled(); + return true; + } + + @Override + public String toString(@Nullable Event event, boolean debug) { + SyntaxStringBuilder builder = new SyntaxStringBuilder(event, debug) + .append("server whitelist toggled"); + if (!state.isUnknown()) + builder.append(state.isTrue() ? "on" : "off"); + return builder.toString(); + } + +} diff --git a/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/EvtWhitelist.java b/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/EvtWhitelist.java deleted file mode 100644 index 54c056d7f88..00000000000 --- a/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/EvtWhitelist.java +++ /dev/null @@ -1,91 +0,0 @@ -package org.skriptlang.skript.bukkit.whitelist.elements; - -import com.destroystokyo.paper.event.server.WhitelistToggleEvent; -import io.papermc.paper.event.server.WhitelistStateUpdateEvent; -import org.bukkit.OfflinePlayer; -import org.bukkit.event.Event; -import org.jetbrains.annotations.Nullable; - -import ch.njol.skript.Skript; -import ch.njol.skript.lang.Literal; -import ch.njol.skript.lang.SkriptEvent; -import ch.njol.skript.lang.SkriptParser.ParseResult; -import ch.njol.skript.lang.SyntaxStringBuilder; -import ch.njol.skript.registrations.EventValues; -import ch.njol.util.Kleenean; -import ch.njol.util.coll.CollectionUtils; - -public class EvtWhitelist extends SkriptEvent { - - static { - Skript.registerEvent("Whitelist", EvtWhitelist.class, CollectionUtils.array(WhitelistToggleEvent.class, WhitelistStateUpdateEvent.class), - "server whitelist [state:(:enable[d]|disable[d])]", - "player whitelist [state:(:add[ed]|remove[d])]") - .description( - "Called whenever the server's or a player's whitelist state has been changed.", - "Use will be whitelist condition to check with its state.") - .keywords("player", "server") - .examples( - "on server whitelist enabled:", - "on server whitelist disabled:", - "on player whitelist added:", - "on player whitelist removed:", - "", - "on server whitelist:", - "\tsend \"Server whitelist has been set to %whether server will be whitelisted%\" to all ops", - "", - "on player whitelist:", - "\tsend \"Whitelist of player %event-player% has been set to %whether server will be whitelisted%\" to all ops") - .since("INSERT VERSION") - .requiredPlugins("Paper"); - - EventValues.registerEventValue(WhitelistStateUpdateEvent.class, OfflinePlayer.class, WhitelistStateUpdateEvent::getPlayer); - } - - private boolean isServer; - private Kleenean state; - - @Override - public boolean init(Literal[] args, int matchedPattern, ParseResult parseResult) { - isServer = matchedPattern == 0; - state = Kleenean.UNKNOWN; - if (parseResult.hasTag("state")) { - if (isServer) - state = Kleenean.get(parseResult.hasTag("enable")); - else - state = Kleenean.get(parseResult.hasTag("add")); - } - return true; - } - - @Override - public boolean check(Event event) { - if (isServer) { - if (!(event instanceof WhitelistToggleEvent serverWhitelist)) - return false; - if (!state.isUnknown()) - return state.isTrue() == serverWhitelist.isEnabled(); - } else { - if (!(event instanceof WhitelistStateUpdateEvent playerWhitelist)) - return false; - if (!state.isUnknown()) - return state.isTrue() == (playerWhitelist.getStatus() == WhitelistStateUpdateEvent.WhitelistStatus.ADDED); - } - return true; - } - - @Override - public String toString(@Nullable Event event, boolean debug) { - SyntaxStringBuilder builder = new SyntaxStringBuilder(event, debug) - .append(isServer ? "server" : "player") - .append("whitelist"); - if (!state.isUnknown()) { - if (isServer) - builder.append(state.isTrue() ? "enabled" : "disabled"); - else - builder.append(state.isTrue() ? "added" : "removed"); - } - return builder.toString(); - } - -} diff --git a/src/test/skript/junit/EvtWhitelistTest.sk b/src/test/skript/junit/EvtWhitelistTest.sk index 0420e44c9df..20c79197bc4 100644 --- a/src/test/skript/junit/EvtWhitelistTest.sk +++ b/src/test/skript/junit/EvtWhitelistTest.sk @@ -2,47 +2,47 @@ options: test: "org.skriptlang.skript.test.tests.syntaxes.events.EvtWhitelistTest" test "EvtWhitelistTest" when running JUnit: - add "whitelist event - player" to {_events::*} - add "whitelist event - player added" to {_events::*} - add "whitelist event - player removed" to {_events::*} - add "whitelist event - server" to {_events::*} - add "whitelist event - server enabled" to {_events::*} - add "whitelist event - server disabled" to {_events::*} - - add "will be whitelisted - player added" to {_events::*} - add "will be whitelisted - player removed" to {_events::*} - add "will be whitelisted - server enabled" to {_events::*} - add "will be whitelisted - server disabled" to {_events::*} + add "server whitelist event - general" to {_events::*} + add "server whitelist event - on" to {_events::*} + add "server whitelist event - off" to {_events::*} + add "player whitelist event - general" to {_events::*} + add "player whitelist event - added" to {_events::*} + add "player whitelist event - removed" to {_events::*} + + add "will be whitelisted - server" to {_events::*} + add "will not be whitelisted - server" to {_events::*} + add "will be whitelisted - player" to {_events::*} + add "will not be whitelisted - player" to {_events::*} ensure junit test {@test} completes {_events::*} -on server whitelist: +on whitelist toggled: junit test is {@test} - complete objective "whitelist event - server" for {@test} + complete objective "server whitelist event - general" for {@test} -on server whitelist enabled: +on whitelist toggled on: junit test is {@test} - complete objective "whitelist event - server enabled" for {@test} + complete objective "server whitelist event - on" for {@test} the server will be whitelisted - complete objective "will be whitelisted - server enabled" for {@test} + complete objective "will be whitelisted - server" for {@test} -on server whitelist disabled: +on whitelist toggled off: junit test is {@test} - complete objective "whitelist event - server disabled" for {@test} + complete objective "server whitelist event - off" for {@test} the server will not be whitelisted - complete objective "will be whitelisted - server disabled" for {@test} + complete objective "will not be whitelisted - server" for {@test} -on player whitelist: +on player whitelist toggled: junit test is {@test} - complete objective "whitelist event - player" for {@test} + complete objective "player whitelist event - general" for {@test} -on player whitelist added: +on player whitelisted: junit test is {@test} - complete objective "whitelist event - player added" for {@test} + complete objective "player whitelist event - added" for {@test} the player will be whitelisted - complete objective "will be whitelisted - player added" for {@test} + complete objective "will be whitelisted - player" for {@test} -on player whitelist removed: +on player unwhitelisted: junit test is {@test} - complete objective "whitelist event - player removed" for {@test} + complete objective "player whitelist event - removed" for {@test} the player will not be whitelisted - complete objective "will be whitelisted - player removed" for {@test} + complete objective "will not be whitelisted - player" for {@test} From a10b4b08925cc65f0a617073b7abb9fc33e5da9f Mon Sep 17 00:00:00 2001 From: NotSoDelayed Date: Sat, 27 Sep 2025 09:24:26 +0800 Subject: [PATCH 06/10] Use `@`Example annot --- .../bukkit/whitelist/elements/CondWillBeWhitelisted.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/CondWillBeWhitelisted.java b/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/CondWillBeWhitelisted.java index 387efa7f3d0..9c9265ecaaa 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/CondWillBeWhitelisted.java +++ b/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/CondWillBeWhitelisted.java @@ -16,13 +16,13 @@ @Name("Will Be Whitelisted") @Description("Checks whether the server or a player will be whitelisted in a whitelist event.") @Keywords("server, player") -@Examples({ +@Example(""" "on server whitelist:", - "\tsend \"Server whitelist has been set to % whether server will be whitelisted%\" to all ops", + "\tsend "Server whitelist has been set to % whether server will be whitelisted%" to all ops", "", "on player whitelist:", - "\tsend \"Whitelist of player % event - player % has been set to % whether server will be whitelisted%\" to all ops" -}) + "\tsend "Whitelist of player % event - player % has been set to % whether server will be whitelisted%" to all ops" +""") @Since("INSERT VERSION") @RequiredPlugins("Paper") public class CondWillBeWhitelisted extends Condition { From 2a9694b8cd4f16241c1ba70bd1da77881fb2e8c3 Mon Sep 17 00:00:00 2001 From: NotSoDelayed Date: Fri, 3 Oct 2025 10:09:05 +0800 Subject: [PATCH 07/10] migrate to @ Example annotations --- .../whitelist/elements/CondIsWhitelisted.java | 15 ++++++--------- .../whitelist/elements/CondWillBeWhitelisted.java | 12 ++++++------ .../whitelist/elements/EffEnforceWhitelist.java | 13 +++++-------- .../bukkit/whitelist/elements/ExprWhitelist.java | 15 ++++++--------- 4 files changed, 23 insertions(+), 32 deletions(-) diff --git a/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/CondIsWhitelisted.java b/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/CondIsWhitelisted.java index defca25b689..dac5f46e236 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/CondIsWhitelisted.java +++ b/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/CondIsWhitelisted.java @@ -1,10 +1,7 @@ package org.skriptlang.skript.bukkit.whitelist.elements; import ch.njol.skript.Skript; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Since; +import ch.njol.skript.doc.*; import ch.njol.skript.lang.Condition; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.SkriptParser.ParseResult; @@ -17,11 +14,11 @@ @Name("Is Whitelisted") @Description("Whether or not the server or a player is whitelisted, or the server is whitelist enforced.") -@Examples({ - "if the player is whitelisted:", - "if the server is whitelisted:", - "if the server whitelist is enforced:" -}) +@Example(""" + if the player is whitelisted: + if the server is whitelisted: + if the server whitelist is enforced: + """) @Since("2.5.2, 2.9.0 (enforce, offline players)") public class CondIsWhitelisted extends Condition { diff --git a/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/CondWillBeWhitelisted.java b/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/CondWillBeWhitelisted.java index 9c9265ecaaa..64fb6debeb9 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/CondWillBeWhitelisted.java +++ b/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/CondWillBeWhitelisted.java @@ -17,12 +17,12 @@ @Description("Checks whether the server or a player will be whitelisted in a whitelist event.") @Keywords("server, player") @Example(""" - "on server whitelist:", - "\tsend "Server whitelist has been set to % whether server will be whitelisted%" to all ops", - "", - "on player whitelist:", - "\tsend "Whitelist of player % event - player % has been set to % whether server will be whitelisted%" to all ops" -""") + on server whitelist: + \tsend "Server whitelist has been set to % whether server will be whitelisted%" to all ops, + + on player whitelist: + \tsend "Whitelist of player % event - player % has been set to % whether server will be whitelisted%" to all ops + """) @Since("INSERT VERSION") @RequiredPlugins("Paper") public class CondWillBeWhitelisted extends Condition { diff --git a/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/EffEnforceWhitelist.java b/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/EffEnforceWhitelist.java index 977cec89b55..f9ca5c0dfcf 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/EffEnforceWhitelist.java +++ b/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/EffEnforceWhitelist.java @@ -9,10 +9,7 @@ import java.io.File; import ch.njol.skript.Skript; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Since; +import ch.njol.skript.doc.*; import ch.njol.skript.lang.Effect; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.SkriptParser.ParseResult; @@ -24,10 +21,10 @@ "Enforces or un-enforce a server's whitelist.", "All non-whitelisted players will be kicked upon enforcing the whitelist." }) -@Examples({ - "enforce the whitelist", - "unenforce the whitelist" -}) +@Example(""" + enforce the whitelist + unenforce the whitelist + """) @Since("2.9.0") public class EffEnforceWhitelist extends Effect { diff --git a/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/ExprWhitelist.java b/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/ExprWhitelist.java index dc9cc0b1710..ce10aa24200 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/ExprWhitelist.java +++ b/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/ExprWhitelist.java @@ -7,10 +7,7 @@ import ch.njol.skript.Skript; import ch.njol.skript.classes.Changer.ChangeMode; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Since; +import ch.njol.skript.doc.*; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; import ch.njol.skript.lang.SkriptParser.ParseResult; @@ -24,11 +21,11 @@ "Players may be added and removed from the whitelist.", "The whitelist can be enabled or disabled by setting the whitelist to true or false respectively." }) -@Examples({ - "set the whitelist to false", - "add all players to whitelist", - "reset the whitelist" -}) +@Example(""" + set the whitelist to false + add all players to whitelist + reset the whitelist + """) @Since("2.5.2, 2.9.0 (delete)") public class ExprWhitelist extends SimpleExpression { From 7fa0de464602d190869c2bd2c47eda6caa11427e Mon Sep 17 00:00:00 2001 From: NotSoDelayed Date: Fri, 3 Oct 2025 10:11:40 +0800 Subject: [PATCH 08/10] optimize imports --- .../bukkit/whitelist/elements/CondIsWhitelisted.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/CondIsWhitelisted.java b/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/CondIsWhitelisted.java index dac5f46e236..7f218af61f7 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/CondIsWhitelisted.java +++ b/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/CondIsWhitelisted.java @@ -1,5 +1,10 @@ package org.skriptlang.skript.bukkit.whitelist.elements; +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; +import org.bukkit.event.Event; +import org.jetbrains.annotations.Nullable; + import ch.njol.skript.Skript; import ch.njol.skript.doc.*; import ch.njol.skript.lang.Condition; @@ -7,10 +12,6 @@ import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.skript.lang.SyntaxStringBuilder; import ch.njol.util.Kleenean; -import org.bukkit.Bukkit; -import org.bukkit.OfflinePlayer; -import org.bukkit.event.Event; -import org.jetbrains.annotations.Nullable; @Name("Is Whitelisted") @Description("Whether or not the server or a player is whitelisted, or the server is whitelist enforced.") From 20904d1a1a2206bba910a9673bf971abb2052e12 Mon Sep 17 00:00:00 2001 From: NotSoDelayed Date: Sat, 4 Oct 2025 10:03:44 +0800 Subject: [PATCH 09/10] Use proper enum values to differentiate event state --- .../elements/EvtPlayerWhitelist.java | 45 +++++++++++++------ .../elements/EvtServerWhitelist.java | 35 +++++++++++---- src/test/skript/junit/EvtWhitelistTest.sk | 2 +- 3 files changed, 59 insertions(+), 23 deletions(-) diff --git a/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/EvtPlayerWhitelist.java b/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/EvtPlayerWhitelist.java index ff71efe86a9..bb8f95acba7 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/EvtPlayerWhitelist.java +++ b/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/EvtPlayerWhitelist.java @@ -12,13 +12,30 @@ import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.skript.lang.SyntaxStringBuilder; import ch.njol.skript.registrations.EventValues; -import ch.njol.util.Kleenean; public class EvtPlayerWhitelist extends SkriptEvent { + private enum EventState { + + WHITELISTED("whitelisted"), + UNWHITELISTED("unwhitelisted"); + + final String toString; + + EventState(String toString) { + this.toString = toString; + } + + @Override + public String toString() { + return toString; + } + + } + static { Skript.registerEvent("Player Whitelist", EvtPlayerWhitelist.class, WhitelistStateUpdateEvent.class, - "player whitelist [state] (change[d]|toggle[d]|update[d])", + "player whitelist [state] (change[d]|update[d])", "player (added to whitelist|whitelist[ed])", "player (removed from whitelist|unwhitelist[ed])") .description( @@ -28,28 +45,28 @@ public class EvtPlayerWhitelist extends SkriptEvent { "on player whitelisted:", "on player unwhitelisted:", "", - "on player whitelist toggled:", + "on player whitelist state changed:", "\tsend \"Whitelist of player %event-offlineplayer% has been set to %whether server will be whitelisted%\" to all ops") - .since(""); + .since("INSERT VERSION"); EventValues.registerEventValue(WhitelistStateUpdateEvent.class, OfflinePlayer.class, WhitelistStateUpdateEvent::getPlayer); } - private Kleenean state = Kleenean.UNKNOWN; + private @Nullable EventState state = null; @Override public boolean init(Literal[] args, int matchedPattern, ParseResult parseResult) { if (matchedPattern == 1) - state = Kleenean.TRUE; + state = EventState.WHITELISTED; else if (matchedPattern == 2) - state = Kleenean.FALSE; + state = EventState.UNWHITELISTED; return true; } @Override public boolean check(Event event) { - if (!state.isUnknown()) - return state.isTrue() == (((WhitelistStateUpdateEvent) event).getStatus() == WhitelistStatus.ADDED); + if (state != null) + return (state == EventState.WHITELISTED) == (((WhitelistStateUpdateEvent) event).getStatus() == WhitelistStatus.ADDED); return true; } @@ -57,11 +74,13 @@ public boolean check(Event event) { public String toString(@Nullable Event event, boolean debug) { SyntaxStringBuilder builder = new SyntaxStringBuilder(event, debug) .append("player"); - if (!state.isUnknown()) { - builder.append(state.isTrue() ? "added to" : "removed from") - .append("whitelist"); + if (state != null) { + if (state == EventState.WHITELISTED) + builder.append("added to whitelist"); + else + builder.append("removed from whitelist"); } else { - builder.append("whitelist toggled"); + builder.append("whitelist state changed"); } return builder.toString(); } diff --git a/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/EvtServerWhitelist.java b/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/EvtServerWhitelist.java index ca5ac442417..4762ecb4522 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/EvtServerWhitelist.java +++ b/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/EvtServerWhitelist.java @@ -9,10 +9,27 @@ import ch.njol.skript.lang.SkriptEvent; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.skript.lang.SyntaxStringBuilder; -import ch.njol.util.Kleenean; public class EvtServerWhitelist extends SkriptEvent { + private enum EventState { + + ON("on"), + OFF("off"); + + final String toString; + + EventState(String toString) { + this.toString = toString; + } + + @Override + public String toString() { + return toString; + } + + } + static { Skript.registerEvent("Whitelist Toggled", EvtServerWhitelist.class, WhitelistToggleEvent.class, "whitelist toggle[d] [:on|:off]") .description( @@ -24,24 +41,24 @@ public class EvtServerWhitelist extends SkriptEvent { "", "on whitelist toggled:", "\tsend \"Server whitelist has been set to %whether server will be whitelisted%\" to all ops") - .since(""); + .since("INSERT VERSION"); } - private Kleenean state = Kleenean.UNKNOWN; + private @Nullable EventState state = null; @Override public boolean init(Literal[] args, int matchedPattern, ParseResult parseResult) { if (parseResult.hasTag("on")) - state = Kleenean.TRUE; + state = EventState.ON; else if (parseResult.hasTag("off")) - state = Kleenean.FALSE; + state = EventState.OFF; return true; } @Override public boolean check(Event event) { - if (!state.isUnknown()) - return state.isTrue() == ((WhitelistToggleEvent) event).isEnabled(); + if (state != null) + return (state == EventState.ON) == ((WhitelistToggleEvent) event).isEnabled(); return true; } @@ -49,8 +66,8 @@ public boolean check(Event event) { public String toString(@Nullable Event event, boolean debug) { SyntaxStringBuilder builder = new SyntaxStringBuilder(event, debug) .append("server whitelist toggled"); - if (!state.isUnknown()) - builder.append(state.isTrue() ? "on" : "off"); + if (state != null) + builder.append(state); return builder.toString(); } diff --git a/src/test/skript/junit/EvtWhitelistTest.sk b/src/test/skript/junit/EvtWhitelistTest.sk index 20c79197bc4..b3249445543 100644 --- a/src/test/skript/junit/EvtWhitelistTest.sk +++ b/src/test/skript/junit/EvtWhitelistTest.sk @@ -31,7 +31,7 @@ on whitelist toggled off: the server will not be whitelisted complete objective "will not be whitelisted - server" for {@test} -on player whitelist toggled: +on player whitelist state changed: junit test is {@test} complete objective "player whitelist event - general" for {@test} From 93a67b770a56b6937618f47c9d15f4d8c58f5baf Mon Sep 17 00:00:00 2001 From: NotSoDelayed Date: Tue, 7 Oct 2025 09:06:22 +0800 Subject: [PATCH 10/10] Fix incorrect `@`Example usage --- .../whitelist/elements/CondIsWhitelisted.java | 8 +++----- .../whitelist/elements/CondWillBeWhitelisted.java | 8 ++++---- .../whitelist/elements/EffEnforceWhitelist.java | 6 ++---- .../bukkit/whitelist/elements/ExprWhitelist.java | 13 +++++++------ 4 files changed, 16 insertions(+), 19 deletions(-) diff --git a/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/CondIsWhitelisted.java b/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/CondIsWhitelisted.java index 7f218af61f7..b79ad8b7ded 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/CondIsWhitelisted.java +++ b/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/CondIsWhitelisted.java @@ -15,11 +15,9 @@ @Name("Is Whitelisted") @Description("Whether or not the server or a player is whitelisted, or the server is whitelist enforced.") -@Example(""" - if the player is whitelisted: - if the server is whitelisted: - if the server whitelist is enforced: - """) +@Example("if the player is whitelisted:") +@Example("if the server is whitelisted:") +@Example("if the server whitelist is enforced:") @Since("2.5.2, 2.9.0 (enforce, offline players)") public class CondIsWhitelisted extends Condition { diff --git a/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/CondWillBeWhitelisted.java b/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/CondWillBeWhitelisted.java index 64fb6debeb9..0472ec343c6 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/CondWillBeWhitelisted.java +++ b/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/CondWillBeWhitelisted.java @@ -18,13 +18,13 @@ @Keywords("server, player") @Example(""" on server whitelist: - \tsend "Server whitelist has been set to % whether server will be whitelisted%" to all ops, - + send "Server whitelist has been set to %whether server will be whitelisted%" to all ops + """) +@Example(""" on player whitelist: - \tsend "Whitelist of player % event - player % has been set to % whether server will be whitelisted%" to all ops + send "Whitelist of player %event-player% has been set to %whether server will be whitelisted%" to all ops """) @Since("INSERT VERSION") -@RequiredPlugins("Paper") public class CondWillBeWhitelisted extends Condition { static { diff --git a/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/EffEnforceWhitelist.java b/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/EffEnforceWhitelist.java index f9ca5c0dfcf..c31912f657c 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/EffEnforceWhitelist.java +++ b/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/EffEnforceWhitelist.java @@ -21,10 +21,8 @@ "Enforces or un-enforce a server's whitelist.", "All non-whitelisted players will be kicked upon enforcing the whitelist." }) -@Example(""" - enforce the whitelist - unenforce the whitelist - """) +@Example("enforce the whitelist") +@Example("unenforce the whitelist") @Since("2.9.0") public class EffEnforceWhitelist extends Effect { diff --git a/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/ExprWhitelist.java b/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/ExprWhitelist.java index ce10aa24200..3874465b68f 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/ExprWhitelist.java +++ b/src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/ExprWhitelist.java @@ -7,7 +7,10 @@ import ch.njol.skript.Skript; import ch.njol.skript.classes.Changer.ChangeMode; -import ch.njol.skript.doc.*; +import ch.njol.skript.doc.Description; +import ch.njol.skript.doc.Example; +import ch.njol.skript.doc.Name; +import ch.njol.skript.doc.Since; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; import ch.njol.skript.lang.SkriptParser.ParseResult; @@ -21,11 +24,9 @@ "Players may be added and removed from the whitelist.", "The whitelist can be enabled or disabled by setting the whitelist to true or false respectively." }) -@Example(""" - set the whitelist to false - add all players to whitelist - reset the whitelist - """) +@Example("set the whitelist to false") +@Example("add all players to whitelist") +@Example("reset the whitelist") @Since("2.5.2, 2.9.0 (delete)") public class ExprWhitelist extends SimpleExpression {