diff --git a/src/main/java/ru/betterend/world/biome/EndBiome.java b/src/main/java/ru/betterend/world/biome/EndBiome.java index fb1eef89..39ec7eb3 100644 --- a/src/main/java/ru/betterend/world/biome/EndBiome.java +++ b/src/main/java/ru/betterend/world/biome/EndBiome.java @@ -147,7 +147,7 @@ public class EndBiome { list.add(new StructureInfo(structure, offsetY, adjustTerrain)); }); if (!list.isEmpty()) { - structuresFeature = EndFeature.makeChansedFeature(nm + "_structures", new ListFeature(list), 50); + structuresFeature = EndFeature.makeChansedFeature(nm + "_structures", new ListFeature(list), 30); } } } diff --git a/src/main/java/ru/betterend/world/features/NBTStructureFeature.java b/src/main/java/ru/betterend/world/features/NBTStructureFeature.java index e1f9ff4d..8c72c800 100644 --- a/src/main/java/ru/betterend/world/features/NBTStructureFeature.java +++ b/src/main/java/ru/betterend/world/features/NBTStructureFeature.java @@ -6,6 +6,7 @@ import java.util.Random; import net.minecraft.block.Block; import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtIo; import net.minecraft.server.MinecraftServer; @@ -102,6 +103,18 @@ public abstract class NBTStructureFeature extends DefaultFeature { int x2 = x1 + offset.getX(); int z2 = z1 + offset.getZ(); + if (x2 < x1) { + int a = x1; + x1 = x2; + x2 = a; + } + + if (z2 < z1) { + int a = z1; + z1 = z2; + z2 = a; + } + int surfMax = posY - 1; for (int x = x1; x <= x2; x++) { mut.setX(x); @@ -109,11 +122,11 @@ public abstract class NBTStructureFeature extends DefaultFeature { mut.setZ(z); mut.setY(posY); BlockState state = world.getBlockState(mut); - if (!state.isIn(EndTags.GEN_TERRAIN) && Block.sideCoversSmallSquare(world, mut, Direction.DOWN)) { + if (!state.isIn(EndTags.GEN_TERRAIN) && state.isSideSolidFullSquare(world, mut, Direction.DOWN)) { for (int i = 0; i < 10; i--) { mut.setY(mut.getY() - 1); BlockState stateSt = world.getBlockState(mut); - if (!stateSt.isIn(EndTags.GEN_TERRAIN) && stateSt.getMaterial().isReplaceable()) { + if (!stateSt.isIn(EndTags.GEN_TERRAIN)) { SurfaceConfig config = world.getBiome(mut).getGenerationSettings().getSurfaceConfig(); boolean isTop = mut.getY() == surfMax && state.getMaterial().blocksLight(); BlockState top = isTop ? config.getTopMaterial() : config.getUnderMaterial(); diff --git a/src/main/java/ru/betterend/world/structures/features/StructureEternalPortal.java b/src/main/java/ru/betterend/world/structures/features/StructureEternalPortal.java index bcd535a6..c62a4a2b 100644 --- a/src/main/java/ru/betterend/world/structures/features/StructureEternalPortal.java +++ b/src/main/java/ru/betterend/world/structures/features/StructureEternalPortal.java @@ -48,7 +48,7 @@ public class StructureEternalPortal extends StructureFeatureBase { int z = (chunkZ << 4) | MHelper.randRange(4, 12, random); int y = chunkGenerator.getHeight(x, z, Type.WORLD_SURFACE_WG); if (y > 50) { - this.children.add(new NBTPiece(STRUCTURE_ID, STRUCTURE, new BlockPos(x, y - 3, z), random.nextInt(5), true, random)); + this.children.add(new NBTPiece(STRUCTURE_ID, STRUCTURE, new BlockPos(x, y - 4, z), random.nextInt(5), true, random)); } this.setBoundingBoxFromChildren(); }