diff --git a/patches/api/additions-to-PlayerGameModeChangeEvent.patch b/patches/api/additions-to-PlayerGameModeChangeEvent.patch index baac623927..7bbf0e2d37 100644 --- a/patches/api/additions-to-PlayerGameModeChangeEvent.patch +++ b/patches/api/additions-to-PlayerGameModeChangeEvent.patch @@ -8,7 +8,17 @@ diff --git a/src/main/java/org/bukkit/event/player/PlayerGameModeChangeEvent.jav index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/org/bukkit/event/player/PlayerGameModeChangeEvent.java +++ b/src/main/java/org/bukkit/event/player/PlayerGameModeChangeEvent.java -@@ -0,0 +0,0 @@ public class PlayerGameModeChangeEvent extends PlayerEvent implements Cancellabl +@@ -0,0 +0,0 @@ import org.jetbrains.annotations.NotNull; + + /** + * Called when the GameMode of the player is changed. ++ *

++ * NOTE: When {@link #getCause()} is {@link Cause#DEFAULT_GAMEMODE}, ++ * the Player from {@link #getPlayer()} might not be fully online at ++ * the time this event is fired. Plugins should use {@link Player#isOnline()} ++ * to check before changing player state. + */ + public class PlayerGameModeChangeEvent extends PlayerEvent implements Cancellable { private static final HandlerList handlers = new HandlerList(); private boolean cancelled; private final GameMode newGameMode; diff --git a/patches/server/additions-to-PlayerGameModeChangeEvent.patch b/patches/server/additions-to-PlayerGameModeChangeEvent.patch index b0cb608d48..195076d6e9 100644 --- a/patches/server/additions-to-PlayerGameModeChangeEvent.patch +++ b/patches/server/additions-to-PlayerGameModeChangeEvent.patch @@ -79,6 +79,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 } public void loadGameTypes(@Nullable CompoundTag nbt) { ++ // Paper start + if (this.server.getForcedGameType() != null && this.server.getForcedGameType() != ServerPlayer.readPlayerMode(nbt, "playerGameType")) { + if (new PlayerGameModeChangeEvent(this.getBukkitEntity(), GameMode.getByValue(this.server.getDefaultGameType().getId()), org.bukkit.event.player.PlayerGameModeChangeEvent.Cause.DEFAULT_GAMEMODE, null).callEvent()) { + this.gameMode.setGameModeForPlayer(this.server.getForcedGameType(), GameType.DEFAULT_MODE); @@ -87,6 +88,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 + } + return; + } ++ // Paper end this.gameMode.setGameModeForPlayer(this.calculateGameModeForNewPlayer(ServerPlayer.readPlayerMode(nbt, "playerGameType")), ServerPlayer.readPlayerMode(nbt, "previousPlayerGameType")); }