From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Jake Potrebic Date: Tue, 7 Jul 2020 10:52:34 -0700 Subject: [PATCH] More World API diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java index a7553a856b9c99bee8f75d514b97cfab952bfd33..511e6a941d441c55a4b38660f0f7f8c47fa689dd 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -1863,6 +1863,7 @@ public class ServerLevel extends net.minecraft.world.level.Level implements Worl return !this.worldDataServer.worldGenSettings().generateFeatures() ? null : this.getChunkSource().getGenerator().findNearestMapFeature(this, feature, pos, radius, skipExistingChunks); // CraftBukkit } + public BlockPos getNearestBiome(Biome biomeBase, BlockPos blockPosition, int radius, int step) { return this.findNearestBiome(biomeBase, blockPosition, radius, step); } // Paper - OBFHELPER @Nullable public BlockPos findNearestBiome(Biome biome, BlockPos pos, int radius, int j) { return this.getChunkSource().getGenerator().getBiomeSource().findBiomeHorizontal(pos.getX(), pos.getY(), pos.getZ(), radius, j, (biomebase1) -> { @@ -1885,6 +1886,7 @@ public class ServerLevel extends net.minecraft.world.level.Level implements Worl return this.noSave; } + public RegistryAccess getWorldCustomRegistry() { return registryAccess(); } // Paper - OBFHELPER @Override public RegistryAccess registryAccess() { return this.server.registryAccess(); diff --git a/src/main/java/net/minecraft/world/level/dimension/DimensionType.java b/src/main/java/net/minecraft/world/level/dimension/DimensionType.java index 7dead90a0d77e936816c2a54fe70c87d92dc8e5b..fb2bdfbeb44de6ce967af2deb4738972b44dcf44 100644 --- a/src/main/java/net/minecraft/world/level/dimension/DimensionType.java +++ b/src/main/java/net/minecraft/world/level/dimension/DimensionType.java @@ -142,10 +142,10 @@ public class DimensionType { public static RegistryAccess.RegistryHolder registerBuiltin(RegistryAccess.RegistryHolder registryManager) { WritableRegistry iregistrywritable = registryManager.registryOrThrow(Registry.DIMENSION_TYPE_REGISTRY); - iregistrywritable.register(DimensionType.OVERWORLD_LOCATION, (Object) DimensionType.DEFAULT_OVERWORLD, Lifecycle.stable()); - iregistrywritable.register(DimensionType.OVERWORLD_CAVES_LOCATION, (Object) DimensionType.DEFAULT_OVERWORLD_CAVES, Lifecycle.stable()); - iregistrywritable.register(DimensionType.NETHER_LOCATION, (Object) DimensionType.DEFAULT_NETHER, Lifecycle.stable()); - iregistrywritable.register(DimensionType.END_LOCATION, (Object) DimensionType.DEFAULT_END, Lifecycle.stable()); + iregistrywritable.register(DimensionType.OVERWORLD_LOCATION, DimensionType.DEFAULT_OVERWORLD, Lifecycle.stable()); // Paper - decompile fix + iregistrywritable.register(DimensionType.OVERWORLD_CAVES_LOCATION, DimensionType.DEFAULT_OVERWORLD_CAVES, Lifecycle.stable()); // Paper - decompile fix + iregistrywritable.register(DimensionType.NETHER_LOCATION, DimensionType.DEFAULT_NETHER, Lifecycle.stable()); // Paper - decompile fix + iregistrywritable.register(DimensionType.END_LOCATION, DimensionType.DEFAULT_END, Lifecycle.stable()); // Paper - decompile fix return registryManager; } @@ -164,10 +164,10 @@ public class DimensionType { public static MappedRegistry defaultDimensions(Registry dimensionRegistry, Registry biomeRegistry, Registry chunkGeneratorSettingsRegistry, long seed) { MappedRegistry registrymaterials = new MappedRegistry<>(Registry.LEVEL_STEM_REGISTRY, Lifecycle.experimental()); - registrymaterials.register(LevelStem.NETHER, (Object) (new LevelStem(() -> { + registrymaterials.register(LevelStem.NETHER, (new LevelStem(() -> { // Paper - decompile fix return (DimensionType) dimensionRegistry.getOrThrow(DimensionType.NETHER_LOCATION); }, defaultNetherGenerator(biomeRegistry, chunkGeneratorSettingsRegistry, seed))), Lifecycle.stable()); - registrymaterials.register(LevelStem.END, (Object) (new LevelStem(() -> { + registrymaterials.register(LevelStem.END, (new LevelStem(() -> { // Paper - decompile fix return (DimensionType) dimensionRegistry.getOrThrow(DimensionType.END_LOCATION); }, defaultEndGenerator(biomeRegistry, chunkGeneratorSettingsRegistry, seed))), Lifecycle.stable()); return registrymaterials; @@ -256,6 +256,7 @@ public class DimensionType { return this.brightnessRamp[i]; } + public Tag getInfiniburnTag() { return infiniburn(); } // Paper - OBFHELPER public Tag infiniburn() { Tag tag = BlockTags.getAllTags().getTag(this.infiniburn); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java index b44e83d93bba579e439b93e5093350675137b070..a1fa2d5e00bd125abd38a00e0bc3936f2fb8186f 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java @@ -2515,6 +2515,75 @@ public class CraftWorld implements World { return (nearest == null) ? null : new Location(this, nearest.getX(), nearest.getY(), nearest.getZ()); } + // Paper start + @Override + public Location locateNearestBiome(Location origin, Biome biome, int radius) { + return this.locateNearestBiome(origin, biome, radius, 8); + } + + @Override + public Location locateNearestBiome(Location origin, Biome biome, int radius, int step) { + BlockPos originPos = new BlockPos(origin.getX(), origin.getY(), origin.getZ()); + BlockPos nearest = getHandle().getNearestBiome(CraftBlock.biomeToBiomeBase(getHandle().getWorldCustomRegistry().registryOrThrow(Registry.BIOME_REGISTRY), biome), originPos, radius, step); + return (nearest == null) ? null : new Location(this, nearest.getX(), nearest.getY(), nearest.getZ()); + } + + @Override + public boolean isUltrawarm() { + return getHandle().dimensionType().ultraWarm(); + } + + @Override + public boolean isNatural() { + return getHandle().dimensionType().natural(); + } + + @Override + public double getCoordinateScale() { + return getHandle().dimensionType().coordinateScale(); + } + + @Override + public boolean hasSkylight() { + return getHandle().dimensionType().hasSkyLight(); + } + + @Override + public boolean hasBedrockCeiling() { + return getHandle().dimensionType().hasSkyLight(); + } + + @Override + public boolean isPiglinSafe() { + return getHandle().dimensionType().piglinSafe(); + } + + @Override + public boolean doesBedWork() { + return getHandle().dimensionType().bedWorks(); + } + + @Override + public boolean doesRespawnAnchorWork() { + return getHandle().dimensionType().respawnAnchorWorks(); + } + + @Override + public boolean hasRaids() { + return getHandle().dimensionType().hasRaids(); + } + + @Override + public boolean isFixedTime() { + return getHandle().dimensionType().hasFixedTime(); + } + + @Override + public Collection getInfiniburn() { + return com.google.common.collect.Sets.newHashSet(com.google.common.collect.Iterators.transform(getHandle().dimensionType().getInfiniburnTag().getTagged().iterator(), CraftMagicNumbers::getMaterial)); + } + // Paper end + @Override public Raid locateNearestRaid(Location location, int radius) { Validate.notNull(location, "Location cannot be null");