From f152cadda7b7aba9ba7c98bf9c7c4ef9870c264c Mon Sep 17 00:00:00 2001 From: md_5 Date: Tue, 4 Feb 2025 22:25:29 +1100 Subject: [PATCH] SPIGOT-8004: .setCancelled(true) does not cancel PlayerTeleportEvent.TeleportCause.SPECTATE --- .../minecraft/server/level/EntityPlayer.patch | 32 +++++++++++-------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/nms-patches/net/minecraft/server/level/EntityPlayer.patch b/nms-patches/net/minecraft/server/level/EntityPlayer.patch index 85cfb4238..e88bc39cd 100644 --- a/nms-patches/net/minecraft/server/level/EntityPlayer.patch +++ b/nms-patches/net/minecraft/server/level/EntityPlayer.patch @@ -106,8 +106,8 @@ + containerSynchronizer.sendSlotChange(containerMenu, s, getMainHandItem()); + }); + containerSynchronizer.sendSlotChange(inventoryMenu, ContainerPlayer.SHIELD_SLOT, getOffhandItem()); - } - ++ } ++ + // Yes, this doesn't match Vanilla, but it's the best we can do for now. + // If this is an issue, PRs are welcome + public final BlockPosition getSpawnPoint(WorldServer worldserver) { @@ -144,9 +144,9 @@ + } + + return blockposition; -+ } + } + // CraftBukkit end -+ + @Override public BlockPosition adjustSpawnLocation(WorldServer worldserver, BlockPosition blockposition) { AxisAlignedBB axisalignedbb = this.getDimensions(EntityPose.STANDING).makeBoundingBox(Vec3D.ZERO); @@ -544,11 +544,11 @@ } else { - return new TeleportTransition(this.server.overworld(), this, teleporttransition_a); + teleportTransition = new TeleportTransition(this.server.overworld(), this, teleporttransition_a); // CraftBukkit - } ++ } + // CraftBukkit start + if (reason == null) { + return teleportTransition; -+ } + } + + Player respawnPlayer = this.getBukkitEntity(); + Location location = CraftLocation.toBukkit(teleportTransition.position(), teleportTransition.newLevel().getWorld(), teleportTransition.yRot(), teleportTransition.xRot()); @@ -1078,16 +1078,22 @@ this.language = clientinformation.language(); this.requestedViewDistance = clientinformation.viewDistance(); this.chatVisibility = clientinformation.chatVisibility(); -@@ -1962,7 +2377,7 @@ +@@ -1962,7 +2377,13 @@ if (world instanceof WorldServer) { WorldServer worldserver = (WorldServer) world; - this.teleportTo(worldserver, this.camera.getX(), this.camera.getY(), this.camera.getZ(), Set.of(), this.getYRot(), this.getXRot(), false); -+ this.teleportTo(worldserver, this.camera.getX(), this.camera.getY(), this.camera.getZ(), Set.of(), this.getYRot(), this.getXRot(), false, TeleportCause.SPECTATE); // CraftBukkit ++ // CraftBukkit start ++ boolean result = this.teleportTo(worldserver, this.camera.getX(), this.camera.getY(), this.camera.getZ(), Set.of(), this.getYRot(), this.getXRot(), false, TeleportCause.SPECTATE); ++ if (!result) { ++ this.camera = entity1; ++ return; ++ } ++ // CraftBukkit end } if (entity != null) { -@@ -1999,11 +2414,11 @@ +@@ -1999,11 +2420,11 @@ @Nullable public IChatBaseComponent getTabListDisplayName() { @@ -1101,7 +1107,7 @@ } @Override -@@ -2046,6 +2461,32 @@ +@@ -2046,6 +2467,32 @@ } public void setRespawnPosition(ResourceKey resourcekey, @Nullable BlockPosition blockposition, float f, boolean flag, boolean flag1) { @@ -1134,7 +1140,7 @@ if (blockposition != null) { boolean flag2 = blockposition.equals(this.respawnPosition) && resourcekey.equals(this.respawnDimension); -@@ -2088,12 +2529,38 @@ +@@ -2088,12 +2535,38 @@ } @Override @@ -1174,7 +1180,7 @@ this.level().addFreshEntity(entityitem); ItemStack itemstack1 = entityitem.getItem(); -@@ -2375,10 +2842,12 @@ +@@ -2375,10 +2848,12 @@ return TicketType.ENDER_PEARL.timeout(); } @@ -1190,7 +1196,7 @@ } private static float calculateLookAtYaw(Vec3D vec3d, BlockPosition blockposition) { -@@ -2387,4 +2856,146 @@ +@@ -2387,4 +2862,146 @@ return (float) MathHelper.wrapDegrees(MathHelper.atan2(vec3d1.z, vec3d1.x) * 57.2957763671875D - 90.0D); } }