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