aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/api/0219-Add-API-for-quit-reason.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/api/0219-Add-API-for-quit-reason.patch')
-rw-r--r--patches/api/0219-Add-API-for-quit-reason.patch79
1 files changed, 79 insertions, 0 deletions
diff --git a/patches/api/0219-Add-API-for-quit-reason.patch b/patches/api/0219-Add-API-for-quit-reason.patch
new file mode 100644
index 0000000000..0350afaf92
--- /dev/null
+++ b/patches/api/0219-Add-API-for-quit-reason.patch
@@ -0,0 +1,79 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Mariell Hoversholm <[email protected]>
+Date: Sat, 14 Nov 2020 16:19:58 +0100
+Subject: [PATCH] Add API for quit reason
+
+
+diff --git a/src/main/java/org/bukkit/event/player/PlayerQuitEvent.java b/src/main/java/org/bukkit/event/player/PlayerQuitEvent.java
+index 14b27eaaf744736b3e56bb1383481df98a218c43..84703b5d174625b1a4a995a244e6400d2675fbb5 100644
+--- a/src/main/java/org/bukkit/event/player/PlayerQuitEvent.java
++++ b/src/main/java/org/bukkit/event/player/PlayerQuitEvent.java
+@@ -11,16 +11,28 @@ import org.jetbrains.annotations.Nullable;
+ public class PlayerQuitEvent extends PlayerEvent {
+ private static final HandlerList handlers = new HandlerList();
+ private net.kyori.adventure.text.Component quitMessage; // Paper
++ private final QuitReason reason; // Paper
+
+ @Deprecated // Paper
+ public PlayerQuitEvent(@NotNull final Player who, @Nullable final String quitMessage) {
++ // Paper start
++ this(who, quitMessage, null);
++ }
++ @Deprecated // Paper
++ public PlayerQuitEvent(@NotNull final Player who, @Nullable final String quitMessage, @Nullable QuitReason quitReason) {
+ super(who);
+ this.quitMessage = quitMessage != null ? net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacySection().deserialize(quitMessage) : null; // Paper
++ this.reason = quitReason == null ? QuitReason.DISCONNECTED : quitReason;
+ }
+ // Paper start
++ @Deprecated
+ public PlayerQuitEvent(@NotNull final Player who, @Nullable final net.kyori.adventure.text.Component quitMessage) {
++ this(who, quitMessage, null);
++ }
++ public PlayerQuitEvent(@NotNull final Player who, @Nullable final net.kyori.adventure.text.Component quitMessage, @Nullable QuitReason quitReason) {
+ super(who);
+ this.quitMessage = quitMessage;
++ this.reason = quitReason == null ? QuitReason.DISCONNECTED : quitReason;
+ }
+
+ /**
+@@ -75,4 +87,39 @@ public class PlayerQuitEvent extends PlayerEvent {
+ public static HandlerList getHandlerList() {
+ return handlers;
+ }
++
++ // Paper start
++ @NotNull
++ public QuitReason getReason() {
++ return this.reason;
++ }
++
++ public enum QuitReason {
++ /**
++ * The player left on their own behalf.
++ * <p>
++ * This does not mean they pressed the disconnect button in their client, but rather that the client severed the
++ * connection themselves. This may occur if no keep-alive packet is received on their side, among other things.
++ */
++ DISCONNECTED,
++
++ /**
++ * The player was kicked from the server.
++ */
++ KICKED,
++
++ /**
++ * The player has timed out.
++ */
++ TIMED_OUT,
++
++ /**
++ * The player's connection has entered an erroneous state.
++ * <p>
++ * Reasons for this may include invalid packets, invalid data, and uncaught exceptions in the packet handler,
++ * among others.
++ */
++ ERRONEOUS_STATE,
++ }
++ // Paper end
+ }