summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--nms-patches/WorldGenFactory.patch11
-rw-r--r--src/main/java/org/bukkit/craftbukkit/CraftWorld.java8
-rw-r--r--src/test/java/org/bukkit/StructureTypeTest.java45
3 files changed, 64 insertions, 0 deletions
diff --git a/nms-patches/WorldGenFactory.patch b/nms-patches/WorldGenFactory.patch
new file mode 100644
index 00000000..ff610567
--- /dev/null
+++ b/nms-patches/WorldGenFactory.patch
@@ -0,0 +1,11 @@
+--- a/net/minecraft/server/WorldGenFactory.java
++++ b/net/minecraft/server/WorldGenFactory.java
+@@ -9,7 +9,7 @@
+ public class WorldGenFactory {
+
+ private static final Logger a = LogManager.getLogger();
+- private static final Map<String, Class<? extends StructureStart>> b = Maps.newHashMap();
++ public static final Map<String, Class<? extends StructureStart>> b = Maps.newHashMap(); // CraftBukkit private -> public
+ private static final Map<Class<? extends StructureStart>, String> c = Maps.newHashMap();
+ private static final Map<String, Class<? extends StructurePiece>> d = Maps.newHashMap();
+ private static final Map<Class<? extends StructurePiece>, String> e = Maps.newHashMap();
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
index 90451598..adf232ea 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
@@ -26,6 +26,7 @@ import org.bukkit.GameRule;
import org.bukkit.Location;
import org.bukkit.Particle;
import org.bukkit.Sound;
+import org.bukkit.StructureType;
import org.bukkit.TreeType;
import org.bukkit.World;
import org.bukkit.WorldBorder;
@@ -1591,6 +1592,13 @@ public class CraftWorld implements World {
}
+ @Override
+ public Location locateNearestStructure(Location origin, StructureType structureType, int radius, boolean findUnexplored) {
+ BlockPosition originPos = new BlockPosition(origin.getX(), origin.getY(), origin.getZ());
+ BlockPosition nearest = getHandle().getChunkProviderServer().getChunkGenerator().findNearestMapFeature(getHandle(), structureType.getName(), originPos, radius, findUnexplored);
+ return (nearest == null) ? null : new Location(this, nearest.getX(), nearest.getY(), nearest.getZ());
+ }
+
public void processChunkGC() {
chunkGCTickCount++;
diff --git a/src/test/java/org/bukkit/StructureTypeTest.java b/src/test/java/org/bukkit/StructureTypeTest.java
new file mode 100644
index 00000000..57f68761
--- /dev/null
+++ b/src/test/java/org/bukkit/StructureTypeTest.java
@@ -0,0 +1,45 @@
+package org.bukkit;
+
+import java.util.Map;
+import net.minecraft.server.WorldGenFactory;
+import org.bukkit.support.AbstractTestingBase;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+/**
+ * This test makes sure that Bukkit always has Minecraft structure types up to
+ * date.
+ */
+public class StructureTypeTest extends AbstractTestingBase {
+
+ private static Map<String, StructureType> structures;
+
+ @BeforeClass
+ public static void setUp() {
+ structures = StructureType.getStructureTypes();
+ }
+
+ @Test
+ public void testMinecraftToBukkit() {
+ for (String key : WorldGenFactory.b.keySet()) { // PAIL rename structureStartMap
+ Assert.assertNotNull(structures.get(key));
+ }
+ }
+
+ @Test
+ public void testBukkit() {
+ for (Map.Entry<String, StructureType> entry : structures.entrySet()) {
+ Assert.assertNotNull(StructureType.getStructureTypes().get(entry.getKey()));
+ Assert.assertNotNull(StructureType.getStructureTypes().get(entry.getValue().getName()));
+ }
+ }
+
+ @Test
+ public void testBukkitToMinecraft() {
+ for (Map.Entry<String, StructureType> entry : structures.entrySet()) {
+ Assert.assertNotNull(WorldGenFactory.b.get(entry.getKey()));
+ Assert.assertNotNull(WorldGenFactory.b.get(entry.getValue().getName()));
+ }
+ }
+}