-
-
Notifications
You must be signed in to change notification settings - Fork 415
A Complete Whitelist Module #8205
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: dev/feature
Are you sure you want to change the base?
Changes from 4 commits
18d347d
b0df785
1cfa46c
9ac835d
65b81dc
a10b4b0
4d451d9
2a9694b
7fa0de4
df62f37
92410d5
20904d1
93a67b7
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -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); | ||
| } | ||
| } | ||
|
|
||
| } | ||
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
| @@ -0,0 +1,74 @@ | ||||||
| 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 <a href='events.html#whitelist'>whitelist</a> event.") | ||||||
| @Keywords("server, player") | ||||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
| @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" | ||||||
| }) | ||||||
NotSoDelayed marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||||||
| @Since("INSERT VERSION") | ||||||
| @RequiredPlugins("Paper") | ||||||
NotSoDelayed marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||||||
| 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" | ||||||
| ); | ||||||
NotSoDelayed marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
| } | ||||||
|
|
||||||
| 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(isNegated() ? "will not" : "will") | ||||||
| .append("be whitelisted") | ||||||
| .toString(); | ||||||
|
Comment on lines
+66
to
+71
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. this should use if statements instead of ternary to improve readability There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. was this resolved? |
||||||
| } | ||||||
|
|
||||||
| } | ||||||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -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])]", | ||
NotSoDelayed marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| "player whitelist [state:(:add[ed]|remove[d])]") | ||
| .description( | ||
| "Called whenever the server's or a player's whitelist state has been changed.", | ||
| "Use <a href='conditions.html#CondWillBeWhitelisted'>will be whitelist</a> 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")); | ||
| } | ||
NotSoDelayed marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| 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); | ||
| } | ||
NotSoDelayed marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| 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(); | ||
| } | ||
|
|
||
| } | ||
Uh oh!
There was an error while loading. Please reload this page.