From 99f5a20d0ba7f849e404c56c2fe50cbb23bca5d8 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Mon, 14 Dec 2020 12:33:31 +0300 Subject: [PATCH] Erosion fix --- .../ru/betterend/util/StructureHelper.java | 18 ++++++++++++++++-- .../world/features/CrashedShipFeature.java | 9 ++++++--- .../textures/block/helix_tree_trapdoor.png | Bin 2492 -> 2490 bytes 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/main/java/ru/betterend/util/StructureHelper.java b/src/main/java/ru/betterend/util/StructureHelper.java index 96446815..ff8ab86c 100644 --- a/src/main/java/ru/betterend/util/StructureHelper.java +++ b/src/main/java/ru/betterend/util/StructureHelper.java @@ -85,6 +85,18 @@ public class StructureHelper { return new BlockBox(min.add(pos), max.add(pos)); } + public static BlockBox intersectBoxes(BlockBox box1, BlockBox box2) { + int x1 = MHelper.max(box1.minX, box2.minX); + int y1 = MHelper.max(box1.minY, box2.minY); + int z1 = MHelper.max(box1.minZ, box2.minZ); + + int x2 = MHelper.min(box1.maxX, box2.maxX); + int y2 = MHelper.min(box1.maxY, box2.maxY); + int z2 = MHelper.min(box1.maxZ, box2.maxZ); + + return BlockBox.create(x1, y1, z1, x2, y2, z2); + } + public static void erode(StructureWorldAccess world, BlockBox bounds, int iterations, Random random) { Mutable mut = new Mutable(); boolean canDestruct = true; @@ -209,7 +221,7 @@ public class StructureHelper { } } } - else if (random.nextInt(8) == 0 && !world.getBlockState(mut.up()).isOf(EndBlocks.ETERNAL_PEDESTAL)) { + else if (random.nextInt(8) == 0) { BlocksHelper.setWithoutUpdate(world, mut, Blocks.AIR); } } @@ -307,7 +319,9 @@ public class StructureHelper { || state.isOf(EndBlocks.FLAVOLITE_RUNED_ETERNAL) || state.isIn(BlockTags.LOGS) || state.isIn(BlockTags.LEAVES) - || state.getMaterial().equals(Material.PLANT); + || state.getMaterial().equals(Material.PLANT) + || state.getMaterial().equals(Material.LEAVES) + || state.getMaterial().equals(Material.WOOD); } private static void shuffle(Random random) { diff --git a/src/main/java/ru/betterend/world/features/CrashedShipFeature.java b/src/main/java/ru/betterend/world/features/CrashedShipFeature.java index 3475e9d8..a69ba91d 100644 --- a/src/main/java/ru/betterend/world/features/CrashedShipFeature.java +++ b/src/main/java/ru/betterend/world/features/CrashedShipFeature.java @@ -27,9 +27,7 @@ public class CrashedShipFeature extends NBTStructureFeature { @Override protected boolean canSpawn(StructureWorldAccess world, BlockPos pos, Random random) { - int cx = pos.getX() >> 4; - int cz = pos.getZ() >> 4; - return ((cx + cz) & 1) == 0 && pos.getY() > 58 && world.getBlockState(pos.down()).isIn(EndTags.GEN_TERRAIN); + return pos.getY() > 58 && world.getBlockState(pos.down()).isIn(EndTags.GEN_TERRAIN); } @Override @@ -63,6 +61,8 @@ public class CrashedShipFeature extends NBTStructureFeature { return false; } + System.out.println(center); + Structure structure = getStructure(world, center, random); BlockRotation rotation = getRotation(world, center, random); BlockMirror mirror = getMirror(world, center, random); @@ -70,6 +70,9 @@ public class CrashedShipFeature extends NBTStructureFeature { center = center.add(0, getYOffset(structure, world, center, random) + 0.5, 0); BlockBox bounds = makeBox(center); + BlockBox structB = StructureHelper.getStructureBounds(center, structure, rotation, mirror); + bounds = StructureHelper.intersectBoxes(bounds, structB); + StructurePlacementData placementData = new StructurePlacementData().setRotation(rotation).setMirror(mirror).setBoundingBox(bounds); addStructureData(placementData); center = center.add(-offset.getX() * 0.5, 0, -offset.getZ() * 0.5); diff --git a/src/main/resources/assets/betterend/textures/block/helix_tree_trapdoor.png b/src/main/resources/assets/betterend/textures/block/helix_tree_trapdoor.png index 7f0f38c8ad961e35e21f29c305cadca02623d3bd..76dab50ffd10a70990536a0e8ffa535e3999db82 100644 GIT binary patch delta 707 zcmdlZyi0h)875W}11lqo$rqV4psasP0V+mG=Eeqz7M8jx=Ejz~X2~W-x`}267P^L} zNof}5h89Ul#>ShAm?fBrQaM?HRh-Kt#L&}t2QA79iu~1Fd zmHaX{s@NtMKR)SFHs^zq49k;(UvEAizq$JQ?@ebW2463|9+wyscj|HZsKM`jrz_V^`Th3v)YPlKkAuBBFV8nw+kemQY{Z%R(_B-Z zeQql*EU{tvdC+_P>!0at5*D2Q7FjRxx#>IQ*0!AJR~B0zS7c9XNS~Y*py;W!*j}v4 zRgxv4V&2XOi5|}vkAJ6$tlYdg$>J8{fznvp(B)DROQ-ygoh5aNxm`fb#V*Gpv1HSu zR!z(2w{JK9-W@k9=iK?-lg`IiI0~$p=2O3N+3R@%2_0z#cg1#}`7E?wM_6Ox^9a_z zdv`E8-`{lMNjcAyuI_HB+TP<|3trgOh$!^%HO@HeBC+b?iR&KRXA?wMlv~UdP+GWG zAZx47w2!+^Xlv%K;pj@f?68RCqLyS^yJ`DE-qeEZUGvUvTYKSr!h?A=zf@H(wv=~Q zf3Dkq%26m_>)*zVTOVrWt(~U1Iq%B*U?KKUA!+rN`S)1)82@g4mdKI;Vst08JK#wq3o<`%jp2B|5!Ny#Rrx|SxUDY_nz<9D9tJ7pY_Wb%+ld2jR7?_kjT^vI+ zCfWww&b#a&@HKVwYwt^H`T;CnD>*KNS2*XgGIp+i;$7juAUi+xj8e9i;sP~y4&*q<~etEhO2CRY%wi$YHDZt?QJ`RoIb26aM^2o zmvxfL#rLN7r?jrnvXtOiQa`2P*0#GQy{~uGa#mR6Z#!;tp2bU`#ote5sjr0A@xsEZ zQNgd6*|+r_6gyO965J*n*V5b|b7p=`&HjpyMgCJQi(c(Adn-h2!7fJ`I{bPweqYGlrgxby|z1B&G)akF_;j!p^7Y(@}Gy;E=(l zN3EKz0@2ZjcU#BJ$~kw==j8I=aRMwKyRz%=&UnYk*!G2|XX}mBdDDNS&McXua6UVu z=<=qi|NG#qc}e)5 z-n*-}_d08NJ6tVeU-Y%@{qGxso2pEf7&p65bP0l+XkKe(N@(