2021-06-11 14:02:28 +02:00
|
|
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
|
|
From: Aikar <aikar@aikar.co>
|
|
|
|
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/world/level/border/WorldBorder.java b/src/main/java/net/minecraft/world/level/border/WorldBorder.java
|
2021-11-23 14:22:49 +01:00
|
|
|
index 6ec5a1525d0b8ced8fe78d3eab29c5eb82996844..2442c287a7f26cfee10a19e9015558cdebdcf3ac 100644
|
2021-06-11 14:02:28 +02:00
|
|
|
--- a/src/main/java/net/minecraft/world/level/border/WorldBorder.java
|
|
|
|
+++ b/src/main/java/net/minecraft/world/level/border/WorldBorder.java
|
2021-11-23 14:22:49 +01:00
|
|
|
@@ -37,6 +37,18 @@ public class WorldBorder {
|
2021-06-11 14:02:28 +02:00
|
|
|
return (double) (pos.getX() + 1) > this.getMinX() && (double) pos.getX() < this.getMaxX() && (double) (pos.getZ() + 1) > this.getMinZ() && (double) pos.getZ() < this.getMaxZ();
|
|
|
|
}
|
|
|
|
|
|
|
|
+ // Paper start
|
|
|
|
+ private final BlockPos.MutableBlockPos mutPos = new BlockPos.MutableBlockPos();
|
|
|
|
+ public boolean isBlockInBounds(int chunkX, int chunkZ) {
|
2021-06-17 23:39:36 +02:00
|
|
|
+ this.mutPos.set(chunkX, 64, chunkZ);
|
|
|
|
+ return this.isWithinBounds(this.mutPos);
|
2021-06-11 14:02:28 +02:00
|
|
|
+ }
|
|
|
|
+ public boolean isChunkInBounds(int chunkX, int chunkZ) {
|
2021-06-17 23:39:36 +02:00
|
|
|
+ this.mutPos.set(((chunkX << 4) + 15), 64, (chunkZ << 4) + 15);
|
|
|
|
+ return this.isWithinBounds(this.mutPos);
|
2021-06-11 14:02:28 +02:00
|
|
|
+ }
|
|
|
|
+ // Paper end
|
|
|
|
+
|
|
|
|
public boolean isWithinBounds(ChunkPos pos) {
|
|
|
|
return (double) pos.getMaxBlockX() > this.getMinX() && (double) pos.getMinBlockX() < this.getMaxX() && (double) pos.getMaxBlockZ() > this.getMinZ() && (double) pos.getMinBlockZ() < this.getMaxZ();
|
|
|
|
}
|
2022-03-01 06:43:03 +01:00
|
|
|
diff --git a/src/main/java/net/minecraft/world/level/chunk/ChunkGenerator.java b/src/main/java/net/minecraft/world/level/chunk/ChunkGenerator.java
|
2022-04-16 10:29:50 +02:00
|
|
|
index 30ee07433cfee7c7911dcea6d8bfc58eacf5833a..fff5c9d40a0bab8642376db3ec25cc1e8d666fa6 100644
|
2022-03-01 06:43:03 +01:00
|
|
|
--- a/src/main/java/net/minecraft/world/level/chunk/ChunkGenerator.java
|
|
|
|
+++ b/src/main/java/net/minecraft/world/level/chunk/ChunkGenerator.java
|
2022-04-16 10:29:50 +02:00
|
|
|
@@ -440,6 +440,7 @@ public abstract class ChunkGenerator implements BiomeManager.NoiseBiomeSource {
|
2022-03-01 06:43:03 +01:00
|
|
|
int l1 = i + i1 * j1;
|
|
|
|
int i2 = j + i1 * k1;
|
|
|
|
ChunkPos chunkcoordintpair = randomspreadstructureplacement.getPotentialFeatureChunk(l, l1, i2);
|
|
|
|
+ if (!iworldreader.getWorldBorder().isChunkInBounds(chunkcoordintpair.x, chunkcoordintpair.z)) { continue; } // Paper
|
|
|
|
Iterator iterator = set.iterator();
|
|
|
|
|
|
|
|
while (iterator.hasNext()) {
|