diff options
author | Jake Potrebic <[email protected]> | 2021-05-18 01:35:39 -0700 |
---|---|---|
committer | GitHub <[email protected]> | 2021-05-18 10:35:39 +0200 |
commit | 979135878c653fb5c504286260447f4b6b86e6a5 (patch) | |
tree | d435599c84308a29096c9381ee688bfd5d140fbb /Spigot-API-Patches | |
parent | 51e1e58d2c4577f5197ea6368cb6f652320d3dba (diff) | |
download | Paper-979135878c653fb5c504286260447f4b6b86e6a5.tar.gz Paper-979135878c653fb5c504286260447f4b6b86e6a5.zip |
Add cause and cancel message to PlayerGameModeChangeEvent (#5638)
Diffstat (limited to 'Spigot-API-Patches')
-rw-r--r-- | Spigot-API-Patches/0301-additions-to-PlayerGameModeChangeEvent.patch | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/Spigot-API-Patches/0301-additions-to-PlayerGameModeChangeEvent.patch b/Spigot-API-Patches/0301-additions-to-PlayerGameModeChangeEvent.patch new file mode 100644 index 0000000000..07c662e585 --- /dev/null +++ b/Spigot-API-Patches/0301-additions-to-PlayerGameModeChangeEvent.patch @@ -0,0 +1,111 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Jake Potrebic <[email protected]> +Date: Sat, 15 May 2021 10:04:50 -0700 +Subject: [PATCH] additions to PlayerGameModeChangeEvent + + +diff --git a/src/main/java/org/bukkit/event/player/PlayerGameModeChangeEvent.java b/src/main/java/org/bukkit/event/player/PlayerGameModeChangeEvent.java +index 4b96e0573c7ce32ad8c41124ee9ecab8359318a5..b71f37dc8ac00175efd9275e9d8988bb5f2d9c47 100644 +--- a/src/main/java/org/bukkit/event/player/PlayerGameModeChangeEvent.java ++++ b/src/main/java/org/bukkit/event/player/PlayerGameModeChangeEvent.java +@@ -13,10 +13,22 @@ public class PlayerGameModeChangeEvent extends PlayerEvent implements Cancellabl + private static final HandlerList handlers = new HandlerList(); + private boolean cancelled; + private final GameMode newGameMode; ++ // Paper start ++ private final Cause cause; ++ private net.kyori.adventure.text.Component cancelMessage; + ++ @Deprecated // Paper end + public PlayerGameModeChangeEvent(@NotNull final Player player, @NotNull final GameMode newGameMode) { ++ // Paper start ++ this(player, newGameMode, Cause.UNKNOWN, null); ++ } ++ ++ public PlayerGameModeChangeEvent(@NotNull final Player player, @NotNull final GameMode newGameMode, @NotNull Cause cause, @org.jetbrains.annotations.Nullable net.kyori.adventure.text.Component cancelMessage) { ++ // Paper end + super(player); + this.newGameMode = newGameMode; ++ this.cause = cause; // Paper ++ this.cancelMessage = cancelMessage; // Paper + } + + @Override +@@ -49,4 +61,77 @@ public class PlayerGameModeChangeEvent extends PlayerEvent implements Cancellabl + public static HandlerList getHandlerList() { + return handlers; + } ++ // Paper start ++ /** ++ * Gets the cause of this gamemode change. ++ * ++ * @return the cause ++ */ ++ @NotNull ++ public Cause getCause() { ++ return cause; ++ } ++ ++ /** ++ * <b>Only valid if the cause of the gamemode change was directly due to a command.</b>. ++ * Gets the message shown to the command user if the event is cancelled ++ * as a notification that a player's gamemode was not changed. ++ * <p> ++ * This returns {@code null} if the gamemode change was due to a plugin, or a ++ * player joining the game with a gamemode not equal to the server default gamemode ++ * and {@code force-gamemode} is set to true. ++ * ++ * @return the error message shown to the command user, null if not directly caused by a command ++ */ ++ @org.jetbrains.annotations.Nullable ++ public net.kyori.adventure.text.Component cancelMessage() { ++ return cancelMessage; ++ } ++ ++ /** ++ * Sets the message shown to the command user if the event was cancelled. ++ * <b>The message is only shown to cancelled events that are directly called by a command ++ * not by a plugin or a player joining with the wrong gamemode.</b> ++ * ++ * @param message the error message shown to the command user, null to show no message. ++ */ ++ public void cancelMessage(@org.jetbrains.annotations.Nullable net.kyori.adventure.text.Component message) { ++ this.cancelMessage = message; ++ } ++ ++ public enum Cause { ++ ++ /** ++ * A plugin changed the player's gamemode with ++ * {@link Player#setGameMode(GameMode)}. ++ */ ++ PLUGIN, ++ ++ /** ++ * The {@code /gamemode} command was used. ++ */ ++ COMMAND, ++ ++ /** ++ * A player had their gamemode changed as a result of ++ * the {@code /defaultgamemode} command, or they joined ++ * with a gamemode that was not the default gamemode and ++ * {@code force-gamemode} in {@code server.properties} is set to true. ++ */ ++ DEFAULT_GAMEMODE, ++ ++ /** ++ * When the player dies in a hardcore world and has their gamemode ++ * changed to {@link GameMode#SPECTATOR}. ++ */ ++ HARDCORE_DEATH, ++ ++ /** ++ * This cause is only used if a plugin fired their own ++ * {@link PlayerGameModeChangeEvent} and did not include a ++ * cause. Can usually be ignored. ++ */ ++ UNKNOWN, ++ } ++ // Paper end + } |