aboutsummaryrefslogtreecommitdiffhomepage
path: root/Spigot-Server-Patches/0544-Fix-SPIGOT-5989.patch
diff options
context:
space:
mode:
Diffstat (limited to 'Spigot-Server-Patches/0544-Fix-SPIGOT-5989.patch')
-rw-r--r--Spigot-Server-Patches/0544-Fix-SPIGOT-5989.patch61
1 files changed, 61 insertions, 0 deletions
diff --git a/Spigot-Server-Patches/0544-Fix-SPIGOT-5989.patch b/Spigot-Server-Patches/0544-Fix-SPIGOT-5989.patch
new file mode 100644
index 0000000000..dc6cca3282
--- /dev/null
+++ b/Spigot-Server-Patches/0544-Fix-SPIGOT-5989.patch
@@ -0,0 +1,61 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: JRoy <[email protected]>
+Date: Wed, 15 Jul 2020 21:42:52 -0400
+Subject: [PATCH] Fix SPIGOT-5989
+
+Before this fix, if a player was respawning to a respawn anchor and
+the respawn location was modified away from the anchor with the
+PlayerRespawnEvent, the anchor would still lose some charge.
+This fixes that by checking if the modified spawn location is
+still at a respawn anchor.
+
+diff --git a/src/main/java/net/minecraft/server/PlayerList.java b/src/main/java/net/minecraft/server/PlayerList.java
+index 9e438590113b2c7a318c812637c8aa14341df3e6..9382e8f79e8edec8885c629a36e230fbec50e1fb 100644
+--- a/src/main/java/net/minecraft/server/PlayerList.java
++++ b/src/main/java/net/minecraft/server/PlayerList.java
+@@ -766,6 +766,7 @@ public abstract class PlayerList {
+ // Paper start
+ boolean isBedSpawn = false;
+ boolean isRespawn = false;
++ boolean isLocAltered = false; // Paper - Fix SPIGOT-5989
+ // Paper end
+
+ // CraftBukkit start - fire PlayerRespawnEvent
+@@ -776,7 +777,7 @@ public abstract class PlayerList {
+ Optional optional;
+
+ if (blockposition != null) {
+- optional = EntityHuman.getBed(worldserver1, blockposition, flag1, flag);
++ optional = EntityHuman.getBed(worldserver1, blockposition, flag1, true); // Paper - Fix SPIGOT-5989
+ } else {
+ optional = Optional.empty();
+ }
+@@ -809,7 +810,12 @@ public abstract class PlayerList {
+ }
+ // Spigot End
+
+- location = respawnEvent.getRespawnLocation();
++ // Paper start - Fix SPIGOT-5989
++ if (!location.equals(respawnEvent.getRespawnLocation()) ) {
++ location = respawnEvent.getRespawnLocation();
++ isLocAltered = true;
++ }
++ // Paper end
+ if (!flag) entityplayer.reset(); // SPIGOT-4785
+ isRespawn = true; // Paper
+ } else {
+@@ -847,8 +853,12 @@ public abstract class PlayerList {
+ }
+ // entityplayer1.syncInventory();
+ entityplayer1.setHealth(entityplayer1.getHealth());
+- if (flag2) {
+- entityplayer1.playerConnection.sendPacket(new PacketPlayOutNamedSoundEffect(SoundEffects.BLOCK_RESPAWN_ANCHOR_DEPLETE, SoundCategory.BLOCKS, (double) blockposition.getX(), (double) blockposition.getY(), (double) blockposition.getZ(), 1.0F, 1.0F));
++ // Paper start - Fix SPIGOT-5989
++ if (flag2 && !isLocAltered) {
++ IBlockData data = worldserver1.getType(blockposition);
++ worldserver1.setTypeAndData(blockposition, data.set(BlockRespawnAnchor.a, data.get(BlockRespawnAnchor.a) - 1), 3);
++ entityplayer1.playerConnection.sendPacket(new PacketPlayOutNamedSoundEffect(SoundEffects.BLOCK_RESPAWN_ANCHOR_DEPLETE, SoundCategory.BLOCKS, (double) location.getX(), (double) location.getY(), (double) location.getZ(), 1.0F, 1.0F));
++ // Paper end
+ }
+ // Added from changeDimension
+ updateClient(entityplayer); // Update health, etc...