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 extends OfflinePlayer> 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 {