-
-
Notifications
You must be signed in to change notification settings - Fork 414
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
Open
NotSoDelayed
wants to merge
13
commits into
SkriptLang:dev/feature
Choose a base branch
from
NotSoDelayed:feature/whitelist-module
base: dev/feature
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from 7 commits
Commits
Show all changes
13 commits
Select commit
Hold shift + click to select a range
18d347d
whitelist events, and moved into modules
NotSoDelayed b0df785
Optimize for current standards
NotSoDelayed 1cfa46c
Add missing check
NotSoDelayed 9ac835d
Fix test script file naming
NotSoDelayed 65b81dc
syntax refractor, remove redundant checks
NotSoDelayed a10b4b0
Use `@`Example annot
NotSoDelayed 4d451d9
Merge branch 'dev/feature' into feature/whitelist-module
Efnilite 2a9694b
migrate to @ Example annotations
NotSoDelayed 7fa0de4
optimize imports
NotSoDelayed df62f37
Merge remote-tracking branch 'origin/feature/whitelist-module' into f…
NotSoDelayed 92410d5
Merge remote-tracking branch 'upstream/dev/feature' into feature/whit…
NotSoDelayed 20904d1
Use proper enum values to differentiate event state
NotSoDelayed 93a67b7
Fix incorrect `@`Example usage
NotSoDelayed File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
20 changes: 20 additions & 0 deletions
20
src/main/java/org/skriptlang/skript/bukkit/whitelist/WhitelistModule.java
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
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 void load(SkriptAddon addon) { | ||
try { | ||
Skript.getAddonInstance().loadClasses("org.skriptlang.skript.bukkit.whitelist", "elements"); | ||
} catch (IOException e) { | ||
throw new RuntimeException(e); | ||
} | ||
} | ||
|
||
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
74 changes: 74 additions & 0 deletions
74
src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/CondWillBeWhitelisted.java
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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") | ||
@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" | ||
""") | ||
@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(); | ||
NotSoDelayed marked this conversation as resolved.
Show resolved
Hide resolved
|
||
} | ||
|
||
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
69 changes: 69 additions & 0 deletions
69
src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/EvtPlayerWhitelist.java
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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])", | ||
NotSoDelayed marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
"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 <a href='conditions.html#CondWillBeWhitelisted'>will be whitelisted</a> 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(""); | ||
NotSoDelayed marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
|
||
EventValues.registerEventValue(WhitelistStateUpdateEvent.class, OfflinePlayer.class, WhitelistStateUpdateEvent::getPlayer); | ||
} | ||
|
||
private Kleenean state = Kleenean.UNKNOWN; | ||
NotSoDelayed marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
|
||
@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") | ||
NotSoDelayed marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
.append("whitelist"); | ||
} else { | ||
builder.append("whitelist toggled"); | ||
} | ||
return builder.toString(); | ||
} | ||
|
||
} |
57 changes: 57 additions & 0 deletions
57
src/main/java/org/skriptlang/skript/bukkit/whitelist/elements/EvtServerWhitelist.java
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 <a href='conditions.html#CondWillBeWhitelisted'>will be whitelisted</a> 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; | ||
NotSoDelayed marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
|
||
@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(); | ||
} | ||
|
||
} |
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.