From 103e1bf3b5ea0f8e0626e917e258d145f77a5e61 Mon Sep 17 00:00:00 2001 From: CraftBukkit/Spigot Date: Sun, 11 Apr 2021 17:54:48 +1000 Subject: [PATCH] SPIGOT-5877: Add scaffolding for custom dimensions and biomes By: Martoph --- .../src/main/java/org/bukkit/craftbukkit/CraftWorld.java | 1 + .../java/org/bukkit/craftbukkit/block/CraftBlock.java | 5 +++-- .../craftbukkit/generator/CustomChunkGenerator.java | 1 + paper-server/src/test/java/org/bukkit/BiomeTest.java | 9 +++++++-- 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/paper-server/src/main/java/org/bukkit/craftbukkit/CraftWorld.java index bb244f9f53..0dd4bb8223 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/CraftWorld.java @@ -954,6 +954,7 @@ public class CraftWorld implements World { @Override public void setBiome(int x, int y, int z, Biome bio) { + Preconditions.checkArgument(bio != Biome.CUSTOM, "Cannot set the biome to %s", bio); BiomeBase bb = CraftBlock.biomeToBiomeBase(getHandle().r().b(IRegistry.ay), bio); BlockPosition pos = new BlockPosition(x, 0, z); if (this.world.isLoaded(pos)) { diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java index 7654c0f8b5..d7bcdd80d1 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java @@ -499,11 +499,12 @@ public class CraftBlock implements Block { return null; } - return Registry.BIOME.get(CraftNamespacedKey.fromMinecraft(registry.getKey(base))); + Biome biome = Registry.BIOME.get(CraftNamespacedKey.fromMinecraft(registry.getKey(base))); + return (biome == null) ? Biome.CUSTOM : biome; } public static BiomeBase biomeToBiomeBase(IRegistry registry, Biome bio) { - if (bio == null) { + if (bio == null || bio == Biome.CUSTOM) { return null; } diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/generator/CustomChunkGenerator.java b/paper-server/src/main/java/org/bukkit/craftbukkit/generator/CustomChunkGenerator.java index 3e6d78a1fa..7ce7e13032 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/generator/CustomChunkGenerator.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/generator/CustomChunkGenerator.java @@ -65,6 +65,7 @@ public class CustomChunkGenerator extends InternalChunkGenerator { @Override public void setBiome(int x, int y, int z, Biome bio) { + Preconditions.checkArgument(bio != Biome.CUSTOM, "Cannot set the biome to %s", bio); biome.setBiome(x >> 2, y >> 2, z >> 2, CraftBlock.biomeToBiomeBase((IRegistry) biome.registry, bio)); } } diff --git a/paper-server/src/test/java/org/bukkit/BiomeTest.java b/paper-server/src/test/java/org/bukkit/BiomeTest.java index 7105dbfe60..3f478abc08 100644 --- a/paper-server/src/test/java/org/bukkit/BiomeTest.java +++ b/paper-server/src/test/java/org/bukkit/BiomeTest.java @@ -13,14 +13,19 @@ public class BiomeTest extends AbstractTestingBase { @Test public void testBukkitToMinecraft() { for (Biome biome : Biome.values()) { + if (biome == Biome.CUSTOM) { + continue; + } + Assert.assertNotNull("No NMS mapping for " + biome, CraftBlock.biomeToBiomeBase(RegistryGeneration.WORLDGEN_BIOME, biome)); } } @Test public void testMinecraftToBukkit() { - for (Object biome : RegistryGeneration.WORLDGEN_BIOME) { - Assert.assertNotNull("No Bukkit mapping for " + biome, CraftBlock.biomeBaseToBiome(RegistryGeneration.WORLDGEN_BIOME, (BiomeBase) biome)); + for (BiomeBase biomeBase : RegistryGeneration.WORLDGEN_BIOME) { + Biome biome = CraftBlock.biomeBaseToBiome(RegistryGeneration.WORLDGEN_BIOME, biomeBase); + Assert.assertTrue("No Bukkit mapping for " + biomeBase, biome != null && biome != Biome.CUSTOM); } } }