From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: violetc <58360096+s-yh-china@users.noreply.github.com> Date: Sat, 30 Oct 2021 21:07:43 +0800 Subject: [PATCH] Fix gravity block duper diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java index 864e6d223de55f42122485bf6a3c84bbb636479c..caed44af1b4c48ecd49a7248845a418dfd9b8fbb 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -442,6 +442,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return this.originWorld; } // Paper end - Entity origin API + /* Leaves - fix gravity block duper // Paper start - make end portalling safe public BlockPos portalBlock; public ServerLevel portalWorld; @@ -472,6 +473,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess this.teleportTo(worldserver, null); } // Paper end - make end portalling safe + */ // Paper start - optimise entity tracking final org.spigotmc.TrackingRange.TrackingRangeType trackingRangeType = org.spigotmc.TrackingRange.getTrackingRangeType(this); @@ -3265,7 +3267,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } this.processPortalCooldown(); - if (!io.papermc.paper.configuration.GlobalConfiguration.get().unsupportedSettings.allowUnsafeEndPortalTeleportation) this.tickEndPortal(); // Paper - make end portalling safe + // Leaves - fix gravity block duper } } diff --git a/src/main/java/net/minecraft/world/level/block/EndPortalBlock.java b/src/main/java/net/minecraft/world/level/block/EndPortalBlock.java index 7272d70c672b54dcf595beafd7a2ed33c96e35cb..d8d355b4ee4869fa9a5d7b4dcd81a3375dd976ba 100644 --- a/src/main/java/net/minecraft/world/level/block/EndPortalBlock.java +++ b/src/main/java/net/minecraft/world/level/block/EndPortalBlock.java @@ -61,15 +61,19 @@ public class EndPortalBlock extends BaseEntityBlock { // return; // CraftBukkit - always fire event in case plugins wish to change it } - // Paper start - move all of this logic into portal tick - entity.portalWorld = ((ServerLevel)world); - entity.portalBlock = pos.immutable(); - if (io.papermc.paper.configuration.GlobalConfiguration.get().unsupportedSettings.allowUnsafeEndPortalTeleportation) { - entity.tickEndPortal(); + // Leaves start - fix gravity block duper + // CraftBukkit start - Entity in portal + EntityPortalEnterEvent event = new EntityPortalEnterEvent(entity.getBukkitEntity(), new org.bukkit.Location(world.getWorld(), pos.getX(), pos.getY(), pos.getZ())); + world.getCraftServer().getPluginManager().callEvent(event); + + if (entity instanceof ServerPlayer) { + ((ServerPlayer) entity).changeDimension(worldserver, PlayerTeleportEvent.TeleportCause.END_PORTAL); + return; } - // Paper end - move all of this logic into portal tick + // CraftBukkit end + entity.changeDimension(worldserver); + // Leaves end - fix gravity block duper } - } @Override