Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion src/main/java/ch/njol/skript/Skript.java
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@
import org.skriptlang.skript.bukkit.registration.BukkitSyntaxInfos;
import org.skriptlang.skript.bukkit.tags.TagModule;
import org.skriptlang.skript.common.CommonModule;
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;
Expand Down Expand Up @@ -571,7 +572,8 @@ public void onEnable() {
new DamageSourceModule(),
new ItemComponentModule(),
new BrewingModule(),
new CommonModule()
new CommonModule(),
new WhitelistModule()
);
} catch (final Exception e) {
exception(e, "Could not load required .class files: " + e.getLocalizedMessage());
Expand Down
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);
}
}

}
Original file line number Diff line number Diff line change
@@ -1,29 +1,24 @@
package ch.njol.skript.conditions;
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.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.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;
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.")
@Examples({
"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)")
@RequiredPlugins("MC 1.17+ (enforce)")
public class CondIsWhitelisted extends Condition {

static {
Expand All @@ -33,9 +28,7 @@ public class CondIsWhitelisted extends Condition {
"[the] server white[ ]list (is|not:(isn't|is not)) enforced");
}

@Nullable
private Expression<OfflinePlayer> players;

private boolean isServer;
private boolean isEnforce;

Expand All @@ -59,14 +52,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();
}

}
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")
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
@Keywords("server, player")
@Keywords({"server", "player"})

@Example("""
on server whitelist:
send "Server whitelist has been set to %whether server will be whitelisted%" to all ops
""")
@Example("""
on player whitelist:
send "Whitelist of player %event-player% has been set to %whether server will be whitelisted%" to all ops
""")
@Since("INSERT VERSION")
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(isNegated() ? "will not" : "will")
.append("be whitelisted")
.toString();
Comment on lines +66 to +71
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this should use if statements instead of ternary to improve readability

Copy link
Member

Choose a reason for hiding this comment

The 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
@@ -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;
Expand All @@ -9,11 +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.RequiredPlugins;
import ch.njol.skript.doc.*;
import ch.njol.skript.lang.Effect;
import ch.njol.skript.lang.Expression;
import ch.njol.skript.lang.SkriptParser.ParseResult;
Expand All @@ -25,12 +21,9 @@
"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")
@Example("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!";
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
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;

public class EvtPlayerWhitelist extends SkriptEvent {

private enum EventState {

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change

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]|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 <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 state changed:",
"\tsend \"Whitelist of player %event-offlineplayer% has been set to %whether server will be whitelisted%\" to all ops")
.since("INSERT VERSION");

EventValues.registerEventValue(WhitelistStateUpdateEvent.class, OfflinePlayer.class, WhitelistStateUpdateEvent::getPlayer);
}

private @Nullable EventState state = null;

@Override
public boolean init(Literal<?>[] args, int matchedPattern, ParseResult parseResult) {
if (matchedPattern == 1)
state = EventState.WHITELISTED;
else if (matchedPattern == 2)
state = EventState.UNWHITELISTED;
return true;
}

@Override
public boolean check(Event event) {
if (state != null)
return (state == EventState.WHITELISTED) == (((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 != null) {
if (state == EventState.WHITELISTED)
builder.append("added to whitelist");
else
builder.append("removed from whitelist");
} else {
builder.append("whitelist state changed");
}
return builder.toString();
}

}
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 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;

public class EvtServerWhitelist extends SkriptEvent {

private enum EventState {

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change

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(
"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("INSERT VERSION");
}

private @Nullable EventState state = null;

@Override
public boolean init(Literal<?>[] args, int matchedPattern, ParseResult parseResult) {
if (parseResult.hasTag("on"))
state = EventState.ON;
else if (parseResult.hasTag("off"))
state = EventState.OFF;
return true;
}

@Override
public boolean check(Event event) {
if (state != null)
return (state == EventState.ON) == ((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 != null)
builder.append(state);
return builder.toString();
}

}
Loading