Skip to content
Open
Show file tree
Hide file tree
Changes from 7 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,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,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")
@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")
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();
}

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

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

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

@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();
}

}
Loading
Loading