diff --git a/paper-server/nms-patches/EntityPlayer.patch b/paper-server/nms-patches/EntityPlayer.patch index d9f1f242ea..d5fa237677 100644 --- a/paper-server/nms-patches/EntityPlayer.patch +++ b/paper-server/nms-patches/EntityPlayer.patch @@ -189,17 +189,17 @@ + } + } + } -+ -+ IChatBaseComponent chatmessage = this.getCombatTracker().getDeathMessage(); -+ -+ String deathmessage = chatmessage.toPlainText(); -+ org.bukkit.event.entity.PlayerDeathEvent event = CraftEventFactory.callPlayerDeathEvent(this, loot, deathmessage, keepInventory); - if (scoreboardteambase != null && scoreboardteambase.getDeathMessageVisibility() != ScoreboardTeamBase.EnumNameTagVisibility.ALWAYS) { - if (scoreboardteambase.getDeathMessageVisibility() == ScoreboardTeamBase.EnumNameTagVisibility.HIDE_FOR_OTHER_TEAMS) { - this.server.getPlayerList().a((EntityHuman) this, this.getCombatTracker().getDeathMessage()); - } else if (scoreboardteambase.getDeathMessageVisibility() == ScoreboardTeamBase.EnumNameTagVisibility.HIDE_FOR_OWN_TEAM) { - this.server.getPlayerList().b((EntityHuman) this, this.getCombatTracker().getDeathMessage()); ++ IChatBaseComponent chatmessage = this.getCombatTracker().getDeathMessage(); ++ ++ String deathmessage = chatmessage.toPlainText(); ++ org.bukkit.event.entity.PlayerDeathEvent event = CraftEventFactory.callPlayerDeathEvent(this, loot, deathmessage, keepInventory); ++ + String deathMessage = event.getDeathMessage(); + + if (deathMessage != null && deathMessage.length() > 0 && flag) { // TODO: allow plugins to override? @@ -512,7 +512,7 @@ } public void a(EnumHand enumhand) { -@@ -955,11 +1161,139 @@ +@@ -955,11 +1161,145 @@ } public void M() { @@ -615,6 +615,12 @@ + return super.toString() + "(" + this.getName() + " at " + this.locX + "," + this.locY + "," + this.locZ + ")"; + } + ++ // SPIGOT-1903, MC-98153 ++ public void forceSetPositionRotation(double x, double y, double z, float yaw, float pitch) { ++ this.setPositionRotation(x, y, z, yaw, pitch); ++ this.playerConnection.d(); ++ } ++ + public void reset() { + float exp = 0; + boolean keepInventory = this.world.getGameRules().getBoolean("keepInventory"); diff --git a/paper-server/nms-patches/PlayerConnection.patch b/paper-server/nms-patches/PlayerConnection.patch index 8a7ef1f0ff..dcf3649c4d 100644 --- a/paper-server/nms-patches/PlayerConnection.patch +++ b/paper-server/nms-patches/PlayerConnection.patch @@ -103,7 +103,7 @@ public void E_() { this.d(); -@@ -110,15 +182,21 @@ +@@ -110,21 +182,27 @@ } this.minecraftServer.methodProfiler.b(); @@ -125,6 +125,13 @@ this.disconnect("You have been idle for too long!"); } + } + +- private void d() { ++ public void d() { // PAIL: syncPosition, private->public + this.l = this.player.locX; + this.m = this.player.locY; + this.n = this.player.locZ; @@ -138,19 +216,40 @@ } diff --git a/paper-server/nms-patches/PlayerList.patch b/paper-server/nms-patches/PlayerList.patch index a1c98d9f30..207bdf0c18 100644 --- a/paper-server/nms-patches/PlayerList.patch +++ b/paper-server/nms-patches/PlayerList.patch @@ -442,7 +442,7 @@ + location.setWorld(server.getWorldServer(i).getWorld()); } + WorldServer worldserver = ((CraftWorld) location.getWorld()).getHandle(); -+ entityplayer1.setLocation(location.getX(), location.getY(), location.getZ(), location.getYaw(), location.getPitch()); ++ entityplayer1.forceSetPositionRotation(location.getX(), location.getY(), location.getZ(), location.getYaw(), location.getPitch()); + // CraftBukkit end worldserver.getChunkProviderServer().getChunkAt((int) entityplayer1.locX >> 4, (int) entityplayer1.locZ >> 4);