From 7318fd9b00548085fc7ed532a1541aa11916fd94 Mon Sep 17 00:00:00 2001 From: Aikar Date: Tue, 20 Dec 2016 15:15:11 -0500 Subject: [PATCH] Bound Treasure Maps to World Border Make it so a Treasure Map does not target a structure outside of the World Border, where players are not even able to reach. This also would help the case where a players close to the border, and one that is outside happens to be closer, but unreachable, yet another reachable one is in border that would of been missed. diff --git a/src/main/java/net/minecraft/server/StructureGenerator.java b/src/main/java/net/minecraft/server/StructureGenerator.java index 9c1605b1..77236760 100644 --- a/src/main/java/net/minecraft/server/StructureGenerator.java +++ b/src/main/java/net/minecraft/server/StructureGenerator.java @@ -233,6 +233,9 @@ public abstract class StructureGenerator extends WorldGenBase { WorldGenBase.a(world.getSeed(), random, l2, i3); random.nextInt(); + + if (!world.getWorldBorder().isChunkInBounds(l2, i3)) { continue; } // Paper + if (structuregenerator.a(l2, i3)) { if (!flag1 || !world.b(l2, i3)) { return new BlockPosition((l2 << 4) + 8, 64, (i3 << 4) + 8); diff --git a/src/main/java/net/minecraft/server/WorldBorder.java b/src/main/java/net/minecraft/server/WorldBorder.java index 632eb1c9..1bb172bb 100644 --- a/src/main/java/net/minecraft/server/WorldBorder.java +++ b/src/main/java/net/minecraft/server/WorldBorder.java @@ -33,6 +33,18 @@ public class WorldBorder { return (double) (blockposition.getX() + 1) > this.b() && (double) blockposition.getX() < this.d() && (double) (blockposition.getZ() + 1) > this.c() && (double) blockposition.getZ() < this.e(); } + // Paper start + private final BlockPosition.MutableBlockPosition mutPos = new BlockPosition.MutableBlockPosition(); + public boolean isBlockInBounds(int chunkX, int chunkZ) { + mutPos.setValues(chunkX, 64, chunkZ); + return isInBounds(mutPos); + } + public boolean isChunkInBounds(int chunkX, int chunkZ) { + mutPos.setValues(((chunkX << 4) + 15), 64, (chunkZ << 4) + 15); + return isInBounds(mutPos); + } + // Paper end + public boolean isInBounds(ChunkCoordIntPair chunkcoordintpair) { return (double) chunkcoordintpair.e() > this.b() && (double) chunkcoordintpair.c() < this.d() && (double) chunkcoordintpair.f() > this.c() && (double) chunkcoordintpair.d() < this.e(); } -- 2.12.2