From e3a20b4b80cdfa352dacc417b1176659e6a9596b Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Wed, 30 Sep 2020 20:19:22 +0300 Subject: [PATCH] Umbrella moss --- .../betterend/blocks/BlockUmbrellaMoss.java | 9 + .../blocks/BlockUmbrellaMossTall.java | 44 ++++ .../blocks/basis/BlockDoublePlant.java | 143 +++++++++++ .../ru/betterend/blocks/basis/BlockPlant.java | 115 +++++++++ .../ru/betterend/registry/BlockRegistry.java | 6 + .../betterend/blockstates/umbrella_moss.json | 10 + .../blockstates/umbrella_moss_tall.json | 12 + .../models/block/umbrella_moss_bottom.json | 75 ++++++ .../models/block/umbrella_moss_small.json | 238 ++++++++++++++++++ .../models/block/umbrella_moss_top.json | 193 ++++++++++++++ .../betterend/models/item/umbrella_moss.json | 6 + .../models/item/umbrella_moss_tall.json | 6 + .../textures/block/umbrella_moss_bottom.png | Bin 0 -> 2248 bytes .../textures/block/umbrella_moss_small.png | Bin 0 -> 2156 bytes .../block/umbrella_moss_sporophyte.png | Bin 0 -> 2024 bytes .../textures/block/umbrella_moss_up.png | Bin 0 -> 2403 bytes .../textures/item/umbrella_moss_large.png | Bin 0 -> 2510 bytes .../textures/item/umbrella_moss_small.png | Bin 0 -> 2459 bytes 18 files changed, 857 insertions(+) create mode 100644 src/main/java/ru/betterend/blocks/BlockUmbrellaMoss.java create mode 100644 src/main/java/ru/betterend/blocks/BlockUmbrellaMossTall.java create mode 100644 src/main/java/ru/betterend/blocks/basis/BlockDoublePlant.java create mode 100644 src/main/java/ru/betterend/blocks/basis/BlockPlant.java create mode 100644 src/main/resources/assets/betterend/blockstates/umbrella_moss.json create mode 100644 src/main/resources/assets/betterend/blockstates/umbrella_moss_tall.json create mode 100644 src/main/resources/assets/betterend/models/block/umbrella_moss_bottom.json create mode 100644 src/main/resources/assets/betterend/models/block/umbrella_moss_small.json create mode 100644 src/main/resources/assets/betterend/models/block/umbrella_moss_top.json create mode 100644 src/main/resources/assets/betterend/models/item/umbrella_moss.json create mode 100644 src/main/resources/assets/betterend/models/item/umbrella_moss_tall.json create mode 100644 src/main/resources/assets/betterend/textures/block/umbrella_moss_bottom.png create mode 100644 src/main/resources/assets/betterend/textures/block/umbrella_moss_small.png create mode 100644 src/main/resources/assets/betterend/textures/block/umbrella_moss_sporophyte.png create mode 100644 src/main/resources/assets/betterend/textures/block/umbrella_moss_up.png create mode 100644 src/main/resources/assets/betterend/textures/item/umbrella_moss_large.png create mode 100644 src/main/resources/assets/betterend/textures/item/umbrella_moss_small.png diff --git a/src/main/java/ru/betterend/blocks/BlockUmbrellaMoss.java b/src/main/java/ru/betterend/blocks/BlockUmbrellaMoss.java new file mode 100644 index 00000000..62eaad62 --- /dev/null +++ b/src/main/java/ru/betterend/blocks/BlockUmbrellaMoss.java @@ -0,0 +1,9 @@ +package ru.betterend.blocks; + +import ru.betterend.blocks.basis.BlockPlant; + +public class BlockUmbrellaMoss extends BlockPlant { + public BlockUmbrellaMoss() { + super(12); + } +} diff --git a/src/main/java/ru/betterend/blocks/BlockUmbrellaMossTall.java b/src/main/java/ru/betterend/blocks/BlockUmbrellaMossTall.java new file mode 100644 index 00000000..26d51cf4 --- /dev/null +++ b/src/main/java/ru/betterend/blocks/BlockUmbrellaMossTall.java @@ -0,0 +1,44 @@ +package ru.betterend.blocks; + +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.entity.ItemEntity; +import net.minecraft.entity.LivingEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.state.StateManager; +import net.minecraft.state.property.IntProperty; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import ru.betterend.blocks.basis.BlockDoublePlant; +import ru.betterend.registry.BlockRegistry; +import ru.betterend.util.BlocksHelper; + +public class BlockUmbrellaMossTall extends BlockDoublePlant { + public static final IntProperty ROTATION = IntProperty.of("rotation", 0, 3); + + public BlockUmbrellaMossTall() { + super(12); + } + + @Override + public void grow(ServerWorld world, Random random, BlockPos pos, BlockState state) { + ItemEntity item = new ItemEntity(world, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, new ItemStack(BlockRegistry.UMBRELLA_MOSS)); + world.spawnEntity(item); + } + + @Override + public void onPlaced(World world, BlockPos pos, BlockState state, LivingEntity placer, ItemStack itemStack) { + int rot = world.random.nextInt(4); + BlocksHelper.setWithoutUpdate(world, pos, this.getDefaultState().with(ROTATION, rot)); + BlocksHelper.setWithoutUpdate(world, pos.up(), this.getDefaultState().with(ROTATION, rot).with(TOP, true)); + } + + @Override + protected void appendProperties(StateManager.Builder stateManager) { + super.appendProperties(stateManager); + stateManager.add(ROTATION); + } +} diff --git a/src/main/java/ru/betterend/blocks/basis/BlockDoublePlant.java b/src/main/java/ru/betterend/blocks/basis/BlockDoublePlant.java new file mode 100644 index 00000000..9e170707 --- /dev/null +++ b/src/main/java/ru/betterend/blocks/basis/BlockDoublePlant.java @@ -0,0 +1,143 @@ +package ru.betterend.blocks.basis; + +import java.util.List; +import java.util.Random; + +import com.google.common.collect.Lists; + +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; +import net.minecraft.block.AbstractBlock; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.block.Fertilizable; +import net.minecraft.block.Material; +import net.minecraft.block.ShapeContext; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.enchantment.Enchantments; +import net.minecraft.entity.ItemEntity; +import net.minecraft.entity.LivingEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.loot.context.LootContext; +import net.minecraft.loot.context.LootContextParameters; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.sound.BlockSoundGroup; +import net.minecraft.state.StateManager; +import net.minecraft.state.property.BooleanProperty; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; +import net.minecraft.util.math.Vec3d; +import net.minecraft.util.shape.VoxelShape; +import net.minecraft.world.BlockView; +import net.minecraft.world.World; +import net.minecraft.world.WorldAccess; +import net.minecraft.world.WorldView; +import ru.betterend.client.ERenderLayer; +import ru.betterend.client.IRenderTypeable; +import ru.betterend.registry.BlockTagRegistry; +import ru.betterend.util.BlocksHelper; + +public class BlockDoublePlant extends BlockBaseNotFull implements IRenderTypeable, Fertilizable { + private static final VoxelShape SHAPE = Block.createCuboidShape(4, 2, 4, 12, 16, 12); + public static final BooleanProperty TOP = BooleanProperty.of("top"); + + public BlockDoublePlant() { + super(FabricBlockSettings.of(Material.REPLACEABLE_PLANT) + .breakByTool(FabricToolTags.SHEARS) + .sounds(BlockSoundGroup.WET_GRASS) + .breakByHand(true) + .noCollision()); + this.setDefaultState(this.stateManager.getDefaultState().with(TOP, false)); + } + + public BlockDoublePlant(int light) { + super(FabricBlockSettings.of(Material.REPLACEABLE_PLANT) + .breakByTool(FabricToolTags.SHEARS) + .sounds(BlockSoundGroup.WET_GRASS) + .lightLevel((state) -> { return state.get(TOP) ? light : 0; }) + .breakByHand(true) + .noCollision()); + this.setDefaultState(this.stateManager.getDefaultState().with(TOP, false)); + } + + @Override + protected void appendProperties(StateManager.Builder stateManager) { + stateManager.add(TOP); + } + + @Override + public VoxelShape getOutlineShape(BlockState state, BlockView view, BlockPos pos, ShapeContext ePos) { + Vec3d vec3d = state.getModelOffset(view, pos); + return SHAPE.offset(vec3d.x, vec3d.y, vec3d.z); + } + + @Override + public AbstractBlock.OffsetType getOffsetType() { + return AbstractBlock.OffsetType.XZ; + } + + @Override + public boolean canPlaceAt(BlockState state, WorldView world, BlockPos pos) { + BlockState down = world.getBlockState(pos.down()); + BlockState up = world.getBlockState(pos.up()); + return state.get(TOP) ? down.getBlock() == this : down.isIn(BlockTagRegistry.END_GROUND) && (up.getMaterial().isReplaceable()); + } + + public boolean canStayAt(BlockState state, WorldView world, BlockPos pos) { + BlockState down = world.getBlockState(pos.down()); + BlockState up = world.getBlockState(pos.up()); + return state.get(TOP) ? down.getBlock() == this : down.isIn(BlockTagRegistry.END_GROUND) && (up.getBlock() == this); + } + + @Override + public BlockState getStateForNeighborUpdate(BlockState state, Direction facing, BlockState neighborState, WorldAccess world, BlockPos pos, BlockPos neighborPos) { + if (!canStayAt(state, world, pos)) { + return Blocks.AIR.getDefaultState(); + } + else { + return state; + } + } + + @Override + public List getDroppedStacks(BlockState state, LootContext.Builder builder) { + if (state.get(TOP)) { + return Lists.newArrayList(); + } + + ItemStack tool = builder.get(LootContextParameters.TOOL); + if (tool != null && tool.getItem().isIn(FabricToolTags.SHEARS) || EnchantmentHelper.getLevel(Enchantments.SILK_TOUCH, tool) > 0) { + return Lists.newArrayList(new ItemStack(this)); + } + else { + return Lists.newArrayList(); + } + } + + @Override + public ERenderLayer getRenderLayer() { + return ERenderLayer.CUTOUT; + } + + @Override + public boolean isFertilizable(BlockView world, BlockPos pos, BlockState state, boolean isClient) { + return true; + } + + @Override + public boolean canGrow(World world, Random random, BlockPos pos, BlockState state) { + return true; + } + + @Override + public void grow(ServerWorld world, Random random, BlockPos pos, BlockState state) { + ItemEntity item = new ItemEntity(world, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, new ItemStack(this)); + world.spawnEntity(item); + } + + @Override + public void onPlaced(World world, BlockPos pos, BlockState state, LivingEntity placer, ItemStack itemStack) { + BlocksHelper.setWithoutUpdate(world, pos.up(), this.getDefaultState().with(TOP, true)); + } +} diff --git a/src/main/java/ru/betterend/blocks/basis/BlockPlant.java b/src/main/java/ru/betterend/blocks/basis/BlockPlant.java new file mode 100644 index 00000000..afd268f2 --- /dev/null +++ b/src/main/java/ru/betterend/blocks/basis/BlockPlant.java @@ -0,0 +1,115 @@ +package ru.betterend.blocks.basis; + +import java.util.List; +import java.util.Random; + +import com.google.common.collect.Lists; + +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; +import net.minecraft.block.AbstractBlock; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.block.Fertilizable; +import net.minecraft.block.Material; +import net.minecraft.block.ShapeContext; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.enchantment.Enchantments; +import net.minecraft.entity.ItemEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.loot.context.LootContext; +import net.minecraft.loot.context.LootContextParameters; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.sound.BlockSoundGroup; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; +import net.minecraft.util.math.Vec3d; +import net.minecraft.util.shape.VoxelShape; +import net.minecraft.world.BlockView; +import net.minecraft.world.World; +import net.minecraft.world.WorldAccess; +import net.minecraft.world.WorldView; +import ru.betterend.client.ERenderLayer; +import ru.betterend.client.IRenderTypeable; +import ru.betterend.registry.BlockTagRegistry; + +public class BlockPlant extends BlockBaseNotFull implements IRenderTypeable, Fertilizable { + private static final VoxelShape SHAPE = Block.createCuboidShape(4, 2, 4, 12, 14, 12); + + public BlockPlant() { + super(FabricBlockSettings.of(Material.REPLACEABLE_PLANT) + .breakByTool(FabricToolTags.SHEARS) + .sounds(BlockSoundGroup.GRASS) + .breakByHand(true) + .noCollision()); + } + + public BlockPlant(int light) { + super(FabricBlockSettings.of(Material.REPLACEABLE_PLANT) + .breakByTool(FabricToolTags.SHEARS) + .sounds(BlockSoundGroup.GRASS) + .lightLevel(light) + .breakByHand(true) + .noCollision()); + } + + @Override + public VoxelShape getOutlineShape(BlockState state, BlockView view, BlockPos pos, ShapeContext ePos) { + Vec3d vec3d = state.getModelOffset(view, pos); + return SHAPE.offset(vec3d.x, vec3d.y, vec3d.z); + } + + @Override + public AbstractBlock.OffsetType getOffsetType() { + return AbstractBlock.OffsetType.XZ; + } + + @Override + public boolean canPlaceAt(BlockState state, WorldView world, BlockPos pos) { + BlockState down = world.getBlockState(pos.down()); + return down.isIn(BlockTagRegistry.END_GROUND); + } + + @Override + public BlockState getStateForNeighborUpdate(BlockState state, Direction facing, BlockState neighborState, WorldAccess world, BlockPos pos, BlockPos neighborPos) { + if (!canPlaceAt(state, world, pos)) { + return Blocks.AIR.getDefaultState(); + } + else { + return state; + } + } + + @Override + public List getDroppedStacks(BlockState state, LootContext.Builder builder) { + ItemStack tool = builder.get(LootContextParameters.TOOL); + if (tool != null && tool.getItem().isIn(FabricToolTags.SHEARS) || EnchantmentHelper.getLevel(Enchantments.SILK_TOUCH, tool) > 0) { + return Lists.newArrayList(new ItemStack(this)); + } + else { + return Lists.newArrayList(); + } + } + + @Override + public ERenderLayer getRenderLayer() { + return ERenderLayer.CUTOUT; + } + + @Override + public boolean isFertilizable(BlockView world, BlockPos pos, BlockState state, boolean isClient) { + return true; + } + + @Override + public boolean canGrow(World world, Random random, BlockPos pos, BlockState state) { + return true; + } + + @Override + public void grow(ServerWorld world, Random random, BlockPos pos, BlockState state) { + ItemEntity item = new ItemEntity(world, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, new ItemStack(this)); + world.spawnEntity(item); + } +} diff --git a/src/main/java/ru/betterend/registry/BlockRegistry.java b/src/main/java/ru/betterend/registry/BlockRegistry.java index 4789f61c..d2e63f5e 100644 --- a/src/main/java/ru/betterend/registry/BlockRegistry.java +++ b/src/main/java/ru/betterend/registry/BlockRegistry.java @@ -14,6 +14,8 @@ import ru.betterend.blocks.BlockMossyGlowshroomHymenophore; import ru.betterend.blocks.BlockMossyGlowshroomSapling; import ru.betterend.blocks.BlockOre; import ru.betterend.blocks.BlockTerrain; +import ru.betterend.blocks.BlockUmbrellaMoss; +import ru.betterend.blocks.BlockUmbrellaMossTall; import ru.betterend.blocks.EndStoneSmelter; import ru.betterend.blocks.EnderBlock; import ru.betterend.blocks.TerminiteBlock; @@ -33,6 +35,10 @@ public class BlockRegistry { public static final Block MOSSY_GLOWSHROOM_FUR = registerBlock("mossy_glowshroom_fur", new BlockMossyGlowshroomFur()); public static final WoodenMaterial MOSSY_GLOWSHROOM = new WoodenMaterial("mossy_glowshroom", MaterialColor.GRAY, MaterialColor.WOOD); + // Small Plants // + public static final Block UMBRELLA_MOSS = registerBlock("umbrella_moss", new BlockUmbrellaMoss()); + public static final Block UMBRELLA_MOSS_TALL = registerBlock("umbrella_moss_tall", new BlockUmbrellaMossTall()); + // Ores // public static final Block ENDER_ORE = registerBlock("ender_ore", new BlockOre(ItemRegistry.ENDER_DUST, 1, 3)); diff --git a/src/main/resources/assets/betterend/blockstates/umbrella_moss.json b/src/main/resources/assets/betterend/blockstates/umbrella_moss.json new file mode 100644 index 00000000..1934ca32 --- /dev/null +++ b/src/main/resources/assets/betterend/blockstates/umbrella_moss.json @@ -0,0 +1,10 @@ +{ + "variants": { + "": [ + { "model": "betterend:block/umbrella_moss_small" }, + { "model": "betterend:block/umbrella_moss_small", "y": 90 }, + { "model": "betterend:block/umbrella_moss_small", "y": 180 }, + { "model": "betterend:block/umbrella_moss_small", "y": 270 } + ] + } +} diff --git a/src/main/resources/assets/betterend/blockstates/umbrella_moss_tall.json b/src/main/resources/assets/betterend/blockstates/umbrella_moss_tall.json new file mode 100644 index 00000000..53d7b64b --- /dev/null +++ b/src/main/resources/assets/betterend/blockstates/umbrella_moss_tall.json @@ -0,0 +1,12 @@ +{ + "variants": { + "top=true,rotation=0": { "model": "betterend:block/umbrella_moss_top" }, + "top=false,rotation=0": { "model": "betterend:block/umbrella_moss_bottom" }, + "top=true,rotation=1": { "model": "betterend:block/umbrella_moss_top", "y": 90 }, + "top=false,rotation=1": { "model": "betterend:block/umbrella_moss_bottom", "y": 90 }, + "top=true,rotation=2": { "model": "betterend:block/umbrella_moss_top", "y": 180 }, + "top=false,rotation=2": { "model": "betterend:block/umbrella_moss_bottom", "y": 180 }, + "top=true,rotation=3": { "model": "betterend:block/umbrella_moss_top", "y": 270 }, + "top=false,rotation=3": { "model": "betterend:block/umbrella_moss_bottom", "y": 270 } + } +} diff --git a/src/main/resources/assets/betterend/models/block/umbrella_moss_bottom.json b/src/main/resources/assets/betterend/models/block/umbrella_moss_bottom.json new file mode 100644 index 00000000..f637005b --- /dev/null +++ b/src/main/resources/assets/betterend/models/block/umbrella_moss_bottom.json @@ -0,0 +1,75 @@ +{ + "__comment": "Designed by Paulevs with Cubik Studio - https://cubik.studio", + "textures": { + "particle": "betterend:block/umbrella_moss_bottom", + "texture": "betterend:block/umbrella_moss_bottom" + }, + "elements": [ + { + "__comment": "PlaneX3", + "from": [ -2, 0, -2 ], + "to": [ -1.999, 16, 14 ], + "rotation": { "origin": [ -2, 0, -2 ], "axis": "y", "angle": 45 }, + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" } + } + }, + { + "__comment": "PlaneX3", + "from": [ 9.5, 0, -2 ], + "to": [ 9.501, 16, 14 ], + "rotation": { "origin": [ 9.5, 0, -2 ], "axis": "y", "angle": -45 }, + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" } + } + }, + { + "__comment": "PlaneX3", + "from": [ 6, 0, 3 ], + "to": [ 6.001, 16, 19 ], + "rotation": { "origin": [ 6, 0, 3 ], "axis": "y", "angle": 45 }, + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" } + } + }, + { + "__comment": "PlaneX3", + "from": [ 17.5, 0, 3 ], + "to": [ 17.501, 16, 19 ], + "rotation": { "origin": [ 17.5, 0, 3 ], "axis": "y", "angle": -45 }, + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" } + } + }, + { + "__comment": "PlaneX3", + "from": [ -1, 0, 6 ], + "to": [ -0.999, 16, 22 ], + "rotation": { "origin": [ -1, 0, 6 ], "axis": "y", "angle": 45 }, + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" } + } + }, + { + "__comment": "PlaneX3", + "from": [ 10.5, 0, 6 ], + "to": [ 10.501, 16, 22 ], + "rotation": { "origin": [ 10.5, 0, 6 ], "axis": "y", "angle": -45 }, + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/models/block/umbrella_moss_small.json b/src/main/resources/assets/betterend/models/block/umbrella_moss_small.json new file mode 100644 index 00000000..6902348e --- /dev/null +++ b/src/main/resources/assets/betterend/models/block/umbrella_moss_small.json @@ -0,0 +1,238 @@ +{ + "__comment": "Designed by Paulevs with Cubik Studio - https://cubik.studio", + "textures": { + "particle": "betterend:block/umbrella_moss_up", + "texture": "betterend:block/umbrella_moss_up", + "spore": "betterend:block/umbrella_moss_sporophyte", + "small": "betterend:block/umbrella_moss_small" + }, + "elements": [ + { + "__comment": "Box1", + "from": [ 3, 13, 3 ], + "to": [ 5, 16, 5 ], + "faces": { + "down": { "uv": [ 7, 5, 9, 7 ], "texture": "#spore" }, + "up": { "uv": [ 7, 0, 9, 2 ], "texture": "#spore" }, + "north": { "uv": [ 7, 2, 9, 5 ], "texture": "#spore" }, + "south": { "uv": [ 7, 2, 9, 5 ], "texture": "#spore" }, + "west": { "uv": [ 7, 2, 9, 5 ], "texture": "#spore" }, + "east": { "uv": [ 7, 2, 9, 5 ], "texture": "#spore" } + } + }, + { + "__comment": "Box1", + "from": [ 11, 12, 8 ], + "to": [ 13, 15, 10 ], + "faces": { + "down": { "uv": [ 7, 5, 9, 7 ], "texture": "#spore" }, + "up": { "uv": [ 7, 0, 9, 2 ], "texture": "#spore" }, + "north": { "uv": [ 7, 2, 9, 5 ], "texture": "#spore" }, + "south": { "uv": [ 7, 2, 9, 5 ], "texture": "#spore" }, + "west": { "uv": [ 7, 2, 9, 5 ], "texture": "#spore" }, + "east": { "uv": [ 7, 2, 9, 5 ], "texture": "#spore" } + } + }, + { + "__comment": "Box1", + "from": [ 4, 11, 11 ], + "to": [ 6, 14, 13 ], + "faces": { + "down": { "uv": [ 7, 5, 9, 7 ], "texture": "#spore" }, + "up": { "uv": [ 7, 0, 9, 2 ], "texture": "#spore" }, + "north": { "uv": [ 7, 2, 9, 5 ], "texture": "#spore" }, + "south": { "uv": [ 7, 2, 9, 5 ], "texture": "#spore" }, + "west": { "uv": [ 7, 2, 9, 5 ], "texture": "#spore" }, + "east": { "uv": [ 7, 2, 9, 5 ], "texture": "#spore" } + } + }, + { + "__comment": "Box1", + "from": [ 1, 12, 1 ], + "to": [ 7, 14, 7 ], + "shade": false, + "faces": { + "up": { "uv": [ 0, 0, 6, 6 ], "texture": "#spore" }, + "north": { "uv": [ 0, 6, 6, 8 ], "texture": "#spore" }, + "south": { "uv": [ 0, 6, 6, 8 ], "texture": "#spore" }, + "west": { "uv": [ 0, 6, 6, 8 ], "texture": "#spore" }, + "east": { "uv": [ 0, 6, 6, 8 ], "texture": "#spore" } + } + }, + { + "__comment": "PlaneX3", + "from": [ -2, 0, -2 ], + "to": [ -1.999, 13, 14 ], + "rotation": { "origin": [ -2, 0, -2 ], "axis": "y", "angle": 45 }, + "shade": false, + "faces": { + "west": { "uv": [ 0, 3, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 3, 16, 16 ], "texture": "#texture" } + } + }, + { + "__comment": "PlaneX3", + "from": [ 9.5, 0, -2 ], + "to": [ 9.501, 13, 14 ], + "rotation": { "origin": [ 9.5, 0, -2 ], "axis": "y", "angle": -45 }, + "shade": false, + "faces": { + "west": { "uv": [ 0, 3, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 3, 16, 16 ], "texture": "#texture" } + } + }, + { + "__comment": "Box1", + "from": [ 7, 14, 7 ], + "to": [ 1, 12, 1 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 0, 6, 6 ], "texture": "#spore" }, + "north": { "uv": [ 0, 6, 6, 8 ], "texture": "#spore" }, + "south": { "uv": [ 0, 6, 6, 8 ], "texture": "#spore" }, + "west": { "uv": [ 0, 6, 6, 8 ], "texture": "#spore" }, + "east": { "uv": [ 0, 6, 6, 8 ], "texture": "#spore" } + } + }, + { + "__comment": "Box1", + "from": [ 9, 11, 6 ], + "to": [ 15, 13, 12 ], + "shade": false, + "faces": { + "up": { "uv": [ 0, 0, 6, 6 ], "texture": "#spore" }, + "north": { "uv": [ 0, 6, 6, 8 ], "texture": "#spore" }, + "south": { "uv": [ 0, 6, 6, 8 ], "texture": "#spore" }, + "west": { "uv": [ 0, 6, 6, 8 ], "texture": "#spore" }, + "east": { "uv": [ 0, 6, 6, 8 ], "texture": "#spore" } + } + }, + { + "__comment": "PlaneX3", + "from": [ 6, 0, 3 ], + "to": [ 6.001, 12, 19 ], + "rotation": { "origin": [ 6, 0, 3 ], "axis": "y", "angle": 45 }, + "shade": false, + "faces": { + "west": { "uv": [ 0, 4, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 4, 16, 16 ], "texture": "#texture" } + } + }, + { + "__comment": "PlaneX3", + "from": [ 17.5, 0, 3 ], + "to": [ 17.501, 12, 19 ], + "rotation": { "origin": [ 17.5, 0, 3 ], "axis": "y", "angle": -45 }, + "shade": false, + "faces": { + "west": { "uv": [ 0, 4, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 4, 16, 16 ], "texture": "#texture" } + } + }, + { + "__comment": "Box1", + "from": [ 15, 13, 12 ], + "to": [ 9, 11, 6 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 0, 6, 6 ], "texture": "#spore" }, + "north": { "uv": [ 0, 6, 6, 8 ], "texture": "#spore" }, + "south": { "uv": [ 0, 6, 6, 8 ], "texture": "#spore" }, + "west": { "uv": [ 0, 6, 6, 8 ], "texture": "#spore" }, + "east": { "uv": [ 0, 6, 6, 8 ], "texture": "#spore" } + } + }, + { + "__comment": "Box1", + "from": [ 2, 10, 9 ], + "to": [ 8, 12, 15 ], + "shade": false, + "faces": { + "up": { "uv": [ 0, 0, 6, 6 ], "texture": "#spore" }, + "north": { "uv": [ 0, 6, 6, 8 ], "texture": "#spore" }, + "south": { "uv": [ 0, 6, 6, 8 ], "texture": "#spore" }, + "west": { "uv": [ 0, 6, 6, 8 ], "texture": "#spore" }, + "east": { "uv": [ 0, 6, 6, 8 ], "texture": "#spore" } + } + }, + { + "__comment": "PlaneX3", + "from": [ -1, 0, 6 ], + "to": [ -0.999, 11, 22 ], + "rotation": { "origin": [ -1, 0, 6 ], "axis": "y", "angle": 45 }, + "shade": false, + "faces": { + "west": { "uv": [ 0, 5, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 5, 16, 16 ], "texture": "#texture" } + } + }, + { + "__comment": "PlaneX3", + "from": [ 10.5, 0, 6 ], + "to": [ 10.501, 11, 22 ], + "rotation": { "origin": [ 10.5, 0, 6 ], "axis": "y", "angle": -45 }, + "shade": false, + "faces": { + "west": { "uv": [ 0, 5, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 5, 16, 16 ], "texture": "#texture" } + } + }, + { + "__comment": "Box1", + "from": [ 8, 12, 15 ], + "to": [ 2, 10, 9 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 0, 6, 6 ], "texture": "#spore" }, + "north": { "uv": [ 0, 6, 6, 8 ], "texture": "#spore" }, + "south": { "uv": [ 0, 6, 6, 8 ], "texture": "#spore" }, + "west": { "uv": [ 0, 6, 6, 8 ], "texture": "#spore" }, + "east": { "uv": [ 0, 6, 6, 8 ], "texture": "#spore" } + } + }, + { + "__comment": "PlaneY16", + "from": [ 0, 0, 9 ], + "to": [ 16, 0.001, 25 ], + "rotation": { "origin": [ 0, 0, 9 ], "axis": "x", "angle": -22.5 }, + "shade": false, + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#small" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#small", "rotation": 180 } + } + }, + { + "__comment": "PlaneY16", + "from": [ 0, -0.001, -9 ], + "to": [ 16, 0, 7 ], + "rotation": { "origin": [ 0, 0, 7 ], "axis": "x", "angle": 22.5 }, + "shade": false, + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#small", "rotation": 180 }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#small" } + } + }, + { + "__comment": "PlaneY18", + "from": [ 9, 0, 0 ], + "to": [ 25, 0.001, 16 ], + "rotation": { "origin": [ 9, 0, 0 ], "axis": "z", "angle": 22.5 }, + "shade": false, + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#small", "rotation": 90 }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#small", "rotation": 90 } + } + }, + { + "__comment": "PlaneY18", + "from": [ -9, -0.001, 0 ], + "to": [ 7, 0, 16 ], + "rotation": { "origin": [ 7, 0, 0 ], "axis": "z", "angle": -22.5 }, + "shade": false, + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#small", "rotation": 270 }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#small", "rotation": 270 } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/models/block/umbrella_moss_top.json b/src/main/resources/assets/betterend/models/block/umbrella_moss_top.json new file mode 100644 index 00000000..e8fe6304 --- /dev/null +++ b/src/main/resources/assets/betterend/models/block/umbrella_moss_top.json @@ -0,0 +1,193 @@ +{ + "__comment": "Designed by Paulevs with Cubik Studio - https://cubik.studio", + "textures": { + "particle": "betterend:block/umbrella_moss_up", + "texture": "betterend:block/umbrella_moss_up", + "spore": "betterend:block/umbrella_moss_sporophyte" + }, + "elements": [ + { + "__comment": "Box1", + "from": [ 3, 13, 3 ], + "to": [ 5, 16, 5 ], + "faces": { + "down": { "uv": [ 7, 5, 9, 7 ], "texture": "#spore" }, + "up": { "uv": [ 7, 0, 9, 2 ], "texture": "#spore" }, + "north": { "uv": [ 7, 2, 9, 5 ], "texture": "#spore" }, + "south": { "uv": [ 7, 2, 9, 5 ], "texture": "#spore" }, + "west": { "uv": [ 7, 2, 9, 5 ], "texture": "#spore" }, + "east": { "uv": [ 7, 2, 9, 5 ], "texture": "#spore" } + } + }, + { + "__comment": "Box1", + "from": [ 11, 12, 8 ], + "to": [ 13, 15, 10 ], + "faces": { + "down": { "uv": [ 7, 5, 9, 7 ], "texture": "#spore" }, + "up": { "uv": [ 7, 0, 9, 2 ], "texture": "#spore" }, + "north": { "uv": [ 7, 2, 9, 5 ], "texture": "#spore" }, + "south": { "uv": [ 7, 2, 9, 5 ], "texture": "#spore" }, + "west": { "uv": [ 7, 2, 9, 5 ], "texture": "#spore" }, + "east": { "uv": [ 7, 2, 9, 5 ], "texture": "#spore" } + } + }, + { + "__comment": "Box1", + "from": [ 4, 11, 11 ], + "to": [ 6, 14, 13 ], + "faces": { + "down": { "uv": [ 7, 5, 9, 7 ], "texture": "#spore" }, + "up": { "uv": [ 7, 0, 9, 2 ], "texture": "#spore" }, + "north": { "uv": [ 7, 2, 9, 5 ], "texture": "#spore" }, + "south": { "uv": [ 7, 2, 9, 5 ], "texture": "#spore" }, + "west": { "uv": [ 7, 2, 9, 5 ], "texture": "#spore" }, + "east": { "uv": [ 7, 2, 9, 5 ], "texture": "#spore" } + } + }, + { + "__comment": "Box1", + "from": [ 1, 12, 1 ], + "to": [ 7, 14, 7 ], + "shade": false, + "faces": { + "up": { "uv": [ 0, 0, 6, 6 ], "texture": "#spore" }, + "north": { "uv": [ 0, 6, 6, 8 ], "texture": "#spore" }, + "south": { "uv": [ 0, 6, 6, 8 ], "texture": "#spore" }, + "west": { "uv": [ 0, 6, 6, 8 ], "texture": "#spore" }, + "east": { "uv": [ 0, 6, 6, 8 ], "texture": "#spore" } + } + }, + { + "__comment": "PlaneX3", + "from": [ -2, 0, -2 ], + "to": [ -1.999, 13, 14 ], + "rotation": { "origin": [ -2, 0, -2 ], "axis": "y", "angle": 45 }, + "shade": false, + "faces": { + "west": { "uv": [ 0, 3, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 3, 16, 16 ], "texture": "#texture" } + } + }, + { + "__comment": "PlaneX3", + "from": [ 9.5, 0, -2 ], + "to": [ 9.501, 13, 14 ], + "rotation": { "origin": [ 9.5, 0, -2 ], "axis": "y", "angle": -45 }, + "shade": false, + "faces": { + "west": { "uv": [ 0, 3, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 3, 16, 16 ], "texture": "#texture" } + } + }, + { + "__comment": "Box1", + "from": [ 7, 14, 7 ], + "to": [ 1, 12, 1 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 0, 6, 6 ], "texture": "#spore" }, + "north": { "uv": [ 0, 6, 6, 8 ], "texture": "#spore" }, + "south": { "uv": [ 0, 6, 6, 8 ], "texture": "#spore" }, + "west": { "uv": [ 0, 6, 6, 8 ], "texture": "#spore" }, + "east": { "uv": [ 0, 6, 6, 8 ], "texture": "#spore" } + } + }, + { + "__comment": "Box1", + "from": [ 9, 11, 6 ], + "to": [ 15, 13, 12 ], + "shade": false, + "faces": { + "up": { "uv": [ 0, 0, 6, 6 ], "texture": "#spore" }, + "north": { "uv": [ 0, 6, 6, 8 ], "texture": "#spore" }, + "south": { "uv": [ 0, 6, 6, 8 ], "texture": "#spore" }, + "west": { "uv": [ 0, 6, 6, 8 ], "texture": "#spore" }, + "east": { "uv": [ 0, 6, 6, 8 ], "texture": "#spore" } + } + }, + { + "__comment": "PlaneX3", + "from": [ 6, 0, 3 ], + "to": [ 6.001, 12, 19 ], + "rotation": { "origin": [ 6, 0, 3 ], "axis": "y", "angle": 45 }, + "shade": false, + "faces": { + "west": { "uv": [ 0, 4, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 4, 16, 16 ], "texture": "#texture" } + } + }, + { + "__comment": "PlaneX3", + "from": [ 17.5, 0, 3 ], + "to": [ 17.501, 12, 19 ], + "rotation": { "origin": [ 17.5, 0, 3 ], "axis": "y", "angle": -45 }, + "shade": false, + "faces": { + "west": { "uv": [ 0, 4, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 4, 16, 16 ], "texture": "#texture" } + } + }, + { + "__comment": "Box1", + "from": [ 15, 13, 12 ], + "to": [ 9, 11, 6 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 0, 6, 6 ], "texture": "#spore" }, + "north": { "uv": [ 0, 6, 6, 8 ], "texture": "#spore" }, + "south": { "uv": [ 0, 6, 6, 8 ], "texture": "#spore" }, + "west": { "uv": [ 0, 6, 6, 8 ], "texture": "#spore" }, + "east": { "uv": [ 0, 6, 6, 8 ], "texture": "#spore" } + } + }, + { + "__comment": "Box1", + "from": [ 2, 10, 9 ], + "to": [ 8, 12, 15 ], + "shade": false, + "faces": { + "up": { "uv": [ 0, 0, 6, 6 ], "texture": "#spore" }, + "north": { "uv": [ 0, 6, 6, 8 ], "texture": "#spore" }, + "south": { "uv": [ 0, 6, 6, 8 ], "texture": "#spore" }, + "west": { "uv": [ 0, 6, 6, 8 ], "texture": "#spore" }, + "east": { "uv": [ 0, 6, 6, 8 ], "texture": "#spore" } + } + }, + { + "__comment": "PlaneX3", + "from": [ -1, 0, 6 ], + "to": [ -0.999, 11, 22 ], + "rotation": { "origin": [ -1, 0, 6 ], "axis": "y", "angle": 45 }, + "shade": false, + "faces": { + "west": { "uv": [ 0, 5, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 5, 16, 16 ], "texture": "#texture" } + } + }, + { + "__comment": "PlaneX3", + "from": [ 10.5, 0, 6 ], + "to": [ 10.501, 11, 22 ], + "rotation": { "origin": [ 10.5, 0, 6 ], "axis": "y", "angle": -45 }, + "shade": false, + "faces": { + "west": { "uv": [ 0, 5, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 5, 16, 16 ], "texture": "#texture" } + } + }, + { + "__comment": "Box1", + "from": [ 8, 12, 15 ], + "to": [ 2, 10, 9 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 0, 6, 6 ], "texture": "#spore" }, + "north": { "uv": [ 0, 6, 6, 8 ], "texture": "#spore" }, + "south": { "uv": [ 0, 6, 6, 8 ], "texture": "#spore" }, + "west": { "uv": [ 0, 6, 6, 8 ], "texture": "#spore" }, + "east": { "uv": [ 0, 6, 6, 8 ], "texture": "#spore" } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/models/item/umbrella_moss.json b/src/main/resources/assets/betterend/models/item/umbrella_moss.json new file mode 100644 index 00000000..e0556847 --- /dev/null +++ b/src/main/resources/assets/betterend/models/item/umbrella_moss.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "betterend:item/umbrella_moss_small" + } +} diff --git a/src/main/resources/assets/betterend/models/item/umbrella_moss_tall.json b/src/main/resources/assets/betterend/models/item/umbrella_moss_tall.json new file mode 100644 index 00000000..47ed1f14 --- /dev/null +++ b/src/main/resources/assets/betterend/models/item/umbrella_moss_tall.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "betterend:item/umbrella_moss_large" + } +} diff --git a/src/main/resources/assets/betterend/textures/block/umbrella_moss_bottom.png b/src/main/resources/assets/betterend/textures/block/umbrella_moss_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..cc899542dbf8468e64adb3ec7bd6b38bd2272f0a GIT binary patch literal 2248 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/betterend/textures/block/umbrella_moss_sporophyte.png b/src/main/resources/assets/betterend/textures/block/umbrella_moss_sporophyte.png new file mode 100644 index 0000000000000000000000000000000000000000..0311ec52b9890d00e2f95f3ccea6893557b1dd59 GIT binary patch literal 2024 zcmb_dTWB0r7@oFEtXuk!EZRrq=H&zAsxU2k^`xC9Zr!M~RfdtY2b z5LM3_seZ3txm#9|83Gzg!%)GrF`6LOwG?ci4nmJi!;E3YshLBcP^6*7sSRO;RqO=J z8Xcn!>>KS)siT9cq){z*kn0LECNQA~$by-(T)7aZio7x&`_l|X79rkXoNDtOlKn~# znLrLC!=VVRaw1Pgr4SckC0=YId6tVZY?R>yn&o6RA`22(x+v_;(R8^tc~{97{)$ss z&$DHQ$>;N-ybwZ8hT$YhVpyKxc^V^Vcf|5QfwtWGGD8x&s$T90WW6j?o-j_GClBvOa`CYJ3rY_CUHO@M%-qft?#g^0+~ zX)z|!JmfVtDghy^M$7j1I0jxsAb0INl_tpvltYe!G+brDmvB)^a);sKevOnCMIU^q zG|CxdQ9UwHeSya*)$c6SsM54CPh}RD*&J;?3o+?c+C2wzk?!Sz1KTpVii=Scvrzml z7`}S+lBx=l3UykQ!a5z}M3n}-#?v|wBb+X99EgeK?5~U->yMKKzAV;jjJ{M{H4Cf^ z#Cs+~U3)%@)9FIpxNJTBulX?kZaF74=5iGl|NUcU#qBIk;qBTVR?Z3hQ8{U#g-hk& zbA)HI+wmFnM`yAv75n_h<6PIWwi|a`oKYr^S^H~O*P2aD?Hhx&Z8LRW9jPw_4tJfL z{Pgq}4+pl6zcao2{82^!ejsrEfoHtp%3m8Zdh%!pg2t4Vc;}jx1R1mRGY#6bIU9nW zvIF7NF^V1aWZ)pjrLm5TYG zP_jhkE0>g4u}c=Q6o(WR!1+-c5QKS^furG2M4_W@B+g5NvHluE;5bBGV_9XLhUX2Jw+bz-;^vyv!orEv#MQgGrxfHj%()AKxY61KpT z8wskaL}OTEW22>!w1{#5vr-g=;RHqyC_tb}Q$%H=Xhg|PGI)4}l?6!^#0ac2GCr|h zbtAyjkr2XCiZ-Go(gYHQMHvaRT5vt2IFMsgIH_I^#f@_;#)tSYA5j&6wWhEjOI~jZ z{y^GrIE7Z!*$u#>L~IX4D^*PrkImy1v0i5R*$u#AZqhL+D5|0o6dw{t>T@a@i7u9T zMiu2MQ4A#uRgq+Yi;MNbxZu2MA;O7`$~4_jVh-w|rQJDzK zmwMa?aMdCR98Gd|pUX*bC{FM$l%;GW$`CFB^)W8ohLcvipJbBrJtAAL7g3)-qGwKI z0Y@rzH0dNc-p3IrMY$-{XS2CbmxIAko1JnxaNfpIB$;HJD+{2dn9$vp=vv^(r} zr_INrRtj8fq>V)>g7pC&&WE!O643h)_>SFTF(k@fkpnp=bwS64MVAN)s9sZ|MJoBl ziBU*^<65E_R+qaQVf8xm9Flk~JRnbx=g|mlV~_`=k0|~KOcDKRBO~)g0g%(j(HHhG z{}ra;(cZHx>%uA4kNSDL6?Kv}8|t(AS(GJM7spUGoTL27=13B6Aw zmklzJ01sAB40-Z+9#6FotHwRu^}oi0>1*eR)UbP1ct@{E%@=`g)HSLkDm#k_q-tF7 zUz#C5ZZ{-=+40c`5%y?{apYa=esVI{O!Q%D7XuHeeUOiU(#c?#Yipa*13_u0NdL|FFW){(;nR{mli2=l!p@ns=NfCcH4fd^m1b z=FH*ShiVO`m%F7)vU4pSJiW*Ck||XA{^HeXM$*`_Y|r#HndVQrR_)sVt|@15a8O!$ z?!t}^({no!)8|>AW&c!gt2cI}uNyuvX;gdr_v3wae)eEEcH*LYoMwLGPi@Po8Lj5i znQOJ*+GFR<#&?Fb?VI2BrDtVKhJ@u;uTSh*-CvtsU=C@Th8=vi<;$kw*I_u&OXD66`$5ls`+-Wd!5$2>~^>G%K>kzIClz}7qGBXvkixrPms3;hQia* gPYjLP<_AAc!5it7C)f3E(SL(VXP0}n&#GJbH*aM`h5!Hn literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/betterend/textures/item/umbrella_moss_large.png b/src/main/resources/assets/betterend/textures/item/umbrella_moss_large.png new file mode 100644 index 0000000000000000000000000000000000000000..c3498af8481742443e2fe5e33b305574c372acf5 GIT binary patch literal 2510 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 U@k{H=tiMmi1tq>s`P1h74N$~X^Z)<= literal 0 HcmV?d00001