aboutsummaryrefslogtreecommitdiffhomepage
path: root/Spigot-API-Patches
diff options
context:
space:
mode:
authorJake Potrebic <[email protected]>2021-05-18 01:35:39 -0700
committerGitHub <[email protected]>2021-05-18 10:35:39 +0200
commit979135878c653fb5c504286260447f4b6b86e6a5 (patch)
treed435599c84308a29096c9381ee688bfd5d140fbb /Spigot-API-Patches
parent51e1e58d2c4577f5197ea6368cb6f652320d3dba (diff)
downloadPaper-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.patch111
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
+ }