From eb1ae97c504233b0e62fb3c8ff7c364050208109 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Thu, 24 Dec 2020 21:02:16 +0300 Subject: [PATCH] Plants rebalance, umbrella tree clusters --- .../blocks/BlockTwistedUmbrellaMoss.java | 2 +- .../blocks/BlockTwistedUmbrellaMossTall.java | 2 +- .../betterend/blocks/BlockUmbrellaMoss.java | 2 +- .../blocks/BlockUmbrellaMossTall.java | 2 +- .../blocks/BlockUmbrellaTreeCluster.java | 26 ++++++++++++ .../blocks/BlockUmbrellaTreeClusterEmpty.java | 39 ++++++++++++++++++ .../java/ru/betterend/registry/EndBlocks.java | 7 ++++ .../ru/betterend/registry/EndFeatures.java | 2 +- .../world/biome/BiomeUmbrellaJungle.java | 3 +- .../features/trees/UmbrellaTreeFeature.java | 14 ++++--- .../betterend/blockstates/jungle_moss.json | 21 ++++++++++ .../blockstates/jungle_moss_path.json | 10 +++++ .../betterend/models/block/jungle_moss.json | 12 ++++++ .../models/block/jungle_moss_path.json | 7 ++++ .../betterend/models/item/jungle_moss.json | 3 ++ .../models/item/jungle_moss_path.json | 3 ++ .../textures/block/jungle_moss_path_top.png | Bin 0 -> 1793 bytes .../textures/block/jungle_moss_side.png | Bin 0 -> 320 bytes .../textures/block/jungle_moss_top.png | Bin 0 -> 266 bytes .../textures/block/umbrella_tree_cluster.png | Bin 0 -> 281 bytes .../block/umbrella_tree_cluster_empty.png | Bin 0 -> 280 bytes 21 files changed, 142 insertions(+), 13 deletions(-) create mode 100644 src/main/java/ru/betterend/blocks/BlockUmbrellaTreeCluster.java create mode 100644 src/main/java/ru/betterend/blocks/BlockUmbrellaTreeClusterEmpty.java create mode 100644 src/main/resources/assets/betterend/blockstates/jungle_moss.json create mode 100644 src/main/resources/assets/betterend/blockstates/jungle_moss_path.json create mode 100644 src/main/resources/assets/betterend/models/block/jungle_moss.json create mode 100644 src/main/resources/assets/betterend/models/block/jungle_moss_path.json create mode 100644 src/main/resources/assets/betterend/models/item/jungle_moss.json create mode 100644 src/main/resources/assets/betterend/models/item/jungle_moss_path.json create mode 100644 src/main/resources/assets/betterend/textures/block/jungle_moss_path_top.png create mode 100644 src/main/resources/assets/betterend/textures/block/jungle_moss_side.png create mode 100644 src/main/resources/assets/betterend/textures/block/jungle_moss_top.png create mode 100644 src/main/resources/assets/betterend/textures/block/umbrella_tree_cluster.png create mode 100644 src/main/resources/assets/betterend/textures/block/umbrella_tree_cluster_empty.png diff --git a/src/main/java/ru/betterend/blocks/BlockTwistedUmbrellaMoss.java b/src/main/java/ru/betterend/blocks/BlockTwistedUmbrellaMoss.java index 5a67a22d..b5e9ce91 100644 --- a/src/main/java/ru/betterend/blocks/BlockTwistedUmbrellaMoss.java +++ b/src/main/java/ru/betterend/blocks/BlockTwistedUmbrellaMoss.java @@ -21,7 +21,7 @@ public class BlockTwistedUmbrellaMoss extends BlockPlant { @Override protected boolean isTerrain(BlockState state) { - return state.getBlock() == EndBlocks.END_MOSS || state.getBlock() == EndBlocks.END_MYCELIUM; + return state.isOf(EndBlocks.END_MOSS) || state.isOf(EndBlocks.END_MYCELIUM) || state.isOf(EndBlocks.JUNGLE_MOSS); } @Environment(EnvType.CLIENT) diff --git a/src/main/java/ru/betterend/blocks/BlockTwistedUmbrellaMossTall.java b/src/main/java/ru/betterend/blocks/BlockTwistedUmbrellaMossTall.java index ac098c6f..c9657bb6 100644 --- a/src/main/java/ru/betterend/blocks/BlockTwistedUmbrellaMossTall.java +++ b/src/main/java/ru/betterend/blocks/BlockTwistedUmbrellaMossTall.java @@ -23,6 +23,6 @@ public class BlockTwistedUmbrellaMossTall extends BlockDoublePlant { @Override protected boolean isTerrain(BlockState state) { - return state.getBlock() == EndBlocks.END_MOSS || state.getBlock() == EndBlocks.END_MYCELIUM; + return state.isOf(EndBlocks.END_MOSS) || state.isOf(EndBlocks.END_MYCELIUM) || state.isOf(EndBlocks.JUNGLE_MOSS); } } diff --git a/src/main/java/ru/betterend/blocks/BlockUmbrellaMoss.java b/src/main/java/ru/betterend/blocks/BlockUmbrellaMoss.java index f70b049c..2edb374a 100644 --- a/src/main/java/ru/betterend/blocks/BlockUmbrellaMoss.java +++ b/src/main/java/ru/betterend/blocks/BlockUmbrellaMoss.java @@ -21,7 +21,7 @@ public class BlockUmbrellaMoss extends BlockPlant { @Override protected boolean isTerrain(BlockState state) { - return state.getBlock() == EndBlocks.END_MOSS || state.getBlock() == EndBlocks.END_MYCELIUM; + return state.isOf(EndBlocks.END_MOSS) || state.isOf(EndBlocks.END_MYCELIUM) || state.isOf(EndBlocks.JUNGLE_MOSS); } @Environment(EnvType.CLIENT) diff --git a/src/main/java/ru/betterend/blocks/BlockUmbrellaMossTall.java b/src/main/java/ru/betterend/blocks/BlockUmbrellaMossTall.java index 1529257a..85333686 100644 --- a/src/main/java/ru/betterend/blocks/BlockUmbrellaMossTall.java +++ b/src/main/java/ru/betterend/blocks/BlockUmbrellaMossTall.java @@ -23,6 +23,6 @@ public class BlockUmbrellaMossTall extends BlockDoublePlant { @Override protected boolean isTerrain(BlockState state) { - return state.getBlock() == EndBlocks.END_MOSS || state.getBlock() == EndBlocks.END_MYCELIUM; + return state.isOf(EndBlocks.END_MOSS) || state.isOf(EndBlocks.END_MYCELIUM) || state.isOf(EndBlocks.JUNGLE_MOSS); } } diff --git a/src/main/java/ru/betterend/blocks/BlockUmbrellaTreeCluster.java b/src/main/java/ru/betterend/blocks/BlockUmbrellaTreeCluster.java new file mode 100644 index 00000000..f2ce5a91 --- /dev/null +++ b/src/main/java/ru/betterend/blocks/BlockUmbrellaTreeCluster.java @@ -0,0 +1,26 @@ +package ru.betterend.blocks; + +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.block.MaterialColor; +import net.minecraft.state.StateManager; +import net.minecraft.state.property.BooleanProperty; +import ru.betterend.blocks.basis.BlockBase; + +public class BlockUmbrellaTreeCluster extends BlockBase { + public static final BooleanProperty NATURAL = BooleanProperty.of("natural"); + + public BlockUmbrellaTreeCluster() { + super(FabricBlockSettings.copyOf(Blocks.NETHER_WART_BLOCK) + .materialColor(MaterialColor.PURPLE) + .luminance(15)); + setDefaultState(stateManager.getDefaultState().with(NATURAL, false)); + } + + @Override + protected void appendProperties(StateManager.Builder stateManager) { + stateManager.add(NATURAL); + } +} diff --git a/src/main/java/ru/betterend/blocks/BlockUmbrellaTreeClusterEmpty.java b/src/main/java/ru/betterend/blocks/BlockUmbrellaTreeClusterEmpty.java new file mode 100644 index 00000000..a9bac8c5 --- /dev/null +++ b/src/main/java/ru/betterend/blocks/BlockUmbrellaTreeClusterEmpty.java @@ -0,0 +1,39 @@ +package ru.betterend.blocks; + +import java.util.Random; + +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.block.MaterialColor; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.state.StateManager; +import net.minecraft.state.property.BooleanProperty; +import net.minecraft.util.math.BlockPos; +import ru.betterend.blocks.basis.BlockBase; +import ru.betterend.registry.EndBlocks; +import ru.betterend.util.BlocksHelper; + +public class BlockUmbrellaTreeClusterEmpty extends BlockBase { + public static final BooleanProperty NATURAL = BooleanProperty.of("natural"); + + public BlockUmbrellaTreeClusterEmpty() { + super(FabricBlockSettings.copyOf(Blocks.NETHER_WART_BLOCK) + .materialColor(MaterialColor.PURPLE) + .ticksRandomly()); + setDefaultState(stateManager.getDefaultState().with(NATURAL, false)); + } + + @Override + protected void appendProperties(StateManager.Builder stateManager) { + stateManager.add(NATURAL); + } + + @Override + public void scheduledTick(BlockState state, ServerWorld world, BlockPos pos, Random random) { + if (state.get(NATURAL) && random.nextInt(16) == 0) { + BlocksHelper.setWithUpdate(world, pos, EndBlocks.UMBRELLA_TREE_CLUSTER.getDefaultState().with(BlockUmbrellaTreeCluster.NATURAL, true)); + } + } +} diff --git a/src/main/java/ru/betterend/registry/EndBlocks.java b/src/main/java/ru/betterend/registry/EndBlocks.java index 300656b9..714062d3 100644 --- a/src/main/java/ru/betterend/registry/EndBlocks.java +++ b/src/main/java/ru/betterend/registry/EndBlocks.java @@ -67,6 +67,8 @@ import ru.betterend.blocks.BlockTwistedUmbrellaMoss; import ru.betterend.blocks.BlockTwistedUmbrellaMossTall; import ru.betterend.blocks.BlockUmbrellaMoss; import ru.betterend.blocks.BlockUmbrellaMossTall; +import ru.betterend.blocks.BlockUmbrellaTreeCluster; +import ru.betterend.blocks.BlockUmbrellaTreeClusterEmpty; import ru.betterend.blocks.BlockUmbrellaTreeMembrane; import ru.betterend.blocks.BlockVentBubbleColumn; import ru.betterend.blocks.EndPortalBlock; @@ -105,6 +107,7 @@ public class EndBlocks { public static final Block SHADOW_GRASS = registerBlock("shadow_grass", new BlockShadowGrass()); public static final Block PINK_MOSS = registerBlock("pink_moss", new BlockTerrain(MaterialColor.PINK)); public static final Block AMBER_MOSS = registerBlock("amber_moss", new BlockTerrain(MaterialColor.ORANGE)); + public static final Block JUNGLE_MOSS = registerBlock("jungle_moss", new BlockTerrain(MaterialColor.ORANGE)); // Roads // public static final Block END_MYCELIUM_PATH = registerBlock("end_mycelium_path", new BlockPath(END_MYCELIUM)); @@ -115,6 +118,7 @@ public class EndBlocks { public static final Block SHADOW_GRASS_PATH = registerBlock("shadow_grass_path", new BlockPath(SHADOW_GRASS)); public static final Block PINK_MOSS_PATH = registerBlock("pink_moss_path", new BlockPath(PINK_MOSS)); public static final Block AMBER_MOSS_PATH = registerBlock("amber_moss_path", new BlockPath(AMBER_MOSS)); + public static final Block JUNGLE_MOSS_PATH = registerBlock("jungle_moss_path", new BlockPath(JUNGLE_MOSS)); // Rocks // public static final StoneMaterial FLAVOLITE = new StoneMaterial("flavolite", MaterialColor.SAND); @@ -238,6 +242,9 @@ public class EndBlocks { // Crops // public static final Block SHADOW_BERRY = registerBlock("shadow_berry", new BlockShadowBerry()); + public static final Block UMBRELLA_TREE_CLUSTER = registerBlock("umbrella_tree_cluster", new BlockUmbrellaTreeCluster()); + public static final Block UMBRELLA_TREE_CLUSTER_EMPTY = registerBlock("umbrella_tree_cluster_empty", new BlockUmbrellaTreeClusterEmpty()); + // Vines // public static final Block DENSE_VINE = registerBlock("dense_vine", new BlockVine(15, true)); public static final Block TWISTED_VINE = registerBlock("twisted_vine", new BlockVine()); diff --git a/src/main/java/ru/betterend/registry/EndFeatures.java b/src/main/java/ru/betterend/registry/EndFeatures.java index 6526557d..744daf5a 100644 --- a/src/main/java/ru/betterend/registry/EndFeatures.java +++ b/src/main/java/ru/betterend/registry/EndFeatures.java @@ -79,7 +79,7 @@ public class EndFeatures { public static final EndFeature AMBER_GRASS = new EndFeature("amber_grass", new SinglePlantFeature(EndBlocks.AMBER_GRASS, 6), 9); public static final EndFeature LANCELEAF = new EndFeature("lanceleaf", new LanceleafFeature(), 3); public static final EndFeature GLOW_PILLAR = new EndFeature("glow_pillar", new GlowPillarFeature(), 1); - public static final EndFeature TWISTED_UMBRELLA_MOSS = new EndFeature("twisted_umbrella_moss", new DoublePlantFeature(EndBlocks.TWISTED_UMBRELLA_MOSS, EndBlocks.TWISTED_UMBRELLA_MOSS_TALL, 9), 6); + public static final EndFeature TWISTED_UMBRELLA_MOSS = new EndFeature("twisted_umbrella_moss", new DoublePlantFeature(EndBlocks.TWISTED_UMBRELLA_MOSS, EndBlocks.TWISTED_UMBRELLA_MOSS_TALL, 6), 5); // Vines // public static final EndFeature DENSE_VINE = new EndFeature("dense_vine", new VineFeature(EndBlocks.DENSE_VINE, 24), 3); diff --git a/src/main/java/ru/betterend/world/biome/BiomeUmbrellaJungle.java b/src/main/java/ru/betterend/world/biome/BiomeUmbrellaJungle.java index e163b0bf..9e000fc5 100644 --- a/src/main/java/ru/betterend/world/biome/BiomeUmbrellaJungle.java +++ b/src/main/java/ru/betterend/world/biome/BiomeUmbrellaJungle.java @@ -10,10 +10,9 @@ public class BiomeUmbrellaJungle extends EndBiome { .setWaterAndFogColor(119, 198, 253) .setFoliageColor(27, 183, 194) .setFogDensity(2.3F) - .setSurface(EndBlocks.END_MOSS) + .setSurface(EndBlocks.JUNGLE_MOSS) .addFeature(EndFeatures.UMBRELLA_TREE) .addFeature(EndFeatures.TWISTED_UMBRELLA_MOSS) - .addFeature(EndFeatures.UMBRELLA_MOSS) .addFeature(EndFeatures.END_LAKE)); } } \ No newline at end of file diff --git a/src/main/java/ru/betterend/world/features/trees/UmbrellaTreeFeature.java b/src/main/java/ru/betterend/world/features/trees/UmbrellaTreeFeature.java index bb6dda94..bc137eb7 100644 --- a/src/main/java/ru/betterend/world/features/trees/UmbrellaTreeFeature.java +++ b/src/main/java/ru/betterend/world/features/trees/UmbrellaTreeFeature.java @@ -15,6 +15,7 @@ import net.minecraft.util.math.MathHelper; import net.minecraft.world.StructureWorldAccess; import net.minecraft.world.gen.chunk.ChunkGenerator; import net.minecraft.world.gen.feature.DefaultFeatureConfig; +import ru.betterend.blocks.BlockUmbrellaTreeCluster; import ru.betterend.blocks.BlockUmbrellaTreeMembrane; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndTags; @@ -44,7 +45,7 @@ public class UmbrellaTreeFeature extends DefaultFeature { BlockState wood = EndBlocks.UMBRELLA_TREE.bark.getDefaultState(); BlockState membrane = EndBlocks.UMBRELLA_TREE_MEMBRANE.getDefaultState().with(BlockUmbrellaTreeMembrane.COLOR, 1); BlockState center = EndBlocks.UMBRELLA_TREE_MEMBRANE.getDefaultState().with(BlockUmbrellaTreeMembrane.COLOR, 0); - BlockState fruit = EndBlocks.GLOWING_PILLAR_LUMINOPHOR.getDefaultState(); + BlockState fruit = EndBlocks.UMBRELLA_TREE_CLUSTER.getDefaultState().with(BlockUmbrellaTreeCluster.NATURAL, true); float size = MHelper.randRange(10, 20, random); int count = (int) (size * 0.15F); @@ -55,7 +56,7 @@ public class UmbrellaTreeFeature extends DefaultFeature { float scale = 1; if (config != null) { - scale = MHelper.randRange(1F, 2F, random); + scale = MHelper.randRange(1F, 1.7F, random); } for (int i = 0; i < count; i++) { @@ -68,7 +69,8 @@ public class UmbrellaTreeFeature extends DefaultFeature { SplineHelper.offsetParts(spline, random, 0.5F, 0, 0.5F); if (SplineHelper.canGenerate(spline, pos, world, REPLACE)) { - SDF branch = SplineHelper.buildSDF(spline, 1.2F * scale, 0.8F * scale, (bpos) -> { + float rScale = (scale - 1) * 0.4F + 1; + SDF branch = SplineHelper.buildSDF(spline, 1.2F * rScale, 0.8F * rScale, (bpos) -> { return wood; }); @@ -118,11 +120,11 @@ public class UmbrellaTreeFeature extends DefaultFeature { } return info.getState(); }).fillRecursive(world, pos); - makeRoots(world, pos.add(0, 2, 0), (size * 0.3F + 3) * scale, random, wood); + makeRoots(world, pos, (size * 0.5F + 3) * scale, random, wood); for (Center c: centers) { if (!world.getBlockState(new BlockPos(c.px, c.py, c.pz)).isAir()) { - count = random.nextInt(4); + count = MHelper.floor(MHelper.randRange(1F, 5F, random) * scale); float startAngle = random.nextFloat() * MHelper.PI2; for (int i = 0; i < count; i++) { float angle = (float) i / count * MHelper.PI2 + startAngle; @@ -175,7 +177,7 @@ public class UmbrellaTreeFeature extends DefaultFeature { private void makeFruits(StructureWorldAccess world, double px, double py, double pz, Random random, BlockState fruit, float scale) { Mutable mut = new Mutable(); - int length = MHelper.floor(MHelper.randRange(1F, 3F, random) * scale + 0.5F); + int length = MHelper.floor(MHelper.randRange(1F, 5F, random) * scale + 0.5F); for (int i = 0; i < length; i++) { mut.setY(MHelper.floor(py - i)); //mut.setX(MHelper.floor(px)); diff --git a/src/main/resources/assets/betterend/blockstates/jungle_moss.json b/src/main/resources/assets/betterend/blockstates/jungle_moss.json new file mode 100644 index 00000000..f037553e --- /dev/null +++ b/src/main/resources/assets/betterend/blockstates/jungle_moss.json @@ -0,0 +1,21 @@ +{ + "variants": { + "": [ + { + "model": "betterend:block/jungle_moss" + }, + { + "model": "betterend:block/jungle_moss", + "y": 90 + }, + { + "model": "betterend:block/jungle_moss", + "y": 180 + }, + { + "model": "betterend:block/jungle_moss", + "y": 270 + } + ] + } +} diff --git a/src/main/resources/assets/betterend/blockstates/jungle_moss_path.json b/src/main/resources/assets/betterend/blockstates/jungle_moss_path.json new file mode 100644 index 00000000..7a5f4580 --- /dev/null +++ b/src/main/resources/assets/betterend/blockstates/jungle_moss_path.json @@ -0,0 +1,10 @@ +{ + "variants": { + "": [ + { "model": "betterend:block/jungle_moss_path" }, + { "model": "betterend:block/jungle_moss_path", "y": 90 }, + { "model": "betterend:block/jungle_moss_path", "y": 180 }, + { "model": "betterend:block/jungle_moss_path", "y": 270 } + ] + } +} diff --git a/src/main/resources/assets/betterend/models/block/jungle_moss.json b/src/main/resources/assets/betterend/models/block/jungle_moss.json new file mode 100644 index 00000000..1c9272ba --- /dev/null +++ b/src/main/resources/assets/betterend/models/block/jungle_moss.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "down": "block/end_stone", + "east": "betterend:block/jungle_moss_side", + "north": "betterend:block/jungle_moss_side", + "particle": "betterend:block/jungle_moss_side", + "south": "betterend:block/jungle_moss_side", + "up": "betterend:block/jungle_moss_top", + "west": "betterend:block/jungle_moss_side" + } +} diff --git a/src/main/resources/assets/betterend/models/block/jungle_moss_path.json b/src/main/resources/assets/betterend/models/block/jungle_moss_path.json new file mode 100644 index 00000000..b9bdda5c --- /dev/null +++ b/src/main/resources/assets/betterend/models/block/jungle_moss_path.json @@ -0,0 +1,7 @@ +{ "parent": "betterend:block/path", + "textures": { + "top": "betterend:block/jungle_moss_path_top", + "side": "betterend:block/jungle_moss_side", + "bottom": "block/end_stone" + } +} diff --git a/src/main/resources/assets/betterend/models/item/jungle_moss.json b/src/main/resources/assets/betterend/models/item/jungle_moss.json new file mode 100644 index 00000000..321d91e6 --- /dev/null +++ b/src/main/resources/assets/betterend/models/item/jungle_moss.json @@ -0,0 +1,3 @@ +{ + "parent": "betterend:block/jungle_moss" +} diff --git a/src/main/resources/assets/betterend/models/item/jungle_moss_path.json b/src/main/resources/assets/betterend/models/item/jungle_moss_path.json new file mode 100644 index 00000000..a061d63b --- /dev/null +++ b/src/main/resources/assets/betterend/models/item/jungle_moss_path.json @@ -0,0 +1,3 @@ +{ + "parent": "betterend:block/jungle_moss_path" +} diff --git a/src/main/resources/assets/betterend/textures/block/jungle_moss_path_top.png b/src/main/resources/assets/betterend/textures/block/jungle_moss_path_top.png new file mode 100644 index 0000000000000000000000000000000000000000..2eda44229503196b09622385717862f6498cf0df GIT binary patch literal 1793 zcmbVNZD`zN9KRN(-K0bIX-sIdl)r^Oy5I^b4l&MpZAq6cfIESd{D2n}{^JUX1SXaMn`sCj1q?^TqBu|px z^ZWh&FZth7!$bG9Z`!sg6biMc29jxVy*)VETFH58IxmyUMrUBZ7Yc2j4~~}SyEoqv z3T^n*%8dG>`k)4IF>F9=qHv|?5OgTi(_3*2Fot}}L^;cj(Z8OaqbUo<=zS5L)13s$ zTLY6W+B-Rv0h41ug>>&-R8K`C1V!WtGpUn2aj2rszUs+7#$A;sZo8H zN?;dJk+94FUJ@up4f8Um3eql0;CO}Q6qXkmj@LL@6IH7IqluaevsyZNcU_Cz#pt~6 zI~vQD%jIxc3}ZLP@~Wz`oWKeKLlBHNVf#jfvAwPaLlSwwwH)8VHWe@$CNB9gnmDb6 zP;{EKwpULRNf=u(9F`ArK}b~~1WlY%atl>)2v}4=MP&OP!SYS4lgB>x^7sbS&DYln zkksmWQ)5jp#bQ&!^ZUn181;m#iS{xR4r0^D!zCA>{&8ZnD~QI?5-u`)>}D`7GzvA` zuuLTqL1CiQ&V7~*aoM|b)gF{Id=#SvPT&|`U<4_{s~RV165q{<8pqY3I)+wuVoj*3 zMU?BHq-&tz8~+K0K+9scXpoq#qLD+aW9Mk9nMo~y3)m&X#GP1mq3c@8_I$$zD3y%S zBV;$KodX`gQPG~WU7n+I5{fGFe+vF#{MJ*rJ%UM{#u_y3<$?Rs-%$> zMU09}RN(=GL`h`SC}%QUR8~|IMzTCK8f^Eu7WveS!fMvQ6(o!b&jT6BS;iy_MwX>0 zV=7Q2Cl#0g2@>RB(9qQ$(FQD!RBxjGiR?uO>#KrARog-{K+x_n8U%Glkgh+r*2u@Y zl>6>VEv6?(4|`dBe^j zGC^57h=&bkO|3NSzpGY#w`wjm;AGeZ%jT3NH_bVXY(njlDZF*Q=Mgf&zf2|LnVr+6 zbo}T%*CxIYdH11Dt{u4c7X`2M?Ma{8_2lf!XZZ1Ne^_~Nd@$}b+>E~z1cHBQ3{7I$yhmx=FIq=xu0$Eg% literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/betterend/textures/block/jungle_moss_side.png b/src/main/resources/assets/betterend/textures/block/jungle_moss_side.png new file mode 100644 index 0000000000000000000000000000000000000000..1bb0d8c130bde222b4f614ccc435e9f0dde84f91 GIT binary patch literal 320 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPF{vJJ9+1UZ;1OBOz`%DHgc*`7%f%%LK6hapczP3a+9`=w0{OPMDyF|P>zDR<)_?|12Uk4|jwDSFnZyF;9f zk8$CY2Q`TuGd6eohj+EhuYLT$^Wu-6-RoX4_+Bb|5~u%BH0XYp*}*Si&Y9k+**|A{dnoo!P(hfddpUEmQhqoz4 zqG((36t2U9YkpWbJ?FM#dBd%9+vAtTn0uz-FGlDm$Me!ke%=^x^wZ=Z^nxmp9ahc znESd))>)=IR=(L>+H11ml_koqGh1h*xy#9S@(RT}$2eXupUlI$&RtkqVeRs;0E3-X tY)gcX2D-iZ{%ILY_|Fr2!WY#C|Kh)BENJzFO?ExV#h$KyF6*2UngDM2Ss(xa literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/betterend/textures/block/umbrella_tree_cluster_empty.png b/src/main/resources/assets/betterend/textures/block/umbrella_tree_cluster_empty.png new file mode 100644 index 0000000000000000000000000000000000000000..958ce8981326c9fa6a3eec2a9ef07d6d98e3c73e GIT binary patch literal 280 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPF~aSV~TEPLi4=Me)Qmx~t@-wU0dU{+?Rr?ArDkVN