From 53ad8131103c888b271db5eadc6ff9b2ff070fc6 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Thu, 15 Oct 2020 14:18:28 +0300 Subject: [PATCH] Chorus models & fixes --- .../mixin/common/ChorusFlowerBlockMixin.java | 40 ++ .../mixin/common/ChorusPlantBlockMixin.java | 9 +- .../java/ru/betterend/util/BlocksHelper.java | 413 +++++++++--------- .../models/block/chorus_plant_flower.json | 50 +++ .../block/chorus_plant_flower_open.json | 175 ++++++++ .../block/chorus_plant_flower_bottom.png | Bin 0 -> 2592 bytes .../block/chorus_plant_flower_center.png | Bin 0 -> 2115 bytes .../block/chorus_plant_flower_fur.png | Bin 0 -> 2029 bytes .../block/chorus_plant_flower_petal.png | Bin 0 -> 1755 bytes .../block/chorus_plant_flower_side.png | Bin 0 -> 2383 bytes .../block/chorus_plant_flower_top.png | Bin 0 -> 2512 bytes .../minecraft/blockstates/chorus_flower.json | 22 + .../materialmaps/block/chorus_flower.json | 14 + 13 files changed, 513 insertions(+), 210 deletions(-) create mode 100644 src/main/resources/assets/betterend/models/block/chorus_plant_flower.json create mode 100644 src/main/resources/assets/betterend/models/block/chorus_plant_flower_open.json create mode 100644 src/main/resources/assets/betterend/textures/block/chorus_plant_flower_bottom.png create mode 100644 src/main/resources/assets/betterend/textures/block/chorus_plant_flower_center.png create mode 100644 src/main/resources/assets/betterend/textures/block/chorus_plant_flower_fur.png create mode 100644 src/main/resources/assets/betterend/textures/block/chorus_plant_flower_petal.png create mode 100644 src/main/resources/assets/betterend/textures/block/chorus_plant_flower_side.png create mode 100644 src/main/resources/assets/betterend/textures/block/chorus_plant_flower_top.png create mode 100644 src/main/resources/assets/minecraft/blockstates/chorus_flower.json create mode 100644 src/main/resources/assets/minecraft/materialmaps/block/chorus_flower.json diff --git a/src/main/java/ru/betterend/mixin/common/ChorusFlowerBlockMixin.java b/src/main/java/ru/betterend/mixin/common/ChorusFlowerBlockMixin.java index ae32e565..e5fe0ba8 100644 --- a/src/main/java/ru/betterend/mixin/common/ChorusFlowerBlockMixin.java +++ b/src/main/java/ru/betterend/mixin/common/ChorusFlowerBlockMixin.java @@ -1,18 +1,34 @@ package ru.betterend.mixin.common; +import java.util.Random; + +import org.jetbrains.annotations.Nullable; +import org.spongepowered.asm.mixin.Final; 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.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import net.minecraft.block.BlockState; import net.minecraft.block.ChorusFlowerBlock; +import net.minecraft.block.ChorusPlantBlock; +import net.minecraft.server.world.ServerWorld; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; +import net.minecraft.world.World; import net.minecraft.world.WorldView; import ru.betterend.registry.BlockRegistry; +import ru.betterend.registry.BlockTagRegistry; +import ru.betterend.util.BlocksHelper; @Mixin(ChorusFlowerBlock.class) public class ChorusFlowerBlockMixin { + @Shadow + @Final + private ChorusPlantBlock plantBlock; + @Inject(method = "canPlaceAt", at = @At("HEAD"), cancellable = true) private void canPlace(BlockState state, WorldView world, BlockPos pos, CallbackInfoReturnable info) { if (world.getBlockState(pos.down()).isOf(BlockRegistry.CHORUS_NYLIUM)) { @@ -20,4 +36,28 @@ public class ChorusFlowerBlockMixin { info.cancel(); } } + + @Inject(method = "randomTick", at = @At("HEAD"), cancellable = true) + private void onTick(BlockState state, ServerWorld world, BlockPos pos, Random random, CallbackInfo info) { + if (world.getBlockState(pos.down()).isIn(BlockTagRegistry.END_GROUND)) { + BlockPos up = pos.up(); + if (world.isAir(up) && up.getY() < 256) { + int i = state.get(ChorusFlowerBlock.AGE); + if (i < 5) { + this.grow(world, up, i + 1); + BlocksHelper.setWithoutUpdate(world, pos, plantBlock.getDefaultState().with(ChorusPlantBlock.UP, true).with(ChorusPlantBlock.DOWN, true).with(BlocksHelper.ROOTS, true)); + info.cancel(); + } + } + } + } + + @Shadow + private static boolean isSurroundedByAir(WorldView world, BlockPos pos, @Nullable Direction exceptDirection) { return false; } + + @Shadow + private void grow(World world, BlockPos pos, int age) {} + + @Shadow + private void die(World world, BlockPos pos) {} } diff --git a/src/main/java/ru/betterend/mixin/common/ChorusPlantBlockMixin.java b/src/main/java/ru/betterend/mixin/common/ChorusPlantBlockMixin.java index 56d9999d..c649d8c3 100644 --- a/src/main/java/ru/betterend/mixin/common/ChorusPlantBlockMixin.java +++ b/src/main/java/ru/betterend/mixin/common/ChorusPlantBlockMixin.java @@ -18,14 +18,13 @@ import net.minecraft.world.BlockView; import net.minecraft.world.WorldView; import ru.betterend.registry.BlockRegistry; import ru.betterend.registry.BlockTagRegistry; +import ru.betterend.util.BlocksHelper; @Mixin(ChorusPlantBlock.class) public class ChorusPlantBlockMixin { - private static final BooleanProperty ROOTS = BooleanProperty.of("roots"); - @Inject(method = "appendProperties", at = @At("TAIL")) private void addProperties(StateManager.Builder builder, CallbackInfo info) { - builder.add(ROOTS); + builder.add(BlocksHelper.ROOTS); } @Inject(method = "canPlaceAt", at = @At("HEAD"), cancellable = true) @@ -41,10 +40,10 @@ public class ChorusPlantBlockMixin { BlockState plant = info.getReturnValue(); if (plant.isOf(Blocks.CHORUS_PLANT)) { if (!plant.get(Properties.DOWN) && world.getBlockState(pos.down()).isIn(BlockTagRegistry.END_GROUND)) { - info.setReturnValue(plant.with(Properties.DOWN, true).with(ROOTS, true)); + info.setReturnValue(plant.with(Properties.DOWN, true).with(BlocksHelper.ROOTS, true)); } else { - info.setReturnValue(plant.with(ROOTS, false)); + info.setReturnValue(plant.with(BlocksHelper.ROOTS, false)); } } } diff --git a/src/main/java/ru/betterend/util/BlocksHelper.java b/src/main/java/ru/betterend/util/BlocksHelper.java index 47429d97..97594cac 100644 --- a/src/main/java/ru/betterend/util/BlocksHelper.java +++ b/src/main/java/ru/betterend/util/BlocksHelper.java @@ -1,205 +1,208 @@ -package ru.betterend.util; - -import java.util.HashSet; -import java.util.Iterator; -import java.util.Random; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; -import net.minecraft.block.FallingBlock; -import net.minecraft.state.property.Property; -import net.minecraft.tag.BlockTags; -import net.minecraft.util.BlockMirror; -import net.minecraft.util.BlockRotation; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.BlockPos.Mutable; -import net.minecraft.util.math.Direction; -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.registry.BlockTagRegistry; - -public class BlocksHelper { - public static final int FLAG_UPDATE_BLOCK = 1; - public static final int FLAG_SEND_CLIENT_CHANGES = 2; - public static final int FLAG_NO_RERENDER = 4; - public static final int FORSE_RERENDER = 8; - public static final int FLAG_IGNORE_OBSERVERS = 16; - - public static final int SET_SILENT = FLAG_UPDATE_BLOCK | FLAG_IGNORE_OBSERVERS | FLAG_SEND_CLIENT_CHANGES; - public static final Direction[] HORIZONTAL = makeHorizontal(); - - private static final Mutable POS = new Mutable(); - protected static final BlockState AIR = Blocks.AIR.getDefaultState(); - - private static final Vec3i[] OFFSETS = new Vec3i[] { - new Vec3i(-1, -1, -1), new Vec3i(-1, -1, 0), new Vec3i(-1, -1, 1), - new Vec3i(-1, 0, -1), new Vec3i(-1, 0, 0), new Vec3i(-1, 0, 1), - new Vec3i(-1, 1, -1), new Vec3i(-1, 1, 0), new Vec3i(-1, 1, 1), - - new Vec3i(0, -1, -1), new Vec3i(0, -1, 0), new Vec3i(0, -1, 1), - new Vec3i(0, 0, -1), new Vec3i(0, 0, 0), new Vec3i(0, 0, 1), - new Vec3i(0, 1, -1), new Vec3i(0, 1, 0), new Vec3i(0, 1, 1), - - new Vec3i(1, -1, -1), new Vec3i(1, -1, 0), new Vec3i(1, -1, 1), - new Vec3i(1, 0, -1), new Vec3i(1, 0, 0), new Vec3i(1, 0, 1), - new Vec3i(1, 1, -1), new Vec3i(1, 1, 0), new Vec3i(1, 1, 1) - }; - - public static void setWithoutUpdate(WorldAccess world, BlockPos pos, BlockState state) { - world.setBlockState(pos, state, SET_SILENT); - } - - public static void setWithoutUpdate(WorldAccess world, BlockPos pos, Block block) { - world.setBlockState(pos, block.getDefaultState(), SET_SILENT); - } - - public static int upRay(WorldAccess world, BlockPos pos, int maxDist) { - int length = 0; - for (int j = 1; j < maxDist && (world.isAir(pos.up(j))); j++) - length++; - return length; - } - - public static int downRay(WorldAccess world, BlockPos pos, int maxDist) { - int length = 0; - for (int j = 1; j < maxDist && (world.isAir(pos.down(j))); j++) - length++; - return length; - } - - public static int downRayRep(WorldAccess world, BlockPos pos, int maxDist) { - POS.set(pos); - for (int j = 1; j < maxDist && (world.getBlockState(POS)).getMaterial().isReplaceable(); j++) - { - POS.setY(POS.getY() - 1); - } - return pos.getY() - POS.getY(); - } - - public static BlockState rotateHorizontal(BlockState state, BlockRotation rotation, Property facing) { - return (BlockState) state.with(facing, rotation.rotate((Direction) state.get(facing))); - } - - public static BlockState mirrorHorizontal(BlockState state, BlockMirror mirror, Property facing) { - return state.rotate(mirror.getRotation((Direction) state.get(facing))); - } - - public static int getLengthDown(WorldAccess world, BlockPos pos, Block block) { - int count = 1; - while (world.getBlockState(pos.down(count)).getBlock() == block) - count++; - return count; - } - - public static void cover(WorldAccess world, BlockPos center, Block ground, BlockState cover, int radius, Random random) { - HashSet points = new HashSet(); - HashSet points2 = new HashSet(); - if (world.getBlockState(center).getBlock() == ground) { - points.add(center); - points2.add(center); - for (int i = 0; i < radius; i++) { - Iterator iterator = points.iterator(); - while (iterator.hasNext()) { - BlockPos pos = iterator.next(); - for (Vec3i offset : OFFSETS) { - if (random.nextBoolean()) { - BlockPos pos2 = pos.add(offset); - if (random.nextBoolean() && world.getBlockState(pos2).getBlock() == ground - && !points.contains(pos2)) - points2.add(pos2); - } - } - } - points.addAll(points2); - points2.clear(); - } - Iterator iterator = points.iterator(); - while (iterator.hasNext()) { - BlockPos pos = iterator.next(); - BlocksHelper.setWithoutUpdate(world, pos, cover); - } - } - } - - public static void fixBlocks(WorldAccess world, BlockPos start, BlockPos end) { - BlockState state; - for (int x = start.getX(); x <= end.getX(); x++) { - POS.setX(x); - for (int z = start.getZ(); z <= end.getZ(); z++) { - POS.setZ(z); - for (int y = start.getY(); y <= end.getY(); y++) { - POS.setY(y); - state = world.getBlockState(POS); - // Falling blocks - if (state.getBlock() instanceof FallingBlock) { - BlockState falling = state; - - POS.setY(POS.getY() - 1); - state = world.getBlockState(POS); - - int ray = downRayRep(world, POS.toImmutable(), 64); - if (ray > 32) { - BlocksHelper.setWithoutUpdate(world, POS, Blocks.END_STONE.getDefaultState()); - if (world.getRandom().nextBoolean()) { - POS.setY(POS.getY() - 1); - state = world.getBlockState(POS); - BlocksHelper.setWithoutUpdate(world, POS, Blocks.END_STONE.getDefaultState()); - } - } - else { - POS.setY(y); - BlocksHelper.setWithoutUpdate(world, POS, AIR); - - POS.setY(y - ray); - BlocksHelper.setWithoutUpdate(world, POS, falling); - } - } - // Blocks without support - else if (!state.canPlaceAt(world, POS)) { - // Blue Vine - if (state.getBlock() instanceof BlockBlueVine) { - while (!state.canPlaceAt(world, POS)) { - BlocksHelper.setWithoutUpdate(world, POS, AIR); - for (Direction dir : HORIZONTAL) { - BlockPos p = POS.offset(dir).up(); - state = world.getBlockState(p); - if (state.getBlock() instanceof BlockGlowingFur) { - BlocksHelper.setWithoutUpdate(world, p, AIR); - } - } - POS.setY(POS.getY() + 1); - state = world.getBlockState(POS); - } - } - // Double plants - if (state.getBlock() instanceof BlockDoublePlant) { - BlocksHelper.setWithoutUpdate(world, POS, AIR); - POS.setY(POS.getY() + 1); - BlocksHelper.setWithoutUpdate(world, POS, AIR); - } - // Other blocks - else { - BlocksHelper.setWithoutUpdate(world, POS, AIR); - } - } - } - } - } - } - - public static boolean isEndNylium(Block block) { - return block.isIn(BlockTags.NYLIUM) && block.isIn(BlockTagRegistry.END_GROUND); - } - - public static boolean isEndNylium(BlockState state) { - return isEndNylium(state.getBlock()); - } - - public static Direction[] makeHorizontal() { - return new Direction[] { Direction.NORTH, Direction.SOUTH, Direction.EAST, Direction.WEST }; - } -} +package ru.betterend.util; + +import java.util.HashSet; +import java.util.Iterator; +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.block.FallingBlock; +import net.minecraft.state.property.BooleanProperty; +import net.minecraft.state.property.Property; +import net.minecraft.tag.BlockTags; +import net.minecraft.util.BlockMirror; +import net.minecraft.util.BlockRotation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockPos.Mutable; +import net.minecraft.util.math.Direction; +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.registry.BlockTagRegistry; + +public class BlocksHelper { + public static final BooleanProperty ROOTS = BooleanProperty.of("roots"); + + public static final int FLAG_UPDATE_BLOCK = 1; + public static final int FLAG_SEND_CLIENT_CHANGES = 2; + public static final int FLAG_NO_RERENDER = 4; + public static final int FORSE_RERENDER = 8; + public static final int FLAG_IGNORE_OBSERVERS = 16; + + public static final int SET_SILENT = FLAG_UPDATE_BLOCK | FLAG_IGNORE_OBSERVERS | FLAG_SEND_CLIENT_CHANGES; + public static final Direction[] HORIZONTAL = makeHorizontal(); + + private static final Mutable POS = new Mutable(); + protected static final BlockState AIR = Blocks.AIR.getDefaultState(); + + private static final Vec3i[] OFFSETS = new Vec3i[] { + new Vec3i(-1, -1, -1), new Vec3i(-1, -1, 0), new Vec3i(-1, -1, 1), + new Vec3i(-1, 0, -1), new Vec3i(-1, 0, 0), new Vec3i(-1, 0, 1), + new Vec3i(-1, 1, -1), new Vec3i(-1, 1, 0), new Vec3i(-1, 1, 1), + + new Vec3i(0, -1, -1), new Vec3i(0, -1, 0), new Vec3i(0, -1, 1), + new Vec3i(0, 0, -1), new Vec3i(0, 0, 0), new Vec3i(0, 0, 1), + new Vec3i(0, 1, -1), new Vec3i(0, 1, 0), new Vec3i(0, 1, 1), + + new Vec3i(1, -1, -1), new Vec3i(1, -1, 0), new Vec3i(1, -1, 1), + new Vec3i(1, 0, -1), new Vec3i(1, 0, 0), new Vec3i(1, 0, 1), + new Vec3i(1, 1, -1), new Vec3i(1, 1, 0), new Vec3i(1, 1, 1) + }; + + public static void setWithoutUpdate(WorldAccess world, BlockPos pos, BlockState state) { + world.setBlockState(pos, state, SET_SILENT); + } + + public static void setWithoutUpdate(WorldAccess world, BlockPos pos, Block block) { + world.setBlockState(pos, block.getDefaultState(), SET_SILENT); + } + + public static int upRay(WorldAccess world, BlockPos pos, int maxDist) { + int length = 0; + for (int j = 1; j < maxDist && (world.isAir(pos.up(j))); j++) + length++; + return length; + } + + public static int downRay(WorldAccess world, BlockPos pos, int maxDist) { + int length = 0; + for (int j = 1; j < maxDist && (world.isAir(pos.down(j))); j++) + length++; + return length; + } + + public static int downRayRep(WorldAccess world, BlockPos pos, int maxDist) { + POS.set(pos); + for (int j = 1; j < maxDist && (world.getBlockState(POS)).getMaterial().isReplaceable(); j++) + { + POS.setY(POS.getY() - 1); + } + return pos.getY() - POS.getY(); + } + + public static BlockState rotateHorizontal(BlockState state, BlockRotation rotation, Property facing) { + return (BlockState) state.with(facing, rotation.rotate((Direction) state.get(facing))); + } + + public static BlockState mirrorHorizontal(BlockState state, BlockMirror mirror, Property facing) { + return state.rotate(mirror.getRotation((Direction) state.get(facing))); + } + + public static int getLengthDown(WorldAccess world, BlockPos pos, Block block) { + int count = 1; + while (world.getBlockState(pos.down(count)).getBlock() == block) + count++; + return count; + } + + public static void cover(WorldAccess world, BlockPos center, Block ground, BlockState cover, int radius, Random random) { + HashSet points = new HashSet(); + HashSet points2 = new HashSet(); + if (world.getBlockState(center).getBlock() == ground) { + points.add(center); + points2.add(center); + for (int i = 0; i < radius; i++) { + Iterator iterator = points.iterator(); + while (iterator.hasNext()) { + BlockPos pos = iterator.next(); + for (Vec3i offset : OFFSETS) { + if (random.nextBoolean()) { + BlockPos pos2 = pos.add(offset); + if (random.nextBoolean() && world.getBlockState(pos2).getBlock() == ground + && !points.contains(pos2)) + points2.add(pos2); + } + } + } + points.addAll(points2); + points2.clear(); + } + Iterator iterator = points.iterator(); + while (iterator.hasNext()) { + BlockPos pos = iterator.next(); + BlocksHelper.setWithoutUpdate(world, pos, cover); + } + } + } + + public static void fixBlocks(WorldAccess world, BlockPos start, BlockPos end) { + BlockState state; + for (int x = start.getX(); x <= end.getX(); x++) { + POS.setX(x); + for (int z = start.getZ(); z <= end.getZ(); z++) { + POS.setZ(z); + for (int y = start.getY(); y <= end.getY(); y++) { + POS.setY(y); + state = world.getBlockState(POS); + // Falling blocks + if (state.getBlock() instanceof FallingBlock) { + BlockState falling = state; + + POS.setY(POS.getY() - 1); + state = world.getBlockState(POS); + + int ray = downRayRep(world, POS.toImmutable(), 64); + if (ray > 32) { + BlocksHelper.setWithoutUpdate(world, POS, Blocks.END_STONE.getDefaultState()); + if (world.getRandom().nextBoolean()) { + POS.setY(POS.getY() - 1); + state = world.getBlockState(POS); + BlocksHelper.setWithoutUpdate(world, POS, Blocks.END_STONE.getDefaultState()); + } + } + else { + POS.setY(y); + BlocksHelper.setWithoutUpdate(world, POS, AIR); + + POS.setY(y - ray); + BlocksHelper.setWithoutUpdate(world, POS, falling); + } + } + // Blocks without support + else if (!state.canPlaceAt(world, POS)) { + // Blue Vine + if (state.getBlock() instanceof BlockBlueVine) { + while (!state.canPlaceAt(world, POS)) { + BlocksHelper.setWithoutUpdate(world, POS, AIR); + for (Direction dir : HORIZONTAL) { + BlockPos p = POS.offset(dir).up(); + state = world.getBlockState(p); + if (state.getBlock() instanceof BlockGlowingFur) { + BlocksHelper.setWithoutUpdate(world, p, AIR); + } + } + POS.setY(POS.getY() + 1); + state = world.getBlockState(POS); + } + } + // Double plants + if (state.getBlock() instanceof BlockDoublePlant) { + BlocksHelper.setWithoutUpdate(world, POS, AIR); + POS.setY(POS.getY() + 1); + BlocksHelper.setWithoutUpdate(world, POS, AIR); + } + // Other blocks + else { + BlocksHelper.setWithoutUpdate(world, POS, AIR); + } + } + } + } + } + } + + public static boolean isEndNylium(Block block) { + return block.isIn(BlockTags.NYLIUM) && block.isIn(BlockTagRegistry.END_GROUND); + } + + public static boolean isEndNylium(BlockState state) { + return isEndNylium(state.getBlock()); + } + + public static Direction[] makeHorizontal() { + return new Direction[] { Direction.NORTH, Direction.SOUTH, Direction.EAST, Direction.WEST }; + } +} diff --git a/src/main/resources/assets/betterend/models/block/chorus_plant_flower.json b/src/main/resources/assets/betterend/models/block/chorus_plant_flower.json new file mode 100644 index 00000000..370332e0 --- /dev/null +++ b/src/main/resources/assets/betterend/models/block/chorus_plant_flower.json @@ -0,0 +1,50 @@ +{ + "__comment": "Designed by Paulevs with Cubik Studio - https://cubik.studio", + "textures": { + "particle": "betterend:block/chorus_plant_flower_side", + "side": "betterend:block/chorus_plant_flower_side", + "top": "betterend:block/chorus_plant_flower_top", + "bottom": "betterend:block/chorus_plant_flower_bottom" + }, + "elements": [ + { + "__comment": "Box1", + "from": [ 0, 2, 2 ], + "to": [ 16, 14, 14 ], + "faces": { + "down": { "uv": [ 0, 2, 16, 14 ], "texture": "#bottom" }, + "up": { "uv": [ 0, 2, 16, 14 ], "texture": "#top" }, + "north": { "uv": [ 0, 2, 16, 14 ], "texture": "#side" }, + "south": { "uv": [ 0, 2, 16, 14 ], "texture": "#side" }, + "west": { "uv": [ 2, 2, 14, 14 ], "texture": "#side" }, + "east": { "uv": [ 2, 2, 14, 14 ], "texture": "#side" } + } + }, + { + "__comment": "Box1", + "from": [ 2, 2, 0 ], + "to": [ 14, 14, 16 ], + "faces": { + "down": { "uv": [ 2, 0, 14, 16 ], "texture": "#bottom" }, + "up": { "uv": [ 2, 0, 14, 16 ], "texture": "#top" }, + "north": { "uv": [ 2, 2, 14, 14 ], "texture": "#side" }, + "south": { "uv": [ 2, 2, 14, 14 ], "texture": "#side" }, + "west": { "uv": [ 0, 2, 16, 14 ], "texture": "#side" }, + "east": { "uv": [ 0, 2, 16, 14 ], "texture": "#side" } + } + }, + { + "__comment": "Box1", + "from": [ 2, 0, 2 ], + "to": [ 14, 16, 14 ], + "faces": { + "down": { "uv": [ 2, 2, 14, 14 ], "texture": "#bottom" }, + "up": { "uv": [ 2, 2, 14, 14 ], "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" } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/models/block/chorus_plant_flower_open.json b/src/main/resources/assets/betterend/models/block/chorus_plant_flower_open.json new file mode 100644 index 00000000..83fdaf4f --- /dev/null +++ b/src/main/resources/assets/betterend/models/block/chorus_plant_flower_open.json @@ -0,0 +1,175 @@ +{ + "__comment": "Designed by Paulevs with Cubik Studio - https://cubik.studio", + "textures": { + "particle": "betterend:block/chorus_plant_flower_petal", + "texture": "betterend:block/chorus_plant_flower_petal", + "center": "betterend:block/chorus_plant_flower_center", + "texture1": "betterend:block/chorus_plant_flower_fur" + }, + "elements": [ + { + "__comment": "Box1", + "from": [ 4, 0, 4 ], + "to": [ 12, 2, 12 ], + "faces": { + "down": { "uv": [ 0, 8, 8, 16 ], "texture": "#center" }, + "up": { "uv": [ 0, 0, 8, 8 ], "texture": "#center" }, + "north": { "uv": [ 8, 14, 16, 16 ], "texture": "#center" }, + "south": { "uv": [ 8, 14, 16, 16 ], "texture": "#center" }, + "west": { "uv": [ 8, 14, 16, 16 ], "texture": "#center" }, + "east": { "uv": [ 8, 14, 16, 16 ], "texture": "#center" } + } + }, + { + "__comment": "PlaneY2", + "from": [ 4.5, 1.125, 16 ], + "to": [ 20.5, 1.126, 32 ], + "rotation": { "origin": [ 4.5, 1.125, 16 ], "axis": "y", "angle": 45 }, + "shade": false, + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "rotation": 180 } + } + }, + { + "__comment": "PlaneY2", + "from": [ 0, 1.25, 4.5 ], + "to": [ 16, 1.251, 20.5 ], + "rotation": { "origin": [ 0, 1.25, 4.5 ], "axis": "y", "angle": -45 }, + "shade": false, + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "rotation": 180 } + } + }, + { + "__comment": "PlaneY2", + "from": [ -4.5, 1.375, -16 ], + "to": [ 11.5, 1.376, 0 ], + "rotation": { "origin": [ 11.5, 1.375, 0 ], "axis": "y", "angle": 45 }, + "shade": false, + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "rotation": 180 }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" } + } + }, + { + "__comment": "PlaneY2", + "from": [ 0, 1, -4.5 ], + "to": [ 16, 1.001, 11.5 ], + "rotation": { "origin": [ 16, 1, 11.5 ], "axis": "y", "angle": -45 }, + "shade": false, + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "rotation": 180 }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" } + } + }, + { + "__comment": "PlaneX6", + "from": [ 11, 0.999, 0.5 ], + "to": [ 20, 0.9999999, 16.5 ], + "rotation": { "origin": [ 11, 1, 0.5 ], "axis": "z", "angle": 22.5 }, + "shade": false, + "faces": { + "down": { "uv": [ 0, 7, 16, 16 ], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [ 16, 16, 0, 7 ], "texture": "#texture", "rotation": 270 } + } + }, + { + "__comment": "PlaneX6", + "from": [ 19.25, 4.374, 0.5 ], + "to": [ 28.25, 4.375, 16.5 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 0, 16, 9 ], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [ 16, 9, 0, 0 ], "texture": "#texture", "rotation": 270 } + } + }, + { + "__comment": "PlaneY11", + "from": [ -3, 0.999, 0 ], + "to": [ 5, 0.9999999, 16 ], + "rotation": { "origin": [ 5, 1, 0 ], "axis": "z", "angle": -22.5 }, + "shade": false, + "faces": { + "down": { "uv": [ 0, 8, 16, 16 ], "texture": "#texture", "rotation": 270 }, + "up": { "uv": [ 0, 8, 16, 16 ], "texture": "#texture", "rotation": 270 } + } + }, + { + "__comment": "PlaneY11", + "from": [ -10.375, 3.999, 0 ], + "to": [ -2.375, 4, 16 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 0, 16, 8 ], "texture": "#texture", "rotation": 270 }, + "up": { "uv": [ 0, 0, 16, 8 ], "texture": "#texture", "rotation": 270 } + } + }, + { + "__comment": "PlaneY13", + "from": [ -0.5, 1, 11 ], + "to": [ 15.5, 1.001, 20 ], + "rotation": { "origin": [ -0.5, 1, 11 ], "axis": "x", "angle": -22.5 }, + "shade": false, + "faces": { + "down": { "uv": [ 0, 7, 16, 16 ], "texture": "#texture" }, + "up": { "uv": [ 0, 7, 16, 16 ], "texture": "#texture", "rotation": 180 } + } + }, + { + "__comment": "PlaneY13", + "from": [ -0.5, 4.5, 19.25 ], + "to": [ 15.5, 4.501, 28.25 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 0, 16, 9 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 9 ], "texture": "#texture", "rotation": 180 } + } + }, + { + "__comment": "PlaneY18", + "from": [ 1, 0.999, -4 ], + "to": [ 17, 0.9999999, 5 ], + "rotation": { "origin": [ 1, 1, 5 ], "axis": "x", "angle": 22.5 }, + "shade": false, + "faces": { + "down": { "uv": [ 0, 8, 16, 16 ], "texture": "#texture", "rotation": 180 }, + "up": { "uv": [ 0, 8, 16, 16 ], "texture": "#texture" } + } + }, + { + "__comment": "PlaneY18", + "from": [ 1, 4.374, -12.25 ], + "to": [ 17, 4.375, -3.25 ], + "rotation": { "origin": [ 1, 4.375, -3.25 ], "axis": "x", "angle": 0 }, + "shade": false, + "faces": { + "down": { "uv": [ 0, 0, 16, 8 ], "texture": "#texture", "rotation": 180 }, + "up": { "uv": [ 0, 0, 16, 8 ], "texture": "#texture" } + } + }, + { + "__comment": "PlaneX20", + "from": [ 2, 1, 2 ], + "to": [ 2.001, 8, 18 ], + "rotation": { "origin": [ 2, 1, 2 ], "axis": "y", "angle": 45 }, + "shade": false, + "faces": { + "west": { "uv": [ 0, 9, 16, 16 ], "texture": "#texture1" }, + "east": { "uv": [ 0, 9, 16, 16 ], "texture": "#texture1" } + } + }, + { + "__comment": "PlaneX20", + "from": [ 14, 1, 2 ], + "to": [ 14.001, 8, 18 ], + "rotation": { "origin": [ 14, 1, 2 ], "axis": "y", "angle": -45 }, + "shade": false, + "faces": { + "west": { "uv": [ 0, 9, 16, 16 ], "texture": "#texture1" }, + "east": { "uv": [ 0, 9, 16, 16 ], "texture": "#texture1" } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/textures/block/chorus_plant_flower_bottom.png b/src/main/resources/assets/betterend/textures/block/chorus_plant_flower_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..f1113227e3641319a48ecdde862d729efc463619 GIT binary patch literal 2592 zcmb_e4RjM#7LKC8whMLzEYz}$LzkbG$^0jov7wZv*Z?V|ZA$G5`ZDv9j7>7>%(O{s z;jC3bML4=Ea26HW7SUyur2@rW6cwxdRs?Oug9-{RpzNWZBD$i7eUm1U-L1&+IKOXZ z?)&a{@BMCG9xN-pby!ADhQ(qT<}PuSqkEQl4jqiH78;lj29$^sKfC=E98+W`K9BcM zo@fyaDkV)CtY|8&l$vTKLB+%+TV z3q3jUpkYKsl8nV-));G5wE#&AfSL0!_6sG+D4%tQn} zwcc>zh-rTa;bBl%%bc8B)S98dMEc52`<4p8ot_lVm9k90^}$ZAZVe90W>0tR&A48>3cjSjw&W<-V)dG2P4 z6)CFU)PtlT0|N|X%>JLTDl7iRA2m(qS1eLPs^(E;#Dm2#SrYxK76vF6N*Dwn8I1%I zEIc039nlRCk)Ye<#8KE*MUh1Z@3#ZskO?2)Az|Ys(ePgz-HWLGnouusqT)#Sj$3afHAiIs14Bpbhu{f=i*z(G=8bAap6J$x23u z0LTJQ*?a^AIn*Z%x&YSZCx9TyeoE$efniNSfA2YkQi$TyQ7!dk!%PQ(O6=4LWN<(Yj zqEk=ow^*)T;&v5QI+l4Wj@DII_u;bx2E--85?+a?DS*uQ}sOyYRAs?j(T>@nf#6Z-!9I& zx_#!RgP&ntqpTBFz4-n|o!!Ro^X5F7Ej08*KK^w3yq5E0zOI1Y)@L(Lz~wUw{uIf5 zYev({EqmFLik%||-#h&H7tJ?zE*)~<=9&^->|XNDLhi!}9aZ*UJS4o_ijE~tTyi{c&K$+6?Ehmv>fe?|LfS9O#8*(J-Xqw-^^`W z_0Y5_`=;mas?JzBI&bpzrye{uGgkLa%Z{E|;tTDTwKdtFpYq(jyDxV``R*5f`R5VL zW+msQ;MbWQW3=5>n;za)@X_%m-IH03?QLD%8fnNK0_Wn{!l2x*=DdCW$bMJO^*6L% zT-5kncxjz@YA5xX@JH^RvllXBkCpd2#~t4@I=lPYf7Gx!_1pC9H@9wDcFU7Tc5m^% z{nj52binbRiUn3j=%p&{>GElJ&qIbWLE-1n93ko&$Fk7aZ% x?rhxh-6P*Uv#$Kk`xZ^gUr$}!p8d*I&v+|7cw9O7jrkwWU0mwgIQ`C+{{UyTo-zOc literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/betterend/textures/block/chorus_plant_flower_center.png b/src/main/resources/assets/betterend/textures/block/chorus_plant_flower_center.png new file mode 100644 index 0000000000000000000000000000000000000000..e68e38dab59d199aa1a6f4a520dadcca18d10d76 GIT binary patch literal 2115 zcmbVN4RF(B819DrY-0z)9UutgGC1+JG)bFwZCp3DcCd|g4E7I*rpebetZhP*t{pg- zfQZ~+LlnKi*eMf_fm4QZz;+0Zo5JQ44iArWATWk<2p)4DDuQ3yuAm2sg-!dz-7ko0I z4p|my9QXNrYM)jucuH~7Xf)!42G?jXh`^)@x6Jr4w-h(XU;z^A;YFDj+=#-+*aWX^ zLZPQY2`({A>y|=cf&s(*jEIwJLXi{ziVi^*B!}=2c=+?*j5sz-E_yxAfX5t*11E3+ zw=6*{8QuVf)@lvIALxtA6-G;PdO4I43djS|QhtR9@cBRzydD;$m%|<76g47k_5el} zJo$p)986U1pghEERuW@CW)$&mPVh<3-e&_Wj0{YuhR_fg2~S-@ukgzQ}9>?4*H=*5sszpg2%Q6%4KA2EMT-c*s_EMBQz9+88xtjZ92dJ zJ!50^EO8%KfHmkMe$Sx?X$jOnoxv;GDnef5fu&)8kU+`P46C%V31yWU1{@lC%|CXo zgS0*efTaIY*g=>i*kvE%0jZ_1E*_XX8T4xR4y&oRv8%kR%F*%J93c|E4CeR*$s#0^tZ(`PLS(OlZuL(N3( z%#?cO%VCE&~f8n9J_WG(lPrMbK zb#zzd%{LCzcD^%XRHXAg5K&+n*Rbou84HK*)qe16_Tt~|rL)$WdsdFl!qJjZ@y9Hi z$bGSCUDUeCwL=PbPA`zV@>Z^AMj57TJkgG3jacp2J+9$g<*_Tm3oVVy(d)XR-^_QB z*Prq(O4rl%OD7s`&08JScP-%vIp(PM`M9ZI$jMnz`#Y|lZHZ0x-@f%{-q=&cRdH>F zYvQMFN%a+%^z_A$j_F0l`T@|HT-H#1{_6SiM!d>>^uMf literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/betterend/textures/block/chorus_plant_flower_fur.png b/src/main/resources/assets/betterend/textures/block/chorus_plant_flower_fur.png new file mode 100644 index 0000000000000000000000000000000000000000..ed28189fa52764363caf0c4d638fa3ac6895d679 GIT binary patch literal 2029 zcmcIlTWl0n7+%EywrMQZ3rN(-U}{M_JJ+4r8N1MSx3U|UwzL~sVE}3{m98O9TUmJa`QW39&C~O^AjEHCmFQiI+2bqnc9t;$~;& z%*=Pb|NFoHpL3oa8ras-bWc+#6lzH&6T{@%8XRj^lk@%ae*tp2)k!|$g+k43!EsaQ z<%8=(q1C6X^q4=U@6aGFgn@xGC|oW$1RV->Z!J3jP9UGkpsZ!b=$}uWp()FV(W4Qa z)15fVS;=V^jZ6=u;q(Ml4SMSqs=KTaf&%gZRW9UhPb`S!DE)DDiD7nM)w8* zsWE+siend1k+94_UJ@up4f8Um3Q`v(aJ<5D3d@TO$7`Idi7Hk5(IlE{nA&jS;aV(m z7o&5&?`SMrDwV<|F^t_T%d4u&asn#|3_&p7l5LcwX!+Fs2jVi;Qn4$FtRAf-A`*O!MD3JtX9_fL{2HN8s`d+8|$vBSv2MHiy} zNo4z*>cN~G_OX}4H_+C2{SSo(Yy@Lc^Yuav z)gw~zcu<%q)iG+>1}=G<15vd(C;@yFqXkaj7@qtiXMdOrCPSiNA3e`y~7{CWB z17pK7r&a>hbuDFkKCmH5C1NxY6}BuxGm&aQQ-uuRMS+PblFVcT0Wm6+MHR_Nk`Sus zBJ&d%76UVa`PI%fFeDreLp5FzREP+Xs*sZeC5{0i5E&$^VpI^#2ozzRZP2yI#{=?< zSp!uDVdNBK!e|sQiUcBzEJ;x&Dytl$s-_x^8X3t18JfBtH;(hz)v-a`6=}+Vnu*;4 zAT4ASKo+r%oedhAu#+s3mPe{LRr^Fn(4N{TZ&8)L(*O+GJx0Tz&d8u^kF6!#Tba%( zZ7GKc=`zKy!aQvHCE%joEOB}z{l(r$zXv9lSHH5_|G(;M=E5AXvxuyqEFI*-25U{V zH0-~tcD?HL&gmsR9n{pTInf8Q4NtZ#-Kdg8S`h$~F?fY%GQ7kyfHW2(A_b^|$wfd! zs;bCa|HY-k3`9VTkY$(?7*3ERMit1aoQWWSWRL+ejsrYj^q`9ZmaB zt}kABEZx8%*d*_3%{a_twdw0#n)7qxZA1DU| z*!k3f!E^Fw>kd7g9K3LTZnocCNO%3xe)L4oj>Dh6IC0m^pWpQ0uRfX^Pwvev%=h_E z?io+L^5J3c^7A{5(bf%X?znPq*S=Oa+w#n=Rgd9)yK&#^m)dXZp5IkowT-&=!rsnf QXMznm)jyDUyKj8vZ=i#lbN~PV literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/betterend/textures/block/chorus_plant_flower_petal.png b/src/main/resources/assets/betterend/textures/block/chorus_plant_flower_petal.png new file mode 100644 index 0000000000000000000000000000000000000000..fc17f331c4368f859c0444b2f566e7563dc76729 GIT binary patch literal 1755 zcmbVNe^3-v9AA_$WH5hFB9qh3DrKX4yL%kR-3})ZhjI>k5L^nQQ||4)gB|X6m)$+@ zKyoIOC<$Yb845I+Nycd!82v+QWG0J|D5-F2BA84N@J9`5W=Kw{y*=)3n#Qu+*|+c4 z=Y76E-*;axa&Amqn6eN-kVHqmy%_e3_4a5S{62N_9t*p8IloLrkc4G=i$U5CBqK=d zRl!xNl`;i1C;1F4FS&ss=#wEDK{B&~GRsv04RwQZL9}7ldrx7gz}v7b=?uxpxu8PG zuTelrjnl=|RB~1x%UX|S25Cs(0~(74eO^(egElP0OT)3gOkijTqE*_k99J&s$n-lhY>+mCMW}`n-l`_Tofn!6>ms5&k?{2d_dGxh^3-f=p}}U!tYD# z^F`6BmbU|H6t?ZYXw_9M1ELtHl3(FK-VP{nRYWnlLeeC)Liz_gqT5kxWI9&?tR^Wg zN%BSlRTN=Cjg-NNuGu1pycAHM)un_F06VJz8>UAMr{J6JqS9#6Oq=khS)(zo9&$^92d-8wXSWUG^soXR3oi=~?U^~+Km~xL z{}S#wm@0X+0IPtUa_GeerV{~`C-i$bX9w|j6GMA{xw8>CECl*6T7lpsTEl<{3zq^b z6nky$0tAU^b=Y%UmZqkmu}zcNNdq^eum2E=nZdZx{E<+8260m_PBp z(r_M$ZAckDadzkU^s(D_;?I2d*yZ12HgB!X>a4wEdCMK!+CO~!U`|i^?wRIF=KB?A z+`Y?J#7uO5a%j&L=Ql#*kEXk;J9m}bYs)Unox$SYZFZK`tvOsHoIQ9q<7fHCbl;lJ zV|$05aU8)96)qjE?6Zttn5h1>X=V1Jy}!J;bjW@9+fp0a?QY-DIy=w$M#(hdc%o#s zeHJh+c_YIu9_spFdkwj|OnY)l zmMq)d9XEBFeCc#j+q?@MlOIohKD__=jmKP5jj>x3ryBRT->c}`H?Y4ukc3zUi`zSa z|H#qfoc~C3&fsX~O5a$*xq>a{XV>LDf^S}A${Bcb-9^vI6u69>yHp=|=gTWylbIb= f9m{t%#O#`HF#Vtvrlvox|9%{KPJ7RD+w1-WRxEE5 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/betterend/textures/block/chorus_plant_flower_side.png b/src/main/resources/assets/betterend/textures/block/chorus_plant_flower_side.png new file mode 100644 index 0000000000000000000000000000000000000000..b4d3d4fa52bba598f2f3b8c3d45581674d3d7c03 GIT binary patch literal 2383 zcmbVO3s4kg9KWPgP)t&@EOlMAG`ri!?H%mufpCX%8}-EVh)|KI=je|>w4 zQd7o8M)ZqNsZ^2XBvTqZ_w@a`c814+Eq4Jtg^NiOWtFO1FW>JeRZ;N^DphCTv}P)q zmT?R#xHW(ivUrWxEkd+PH7d?40(Kg&AX&WK=`ovnl$#%nrK_CYUhH3q*|2;J%RjK+z#6g6t3;0uMcYz=&f*d>MH$1*lSas!wPryJOLO!V0ODl8Vp z?2#4VVR^I3fWojfPAA92XrpN@;9)b;G^f^+6t1QL!K!KA258ns0zyZ%+nWS7+gGP{ zdk)$Iz|lHfpQXlm3X+iU0JM6W8X9vpoTGF!303)P$&8nraJYc$iFx1<+>5)NB_2j3 z!|KVw5lH~{;L7EU4U8ivuu$qfQ;O2DS^#Wnj)*4ISp-F>K}-y%*7DJSCT+M5=%`Vc zZ#p0a5?BRjv3n#P`47aIl;4<%KG|_=g{D7X9x9py!-}e za~(V+eMB<`V6tFSa)HFh+hHvqr{A%M>6byyqt!oNcRgJF1Jm(@>VwH;9l&Gf;f{`> zzIgoA4U`7^Z`J(I?%OBZ;c)ZyEknCLya>HFcn_qO;9FtVwO!X$s!prSrg&@2_qz0x zDZS%+8z!AKj0g+cG-Y;p0UFio#@SbU-97SZ<&x3X?! zr@uN=dgk=G<8_mfs@G1GCH;~Y(WERnS31GLiv1&Z9ynnvUb=iOot&Pv)L!Mibf`l0 z{^s3%6n=>G?9d;!y?pHLntlhGH^!_SGFN4Y%>)J?2RQg#y_9WSiWZX z3M#&$;hW1pcj{yhPkZYkRetE&u!1kP9lx?qT$Z0|+fkgjq6v9UTh{dK7I5zs?nOfQSQyx2u&BvXq5~uUype2V!UBXlzzjlo?D4A zD{Be*#o|rr9}P+x#7B0ePPbz zs=Ci7F9Rh+*o3J~^$E5fb5%uuH}4j=KDT%2&P7cJMma`?RexE0yXX#Lh)UX7UbZZ* zDt5u4p0q{!^i1^jO8tP6oSHT7mZDWZd^fH8`H}hhxyj{kHnb-6-BNh4`TU;m2ftoc zv2N>@@VY%~_uvaX^#gBCitabK5uJ?>TR7~dI@z51b@RgcY5Ho%it#Tu_nva9@M6ZdTlY@SJXOcn>J$bM?cl+T=Q$gF)<;!d8cYsfr zZZj`k`{kd%o||Q!$fSmgj9Ws8pw>4~i!PQI`_CaB`ot$@|Z13Tc a8w0D$n>I~NTOH~9%VSPVG3`j0GWTD4sANz8 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/betterend/textures/block/chorus_plant_flower_top.png b/src/main/resources/assets/betterend/textures/block/chorus_plant_flower_top.png new file mode 100644 index 0000000000000000000000000000000000000000..5d4f24dbf100b700d837fbfd7890546383ea9f0f GIT binary patch literal 2512 zcmb_e32+lt7)}dP4mp$&8D#9bRqoB+Np@{0B`vg+l-dR?V=xT+kkWIorfH_wDYBmRt<&@UG*c%P`j|Z!4Q++c4TYW z_TelqdyJeQJ4Iu_;{#}eAwD7CI=M1jAX(#F7jY`oO@NB1mjz(vXlXFtfsWn&x9s z)bIBj{iIP=Tqw>k42lsbK_CEus1v*z7eKsfT$mwARC&ei)7-Kb(iu6YT%=iHptRWq zk1s;&RYPF{0Yd|v552k-$gDeML$^P_e+HVu9!py_yQJ zc*Fn*t=%4hx2VPAiJ(<2xfr++3P_7+)iJ>*qM4#97b(1$TnsG6>E8HQn<8?WtT<%3 zAe^X-uzQfrrYFV%^%>>%3bJ4A``8*WiPJ~o%fZ^bovTC4)sdw*U(^-0OS2E;PH z^WBx%iG4fo@Av(M+=>I;XI`A*+d8o#xduYjd3C#@&K&MW?zYUbpE$X6UAaHH;elux zI_~)Tug*^#7(d3%#`IQ}G>t9Y|3Pj0)#+)Sj*aYBR%@u5oILVCNzihgJE6|C*@fv>05n7#{4N}rwGcWUaQS9?|8FU?&0+TAWc3{f&1$u{S{edcqq z2b-E)+Z$$9*6m;3XYT!9PE^mxY8ZJ|xVXFN__;UVx^~vKU~izYF>3a`*|oPVM0MK6 zKh9jY3Z|h4JJb?mO16!tOTgI1%8#0w*6tZr+-Y)~G1V~*JNMSdj=#b9r{?q6s_e}C zoYK-hAEM}<`Nq1dN9M#_o8BurXKqaWk3(v9Txck4*YmT*dmZ&{Hl92j-E~tO8C(Mr8Xw&6x$D>~o8Nn5 zv;CMfy>-Wzui<(KI5=Z-(f6#+ZJ`WX4KLR zX=QaQ9W}19)2+Yx`t3Dohi?7ssoLtZ-l2--3D)?PQ!m68_C}-2yCn?Q|8u1#rzfo$ HoIC9whV^#T literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/minecraft/blockstates/chorus_flower.json b/src/main/resources/assets/minecraft/blockstates/chorus_flower.json new file mode 100644 index 00000000..45269fb3 --- /dev/null +++ b/src/main/resources/assets/minecraft/blockstates/chorus_flower.json @@ -0,0 +1,22 @@ +{ + "variants": { + "age=0": { + "model": "betterend:block/chorus_plant_flower" + }, + "age=1": { + "model": "betterend:block/chorus_plant_flower" + }, + "age=2": { + "model": "betterend:block/chorus_plant_flower" + }, + "age=3": { + "model": "betterend:block/chorus_plant_flower" + }, + "age=4": { + "model": "betterend:block/chorus_plant_flower" + }, + "age=5": { + "model": "betterend:block/chorus_plant_flower_open" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/minecraft/materialmaps/block/chorus_flower.json b/src/main/resources/assets/minecraft/materialmaps/block/chorus_flower.json new file mode 100644 index 00000000..9ccaf67a --- /dev/null +++ b/src/main/resources/assets/minecraft/materialmaps/block/chorus_flower.json @@ -0,0 +1,14 @@ +{ + "defaultMap": { + "spriteMap": [ + { + "sprite": "betterend:block/chorus_plant_flower_petal", + "material": "betterend:waving_floor" + }, + { + "sprite": "betterend:block/chorus_plant_flower_fur", + "material": "betterend:waving_floor" + } + ] + } +} \ No newline at end of file