From 4eb258865b27f6919384c5e6b0712350289d695b Mon Sep 17 00:00:00 2001 From: ishland Date: Sat, 26 Feb 2022 20:51:15 +0800 Subject: [PATCH] Several fixes - Reimplemented flower forest rendering - Slime chunks rendering now respects world min y - Bedrock ceiling rendering now respects filling toggle in options --- .../irtimaled/bbor/client/ClientRenderer.java | 3 ++- .../client/config/BoundingBoxTypeHelper.java | 2 +- .../bbor/client/config/ConfigManager.java | 8 +++---- .../bbor/client/gui/SettingsScreen.java | 15 +++++++----- .../client/interop/FlowerForestHelper.java | 23 ++++++++++--------- .../models/BoundingBoxFlowerForest.java | 2 -- .../providers/FlowerForestProvider.java | 3 --- .../client/providers/SlimeChunkProvider.java | 11 ++++++++- .../client/renderers/AbstractRenderer.java | 2 +- .../renderers/BedrockCeilingRenderer.java | 2 +- .../renderers/FlowerForestRenderer.java | 2 -- .../bbor/client/renderers/RenderBatch.java | 2 +- .../bbor/common/BoundingBoxType.java | 2 +- .../bbor/mixin/access/IPlacedFeature.java | 16 +++++++++++++ .../resources/assets/bbor/lang/en_us.json | 3 +++ src/main/resources/bbor.mixins.json | 1 + 16 files changed, 62 insertions(+), 35 deletions(-) create mode 100644 src/main/java/com/irtimaled/bbor/mixin/access/IPlacedFeature.java diff --git a/src/main/java/com/irtimaled/bbor/client/ClientRenderer.java b/src/main/java/com/irtimaled/bbor/client/ClientRenderer.java index 836d0e0..903b6d2 100644 --- a/src/main/java/com/irtimaled/bbor/client/ClientRenderer.java +++ b/src/main/java/com/irtimaled/bbor/client/ClientRenderer.java @@ -12,6 +12,7 @@ import com.irtimaled.bbor.client.providers.CustomBeaconProvider; import com.irtimaled.bbor.client.providers.CustomBoxProvider; import com.irtimaled.bbor.client.providers.CustomLineProvider; import com.irtimaled.bbor.client.providers.CustomSphereProvider; +import com.irtimaled.bbor.client.providers.FlowerForestProvider; import com.irtimaled.bbor.client.providers.IBoundingBoxProvider; import com.irtimaled.bbor.client.providers.ICachingProvider; import com.irtimaled.bbor.client.providers.MobSpawnerProvider; @@ -78,7 +79,7 @@ public class ClientRenderer { registerProvider(new SpawnableBlocksProvider()); registerProvider(new CustomLineProvider()); registerProvider(new CustomSphereProvider()); -// registerProvider(new FlowerForestProvider()); + registerProvider(new FlowerForestProvider()); registerProvider(new BedrockCeilingProvider()); } diff --git a/src/main/java/com/irtimaled/bbor/client/config/BoundingBoxTypeHelper.java b/src/main/java/com/irtimaled/bbor/client/config/BoundingBoxTypeHelper.java index f06b553..d22d71b 100644 --- a/src/main/java/com/irtimaled/bbor/client/config/BoundingBoxTypeHelper.java +++ b/src/main/java/com/irtimaled/bbor/client/config/BoundingBoxTypeHelper.java @@ -25,7 +25,7 @@ public class BoundingBoxTypeHelper { registerType(BoundingBoxType.Custom, ConfigManager.drawConduits, ConfigManager.colorCustom); registerType(BoundingBoxType.Conduit, ConfigManager.drawConduits, ConfigManager.colorConduits); registerType(BoundingBoxType.SpawnableBlocks, ConfigManager.drawSpawnableBlocks, ConfigManager.colorSpawnableBlocks); -// registerType(BoundingBoxType.FlowerForest, ConfigManager.drawFlowerForests, null); + registerType(BoundingBoxType.FlowerForest, ConfigManager.drawFlowerForests, null); registerType(BoundingBoxType.BedrockCeiling, ConfigManager.drawBedrockCeilingBlocks, ConfigManager.colorBedrockCeilingBlocks); registerType(BoundingBoxType.JungleTemple, ConfigManager.drawJungleTemples, ConfigManager.colorJungleTemples); diff --git a/src/main/java/com/irtimaled/bbor/client/config/ConfigManager.java b/src/main/java/com/irtimaled/bbor/client/config/ConfigManager.java index c8ff868..7a53b9c 100644 --- a/src/main/java/com/irtimaled/bbor/client/config/ConfigManager.java +++ b/src/main/java/com/irtimaled/bbor/client/config/ConfigManager.java @@ -53,8 +53,8 @@ public class ConfigManager { public static Setting spawnableBlocksRenderHeight; public static Setting invertBoxColorPlayerInside; public static Setting renderSphereAsDots; -// public static Setting drawFlowerForests; -// public static Setting flowerForestsRenderDistance; + public static Setting drawFlowerForests; + public static Setting flowerForestsRenderDistance; public static Setting drawBedrockCeilingBlocks; public static Setting colorWorldSpawn; @@ -131,8 +131,8 @@ public class ConfigManager { biomeBordersRenderDistance = setup(config, "biomeBorders", "biomeBordersRenderDistance", 3, "The distance from the player where biome borders will be drawn."); biomeBordersMaxY = setup(config, "biomeBorders", "biomeBordersMaxY", -1, "The maximum top of the biome borders. If set to -1 it will use the value when activated, if set to 0 it will always track the players feet."); -// drawFlowerForests = setup(config, "flowerForests", "drawFlowerForests", true, "If set to true flower forest flower overlays will be drawn."); -// flowerForestsRenderDistance = setup(config, "flowerForests", "flowerForestsRenderDistance", 3, "The distance from the player where flower forests will be drawn."); + drawFlowerForests = setup(config, "flowerForests", "drawFlowerForests", true, "If set to true flower forest flower overlays will be drawn."); + flowerForestsRenderDistance = setup(config, "flowerForests", "flowerForestsRenderDistance", 3, "The distance from the player where flower forests will be drawn."); drawBedrockCeilingBlocks = setup(config, "bedrockCeiling", "drawBedrockCeilingBlocks", true, "If set to true position with only one layer of bedrock will be drawn."); diff --git a/src/main/java/com/irtimaled/bbor/client/gui/SettingsScreen.java b/src/main/java/com/irtimaled/bbor/client/gui/SettingsScreen.java index 5741b07..405221c 100644 --- a/src/main/java/com/irtimaled/bbor/client/gui/SettingsScreen.java +++ b/src/main/java/com/irtimaled/bbor/client/gui/SettingsScreen.java @@ -72,12 +72,15 @@ public class SettingsScreen extends ListScreen { .addDisplayValue(1, I18n.translate("bbor.options.distance.nearest")) .addDisplayValue(2, I18n.translate("bbor.options.distance.nearer")) .addDisplayValue(3, I18n.translate("bbor.options.distance.normal"))) -// .section(I18n.translate("bbor.features.flowerForests"), -// width -> new BoundingBoxTypeButton(width, I18n.translate("bbor.features.flowerForests"), BoundingBoxType.FlowerForest), -// width -> new IntSettingSlider(width, 1, 3, "bbor.options.distance", ConfigManager.flowerForestsRenderDistance) -// .addDisplayValue(1, I18n.translate("bbor.options.distance.nearest")) -// .addDisplayValue(2, I18n.translate("bbor.options.distance.nearer")) -// .addDisplayValue(3, I18n.translate("bbor.options.distance.normal"))) + .section(I18n.translate("bbor.features.flowerForests"), + width -> new BoundingBoxTypeButton(width, I18n.translate("bbor.features.flowerForests"), BoundingBoxType.FlowerForest), + width -> new IntSettingSlider(width, 1, 6, "bbor.options.distance", ConfigManager.flowerForestsRenderDistance) + .addDisplayValue(1, I18n.translate("bbor.options.distance.nearest")) + .addDisplayValue(2, I18n.translate("bbor.options.distance.nearer")) + .addDisplayValue(3, I18n.translate("bbor.options.distance.normal")) + .addDisplayValue(4, I18n.translate("bbor.options.distance.farther")) + .addDisplayValue(5, I18n.translate("bbor.options.distance.far")) + .addDisplayValue(6, I18n.translate("bbor.options.distance.veryFar"))) .section(I18n.translate("bbor.features.bedrockCeilingBlocks"), width -> new BoundingBoxTypeButton(width, I18n.translate("bbor.features.bedrockCeilingBlocks"), BoundingBoxType.BedrockCeiling)) .section(I18n.translate("bbor.features.mobSpawners"), diff --git a/src/main/java/com/irtimaled/bbor/client/interop/FlowerForestHelper.java b/src/main/java/com/irtimaled/bbor/client/interop/FlowerForestHelper.java index 06c5cc8..ed1d486 100644 --- a/src/main/java/com/irtimaled/bbor/client/interop/FlowerForestHelper.java +++ b/src/main/java/com/irtimaled/bbor/client/interop/FlowerForestHelper.java @@ -1,10 +1,10 @@ -/* package com.irtimaled.bbor.client.interop; import com.irtimaled.bbor.client.config.ConfigManager; import com.irtimaled.bbor.client.config.HexColor; import com.irtimaled.bbor.client.config.Setting; import com.irtimaled.bbor.common.models.Coords; +import com.irtimaled.bbor.mixin.access.IPlacedFeature; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; import net.minecraft.client.MinecraftClient; @@ -13,8 +13,11 @@ import net.minecraft.util.registry.BuiltinRegistries; import net.minecraft.world.biome.Biome; import net.minecraft.world.biome.BiomeKeys; import net.minecraft.world.gen.feature.ConfiguredFeature; -import net.minecraft.world.gen.feature.FeatureConfig; -import net.minecraft.world.gen.feature.FlowerFeature; +import net.minecraft.world.gen.feature.PlacedFeature; +import net.minecraft.world.gen.feature.SimpleBlockFeature; +import net.minecraft.world.gen.feature.SimpleBlockFeatureConfig; +import net.minecraft.world.gen.feature.VegetationConfiguredFeatures; +import net.minecraft.world.gen.stateprovider.BlockStateProvider; import java.util.HashMap; import java.util.Map; @@ -24,11 +27,11 @@ public class FlowerForestHelper { private static final Random random = new Random(); private static final Map> flowerColorMap = new HashMap<>(); - private static final FlowerFeature flowersFeature; - private static final FeatureConfig flowersConfig; public static final Biome BIOME = BuiltinRegistries.BIOME.get(BiomeKeys.FLOWER_FOREST); + private static BlockStateProvider blockStateProvider; + static { flowerColorMap.put(Blocks.DANDELION.getDefaultState(), ConfigManager.colorFlowerForestDandelion); flowerColorMap.put(Blocks.POPPY.getDefaultState(), ConfigManager.colorFlowerForestPoppy); @@ -41,15 +44,15 @@ public class FlowerForestHelper { flowerColorMap.put(Blocks.OXEYE_DAISY.getDefaultState(), ConfigManager.colorFlowerForestOxeyeDaisy); flowerColorMap.put(Blocks.CORNFLOWER.getDefaultState(), ConfigManager.colorFlowerForestCornflower); flowerColorMap.put(Blocks.LILY_OF_THE_VALLEY.getDefaultState(), ConfigManager.colorFlowerForestLilyOfTheValley); - ConfiguredFeature config = BIOME.getGenerationSettings().getFlowerFeatures().get(0); - flowersFeature = (FlowerFeature) config.feature; - flowersConfig = config.config; + final PlacedFeature placedFeature = VegetationConfiguredFeatures.FLOWER_FLOWER_FOREST.config.feature().get(); + final ConfiguredFeature configuredFeature = (ConfiguredFeature) ((IPlacedFeature) placedFeature).getFeature().get(); + blockStateProvider = configuredFeature.getConfig().toPlace(); } public static Setting getFlowerColorAtPos(Coords coords) { int x = coords.getX(); int z = coords.getZ(); - BlockState blockState = flowersFeature.getFlowerState(random, new BlockPos(x, coords.getY(), z), flowersConfig); + BlockState blockState = blockStateProvider.getBlockState(random, new BlockPos(x, coords.getY(), z)); return flowerColorMap.get(blockState); } @@ -61,5 +64,3 @@ public class FlowerForestHelper { return MinecraftClient.getInstance().world.getBlockState(new BlockPos(x, y, z)).getBlock() == Blocks.GRASS_BLOCK; } } - - */ \ No newline at end of file diff --git a/src/main/java/com/irtimaled/bbor/client/models/BoundingBoxFlowerForest.java b/src/main/java/com/irtimaled/bbor/client/models/BoundingBoxFlowerForest.java index 3f0abbf..11d61d0 100644 --- a/src/main/java/com/irtimaled/bbor/client/models/BoundingBoxFlowerForest.java +++ b/src/main/java/com/irtimaled/bbor/client/models/BoundingBoxFlowerForest.java @@ -1,4 +1,3 @@ -/* package com.irtimaled.bbor.client.models; import com.irtimaled.bbor.client.RenderCulling; @@ -64,4 +63,3 @@ public class BoundingBoxFlowerForest extends AbstractBoundingBox { return RenderCulling.isVisibleCulling(coords.getX(), coords.getY() + 0.01d, coords.getZ(), coords.getX() + 1, coords.getY(), coords.getZ() + 1); } } - */ diff --git a/src/main/java/com/irtimaled/bbor/client/providers/FlowerForestProvider.java b/src/main/java/com/irtimaled/bbor/client/providers/FlowerForestProvider.java index dcb4d2b..b26745e 100644 --- a/src/main/java/com/irtimaled/bbor/client/providers/FlowerForestProvider.java +++ b/src/main/java/com/irtimaled/bbor/client/providers/FlowerForestProvider.java @@ -1,4 +1,3 @@ -/* package com.irtimaled.bbor.client.providers; import com.irtimaled.bbor.client.Player; @@ -90,5 +89,3 @@ public class FlowerForestProvider implements IBoundingBoxProvider get(DimensionId dimensionId) { Set slimeChunks = new HashSet<>(); int renderDistanceChunks = ClientInterop.getRenderDistanceChunks(); + final ClientWorld world = MinecraftClient.getInstance().world; + final int minimumY; + if (world != null) { + minimumY = world.getDimension().getMinimumY(); + } else { + minimumY = 0; + } int playerChunkX = MathHelper.floor(Player.getX() / CHUNK_SIZE); int playerChunkZ = MathHelper.floor(Player.getZ() / CHUNK_SIZE); for (int chunkX = playerChunkX - renderDistanceChunks; chunkX <= playerChunkX + renderDistanceChunks; ++chunkX) { @@ -46,7 +55,7 @@ public class SlimeChunkProvider implements IBoundingBoxProvider { void renderCuboid(MatrixStack matrixStack, OffsetBox bb, Color color, boolean fillOnly, int fillAlpha) { matrixStack.push(); - renderCuboid0(matrixStack, bb, color, fillOnly, fillAlpha, false); + renderCuboid0(matrixStack, bb.nudge(), color, fillOnly, fillAlpha, false); matrixStack.pop(); } diff --git a/src/main/java/com/irtimaled/bbor/client/renderers/BedrockCeilingRenderer.java b/src/main/java/com/irtimaled/bbor/client/renderers/BedrockCeilingRenderer.java index 22b88b7..8970e4f 100644 --- a/src/main/java/com/irtimaled/bbor/client/renderers/BedrockCeilingRenderer.java +++ b/src/main/java/com/irtimaled/bbor/client/renderers/BedrockCeilingRenderer.java @@ -14,6 +14,6 @@ public class BedrockCeilingRenderer extends AbstractRenderer> getFeature(); + +} diff --git a/src/main/resources/assets/bbor/lang/en_us.json b/src/main/resources/assets/bbor/lang/en_us.json index bdb5403..d30eaec 100644 --- a/src/main/resources/assets/bbor/lang/en_us.json +++ b/src/main/resources/assets/bbor/lang/en_us.json @@ -22,6 +22,9 @@ "bbor.options.distance.nearest": "Nearest", "bbor.options.distance.nearer": "Nearer", "bbor.options.distance.normal": "Normal", + "bbor.options.distance.farther": "Farther", + "bbor.options.distance.far": "Far", + "bbor.options.distance.veryFar": "Very Far", "bbor.options.distance.y": "Distance (Y): %s", "bbor.options.distance.xz": "Distance (X/Z): %s", diff --git a/src/main/resources/bbor.mixins.json b/src/main/resources/bbor.mixins.json index 865a8f1..b0684b6 100644 --- a/src/main/resources/bbor.mixins.json +++ b/src/main/resources/bbor.mixins.json @@ -6,6 +6,7 @@ "package": "com.irtimaled.bbor.mixin", "mixins": [ "access.IBeaconBlockEntity", + "access.IPlacedFeature", "access.IStructureStart", "client.renderer.MixinDebugHud", "client.renderer.MixinWorldRenderer", -- 2.44.0