From 1f8634445880e6a5893900afc7f8c1611c118c8e Mon Sep 17 00:00:00 2001 From: Joseph Hirschfeld Date: Thu, 3 Mar 2016 02:46:17 -0600 Subject: [PATCH] Add configurable portal search radius --- .../world/level/block/NetherPortalBlock.java.patch | 12 +++++++++--- .../world/level/portal/PortalForcer.java.patch | 14 ++++++++------ 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/paper-server/patches/sources/net/minecraft/world/level/block/NetherPortalBlock.java.patch b/paper-server/patches/sources/net/minecraft/world/level/block/NetherPortalBlock.java.patch index 55b5220706..f99dd80b03 100644 --- a/paper-server/patches/sources/net/minecraft/world/level/block/NetherPortalBlock.java.patch +++ b/paper-server/patches/sources/net/minecraft/world/level/block/NetherPortalBlock.java.patch @@ -48,7 +48,7 @@ entity.setAsInsidePortal(this, pos); } -@@ -121,51 +133,66 @@ +@@ -121,51 +133,72 @@ @Nullable @Override public TeleportTransition getPortalDestination(ServerLevel world, Entity entity, BlockPos pos) { @@ -67,8 +67,14 @@ WorldBorder worldborder = worldserver1.getWorldBorder(); double d0 = DimensionType.getTeleportationScale(world.dimensionType(), worldserver1.dimensionType()); BlockPos blockposition1 = worldborder.clampToBounds(entity.getX() * d0, entity.getY(), entity.getZ() * d0); ++ // Paper start - Configurable portal search radius ++ int portalSearchRadius = worldserver1.paperConfig().environment.portalSearchRadius; ++ if (entity.level().paperConfig().environment.portalSearchVanillaDimensionScaling && flag) { // flag = is going to nether ++ portalSearchRadius = (int) (portalSearchRadius / worldserver1.dimensionType().coordinateScale()); ++ } ++ // Paper end - Configurable portal search radius + // CraftBukkit start -+ CraftPortalEvent event = entity.callPortalEvent(entity, CraftLocation.toBukkit(blockposition1, worldserver1.getWorld()), PlayerTeleportEvent.TeleportCause.NETHER_PORTAL, flag ? 16 : 128, 16); ++ CraftPortalEvent event = entity.callPortalEvent(entity, CraftLocation.toBukkit(blockposition1, worldserver1.getWorld()), PlayerTeleportEvent.TeleportCause.NETHER_PORTAL, portalSearchRadius, worldserver1.paperConfig().environment.portalCreateRadius); // Paper - use custom portal search radius + if (event == null) { + return null; + } @@ -128,7 +134,7 @@ } private static TeleportTransition getDimensionTransitionFromExit(Entity entity, BlockPos pos, BlockUtil.FoundRectangle exitPortalRectangle, ServerLevel world, TeleportTransition.PostTeleportTransition postDimensionTransition) { -@@ -203,7 +230,7 @@ +@@ -203,7 +236,7 @@ Vec3 vec3d1 = new Vec3((double) blockposition.getX() + (flag ? d2 : d4), (double) blockposition.getY() + d3, (double) blockposition.getZ() + (flag ? d4 : d2)); Vec3 vec3d2 = PortalShape.findCollisionFreePosition(vec3d1, world, entity, entitysize); diff --git a/paper-server/patches/sources/net/minecraft/world/level/portal/PortalForcer.java.patch b/paper-server/patches/sources/net/minecraft/world/level/portal/PortalForcer.java.patch index 63a46778ba..d2424a498a 100644 --- a/paper-server/patches/sources/net/minecraft/world/level/portal/PortalForcer.java.patch +++ b/paper-server/patches/sources/net/minecraft/world/level/portal/PortalForcer.java.patch @@ -1,8 +1,10 @@ --- a/net/minecraft/world/level/portal/PortalForcer.java +++ b/net/minecraft/world/level/portal/PortalForcer.java -@@ -43,33 +43,50 @@ +@@ -42,34 +42,52 @@ + this.level = world; } ++ @io.papermc.paper.annotation.DoNotUse // Paper public Optional findClosestPortalPosition(BlockPos pos, boolean destIsNether, WorldBorder worldBorder) { + // CraftBukkit start + return this.findClosestPortalPosition(pos, worldBorder, destIsNether ? 16 : 128); // Search Radius @@ -62,7 +64,7 @@ int j; int k; -@@ -95,7 +112,7 @@ +@@ -95,7 +113,7 @@ if (i1 <= 0 || i1 >= 3) { blockposition_mutableblockposition1.setY(k); if (this.canHostFrame(blockposition_mutableblockposition1, blockposition_mutableblockposition, enumdirection, 0)) { @@ -71,7 +73,7 @@ if (this.canHostFrame(blockposition_mutableblockposition1, blockposition_mutableblockposition, enumdirection, -1) && this.canHostFrame(blockposition_mutableblockposition1, blockposition_mutableblockposition, enumdirection, 1) && (d0 == -1.0D || d0 > d2)) { d0 = d2; -@@ -122,6 +139,7 @@ +@@ -122,6 +140,7 @@ int j1; int k1; @@ -79,7 +81,7 @@ if (d0 == -1.0D) { j1 = Math.max(this.level.getMinY() - -1, 70); k1 = i - 9; -@@ -129,7 +147,7 @@ +@@ -129,7 +148,7 @@ return Optional.empty(); } @@ -88,7 +90,7 @@ blockposition1 = worldborder.clampToBounds(blockposition1); Direction enumdirection1 = enumdirection.getClockWise(); -@@ -139,7 +157,7 @@ +@@ -139,7 +158,7 @@ BlockState iblockdata = i1 < 0 ? Blocks.OBSIDIAN.defaultBlockState() : Blocks.AIR.defaultBlockState(); blockposition_mutableblockposition.setWithOffset(blockposition1, l * enumdirection.getStepX() + k * enumdirection1.getStepX(), i1, l * enumdirection.getStepZ() + k * enumdirection1.getStepZ()); @@ -97,7 +99,7 @@ } } } -@@ -149,20 +167,30 @@ +@@ -149,20 +168,30 @@ for (k1 = -1; k1 < 4; ++k1) { if (j1 == -1 || j1 == 2 || k1 == -1 || k1 == 3) { blockposition_mutableblockposition.setWithOffset(blockposition1, j1 * enumdirection.getStepX(), k1, j1 * enumdirection.getStepZ());