tons of patches (#5835)
This commit is contained in:
		
					parent
					
						
							
								2119f06b5a
							
						
					
				
			
			
				commit
				
					
						b8cf7d380e
					
				
			
		
					 136 changed files with 814 additions and 1979 deletions
				
			
		
							
								
								
									
										150
									
								
								patches/server/additions-to-PlayerGameModeChangeEvent.patch
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										150
									
								
								patches/server/additions-to-PlayerGameModeChangeEvent.patch
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,150 @@
 | 
			
		|||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
 | 
			
		||||
From: Jake Potrebic <jake.m.potrebic@gmail.com>
 | 
			
		||||
Date: Sat, 15 May 2021 10:04:43 -0700
 | 
			
		||||
Subject: [PATCH] additions to PlayerGameModeChangeEvent
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
diff --git a/src/main/java/net/minecraft/server/commands/DefaultGameModeCommands.java b/src/main/java/net/minecraft/server/commands/DefaultGameModeCommands.java
 | 
			
		||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
 | 
			
		||||
--- a/src/main/java/net/minecraft/server/commands/DefaultGameModeCommands.java
 | 
			
		||||
+++ b/src/main/java/net/minecraft/server/commands/DefaultGameModeCommands.java
 | 
			
		||||
@@ -0,0 +0,0 @@ public class DefaultGameModeCommands {
 | 
			
		||||
         GameType gameType = minecraftServer.getForcedGameType();
 | 
			
		||||
         if (gameType != null) {
 | 
			
		||||
             for(ServerPlayer serverPlayer : minecraftServer.getPlayerList().getPlayers()) {
 | 
			
		||||
-                if (serverPlayer.setGameMode(gameType)) {
 | 
			
		||||
-                    ++i;
 | 
			
		||||
+                // Paper start - extend PlayerGameModeChangeEvent
 | 
			
		||||
+                org.bukkit.event.player.PlayerGameModeChangeEvent event = serverPlayer.setGameMode(gameType, org.bukkit.event.player.PlayerGameModeChangeEvent.Cause.DEFAULT_GAMEMODE, net.kyori.adventure.text.Component.empty());
 | 
			
		||||
+                if (event != null && event.isCancelled()) {
 | 
			
		||||
+                    source.sendSuccess(io.papermc.paper.adventure.PaperAdventure.asVanilla(event.cancelMessage()), false);
 | 
			
		||||
                 }
 | 
			
		||||
+                // Paper end
 | 
			
		||||
+                    ++i;
 | 
			
		||||
             }
 | 
			
		||||
         }
 | 
			
		||||
 
 | 
			
		||||
diff --git a/src/main/java/net/minecraft/server/commands/GameModeCommand.java b/src/main/java/net/minecraft/server/commands/GameModeCommand.java
 | 
			
		||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
 | 
			
		||||
--- a/src/main/java/net/minecraft/server/commands/GameModeCommand.java
 | 
			
		||||
+++ b/src/main/java/net/minecraft/server/commands/GameModeCommand.java
 | 
			
		||||
@@ -0,0 +0,0 @@ public class GameModeCommand {
 | 
			
		||||
         int i = 0;
 | 
			
		||||
 
 | 
			
		||||
         for(ServerPlayer serverPlayer : targets) {
 | 
			
		||||
-            if (serverPlayer.setGameMode(gameMode)) {
 | 
			
		||||
+            // Paper start - extend PlayerGameModeChangeEvent
 | 
			
		||||
+            org.bukkit.event.player.PlayerGameModeChangeEvent event = serverPlayer.setGameMode(gameMode, org.bukkit.event.player.PlayerGameModeChangeEvent.Cause.COMMAND, net.kyori.adventure.text.Component.empty());
 | 
			
		||||
+            if (event != null && !event.isCancelled()) {
 | 
			
		||||
                 logGamemodeChange(context.getSource(), serverPlayer, gameMode);
 | 
			
		||||
                 ++i;
 | 
			
		||||
+            } else if (event != null && event.cancelMessage() != null) {
 | 
			
		||||
+                context.getSource().sendSuccess(io.papermc.paper.adventure.PaperAdventure.asVanilla(event.cancelMessage()), true);
 | 
			
		||||
+                // Paper end
 | 
			
		||||
             }
 | 
			
		||||
         }
 | 
			
		||||
 
 | 
			
		||||
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
 | 
			
		||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
 | 
			
		||||
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
 | 
			
		||||
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
 | 
			
		||||
@@ -0,0 +0,0 @@ public class ServerPlayer extends Player {
 | 
			
		||||
     }
 | 
			
		||||
 
 | 
			
		||||
     public boolean setGameMode(GameType gameMode) {
 | 
			
		||||
-        if (!this.gameMode.changeGameModeForPlayer(gameMode)) {
 | 
			
		||||
-            return false;
 | 
			
		||||
+        // Paper start - Add cause and nullable message to event
 | 
			
		||||
+        PlayerGameModeChangeEvent event = this.setGameMode(gameMode, org.bukkit.event.player.PlayerGameModeChangeEvent.Cause.UNKNOWN, null);
 | 
			
		||||
+        return event == null ? false : event.isCancelled();
 | 
			
		||||
+    }
 | 
			
		||||
+    public PlayerGameModeChangeEvent setGameMode(GameType gameMode, PlayerGameModeChangeEvent.Cause cause, net.kyori.adventure.text.Component message) {
 | 
			
		||||
+        PlayerGameModeChangeEvent event = this.gameMode.changeGameModeForPlayer(gameMode, cause, message);
 | 
			
		||||
+        if (event == null || event.isCancelled()) {
 | 
			
		||||
+            // Paper end
 | 
			
		||||
+            return null;
 | 
			
		||||
         } else {
 | 
			
		||||
             this.connection.send(new ClientboundGameEventPacket(ClientboundGameEventPacket.CHANGE_GAME_MODE, (float) gameMode.getId()));
 | 
			
		||||
             if (gameMode == GameType.SPECTATOR) {
 | 
			
		||||
@@ -0,0 +0,0 @@ public class ServerPlayer extends Player {
 | 
			
		||||
 
 | 
			
		||||
             this.onUpdateAbilities();
 | 
			
		||||
             this.updateEffectVisibility();
 | 
			
		||||
-            return true;
 | 
			
		||||
+            return event; // Paper
 | 
			
		||||
         }
 | 
			
		||||
     }
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +0,0 @@ public class ServerPlayer extends Player {
 | 
			
		||||
     }
 | 
			
		||||
 
 | 
			
		||||
     public void loadGameTypes(@Nullable CompoundTag nbt) {
 | 
			
		||||
+        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);
 | 
			
		||||
+            } else {
 | 
			
		||||
+                this.gameMode.setGameModeForPlayer(ServerPlayer.readPlayerMode(nbt,"playerGameType"), ServerPlayer.readPlayerMode(nbt, "previousPlayerGameType"));
 | 
			
		||||
+            }
 | 
			
		||||
+            return;
 | 
			
		||||
+        }
 | 
			
		||||
         this.gameMode.setGameModeForPlayer(this.calculateGameModeForNewPlayer(ServerPlayer.readPlayerMode(nbt, "playerGameType")), ServerPlayer.readPlayerMode(nbt, "previousPlayerGameType"));
 | 
			
		||||
     }
 | 
			
		||||
 
 | 
			
		||||
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
 | 
			
		||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
 | 
			
		||||
--- a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
 | 
			
		||||
+++ b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
 | 
			
		||||
@@ -0,0 +0,0 @@ public class ServerPlayerGameMode {
 | 
			
		||||
     }
 | 
			
		||||
 
 | 
			
		||||
     public boolean changeGameModeForPlayer(GameType gameMode) {
 | 
			
		||||
+        // Paper end
 | 
			
		||||
+        PlayerGameModeChangeEvent event = this.changeGameModeForPlayer(gameMode, org.bukkit.event.player.PlayerGameModeChangeEvent.Cause.UNKNOWN, null);
 | 
			
		||||
+        return event == null ? false : event.isCancelled();
 | 
			
		||||
+    }
 | 
			
		||||
+    public PlayerGameModeChangeEvent changeGameModeForPlayer(GameType gameMode, org.bukkit.event.player.PlayerGameModeChangeEvent.Cause cause, net.kyori.adventure.text.Component component) {
 | 
			
		||||
+        // Paper end
 | 
			
		||||
         if (gameMode == this.gameModeForPlayer) {
 | 
			
		||||
-            return false;
 | 
			
		||||
+            return null; // Paper
 | 
			
		||||
         } else {
 | 
			
		||||
             // CraftBukkit start
 | 
			
		||||
             PlayerGameModeChangeEvent event = new PlayerGameModeChangeEvent(this.player.getBukkitEntity(), GameMode.getByValue(gameMode.getId()));
 | 
			
		||||
             this.level.getCraftServer().getPluginManager().callEvent(event);
 | 
			
		||||
             if (event.isCancelled()) {
 | 
			
		||||
-                return false;
 | 
			
		||||
+                return event; // Paper
 | 
			
		||||
             }
 | 
			
		||||
             // CraftBukkit end
 | 
			
		||||
             this.setGameModeForPlayer(gameMode, this.gameModeForPlayer);
 | 
			
		||||
-            return true;
 | 
			
		||||
+            return event; // Paper
 | 
			
		||||
         }
 | 
			
		||||
     }
 | 
			
		||||
 
 | 
			
		||||
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
 | 
			
		||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
 | 
			
		||||
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
 | 
			
		||||
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
 | 
			
		||||
@@ -0,0 +0,0 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
 | 
			
		||||
 
 | 
			
		||||
                     this.player = this.server.getPlayerList().respawn(this.player, false);
 | 
			
		||||
                     if (this.server.isHardcore()) {
 | 
			
		||||
-                        this.player.setGameMode(GameType.SPECTATOR);
 | 
			
		||||
+                        this.player.setGameMode(GameType.SPECTATOR, org.bukkit.event.player.PlayerGameModeChangeEvent.Cause.HARDCORE_DEATH, null); // Paper
 | 
			
		||||
                         ((GameRules.BooleanValue) this.player.getLevel().getGameRules().getRule(GameRules.RULE_SPECTATORSGENERATECHUNKS)).set(false, this.server);
 | 
			
		||||
                     }
 | 
			
		||||
                 }
 | 
			
		||||
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
 | 
			
		||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
 | 
			
		||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
 | 
			
		||||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
 | 
			
		||||
@@ -0,0 +0,0 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
 | 
			
		||||
             throw new IllegalArgumentException("Mode cannot be null");
 | 
			
		||||
         }
 | 
			
		||||
 
 | 
			
		||||
-        this.getHandle().setGameMode(GameType.byId(mode.getValue()));
 | 
			
		||||
+        this.getHandle().setGameMode(GameType.byId(mode.getValue()), org.bukkit.event.player.PlayerGameModeChangeEvent.Cause.PLUGIN, null); // Paper
 | 
			
		||||
     }
 | 
			
		||||
 
 | 
			
		||||
     @Override
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue