From 387a430fde484a804f77e4109a858bcdf54bd37f Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Mon, 26 Apr 2021 21:51:53 +0300 Subject: [PATCH] Neon cactus growing (WIP) & additional textures --- .../ru/betterend/blocks/BlockProperties.java | 43 ++++++- .../ru/betterend/blocks/NeonCactusBlock.java | 121 +++++++++++++++++- .../mixin/common/TagLoaderMixin.java | 19 +-- .../world/features/NeonCactusFeature.java | 23 +++- .../world/features/WallScatterFeature.java | 3 +- .../betterend/world/generator/BiomeChunk.java | 22 ++-- .../betterend/blockstates/neon_cactus.json | 78 ++++++++--- .../models/block/neon_cactus_big_moss.json | 34 +++++ .../models/block/neon_cactus_big_sand.json | 34 +++++ .../models/block/neon_cactus_medium_moss.json | 58 +++++++++ .../models/block/neon_cactus_medium_sand.json | 58 +++++++++ .../models/block/neon_cactus_small_moss.json | 58 +++++++++ .../models/block/neon_cactus_small_sand.json | 58 +++++++++ .../textures/block/end_moss_side.png | Bin 645 -> 298 bytes .../betterend/textures/block/end_moss_top.png | Bin 720 -> 234 bytes .../block/neon_cactus_big_side_dust.png | Bin 0 -> 1834 bytes .../neon_cactus_big_side_dust_overlay.png | Bin 0 -> 1753 bytes .../block/neon_cactus_big_side_moss.png | Bin 0 -> 331 bytes .../neon_cactus_big_side_moss_overlay.png | Bin 0 -> 1765 bytes .../block/neon_cactus_medium_side_dust.png | Bin 0 -> 303 bytes .../neon_cactus_medium_side_dust_overlay.png | Bin 0 -> 164 bytes .../block/neon_cactus_medium_side_moss.png | Bin 0 -> 324 bytes .../neon_cactus_medium_side_moss_overlay.png | Bin 0 -> 185 bytes .../textures/block/neon_cactus_small_side.png | Bin 256 -> 257 bytes .../block/neon_cactus_small_side_dust.png | Bin 0 -> 282 bytes .../neon_cactus_small_side_dust_overlay.png | Bin 0 -> 157 bytes .../block/neon_cactus_small_side_moss.png | Bin 0 -> 304 bytes .../neon_cactus_small_side_moss_overlay.png | Bin 0 -> 186 bytes 28 files changed, 554 insertions(+), 55 deletions(-) create mode 100644 src/main/resources/assets/betterend/models/block/neon_cactus_big_moss.json create mode 100644 src/main/resources/assets/betterend/models/block/neon_cactus_big_sand.json create mode 100644 src/main/resources/assets/betterend/models/block/neon_cactus_medium_moss.json create mode 100644 src/main/resources/assets/betterend/models/block/neon_cactus_medium_sand.json create mode 100644 src/main/resources/assets/betterend/models/block/neon_cactus_small_moss.json create mode 100644 src/main/resources/assets/betterend/models/block/neon_cactus_small_sand.json create mode 100644 src/main/resources/assets/betterend/textures/block/neon_cactus_big_side_dust.png create mode 100644 src/main/resources/assets/betterend/textures/block/neon_cactus_big_side_dust_overlay.png create mode 100644 src/main/resources/assets/betterend/textures/block/neon_cactus_big_side_moss.png create mode 100644 src/main/resources/assets/betterend/textures/block/neon_cactus_big_side_moss_overlay.png create mode 100644 src/main/resources/assets/betterend/textures/block/neon_cactus_medium_side_dust.png create mode 100644 src/main/resources/assets/betterend/textures/block/neon_cactus_medium_side_dust_overlay.png create mode 100644 src/main/resources/assets/betterend/textures/block/neon_cactus_medium_side_moss.png create mode 100644 src/main/resources/assets/betterend/textures/block/neon_cactus_medium_side_moss_overlay.png create mode 100644 src/main/resources/assets/betterend/textures/block/neon_cactus_small_side_dust.png create mode 100644 src/main/resources/assets/betterend/textures/block/neon_cactus_small_side_dust_overlay.png create mode 100644 src/main/resources/assets/betterend/textures/block/neon_cactus_small_side_moss.png create mode 100644 src/main/resources/assets/betterend/textures/block/neon_cactus_small_side_moss_overlay.png diff --git a/src/main/java/ru/betterend/blocks/BlockProperties.java b/src/main/java/ru/betterend/blocks/BlockProperties.java index 5a7df101..3c0cbb0d 100644 --- a/src/main/java/ru/betterend/blocks/BlockProperties.java +++ b/src/main/java/ru/betterend/blocks/BlockProperties.java @@ -8,7 +8,8 @@ import ru.betterend.registry.EndPortals; public class BlockProperties { public static final EnumProperty HYDRALUX_SHAPE = EnumProperty.create("shape", HydraluxShape.class); - public final static EnumProperty PEDESTAL_STATE = EnumProperty.create("state", PedestalState.class); + public static final EnumProperty PEDESTAL_STATE = EnumProperty.create("state", PedestalState.class); + public static final EnumProperty CACTUS_BOTTOM = EnumProperty.create("bottom", CactusBottom.class); public static final EnumProperty TRIPLE_SHAPE = EnumProperty.create("shape", TripleShape.class); public static final EnumProperty PENTA_SHAPE = EnumProperty.create("shape", PentaShape.class); @@ -30,14 +31,16 @@ public class BlockProperties { public static final IntegerProperty AGE = IntegerProperty.create("age", 0, 3); public static enum TripleShape implements StringRepresentable { - TOP("top"), - MIDDLE("middle"), - BOTTOM("bottom"); + TOP("top", 0), + MIDDLE("middle", 1), + BOTTOM("bottom", 2); private final String name; + private final int index; - TripleShape(String name) { + TripleShape(String name, int index) { this.name = name; + this.index = index; } @Override @@ -49,6 +52,14 @@ public class BlockProperties { public String toString() { return name; } + + public int getIndex() { + return index; + } + + public static TripleShape fromIndex(int index) { + return index > 1 ? BOTTOM : index == 1 ? MIDDLE : TOP; + } } public static enum PedestalState implements StringRepresentable { @@ -162,4 +173,26 @@ public class BlockProperties { return light; } } + + public static enum CactusBottom implements StringRepresentable { + EMPTY("empty"), + SAND("sand"), + MOSS("moss"); + + private final String name; + + CactusBottom(String name) { + this.name = name; + } + + @Override + public String getSerializedName() { + return name; + } + + @Override + public String toString() { + return name; + } + } } diff --git a/src/main/java/ru/betterend/blocks/NeonCactusBlock.java b/src/main/java/ru/betterend/blocks/NeonCactusBlock.java index e526c390..e6f3dba5 100644 --- a/src/main/java/ru/betterend/blocks/NeonCactusBlock.java +++ b/src/main/java/ru/betterend/blocks/NeonCactusBlock.java @@ -1,13 +1,16 @@ package ru.betterend.blocks; import java.util.EnumMap; +import java.util.Random; import com.google.common.collect.Maps; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.core.BlockPos; +import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Direction.Axis; +import net.minecraft.server.level.ServerLevel; import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.LevelAccessor; @@ -27,14 +30,18 @@ import net.minecraft.world.level.material.Fluids; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; +import ru.betterend.blocks.BlockProperties.CactusBottom; import ru.betterend.blocks.BlockProperties.TripleShape; import ru.betterend.blocks.basis.BlockBaseNotFull; import ru.betterend.client.render.ERenderLayer; import ru.betterend.interfaces.IRenderTypeable; +import ru.betterend.registry.EndBlocks; +import ru.betterend.registry.EndTags; import ru.betterend.util.BlocksHelper; public class NeonCactusBlock extends BlockBaseNotFull implements SimpleWaterloggedBlock, IRenderTypeable { public static final EnumProperty SHAPE = BlockProperties.TRIPLE_SHAPE; + public static final EnumProperty CACTUS_BOTTOM = BlockProperties.CACTUS_BOTTOM; public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED; public static final DirectionProperty FACING = BlockStateProperties.FACING; @@ -44,20 +51,32 @@ public class NeonCactusBlock extends BlockBaseNotFull implements SimpleWaterlogg private static final EnumMap SMALL_SHAPES = Maps.newEnumMap(Axis.class); public NeonCactusBlock() { - super(FabricBlockSettings.copyOf(Blocks.CACTUS).luminance(15)); + super(FabricBlockSettings.copyOf(Blocks.CACTUS).luminance(15).randomTicks()); registerDefaultState(defaultBlockState().setValue(WATERLOGGED, false).setValue(FACING, Direction.UP).setValue(SHAPE, TripleShape.TOP)); } @Override protected void createBlockStateDefinition(StateDefinition.Builder stateManager) { - stateManager.add(SHAPE, WATERLOGGED, FACING); + stateManager.add(SHAPE, CACTUS_BOTTOM, WATERLOGGED, FACING); } @Override public BlockState getStateForPlacement(BlockPlaceContext ctx) { - LevelAccessor worldAccess = ctx.getLevel(); - BlockPos blockPos = ctx.getClickedPos(); - return this.defaultBlockState().setValue(WATERLOGGED, worldAccess.getFluidState(blockPos).getType() == Fluids.WATER).setValue(FACING, ctx.getClickedFace()); + LevelAccessor world = ctx.getLevel(); + BlockPos pos = ctx.getClickedPos(); + Direction dir = ctx.getClickedFace(); + BlockState down = world.getBlockState(pos.relative(dir.getOpposite())); + BlockState state = this.defaultBlockState().setValue(WATERLOGGED, world.getFluidState(pos).getType() == Fluids.WATER).setValue(FACING, ctx.getClickedFace()); + if (down.is(Blocks.END_STONE) || down.is(EndBlocks.ENDSTONE_DUST)) { + state = state.setValue(CACTUS_BOTTOM, CactusBottom.SAND); + } + else if (down.is(EndBlocks.END_MOSS)) { + state = state.setValue(CACTUS_BOTTOM, CactusBottom.MOSS); + } + else { + state = state.setValue(CACTUS_BOTTOM, CactusBottom.EMPTY); + } + return state; } @Override @@ -80,6 +99,17 @@ public class NeonCactusBlock extends BlockBaseNotFull implements SimpleWaterlogg if ((Boolean) state.getValue(WATERLOGGED)) { world.getLiquidTicks().scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(world)); } + Direction dir = state.getValue(FACING); + BlockState down = world.getBlockState(pos.relative(dir.getOpposite())); + if (down.is(Blocks.END_STONE) || down.is(EndBlocks.ENDSTONE_DUST)) { + state = state.setValue(CACTUS_BOTTOM, CactusBottom.SAND); + } + else if (down.is(EndBlocks.END_MOSS)) { + state = state.setValue(CACTUS_BOTTOM, CactusBottom.MOSS); + } + else { + state = state.setValue(CACTUS_BOTTOM, CactusBottom.EMPTY); + } return state; } @@ -106,6 +136,87 @@ public class NeonCactusBlock extends BlockBaseNotFull implements SimpleWaterlogg } } + @Override + public void randomTick(BlockState state, ServerLevel world, BlockPos pos, Random random) { + Direction dir = state.getValue(FACING); + if (!world.getBlockState(pos.relative(dir)).isAir() || world.getBlockState(pos.above()).is(this)) { + return; + } + int length = getLength(state, world, pos, 10); + if (length < 0 || length > 9) { + return; + } + int horizontal = getHorizontal(state, world, pos, 5); + if (horizontal > random.nextInt(2)) { + dir = Direction.UP; + if (!world.getBlockState(pos.above()).isAir()) { + return; + } + } + BlockState placement = state.setValue(SHAPE, TripleShape.TOP).setValue(CACTUS_BOTTOM, CactusBottom.EMPTY).setValue(WATERLOGGED, false).setValue(FACING, dir); + BlocksHelper.setWithoutUpdate(world, pos.relative(dir), placement); + mutateStem(placement, world, pos, 10); + } + + private int getLength(BlockState state, ServerLevel world, BlockPos pos, int max) { + int length = 0; + Direction dir = state.getValue(FACING).getOpposite(); + MutableBlockPos mut = new MutableBlockPos().set(pos); + for (int i = 0; i < max; i++) { + mut.move(dir); + state = world.getBlockState(mut); + if (!state.is(this)) { + if (!state.is(EndTags.END_GROUND)) { + length = -1; + } + break; + } + dir = state.getValue(FACING).getOpposite(); + length ++; + } + return length; + } + + private int getHorizontal(BlockState state, ServerLevel world, BlockPos pos, int max) { + int count = 0; + Direction dir = state.getValue(FACING).getOpposite(); + MutableBlockPos mut = new MutableBlockPos().set(pos); + for (int i = 0; i < max; i++) { + mut.move(dir); + state = world.getBlockState(mut); + if (!state.is(this)) { + break; + } + dir = state.getValue(FACING).getOpposite(); + if (dir.getStepY() != 0) { + break; + } + count ++; + } + return count; + } + + private void mutateStem(BlockState state, ServerLevel world, BlockPos pos, int max) { + Direction dir = state.getValue(FACING).getOpposite(); + MutableBlockPos mut = new MutableBlockPos().set(pos); + for (int i = 0; i < max; i++) { + mut.move(dir); + state = world.getBlockState(mut); + if (!state.is(this)) { + return; + } + int size = i * 3 / max; + int src = state.getValue(SHAPE).getIndex(); + if (src < size) { + TripleShape shape = TripleShape.fromIndex(size); + BlocksHelper.setWithoutUpdate(world, pos, state.setValue(SHAPE, shape)); + } + else { + return; + } + } + } + static { MEDIUM_SHAPES.put(Axis.X, Block.box(0, 2, 2, 16, 14, 14)); MEDIUM_SHAPES.put(Axis.Y, Block.box(2, 0, 2, 14, 16, 14)); diff --git a/src/main/java/ru/betterend/mixin/common/TagLoaderMixin.java b/src/main/java/ru/betterend/mixin/common/TagLoaderMixin.java index d398bd84..46b477ec 100644 --- a/src/main/java/ru/betterend/mixin/common/TagLoaderMixin.java +++ b/src/main/java/ru/betterend/mixin/common/TagLoaderMixin.java @@ -1,18 +1,19 @@ package ru.betterend.mixin.common; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.tags.Tag; -import net.minecraft.tags.TagLoader; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.ModifyArg; -import ru.betterend.util.TagHelper; - import java.util.Map; import java.util.concurrent.Executor; import java.util.function.Supplier; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.ModifyArg; + +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.Tag; +import net.minecraft.tags.TagLoader; +import ru.betterend.util.TagHelper; + @Mixin(TagLoader.class) public class TagLoaderMixin { @Shadow diff --git a/src/main/java/ru/betterend/world/features/NeonCactusFeature.java b/src/main/java/ru/betterend/world/features/NeonCactusFeature.java index 3bdb8c1d..2accf7f3 100644 --- a/src/main/java/ru/betterend/world/features/NeonCactusFeature.java +++ b/src/main/java/ru/betterend/world/features/NeonCactusFeature.java @@ -6,10 +6,13 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.Direction; 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.block.state.properties.BlockStateProperties; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import ru.betterend.blocks.BlockProperties; +import ru.betterend.blocks.BlockProperties.CactusBottom; import ru.betterend.blocks.BlockProperties.TripleShape; import ru.betterend.registry.EndBlocks; import ru.betterend.util.BlocksHelper; @@ -31,9 +34,23 @@ public class NeonCactusFeature extends DefaultFeature { break; } int size = (h - i) >> 2; - BlocksHelper.setWithUpdate(world, mut, - EndBlocks.NEON_CACTUS.defaultBlockState().setValue(BlockProperties.TRIPLE_SHAPE, getBySize(size)) - .setValue(BlockStateProperties.FACING, Direction.UP)); + BlockState state = EndBlocks.NEON_CACTUS.defaultBlockState().setValue(BlockProperties.TRIPLE_SHAPE, getBySize(size)).setValue(BlockStateProperties.FACING, Direction.UP); + if (i == 0) { + BlockState down = world.getBlockState(mut.below()); + if (down.is(Blocks.END_STONE) || down.is(EndBlocks.ENDSTONE_DUST)) { + state = state.setValue(BlockProperties.CACTUS_BOTTOM, CactusBottom.SAND); + } + else if (down.is(EndBlocks.END_MOSS)) { + state = state.setValue(BlockProperties.CACTUS_BOTTOM, CactusBottom.MOSS); + } + else { + state = state.setValue(BlockProperties.CACTUS_BOTTOM, CactusBottom.EMPTY); + } + } + else { + state = state.setValue(BlockProperties.CACTUS_BOTTOM, CactusBottom.EMPTY); + } + BlocksHelper.setWithUpdate(world, mut, state); if (i > 2 && i < (h - 1) && random.nextBoolean()) { int length = h - i - MHelper.randRange(1, 2, random); if (length > 0) { diff --git a/src/main/java/ru/betterend/world/features/WallScatterFeature.java b/src/main/java/ru/betterend/world/features/WallScatterFeature.java index 5563c1ed..977122bf 100644 --- a/src/main/java/ru/betterend/world/features/WallScatterFeature.java +++ b/src/main/java/ru/betterend/world/features/WallScatterFeature.java @@ -25,8 +25,7 @@ public abstract class WallScatterFeature extends DefaultFeature { public abstract void generate(WorldGenLevel world, Random random, BlockPos pos, Direction dir); @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos center, - NoneFeatureConfiguration featureConfig) { + public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos center, NoneFeatureConfiguration featureConfig) { int maxY = world.getHeight(Heightmap.Types.WORLD_SURFACE, center.getX(), center.getZ()); int minY = BlocksHelper.upRay(world, new BlockPos(center.getX(), 0, center.getZ()), maxY); if (maxY < 10 || maxY < minY) { diff --git a/src/main/java/ru/betterend/world/generator/BiomeChunk.java b/src/main/java/ru/betterend/world/generator/BiomeChunk.java index 96dd258f..3756eec9 100644 --- a/src/main/java/ru/betterend/world/generator/BiomeChunk.java +++ b/src/main/java/ru/betterend/world/generator/BiomeChunk.java @@ -4,36 +4,32 @@ import java.util.Random; import ru.betterend.world.biome.EndBiome; -public class BiomeChunk -{ +public class BiomeChunk { protected static final int WIDTH = 16; private static final int SM_WIDTH = WIDTH >> 1; private static final int MASK_OFFSET = SM_WIDTH - 1; protected static final int MASK_WIDTH = WIDTH - 1; - + private final EndBiome[][] biomes; - - public BiomeChunk(BiomeMap map, Random random, BiomePicker picker) - { + + public BiomeChunk(BiomeMap map, Random random, BiomePicker picker) { EndBiome[][] PreBio = new EndBiome[SM_WIDTH][SM_WIDTH]; biomes = new EndBiome[WIDTH][WIDTH]; - + for (int x = 0; x < SM_WIDTH; x++) for (int z = 0; z < SM_WIDTH; z++) PreBio[x][z] = picker.getBiome(random); - + for (int x = 0; x < WIDTH; x++) for (int z = 0; z < WIDTH; z++) biomes[x][z] = PreBio[offsetXZ(x, random)][offsetXZ(z, random)].getSubBiome(random); } - public EndBiome getBiome(int x, int z) - { + public EndBiome getBiome(int x, int z) { return biomes[x & MASK_WIDTH][z & MASK_WIDTH]; } - - private int offsetXZ(int x, Random random) - { + + private int offsetXZ(int x, Random random) { return ((x + random.nextInt(2)) >> 1) & MASK_OFFSET; } } diff --git a/src/main/resources/assets/betterend/blockstates/neon_cactus.json b/src/main/resources/assets/betterend/blockstates/neon_cactus.json index d72dcb4c..3bf98f48 100644 --- a/src/main/resources/assets/betterend/blockstates/neon_cactus.json +++ b/src/main/resources/assets/betterend/blockstates/neon_cactus.json @@ -1,24 +1,66 @@ { "variants": { - "shape=bottom,facing=up": { "model": "betterend:block/neon_cactus_big" }, - "shape=bottom,facing=down": { "model": "betterend:block/neon_cactus_big", "x": 180 }, - "shape=bottom,facing=north": { "model": "betterend:block/neon_cactus_big", "x": 90 }, - "shape=bottom,facing=south": { "model": "betterend:block/neon_cactus_big", "x": 90, "y": 180 }, - "shape=bottom,facing=east": { "model": "betterend:block/neon_cactus_big", "x": 90, "y": 90 }, - "shape=bottom,facing=west": { "model": "betterend:block/neon_cactus_big", "x": 90, "y": 270 }, + "bottom=empty,shape=bottom,facing=up": { "model": "betterend:block/neon_cactus_big" }, + "bottom=empty,shape=bottom,facing=down": { "model": "betterend:block/neon_cactus_big", "x": 180 }, + "bottom=empty,shape=bottom,facing=north": { "model": "betterend:block/neon_cactus_big", "x": 90 }, + "bottom=empty,shape=bottom,facing=south": { "model": "betterend:block/neon_cactus_big", "x": 90, "y": 180 }, + "bottom=empty,shape=bottom,facing=east": { "model": "betterend:block/neon_cactus_big", "x": 90, "y": 90 }, + "bottom=empty,shape=bottom,facing=west": { "model": "betterend:block/neon_cactus_big", "x": 90, "y": 270 }, - "shape=middle,facing=up": { "model": "betterend:block/neon_cactus_medium" }, - "shape=middle,facing=down": { "model": "betterend:block/neon_cactus_medium", "x": 180 }, - "shape=middle,facing=north": { "model": "betterend:block/neon_cactus_medium", "x": 90 }, - "shape=middle,facing=south": { "model": "betterend:block/neon_cactus_medium", "x": 90, "y": 180 }, - "shape=middle,facing=east": { "model": "betterend:block/neon_cactus_medium", "x": 90, "y": 90 }, - "shape=middle,facing=west": { "model": "betterend:block/neon_cactus_medium", "x": 90, "y": 270 }, + "bottom=sand,shape=bottom,facing=up": { "model": "betterend:block/neon_cactus_big_sand" }, + "bottom=sand,shape=bottom,facing=down": { "model": "betterend:block/neon_cactus_big_sand", "x": 180 }, + "bottom=sand,shape=bottom,facing=north": { "model": "betterend:block/neon_cactus_big_sand", "x": 90 }, + "bottom=sand,shape=bottom,facing=south": { "model": "betterend:block/neon_cactus_big_sand", "x": 90, "y": 180 }, + "bottom=sand,shape=bottom,facing=east": { "model": "betterend:block/neon_cactus_big_sand", "x": 90, "y": 90 }, + "bottom=sand,shape=bottom,facing=west": { "model": "betterend:block/neon_cactus_big_sand", "x": 90, "y": 270 }, - "shape=top,facing=up": { "model": "betterend:block/neon_cactus_small" }, - "shape=top,facing=down": { "model": "betterend:block/neon_cactus_small", "x": 180 }, - "shape=top,facing=north": { "model": "betterend:block/neon_cactus_small", "x": 90 }, - "shape=top,facing=south": { "model": "betterend:block/neon_cactus_small", "x": 90, "y": 180 }, - "shape=top,facing=east": { "model": "betterend:block/neon_cactus_small", "x": 90, "y": 90 }, - "shape=top,facing=west": { "model": "betterend:block/neon_cactus_small", "x": 90, "y": 270 } + "bottom=moss,shape=bottom,facing=up": { "model": "betterend:block/neon_cactus_big_moss" }, + "bottom=moss,shape=bottom,facing=down": { "model": "betterend:block/neon_cactus_big_moss", "x": 180 }, + "bottom=moss,shape=bottom,facing=north": { "model": "betterend:block/neon_cactus_big_moss", "x": 90 }, + "bottom=moss,shape=bottom,facing=south": { "model": "betterend:block/neon_cactus_big_moss", "x": 90, "y": 180 }, + "bottom=moss,shape=bottom,facing=east": { "model": "betterend:block/neon_cactus_big_moss", "x": 90, "y": 90 }, + "bottom=moss,shape=bottom,facing=west": { "model": "betterend:block/neon_cactus_big_moss", "x": 90, "y": 270 }, + + "bottom=empty,shape=middle,facing=up": { "model": "betterend:block/neon_cactus_medium" }, + "bottom=empty,shape=middle,facing=down": { "model": "betterend:block/neon_cactus_medium", "x": 180 }, + "bottom=empty,shape=middle,facing=north": { "model": "betterend:block/neon_cactus_medium", "x": 90 }, + "bottom=empty,shape=middle,facing=south": { "model": "betterend:block/neon_cactus_medium", "x": 90, "y": 180 }, + "bottom=empty,shape=middle,facing=east": { "model": "betterend:block/neon_cactus_medium", "x": 90, "y": 90 }, + "bottom=empty,shape=middle,facing=west": { "model": "betterend:block/neon_cactus_medium", "x": 90, "y": 270 }, + + "bottom=sand,shape=middle,facing=up": { "model": "betterend:block/neon_cactus_medium_sand" }, + "bottom=sand,shape=middle,facing=down": { "model": "betterend:block/neon_cactus_medium_sand", "x": 180 }, + "bottom=sand,shape=middle,facing=north": { "model": "betterend:block/neon_cactus_medium_sand", "x": 90 }, + "bottom=sand,shape=middle,facing=south": { "model": "betterend:block/neon_cactus_medium_sand", "x": 90, "y": 180 }, + "bottom=sand,shape=middle,facing=east": { "model": "betterend:block/neon_cactus_medium_sand", "x": 90, "y": 90 }, + "bottom=sand,shape=middle,facing=west": { "model": "betterend:block/neon_cactus_medium_sand", "x": 90, "y": 270 }, + + "bottom=moss,shape=middle,facing=up": { "model": "betterend:block/neon_cactus_medium_moss" }, + "bottom=moss,shape=middle,facing=down": { "model": "betterend:block/neon_cactus_medium_moss", "x": 180 }, + "bottom=moss,shape=middle,facing=north": { "model": "betterend:block/neon_cactus_medium_moss", "x": 90 }, + "bottom=moss,shape=middle,facing=south": { "model": "betterend:block/neon_cactus_medium_moss", "x": 90, "y": 180 }, + "bottom=moss,shape=middle,facing=east": { "model": "betterend:block/neon_cactus_medium_moss", "x": 90, "y": 90 }, + "bottom=moss,shape=middle,facing=west": { "model": "betterend:block/neon_cactus_medium_moss", "x": 90, "y": 270 }, + + "bottom=empty,shape=top,facing=up": { "model": "betterend:block/neon_cactus_small" }, + "bottom=empty,shape=top,facing=down": { "model": "betterend:block/neon_cactus_small", "x": 180 }, + "bottom=empty,shape=top,facing=north": { "model": "betterend:block/neon_cactus_small", "x": 90 }, + "bottom=empty,shape=top,facing=south": { "model": "betterend:block/neon_cactus_small", "x": 90, "y": 180 }, + "bottom=empty,shape=top,facing=east": { "model": "betterend:block/neon_cactus_small", "x": 90, "y": 90 }, + "bottom=empty,shape=top,facing=west": { "model": "betterend:block/neon_cactus_small", "x": 90, "y": 270 }, + + "bottom=sand,shape=top,facing=up": { "model": "betterend:block/neon_cactus_small_sand" }, + "bottom=sand,shape=top,facing=down": { "model": "betterend:block/neon_cactus_small_sand", "x": 180 }, + "bottom=sand,shape=top,facing=north": { "model": "betterend:block/neon_cactus_small_sand", "x": 90 }, + "bottom=sand,shape=top,facing=south": { "model": "betterend:block/neon_cactus_small_sand", "x": 90, "y": 180 }, + "bottom=sand,shape=top,facing=east": { "model": "betterend:block/neon_cactus_small_sand", "x": 90, "y": 90 }, + "bottom=sand,shape=top,facing=west": { "model": "betterend:block/neon_cactus_small_sand", "x": 90, "y": 270 }, + + "bottom=moss,shape=top,facing=up": { "model": "betterend:block/neon_cactus_small_moss" }, + "bottom=moss,shape=top,facing=down": { "model": "betterend:block/neon_cactus_small_moss", "x": 180 }, + "bottom=moss,shape=top,facing=north": { "model": "betterend:block/neon_cactus_small_moss", "x": 90 }, + "bottom=moss,shape=top,facing=south": { "model": "betterend:block/neon_cactus_small_moss", "x": 90, "y": 180 }, + "bottom=moss,shape=top,facing=east": { "model": "betterend:block/neon_cactus_small_moss", "x": 90, "y": 90 }, + "bottom=moss,shape=top,facing=west": { "model": "betterend:block/neon_cactus_small_moss", "x": 90, "y": 270 } } } diff --git a/src/main/resources/assets/betterend/models/block/neon_cactus_big_moss.json b/src/main/resources/assets/betterend/models/block/neon_cactus_big_moss.json new file mode 100644 index 00000000..2315eced --- /dev/null +++ b/src/main/resources/assets/betterend/models/block/neon_cactus_big_moss.json @@ -0,0 +1,34 @@ +{ + "parent": "block/block", + "textures": { + "end": "betterend:block/neon_cactus_big_top", + "side": "betterend:block/neon_cactus_big_side_moss", + "overlay": "betterend:block/neon_cactus_big_side_moss_overlay", + "particle": "#side" + }, + "elements": [ + { + "from": [ 0, 0, 0 ], + "to": [ 16, 16, 16 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#end", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#end", "cullface": "up" }, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "cullface": "north" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "cullface": "south" }, + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "cullface": "west" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "cullface": "east" } + } + }, + { + "from": [ 0, 0, 0 ], + "to": [ 16, 16, 16 ], + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#overlay", "cullface": "north" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#overlay", "cullface": "south" }, + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#overlay", "cullface": "west" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#overlay", "cullface": "east" } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/models/block/neon_cactus_big_sand.json b/src/main/resources/assets/betterend/models/block/neon_cactus_big_sand.json new file mode 100644 index 00000000..be4e3c1c --- /dev/null +++ b/src/main/resources/assets/betterend/models/block/neon_cactus_big_sand.json @@ -0,0 +1,34 @@ +{ + "parent": "block/block", + "textures": { + "end": "betterend:block/neon_cactus_big_top", + "side": "betterend:block/neon_cactus_big_side_dust", + "overlay": "betterend:block/neon_cactus_big_side_dust_overlay", + "particle": "#side" + }, + "elements": [ + { + "from": [ 0, 0, 0 ], + "to": [ 16, 16, 16 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#end", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#end", "cullface": "up" }, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "cullface": "north" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "cullface": "south" }, + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "cullface": "west" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "cullface": "east" } + } + }, + { + "from": [ 0, 0, 0 ], + "to": [ 16, 16, 16 ], + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#overlay", "cullface": "north" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#overlay", "cullface": "south" }, + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#overlay", "cullface": "west" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#overlay", "cullface": "east" } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/models/block/neon_cactus_medium_moss.json b/src/main/resources/assets/betterend/models/block/neon_cactus_medium_moss.json new file mode 100644 index 00000000..b939193c --- /dev/null +++ b/src/main/resources/assets/betterend/models/block/neon_cactus_medium_moss.json @@ -0,0 +1,58 @@ +{ + "__comment": "Designed by Paulevs with Cubik Studio - https://cubik.studio", + "textures": { + "particle": "betterend:block/neon_cactus_small_side", + "overlay": "betterend:block/neon_cactus_medium_side_moss_overlay", + "side": "betterend:block/neon_cactus_medium_side_moss", + "top": "betterend:block/neon_cactus_medium_top" + }, + "elements": [ + { + "__comment": "Box1", + "from": [ 2, -2, 2 ], + "to": [ 14, 14, 14 ], + "shade": false, + "faces": { + "down": { "uv": [ 4, 4, 12, 12 ], "texture": "#top" }, + "up": { "uv": [ 4, 4, 12, 12 ], "texture": "#top" }, + "north": { "uv": [ 2, 0, 14, 16 ], "texture": "#side" }, + "south": { "uv": [ 2, 0, 14, 16 ], "texture": "#side" }, + "west": { "uv": [ 2, 0, 14, 16 ], "texture": "#side" }, + "east": { "uv": [ 2, 0, 14, 16 ], "texture": "#side" } + } + }, + { + "__comment": "Box1", + "from": [ 2, -2, 2 ], + "to": [ 14, 14, 14 ], + "faces": { + "north": { "uv": [ 2, 0, 14, 16 ], "texture": "#overlay" }, + "south": { "uv": [ 2, 0, 14, 16 ], "texture": "#overlay" }, + "west": { "uv": [ 2, 0, 14, 16 ], "texture": "#overlay" }, + "east": { "uv": [ 2, 0, 14, 16 ], "texture": "#overlay" } + } + }, + { + "__comment": "PlaneX2", + "from": [ 0, -2, 0 ], + "to": [ 0.001, 14, 22.5 ], + "rotation": { "origin": [ 0, -2, 0 ], "axis": "y", "angle": 45 }, + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#side" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#side" } + } + }, + { + "__comment": "PlaneX2", + "from": [ 16, -2, 0 ], + "to": [ 16.001, 14, 22.5 ], + "rotation": { "origin": [ 16, -2, 0 ], "axis": "y", "angle": -45 }, + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#side" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#side" } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/models/block/neon_cactus_medium_sand.json b/src/main/resources/assets/betterend/models/block/neon_cactus_medium_sand.json new file mode 100644 index 00000000..7fe12992 --- /dev/null +++ b/src/main/resources/assets/betterend/models/block/neon_cactus_medium_sand.json @@ -0,0 +1,58 @@ +{ + "__comment": "Designed by Paulevs with Cubik Studio - https://cubik.studio", + "textures": { + "particle": "betterend:block/neon_cactus_small_side", + "overlay": "betterend:block/neon_cactus_medium_side_dust_overlay", + "side": "betterend:block/neon_cactus_medium_side_dust", + "top": "betterend:block/neon_cactus_medium_top" + }, + "elements": [ + { + "__comment": "Box1", + "from": [ 2, -2, 2 ], + "to": [ 14, 14, 14 ], + "shade": false, + "faces": { + "down": { "uv": [ 4, 4, 12, 12 ], "texture": "#top" }, + "up": { "uv": [ 4, 4, 12, 12 ], "texture": "#top" }, + "north": { "uv": [ 2, 0, 14, 16 ], "texture": "#side" }, + "south": { "uv": [ 2, 0, 14, 16 ], "texture": "#side" }, + "west": { "uv": [ 2, 0, 14, 16 ], "texture": "#side" }, + "east": { "uv": [ 2, 0, 14, 16 ], "texture": "#side" } + } + }, + { + "__comment": "Box1", + "from": [ 2, -2, 2 ], + "to": [ 14, 14, 14 ], + "faces": { + "north": { "uv": [ 2, 0, 14, 16 ], "texture": "#overlay" }, + "south": { "uv": [ 2, 0, 14, 16 ], "texture": "#overlay" }, + "west": { "uv": [ 2, 0, 14, 16 ], "texture": "#overlay" }, + "east": { "uv": [ 2, 0, 14, 16 ], "texture": "#overlay" } + } + }, + { + "__comment": "PlaneX2", + "from": [ 0, -2, 0 ], + "to": [ 0.001, 14, 22.5 ], + "rotation": { "origin": [ 0, -2, 0 ], "axis": "y", "angle": 45 }, + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#side" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#side" } + } + }, + { + "__comment": "PlaneX2", + "from": [ 16, -2, 0 ], + "to": [ 16.001, 14, 22.5 ], + "rotation": { "origin": [ 16, -2, 0 ], "axis": "y", "angle": -45 }, + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#side" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#side" } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/models/block/neon_cactus_small_moss.json b/src/main/resources/assets/betterend/models/block/neon_cactus_small_moss.json new file mode 100644 index 00000000..a5125f93 --- /dev/null +++ b/src/main/resources/assets/betterend/models/block/neon_cactus_small_moss.json @@ -0,0 +1,58 @@ +{ + "__comment": "Designed by Paulevs with Cubik Studio - https://cubik.studio", + "parent": "block/block", + "textures": { + "particle": "betterend:block/neon_cactus_small_side", + "overlay": "betterend:block/neon_cactus_small_side_moss_overlay", + "side": "betterend:block/neon_cactus_small_side", + "top": "betterend:block/neon_cactus_small_top" + }, + "elements": [ + { + "__comment": "Box1", + "from": [ 4, -4, 4 ], + "to": [ 12, 12, 12 ], + "shade": false, + "faces": { + "down": { "uv": [ 4, 4, 12, 12 ], "texture": "#top" }, + "up": { "uv": [ 4, 4, 12, 12 ], "texture": "#top" }, + "north": { "uv": [ 4, 0, 12, 16 ], "texture": "#side" }, + "south": { "uv": [ 4, 0, 12, 16 ], "texture": "#side" }, + "west": { "uv": [ 4, 0, 12, 16 ], "texture": "#side" }, + "east": { "uv": [ 4, 0, 12, 16 ], "texture": "#side" } + } + }, + { + "from": [ 4, -4, 4 ], + "to": [ 12, 12, 12 ], + "faces": { + "north": { "uv": [ 4, 0, 12, 16 ], "texture": "#overlay" }, + "south": { "uv": [ 4, 0, 12, 16 ], "texture": "#overlay" }, + "west": { "uv": [ 4, 0, 12, 16 ], "texture": "#overlay" }, + "east": { "uv": [ 4, 0, 12, 16 ], "texture": "#overlay" } + } + }, + { + "__comment": "PlaneX2", + "from": [ 0, -4, 0 ], + "to": [ 0.001, 12, 22.5 ], + "rotation": { "origin": [ 0, -4, 0 ], "axis": "y", "angle": 45 }, + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#side" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#side" } + } + }, + { + "__comment": "PlaneX2", + "from": [ 16, -4, 0 ], + "to": [ 16.001, 12, 22.5 ], + "rotation": { "origin": [ 16, -4, 0 ], "axis": "y", "angle": -45 }, + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#side" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#side" } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/models/block/neon_cactus_small_sand.json b/src/main/resources/assets/betterend/models/block/neon_cactus_small_sand.json new file mode 100644 index 00000000..24ed9f5f --- /dev/null +++ b/src/main/resources/assets/betterend/models/block/neon_cactus_small_sand.json @@ -0,0 +1,58 @@ +{ + "__comment": "Designed by Paulevs with Cubik Studio - https://cubik.studio", + "parent": "block/block", + "textures": { + "particle": "betterend:block/neon_cactus_small_side", + "overlay": "betterend:block/neon_cactus_small_side_dust_overlay", + "side": "betterend:block/neon_cactus_small_side_dust", + "top": "betterend:block/neon_cactus_small_top" + }, + "elements": [ + { + "__comment": "Box1", + "from": [ 4, -4, 4 ], + "to": [ 12, 12, 12 ], + "shade": false, + "faces": { + "down": { "uv": [ 4, 4, 12, 12 ], "texture": "#top" }, + "up": { "uv": [ 4, 4, 12, 12 ], "texture": "#top" }, + "north": { "uv": [ 4, 0, 12, 16 ], "texture": "#side" }, + "south": { "uv": [ 4, 0, 12, 16 ], "texture": "#side" }, + "west": { "uv": [ 4, 0, 12, 16 ], "texture": "#side" }, + "east": { "uv": [ 4, 0, 12, 16 ], "texture": "#side" } + } + }, + { + "from": [ 4, -4, 4 ], + "to": [ 12, 12, 12 ], + "faces": { + "north": { "uv": [ 4, 0, 12, 16 ], "texture": "#overlay" }, + "south": { "uv": [ 4, 0, 12, 16 ], "texture": "#overlay" }, + "west": { "uv": [ 4, 0, 12, 16 ], "texture": "#overlay" }, + "east": { "uv": [ 4, 0, 12, 16 ], "texture": "#overlay" } + } + }, + { + "__comment": "PlaneX2", + "from": [ 0, -4, 0 ], + "to": [ 0.001, 12, 22.5 ], + "rotation": { "origin": [ 0, -4, 0 ], "axis": "y", "angle": 45 }, + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#side" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#side" } + } + }, + { + "__comment": "PlaneX2", + "from": [ 16, -4, 0 ], + "to": [ 16.001, 12, 22.5 ], + "rotation": { "origin": [ 16, -4, 0 ], "axis": "y", "angle": -45 }, + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#side" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#side" } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/textures/block/end_moss_side.png b/src/main/resources/assets/betterend/textures/block/end_moss_side.png index 6a3288128c75ec0382abbc581ea3d145b3203aa1..cc0449f792d33e58f6d917324f58d5a9bb06a94a 100644 GIT binary patch delta 282 zcmV+#0pA4L}1^ z0001=Nkl9| z$};a#zZS5ts1)s2TR5WLY!%g7B5~ukdS8Fl=TjXuRIWZ>emnt$ZPY3ibPEr?Ll! z`r$WlMBV0wzNd#+d$8Y-+)|t`;qd@9YpWW!8&|Mz&d+h(T`f|dJtLga;N7MNk)A=us*d;OqpA00gyBaQ-$aXK4loPm# zqg4i+ R9QXhL002ovPDHLkV1i|PK575} diff --git a/src/main/resources/assets/betterend/textures/block/end_moss_top.png b/src/main/resources/assets/betterend/textures/block/end_moss_top.png index 38e28989c71e6b85fa5ccee5a141387cda261ed5..de6139a42ed669453070a82228b24d1a5d8b8916 100644 GIT binary patch delta 217 zcmV;~04D#?1?mBi8Gi!+001a04^sdD00DDSM?wIu&K&6g000$GOjJcFb#p0!gE5hm zIj*chy0l8dy-L>AdH>S*0001kNkl>mqJo>^fYSt122mal#@Yk&~tIJW*=K=wV;BfZhMPVrj{`+@%b7uX<*}@EE*A+ zOzpQf>a9(D2OPt3O$Ym>4o3yglVYn?HZ+8nGQVHGFkj}d7jqmV2+YVxAF3cf-#{FEW*9%pcR&K1ru{OIW;y6Ot?0CZTiyvn&o!4r$H6I?(!5{*p z#$MxZ{lYv{)yzyk-Q6Klv$--90v?dSQ*7x|M4~t)PJgGgzYn4--%Qr7q;OJ!0MaM$ zmq+UDt;wVx8D2pTIAH(~lpr8wWY0tsbw?FCX!bY^+Tm!DaYQ;7nrRJUOJcH)r z9JW&8_bb-d%3@K#Aa67XT42+H(E05YGgxGN(LAAt5~C3t21w-l^50+BRW2p9iwm^H p0`;Q)eksqR6KuFX^OD6(5INZTj~Jj3!-HsK;kL$=H8GH~Whvw`J-*wy&L3Y=3N$8&x|keIF_d!BRB%2!sM%XpJbK5#=^<*4>8o?-NkY3*7+Voz$h zk~iL!GHdhFlZEl@q`faDS?Wtfc|z$Qaa-F?ewexRgSH*-TsVCraH_iZvk-HXK6>%> z&o73nTDQ4Nu!e&tTDtc&KSww8-s#?yeQu*TWy_g$L*L)na{F7pbJR?P-&Wt;IOjd# z(yNz;4&QWV`@F5o5AY(eqEQ!kyk5I9?@=6c>Xj!ryMm%n1# zwRvS%#~nNEZWwzgJ*Ao&JFF$6F>MKLMSeX#_iA`&O4G!~quc3sbI&HWbq4p;x4w3) zb@RRbSEeUdR9t=wNo`6+&i|ae=BZ|?Grj5FH{Zt)DWlh$(8j=@9ciBitM+$gwJ(cp zU0E~u(!vF^5O>d)9ad)HxDXp7Z{Ug(k*nT)w{CT;V}EQJ?>7H*<;lvp6N_tQaYk19 z!NTO++Ce|8^ZlN%yZz~xb_`!V=H;79){g249a)brm_IkJ*-o{c-!&*UZF<_a*{Nld zZ+GW7zUungOf7CXba-_l*%SUwJ5w2F25U~W@0yt2Te)LIkuRyB?%ehHn={rTT5a3f zg7PI*<7_DnaWO}}7(!MpDz8Ex?J71Xj#$TJ5i&+2w literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/betterend/textures/block/neon_cactus_big_side_dust_overlay.png b/src/main/resources/assets/betterend/textures/block/neon_cactus_big_side_dust_overlay.png new file mode 100644 index 0000000000000000000000000000000000000000..ca8bb728f223e8d9fe3e578aec52753217820547 GIT binary patch literal 1753 zcmbVNPi)&%9Ckpf+Cfp-5Q;cZ&l3~>96vjDoLCE0mvkhkDODG#WnyA4?>#4`v7fQs zCMihmK#W!5#EAh14nty>4GHZu*w8>+Ktn}>3ox}H;J{&;U=k9O%5(mhu5_a!lH+Il zd*Ao{{`lwR$%!WicRsL_k`ln*>;D zOQlF-OE0z^N%+CoJPV_nkS)=Ex#bdRiuiQSLu728+1wjO;~F`Sz<_#XO6$EsP4+DF zxm;M7H2?6lnh9L8O?^ z3M}k|WnlwgsOxG*6R~PyQ8m?+2s5%Gnn_Isnw}y$)O-8$6wQUj4fl8Y98<(N{!xV$ z4d^<{gqf@WQPmk+MX#hqT|+3X5umDS+gQw zKlSI@H`NdJ@TtNbr~2`UH_ko!>4(346+flE7sop;tyTEzd@erx@pIRPKaZWf$9r)6 p*iu}2vu}Ce^ixYm`gXsv!dYh*ug8A9B!(ZK;@Cv~%z>jX{|%WKHU$6x literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/betterend/textures/block/neon_cactus_big_side_moss.png b/src/main/resources/assets/betterend/textures/block/neon_cactus_big_side_moss.png new file mode 100644 index 0000000000000000000000000000000000000000..3d9ea0d51a73dedbc682107c36c6cc251225d50f GIT binary patch literal 331 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~n*g5>S0Ei5 zSeuj5Q&zd6e!_{473WHJU5LDL@%ZuMSFc`u{P^+5j~`_clQc_pnj2(AirRS|CnIc!{n7f`MI7hjv*3LP5q+zSQI&gMPyC84*Y$; zt5of`qegA3OH9`4nalTd3#BS(+PF=QawwQs+4*mamOLZxCEhxheNm2^PU`&cQ#+C& z^;k$aO(SH<*LFR_)erclb*WgTO@AXI7y03si{|F`Yzy|svt3-|#N4-61@wzNsmhN} zUwm@X?`506vgli%RyxS}{q^;wX)kvu<=5#L92at9=Fr^xgS}xRr=WI{q#n?r44$rj JF6*2UngEr#jhO%d literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/betterend/textures/block/neon_cactus_big_side_moss_overlay.png b/src/main/resources/assets/betterend/textures/block/neon_cactus_big_side_moss_overlay.png new file mode 100644 index 0000000000000000000000000000000000000000..6415e7832d309b6336dfe34196b1c30833ad416c GIT binary patch literal 1765 zcmbVNUx*t;7*8pRRt_sF)I(v}zTBak{g-UAOVevENlj{Vp1HtX9|UJ-CdqQyo$c=C z-=XL!NYx5fd=ei7A3RZus1M$WEeQ40ini$aR8YAGK@mB@Cm;0NB)49#*Lt|Hnc11& z{J!7!XTCf)J@w$ozR`WLSZt(J%vWICAHKKjh2JsZ_8AxsO&_loV0`qECz|ARySMb@ zOP`-w`Z`#-bmF_qtE;PPYisN4>l+&z_abw=<&Q5uBcFLiKl@I0<-=p2esb*lwWU8^ zz5?g(3Mx}GvA?f(&Mrw=}O`O zPLbr4D5XSM6(re^G(*+7;lqP9kJOAx{^-yad}a7X5V(dYb~>GSM~ySDF3P&Di;^NL ziU0_~?>PbL3XXqplOa!i>{)JLF^3Bok;z&?h6kks7i>48b^KwNAYft_xuP7GLYMkL zf+L*U@|u0)1dFsuZR!L*VC4wwHdw&?2D=V*w0)HU2yM9>+1OEwZAT{jpwI?4h5^|T z?N@s)6)V(dEf3Q|8)O~~y>X44M^V7MDr3#fL``o>=5o0(F==jW)^Z5z_~Tp7&^!ug zhF2s-7Nmrr$W=u#WZg(A_e-iFNdst^5v$hQ2Gy!^(ttF}sjHw+H3S9dKfweWHRjm} ze70;(=KkY6yve^hWFpxYTJH__9@F+^gjZJ(nMvmyt}Ovjk!761R|9`J2#4mEM^?g*Iu z^bt;JmWeL3wkj`d8z5_tt9Ob!9V3`YTjrx!{(UmGBAfDAqf^@h|yn z+-hfEay+y9633Looj$YwHZsf%d&YFn``{`C@$XafuH>|?7ge3hq2QNr+%5K%w7Nw4 m+#`!+vX9?XfBv(hhB10MtGCnIWJ{pq7(8A5T-G@yGywq23x)vz literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/betterend/textures/block/neon_cactus_medium_side_dust_overlay.png b/src/main/resources/assets/betterend/textures/block/neon_cactus_medium_side_dust_overlay.png new file mode 100644 index 0000000000000000000000000000000000000000..264be42897b131c4a4750fee9773c52fddf87e66 GIT binary patch literal 164 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~{s5m4S0H_0 zOY@0ieV1;|e)N7t!>b?uKq1zWAirRS|3DyfK@DV*k*AAeh{V*ZU5%U!20Vw7zW$%B zu5F#vv{3cXe?gvo&x?+1@z**Ob=B2AHR#QauHg6sj9mX1qH-)$>wvl$JYD@<);T3K F0RU#hH=zIk literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/betterend/textures/block/neon_cactus_medium_side_moss.png b/src/main/resources/assets/betterend/textures/block/neon_cactus_medium_side_moss.png new file mode 100644 index 0000000000000000000000000000000000000000..e22c2e9aa54a93a79e11e13036d31dceb603bf2e GIT binary patch literal 324 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~n*g5>S0J4f znpKouT~jl=ZPJ1MRmZFLoQ%DC`uOqVSFc`u{P^+5j~`_clQc_VS)S0F8u zn50=+tl8LXIB|;Qx;2iwws;-d>viqwX`!qLpfqPmkY6yve<(0#ntcT*XzuCa7$PzC zYIh^&0RsW1TvOZc^LNN!QeCAWv+7HI=&6cqp{b{SOc7T-`uE0{mtD^1TXUYpo%4xP Xn#}N(U3|Y9&#DyDOp@RsKcWy^h?j}esg2i>9rgx0=ZdH?_b00>D%PDHLkV1faQJhuP< diff --git a/src/main/resources/assets/betterend/textures/block/neon_cactus_small_side_dust.png b/src/main/resources/assets/betterend/textures/block/neon_cactus_small_side_dust.png new file mode 100644 index 0000000000000000000000000000000000000000..e664cfe6260afd3da77682a8e14b67a7713ea618 GIT binary patch literal 282 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~g8-ipS0J4c z5nG;}+gRVzHD$x(HQVa-h2GSFc`u{P^+5j~@?gX+CkR@6yfLkKV7~jm=&U z)FV(5)!vlt2fU2w3Cxr^X$Uq zE5w$SwB6a7VtG(F^6tTMgGpr+G-; zs`sbIG|4`$h}4JGsgg22Z`+%q9g literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/betterend/textures/block/neon_cactus_small_side_dust_overlay.png b/src/main/resources/assets/betterend/textures/block/neon_cactus_small_side_dust_overlay.png new file mode 100644 index 0000000000000000000000000000000000000000..9a47ee1125ef2a95423b1c8f3cb16f3d4a61cbe7 GIT binary patch literal 157 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~{s5m4S0H_0 zOY@0ieV1;|e)N7t!>b?uKq1zWAirRS|3DyfK@DV*wx^3@h{V*Zof`!i6a)@&Z1{gB y>+w%zkEtv#|0`Cq7&Ey(d}a1(U%k|%!`$r543?UYPfiAEWAJqKb6Mw<&;$U`)igT* literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/betterend/textures/block/neon_cactus_small_side_moss.png b/src/main/resources/assets/betterend/textures/block/neon_cactus_small_side_moss.png new file mode 100644 index 0000000000000000000000000000000000000000..5b2b0586507f18624f655a80c69389ff66c55296 GIT binary patch literal 304 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~n*g5>S0J4c z5nG;}+gRVzHD$x(HQVa-h2GSFc`u{P^+5j~`_clQc_wLZsx icg8Px|GO`FvAu-=Yv^y4&?=y77(8A5T-G@yGywot*@o`` literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/betterend/textures/block/neon_cactus_small_side_moss_overlay.png b/src/main/resources/assets/betterend/textures/block/neon_cactus_small_side_moss_overlay.png new file mode 100644 index 0000000000000000000000000000000000000000..a296b22fbf1ba8a7948a7ee6db244cbc8fdb8e5c GIT binary patch literal 186 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~=>VS)S0F8u zn50=+tl8LXIB|;Qx;2iwws;-d>viqwX`!qLpfqPmkY6yve<(0#ntcT*XyNJN7$PzC zY?mV+g8|2(jz&NYp_}*N&$hYzS^LCbO>Buc%PaY=)DbEs}s;m|1Hb?O0-h=?D*ylh literal 0 HcmV?d00001