From 5ee7a94ef65bb44f78e96edcb220fda96f0b3705 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Thu, 26 Nov 2020 15:16:53 +0300 Subject: [PATCH] Teneanea improvements and leaves --- .../betterend/blocks/AuroraCrystalBlock.java | 46 ++++--- .../betterend/blocks/BlockBlueVineSeed.java | 6 +- .../betterend/blocks/BlockTenaneaFlowers.java | 60 +++++++++ .../{BlockGlowingFur.java => BlockFur.java} | 18 ++- .../blocks/basis/BlockWallMushroom.java | 8 ++ .../java/ru/betterend/registry/EndBlocks.java | 12 +- .../java/ru/betterend/util/BlocksHelper.java | 4 +- src/main/java/ru/betterend/util/MHelper.java | 6 + .../trees/MossyGlowshroomFeature.java | 6 +- .../world/features/trees/TenaneaFeature.java | 39 +++++- .../StructureGiantMossyGlowshroom.java | 6 +- .../blockstates/tenanea_outer_leaves.json | 10 ++ .../cross_no_distortion_inverted_tinted.json | 29 +++++ .../block/cross_no_distortion_tinted.json | 29 +++++ .../block/tenanea_flowers_bottom_1.json | 2 +- .../block/tenanea_flowers_bottom_2.json | 2 +- .../block/tenanea_flowers_middle_1.json | 2 +- .../block/tenanea_flowers_middle_2.json | 2 +- .../models/block/tenanea_flowers_top_1.json | 55 +++++++- .../models/block/tenanea_flowers_top_2.json | 55 +++++++- .../models/block/tenanea_outer_leaves.json | 120 ++++++++++++++++++ .../models/item/tenanea_outer_leaves.json | 6 + .../textures/block/tenanea_flowers.png | Bin 2321 -> 2182 bytes .../textures/block/tenanea_flowers_bottom.png | Bin 2254 -> 2215 bytes .../textures/block/tenanea_flowers_top.png | Bin 2540 -> 2382 bytes .../block/tenanea_flowers_top_stem.png | Bin 0 -> 2099 bytes .../textures/block/tenanea_leaves.png | Bin 2141 -> 2316 bytes .../textures/block/tenanea_outer_leaves.png | Bin 0 -> 1973 bytes 28 files changed, 469 insertions(+), 54 deletions(-) create mode 100644 src/main/java/ru/betterend/blocks/BlockTenaneaFlowers.java rename src/main/java/ru/betterend/blocks/basis/{BlockGlowingFur.java => BlockFur.java} (86%) create mode 100644 src/main/resources/assets/betterend/blockstates/tenanea_outer_leaves.json create mode 100644 src/main/resources/assets/betterend/models/block/cross_no_distortion_inverted_tinted.json create mode 100644 src/main/resources/assets/betterend/models/block/cross_no_distortion_tinted.json create mode 100644 src/main/resources/assets/betterend/models/block/tenanea_outer_leaves.json create mode 100644 src/main/resources/assets/betterend/models/item/tenanea_outer_leaves.json create mode 100644 src/main/resources/assets/betterend/textures/block/tenanea_flowers_top_stem.png create mode 100644 src/main/resources/assets/betterend/textures/block/tenanea_outer_leaves.png diff --git a/src/main/java/ru/betterend/blocks/AuroraCrystalBlock.java b/src/main/java/ru/betterend/blocks/AuroraCrystalBlock.java index ba5edf0c..d8b08fa2 100644 --- a/src/main/java/ru/betterend/blocks/AuroraCrystalBlock.java +++ b/src/main/java/ru/betterend/blocks/AuroraCrystalBlock.java @@ -29,6 +29,8 @@ public class AuroraCrystalBlock extends AbstractGlassBlock implements IRenderTyp public static final Vec3i[] COLORS; private static final int MIN_DROP = 1; private static final int MAX_DROP = 4; + private static final BlockColorProvider BLOCK_PROVIDER; + private static final ItemColorProvider ITEM_PROVIDER; public AuroraCrystalBlock() { super(FabricBlockSettings.of(Material.GLASS) @@ -43,30 +45,12 @@ public class AuroraCrystalBlock extends AbstractGlassBlock implements IRenderTyp @Override public BlockColorProvider getProvider() { - return (state, world, pos, tintIndex) -> { - long i = (long) pos.getX() + (long) pos.getY() + (long) pos.getZ(); - double delta = i * 0.1; - int index = MHelper.floor(delta); - int index2 = (index + 1) & 3; - delta -= index; - index &= 3; - - Vec3i color1 = COLORS[index]; - Vec3i color2 = COLORS[index2]; - - int r = MHelper.floor(MathHelper.lerp(delta, color1.getX(), color2.getX())); - int g = MHelper.floor(MathHelper.lerp(delta, color1.getY(), color2.getY())); - int b = MHelper.floor(MathHelper.lerp(delta, color1.getZ(), color2.getZ())); - - return MHelper.color(r, g, b); - }; + return BLOCK_PROVIDER; } @Override public ItemColorProvider getItemProvider() { - return (stack, tintIndex) -> { - return MHelper.color(COLORS[3].getX(), COLORS[3].getY(), COLORS[3].getZ()); - }; + return ITEM_PROVIDER; } @Override @@ -106,5 +90,27 @@ public class AuroraCrystalBlock extends AbstractGlassBlock implements IRenderTyp new Vec3i(120, 255, 168), new Vec3i(243, 58, 255) }; + + BLOCK_PROVIDER = (state, world, pos, tintIndex) -> { + long i = (long) pos.getX() + (long) pos.getY() + (long) pos.getZ(); + double delta = i * 0.1; + int index = MHelper.floor(delta); + int index2 = (index + 1) & 3; + delta -= index; + index &= 3; + + Vec3i color1 = COLORS[index]; + Vec3i color2 = COLORS[index2]; + + int r = MHelper.floor(MathHelper.lerp(delta, color1.getX(), color2.getX())); + int g = MHelper.floor(MathHelper.lerp(delta, color1.getY(), color2.getY())); + int b = MHelper.floor(MathHelper.lerp(delta, color1.getZ(), color2.getZ())); + + return MHelper.color(r, g, b); + }; + + ITEM_PROVIDER = (stack, tintIndex) -> { + return MHelper.color(COLORS[3].getX(), COLORS[3].getY(), COLORS[3].getZ()); + }; } } diff --git a/src/main/java/ru/betterend/blocks/BlockBlueVineSeed.java b/src/main/java/ru/betterend/blocks/BlockBlueVineSeed.java index 3c7ae9d2..feaedc89 100644 --- a/src/main/java/ru/betterend/blocks/BlockBlueVineSeed.java +++ b/src/main/java/ru/betterend/blocks/BlockBlueVineSeed.java @@ -7,7 +7,7 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Direction; import net.minecraft.world.StructureWorldAccess; import ru.betterend.blocks.BlockProperties.TripleShape; -import ru.betterend.blocks.basis.BlockGlowingFur; +import ru.betterend.blocks.basis.BlockFur; import ru.betterend.blocks.basis.BlockPlantWithAge; import ru.betterend.registry.EndBlocks; import ru.betterend.util.BlocksHelper; @@ -34,11 +34,11 @@ public class BlockBlueVineSeed extends BlockPlantWithAge { for (Direction dir: BlocksHelper.HORIZONTAL) { BlockPos p = pos.offset(dir); if (world.isAir(p)) { - BlocksHelper.setWithoutUpdate(world, p, EndBlocks.BLUE_VINE_FUR.getDefaultState().with(BlockGlowingFur.FACING, dir)); + BlocksHelper.setWithoutUpdate(world, p, EndBlocks.BLUE_VINE_FUR.getDefaultState().with(BlockFur.FACING, dir)); } } if (world.isAir(pos.up())) { - BlocksHelper.setWithoutUpdate(world, pos.up(), EndBlocks.BLUE_VINE_FUR.getDefaultState().with(BlockGlowingFur.FACING, Direction.UP)); + BlocksHelper.setWithoutUpdate(world, pos.up(), EndBlocks.BLUE_VINE_FUR.getDefaultState().with(BlockFur.FACING, Direction.UP)); } } diff --git a/src/main/java/ru/betterend/blocks/BlockTenaneaFlowers.java b/src/main/java/ru/betterend/blocks/BlockTenaneaFlowers.java new file mode 100644 index 00000000..d78a91ef --- /dev/null +++ b/src/main/java/ru/betterend/blocks/BlockTenaneaFlowers.java @@ -0,0 +1,60 @@ +package ru.betterend.blocks; + +import net.minecraft.client.color.block.BlockColorProvider; +import net.minecraft.client.color.item.ItemColorProvider; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3i; +import ru.betterend.blocks.basis.BlockVine; +import ru.betterend.interfaces.IColorProvider; +import ru.betterend.util.MHelper; + +public class BlockTenaneaFlowers extends BlockVine implements IColorProvider { + private static final BlockColorProvider BLOCK_PROVIDER; + private static final ItemColorProvider ITEM_PROVIDER; + public static final Vec3i[] COLORS; + + public BlockTenaneaFlowers() { + super(15); + } + + @Override + public BlockColorProvider getProvider() { + return BLOCK_PROVIDER; + } + + @Override + public ItemColorProvider getItemProvider() { + return ITEM_PROVIDER; + } + + static { + COLORS = new Vec3i[] { + new Vec3i(250, 111, 222), + new Vec3i(167, 89, 255), + new Vec3i(120, 207, 239), + new Vec3i(255, 87, 182) + }; + + BLOCK_PROVIDER = (state, world, pos, tintIndex) -> { + long i = (MHelper.getRandom(pos.getX(), pos.getZ()) & 63) + pos.getY(); + double delta = i * 0.1; + int index = MHelper.floor(delta); + int index2 = (index + 1) & 3; + delta -= index; + index &= 3; + + Vec3i color1 = COLORS[index]; + Vec3i color2 = COLORS[index2]; + + int r = MHelper.floor(MathHelper.lerp(delta, color1.getX(), color2.getX())); + int g = MHelper.floor(MathHelper.lerp(delta, color1.getY(), color2.getY())); + int b = MHelper.floor(MathHelper.lerp(delta, color1.getZ(), color2.getZ())); + + return MHelper.color(r, g, b); + }; + + ITEM_PROVIDER = (stack, tintIndex) -> { + return MHelper.color(COLORS[0].getX(), COLORS[0].getY(), COLORS[0].getZ()); + }; + } +} diff --git a/src/main/java/ru/betterend/blocks/basis/BlockGlowingFur.java b/src/main/java/ru/betterend/blocks/basis/BlockFur.java similarity index 86% rename from src/main/java/ru/betterend/blocks/basis/BlockGlowingFur.java rename to src/main/java/ru/betterend/blocks/basis/BlockFur.java index 5d7ce3d5..cb2b6c2c 100644 --- a/src/main/java/ru/betterend/blocks/basis/BlockGlowingFur.java +++ b/src/main/java/ru/betterend/blocks/basis/BlockFur.java @@ -24,6 +24,7 @@ import net.minecraft.sound.BlockSoundGroup; import net.minecraft.state.StateManager; import net.minecraft.state.property.DirectionProperty; import net.minecraft.state.property.Properties; +import net.minecraft.tag.BlockTags; import net.minecraft.util.BlockMirror; import net.minecraft.util.BlockRotation; import net.minecraft.util.math.BlockPos; @@ -38,13 +39,24 @@ import ru.betterend.interfaces.IRenderTypeable; import ru.betterend.util.BlocksHelper; import ru.betterend.util.MHelper; -public class BlockGlowingFur extends BlockBaseNotFull implements IRenderTypeable { +public class BlockFur extends BlockBaseNotFull implements IRenderTypeable { private static final EnumMap BOUNDING_SHAPES = Maps.newEnumMap(Direction.class); public static final DirectionProperty FACING = Properties.FACING; private final ItemConvertible drop; private final int dropChance; - public BlockGlowingFur(ItemConvertible drop, int dropChance) { + public BlockFur(ItemConvertible drop, int light, int dropChance) { + super(FabricBlockSettings.of(Material.REPLACEABLE_PLANT) + .breakByTool(FabricToolTags.SHEARS) + .sounds(BlockSoundGroup.WET_GRASS) + .luminance(light) + .breakByHand(true) + .noCollision()); + this.drop = drop; + this.dropChance = dropChance; + } + + public BlockFur(ItemConvertible drop, int dropChance) { super(FabricBlockSettings.of(Material.REPLACEABLE_PLANT) .breakByTool(FabricToolTags.SHEARS) .sounds(BlockSoundGroup.WET_GRASS) @@ -86,7 +98,7 @@ public class BlockGlowingFur extends BlockBaseNotFull implements IRenderTypeable public boolean canPlaceAt(BlockState state, WorldView world, BlockPos pos) { Direction direction = (Direction) state.get(FACING); BlockPos blockPos = pos.offset(direction.getOpposite()); - return sideCoversSmallSquare(world, blockPos, direction); + return sideCoversSmallSquare(world, blockPos, direction) || world.getBlockState(pos).isIn(BlockTags.LEAVES); } @Override diff --git a/src/main/java/ru/betterend/blocks/basis/BlockWallMushroom.java b/src/main/java/ru/betterend/blocks/basis/BlockWallMushroom.java index 07768c22..b2580ad7 100644 --- a/src/main/java/ru/betterend/blocks/basis/BlockWallMushroom.java +++ b/src/main/java/ru/betterend/blocks/basis/BlockWallMushroom.java @@ -11,6 +11,9 @@ import net.minecraft.block.Material; import net.minecraft.item.ItemStack; import net.minecraft.loot.context.LootContext; import net.minecraft.sound.BlockSoundGroup; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; +import net.minecraft.world.WorldView; public class BlockWallMushroom extends BlockWallPlant { public BlockWallMushroom(int light) { @@ -28,4 +31,9 @@ public class BlockWallMushroom extends BlockWallPlant { public List getDroppedStacks(BlockState state, LootContext.Builder builder) { return Lists.newArrayList(new ItemStack(this)); } + + @Override + public boolean isSupport(WorldView world, BlockPos pos, BlockState blockState, Direction direction) { + return blockState.getMaterial().isSolid() && blockState.isSideSolidFullSquare(world, pos, direction); + } } diff --git a/src/main/java/ru/betterend/registry/EndBlocks.java b/src/main/java/ru/betterend/registry/EndBlocks.java index a76f17e5..2a78aec3 100644 --- a/src/main/java/ru/betterend/registry/EndBlocks.java +++ b/src/main/java/ru/betterend/registry/EndBlocks.java @@ -35,6 +35,7 @@ import ru.betterend.blocks.BlockPath; import ru.betterend.blocks.BlockPythadendronSapling; import ru.betterend.blocks.BlockShadowBerry; import ru.betterend.blocks.BlockShadowGrass; +import ru.betterend.blocks.BlockTenaneaFlowers; import ru.betterend.blocks.BlockTenaneaSapling; import ru.betterend.blocks.BlockTerrain; import ru.betterend.blocks.BlockTerrainPlant; @@ -49,7 +50,7 @@ import ru.betterend.blocks.InfusionPedestal; import ru.betterend.blocks.PedestalVanilla; import ru.betterend.blocks.RunedFlavolite; import ru.betterend.blocks.TerminiteBlock; -import ru.betterend.blocks.basis.BlockGlowingFur; +import ru.betterend.blocks.basis.BlockFur; import ru.betterend.blocks.basis.BlockLeaves; import ru.betterend.blocks.basis.BlockOre; import ru.betterend.blocks.basis.BlockSimpleLeaves; @@ -95,11 +96,11 @@ public class EndBlocks { public static final Block QUARTZ_PEDESTAL = registerBlock("quartz_pedestal", new PedestalVanilla(Blocks.QUARTZ_BLOCK)); public static final Block PURPUR_PEDESTAL = registerBlock("purpur_pedestal", new PedestalVanilla(Blocks.PURPUR_BLOCK)); - // Wooden Materials // + // Wooden Materials And Trees // public static final Block MOSSY_GLOWSHROOM_SAPLING = registerBlock("mossy_glowshroom_sapling", new BlockMossyGlowshroomSapling()); public static final Block MOSSY_GLOWSHROOM_CAP = registerBlock("mossy_glowshroom_cap", new BlockMossyGlowshroomCap()); public static final Block MOSSY_GLOWSHROOM_HYMENOPHORE = registerBlock("mossy_glowshroom_hymenophore", new BlockMossyGlowshroomHymenophore()); - public static final Block MOSSY_GLOWSHROOM_FUR = registerBlock("mossy_glowshroom_fur", new BlockGlowingFur(MOSSY_GLOWSHROOM_SAPLING, 16)); + public static final Block MOSSY_GLOWSHROOM_FUR = registerBlock("mossy_glowshroom_fur", new BlockFur(MOSSY_GLOWSHROOM_SAPLING, 15, 16)); public static final WoodenMaterial MOSSY_GLOWSHROOM = new WoodenMaterial("mossy_glowshroom", MaterialColor.GRAY, MaterialColor.WOOD); public static final Block PYTHADENDRON_SAPLING = registerBlock("pythadendron_sapling", new BlockPythadendronSapling()); @@ -122,7 +123,8 @@ public class EndBlocks { public static final Block TENANEA_SAPLING = registerBlock("tenanea_sapling", new BlockTenaneaSapling()); public static final Block TENANEA_LEAVES = registerBlock("tenanea_leaves", new BlockLeaves(TENANEA_SAPLING, MaterialColor.PINK)); - public static final Block TENANEA_FLOWERS = registerBlock("tenanea_flowers", new BlockVine(15)); + public static final Block TENANEA_FLOWERS = registerBlock("tenanea_flowers", new BlockTenaneaFlowers()); + public static final Block TENANEA_OUTER_LEAVES = registerBlock("tenanea_outer_leaves", new BlockFur(TENANEA_SAPLING, 32)); public static final WoodenMaterial TENANEA = new WoodenMaterial("tenanea", MaterialColor.PINK, MaterialColor.PINK); // Small Plants // @@ -137,7 +139,7 @@ public class EndBlocks { public static final Block BLUE_VINE_SEED = registerBlock("blue_vine_seed", new BlockBlueVineSeed()); public static final Block BLUE_VINE = registerBlockNI("blue_vine", new BlockBlueVine()); public static final Block BLUE_VINE_LANTERN = registerBlock("blue_vine_lantern", new BlockBlueVineLantern()); - public static final Block BLUE_VINE_FUR = registerBlock("blue_vine_fur", new BlockGlowingFur(BLUE_VINE_SEED, 3)); + public static final Block BLUE_VINE_FUR = registerBlock("blue_vine_fur", new BlockFur(BLUE_VINE_SEED, 15, 3)); public static final Block BUBBLE_CORAL = registerBlock("bubble_coral", new BlockBubbleCoral()); public static final Block END_LILY = registerBlockNI("end_lily", new BlockEndLily()); diff --git a/src/main/java/ru/betterend/util/BlocksHelper.java b/src/main/java/ru/betterend/util/BlocksHelper.java index dda412c2..d2ee0f20 100644 --- a/src/main/java/ru/betterend/util/BlocksHelper.java +++ b/src/main/java/ru/betterend/util/BlocksHelper.java @@ -23,7 +23,7 @@ import net.minecraft.util.math.Vec3i; import net.minecraft.world.WorldAccess; import ru.betterend.blocks.BlockBlueVine; import ru.betterend.blocks.basis.BlockDoublePlant; -import ru.betterend.blocks.basis.BlockGlowingFur; +import ru.betterend.blocks.basis.BlockFur; import ru.betterend.blocks.basis.BlockVine; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndTags; @@ -153,7 +153,7 @@ public class BlocksHelper { POS.setY(y); state = world.getBlockState(POS); - if (state.getBlock() instanceof BlockGlowingFur) { + if (state.getBlock() instanceof BlockFur) { doubleCheck.add(POS.toImmutable()); } // Liquids diff --git a/src/main/java/ru/betterend/util/MHelper.java b/src/main/java/ru/betterend/util/MHelper.java index bf08ac41..e8dcf52c 100644 --- a/src/main/java/ru/betterend/util/MHelper.java +++ b/src/main/java/ru/betterend/util/MHelper.java @@ -113,6 +113,12 @@ public class MHelper { return x1 * x2 + y1 * y2; } + public static int getRandom(int x, int z) { + int h = x * 374761393 + z * 668265263; + h = (h ^ (h >> 13)) * 1274126177; + return h ^ (h >> 16); + } + public static int getSeed(int seed, int x, int y) { int h = seed + x * 374761393 + y * 668265263; h = (h ^ (h >> 13)) * 1274126177; diff --git a/src/main/java/ru/betterend/world/features/trees/MossyGlowshroomFeature.java b/src/main/java/ru/betterend/world/features/trees/MossyGlowshroomFeature.java index fff59d02..040d73f7 100644 --- a/src/main/java/ru/betterend/world/features/trees/MossyGlowshroomFeature.java +++ b/src/main/java/ru/betterend/world/features/trees/MossyGlowshroomFeature.java @@ -13,7 +13,7 @@ import net.minecraft.world.StructureWorldAccess; import net.minecraft.world.gen.chunk.ChunkGenerator; import net.minecraft.world.gen.feature.DefaultFeatureConfig; import ru.betterend.blocks.BlockMossyGlowshroomCap; -import ru.betterend.blocks.basis.BlockGlowingFur; +import ru.betterend.blocks.basis.BlockFur; import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndTags; @@ -103,12 +103,12 @@ public class MossyGlowshroomFeature extends DefaultFeature { else if (info.getState().getBlock() == EndBlocks.MOSSY_GLOWSHROOM_HYMENOPHORE) { for (Direction dir: BlocksHelper.HORIZONTAL) { if (info.getState(dir) == AIR) { - info.setBlockPos(info.getPos().offset(dir), EndBlocks.MOSSY_GLOWSHROOM_FUR.getDefaultState().with(BlockGlowingFur.FACING, dir)); + info.setBlockPos(info.getPos().offset(dir), EndBlocks.MOSSY_GLOWSHROOM_FUR.getDefaultState().with(BlockFur.FACING, dir)); } } if (info.getStateDown().getBlock() != EndBlocks.MOSSY_GLOWSHROOM_HYMENOPHORE) { - info.setBlockPos(info.getPos().down(), EndBlocks.MOSSY_GLOWSHROOM_FUR.getDefaultState().with(BlockGlowingFur.FACING, Direction.DOWN)); + info.setBlockPos(info.getPos().down(), EndBlocks.MOSSY_GLOWSHROOM_FUR.getDefaultState().with(BlockFur.FACING, Direction.DOWN)); } } return info.getState(); diff --git a/src/main/java/ru/betterend/world/features/trees/TenaneaFeature.java b/src/main/java/ru/betterend/world/features/trees/TenaneaFeature.java index a9670faf..474fcf72 100644 --- a/src/main/java/ru/betterend/world/features/trees/TenaneaFeature.java +++ b/src/main/java/ru/betterend/world/features/trees/TenaneaFeature.java @@ -18,6 +18,7 @@ import net.minecraft.world.gen.chunk.ChunkGenerator; import net.minecraft.world.gen.feature.DefaultFeatureConfig; import ru.betterend.blocks.BlockProperties; import ru.betterend.blocks.BlockProperties.TripleShape; +import ru.betterend.blocks.basis.BlockFur; import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndTags; @@ -54,7 +55,7 @@ public class TenaneaFeature extends DefaultFeature { SplineHelper.offsetParts(spline, random, 1F, 0, 1F); SplineHelper.fillSpline(spline, world, EndBlocks.TENANEA.bark.getDefaultState(), pos, REPLACE); Vector3f last = spline.get(spline.size() - 1); - float leavesRadius = (size * 0.3F + MHelper.randRange(0.8F, 1.5F, random)); + float leavesRadius = (size * 0.3F + MHelper.randRange(0.8F, 1.5F, random)) * 1.4F; OpenSimplexNoise noise = new OpenSimplexNoise(random.nextLong()); leavesBall(world, pos.add(last.getX(), last.getY(), last.getZ()), leavesRadius, random, noise); } @@ -67,14 +68,30 @@ public class TenaneaFeature extends DefaultFeature { SDF sub = new SDFScale().setScale(5).setSource(sphere); sub = new SDFTranslate().setTranslate(0, -radius * 5, 0).setSource(sub); sphere = new SDFSubtraction().setSourceA(sphere).setSourceB(sub); - sphere = new SDFScale3D().setScale(1, 0.5F, 1).setSource(sphere); - sphere = new SDFDisplacement().setFunction((vec) -> { return (float) noise.eval(vec.getX() * 0.2, vec.getY() * 0.2, vec.getZ() * 0.2) * 1F; }).setSource(sphere); - sphere = new SDFDisplacement().setFunction((vec) -> { return random.nextFloat() * 3F - 1.5F; }).setSource(sphere); + sphere = new SDFScale3D().setScale(1, 0.75F, 1).setSource(sphere); + sphere = new SDFDisplacement().setFunction((vec) -> { return (float) noise.eval(vec.getX() * 0.2, vec.getY() * 0.2, vec.getZ() * 0.2) * 2F; }).setSource(sphere); + sphere = new SDFDisplacement().setFunction((vec) -> { return MHelper.randRange(-1.5F, 1.5F, random); }).setSource(sphere); + Mutable mut = new Mutable(); + for (Direction d1: BlocksHelper.HORIZONTAL) { + BlockPos p = mut.set(pos).move(Direction.UP).move(d1).toImmutable(); + BlocksHelper.setWithoutUpdate(world, p, EndBlocks.TENANEA.bark.getDefaultState()); + for (Direction d2: BlocksHelper.HORIZONTAL) { + mut.set(p).move(Direction.UP).move(d2); + BlocksHelper.setWithoutUpdate(world, p, EndBlocks.TENANEA.bark.getDefaultState()); + } + } + + BlockState outer = EndBlocks.TENANEA_OUTER_LEAVES.getDefaultState(); List support = Lists.newArrayList(); sphere.setPostProcess((info) -> { - if (random.nextBoolean() && info.getStateDown().isAir()) { - support.add(info.getPos().toImmutable()); + if (info.getStateDown().isAir()) { + if (random.nextBoolean()) { + support.add(info.getPos().toImmutable()); + } + else { + info.setState(info.getPos().down(), outer.with(BlockFur.FACING, Direction.DOWN)); + } } if (random.nextInt(5) == 0) { for (Direction dir: Direction.values()) { @@ -84,6 +101,16 @@ public class TenaneaFeature extends DefaultFeature { } } info.setState(EndBlocks.TENANEA.bark.getDefaultState()); + } + + if (info.getState().isOf(EndBlocks.TENANEA_LEAVES)) { + for (Direction d: BlocksHelper.HORIZONTAL) { + if (info.getState(d).isAir()) { + info.setState(info.getPos().offset(d), outer.with(BlockFur.FACING, Direction.DOWN)); + } + } + } + else if (EndBlocks.TENANEA.isTreeLog(info.getState())) { for (int x = -6; x < 7; x++) { int ax = Math.abs(x); mut.setX(x + info.getPos().getX()); diff --git a/src/main/java/ru/betterend/world/structures/features/StructureGiantMossyGlowshroom.java b/src/main/java/ru/betterend/world/structures/features/StructureGiantMossyGlowshroom.java index 3b9aa9e3..b4ca3c4b 100644 --- a/src/main/java/ru/betterend/world/structures/features/StructureGiantMossyGlowshroom.java +++ b/src/main/java/ru/betterend/world/structures/features/StructureGiantMossyGlowshroom.java @@ -7,7 +7,7 @@ import net.minecraft.client.util.math.Vector3f; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Direction; import ru.betterend.blocks.BlockMossyGlowshroomCap; -import ru.betterend.blocks.basis.BlockGlowingFur; +import ru.betterend.blocks.basis.BlockFur; import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBlocks; import ru.betterend.util.BlocksHelper; @@ -111,12 +111,12 @@ public class StructureGiantMossyGlowshroom extends SDFStructureFeature { else if (info.getState().getBlock() == EndBlocks.MOSSY_GLOWSHROOM_HYMENOPHORE) { for (Direction dir: BlocksHelper.HORIZONTAL) { if (info.getState(dir) == AIR) { - info.setBlockPos(info.getPos().offset(dir), EndBlocks.MOSSY_GLOWSHROOM_FUR.getDefaultState().with(BlockGlowingFur.FACING, dir)); + info.setBlockPos(info.getPos().offset(dir), EndBlocks.MOSSY_GLOWSHROOM_FUR.getDefaultState().with(BlockFur.FACING, dir)); } } if (info.getStateDown().getBlock() != EndBlocks.MOSSY_GLOWSHROOM_HYMENOPHORE) { - info.setBlockPos(info.getPos().down(), EndBlocks.MOSSY_GLOWSHROOM_FUR.getDefaultState().with(BlockGlowingFur.FACING, Direction.DOWN)); + info.setBlockPos(info.getPos().down(), EndBlocks.MOSSY_GLOWSHROOM_FUR.getDefaultState().with(BlockFur.FACING, Direction.DOWN)); } } return info.getState(); diff --git a/src/main/resources/assets/betterend/blockstates/tenanea_outer_leaves.json b/src/main/resources/assets/betterend/blockstates/tenanea_outer_leaves.json new file mode 100644 index 00000000..f3072b5c --- /dev/null +++ b/src/main/resources/assets/betterend/blockstates/tenanea_outer_leaves.json @@ -0,0 +1,10 @@ +{ + "variants": { + "facing=up": { "model": "betterend:block/tenanea_outer_leaves" }, + "facing=down": { "model": "betterend:block/tenanea_outer_leaves", "x": 180 }, + "facing=north": { "model": "betterend:block/tenanea_outer_leaves", "x": 90 }, + "facing=south": { "model": "betterend:block/tenanea_outer_leaves", "x": 90, "y": 180 }, + "facing=east": { "model": "betterend:block/tenanea_outer_leaves", "x": 90, "y": 90 }, + "facing=west": { "model": "betterend:block/tenanea_outer_leaves", "x": 90, "y": 270 } + } +} diff --git a/src/main/resources/assets/betterend/models/block/cross_no_distortion_inverted_tinted.json b/src/main/resources/assets/betterend/models/block/cross_no_distortion_inverted_tinted.json new file mode 100644 index 00000000..aad66117 --- /dev/null +++ b/src/main/resources/assets/betterend/models/block/cross_no_distortion_inverted_tinted.json @@ -0,0 +1,29 @@ +{ + "textures": { + "particle": "#texture" + }, + "elements": [ + { + "__comment": "PlaneX1", + "from": [ 2.375, 0, 2.25 ], + "to": [ 2.376, 16, 18.25 ], + "rotation": { "origin": [ 2.375, 0, 2.25 ], "axis": "y", "angle": 45 }, + "shade": false, + "faces": { + "west": { "uv": [ 16, 0, 0, 16 ], "texture": "#texture", "tintindex": 0 }, + "east": { "uv": [ 16, 0, 0, 16 ], "texture": "#texture", "tintindex": 0 } + } + }, + { + "__comment": "PlaneX1", + "from": [ 13.75, 0, 2.25 ], + "to": [ 13.751, 16, 18.25 ], + "rotation": { "origin": [ 13.75, 0, 2.25 ], "axis": "y", "angle": -45 }, + "shade": false, + "faces": { + "west": { "uv": [ 16, 0, 0, 16 ], "texture": "#texture", "tintindex": 0 }, + "east": { "uv": [ 16, 0, 0, 16 ], "texture": "#texture", "tintindex": 0 } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/models/block/cross_no_distortion_tinted.json b/src/main/resources/assets/betterend/models/block/cross_no_distortion_tinted.json new file mode 100644 index 00000000..a1957e01 --- /dev/null +++ b/src/main/resources/assets/betterend/models/block/cross_no_distortion_tinted.json @@ -0,0 +1,29 @@ +{ + "textures": { + "particle": "#texture" + }, + "elements": [ + { + "__comment": "PlaneX1", + "from": [ 2.375, 0, 2.25 ], + "to": [ 2.376, 16, 18.25 ], + "rotation": { "origin": [ 2.375, 0, 2.25 ], "axis": "y", "angle": 45 }, + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "tintindex": 0 }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "tintindex": 0 } + } + }, + { + "__comment": "PlaneX1", + "from": [ 13.75, 0, 2.25 ], + "to": [ 13.751, 16, 18.25 ], + "rotation": { "origin": [ 13.75, 0, 2.25 ], "axis": "y", "angle": -45 }, + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "tintindex": 0 }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "tintindex": 0 } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/models/block/tenanea_flowers_bottom_1.json b/src/main/resources/assets/betterend/models/block/tenanea_flowers_bottom_1.json index e0bd69bc..bde5c2bb 100644 --- a/src/main/resources/assets/betterend/models/block/tenanea_flowers_bottom_1.json +++ b/src/main/resources/assets/betterend/models/block/tenanea_flowers_bottom_1.json @@ -1,5 +1,5 @@ { - "parent": "betterend:block/cross_no_distortion", + "parent": "betterend:block/cross_no_distortion_tinted", "textures": { "texture": "betterend:block/tenanea_flowers_bottom" } diff --git a/src/main/resources/assets/betterend/models/block/tenanea_flowers_bottom_2.json b/src/main/resources/assets/betterend/models/block/tenanea_flowers_bottom_2.json index ce711252..c2d080db 100644 --- a/src/main/resources/assets/betterend/models/block/tenanea_flowers_bottom_2.json +++ b/src/main/resources/assets/betterend/models/block/tenanea_flowers_bottom_2.json @@ -1,5 +1,5 @@ { - "parent": "betterend:block/cross_no_distortion_inverted", + "parent": "betterend:block/cross_no_distortion_inverted_tinted", "textures": { "texture": "betterend:block/tenanea_flowers_bottom" } diff --git a/src/main/resources/assets/betterend/models/block/tenanea_flowers_middle_1.json b/src/main/resources/assets/betterend/models/block/tenanea_flowers_middle_1.json index 487cf87e..ef39aa4b 100644 --- a/src/main/resources/assets/betterend/models/block/tenanea_flowers_middle_1.json +++ b/src/main/resources/assets/betterend/models/block/tenanea_flowers_middle_1.json @@ -1,5 +1,5 @@ { - "parent": "betterend:block/cross_no_distortion", + "parent": "betterend:block/cross_no_distortion_tinted", "textures": { "texture": "betterend:block/tenanea_flowers" } diff --git a/src/main/resources/assets/betterend/models/block/tenanea_flowers_middle_2.json b/src/main/resources/assets/betterend/models/block/tenanea_flowers_middle_2.json index fd254807..07d18bb0 100644 --- a/src/main/resources/assets/betterend/models/block/tenanea_flowers_middle_2.json +++ b/src/main/resources/assets/betterend/models/block/tenanea_flowers_middle_2.json @@ -1,5 +1,5 @@ { - "parent": "betterend:block/cross_no_distortion_inverted", + "parent": "betterend:block/cross_no_distortion_inverted_tinted", "textures": { "texture": "betterend:block/tenanea_flowers" } diff --git a/src/main/resources/assets/betterend/models/block/tenanea_flowers_top_1.json b/src/main/resources/assets/betterend/models/block/tenanea_flowers_top_1.json index 2cfede97..1999fc19 100644 --- a/src/main/resources/assets/betterend/models/block/tenanea_flowers_top_1.json +++ b/src/main/resources/assets/betterend/models/block/tenanea_flowers_top_1.json @@ -1,6 +1,53 @@ { - "parent": "betterend:block/cross_no_distortion", "textures": { - "texture": "betterend:block/tenanea_flowers_top" - } -} + "texture": "betterend:block/tenanea_flowers_top", + "stem": "betterend:block/tenanea_flowers_top_stem", + "particle": "#texture" + }, + "elements": [ + { + "__comment": "PlaneX1", + "from": [ 2.375, 0, 2.25 ], + "to": [ 2.376, 16, 18.25 ], + "rotation": { "origin": [ 2.375, 0, 2.25 ], "axis": "y", "angle": 45 }, + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "tintindex": 0 }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "tintindex": 0 } + } + }, + { + "__comment": "PlaneX1", + "from": [ 13.75, 0, 2.25 ], + "to": [ 13.751, 16, 18.25 ], + "rotation": { "origin": [ 13.75, 0, 2.25 ], "axis": "y", "angle": -45 }, + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "tintindex": 0 }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "tintindex": 0 } + } + }, + { + "__comment": "PlaneX1", + "from": [ 2.375, 0, 2.25 ], + "to": [ 2.376, 16, 18.25 ], + "rotation": { "origin": [ 2.375, 0, 2.25 ], "axis": "y", "angle": 45 }, + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#stem" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#stem" } + } + }, + { + "__comment": "PlaneX1", + "from": [ 13.75, 0, 2.25 ], + "to": [ 13.751, 16, 18.25 ], + "rotation": { "origin": [ 13.75, 0, 2.25 ], "axis": "y", "angle": -45 }, + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#stem" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#stem" } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/models/block/tenanea_flowers_top_2.json b/src/main/resources/assets/betterend/models/block/tenanea_flowers_top_2.json index 6b4754e1..fba0332e 100644 --- a/src/main/resources/assets/betterend/models/block/tenanea_flowers_top_2.json +++ b/src/main/resources/assets/betterend/models/block/tenanea_flowers_top_2.json @@ -1,6 +1,59 @@ { - "parent": "betterend:block/cross_no_distortion_inverted", + "parent": "betterend:block/cross_no_distortion_inverted_tinted", "textures": { "texture": "betterend:block/tenanea_flowers_top" } } +{ + "textures": { + "texture": "betterend:block/tenanea_flowers_top", + "stem": "betterend:block/tenanea_flowers_top_stem", + "particle": "#texture" + }, + "elements": [ + { + "__comment": "PlaneX1", + "from": [ 2.375, 0, 2.25 ], + "to": [ 2.376, 16, 18.25 ], + "rotation": { "origin": [ 2.375, 0, 2.25 ], "axis": "y", "angle": 45 }, + "shade": false, + "faces": { + "west": { "uv": [ 16, 0, 0, 16 ], "texture": "#texture", "tintindex": 0 }, + "east": { "uv": [ 16, 0, 0, 16 ], "texture": "#texture", "tintindex": 0 } + } + }, + { + "__comment": "PlaneX1", + "from": [ 13.75, 0, 2.25 ], + "to": [ 13.751, 16, 18.25 ], + "rotation": { "origin": [ 13.75, 0, 2.25 ], "axis": "y", "angle": -45 }, + "shade": false, + "faces": { + "west": { "uv": [ 16, 0, 0, 16 ], "texture": "#texture", "tintindex": 0 }, + "east": { "uv": [ 16, 0, 0, 16 ], "texture": "#texture", "tintindex": 0 } + } + }, + { + "__comment": "PlaneX1", + "from": [ 2.375, 0, 2.25 ], + "to": [ 2.376, 16, 18.25 ], + "rotation": { "origin": [ 2.375, 0, 2.25 ], "axis": "y", "angle": 45 }, + "shade": false, + "faces": { + "west": { "uv": [ 16, 0, 0, 16 ], "texture": "#stem" }, + "east": { "uv": [ 16, 0, 0, 16 ], "texture": "#stem" } + } + }, + { + "__comment": "PlaneX1", + "from": [ 13.75, 0, 2.25 ], + "to": [ 13.751, 16, 18.25 ], + "rotation": { "origin": [ 13.75, 0, 2.25 ], "axis": "y", "angle": -45 }, + "shade": false, + "faces": { + "west": { "uv": [ 16, 0, 0, 16 ], "texture": "#stem" }, + "east": { "uv": [ 16, 0, 0, 16 ], "texture": "#stem" } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/models/block/tenanea_outer_leaves.json b/src/main/resources/assets/betterend/models/block/tenanea_outer_leaves.json new file mode 100644 index 00000000..2e376e45 --- /dev/null +++ b/src/main/resources/assets/betterend/models/block/tenanea_outer_leaves.json @@ -0,0 +1,120 @@ +{ + "__comment": "Designed by Paulevs with Cubik Studio - https://cubik.studio", + "textures": { + "particle": "betterend:block/tenanea_outer_leaves", + "texture": "betterend:block/tenanea_outer_leaves", + "spore": "betterend:block/tenanea_outer_leaves" + }, + "elements": [ + { + "__comment": "PlaneY1", + "from": [ 0, -0.001, -10 ], + "to": [ 16, 0, 6 ], + "rotation": { "origin": [ 0, 0, 6 ], "axis": "x", "angle": 22.5 }, + "shade": false, + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "rotation": 180 }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" } + } + }, + { + "__comment": "PlaneY1", + "from": [ 0, 0, 10 ], + "to": [ 16, 0.001, 26 ], + "rotation": { "origin": [ 0, 0, 10 ], "axis": "x", "angle": -22.5 }, + "shade": false, + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "rotation": 180 } + } + }, + { + "__comment": "PlaneY4", + "from": [ 10, -0.001, 0 ], + "to": [ 26, 0, 16 ], + "rotation": { "origin": [ 10, 0, 16 ], "axis": "z", "angle": 22.5 }, + "shade": false, + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [ 0, 16, 16, 0 ], "texture": "#texture", "rotation": 270 } + } + }, + { + "__comment": "PlaneY4", + "from": [ -10, 0, 2 ], + "to": [ 6, 0.001, 18 ], + "rotation": { "origin": [ 6, 0, 18 ], "axis": "z", "angle": -22.5 }, + "shade": false, + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "rotation": 270 }, + "up": { "uv": [ 16, 0, 0, 16 ], "texture": "#texture", "rotation": 270 } + } + }, + { + "__comment": "PlaneX6", + "from": [ 0, 0, -6.5 ], + "to": [ 0.001, 16, 16 ], + "rotation": { "origin": [ 0, 16, 16 ], "axis": "y", "angle": -45 }, + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#spore" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#spore" } + } + }, + { + "__comment": "PlaneX6", + "from": [ -6.5, 0, 15.999 ], + "to": [ 16, 16, 16 ], + "rotation": { "origin": [ 16, 16, 16 ], "axis": "y", "angle": -45 }, + "shade": false, + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#spore" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#spore" } + } + }, + { + "__comment": "PlaneY1", + "from": [ 0, -0.001, -9 ], + "to": [ 16, 0, 7 ], + "rotation": { "origin": [ 0, 0, 7 ], "axis": "x", "angle": 45 }, + "shade": false, + "faces": { + "down": { "uv": [ 16, 0, 0, 16 ], "texture": "#texture", "rotation": 180 }, + "up": { "uv": [ 16, 0, 0, 16 ], "texture": "#texture" } + } + }, + { + "__comment": "PlaneY1", + "from": [ 0, 0, 9 ], + "to": [ 16, 0.001, 25 ], + "rotation": { "origin": [ 0, 0, 9 ], "axis": "x", "angle": -45 }, + "shade": false, + "faces": { + "down": { "uv": [ 16, 0, 0, 16 ], "texture": "#texture" }, + "up": { "uv": [ 16, 0, 0, 16 ], "texture": "#texture", "rotation": 180 } + } + }, + { + "__comment": "PlaneY4", + "from": [ 9, -0.001, 0 ], + "to": [ 25, 0, 16 ], + "rotation": { "origin": [ 9, 0, 16 ], "axis": "z", "angle": 45 }, + "shade": false, + "faces": { + "down": { "uv": [ 16, 0, 0, 16 ], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [ 16, 16, 0, 0 ], "texture": "#texture", "rotation": 270 } + } + }, + { + "__comment": "PlaneY4", + "from": [ -9, 0, 2 ], + "to": [ 7, 0.001, 18 ], + "rotation": { "origin": [ 7, 0, 18 ], "axis": "z", "angle": -45 }, + "shade": false, + "faces": { + "down": { "uv": [ 16, 0, 0, 16 ], "texture": "#texture", "rotation": 270 }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "rotation": 270 } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/models/item/tenanea_outer_leaves.json b/src/main/resources/assets/betterend/models/item/tenanea_outer_leaves.json new file mode 100644 index 00000000..7abbe6c1 --- /dev/null +++ b/src/main/resources/assets/betterend/models/item/tenanea_outer_leaves.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "betterend:block/tenanea_outer_leaves" + } +} diff --git a/src/main/resources/assets/betterend/textures/block/tenanea_flowers.png b/src/main/resources/assets/betterend/textures/block/tenanea_flowers.png index bd8ea393b989493d99f1bcf6bad4166c307acf2d..c7bbf8c12115b397b9492bf9891af384139c432c 100644 GIT binary patch delta 589 zcmbOz)F!y$3=_MFm8r3nsoCVqOe%2pKPC$mBcn6}Q?sN*U5i8`b6rzo6La09q(n1a zQ%ego1G7{^BeOJ%%~8xPOisk8R8lA|aV;ycD$hvGvsE%OFf!0JG}JXR3o!)QKY0?1 z)8r(!{QAu+e_mu@V4Ugc;uvCax_7eYdPhfr*41J<0>wvUItv@u{`k+WQl=BpF{4!= z=|;yCyQy0$-p9_ncQ-mVe(ox(vr10ibf$aXeE&UUZP?E1uQL^7_=Nwd3UPM1Exz-% z>}lEVz|A*Pj{FpDxcstYNr+aUhRCC`-MVu9?uyT5>rLmb?>(NJWg?aH{y*cI>)D;h zAKOUvrtH2Ov@<5`M&9OT5o z>w?8i2?i?!n3t4Ttvwl#k~Cj*OO$Tm&X_4@(>SLZcr^GhJuR{feekvFWraL=ta~Ry3m~z-UufLv}u%*5>LB{>en-|UZ*MDT(a?Ach-t9td1|aZs^>bP0l+XkK DQS_%~8xPOs>SJR8lA|aV;ycD$hvGvsE%OFf!0JG}JXR3o(S*Kb6IP zauQp9y@1!Geg+066;Bt(5R22jlVkla2S^GL-Nb*ABr4VJ)A8PdIHG`X({F^RtLnJQqLSZ)^c^7vsIbRTFJgQuIFNlf7$%C zJ^w%4Nz?W3oj(hMBX1rJv+?`0B@npOJ?_3IBLMm_5M|5s}1)Y=vNzdIwH zrKD#Z|NM>HH_pDlQ^7rFCGRVq3c<%R5+&9fN(wrzEceZ5p6>DY?=m*#F2Co_HZP}z zx@~ShF7E2nAtQPAbxE3OyY${foejUI@e1X%C~lX1=_OkHnziSvhs4u2Gm_5hM^0X- zJNMkY-{E(rJ(zgBzK?&+i`b1#6BY6WXSi5a?lx}BS99ik?)0dL-DM3b$`u>K4tSV!ur6)Up0wZ8(I$LZ z`JLq(Lku_kFlE=%co6AwK-kqes37q`>hUFc3Ey(sWoLN5DV}%e^O<_KiogSL^F4$t zdzT%S({9y#Sy33x&vaMl$%=v}jjjjM=3n8NqrqCt@*eeD)mHjpqUv>N012=x=lkznQo)F2^E4L>8!^GWh_UStQwfVc#|G22=(z?zY zVw+2PTr*}#oX#pK-`(PIedaYempf^9?e+2xsa9<))=lY55#rfw7`K@tburugvu!{B rS57!Nz2L diff --git a/src/main/resources/assets/betterend/textures/block/tenanea_flowers_bottom.png b/src/main/resources/assets/betterend/textures/block/tenanea_flowers_bottom.png index a7e013b6c7689ef2a4f1c2a8aa2f50fac76f5eca..23fe7dbf94cd9bb5097fab2a529c87051d386872 100644 GIT binary patch delta 442 zcmX>nxLk0<876iUD^p`DQT~F%hM5vIDCW%=pcQY<7(Gfr)IZ85kI4JY5_^EPD3_o$P9L z;PK(t>*!+t`sRQA#M`0zT8E0`Prf$!^1x>L%*!lJ9kDCdd2x4e7|mYhxGGU1Y2I_C z-}}T%XQ>s69XFIqe{kbOB9pfQ@Alm8*Sj7W@cihs7ZjM06?=V#3a8#_r79)WPwQUK z6Ad^u`&s3&+WPwwwKR7HePES$G+(hwt8MivCO?K*%M9;-KWMu0;&r>sLRR=rHNdssG#u^9z6R|C{@OH~hyGEfzzGR}4Vl>FVdQ&MBb@00``` Aw*UYD delta 481 zcmZ23cusJ`876jPD^oKoBcsWenN;BHe@qrCsfKArCT5n#x+#XqX}Xq1CW*R9rpbo7 z7DT~F%hM5vIDCW%=pcQY<7(GygrkUGcYhZd%8G=Se#D&@&CU) zGtct<|NhClXwR+wa{tx6-T$wBzyEiA?QdQm|6d=Nb(WWXyI7xM%X30z!?Vf!|IYvT z@_GNIqv;8)*ZA-K*RTBh_5ZQ;`~R8m|Nl=u*0zn2HD94iDX!+<`kJ3V|EoG2cBq-a z?VzV!_nUb?x5JM5m$FAD+?22Xv;W8E^ZzX!q@F0vuy7R5`Ty_tf0hNk3i}VoFcb-H z;_fVBJi#C^_s=8lJFKVo|8p~JXl3Npm|yiH-etnRb@Be4|?f*M&WZ>#{b}-v!kihbr`EH` zNJvWA@HjQy;>%BU=NSs(&UP1ACAtcCGPF2e%wR2L)HAg(T^(P`cx?-Z6t{|W!yLX7 qMT|VcMU2-RR9FoR12{Cy7#QY-+Ag}HkaL~^2s~Z=T-G@yGywo@U&;6Y diff --git a/src/main/resources/assets/betterend/textures/block/tenanea_flowers_top.png b/src/main/resources/assets/betterend/textures/block/tenanea_flowers_top.png index 7bdf495af64de24dcb66bbbe107284aa3e3ce147..07b6a7c3d2ce7123bd1fc0d08ce02951df31c2e9 100644 GIT binary patch delta 530 zcmaDOd`@V?874LpD^p`D)5({ZRAJ1&OqMFiI%#l zrm4m$X(=hGX~w3TqnIZ#DHEY`awCg0)bPy)Y~76YTy5EJ7#JAKJzX3_EKYBobhC>o zkjF*)-ESr>EsbAl|Nd|HXy(__(|FXx{qCM8s}x(#@y0}{S#7iTO`W`|qnNM0^2vSH zb=OySA5ALS853h8H$9$nj-UE;AGOx$$`d)>eYZaJ(BSBS&+@E%?akgQLKQZ05o^OV zrg|wHOxs*|v_2^?;(UtHr-=!BR{a?iNzN=&ZY@}abS(Lnp>x;ut+TD+{u)t9JB7IwQWCZ@{)hZ1+2OJlBM5)>21>7 zw9PX`xmuZmR!&)JAi*QR)q3Vi-gfOqxr%wuZv@7_{QleRsql+>?KS&V9~_pv%IvZ@ z&}P2>mMC4F>E2gfmtH*Q=PB@_(Z1JZZ_94$UG!LF>?IVCv;V%cc$enhSu0%4=lba`d(UF>p=|fV8oS#b sjV!m{UdxR6ru;lT=4#g0$8usdjF!sM9~LvlxiA2Mr>mdKI;Vst09rrc9{>OV delta 690 zcmX>n^hS8Y874MkD^oKoqsf<;RAJ1&OqMF9X6DAmhRJEV=7wp8y2eQ+NxGJ%sVTaK zCMHJ7spg3msfiYwqnIZ#5v6jn1FIC&^vwor-Hi3IYxmhOFffUFx;TbdoURS>_Yg@G z`Cn`O_}s4UZoWvxDQ`8L*!i0xR|p7+l&sA2W)bC#o^G&fiu+56h&Z7rgJ0DzE(CV@ zxjHtrzIEjA70e1xzg<#(_vf*>Uw_sLd%xagEzfiRO!fZn&;H(f&#vUOH~q_}$gX)W z)%AP$<yHhq_8iPSS9a$& zbGgT{)f=n3+%JjwM!QyRIJdH1)7gLXwrCOGrz_^HKVrPy`|3{huI0w8juRA9MGcp< z3)l-J8Qpss{&C*}g?;)5z6I<^`}g|Z_rptW+*n*N^JX{pH zV4oZ7b{2)X+b5hTJabERmdNBgmUo)wHN5ismZlgQ-8y}(qgnFQgdd_h-(->!c+4k9 z&dIuDAam`8`MZRylP#-$CDi=$EDbf-r*nB{d}O(g<*x&u;=8y-?YKlwRr)K(zOd;y z^2)03-1=ShI~TGWs%G$Han)BJ_g48_+G{fBS&7Yp2U$x*cNIK{J-9bIxWLuq<&Sww zB;$_M#wO2m)5?!rWuQ>=Vb3ATOWAlPyVu45x?@S2Mf0e@|taU?Gz?iJ@NLUJjd)MvF;ucub=!gP&=)*%Jj}b z)r(&v7QfQ_c*JRzP^GkRZlaA4_Y@&7d6~=)3vaPon{K?iL#JS63j+{%y85}Sb4q9e E0Dj&whyVZp diff --git a/src/main/resources/assets/betterend/textures/block/tenanea_flowers_top_stem.png b/src/main/resources/assets/betterend/textures/block/tenanea_flowers_top_stem.png new file mode 100644 index 0000000000000000000000000000000000000000..6df6a37f7b5c9d4ce5f49a2746b80d7a6bc45ea7 GIT binary patch literal 2099 zcmb_d&ub(_6z(

S{13imYIo4$6wwbXEWEHj|K@iDqCYX0rnuA&0H5s+nmr)75tO zWF`UG#e*QIR~Pl9Cold3E(q&oS@7mn5cK3_7ZxE0Ay&Zl`OnJykgKi?wiZZ`ANHE!Axf-%o6qmJo-+iyC5iM(1?K-R{71oYcc2jm` zceO!ww}?-*#RYYK5D0=U%dtA>cH%4;l(ivmAg<+OT~mjUe5iQ+*K;N+5Pz{J&9lAO)0Ym|G0@GK=A5BC{X){=_zBP^|?#fy_&yzsc`~7~Y zZ5NC4}hAPWQ8YOweV^uQZkoWSkCX|j+=q3eioQ=yQ z3Z@TmqN5U&DGh;?6u6|9c80+z(OHLeS)6AAiwdl$QoUZlkEHE(3v`w*Zwp1^+>S(N zjh%$)>n!8Fl(6M(5pixJENSzcXKj8=9>w29Hc3!P8P0jy;Jhd;F8CerR@jmSPTk>}`fbVQv_r)adk-)4gJgyxT6 z8E@u&oU)~ssOf3^r5~q1!`mmTw>$?i%XNWch%RGG*3-5yknL)k(1oro>Un~CKS0LB zjgP2)Oi$W4ZZYu&)wM^@=X9<;E}w^X*Z-Q2F5jIatLYEB@W8JV&o7DHC_S2uJ9`ng ziXJZzPNky7_f74Guf02Rtk;%TtKVL{_Q78+CYXKz literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/betterend/textures/block/tenanea_leaves.png b/src/main/resources/assets/betterend/textures/block/tenanea_leaves.png index bcc87a6244ab676a44f0fc9a108fb56d8fdf4940..6ed37b3224d048d1430099ba867398847f4e2ae5 100644 GIT binary patch delta 733 zcmcaB&?7X#f{AVNMyp9o>?T&GW>yB~lP@!=z}f$pEL6;lOic|9%#3uCQw)-H(~?X~ zbS+bpO?1u7%#4zfj15gvEKN5@G5ax1zQJPVNQ`PFh2j#|vJ$KEjMO|^B_jhP16@Ny zT_dv)L!cWbPh@ePJc%{GK1tzv1p@<SrB%%TvLSMkg#?Atrb17EJoJ<0R5s_i`VFgN6TZJwF*r_$7!V&e7p1Ix>M z`s6GR-rRlt>7N^+|F--I++k7X{$W$p+5n@OBu zRP^s<{%gN=yPc0yGdG!{BzW$BX4U|l*_IC>(;&9a`f{F z#^P|Bg(o|Y)P3y;R59G(KRMxp*zrZRQS~jIHy^6{IT-Qm`?c9=x!*EL^#*}i6MH1) z-9E&|ulBXNpGmBr|H7+RT)gtqfp1%#wl%-5jJ6cv^PXGt?&VEQh1&m#j&oFxFWUR& z_v;WHyLTckn;sr|=X+;CjiR#SPQD6zt^279P4su($-UZfO4{|eh3JUjHH^8Z2MA7&FBrfoH_pZd~g zMX}%0oeJ|LwPjwq+){o1d1k$uNXwp*w@Vq`mv8o*%zwPpzVS`VgK4YYiC=C~%#Poa z5FL1B@2u)|tABsFseJS@H;=$gr-ynuPL3JYU)UAid6j%n%iP2O1fH&bF6*2UngGQp BOmhGL delta 651 zcmV;60(AY165SAxI06O3u{x3hlS~BZI{$th563#SaO{OpYd^lhdmw^99~ za`Qni-oGgzexX6vp6O(mGT-oJ{-NB3Mcz^sRK4(54|MUsUm7;EBBvcg9WL^!*Y%mtGQ&_+3@Af}^wXOoQza+U3rr zo6K{muV4|fOue1!<;nly z(VLCr2>EZM2kvj$P-){CLh$(#9h$Kek^mOU3g3-B60j%)K$# lcr=^Hh*8{#k~dGvfoQDMMdAV<9w#^@Q^lP$r>^%P^@MA!7ZV_X%8AL&U*AoQ_)& zn9>JlY&beIlu%|S6;UO^d-0yUga|Uw1$aJ_HXJD*B8t2cy7nGZ1YU%=lOdwd6U4{j z!+6BBAs+DYq{4749u$2HPm3(qjk7cpr05{U_(__PXkPM*c=<;lHCxrBk?133Ep!(m zQm$)B6qU>6d^x|*w38GgiXug`6w8tbK|0fh3-YAlbX6Fl&{1sNa&^p z&~UpdVphs@O($jE!dvzAzZ|McRnW@X>0&&pLcui5AZ`a?nW8^Sir5girkya&bfr+k z6-7J}@d_j04;|DE)yz4&JX7T{FbZ54B3PQGNroX=KEVVeT9jB}H|>{bx&)1*R#1Tp zwg)yz0x^-sHeS}I^`t#L9&|3-bzaeipBr|$fN+cAgKwQK#BnHq`)v7 zBlDsV5CSFLv|e#gBBHidEPB0RovaK-i?4TCUG>pTb>DynnyQUmOGk3C; zU%Pf?c4_U8pV~X$;95JLUMRe{{5Xe2+;va$TdNmNJlay|+$=OK^avlmUh{5!+ife2yE_9Db!ekqXgqXG TxpQsY+gM`*L($Xy6VLnuBB+ej literal 0 HcmV?d00001