aboutsummaryrefslogtreecommitdiffhomepage
path: root/Spigot-Server-Patches/0180-Bound-Treasure-Maps-to-World-Border.patch
blob: e0e821154183d3eb0dc9a6bf915ea37072ebf604 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
From 45d3e0ca5f29f36d42f5accd1002ef28e8154f4c 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/server/StructureGenerator.java b/src/main/java/net/minecraft/server/StructureGenerator.java
index 9c1605b14..77236760f 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 632eb1c9d..1bb172bbf 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