From 55ad057dda92068d2b176a4fa29a0fe079e79c5f Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 28 Jan 2023 10:48:11 +0100 Subject: [PATCH] fixed the canopy diminisher not working Closes #287 --- .../naturesaura/blocks/BlockOakGenerator.java | 35 ++++++++++++------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockOakGenerator.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockOakGenerator.java index c048595c..2ff0ae64 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockOakGenerator.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockOakGenerator.java @@ -8,9 +8,12 @@ import de.ellpeck.naturesaura.blocks.tiles.BlockEntityOakGenerator; import de.ellpeck.naturesaura.data.BlockStateGenerator; import de.ellpeck.naturesaura.reg.ICustomBlockState; import net.minecraft.core.BlockPos; +import net.minecraft.core.Holder; +import net.minecraft.data.worldgen.features.TreeFeatures; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.SaplingBlock; import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; import net.minecraft.world.level.material.Material; import net.minecraft.world.phys.AABB; import net.minecraftforge.api.distmarker.Dist; @@ -34,21 +37,13 @@ public class BlockOakGenerator extends BlockContainerImpl implements IVisualizab if (level instanceof Level && !level.isClientSide() && IAuraType.forLevel((Level) level).isSimilar(NaturesAuraAPI.TYPE_OVERWORLD) && level.getBlockState(pos).getBlock() instanceof SaplingBlock) { Helper.getBlockEntitiesInArea(level, pos, 10, tile -> { - if (!(tile instanceof BlockEntityOakGenerator)) + if (!(tile instanceof BlockEntityOakGenerator oak)) return false; - - var rand = event.getRandomSource(); - if (rand.nextInt(10) == 0) - ((BlockEntityOakGenerator) tile).scheduledBigTrees.add(pos); - - long seed; - do { - seed = rand.nextLong(); - rand.setSeed(seed); + var replacement = BlockOakGenerator.getReplacement(event.getFeature()); + if (replacement != null) { + oak.scheduledBigTrees.add(pos); + event.setFeature(replacement); } - while (rand.nextInt(10) == 0); - rand.setSeed(seed); - return true; }); } @@ -73,4 +68,18 @@ public class BlockOakGenerator extends BlockContainerImpl implements IVisualizab generator.modLoc("block/" + this.getBaseName() + "_bottom"), generator.modLoc("block/" + this.getBaseName() + "_top"))); } + + private static Holder> getReplacement(Holder> feature) { + if (feature == TreeFeatures.FANCY_OAK || feature == TreeFeatures.FANCY_OAK_BEES) { + return TreeFeatures.OAK; + } else if (feature == TreeFeatures.FANCY_OAK_BEES_002) { + return TreeFeatures.OAK_BEES_002; + } else if (feature == TreeFeatures.FANCY_OAK_BEES_0002) { + return TreeFeatures.OAK_BEES_0002; + } else if (feature == TreeFeatures.FANCY_OAK_BEES_005) { + return TreeFeatures.OAK_BEES_005; + } else { + return null; + } + } }