diff --git a/src/main/java/ru/betterend/util/SplineHelper.java b/src/main/java/ru/betterend/util/SplineHelper.java index 5c9a8143..c1b385df 100644 --- a/src/main/java/ru/betterend/util/SplineHelper.java +++ b/src/main/java/ru/betterend/util/SplineHelper.java @@ -13,6 +13,7 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos.Mutable; import net.minecraft.util.math.MathHelper; import net.minecraft.world.StructureWorldAccess; +import ru.betterend.registry.EndTags; import ru.betterend.util.sdf.SDF; import ru.betterend.util.sdf.operator.SDFUnion; import ru.betterend.util.sdf.primitive.SDFLine; @@ -87,6 +88,22 @@ public class SplineHelper { return true; } + public static boolean fillSplineRoot(List spline, StructureWorldAccess world, BlockState state, BlockPos pos, Function replace) { + Vector3f startPos = spline.get(0); + for (int i = 1; i < spline.size(); i++) { + Vector3f endPos = spline.get(i); + if (i > 3 && !world.getBlockState(pos.add(endPos.getX(), endPos.getY(), endPos.getZ())).isIn(EndTags.END_GROUND)) { + return false; + } + if (!(fillLine(startPos, endPos, world, state, pos, replace))) { + return false; + } + startPos = endPos; + } + + return true; + } + private static boolean fillLine(Vector3f start, Vector3f end, StructureWorldAccess world, BlockState state, BlockPos pos, Function replace) { float dx = end.getX() - start.getX(); float dy = end.getY() - start.getY(); diff --git a/src/main/java/ru/betterend/world/features/DragonTreeFeature.java b/src/main/java/ru/betterend/world/features/DragonTreeFeature.java index 72584fe8..77324dab 100644 --- a/src/main/java/ru/betterend/world/features/DragonTreeFeature.java +++ b/src/main/java/ru/betterend/world/features/DragonTreeFeature.java @@ -105,7 +105,7 @@ public class DragonTreeFeature extends DefaultFeature { List branch = SplineHelper.copySpline(ROOT); SplineHelper.rotateSpline(branch, angle); SplineHelper.scale(branch, scale); - SplineHelper.fillSpline(branch, world, EndBlocks.DRAGON_TREE.bark.getDefaultState(), pos, REPLACE); + SplineHelper.fillSplineRoot(branch, world, EndBlocks.DRAGON_TREE.bark.getDefaultState(), pos, REPLACE); } }