diff --git a/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerGameModeChange.java b/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerGameModeChange.java index 1625dac946b..ed860fef1a2 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerGameModeChange.java +++ b/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerGameModeChange.java @@ -1,6 +1,7 @@ package org.skriptlang.skript.bukkit.entity.player.elements.events; import ch.njol.skript.lang.Literal; +import ch.njol.skript.lang.LiteralList; import ch.njol.skript.lang.SkriptEvent; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.skript.lang.SyntaxStringBuilder; @@ -15,11 +16,11 @@ public class EvtPlayerGameModeChange extends SkriptEvent { - public static void register(SyntaxRegistry syntaxRegistry, EventValueRegistry registry) { + public static void register(SyntaxRegistry syntaxRegistry, EventValueRegistry eventValueRegistry) { syntaxRegistry.register(BukkitSyntaxInfos.Event.KEY, BukkitSyntaxInfos.Event.builder(EvtPlayerGameModeChange.class, "Player GameMode Change") .supplier(EvtPlayerGameModeChange::new) .addEvent(PlayerGameModeChangeEvent.class) - .addPatterns("[player] game[ ]mode change [to %gamemode%]") + .addPatterns("[player] game[ ]mode change [to %-gamemodes%]") .addDescription(""" Called when a player's gamemode is changed. See gamemode. """) @@ -35,35 +36,39 @@ public static void register(SyntaxRegistry syntaxRegistry, EventValueRegistry re .addSince("1.0") .build()); - registry.register(EventValue.builder(PlayerGameModeChangeEvent.class, GameMode.class) + eventValueRegistry.register(EventValue.builder(PlayerGameModeChangeEvent.class, GameMode.class) .getter(PlayerGameModeChangeEvent::getNewGameMode) .patterns("gamemode") .build()); } - private Literal gamemode; + private Literal gamemodes; @Override @SuppressWarnings("unchecked") - public boolean init(Literal[] literals, int i, ParseResult parseResult) { - gamemode = (Literal) literals[0]; + public boolean init(Literal[] args, int matchedPattern, ParseResult parseResult) { + if (args[0] != null) { + gamemodes = (Literal) args[0]; + if (gamemodes.getAnd() && gamemodes instanceof LiteralList list) + list.invertAnd(); + } return true; } @Override public boolean check(Event event) { - if (gamemode == null) + if (gamemodes == null) return true; - GameMode gamemode = this.gamemode.getSingle(event); + PlayerGameModeChangeEvent playerEvent = (PlayerGameModeChangeEvent) event; - return playerEvent.getNewGameMode().equals(gamemode); + return this.gamemodes.check(event, gamemode -> gamemode.equals(playerEvent.getNewGameMode())); } @Override public String toString(@Nullable Event event, boolean debug) { return new SyntaxStringBuilder(event, debug) .append("player gamemode change") - .appendIf(gamemode != null, "to", gamemode) + .appendIf(gamemodes != null, "to", gamemodes) .toString(); }