geforkt von Mirrors/Paper
ef0e5a642d
Upstream has released updates that appear to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing Bukkit Changes: 9ae3f10f SPIGOT-3842: Add Player#fireworkBoost() and expand Firework API 48c0c547 PR-786: Add methods to get sounds from entities CraftBukkit Changes: 5cc9c022a SPIGOT-7152: Handle hand item changing during air interact event 4ffa1acf6 SPIGOT-7154: Players get kicked when interacting with a conversation 4daa21123 SPIGOT-3842: Add Player#fireworkBoost() and expand Firework API e5d6a9bbf PR-1100: Add methods to get sounds from entities b7e9f1c8b SPIGOT-7146: Reduce use of Material switch in ItemMeta Spigot Changes: 4c157bb4 Rebuild patches
62 Zeilen
3.4 KiB
Diff
62 Zeilen
3.4 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: JRoy <joshroy126@gmail.com>
|
|
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/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
|
|
index 1cb6900489ad25ddd40a3b8c39f436c03a72b3dc..8fd4494fcd29e92856938792b922ee3ef0102604 100644
|
|
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
|
|
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
|
|
@@ -842,6 +842,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
|
|
@@ -852,7 +853,7 @@ public abstract class PlayerList {
|
|
Optional optional;
|
|
|
|
if (blockposition != null) {
|
|
- optional = net.minecraft.world.entity.player.Player.findRespawnPositionAndUseSpawnBlock(worldserver1, blockposition, f, flag1, flag);
|
|
+ optional = net.minecraft.world.entity.player.Player.findRespawnPositionAndUseSpawnBlock(worldserver1, blockposition, f, flag1, true); // Paper - Fix SPIGOT-5989
|
|
} else {
|
|
optional = Optional.empty();
|
|
}
|
|
@@ -896,7 +897,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 {
|
|
@@ -934,8 +940,12 @@ public abstract class PlayerList {
|
|
}
|
|
// entityplayer1.initInventoryMenu();
|
|
entityplayer1.setHealth(entityplayer1.getHealth());
|
|
- if (flag2) {
|
|
- entityplayer1.connection.send(new ClientboundSoundPacket(SoundEvents.RESPAWN_ANCHOR_DEPLETE, SoundSource.BLOCKS, (double) blockposition.getX(), (double) blockposition.getY(), (double) blockposition.getZ(), 1.0F, 1.0F, worldserver1.getRandom().nextLong()));
|
|
+ // Paper start - Fix SPIGOT-5989
|
|
+ if (flag2 && !isLocAltered) {
|
|
+ BlockState data = worldserver1.getBlockState(blockposition);
|
|
+ worldserver1.setBlock(blockposition, data.setValue(net.minecraft.world.level.block.RespawnAnchorBlock.CHARGE, data.getValue(net.minecraft.world.level.block.RespawnAnchorBlock.CHARGE) - 1), 3);
|
|
+ entityplayer1.connection.send(new ClientboundSoundPacket(SoundEvents.RESPAWN_ANCHOR_DEPLETE, SoundSource.BLOCKS, (double) location.getX(), (double) location.getY(), (double) location.getZ(), 1.0F, 1.0F, worldserver1.getRandom().nextLong()));
|
|
+ // Paper end
|
|
}
|
|
// Added from changeDimension
|
|
this.sendAllPlayerInfo(entityplayer); // Update health, etc...
|