From 92dae621f196fb7a64fb0e8ecaeec84f1d87b05c Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Fri, 3 Dec 2021 17:34:35 +0300 Subject: [PATCH] Surface rule fixes --- .../ru/bclib/api/biomes/BCLBiomeBuilder.java | 21 +++++++--- .../java/ru/bclib/api/biomes/BiomeAPI.java | 4 -- .../java/ru/bclib/blocks/BaseLeavesBlock.java | 3 -- .../java/ru/bclib/blocks/BaseOreBlock.java | 1 - .../java/ru/bclib/world/biomes/BCLBiome.java | 42 +++++++++++-------- 5 files changed, 39 insertions(+), 32 deletions(-) diff --git a/src/main/java/ru/bclib/api/biomes/BCLBiomeBuilder.java b/src/main/java/ru/bclib/api/biomes/BCLBiomeBuilder.java index 7da9a5e2..2299d185 100644 --- a/src/main/java/ru/bclib/api/biomes/BCLBiomeBuilder.java +++ b/src/main/java/ru/bclib/api/biomes/BCLBiomeBuilder.java @@ -4,7 +4,6 @@ import net.fabricmc.fabric.api.biome.v1.BiomeModifications; import net.minecraft.core.particles.ParticleOptions; import net.minecraft.data.BuiltinRegistries; import net.minecraft.data.worldgen.BiomeDefaultFeatures; -import net.minecraft.data.worldgen.SurfaceRuleData; import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.Music; import net.minecraft.sounds.SoundEvent; @@ -42,9 +41,11 @@ import java.util.function.Consumer; public class BCLBiomeBuilder { private static final BCLBiomeBuilder INSTANCE = new BCLBiomeBuilder(); + private List structures = new ArrayList<>(16); private BiomeGenerationSettings.Builder generationSettings; private BiomeSpecialEffects.Builder effectsBuilder; private MobSpawnSettings.Builder spawnSettings; + private SurfaceRules.RuleSource surfaceRule; private Precipitation precipitation; private ResourceLocation biomeID; private BiomeCategory category; @@ -64,6 +65,7 @@ public class BCLBiomeBuilder { INSTANCE.generationSettings = null; INSTANCE.effectsBuilder = null; INSTANCE.spawnSettings = null; + INSTANCE.structures.clear(); INSTANCE.temperature = 1.0F; INSTANCE.fogDensity = 1.0F; INSTANCE.downfall = 1.0F; @@ -451,7 +453,6 @@ public class BCLBiomeBuilder { return feature(feature.getDecoration(), feature.getPlacedFeature()); } - private List structures = new ArrayList<>(2); /** * Adds new structure feature into the biome. * @param structure {@link ConfiguredStructureFeature} to add. @@ -484,14 +485,22 @@ public class BCLBiomeBuilder { return this; } - private List surfaceRules = new ArrayList<>(2); /** * Adds new world surface rule for the given block * @param surfaceBlock {@link Block} to use. * @return same {@link BCLBiomeBuilder} instance. */ public BCLBiomeBuilder surface(Block surfaceBlock) { - surfaceRules.add(SurfaceRules.ifTrue(SurfaceRules.ON_FLOOR, SurfaceRules.state(surfaceBlock.defaultBlockState()))); + return surface(SurfaceRules.ifTrue(SurfaceRules.ON_FLOOR, SurfaceRules.state(surfaceBlock.defaultBlockState()))); + } + + /** + * Adds surface rule to this biome. + * @param surfaceRule {link SurfaceRules.RuleSource} surface rule. + * @return same {@link BCLBiomeBuilder} instance. + */ + public BCLBiomeBuilder surface(SurfaceRules.RuleSource surfaceRule) { + this.surfaceRule = surfaceRule; return this; } @@ -528,8 +537,8 @@ public class BCLBiomeBuilder { } final T res = biomeConstructor.apply(biomeID, builder.build()); - res.attachedStructures = structures; - res.surfaceRules = surfaceRules; + res.attachStructures(structures); + res.setSurface(surfaceRule); res.setFogDensity(fogDensity); return res; } diff --git a/src/main/java/ru/bclib/api/biomes/BiomeAPI.java b/src/main/java/ru/bclib/api/biomes/BiomeAPI.java index 2fe2f267..a59cd923 100644 --- a/src/main/java/ru/bclib/api/biomes/BiomeAPI.java +++ b/src/main/java/ru/bclib/api/biomes/BiomeAPI.java @@ -14,7 +14,6 @@ import net.fabricmc.fabric.impl.biome.TheEndBiomeData; import net.minecraft.client.Minecraft; import net.minecraft.core.Registry; import net.minecraft.data.BuiltinRegistries; -import net.minecraft.data.worldgen.SurfaceRuleData; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; @@ -24,12 +23,10 @@ import net.minecraft.world.entity.Mob; import net.minecraft.world.entity.MobCategory; import net.minecraft.world.level.Level; import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.biome.Biome.BiomeCategory; import net.minecraft.world.level.biome.BiomeSource; import net.minecraft.world.level.biome.Biomes; import net.minecraft.world.level.biome.Climate; import net.minecraft.world.level.biome.MobSpawnSettings.SpawnerData; -import net.minecraft.world.level.dimension.DimensionType; import net.minecraft.world.level.levelgen.GenerationStep.Carving; import net.minecraft.world.level.levelgen.GenerationStep.Decoration; import net.minecraft.world.level.levelgen.NoiseGeneratorSettings; @@ -58,7 +55,6 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Optional; import java.util.Random; import java.util.Set; import java.util.function.BiConsumer; diff --git a/src/main/java/ru/bclib/blocks/BaseLeavesBlock.java b/src/main/java/ru/bclib/blocks/BaseLeavesBlock.java index 784667b3..f4dc27e9 100644 --- a/src/main/java/ru/bclib/blocks/BaseLeavesBlock.java +++ b/src/main/java/ru/bclib/blocks/BaseLeavesBlock.java @@ -4,10 +4,8 @@ import com.google.common.collect.Lists; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; import net.minecraft.client.renderer.block.model.BlockModel; -import net.minecraft.data.loot.BlockLoot; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.ShovelItem; import net.minecraft.world.item.enchantment.EnchantmentHelper; import net.minecraft.world.item.enchantment.Enchantments; import net.minecraft.world.level.block.Block; @@ -17,7 +15,6 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.MaterialColor; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; -import ru.bclib.api.TagAPI; import ru.bclib.client.render.BCLRenderLayer; import ru.bclib.interfaces.BlockModelProvider; import ru.bclib.interfaces.RenderLayerProvider; diff --git a/src/main/java/ru/bclib/blocks/BaseOreBlock.java b/src/main/java/ru/bclib/blocks/BaseOreBlock.java index fa009b6f..c996c5f1 100644 --- a/src/main/java/ru/bclib/blocks/BaseOreBlock.java +++ b/src/main/java/ru/bclib/blocks/BaseOreBlock.java @@ -19,7 +19,6 @@ import net.minecraft.world.level.material.Material; import net.minecraft.world.level.material.MaterialColor; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; -import ru.bclib.api.TagAPI; import ru.bclib.interfaces.BlockModelProvider; import ru.bclib.util.MHelper; diff --git a/src/main/java/ru/bclib/world/biomes/BCLBiome.java b/src/main/java/ru/bclib/world/biomes/BCLBiome.java index 132eedb5..4ac623eb 100644 --- a/src/main/java/ru/bclib/world/biomes/BCLBiome.java +++ b/src/main/java/ru/bclib/world/biomes/BCLBiome.java @@ -1,5 +1,6 @@ package ru.bclib.world.biomes; +import com.google.common.collect.Lists; import com.google.common.collect.Maps; import net.minecraft.core.Registry; import net.minecraft.data.BuiltinRegistries; @@ -17,11 +18,13 @@ import java.util.Map; import java.util.Random; public class BCLBiome { + private final List structures = Lists.newArrayList(); private final WeightedList subbiomes = new WeightedList<>(); private final Map customData = Maps.newHashMap(); private final ResourceLocation biomeID; private final Biome biome; + private SurfaceRules.RuleSource surface; private BCLBiome biomeParent; private Biome actualBiome; private BCLBiome edge; @@ -207,20 +210,6 @@ public class BCLBiome { return this; } - /** - * For internal use only!!! - * maintains a list of all structures added to this biome, this is automatically set by - * {@link ru.bclib.api.biomes.BCLBiomeBuilder} - */ - public List attachedStructures = null; - - /** - * For internal use only!!! - * maintains a list of all structures added to this biome, this is automatically set by - * {@link ru.bclib.api.biomes.BCLBiomeBuilder} - */ - public List surfaceRules = null; - /** * Recursively update biomes to correct world biome registry instances, for internal usage only. * @param biomeRegistry {@link Registry} for {@link Biome}. @@ -235,11 +224,10 @@ public class BCLBiome { edge.updateActualBiomes(biomeRegistry); } this.actualBiome = biomeRegistry.get(biomeID); - if (this.attachedStructures!=null) - attachedStructures.forEach(s -> BiomeAPI.addBiomeStructure(BiomeAPI.getBiomeKey(actualBiome), s)); - if (this.surfaceRules!=null) - surfaceRules.forEach(s -> BiomeAPI.addSurfaceRule(biomeID, s)); + if (!this.structures.isEmpty()) { + structures.forEach(s -> BiomeAPI.addBiomeStructure(BiomeAPI.getBiomeKey(actualBiome), s)); + } } /** @@ -311,4 +299,22 @@ public class BCLBiome { public String toString() { return biomeID.toString(); } + + /** + * Adds structures to this biome. For internal use only. + * Used inside {@link ru.bclib.api.biomes.BCLBiomeBuilder}. + */ + public void attachStructures(List structures) { + this.structures.addAll(structures); + } + + /** + * Sets biome surface rule. + * @param surface {@link SurfaceRules.RuleSource} rule. + */ + public void setSurface(SurfaceRules.RuleSource surface) { + ResourceKey key = BiomeAPI.getBiomeKey(biome); + BiomeAPI.addSurfaceRule(biomeID, SurfaceRules.ifTrue(SurfaceRules.isBiome(key), surface)); + this.surface = surface; + } }