From 98b740782d30a4e25dd652aed431da424f9b90a7 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Thu, 29 Apr 2021 17:32:04 +0300 Subject: [PATCH] Tunnel caves --- .../ru/betterend/registry/EndFeatures.java | 7 +- .../java/ru/betterend/registry/EndTags.java | 12 +- .../terrain/caves/EndCaveFeature.java | 2 +- .../terrain/caves/TunelCaveFeature.java | 175 ++++++++++++++---- .../assets/betterend/lang/en_us.json | 3 +- .../assets/betterend/lang/ru_ru.json | 3 +- .../textures/block/sandy_jadestone.png | Bin 200 -> 223 bytes .../textures/block/sandy_jadestone_bricks.png | Bin 228 -> 194 bytes .../block/sandy_jadestone_furnace_front.png | Bin 238 -> 271 bytes .../sandy_jadestone_furnace_front_on.png | Bin 278 -> 310 bytes .../block/sandy_jadestone_furnace_side.png | Bin 213 -> 244 bytes .../block/sandy_jadestone_furnace_top.png | Bin 216 -> 235 bytes .../block/sandy_jadestone_lantern_bottom.png | Bin 181 -> 196 bytes .../block/sandy_jadestone_lantern_side.png | Bin 187 -> 200 bytes .../block/sandy_jadestone_lantern_top.png | Bin 181 -> 197 bytes .../block/sandy_jadestone_pillar_side.png | Bin 204 -> 175 bytes .../block/sandy_jadestone_pillar_top.png | Bin 220 -> 191 bytes .../block/sandy_jadestone_polished.png | Bin 236 -> 203 bytes .../textures/block/sandy_jadestone_tiles.png | Bin 194 -> 166 bytes .../textures/block/virid_jadestone.png | Bin 199 -> 206 bytes .../textures/block/virid_jadestone_bricks.png | Bin 228 -> 1573 bytes .../block/virid_jadestone_furnace_front.png | Bin 241 -> 1693 bytes .../virid_jadestone_furnace_front_on.png | Bin 321 -> 1783 bytes .../block/virid_jadestone_furnace_side.png | Bin 213 -> 1661 bytes .../block/virid_jadestone_furnace_top.png | Bin 216 -> 1652 bytes .../block/virid_jadestone_lantern_bottom.png | Bin 181 -> 1523 bytes .../block/virid_jadestone_lantern_side.png | Bin 187 -> 1573 bytes .../block/virid_jadestone_lantern_top.png | Bin 181 -> 1548 bytes .../block/virid_jadestone_pillar_side.png | Bin 204 -> 1509 bytes .../block/virid_jadestone_pillar_top.png | Bin 221 -> 1552 bytes .../block/virid_jadestone_polished.png | Bin 236 -> 1575 bytes .../textures/block/virid_jadestone_tiles.png | Bin 194 -> 1497 bytes 32 files changed, 161 insertions(+), 41 deletions(-) diff --git a/src/main/java/ru/betterend/registry/EndFeatures.java b/src/main/java/ru/betterend/registry/EndFeatures.java index b48a9bb7..30337086 100644 --- a/src/main/java/ru/betterend/registry/EndFeatures.java +++ b/src/main/java/ru/betterend/registry/EndFeatures.java @@ -60,6 +60,7 @@ import ru.betterend.world.features.terrain.SulphuricCaveFeature; import ru.betterend.world.features.terrain.SulphuricLakeFeature; import ru.betterend.world.features.terrain.SurfaceVentFeature; import ru.betterend.world.features.terrain.caves.RoundCaveFeature; +import ru.betterend.world.features.terrain.caves.TunelCaveFeature; import ru.betterend.world.features.trees.DragonTreeFeature; import ru.betterend.world.features.trees.GiganticAmaranitaFeature; import ru.betterend.world.features.trees.HelixTreeFeature; @@ -201,7 +202,7 @@ public class EndFeatures { public static final EndFeature OBSIDIAN_PILLAR_BASEMENT = EndFeature.makeChansedFeature("obsidian_pillar_basement", new ObsidianPillarBasementFeature(), 8); public static final EndFeature OBSIDIAN_BOULDER = EndFeature.makeChansedFeature("obsidian_boulder", new ObsidianBoulderFeature(), 10); public static final EndFeature FALLEN_PILLAR = EndFeature.makeChansedFeature("fallen_pillar", new FallenPillarFeature(), 20); - //public static final EndFeature TUNEL_CAVE = EndFeature.makeRawGenFeature("tunel_cave", new TunelCaveFeature(), 2); + public static final EndFeature TUNEL_CAVE = EndFeature.makeChunkFeature("tunel_cave", new TunelCaveFeature()); // Ores // public static final EndFeature THALLASIUM_ORE = EndFeature.makeOreFeature("thallasium_ore", EndBlocks.THALLASIUM.ore, 12, 6, 0, 16, 128); @@ -258,7 +259,7 @@ public class EndFeatures { if (EndBiomes.getBiome(id).hasCaves()) { addFeature(ROUND_CAVE, features); - //addFeature(TUNEL_CAVE, features); + addFeature(TUNEL_CAVE, features); } EndBiome endBiome = EndBiomes.getBiome(id); @@ -276,7 +277,7 @@ public class EndFeatures { if (def.hasCaves()) { def.addFeature(ROUND_CAVE); - //def.addFeature(TUNEL_CAVE); + def.addFeature(TUNEL_CAVE); } } diff --git a/src/main/java/ru/betterend/registry/EndTags.java b/src/main/java/ru/betterend/registry/EndTags.java index c2866b47..f82d2182 100644 --- a/src/main/java/ru/betterend/registry/EndTags.java +++ b/src/main/java/ru/betterend/registry/EndTags.java @@ -128,7 +128,17 @@ public class EndTags { }); ToolManagerImpl.tag(HAMMERS).register(new ModdedToolsVanillaBlocksToolHandler(hammers)); - TagHelper.addTag(GEN_TERRAIN, EndBlocks.ENDER_ORE, EndBlocks.FLAVOLITE.stone, EndBlocks.VIOLECITE.stone, EndBlocks.SULPHURIC_ROCK.stone, EndBlocks.BRIMSTONE); + TagHelper.addTag( + GEN_TERRAIN, + EndBlocks.ENDER_ORE, + EndBlocks.FLAVOLITE.stone, + EndBlocks.VIOLECITE.stone, + EndBlocks.SULPHURIC_ROCK.stone, + EndBlocks.BRIMSTONE, + EndBlocks.VIRID_JADESTONE.stone, + EndBlocks.AZURE_JADESTONE.stone, + EndBlocks.SANDY_JADESTONE.stone + ); TagHelper.addTag(END_GROUND, EndBlocks.SULPHURIC_ROCK.stone, EndBlocks.BRIMSTONE); TagHelper.addTag(FURNACES, Blocks.FURNACE); diff --git a/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java b/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java index c303d01b..301748c4 100644 --- a/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java @@ -184,7 +184,7 @@ public abstract class EndCaveFeature extends DefaultFeature { return new BlockPos(pos.getX(), MHelper.randRange(bottom, top, random), pos.getZ()); } - private void fixBlocks(WorldGenLevel world, Set caveBlocks) { + protected void fixBlocks(WorldGenLevel world, Set caveBlocks) { BlockPos pos = caveBlocks.iterator().next(); MutableBlockPos start = new MutableBlockPos().set(pos); MutableBlockPos end = new MutableBlockPos().set(pos); diff --git a/src/main/java/ru/betterend/world/features/terrain/caves/TunelCaveFeature.java b/src/main/java/ru/betterend/world/features/terrain/caves/TunelCaveFeature.java index c907b07d..a95747ae 100644 --- a/src/main/java/ru/betterend/world/features/terrain/caves/TunelCaveFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/caves/TunelCaveFeature.java @@ -1,55 +1,162 @@ package ru.betterend.world.features.terrain.caves; -import java.util.List; import java.util.Random; import java.util.Set; -import java.util.function.Function; -import com.mojang.math.Vector3f; +import com.google.common.collect.Sets; import net.minecraft.core.BlockPos; +import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.util.Mth; import net.minecraft.world.level.WorldGenLevel; -import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.material.Material; +import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; +import ru.betterend.noise.OpenSimplexNoise; +import ru.betterend.registry.EndBiomes; import ru.betterend.registry.EndTags; import ru.betterend.util.BlocksHelper; -import ru.betterend.util.SplineHelper; -import ru.betterend.util.sdf.SDF; +import ru.betterend.world.biome.cave.EndCaveBiome; public class TunelCaveFeature extends EndCaveFeature { - private static final Function REPLACE; - - @Override - protected Set generate(WorldGenLevel world, BlockPos center, int radius, Random random) { - //OpenSimplexNoise noise = new OpenSimplexNoise(MHelper.getSeed(534, center.getX(), center.getZ())); - float rad = radius * 0.15F; - int min = Mth.ceil(rad) - 15; - int max = 31 - Mth.floor(rad); - List spline = SplineHelper.makeSpline(0, 0, 0, 0, 0, 0, radius / 3); - spline = SplineHelper.smoothSpline(spline, 5); - SplineHelper.offsetParts(spline, random, 5, radius * 0.4F, 5); - for (Vector3f vec: spline) { - float x = Mth.clamp(vec.x(), min, max); - float y = Mth.clamp(vec.y(), -radius, radius); - float z = Mth.clamp(vec.z(), min, max); - vec.set(x, y, z); + private Set generate(WorldGenLevel world, BlockPos center, Random random) { + /*Random rand = new Random(world.getSeed()); + OpenSimplexNoise noise1 = new OpenSimplexNoise(rand.nextInt()); + OpenSimplexNoise noise2 = new OpenSimplexNoise(rand.nextInt()); + OpenSimplexNoise noise3 = new OpenSimplexNoise(rand.nextInt()); + int x1 = (center.getX() >> 4) << 4; + int z1 = (center.getZ() >> 4) << 4; + int x2 = x1 + 16; + int z2 = z1 + 16; + int y2 = world.getHeight(); + Set positions = Sets.newHashSet(); + MutableBlockPos pos = new MutableBlockPos(); + for (int x = x1; x < x2; x++) { + pos.setX(x); + for (int z = z1; z < z2; z++) { + pos.setZ(z); + for (int y = 0; y < y2; y++) { + pos.setY(y); + float v1 = Mth.abs((float) noise1.eval(x * 0.02, y * 0.02, z * 0.02)); + float v2 = Mth.abs((float) noise2.eval(x * 0.02, y * 0.02, z * 0.02)); + //float v3 = Mth.abs((float) noise3.eval(x * 0.02, y * 0.02, z * 0.02)); + if (MHelper.max(v1, v2) > 0.7 && world.getBlockState(pos).is(EndTags.GEN_TERRAIN)) { + BlocksHelper.setWithoutUpdate(world, pos, AIR); + positions.add(pos.immutable()); + } + } + } } - SDF sdf = SplineHelper.buildSDF(spline, rad, rad, (vec) -> Blocks.AIR.defaultBlockState()); - Set positions = sdf.setReplaceFunction(REPLACE).getPositions(world, center); - for (BlockPos p: positions) { - BlocksHelper.setWithoutUpdate(world, p, CAVE_AIR); + return positions;*/ + + int x1 = (center.getX() >> 4) << 4; + int z1 = (center.getZ() >> 4) << 4; + int x2 = x1 + 16; + int z2 = z1 + 16; + int y2 = world.getHeight(); + Random rand = new Random(world.getSeed()); + OpenSimplexNoise noiseH = new OpenSimplexNoise(rand.nextInt()); + OpenSimplexNoise noiseV = new OpenSimplexNoise(rand.nextInt()); + OpenSimplexNoise noiseD = new OpenSimplexNoise(rand.nextInt()); + + Set positions = Sets.newHashSet(); + MutableBlockPos pos = new MutableBlockPos(); + for (int x = x1; x < x2; x++) { + pos.setX(x); + for (int z = z1; z < z2; z++) { + pos.setZ(z); + for (int y = 0; y < y2; y++) { + pos.setY(y); + float val = Mth.abs((float) noiseH.eval(x * 0.02, y * 0.01, z * 0.02)); + float vert = Mth.sin((y + (float) noiseV.eval(x * 0.01, z * 0.01) * 20) * 0.1F) * 0.9F;//Mth.abs(y - 50 + (float) noiseV.eval(x * 0.01, z * 0.01) * 20) * 0.1F; + float dist = (float) noiseD.eval(x * 0.1, y * 0.1, z * 0.1) * 0.12F; + vert *= vert; + if (val + vert + dist < 0.15 && world.getBlockState(pos).is(EndTags.GEN_TERRAIN)) { + BlocksHelper.setWithoutUpdate(world, pos, AIR); + positions.add(pos.immutable()); + } + } + } } return positions; } - static { - REPLACE = (state) -> { - return state.is(EndTags.GEN_TERRAIN) - || state.getMaterial().isReplaceable() - || state.getMaterial().equals(Material.PLANT) - || state.getMaterial().equals(Material.LEAVES); - }; + @Override + public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, NoneFeatureConfiguration config) { + if (pos.getX() * pos.getX() + pos.getZ() * pos.getZ() <= 2500) { + return false; + } + + if (biomeMissingCaves(world, pos)) { + return false; + } + + EndCaveBiome biome = EndBiomes.getCaveBiome(random);//EndBiomes.EMPTY_END_CAVE; + Set caveBlocks = generate(world, pos, random); + if (!caveBlocks.isEmpty()) { + if (biome != null) { + setBiomes(world, biome, caveBlocks); + Set floorPositions = Sets.newHashSet(); + Set ceilPositions = Sets.newHashSet(); + MutableBlockPos mut = new MutableBlockPos(); + caveBlocks.forEach((bpos) -> { + mut.set(bpos); + if (world.getBlockState(mut).getMaterial().isReplaceable()) { + mut.setY(bpos.getY() - 1); + if (world.getBlockState(mut).is(EndTags.GEN_TERRAIN)) { + floorPositions.add(mut.immutable()); + } + mut.setY(bpos.getY() + 1); + if (world.getBlockState(mut).is(EndTags.GEN_TERRAIN)) { + ceilPositions.add(mut.immutable()); + } + } + }); + BlockState surfaceBlock = biome.getBiome().getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); + placeFloor(world, biome, floorPositions, random, surfaceBlock); + placeCeil(world, biome, ceilPositions, random); + placeWalls(world, biome, caveBlocks, random); + } + fixBlocks(world, caveBlocks); + } + + return true; + } + + @Override + protected Set generate(WorldGenLevel world, BlockPos center, int radius, Random random) { + return null; + } + + @Override + protected void placeFloor(WorldGenLevel world, EndCaveBiome biome, Set floorPositions, Random random, BlockState surfaceBlock) { + float density = biome.getFloorDensity() * 0.2F; + floorPositions.forEach((pos) -> { + BlocksHelper.setWithoutUpdate(world, pos, surfaceBlock); + if (density > 0 && random.nextFloat() <= density) { + Feature feature = biome.getFloorFeature(random); + if (feature != null) { + feature.place(world, null, random, pos.above(), null); + } + } + }); + } + + @Override + protected void placeCeil(WorldGenLevel world, EndCaveBiome biome, Set ceilPositions, Random random) { + float density = biome.getCeilDensity() * 0.2F; + ceilPositions.forEach((pos) -> { + BlockState ceilBlock = biome.getCeil(pos); + if (ceilBlock != null) { + BlocksHelper.setWithoutUpdate(world, pos, ceilBlock); + } + if (density > 0 && random.nextFloat() <= density) { + Feature feature = biome.getCeilFeature(random); + if (feature != null) { + feature.place(world, null, random, pos.below(), null); + } + } + }); } } diff --git a/src/main/resources/assets/betterend/lang/en_us.json b/src/main/resources/assets/betterend/lang/en_us.json index a7f86e22..8f8b2628 100644 --- a/src/main/resources/assets/betterend/lang/en_us.json +++ b/src/main/resources/assets/betterend/lang/en_us.json @@ -853,5 +853,6 @@ "block.betterend.neon_cactus_block": "Neon Cactus Block", "block.betterend.neon_cactus_slab": "Neon Cactus Slab", - "block.betterend.neon_cactus_stairs": "Neon Cactus Stairs" + "block.betterend.neon_cactus_stairs": "Neon Cactus Stairs", + "biome.betterend.jade_cave": "Jade Cave" } diff --git a/src/main/resources/assets/betterend/lang/ru_ru.json b/src/main/resources/assets/betterend/lang/ru_ru.json index c5366cb6..b9d22043 100644 --- a/src/main/resources/assets/betterend/lang/ru_ru.json +++ b/src/main/resources/assets/betterend/lang/ru_ru.json @@ -872,5 +872,6 @@ "block.betterend.neon_cactus_block": "Блок неонового кактуса", "block.betterend.neon_cactus_slab": "Плита из неонового кактуса", - "block.betterend.neon_cactus_stairs": "Ступени из неонового кактуса" + "block.betterend.neon_cactus_stairs": "Ступени из неонового кактуса", + "biome.betterend.jade_cave": "Нефритовая пещера" } \ No newline at end of file diff --git a/src/main/resources/assets/betterend/textures/block/sandy_jadestone.png b/src/main/resources/assets/betterend/textures/block/sandy_jadestone.png index b1270bbb3f484e4f3e909416dcc93e09deb66155..f00ff0c20e5d0121c396f1405ab5a52997303130 100644 GIT binary patch delta 195 zcmX@Xc%N~CNGZx^prw85kIZ0(?STfpl@LO?8_`)3o6JB~ep1rDUC4wj3zR zRubeF%Wt@l7%89ZJ6T-G@yGywnzR#Ex@ delta 172 zcmcc5c!F_)O1)@+Plzi614CxHNnwLSVY_qX1n;(afjw)Zr~Tr-50qdp3GxeO_zwn4 z>zDlo3PpRmIEGX(vL0-7WOfi>QG90d?S4UBYn`&ro7K$f-vXKx7oRuk=U#1}HgA4} zRf4RXDs$p5U4xs`-yN};v;7={;ja&+2c6`r=OkTJeR$7`zl1I6g1eaU`=G|759G_% W>)718^YJXu9tKZWKbLh*2~7ams7SK_ diff --git a/src/main/resources/assets/betterend/textures/block/sandy_jadestone_bricks.png b/src/main/resources/assets/betterend/textures/block/sandy_jadestone_bricks.png index 2ce5712106bf8f804d283bf99fe339c010baa533..667f447f4a8cd8a5d92727ba3ea6c7f321009f28 100644 GIT binary patch delta 178 zcmV;j08Rho0m1>07=H)@0000eEe}%w000DMK}|sb0I`mI`%#ks000tDOjJd4eLQ=H zNP?DAkEB|avSgaOX$WF@NdN!-jtLF`Aq)cP;s3w9SRI#`(lioAy-;sS zE2}E}wrBWY%kY}B_@MB#t~oNFZzAV#LNlG|+G-Sz#!1JK=qrau^ur_i;d%X!hkkfO gKRluzo*&@yd`Z*-M*g!eN&o-=07*qoM6N<$g3ZK8z5oCK literal 228 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPF4x)sWM8d178)5_{aAQ|X+oJS|I@jZt3y(Yypk&gFWyjM slHd2?A-DX#f9?7;KMsM2B-e+p*%POUCbWoWgIv$x>FVdQ&MBb@0J>I1umAu6 diff --git a/src/main/resources/assets/betterend/textures/block/sandy_jadestone_furnace_front.png b/src/main/resources/assets/betterend/textures/block/sandy_jadestone_furnace_front.png index 64f874ed2b007cb3b1a2c28edf24a31ce8188035..b248b45d0208e0d97a38e73cb9ae8b339d723cfa 100644 GIT binary patch delta 243 zcmaFI*v~XUrJk`k$lZxy-8q?;3=9m40X`wFK-$Jx(mz5uK0_sq_sS(FOAl&)BNNFEXRfs6g+Sz4AFRk#B)zb9&9Ua5)`VC7F5N{YQws6w0HQ|CjMr9T-8eAuc46E0fgTe~DWM4f!2xLR delta 210 zcmeBYddE0HrCu(;C&ZP3fx+5E$}dtSHcKb7+@!FzyxHTv=e~|s`)$cfGOV%nvj=CKxZytDnm{ Hr-UW|hW%U* diff --git a/src/main/resources/assets/betterend/textures/block/sandy_jadestone_furnace_front_on.png b/src/main/resources/assets/betterend/textures/block/sandy_jadestone_furnace_front_on.png index d1ceb402dfa4a3a3f8b84b1265962c9c063ee70a..7e6d7e3cd7564d718540e2018c9ca27c8397075e 100644 GIT binary patch delta 250 zcmbQnw2f(kiaKL)kh>GZx^prw85kHW1AIbUfpl@LO?8_`)3o6JB~ep1rOeu$Ini3B zesb!2HK3$$NswPK!+#85XMaZ*DBa`f;us<^)z+U;=#T*iv(t*%moxwWk8s{@?9P4C zF=K7Vnj}si!DOX|*DW2IzvY#tJvw>DV{290)LoWki5{9B1wEfX*V=t!TyN0!xaNH2 znd^1j6K^LTx+CGSSL~b{7t3__84tOZZ*$?^sgxJ|{e-}Sd&)=uafChl#PDn4Qtzp5 n8@TjO-mJekDMNb8)Gm3~Da>C_T-Yf9bQpuDtDnm{r-UW|{(Ex| delta 218 zcmdnSG>vJ3inv*TPlzi614CxHNnwLS6^(DLk@r8Cbz`E7G=)6sPKpT9mPdG4FP|Ih!==hiO$yl?eCPBV); z+3R*L(-C0WxU}I8Rx9BrIy@tcGZx^prw85kHu1AIbUfpl@LO?8_`)3o6JB~ep1rOeu$`O720 zA1J|I666=m@E;78)-U@F6sq!caSV}|YU|&~d%%DrNZ`MH<%4Mxw`eiuWFNhGRZ5C~ zsp5(62b_0)=WZH&)mp6KP>I;X7tGy*N-VrtecfRZOVOb#P2cr2R_YJ UA*4iBc>n+a07*qoM6N<$f>TRL;s5{u diff --git a/src/main/resources/assets/betterend/textures/block/sandy_jadestone_furnace_top.png b/src/main/resources/assets/betterend/textures/block/sandy_jadestone_furnace_top.png index 219c3cfe2625a6b46934c51913c48679de61969d..cf5b31c5c22fadc190242d6f898ed7f1228bb3bf 100644 GIT binary patch delta 207 zcmcb?_?mHoNGZx^prw85kHu1AIbUfpl@LO?8_`)3o6JB~ep1rOeu$`O720 zA1J|I666=m@E;78)-U@F6e{#|aSV}|>gvzQcR+z>mCWD&lijcS2qi0CSbQsFyY&XA zQ%Wa33k3bV-ajE|hmK>CR><+(H~xEv>RW=UfzBD zOZ|}#=h4!R<;Nv$bihx}T(a3V23c=Ie%Wru{@BO+bo3*vm>C&Dx zNViZc;IbKm+O-B@<4)fIz0=jvkKoKr^N!)`>?Wsg$CJ8e?|t;(U%TaZG*r1yMI+N6 Y$s<}Q5n*qL00000NkvXXu0mh|f>`WPT>t<8 diff --git a/src/main/resources/assets/betterend/textures/block/sandy_jadestone_lantern_bottom.png b/src/main/resources/assets/betterend/textures/block/sandy_jadestone_lantern_bottom.png index b82658d0822957761970c4c41b0d7dc63cd429ed..0807c5bc990aad0f07cc244a22e99b5ea4074173 100644 GIT binary patch delta 168 zcmdnWc!Y6+NGZx^prw85kHu1AIbUfpl@LO?8_`)3o6JB~ep1rOeu$`O720 zA1J|I666=m@E;78)-U@F6!P+PaSV}|I`>SV5Q88Ob3pEr@AjYE%DewAIoxBjWb10q zPq7*ttek(CWgGc+=)Rb#Zt&im|sOL`nbv delta 134 zcmV;10D1q!0kr{;Bpww|OjJbx003!sG;x4Hafd^BkV}T1QH-rymii0dkxv#~NJ&IN zRCwB*jZqQ+F$6;;Dfd6}s_xqMw}u&c2(zmQ_m%oUq(~yZAX{lj#1BU4243?GMCt>0 oEePzlDY=_YKY$JDd=~5~9=&D(Kb!ZxIsgCw07*qoM6N<$f(6Yr=l}o! diff --git a/src/main/resources/assets/betterend/textures/block/sandy_jadestone_lantern_side.png b/src/main/resources/assets/betterend/textures/block/sandy_jadestone_lantern_side.png index 032d2b562353805d9e24ee001ca459831f697abb..ada8266e726e44226b83c117b889e51f7d3b270a 100644 GIT binary patch delta 99 zcmdnZc!F_)iU(tHkh>GZx^prw85kHu1AIbUfpl@LO?8_`)3o6JB~ep1rOeu$`O720 wA1J|I666=m@E;78)-U@F6!PmdKI;Vst01{gy<^TWy delta 63 zcmX@XxSMf;ikxVGPlzi614CxHNnwLSVY_qX1n;(afjw)Zr~Tr-Kha;Bsp8he93KJa T?Ys1V${0Ld{an^LB{Ts5!@L%C diff --git a/src/main/resources/assets/betterend/textures/block/sandy_jadestone_lantern_top.png b/src/main/resources/assets/betterend/textures/block/sandy_jadestone_lantern_top.png index e21450d55ae348bdd24422eee24311d0bed61815..f6044f045f44dbb92b6d5907c361f3b47658e2c5 100644 GIT binary patch delta 169 zcmdnWc$9I1NGZx^prw85kHu1AIbUfpl@LO?8_`)3o6JB~ep1rOeu$`O720 zA1J|I666=m@E;78)-U@F6!P|TaSV}|I=9zT=zs$U6MMk_|4$~I{WvQ?ZpqSuwehRY zRDWsOWGE>AAe5`~#)C5gyg{Oe7(`$G@o`})S$1Ek>xs_Stc{KDr@!s%w_-SK$mqd; Sb!INmTn0~9KbLh*2~7b1i${C_ delta 134 zcmV;10D1q#0kr{;Bpww|OjJbx003!sG;x4Hafd^BkV}T1QH-rymii0dkxv#~NJ&IN zRCwB*%`p;yKo9~!85aKkWCQiQR4Jkk;5dGz$yGnlCP~c=sqL}R3vGfH#2sscPRtIO oNLZ{}1N*3vBo-JX(AxNz6T>k9NR-)UN&o-=07*qoM6N<$g5d!*hX4Qo diff --git a/src/main/resources/assets/betterend/textures/block/sandy_jadestone_pillar_side.png b/src/main/resources/assets/betterend/textures/block/sandy_jadestone_pillar_side.png index 76969a6f82f37e32e0d8bb3ddd970f43bd760ba0..94298f09452096e178d6102868ad7c67b6156b32 100644 GIT binary patch delta 159 zcmX@ZxSnx>L_G&H0|SGGE`KnPVo7)Ob!1@J*jMvAa59iD6yOu$T3l;W-R99WEx3P4 z)YMHWvvy~4BvpC>Wj#Dy9780g_MSh;#h}2!9Ps?j|N5Ptnq{v)+?X(7OGMt}iT?~3 z_-&INmwAb#gk{DzZ(cJ!$ki&;=HW87hn(j1`_5h1q$uHkYzt%7RHnJh9`#B94Q23j L^>bP0l+XkK{?j`e literal 204 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFWg|RY9780gruK959Z=wKj<);0|I-wsx$8VdJ8QX=nB|2ZwsUU3 z9IUc6Y~h=Lj^LX-@|#v^PyhU8_C_gIO*eBfXO29#8yb6ZlD@qDE68wNXGi+MdNHlO b@@fXvPR4IjR9FrJEn)C<^>bP0l+XkKNJKv+ literal 220 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFJinPtR%KlH7a3%9dT;y5JMU5_Fl!1+ooeCNHa@90 nS^dg{a;^XCO@2>bsCtN-^SJQ#|7Q&Ef?VL~>gTe~DWM4fR60U+ diff --git a/src/main/resources/assets/betterend/textures/block/sandy_jadestone_polished.png b/src/main/resources/assets/betterend/textures/block/sandy_jadestone_polished.png index 31198aa5a89d478d08102bdd13b13f1251699397..4ab1013d336a4be3fdf269a1bffb4c41de9e872f 100644 GIT binary patch delta 187 zcmV;s07U=n0m}i97=H)@0000eEe}%w000DMK}|sb0I`mI`%#ks000tDOjJd4eLQ=H zNP?DAkEB|avSgaOX$WF@NdN!_jsX%xAqYZ2>i$<=1^cs2WuiR8xqs^% z;fhry^;MK;L0N?rHZ8UQT#`WVcdq>dGN*;~KTw3&6U`XP05lxjL6_Guk((Nt#x>HG pt@2GtJ|FMbGBR;0fWE02{R2rM0w}DX9mN0u002ovPDHLkV1g<*M#caD literal 236 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFyMt(J-usfY~en+^Nl;D&jyJrSei91iQCqut@Nkz@~#NU$vRVWn8a2HsWW*u zn6)l`RkC??e~)%T=f9+1b7E58C7hdhI7+%|N(jH5qrHd;JHNgK$VHy6elF{r5}E+X C{YLiy diff --git a/src/main/resources/assets/betterend/textures/block/sandy_jadestone_tiles.png b/src/main/resources/assets/betterend/textures/block/sandy_jadestone_tiles.png index 146e80149a30512179c3c3239dc2140abb70a913..cbfcfa8aa1a52a0d3fbc85fb748b3704c5fbc517 100644 GIT binary patch delta 150 zcmX@axQuavL_G&H0|SGGE`KnPVo7)Ob!1@J*jMvAa59iD6yOu$T3l;W-R99WEx3P4 z)YMHWvvy~4BvpC>W$is(9780go;}yddBB0g`J#OByZuG_ORb!lKe>oJ`6At4a&wyL zrLs`A`6fc!k5wlFzskoI~z{|_ame{6{?CdO%#$gs@ z!jjm=;K=3(9XZk#OtNI~v=x8rsO35nWRIt-pUXO@ GgeCy%6e)ZF diff --git a/src/main/resources/assets/betterend/textures/block/virid_jadestone.png b/src/main/resources/assets/betterend/textures/block/virid_jadestone.png index 49aa5ad8a737078aff2d07175ded4f8fa3530851..9e756998bb1292d061235082d47589f7232a3209 100644 GIT binary patch delta 178 zcmV;j08RhL0nP!CB!2;OQb$4nuFf3k0000IP)t-s89gu`MK>f%JtOV@L%f>%qoE7DWaYMYsQ#>W}6vh;M1#Tk4p!*~=j1i>|SC;@9J6%939u zRjKz(YBc!E196!roHDxrQ&>@KD6=thm?j>oGd%Cm4q?%~2mNw9KLh*X{BsrS9=XUp` zxddTMTbK^Seo;5-7z%DwDyVFQ&9{|(P@J~z(?0oO6RLu%LoLeK^trsTjSY1N&pmIy z=l6gAzcMoX^p3y-0g9q_WYVcoG6((9-bVhfFBGC=y4Oxmx)jxMpFi%Q4lnMcsBOO( z*$F(M3;_+9Ayr4yFyxswK~vQ30nb*o8Hnj=m^Un$**yI@LmRrxjQ1(LVkcq2NLL*= zRvpf2)fr9FnSm$h-5wwWCd4Z3nMKP5p3KyE0a^RU97ES2ct&OtzCe0H8KINNfplLe z%4$MHq+?P@i1Lycd7Kt`A;$4BP6)HS0Qe{fOLXI7h%`sffzi}c4OwI-GX;!oz;Wer zIaCgZkdx;GNs>5Toah_^(LWuWGssVMag|kaeu_j#CI9P-xw6IICLJMmb5JqkR-GRDweUkvS{lrxWQN!r zG7KGPP|WdhRcFO`R3*QN#Kv`9Vqr{+3*kO38VyI9?^8%C`H^kD*Z=4H=NyAnmRh`P z9>3oFlmKbNCBdpRDq;-oZLEq0UCRQXYJPUhjOK?G>P+Ltpg zTvi>J$P-unmt5kA@|<6Xbvw9QO|0GBP_s=qX$1bV)q%*S)x)4g8ka*l)PWxZmq~Z~ zK9fphd)7(|N??@_&a*>%KD@qse=LMImb!ioOr3fD^k`RLK5#9uTsU>*M6dAPq5X4* zz8dmgTsyecFFd&Q*6~-5P43$0P{F{|d~oTHN54+&TuS}<+2!%}-i6?6Kfm+a)eB!P ze>Bx|{@mvF^bc3x-JH!n^Kr3j^-6nZ@aWlz>Uy@i-n-d({{1)ju}_ce54LUpZth6O zu6^rm-D{WT>~kA?_8$J}?^8#Olau|Gwee?<4dDL8#ZRPt2QGc{S2Ezf8QbVQv+WV| u?L!wmcQrk>;kK|;>>u;|-QLu%n^0Ll-Ef|d?5kDBLL+0V9}90VO(>J)e>%5vbx3NFS8}D`#T!aY s^7}qKB*uCAk-nMr;>+ZI9 zEfOmsATbb0(D*39M-u~uN)#UzQ7mYTnxa*R(5R)g1`|-Uiv6e2+3Vc}2t;L**_qk- z=KH;WyREi*^@6!e=3*GOAW-SAL-Q@x$je6Wr*}r2Xu4UeTx($1yv5eY!d~dT9m8@j zD8VMPNvPr_7_*5o3;|mrrXe(jtt?GwqSOvdJOo-5)l2+(_(K9$WG~U^5NJX3frwJs zt%LgR>Y&u!E_r04^Z|Tjf=2`~V2XGm7F7*C;U$v1JX%|yDFRPI%yutPW(mZbgj(DO zb$~l;PEum*Ebj8y7$@yv?Ik!%GcJmDQ4B}Y3{N|G&V#2O0!h>5Fkk0im6C;aULs~z8(JaNXBtnozmuiX$QZ)+G41Qopx}up1RB?+@48ac5OCU{W zO^9h3TGdFo2|0{Ph#JM%Xv?G|P?j<{twWC{h078Jq96uT(?D1zgViF?ghm8jhdOh7 zg#hGQLCDCsrY^BqMucHjbRsiS4!I`U2zF_Jssje>&?QjOiPS8#tkHO%4nz~`K?tMi zK-H#I#(h33FmAl4QBh?WH}1Ra4)BX6@DeP|G9+y$StiIhc)NQA&G9rnixZ%%guAZ7 zd4deba}M6YTmeNXBa5c^uV7i?!%&Zj$Y3QVwgO61TM0blM&1XbP)CB1YFttaLErP_VjE6;Tf!O|7B|p3DMXl&tLb5|R~GAQP$2$_;y9 zmNp&%i1d1~p2Zk2Y{o?$l(iyP{g+&#kn)sOhqHE2SDTnTyR2r@aMTE_Wu^n6O{Rwd z6*Vp$b*T1DZ*v%y)e!KP1&dAyb)Q!sr{|aS-%~MKa;OKpyJev^esueuv&*L&^Lxh* z_B8C@9BgU!pP4sN)%Nkeb%*aN{p8Z{cgJR?Pj>7%@YX4+=BZbDl=erevbo3N+O6Tp zvEN4jnwV{d#d$*_N08 zK0UM|Yh?ZTTrW2B`*iTxWp7>@wQbfuc)u_3V+rhueAB!7iR`J3f9}KfVk3Raz95#A z*FUps|QqQU%a>f+^+5Ci+1dP7#>|T*ni}v z@tp-y;4^o*xcm8mRc~y;T%m8b73XR*5=7o_8nCa8)&V zQ|bVfH&pQ6Pq&R+Fw32bCfg?OY*=a!)bY7ncisPD;U9=d3Nrd5w5dw|*djifaErdCR7M0KuF^dH?_b delta 224 zcmbQs`;l>iWIZzj1A~Sxe=v}e3-AeX1=51LrV=JLvX+iYc5ccJo~j-`8vg$JaiJ!8 ziC=mZHUm{~l?3?(GyI2vx=xWWplF4si(^OyBkRFNUls?RBM$j_j2G*-_D`8H^Iw%D z&w|IHmIoVLswx;5SY}&G?R4B;Hs^_OWW@fN8w=h~X8HNsYK@Z+2ZM;3Q-FK$ruXau z3KtIK-Mh8bTFh}#Ag5?v+wr|R%T}_~oDe?c6u_q#wkXBW@#WhC2laT4+uP?v>Cg0@ R;|O#FgQu&X%Q~loCIF0qQlkI> diff --git a/src/main/resources/assets/betterend/textures/block/virid_jadestone_furnace_front_on.png b/src/main/resources/assets/betterend/textures/block/virid_jadestone_furnace_front_on.png index 5203c612b123993a0e2b0dcbb856410b34b44fde..899e1c14e17014078afc642f8adde598810d2e15 100644 GIT binary patch literal 1783 zcmbVNe@xU?950HBf+zEW}8i3-+O(Z z_xb+*_Ct5s@|iQTXCMeNv$Vun4(D0=NSg}Z3r6pAaGEZcRH+D(K1UxZ$j**=2$Fh3 z^i*n;ss)BfP=;s(S-d17b9^1p&|2UVLo9al_$dq(1r}Rvc9AaG0sLY~ zQ~?#yG7lfE2gMCg&4s!(GUHGHr%8%O zk^&Qfa!;s?IvjdnZ0M`2#gHI{)kP270ZvW>EM_E)6i%9OBjusYjLDWy(hNzC<6M#; zdK(|X**z4^&}N3DAA-V^5jc(eSFpe{UP%dZ&|oph`2Zn@d>EQ^Bjb<)k^%)o)#$hu zE*Dc8QZ+8bgHk7pL7NStC@?mw%`BMA0&cQ%G;Z>mY`D#6p>aXrY&O~os9M1^ao;KN z^?GC{?hF6({t88emBj^~nn$lUJtdeDQH8;3OjJY#Sf5x0L^PfS49Dx)&0@SBRv=)B z&*D>iV4ODW2axnhu^z{$l2;3J3MlkJSN)e+adYfC% zo|{Cc=f88tN7lD)nPRa#H|yuz+`PAjiejUj zaPGj-b8D*5dBfdpuAb|`E9#ZydC?hK;cw8d_HxKFdt$y?~C5ZoX$jew=f0YEARonHSz&0b(b@KP^}< zQ>S+@D^rok;q7~uUEEWBhG%= ze7Sb^`AvAoK4+aP=hFlD{L5qgqjiHPdQZ;1Y9?OUwe9;|`E>iDEdHu{@bfQkf44pR z>-Rg69k*IqaztG#L)#8-5vC5VrT%jQB^T;@#g~ zI^D7V*lpKeMOEE}9rmvFmUY*2GBcXDZT+J^!#(Y{wj&#UjW%~)!tah0+|M~M`}Lmg RwVnE}skFGvd8lY@>p!>ZYcc=; delta 305 zcmey)dyr{@WIZzj1A~Sxe=v~p4)6(a1=9MqmIe+sF3wh&KIYlJmf8MRJEHVKmEr;B4q#Vy;O(^*W649ttmB3rg`Kl}MV{#NrPgW{Ra z8?2(YuZ`?Iw(0&V!<>)x+XN8{d=LYddQcLd)Cc= z{pT0U(?6^Yuh(Q<$+@lO8JoO}VSi$4CleFPh38X3R8FS!uD$zgtyXOInX)9^jj{{- l-WK>JaW7Muq^3Es{*|N9*7{ie4M2x6c)I$ztaD0e0sy`Hj6eVY diff --git a/src/main/resources/assets/betterend/textures/block/virid_jadestone_furnace_side.png b/src/main/resources/assets/betterend/textures/block/virid_jadestone_furnace_side.png index 3bd81825c85cec184890dd6efcbd4be34ca5fa8e..ecf9569c344d51043b2a498a9281d618a72aae71 100644 GIT binary patch literal 1661 zcmbVNe{9rL9PbtkvV}1bgFh0i-2yYL*Y?`Gu64(<-3@lcn{zw&!)3x-`|hsp`h&LH z-OXr(Oae0q`|*d$0zphPN^nFBX1Xv96O0l=h!N2k(Kyfr5VJu9viN$tU4TGTn!LXE z`abXT{r&CMy4p1h^B&H_Fl=G4CQy&<B8Yi{3l>VqP>YFlt&X49maY89CUSLl0uu zyz@%9*=`O!DN4HP0k}YF310S9c*ZG7h;d+6t!(NYz72?=&S?-G$UFa;z~#zX^e@n_*p# z&jqS(PG#KhcLGy}mozDwtS79;Z@2>kz=l4;O}iPA=14aaW;`NSwvuK=nx4glbXkd{ zZovs*h80;(r1_hmC}m_|gMS6fk{HoV6(EBZ6+|IrXi);sx>5A&aot3Mk!oyOi%>`m zYL*Q&2?hf`0@>_R6j>A^oCibzPjWObkP(UFNTJMAMsh3w0sy=a0onTjUFviqJ9l6H zpZA|K6;xRue%Cxsy*Vi%)+iPVRw`2w4RAwd6<6?d7KlJ{vfD>UPFSH#WIii*?SWa^ zL<}O*JH>hyW9bn)0ZdpKMXvfUxkMr5DW?u+?VxToF@1JJ&CbD5BXE}44um$@9tJhk zxJ=Zc_C503YZ#W}4F)R1CEv95x2+wg3t!pGogZ&hp9#;qG){i}5PxR#i+%ZT8GB|9 z{-UnC-ak-qz#m-k2FpfYDpV>b|zn?tPLJsGy7_B}0!m9kC$t|Ddy3Vf>#q)n?`^}!Ue00*hFS4ZJO3THjT%PbQZ9CV$ZFTSVO~<3e%U?X&`&_8^ z^1$)W2fQEEcz#ZN?=?Sspnc8AwbqSgCrGViWL@L2qg9^M!v&N+BJNz|dHd9Xoz{}6 vBRTIbA8kJQ*NL2o;rDtDe)_}U*HiPaSbtVcPR~S~A4IUaHn6{H{ic5aN<%n0 delta 196 zcmey%bCq#|WIZzj1A~Sxe=v{|4e$wZ1=6yXj>-<6svbTX{{H%Lp(c5Wohy&I10~o? zg8YIR{)55N`ena?LK&Vejv*C{tOpwlSri$V4QD1_sy}?*ZCCwXS>DpB?Rzp(cKWwI zc=_&W^u56Mujl1lyJiu4YctzRu`JdYv*du?w%^ziANSp7*n3%2mizpj6V~=RZ{MYT sIVpaFi~s-t diff --git a/src/main/resources/assets/betterend/textures/block/virid_jadestone_furnace_top.png b/src/main/resources/assets/betterend/textures/block/virid_jadestone_furnace_top.png index e256c6a411d99a0159abb74a2af906ca00a3c475..c81182e21fb0e37b09ee79a08383a3571dc77188 100644 GIT binary patch literal 1652 zcmbVNe{2&~96!t=44jSuhCqay?^l1_jc$~7u9bDvt+E;d?t1syo^9`ryDROQ z5h8y`784ahG@!6RLNJs;1_6?i$gHa`;>T7Vb{7v?qvqTxUg^(Y!Z zZ5BH&P*xgsuolWrvb6PClqM+$K{^PE!AXiE?Ht3Rr3Zu3G%?C`c%LiDf;$%$Hw={{ zh)gD9$uJg0ixCvdvII#JG>t<9uJ_0WpT%W;S((8LbU~9;LsDeaWaJ}C+Hhe|)1nC} zwL&ZFB{xBb5m{a(C<|$tQ~-)X1*fL9WI?zn5FiOsKsI!Ur7Bo8t{93QR~|rJIlfB( zbZsC|k#S#LQmKjv-Duei%_uqKzGywvqXMD>=t^1>K+9&R<}%Y7mGfwTHxwyutq~SQNOZqNR9fu$1CsfKcTahF09jd6cB0LBUWprl3V2!1-m} z;AH{$y)F#eY>_09qgav_Xx@oCt+arPQL6)wL~L*yWdw$|vsS@LmG65MA#Fysd|&*Z z_t$C?tSmnH&^%_nnJK~fBpn8;r&JN0U{h(8l+Z#JaJ*nmm8g;7HQ0qeSNtXe(_EtgTo(AoVYx^t~RmwcGd0m z4f!hf+-t4a#>;=M-zbkwI1gRF-PO?)3=WNRe%1EQ|voSCKn0nILYXz_ilN6 zx^86O_=f9_@P>iql6$-{_L-w@L?N=b1pV-=SlS3(^WO+zUbcJZ7(eeib=qA$&bRJ*bagNH#G!nLv6~vbb>rso kd~WFCjWbh+kLLLmTQBr22z%(sLG!=hZ)x{_w7PrSKkl40UH||9 delta 199 zcmeyubAxe$WIZzj1A~Sxe=v{|4e$wZ1=6yXj>-<6svbTX{{H%Lp(c5Wohy&I10~o? zg8YIR{)55N`ena?LfM`!jv*C{tOpw#?-($!D26Rx^1p3u<&OW=)>5y&AKk?lbJYeDz}ggEPLL`yRf2 xqqaQ%_~c#b?`yw2h~NFR+$3bDzpL_P`IE{~8iI-W9YA{-JYD@<);T3K0RYdeSO)+A diff --git a/src/main/resources/assets/betterend/textures/block/virid_jadestone_lantern_bottom.png b/src/main/resources/assets/betterend/textures/block/virid_jadestone_lantern_bottom.png index 840741b458a54eca6fe460e295bce72065e2ea91..3e78f2dc0bca115a9b872ddde028d464be1bc4c7 100644 GIT binary patch literal 1523 zcmbVMTWB0r7@jmX#HJNXMXD%{Q^XcC_s#Ciq2rqFB;AEh49P-MQQFCwv%4pmnKRBz zva?YzDWX(-_Cfn3c?@bAC_)Pn6e$$ciVA{nUhqW^&|(cs2Yf$W?$&6Y@r*fAl`Lpi6g z1znKylCI=NSw)fyqErxNm6v27<$ zNHaQg-5X@uF)}zsQe}4aS~bM`GaDIW}`6C=r*0R4`Rd?Py_HpyEfd?L$;C4UXC@VC;aJCKr(7 zP{k#v^EE98c}-Py-c~dX&KI0Qu2AT|Hwj!yBin!P{LlAKhnQBD?cOm@T5oAefHIC~ zuv)!}m_^U`RxV~cSpaO9X1Bq?G_1(sddK*VJA?;8`eB*x4C_>^=a_J>t-YfiJIZZ0z2Csa-p@x^V5cZy)yur=Q*N#c=+<^#@FN<@GN|4o)5Y z{8&7?`XTd!8@|2w>z$X*Z=Ks*!})ubzZqI}U)3L8-}_eW;@a@JzenEqY-sa}_wfRA kK6wRybpIgxf%dDqk14(uJo6o1kkYnXnV2%)IdbasKPyh|M*si- delta 164 zcmey&y_Io-WIZzj1A~Sxe=v{|4e$wZ1=6yXj>-<6svbTX{{H%Lp(c5Wohy&I10~o? zg8YIR{)55N`ena?LLQzjjv*Dd=Jo~(F&MHqt7?9?|Fr7et#8}gBr7>KujcqZ^_RmE z52bwy(U~4c_}yNz#eL>=dBt3z%kgHr=FZuEvi1$UuWH2JXvytOW3-?BeXkYJPzFy| KKbLh*2~7a@A3V1J diff --git a/src/main/resources/assets/betterend/textures/block/virid_jadestone_lantern_side.png b/src/main/resources/assets/betterend/textures/block/virid_jadestone_lantern_side.png index 1c916e0a0b2ca0a2b54a0cf3c75103712bbefae7..9e3e91e5890f81eca543ddd18047f4bdd81711e4 100644 GIT binary patch literal 1573 zcmbVMTWl0n7@nncZ7~fXi6Q#HI2B{n**P<_w>e>`>rQ1ic572MQW6t8d*Y{$U5JJvA_Gmy<_6ZF3!c>BWiyJe-J(_g=n+3hjRt($^3#Ju|YW`n%oIgoSGxNK(T zT)cB`ERW`5d>qKtQPpG*B1k%(#`NaRUjsf-P+O9>t1XtWzdF@yg@|s=L=$8K9xf z<+?Vm>x*S|O?dvu9!jGfkn5to{H%k83G9&>7vYgT)Xl+wjRVsz)_vmU38{1vHQsTV zO{aszB-wj+nYKZy-p~~?Skry1auSe49z=Ob%!@G?P2LY=2tW&$BZgU=y#}Y`MH$L6 zl&*%-k}-5&|5vbqV3D|%P6?ZqUc!Q7mpHZ?MwliQ;!?xZHM!|UE(f!==j%4YSxx0A z=ZI+WZ1E7TrP#c?qGvmBItYSgcLLE(cZOk`4lb8YsJm`I{S%#T z-(&j{?t=9FpYy9<%MJZxuNe*<3IU>y#`Wbp!}q-)T-vcd`on`CZF=|P4A_v0 zKk>)QBjVE3-)9@_E8h)hheGVLZ!SS==()oFU(R1>q(Xht!in(sue}F*UV6KH_dQ$Z tm)_}r;k}=SHrDH}-Io1)lsO#x>rCa;nX|zl&yI{~?>{s({|_VE3Sj^M delta 170 zcmZ3=vzu{(WIZzj1A~Sxe=v{|4e$wZ1=6yXj>-<6svbTX{{H%Lp(c5Wohy&I10~o? zg8YIR{)55N`ena?LVlhujv*Dda{C#%4j6DSpFZ>RzxsKrWv`LC$0%b-a=U%@rH8S*DTCj_Wi+TvCjrKly#)P?BAyM)oH?XvnRjr@Sa@CxX5|? REp44$rjF6*2UngEe%LFfPg diff --git a/src/main/resources/assets/betterend/textures/block/virid_jadestone_lantern_top.png b/src/main/resources/assets/betterend/textures/block/virid_jadestone_lantern_top.png index a43f39814e77641cd850fecf38cb1d2049147376..2ceefd0df7b2d6439cf0dee7929cf94e083b1056 100644 GIT binary patch literal 1548 zcmbVMTWB0r7@lowjqL^mL8B2oPAOWN*}3g)jvaH^P29yy49P;b55>&RoZTI>GiRKc zWM@;c*`ydM6ns)F6@2i`qSivGT8Icjq4eTQv7%3X>5GUr)MB!p*~`$D7PSLs&h0zj zfB%n8PrcB;lF9E`s0UWUzxkB9>${ zJ}!Wi6yuYeB*ce+!0{=TOR>Dja6IIaP?SLTqlq*}FTLHmHIDu!lI3w@{J^|zDy_^U+u7gvsZj>8$;G_aCLQ#agcpH?Y zjIMg>zk+oQma${1#9+fzD~PqN3JpRx!VIoqhX^LBiES+u1?DZ+Q!NeUvocL=jv0my zr9?>-kPv4iUXL>=A)a8;8kb-sDU~jzxj0Iq@O>6*3qfRi@Ad!r{w2pCm8I71n3bx`T0X*{iD# z8m$ml{g+%~iSlevhaEfEJ56lg-BPnXIB5jIGVDNP6ZSAug0*4@iTn`0xVB17k&JiT(GwLbh>E^HTyo@*!lLAH$GdL8~f_f%iOVVOVqZ3wb#pAsGAS^*AG3O RITG~i{P delta 164 zcmeC-*~&OUvYwfNfk8u;KNv`f2Ka=y0%=)GM`Z_3RSzExe}DbBP?NmG&Xvd9ffDQ` zL4Lsu|G{8s{j%RcArDU%$B>F!bI%$IH8=<`IZBHC`=7%6bx(-qBEAO}bxTi%+Fwxf zJj=WC?Z%7TxlLk6WV4(7&hX9jh*%TN{CmYjSrst}l?%6i%n&|o$mlWUX1W*9PzFy| KKbLh*2~7ZxYdh}% diff --git a/src/main/resources/assets/betterend/textures/block/virid_jadestone_pillar_side.png b/src/main/resources/assets/betterend/textures/block/virid_jadestone_pillar_side.png index a56e2bfbb7bd8c57dbf668d1f4137a63b826717b..502ffa0ec1157d2b52ec157d605dc72b1fccc00f 100644 GIT binary patch literal 1509 zcmbVMU1%Id9N#1*G&O;u2&MWkY(Xk!Z@)L$p=+AnrslMpgyf*pABt#-B8o49UvE*cinfJ9)B043h!qu|N+}5X&=zO!V`)o^Z5L+e>o>pu z_kVq6>V=^lyLWILH&mFkXW6_n9ou`^|E;&H2Ac-L$s;kxJ@!O8dbsya?&7#@SH0qV zGVdIMnEE;7(h|uv{E(qJZr@lVM0k-TphPNOVDZan z#0CmQIVYtiwSX?paN$x^YYBI;NNU6o}Q=d+Or* znTR-6k#%PjH$UNwI+o5h@gZL?=P73Qi3 z$t95~FQ#?awnMzz#Ma$yHQR-=MvyME4#YND4B~UclPg zKlsTj%~$@qerfuH(9A=-rDxl*{utGBYk5V16!5f7tWqL*uVeiGyRYEZ0^4DVL$4#j=ywrz*z%Nz5K(q zUr+t^N$=%w`lI!{e&g1vv7W1r literal 204 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPF1f@+r*Np& z*5|*jW!Leur`2UV7;+zMYWysb;9+z?)m+@fZnx_H$LIRYw`|pRj@)@`?+Td({p@Pa V5=*CFS^ETJqo=E%%Q~loCIFb(H?IHy diff --git a/src/main/resources/assets/betterend/textures/block/virid_jadestone_pillar_top.png b/src/main/resources/assets/betterend/textures/block/virid_jadestone_pillar_top.png index 95a3f10ea588fc46db57b84d8f9a63421eaf677d..7879b95f239d3f5ce34faa7eb36aee09774db037 100644 GIT binary patch literal 1552 zcmbVMTWB0r7@pl$yKSvTqtYgzhv|b6otlz7rb6P9l>`;bh%*DVkvhvUL|3(>MTAxNJEZyYj&j3oKJ(clYap?&fgC8kzI( zuDP+IF*j|fCY!w%4AdbduyKGu-L5)5tZQtO7t(cj%(I{g38po6C=>`L^>L6R9tQo% z6laKv1k!3!ObM!_+zli_O!GpT7iCTmp^$>I3fdn_rFmuvPUP=z%c47ttptG!dA?Sw zC2Mk$cx7HxRh1VcUXnP9;QU!9Ky}XXw|5xw*f%`O4J_h-kP%IhnLuNyrY#d}H==d? zwwtKK_&RcVF)4&5HG!rP;oKRo+7xaYJg#CJJAqHJVuW=oBp`l;T!A{ezDNLdt*%Eh zE~|@eM&@oYp5wro_!yz7)%5V;ZNNR@b0FjY-%YN6|};P?S@3|z=-EVVgl zSte9PQz|J_h!b(Y%B3@kz#+p_xJ(91X-O7kA(QUB&l6)NjBMw<`9I%3=vlO~Q1z;L z!g>o+0*+Wd4c2VCB6i^?+pDStnppsm5oWi>8ev$m$+nNJtM)*PwpPKE^h&XAVSG{w zYRJPwW$LQ`l1n^Qo)7D=We0z$iOstUYPJKXjUZe`9f)qC9)=y-xIEgSUe@opo_4oS z3i+X8-)DyM^l!#3%YUqWbK=Cl=Z?Sd-Re8pfqfq(zF7VF+au)hrN7Vr*xk2q^kk#a zczxUQx!%P7wfJZvvH3<*9{svUn2+^txaUyp=Hc#zb&J>T%r;(KI5>FI$!y>LMe$Vp zaQwZ5wshdY+PQ6K=n=E$_n%g;dAk=Je(TRz!nFo}z3%0XU^(^**6ZI7@DEB9anYDy=B>FeF*-Cw>*VUZ)^xokVzwbsTTBmU8rXFga pdh?{-WOb84OjCF5B-Z}vv7kNz76N?|%}u#+#i46|{oH+q=aLjw%6cE!kz zlkxO3K*OdV>Nt=5HPfbOh8f;fv!OPD2%ASm!&13lKUw5hLsz-6P+CmeF;p^=Qx4iY zmC0#S6PluPyB=qUYk(4%h(NYxmMs_5RIbSj=-N9LIJOBP6Dl|231r99qihU2hzgEB7ztZqyR5UKn#O`!nQw-N^|rA$i{cKWzn6=l?btcAXKYW ze>LF8PEn8)MG-_)o1qoKqkRddj@#s)D5L4ute#^p|+Mms9Av6vT_ zD7$0KuykB?hi-a<;*cPflSNtL#UL+BIVl8!(Vb!dh++$u#=23c--c6iQUC-ZK)w}9 zQ$~jb{wrA5Kmj`@qy`%%EF!_SiX7W@BZ%QLcBo*gTA-;#It@~mOQ5BpR9xk#&3?ns zfeeF6J{%43(MU-0(h>3bycXm`AtkTLFd8U8rSm?HwTc(n&U^iTzJJy+Xl23jJ@a_= z=A{Hk8ZHf1yACq6XCw1(k43*fdTiyPHS50ct$BL6 zeC_D9opbx=dy2h7Z=Igo-v9aUSNq?+*z@3Z=Jaai!{m2A*q7#_k#8SJUFkWsKGk4$ z%h`SL*9O4qecNhV!1THIe%pA$c{s)GDP0H-j=%%GVeb>p=WpV$)L9dmk5}EkIlP}Nw1M#;BW&i*H literal 236 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFkiL``tv;EkB%ayJ1PDZBl9@S|?|1or zw=?r|2eyxnjY^WVy7Y9}2W2?VIj|m@H8aYP8`6mc04d6&ZN0B_E!2pc58p(<`k+^w7#& zg{&-*f-6r?fqfk$6!?^5(D7SAj5?Ow(~HD9IaX!RgYYFwo=FUXsxuFYETUjClU0aj z>L6FhXjxd$%?Y4GEvLeqsu>E@5X>T@00xgNtVM1eE!eLQY>AyEH#rZHs<}9i()*2>ie&{kN7L&x}!Jflj z;Iel7>RmF_#++KR4s}g|rlM;VZ4#OJacCe2`#6WWUcGxCu29hoWaJPu?}3VvaWTjL z3U&#qv&hGSu;=3jRl}emgEWk&$XYBChJ|ZJ&kM&v|LFr==cLkf+_dNyA(-J!hA$a0d|p}hM)<===r(OJ0l$a<1~OG*NjyjUcw zJLrf*^u%D*@<6W&5GF}=TQW(~N(F=dvG>Rk=*zd8R49E|uKSpn)p;97bfzIf^X$QPQ=gyu`m41a?%#j@zVpbA3;EL4+^)^dV^^v_{rJwgFFss