diff --git a/src/main/java/ru/betterend/registry/EndFeatures.java b/src/main/java/ru/betterend/registry/EndFeatures.java index 874d0fb4..12b51580 100644 --- a/src/main/java/ru/betterend/registry/EndFeatures.java +++ b/src/main/java/ru/betterend/registry/EndFeatures.java @@ -13,23 +13,23 @@ import ru.betterend.world.biome.EndBiome; import ru.betterend.world.features.BlueVineFeature; import ru.betterend.world.features.CavePlantFeature; import ru.betterend.world.features.DoublePlantFeature; -import ru.betterend.world.features.DragonTreeBushFeature; -import ru.betterend.world.features.DragonTreeFeature; import ru.betterend.world.features.EndFeature; -import ru.betterend.world.features.EndLakeFeature; import ru.betterend.world.features.EndLilyFeature; import ru.betterend.world.features.EndLotusFeature; import ru.betterend.world.features.EndLotusLeafFeature; -import ru.betterend.world.features.LacugroveFeature; -import ru.betterend.world.features.MossyGlowshroomFeature; -import ru.betterend.world.features.PythadendronBushFeature; -import ru.betterend.world.features.PythadendronTreeFeature; -import ru.betterend.world.features.RoundCaveFeature; import ru.betterend.world.features.SinglePlantFeature; import ru.betterend.world.features.UnderwaterPlantFeature; import ru.betterend.world.features.VineFeature; import ru.betterend.world.features.WallPlantFeature; import ru.betterend.world.features.WallPlantOnLogFeature; +import ru.betterend.world.features.bushes.DragonTreeBushFeature; +import ru.betterend.world.features.bushes.PythadendronBushFeature; +import ru.betterend.world.features.terrain.EndLakeFeature; +import ru.betterend.world.features.terrain.RoundCaveFeature; +import ru.betterend.world.features.trees.DragonTreeFeature; +import ru.betterend.world.features.trees.LacugroveFeature; +import ru.betterend.world.features.trees.MossyGlowshroomFeature; +import ru.betterend.world.features.trees.PythadendronTreeFeature; public class EndFeatures { // Trees // diff --git a/src/main/java/ru/betterend/util/BlocksHelper.java b/src/main/java/ru/betterend/util/BlocksHelper.java index 5b25d526..dfbac0ba 100644 --- a/src/main/java/ru/betterend/util/BlocksHelper.java +++ b/src/main/java/ru/betterend/util/BlocksHelper.java @@ -11,7 +11,6 @@ import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; import net.minecraft.block.FallingBlock; -import net.minecraft.block.LeavesBlock; import net.minecraft.state.property.BooleanProperty; import net.minecraft.state.property.Property; import net.minecraft.tag.BlockTags; @@ -287,31 +286,4 @@ public class BlocksHelper { public static Direction randomHorizontal(Random random) { return HORIZONTAL[random.nextInt(4)]; } - - public static BlockState getLeavesState(BlockState state, WorldAccess world, BlockPos pos) { - int i = 7; - BlockPos.Mutable mutable = new BlockPos.Mutable(); - Direction[] var5 = Direction.values(); - int var6 = var5.length; - - for (int var7 = 0; var7 < var6; ++var7) { - Direction direction = var5[var7]; - mutable.set(pos, direction); - i = Math.min(i, getDistanceFromLog(world.getBlockState(mutable)) + 1); - if (i == 1) { - break; - } - } - - return (BlockState) state.with(LeavesBlock.DISTANCE, i); - } - - private static int getDistanceFromLog(BlockState state) { - if (BlockTags.LOGS.contains(state.getBlock())) { - return 0; - } - else { - return state.getBlock() instanceof LeavesBlock ? (Integer) state.get(LeavesBlock.DISTANCE) : 7; - } - } } diff --git a/src/main/java/ru/betterend/util/sdf/PosInfo.java b/src/main/java/ru/betterend/util/sdf/PosInfo.java index b4d9f465..bf5483b8 100644 --- a/src/main/java/ru/betterend/util/sdf/PosInfo.java +++ b/src/main/java/ru/betterend/util/sdf/PosInfo.java @@ -29,10 +29,26 @@ public class PosInfo implements Comparable { return state; } + public BlockState getState(BlockPos pos) { + PosInfo info = blocks.get(pos); + if (info == null) { + info = add.get(pos); + return info == null ? AIR : info.getState(); + } + return info.getState(); + } + public void setState(BlockState state) { this.state = state; } + public void setState(BlockPos pos, BlockState state) { + PosInfo info = blocks.get(pos); + if (info != null) { + info.setState(state); + } + } + public BlockState getState(Direction dir) { PosInfo info = blocks.get(pos.offset(dir)); if (info == null) { diff --git a/src/main/java/ru/betterend/util/sdf/SDF.java b/src/main/java/ru/betterend/util/sdf/SDF.java index 52cf6a92..1c7b3e98 100644 --- a/src/main/java/ru/betterend/util/sdf/SDF.java +++ b/src/main/java/ru/betterend/util/sdf/SDF.java @@ -236,8 +236,10 @@ public abstract class SDF { if (infos.size() > 0) { Collections.sort(infos); infos.forEach((info) -> { - BlockState state = postProcess.apply(info); - BlocksHelper.setWithoutUpdate(world, info.getPos(), state); + info.setState(postProcess.apply(info)); + }); + infos.forEach((info) -> { + BlocksHelper.setWithoutUpdate(world, info.getPos(), info.getState()); }); infos.clear(); diff --git a/src/main/java/ru/betterend/world/features/EndFeature.java b/src/main/java/ru/betterend/world/features/EndFeature.java index 00f6daa3..17866404 100644 --- a/src/main/java/ru/betterend/world/features/EndFeature.java +++ b/src/main/java/ru/betterend/world/features/EndFeature.java @@ -20,6 +20,7 @@ import net.minecraft.world.gen.feature.FeatureConfig; import net.minecraft.world.gen.feature.OreFeatureConfig; import ru.betterend.BetterEnd; import ru.betterend.blocks.complex.StoneMaterial; +import ru.betterend.world.features.terrain.OreLayerFeature; public class EndFeature { protected Feature feature; diff --git a/src/main/java/ru/betterend/world/features/CaveBushFeature.java b/src/main/java/ru/betterend/world/features/bushes/CaveBushFeature.java similarity index 93% rename from src/main/java/ru/betterend/world/features/CaveBushFeature.java rename to src/main/java/ru/betterend/world/features/bushes/CaveBushFeature.java index 9c52de9f..75ace9c2 100644 --- a/src/main/java/ru/betterend/world/features/CaveBushFeature.java +++ b/src/main/java/ru/betterend/world/features/bushes/CaveBushFeature.java @@ -1,4 +1,4 @@ -package ru.betterend.world.features; +package ru.betterend.world.features.bushes; import java.util.Random; import java.util.function.Function; @@ -17,6 +17,7 @@ import ru.betterend.util.sdf.operator.SDFScale3D; import ru.betterend.util.sdf.operator.SDFSubtraction; import ru.betterend.util.sdf.operator.SDFTranslate; import ru.betterend.util.sdf.primitive.SDFSphere; +import ru.betterend.world.features.FullHeightScatterFeature; public class CaveBushFeature extends FullHeightScatterFeature { public CaveBushFeature(int radius) { diff --git a/src/main/java/ru/betterend/world/features/CaveBushFeatureCeil.java b/src/main/java/ru/betterend/world/features/bushes/CaveBushFeatureCeil.java similarity index 93% rename from src/main/java/ru/betterend/world/features/CaveBushFeatureCeil.java rename to src/main/java/ru/betterend/world/features/bushes/CaveBushFeatureCeil.java index ceed39ce..fac99a1b 100644 --- a/src/main/java/ru/betterend/world/features/CaveBushFeatureCeil.java +++ b/src/main/java/ru/betterend/world/features/bushes/CaveBushFeatureCeil.java @@ -1,4 +1,4 @@ -package ru.betterend.world.features; +package ru.betterend.world.features.bushes; import java.util.Random; import java.util.function.Function; @@ -18,6 +18,7 @@ import ru.betterend.util.sdf.operator.SDFScale3D; import ru.betterend.util.sdf.operator.SDFSubtraction; import ru.betterend.util.sdf.operator.SDFTranslate; import ru.betterend.util.sdf.primitive.SDFSphere; +import ru.betterend.world.features.InvertedScatterFeature; public class CaveBushFeatureCeil extends InvertedScatterFeature { public CaveBushFeatureCeil(int radius) { diff --git a/src/main/java/ru/betterend/world/features/DragonTreeBushFeature.java b/src/main/java/ru/betterend/world/features/bushes/DragonTreeBushFeature.java similarity index 94% rename from src/main/java/ru/betterend/world/features/DragonTreeBushFeature.java rename to src/main/java/ru/betterend/world/features/bushes/DragonTreeBushFeature.java index 0fa3b34e..a56f8f12 100644 --- a/src/main/java/ru/betterend/world/features/DragonTreeBushFeature.java +++ b/src/main/java/ru/betterend/world/features/bushes/DragonTreeBushFeature.java @@ -1,4 +1,4 @@ -package ru.betterend.world.features; +package ru.betterend.world.features.bushes; import java.util.Random; import java.util.function.Function; @@ -21,6 +21,7 @@ import ru.betterend.util.sdf.operator.SDFScale3D; import ru.betterend.util.sdf.operator.SDFSubtraction; import ru.betterend.util.sdf.operator.SDFTranslate; import ru.betterend.util.sdf.primitive.SDFSphere; +import ru.betterend.world.features.DefaultFeature; public class DragonTreeBushFeature extends DefaultFeature { private static final Function REPLACE; diff --git a/src/main/java/ru/betterend/world/features/PythadendronBushFeature.java b/src/main/java/ru/betterend/world/features/bushes/PythadendronBushFeature.java similarity index 93% rename from src/main/java/ru/betterend/world/features/PythadendronBushFeature.java rename to src/main/java/ru/betterend/world/features/bushes/PythadendronBushFeature.java index 963f088f..f4140b8a 100644 --- a/src/main/java/ru/betterend/world/features/PythadendronBushFeature.java +++ b/src/main/java/ru/betterend/world/features/bushes/PythadendronBushFeature.java @@ -1,4 +1,4 @@ -package ru.betterend.world.features; +package ru.betterend.world.features.bushes; import java.util.Random; import java.util.function.Function; @@ -20,6 +20,7 @@ import ru.betterend.util.sdf.operator.SDFScale3D; import ru.betterend.util.sdf.operator.SDFSubtraction; import ru.betterend.util.sdf.operator.SDFTranslate; import ru.betterend.util.sdf.primitive.SDFSphere; +import ru.betterend.world.features.DefaultFeature; public class PythadendronBushFeature extends DefaultFeature { private static final Function REPLACE; diff --git a/src/main/java/ru/betterend/world/features/EndLakeFeature.java b/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java similarity index 96% rename from src/main/java/ru/betterend/world/features/EndLakeFeature.java rename to src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java index 2baa6d3b..6957ca5d 100644 --- a/src/main/java/ru/betterend/world/features/EndLakeFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java @@ -1,4 +1,4 @@ -package ru.betterend.world.features; +package ru.betterend.world.features.terrain; import java.util.Random; @@ -16,6 +16,7 @@ import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndTags; import ru.betterend.util.BlocksHelper; import ru.betterend.util.MHelper; +import ru.betterend.world.features.DefaultFeature; public class EndLakeFeature extends DefaultFeature { private static final BlockState END_STONE = Blocks.END_STONE.getDefaultState(); diff --git a/src/main/java/ru/betterend/world/features/OreLayerFeature.java b/src/main/java/ru/betterend/world/features/terrain/OreLayerFeature.java similarity index 93% rename from src/main/java/ru/betterend/world/features/OreLayerFeature.java rename to src/main/java/ru/betterend/world/features/terrain/OreLayerFeature.java index ae85e5de..d1d1b37f 100644 --- a/src/main/java/ru/betterend/world/features/OreLayerFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/OreLayerFeature.java @@ -1,4 +1,4 @@ -package ru.betterend.world.features; +package ru.betterend.world.features.terrain; import java.util.Random; @@ -14,6 +14,7 @@ import ru.betterend.util.sdf.SDF; import ru.betterend.util.sdf.operator.SDFCoordModify; import ru.betterend.util.sdf.operator.SDFScale3D; import ru.betterend.util.sdf.primitive.SDFSphere; +import ru.betterend.world.features.DefaultFeature; public class OreLayerFeature extends DefaultFeature { private static final SDFSphere SPHERE; diff --git a/src/main/java/ru/betterend/world/features/RoundCaveFeature.java b/src/main/java/ru/betterend/world/features/terrain/RoundCaveFeature.java similarity index 96% rename from src/main/java/ru/betterend/world/features/RoundCaveFeature.java rename to src/main/java/ru/betterend/world/features/terrain/RoundCaveFeature.java index a54e63d1..f254386b 100644 --- a/src/main/java/ru/betterend/world/features/RoundCaveFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/RoundCaveFeature.java @@ -1,4 +1,4 @@ -package ru.betterend.world.features; +package ru.betterend.world.features.terrain; import java.util.Random; import java.util.Set; @@ -29,6 +29,7 @@ import ru.betterend.util.sdf.operator.SDFSubtraction; import ru.betterend.util.sdf.operator.SDFTranslate; import ru.betterend.util.sdf.primitive.SDFHexPrism; import ru.betterend.util.sdf.primitive.SDFSphere; +import ru.betterend.world.features.DefaultFeature; public class RoundCaveFeature extends DefaultFeature { private static final BlockState CAVE_AIR = Blocks.CAVE_AIR.getDefaultState(); diff --git a/src/main/java/ru/betterend/world/features/DragonTreeFeature.java b/src/main/java/ru/betterend/world/features/trees/DragonTreeFeature.java similarity index 83% rename from src/main/java/ru/betterend/world/features/DragonTreeFeature.java rename to src/main/java/ru/betterend/world/features/trees/DragonTreeFeature.java index 4511db22..596377b6 100644 --- a/src/main/java/ru/betterend/world/features/DragonTreeFeature.java +++ b/src/main/java/ru/betterend/world/features/trees/DragonTreeFeature.java @@ -1,4 +1,4 @@ -package ru.betterend.world.features; +package ru.betterend.world.features.trees; import java.util.List; import java.util.Random; @@ -11,6 +11,7 @@ import net.minecraft.block.LeavesBlock; import net.minecraft.block.Material; import net.minecraft.client.util.math.Vector3f; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockPos.Mutable; import net.minecraft.util.math.Direction; import net.minecraft.world.StructureWorldAccess; import net.minecraft.world.gen.chunk.ChunkGenerator; @@ -29,6 +30,7 @@ import ru.betterend.util.sdf.operator.SDFScale3D; import ru.betterend.util.sdf.operator.SDFSubtraction; import ru.betterend.util.sdf.operator.SDFTranslate; import ru.betterend.util.sdf.primitive.SDFSphere; +import ru.betterend.world.features.DefaultFeature; public class DragonTreeFeature extends DefaultFeature { private static final Function REPLACE; @@ -111,13 +113,14 @@ public class DragonTreeFeature extends DefaultFeature { } private void leavesBall(StructureWorldAccess world, BlockPos pos, float radius, Random random, OpenSimplexNoise noise) { - SDF sphere = new SDFSphere().setRadius(radius).setBlock(EndBlocks.DRAGON_TREE_LEAVES.getDefaultState().with(LeavesBlock.DISTANCE, 1)); + SDF sphere = new SDFSphere().setRadius(radius).setBlock(EndBlocks.DRAGON_TREE_LEAVES.getDefaultState().with(LeavesBlock.DISTANCE, 6)); SDF sub = new SDFScale().setScale(5).setSource(sphere); sub = new SDFTranslate().setTranslate(0, -radius * 5, 0).setSource(sub); sphere = new SDFSubtraction().setSourceA(sphere).setSourceB(sub); sphere = new SDFScale3D().setScale(1, 0.5F, 1).setSource(sphere); sphere = new SDFDisplacement().setFunction((vec) -> { return (float) noise.eval(vec.getX() * 0.2, vec.getY() * 0.2, vec.getZ() * 0.2) * 1.5F; }).setSource(sphere); sphere = new SDFDisplacement().setFunction((vec) -> { return random.nextFloat() * 3F - 1.5F; }).setSource(sphere); + Mutable mut = new Mutable(); sphere.setPostProcess((info) -> { if (random.nextInt(5) == 0) { for (Direction dir: Direction.values()) { @@ -126,11 +129,43 @@ public class DragonTreeFeature extends DefaultFeature { return info.getState(); } } - return EndBlocks.DRAGON_TREE.bark.getDefaultState(); + info.setState(EndBlocks.DRAGON_TREE.bark.getDefaultState()); + for (int x = -6; x < 7; x++) { + int ax = Math.abs(x); + mut.setX(x + info.getPos().getX()); + for (int z = -6; z < 7; z++) { + int az = Math.abs(z); + mut.setZ(z + info.getPos().getZ()); + for (int y = -6; y < 7; y++) { + int ay = Math.abs(y); + int d = ax + ay + az; + if (d < 7) { + mut.setY(y + info.getPos().getY()); + BlockState state = info.getState(mut); + if (state.getBlock() instanceof LeavesBlock) { + int distance = state.get(LeavesBlock.DISTANCE); + if (d < distance) { + info.setState(mut, state.with(LeavesBlock.DISTANCE, d)); + } + } + } + } + } + } } return info.getState(); }); sphere.fillRecursiveIgnore(world, pos, IGNORE); + /*Collection list = sphere.fillRecursiveIgnore(world, pos, IGNORE); + list.forEach((info) -> { + if (info.getState().getBlock() instanceof LeavesBlock && info.getState().get(LeavesBlock.DISTANCE) == 6) { + BlockState state = BlocksHelper.getLeavesState(info.getState(), world, info.getPos()); + if (!state.equals(info.getState())) { + BlocksHelper.setWithoutUpdate(world, info.getPos(), state); + } + } + });*/ + if (radius > 5) { int count = (int) (radius * 2.5F); diff --git a/src/main/java/ru/betterend/world/features/LacugroveFeature.java b/src/main/java/ru/betterend/world/features/trees/LacugroveFeature.java similarity index 85% rename from src/main/java/ru/betterend/world/features/LacugroveFeature.java rename to src/main/java/ru/betterend/world/features/trees/LacugroveFeature.java index ef1cb856..e0d3b4a1 100644 --- a/src/main/java/ru/betterend/world/features/LacugroveFeature.java +++ b/src/main/java/ru/betterend/world/features/trees/LacugroveFeature.java @@ -1,4 +1,4 @@ -package ru.betterend.world.features; +package ru.betterend.world.features.trees; import java.util.List; import java.util.Random; @@ -26,6 +26,7 @@ import ru.betterend.util.sdf.operator.SDFDisplacement; import ru.betterend.util.sdf.operator.SDFSubtraction; import ru.betterend.util.sdf.operator.SDFTranslate; import ru.betterend.util.sdf.primitive.SDFSphere; +import ru.betterend.world.features.DefaultFeature; public class LacugroveFeature extends DefaultFeature { private static final Function REPLACE; @@ -108,6 +109,7 @@ public class LacugroveFeature extends DefaultFeature { sphere = new SDFDisplacement().setFunction((vec) -> { return (float) noise.eval(vec.getX() * 0.2, vec.getY() * 0.2, vec.getZ() * 0.2) * 3; }).setSource(sphere); sphere = new SDFDisplacement().setFunction((vec) -> { return random.nextFloat() * 3F - 1.5F; }).setSource(sphere); sphere = new SDFSubtraction().setSourceA(sphere).setSourceB(new SDFTranslate().setTranslate(0, -radius - 2, 0).setSource(sphere)); + Mutable mut = new Mutable(); sphere.setPostProcess((info) -> { if (random.nextInt(5) == 0) { for (Direction dir: Direction.values()) { @@ -116,7 +118,29 @@ public class LacugroveFeature extends DefaultFeature { return info.getState(); } } - return EndBlocks.LACUGROVE.bark.getDefaultState(); + info.setState(EndBlocks.LACUGROVE.bark.getDefaultState()); + for (int x = -6; x < 7; x++) { + int ax = Math.abs(x); + mut.setX(x + info.getPos().getX()); + for (int z = -6; z < 7; z++) { + int az = Math.abs(z); + mut.setZ(z + info.getPos().getZ()); + for (int y = -6; y < 7; y++) { + int ay = Math.abs(y); + int d = ax + ay + az; + if (d < 7) { + mut.setY(y + info.getPos().getY()); + BlockState state = info.getState(mut); + if (state.getBlock() instanceof LeavesBlock) { + int distance = state.get(LeavesBlock.DISTANCE); + if (d < distance) { + info.setState(mut, state.with(LeavesBlock.DISTANCE, d)); + } + } + } + } + } + } } return info.getState(); }); diff --git a/src/main/java/ru/betterend/world/features/MossyGlowshroomFeature.java b/src/main/java/ru/betterend/world/features/trees/MossyGlowshroomFeature.java similarity index 96% rename from src/main/java/ru/betterend/world/features/MossyGlowshroomFeature.java rename to src/main/java/ru/betterend/world/features/trees/MossyGlowshroomFeature.java index 5d0dcb69..fff59d02 100644 --- a/src/main/java/ru/betterend/world/features/MossyGlowshroomFeature.java +++ b/src/main/java/ru/betterend/world/features/trees/MossyGlowshroomFeature.java @@ -1,4 +1,4 @@ -package ru.betterend.world.features; +package ru.betterend.world.features.trees; import java.util.List; import java.util.Random; @@ -33,6 +33,7 @@ import ru.betterend.util.sdf.operator.SDFUnion; import ru.betterend.util.sdf.primitive.SDFCapedCone; import ru.betterend.util.sdf.primitive.SDFPrimitive; import ru.betterend.util.sdf.primitive.SDFSphere; +import ru.betterend.world.features.DefaultFeature; public class MossyGlowshroomFeature extends DefaultFeature { private static final Function REPLACE; diff --git a/src/main/java/ru/betterend/world/features/PythadendronTreeFeature.java b/src/main/java/ru/betterend/world/features/trees/PythadendronTreeFeature.java similarity index 84% rename from src/main/java/ru/betterend/world/features/PythadendronTreeFeature.java rename to src/main/java/ru/betterend/world/features/trees/PythadendronTreeFeature.java index 30c1331a..dbeb30d6 100644 --- a/src/main/java/ru/betterend/world/features/PythadendronTreeFeature.java +++ b/src/main/java/ru/betterend/world/features/trees/PythadendronTreeFeature.java @@ -1,4 +1,4 @@ -package ru.betterend.world.features; +package ru.betterend.world.features.trees; import java.util.List; import java.util.Random; @@ -9,6 +9,7 @@ import net.minecraft.block.LeavesBlock; import net.minecraft.block.Material; import net.minecraft.client.util.math.Vector3f; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockPos.Mutable; import net.minecraft.util.math.Direction; import net.minecraft.world.StructureWorldAccess; import net.minecraft.world.gen.chunk.ChunkGenerator; @@ -26,6 +27,7 @@ import ru.betterend.util.sdf.operator.SDFScale3D; import ru.betterend.util.sdf.operator.SDFSubtraction; import ru.betterend.util.sdf.operator.SDFTranslate; import ru.betterend.util.sdf.primitive.SDFSphere; +import ru.betterend.world.features.DefaultFeature; public class PythadendronTreeFeature extends DefaultFeature { private static final Function REPLACE; @@ -112,6 +114,7 @@ public class PythadendronTreeFeature extends DefaultFeature { sphere = new SDFDisplacement().setFunction((vec) -> { return (float) noise.eval(vec.getX() * 0.2, vec.getY() * 0.2, vec.getZ() * 0.2) * 3; }).setSource(sphere); sphere = new SDFDisplacement().setFunction((vec) -> { return random.nextFloat() * 3F - 1.5F; }).setSource(sphere); sphere = new SDFSubtraction().setSourceA(sphere).setSourceB(new SDFTranslate().setTranslate(0, -radius, 0).setSource(sphere)); + Mutable mut = new Mutable(); sphere.setPostProcess((info) -> { if (random.nextInt(5) == 0) { for (Direction dir: Direction.values()) { @@ -120,7 +123,29 @@ public class PythadendronTreeFeature extends DefaultFeature { return info.getState(); } } - return EndBlocks.PYTHADENDRON.bark.getDefaultState(); + info.setState(EndBlocks.PYTHADENDRON.bark.getDefaultState()); + for (int x = -6; x < 7; x++) { + int ax = Math.abs(x); + mut.setX(x + info.getPos().getX()); + for (int z = -6; z < 7; z++) { + int az = Math.abs(z); + mut.setZ(z + info.getPos().getZ()); + for (int y = -6; y < 7; y++) { + int ay = Math.abs(y); + int d = ax + ay + az; + if (d < 7) { + mut.setY(y + info.getPos().getY()); + BlockState state = info.getState(mut); + if (state.getBlock() instanceof LeavesBlock) { + int distance = state.get(LeavesBlock.DISTANCE); + if (d < distance) { + info.setState(mut, state.with(LeavesBlock.DISTANCE, d)); + } + } + } + } + } + } } return info.getState(); });