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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -0,0 +0,0 @@ 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) -> { @@ -0,0 +0,0 @@ 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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/net/minecraft/world/level/dimension/DimensionType.java +++ b/src/main/java/net/minecraft/world/level/dimension/DimensionType.java @@ -0,0 +0,0 @@ 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; } @@ -0,0 +0,0 @@ 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; @@ -0,0 +0,0 @@ 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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java @@ -0,0 +0,0 @@ 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");