Skip to content
Open
Show file tree
Hide file tree
Changes from 4 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
3 changes: 2 additions & 1 deletion src/main/java/ch/njol/skript/Skript.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);
Expand Down
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
@@ -1,14 +1,14 @@
package ch.njol.skript.conditions;
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.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;
Expand All @@ -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 {
Expand All @@ -33,9 +32,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 +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();
}

}
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"})

@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")
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 @@ -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;
Expand All @@ -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!";
Expand Down
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])]",
"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"));
}
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();
}

}
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -49,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;
}
}
}

Expand All @@ -101,7 +92,7 @@ public Class<? extends OfflinePlayer> getReturnType() {

@Override
public String toString(@Nullable Event event, boolean debug) {
return "whitelist";
return "the whitelist";
}

}
Loading
Loading