From 28d501f3510dd7528874c1d5f21d24acb8b3ce9f Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Wed, 21 Oct 2020 17:02:22 +0300 Subject: [PATCH] Cave bushes --- .../betterend/blocks/AuroraCrystalBlock.java | 9 ++- .../betterend/blocks/BlockEndLotusLeaf.java | 9 ++- .../blocks/basis/BlockSimpleLeaves.java | 60 ++++++++++++++++++ .../ru/betterend/registry/BlockRegistry.java | 4 +- .../betterend/registry/FeatureRegistry.java | 6 ++ .../world/features/CaveBushFeature.java | 55 ++++++++++++++++ .../world/features/CaveBushFeatureCeil.java | 56 ++++++++++++++++ .../features/InvertedScatterFeature.java | 5 +- .../betterend/world/features/RoundCave.java | 18 ++++-- .../betterend/blockstates/cave_bush.json | 10 +++ .../materialmaps/block/cave_bush (2).json | 3 + .../materialmaps/block/cave_bush.json | 3 + .../betterend/materials/glow_50_blue.json | 10 +++ .../betterend/models/block/cave_bush_01.json | 6 ++ .../betterend/models/block/cave_bush_02.json | 6 ++ .../betterend/models/block/cave_bush_03.json | 6 ++ .../betterend/models/block/cave_bush_04.json | 6 ++ .../betterend/models/item/cave_bush.json | 3 + .../textures/block/cave_bush_leaves_4.png | Bin 0 -> 1976 bytes 19 files changed, 264 insertions(+), 11 deletions(-) create mode 100644 src/main/java/ru/betterend/blocks/basis/BlockSimpleLeaves.java create mode 100644 src/main/java/ru/betterend/world/features/CaveBushFeature.java create mode 100644 src/main/java/ru/betterend/world/features/CaveBushFeatureCeil.java create mode 100644 src/main/resources/assets/betterend/blockstates/cave_bush.json create mode 100644 src/main/resources/assets/betterend/materialmaps/block/cave_bush (2).json create mode 100644 src/main/resources/assets/betterend/materialmaps/block/cave_bush.json create mode 100644 src/main/resources/assets/betterend/materials/glow_50_blue.json create mode 100644 src/main/resources/assets/betterend/models/block/cave_bush_01.json create mode 100644 src/main/resources/assets/betterend/models/block/cave_bush_02.json create mode 100644 src/main/resources/assets/betterend/models/block/cave_bush_03.json create mode 100644 src/main/resources/assets/betterend/models/block/cave_bush_04.json create mode 100644 src/main/resources/assets/betterend/models/item/cave_bush.json create mode 100644 src/main/resources/assets/betterend/textures/block/cave_bush_leaves_4.png diff --git a/src/main/java/ru/betterend/blocks/AuroraCrystalBlock.java b/src/main/java/ru/betterend/blocks/AuroraCrystalBlock.java index b7d0885f..71e286e5 100644 --- a/src/main/java/ru/betterend/blocks/AuroraCrystalBlock.java +++ b/src/main/java/ru/betterend/blocks/AuroraCrystalBlock.java @@ -24,7 +24,14 @@ public class AuroraCrystalBlock extends AbstractGlassBlock implements IRenderTyp private static final Vec3i[] COLORS; public AuroraCrystalBlock() { - super(FabricBlockSettings.of(Material.GLASS).breakByTool(FabricToolTags.PICKAXES).sounds(BlockSoundGroup.GLASS).lightLevel(15).nonOpaque()); + super(FabricBlockSettings.of(Material.GLASS) + .breakByTool(FabricToolTags.PICKAXES) + .suffocates((state, world, pos) -> { return false; }) + .hardness(1F) + .resistance(1F) + .sounds(BlockSoundGroup.GLASS) + .lightLevel(15) + .nonOpaque()); } @Override diff --git a/src/main/java/ru/betterend/blocks/BlockEndLotusLeaf.java b/src/main/java/ru/betterend/blocks/BlockEndLotusLeaf.java index 9c8d0631..af2a4180 100644 --- a/src/main/java/ru/betterend/blocks/BlockEndLotusLeaf.java +++ b/src/main/java/ru/betterend/blocks/BlockEndLotusLeaf.java @@ -17,9 +17,11 @@ import net.minecraft.util.shape.VoxelShape; import net.minecraft.world.BlockView; import ru.betterend.blocks.BlockProperties.TripleShape; import ru.betterend.blocks.basis.BlockBaseNotFull; +import ru.betterend.client.ERenderLayer; +import ru.betterend.client.IRenderTypeable; import ru.betterend.util.BlocksHelper; -public class BlockEndLotusLeaf extends BlockBaseNotFull { +public class BlockEndLotusLeaf extends BlockBaseNotFull implements IRenderTypeable { public static final EnumProperty HORIZONTAL_FACING = Properties.HORIZONTAL_FACING; public static final EnumProperty SHAPE = BlockProperties.TRIPLE_SHAPE; private static final VoxelShape VSHAPE = Block.createCuboidShape(0, 0, 0, 16, 1, 16); @@ -47,4 +49,9 @@ public class BlockEndLotusLeaf extends BlockBaseNotFull { public BlockState mirror(BlockState state, BlockMirror mirror) { return BlocksHelper.mirrorHorizontal(state, mirror, HORIZONTAL_FACING); } + + @Override + public ERenderLayer getRenderLayer() { + return ERenderLayer.CUTOUT; + } } diff --git a/src/main/java/ru/betterend/blocks/basis/BlockSimpleLeaves.java b/src/main/java/ru/betterend/blocks/basis/BlockSimpleLeaves.java new file mode 100644 index 00000000..d1b349fe --- /dev/null +++ b/src/main/java/ru/betterend/blocks/basis/BlockSimpleLeaves.java @@ -0,0 +1,60 @@ +package ru.betterend.blocks.basis; + +import java.io.Reader; + +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.block.Material; +import net.minecraft.block.MaterialColor; +import net.minecraft.sound.BlockSoundGroup; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; +import ru.betterend.client.ERenderLayer; +import ru.betterend.client.IRenderTypeable; +import ru.betterend.interfaces.Patterned; + +public class BlockSimpleLeaves extends BlockBaseNotFull implements IRenderTypeable { + public BlockSimpleLeaves(MaterialColor color) { + super(FabricBlockSettings.of(Material.LEAVES) + .strength(0.2F) + .sounds(BlockSoundGroup.GRASS) + .nonOpaque() + .allowsSpawning((state, world, pos, type) -> { return false; }) + .suffocates((state, world, pos) -> { return false; }) + .blockVision((state, world, pos) -> { return false; }) + .materialColor(color)); + } + + public BlockSimpleLeaves(MaterialColor color, int light) { + super(FabricBlockSettings.of(Material.LEAVES) + .strength(0.2F) + .sounds(BlockSoundGroup.GRASS) + .nonOpaque() + .lightLevel(light) + .allowsSpawning((state, world, pos, type) -> { return false; }) + .suffocates((state, world, pos) -> { return false; }) + .blockVision((state, world, pos) -> { return false; }) + .materialColor(color)); + } + + @Override + public String getStatesPattern(Reader data) { + Identifier blockId = Registry.BLOCK.getId(this); + return Patterned.createJson(data, blockId, blockId.getPath()); + } + + @Override + public String getModelPattern(String block) { + Identifier blockId = Registry.BLOCK.getId(this); + return Patterned.createJson(Patterned.BASE_BLOCK_MODEL, blockId, blockId.getPath()); + } + + @Override + public Identifier statePatternId() { + return Patterned.BLOCK_STATES_PATTERN; + } + + @Override + public ERenderLayer getRenderLayer() { + return ERenderLayer.CUTOUT; + } +} \ No newline at end of file diff --git a/src/main/java/ru/betterend/registry/BlockRegistry.java b/src/main/java/ru/betterend/registry/BlockRegistry.java index 99cc8ef5..32cf7409 100644 --- a/src/main/java/ru/betterend/registry/BlockRegistry.java +++ b/src/main/java/ru/betterend/registry/BlockRegistry.java @@ -39,6 +39,7 @@ import ru.betterend.blocks.RunedFlavolite; import ru.betterend.blocks.TerminiteBlock; import ru.betterend.blocks.basis.BlockGlowingFur; import ru.betterend.blocks.basis.BlockLeaves; +import ru.betterend.blocks.basis.BlockSimpleLeaves; import ru.betterend.blocks.basis.BlockVine; import ru.betterend.blocks.complex.StoneMaterial; import ru.betterend.blocks.complex.WoodenMaterial; @@ -85,6 +86,7 @@ public class BlockRegistry { public static final Block UMBRELLA_MOSS = registerBlock("umbrella_moss", new BlockUmbrellaMoss()); public static final Block UMBRELLA_MOSS_TALL = registerBlock("umbrella_moss_tall", new BlockUmbrellaMossTall()); public static final Block CREEPING_MOSS = registerBlock("creeping_moss", new BlockGlowingMoss(11)); + public static final Block CHORUS_GRASS = registerBlock("chorus_grass", new BlockChorusGrass()); public static final Block CAVE_GRASS = registerBlock("cave_grass", new BlockTerrainPlant(CAVE_MOSS)); public static final Block BLUE_VINE_SEED = registerBlock("blue_vine_seed", new BlockBlueVineSeed()); @@ -96,7 +98,7 @@ public class BlockRegistry { public static final Block END_LILY = registerBlockNI("end_lily", new BlockEndLily()); public static final Block END_LILY_SEED = registerBlock("end_lily_seed", new BlockEndLilySeed()); - public static final Block CHORUS_GRASS = registerBlock("chorus_grass", new BlockChorusGrass()); + public static final Block CAVE_BUSH = registerBlock("cave_bush", new BlockSimpleLeaves(MaterialColor.MAGENTA)); // Vines // public static final Block DENSE_VINE = registerBlock("dense_vine", new BlockVine(15, true)); diff --git a/src/main/java/ru/betterend/registry/FeatureRegistry.java b/src/main/java/ru/betterend/registry/FeatureRegistry.java index 7ae8ecdd..2f1235db 100644 --- a/src/main/java/ru/betterend/registry/FeatureRegistry.java +++ b/src/main/java/ru/betterend/registry/FeatureRegistry.java @@ -9,6 +9,8 @@ import net.minecraft.util.Identifier; import net.minecraft.world.biome.Biome; import net.minecraft.world.gen.feature.ConfiguredFeature; import ru.betterend.world.features.BlueVineFeature; +import ru.betterend.world.features.CaveBushFeature; +import ru.betterend.world.features.CaveBushFeatureCeil; import ru.betterend.world.features.CavePlantFeature; import ru.betterend.world.features.DoublePlantFeature; import ru.betterend.world.features.EndFeature; @@ -38,6 +40,8 @@ public class FeatureRegistry { public static final EndFeature BLUE_VINE = new EndFeature("blue_vine", new BlueVineFeature(), 1); public static final EndFeature CHORUS_GRASS = new EndFeature("chorus_grass", new SinglePlantFeature(BlockRegistry.CHORUS_GRASS, 4), 5); public static final EndFeature CAVE_GRASS = new EndFeature("cave_grass", new CavePlantFeature(BlockRegistry.CAVE_GRASS, 7), 5); + public static final EndFeature CAVE_BUSH = new EndFeature("cave_bush", new CaveBushFeature(5), 2); + public static final EndFeature CAVE_BUSH_CEIL = new EndFeature("cave_bush_ceil", new CaveBushFeatureCeil(15), 10); public static final EndFeature DENSE_VINE = new EndFeature("dense_vine", new VineFeature(BlockRegistry.DENSE_VINE, 24), 3); @@ -64,6 +68,8 @@ public class FeatureRegistry { addFeature(ENDER_ORE, features); addFeature(ROUND_CAVE_RARE, features); addFeature(CAVE_GRASS, features); + addFeature(CAVE_BUSH, features); + addFeature(CAVE_BUSH_CEIL, features); if (id.getNamespace().equals("minecraft")) { if (id.getPath().equals("end_highlands")) { diff --git a/src/main/java/ru/betterend/world/features/CaveBushFeature.java b/src/main/java/ru/betterend/world/features/CaveBushFeature.java new file mode 100644 index 00000000..2954b70e --- /dev/null +++ b/src/main/java/ru/betterend/world/features/CaveBushFeature.java @@ -0,0 +1,55 @@ +package ru.betterend.world.features; + +import java.util.Random; +import java.util.function.Function; + +import net.minecraft.block.BlockState; +import net.minecraft.block.Material; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.StructureWorldAccess; +import ru.betterend.noise.OpenSimplexNoise; +import ru.betterend.registry.BlockRegistry; +import ru.betterend.util.BlocksHelper; +import ru.betterend.util.MHelper; +import ru.betterend.util.sdf.SDF; +import ru.betterend.util.sdf.operator.SDFDisplacement; +import ru.betterend.util.sdf.operator.SDFScale3D; +import ru.betterend.util.sdf.operator.SDFSubtraction; +import ru.betterend.util.sdf.operator.SDFTranslate; +import ru.betterend.util.sdf.primitive.SDFSphere; + +public class CaveBushFeature extends FullHeightScatterFeature { + public CaveBushFeature(int radius) { + super(radius); + } + + private static final Function REPLACE; + + @Override + public boolean canGenerate(StructureWorldAccess world, Random random, BlockPos center, BlockPos blockPos, float radius) { + return world.getBlockState(blockPos.down()).isOf(BlockRegistry.CAVE_MOSS); + } + + @Override + public void generate(StructureWorldAccess world, Random random, BlockPos blockPos) { + float radius = MHelper.randRange(0.8F, 2.5F, random); + OpenSimplexNoise noise = new OpenSimplexNoise(random.nextInt()); + SDF sphere = new SDFSphere().setRadius(radius).setBlock(BlockRegistry.CAVE_BUSH); + sphere = new SDFScale3D().setScale(MHelper.randRange(0.8F, 1.2F, random), MHelper.randRange(0.8F, 1.2F, random), MHelper.randRange(0.8F, 1.2F, random)).setSource(sphere); + sphere = new SDFDisplacement().setFunction((vec) -> { return (float) noise.eval(vec.getX() * 0.2, vec.getY() * 0.2, vec.getZ() * 0.2) * 3; }).setSource(sphere); + sphere = new SDFDisplacement().setFunction((vec) -> { return random.nextFloat() * 3F - 1.5F; }).setSource(sphere); + sphere = new SDFSubtraction().setSourceA(sphere).setSourceB(new SDFTranslate().setTranslate(0, -radius, 0).setSource(sphere)); + sphere.setReplaceFunction(REPLACE); + sphere.fillRecursive(world, blockPos); + BlocksHelper.setWithoutUpdate(world, blockPos, BlockRegistry.CAVE_BUSH); + } + + static { + REPLACE = (state) -> { + if (state.getMaterial().equals(Material.PLANT)) { + return true; + } + return state.getMaterial().isReplaceable(); + }; + } +} diff --git a/src/main/java/ru/betterend/world/features/CaveBushFeatureCeil.java b/src/main/java/ru/betterend/world/features/CaveBushFeatureCeil.java new file mode 100644 index 00000000..9e0def15 --- /dev/null +++ b/src/main/java/ru/betterend/world/features/CaveBushFeatureCeil.java @@ -0,0 +1,56 @@ +package ru.betterend.world.features; + +import java.util.Random; +import java.util.function.Function; + +import net.minecraft.block.BlockState; +import net.minecraft.block.Material; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.StructureWorldAccess; +import ru.betterend.noise.OpenSimplexNoise; +import ru.betterend.registry.BlockRegistry; +import ru.betterend.registry.BlockTagRegistry; +import ru.betterend.util.BlocksHelper; +import ru.betterend.util.MHelper; +import ru.betterend.util.sdf.SDF; +import ru.betterend.util.sdf.operator.SDFDisplacement; +import ru.betterend.util.sdf.operator.SDFScale3D; +import ru.betterend.util.sdf.operator.SDFSubtraction; +import ru.betterend.util.sdf.operator.SDFTranslate; +import ru.betterend.util.sdf.primitive.SDFSphere; + +public class CaveBushFeatureCeil extends InvertedScatterFeature { + public CaveBushFeatureCeil(int radius) { + super(radius); + } + + private static final Function REPLACE; + + @Override + public boolean canGenerate(StructureWorldAccess world, Random random, BlockPos center, BlockPos blockPos, float radius) { + return blockPos.getY() < 64 && world.isAir(blockPos) && world.getBlockState(blockPos.up()).isIn(BlockTagRegistry.GEN_TERRAIN); + } + + @Override + public void generate(StructureWorldAccess world, Random random, BlockPos blockPos) { + float radius = MHelper.randRange(0.8F, 2.5F, random); + OpenSimplexNoise noise = new OpenSimplexNoise(random.nextInt()); + SDF sphere = new SDFSphere().setRadius(radius).setBlock(BlockRegistry.CAVE_BUSH); + sphere = new SDFScale3D().setScale(MHelper.randRange(0.8F, 1.2F, random), MHelper.randRange(0.8F, 1.2F, random), MHelper.randRange(0.8F, 1.2F, random)).setSource(sphere); + sphere = new SDFDisplacement().setFunction((vec) -> { return (float) noise.eval(vec.getX() * 0.2, vec.getY() * 0.2, vec.getZ() * 0.2) * 3; }).setSource(sphere); + sphere = new SDFDisplacement().setFunction((vec) -> { return random.nextFloat() * 3F - 1.5F; }).setSource(sphere); + sphere = new SDFSubtraction().setSourceA(sphere).setSourceB(new SDFTranslate().setTranslate(0, -radius, 0).setSource(sphere)); + sphere.setReplaceFunction(REPLACE); + sphere.fillRecursive(world, blockPos.down()); + BlocksHelper.setWithoutUpdate(world, blockPos.down(), BlockRegistry.CAVE_BUSH); + } + + static { + REPLACE = (state) -> { + if (state.getMaterial().equals(Material.PLANT)) { + return true; + } + return state.getMaterial().isReplaceable(); + }; + } +} diff --git a/src/main/java/ru/betterend/world/features/InvertedScatterFeature.java b/src/main/java/ru/betterend/world/features/InvertedScatterFeature.java index ae2b656e..041fba99 100644 --- a/src/main/java/ru/betterend/world/features/InvertedScatterFeature.java +++ b/src/main/java/ru/betterend/world/features/InvertedScatterFeature.java @@ -4,6 +4,7 @@ import java.util.Random; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos.Mutable; +import net.minecraft.world.Heightmap; import net.minecraft.world.StructureWorldAccess; import net.minecraft.world.gen.chunk.ChunkGenerator; import net.minecraft.world.gen.feature.DefaultFeatureConfig; @@ -24,7 +25,9 @@ public abstract class InvertedScatterFeature extends DefaultFeature { @Override public boolean generate(StructureWorldAccess world, ChunkGenerator chunkGenerator, Random random, BlockPos center, DefaultFeatureConfig featureConfig) { - for (int y = 128; y > 0; y--) { + int maxY = world.getTopY(Heightmap.Type.WORLD_SURFACE_WG, center.getX(), center.getZ()); + int minY = BlocksHelper.upRay(world, new BlockPos(center.getX(), 0, center.getZ()), maxY); + for (int y = maxY; y > minY; y--) { POS.set(center.getX(), y, center.getZ()); if (world.getBlockState(POS).isAir() && !world.getBlockState(POS.up()).isAir()) { float r = MHelper.randRange(radius * 0.5F, radius, random); diff --git a/src/main/java/ru/betterend/world/features/RoundCave.java b/src/main/java/ru/betterend/world/features/RoundCave.java index f122e5b5..8f7b41b3 100644 --- a/src/main/java/ru/betterend/world/features/RoundCave.java +++ b/src/main/java/ru/betterend/world/features/RoundCave.java @@ -3,6 +3,7 @@ package ru.betterend.world.features; import java.util.Random; import net.minecraft.block.BlockState; +import net.minecraft.block.Material; import net.minecraft.client.util.math.Vector3f; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos.Mutable; @@ -44,9 +45,7 @@ public class RoundCave extends DefaultFeature { double nr = radius * 0.25; Mutable bpos = new Mutable(); - BlockState stateGround; BlockState terrain = BlockRegistry.CAVE_MOSS.getDefaultState(); - //BlockState grass = BlockRegistry.CAVE_GRASS.getDefaultState(); for (int x = x1; x <= x2; x++) { int xsq = x - pos.getX(); xsq *= xsq; @@ -63,16 +62,12 @@ public class RoundCave extends DefaultFeature { double r = noise.eval(x * 0.1, y * 0.1, z * 0.1) * nr + hr; double dist = xsq + ysq + zsq; if (dist < r * r) { - if ((stateGround = world.getBlockState(bpos)).isIn(BlockTagRegistry.GEN_TERRAIN) || stateGround.getMaterial().isReplaceable()) { + if (isReplaceable(world.getBlockState(bpos))) { BlocksHelper.setWithoutUpdate(world, bpos, AIR); } bpos.setY(y - 1); if (world.getBlockState(bpos).isIn(BlockTagRegistry.GEN_TERRAIN)) { BlocksHelper.setWithoutUpdate(world, bpos, terrain); - /*if (random.nextInt(8) == 0) { - bpos.setY(y); - BlocksHelper.setWithoutUpdate(world, bpos, grass); - }*/ } } } @@ -95,6 +90,15 @@ public class RoundCave extends DefaultFeature { } } + BlocksHelper.fixBlocks(world, new BlockPos(x1, y1, z1), new BlockPos(x2, y2, z2)); + return true; } + + private boolean isReplaceable(BlockState state) { + return state.isIn(BlockTagRegistry.GEN_TERRAIN) + || state.getMaterial().isReplaceable() + || state.getMaterial().equals(Material.PLANT) + || state.getMaterial().equals(Material.LEAVES); + } } diff --git a/src/main/resources/assets/betterend/blockstates/cave_bush.json b/src/main/resources/assets/betterend/blockstates/cave_bush.json new file mode 100644 index 00000000..f6b158d2 --- /dev/null +++ b/src/main/resources/assets/betterend/blockstates/cave_bush.json @@ -0,0 +1,10 @@ +{ + "variants": { + "": [ + { "model": "betterend:block/cave_bush_01", "weight": 3 }, + { "model": "betterend:block/cave_bush_02" }, + { "model": "betterend:block/cave_bush_03" }, + { "model": "betterend:block/cave_bush_04" } + ] + } +} diff --git a/src/main/resources/assets/betterend/materialmaps/block/cave_bush (2).json b/src/main/resources/assets/betterend/materialmaps/block/cave_bush (2).json new file mode 100644 index 00000000..83329294 --- /dev/null +++ b/src/main/resources/assets/betterend/materialmaps/block/cave_bush (2).json @@ -0,0 +1,3 @@ +{ + "defaultMaterial": "betterend:waving_floor_glow_50_blue" +} diff --git a/src/main/resources/assets/betterend/materialmaps/block/cave_bush.json b/src/main/resources/assets/betterend/materialmaps/block/cave_bush.json new file mode 100644 index 00000000..63a35b8e --- /dev/null +++ b/src/main/resources/assets/betterend/materialmaps/block/cave_bush.json @@ -0,0 +1,3 @@ +{ + "defaultMaterial": "betterend:glow_50_blue" +} diff --git a/src/main/resources/assets/betterend/materials/glow_50_blue.json b/src/main/resources/assets/betterend/materials/glow_50_blue.json new file mode 100644 index 00000000..bffc638f --- /dev/null +++ b/src/main/resources/assets/betterend/materials/glow_50_blue.json @@ -0,0 +1,10 @@ +{ + "layers": [ + { + "vertexSource": "canvas:shaders/material/default.vert", + "fragmentSource": "betterend:shaders/material/glow_50_blue.frag", + "disableAo": true, + "disableDiffuse": true + } + ] +} diff --git a/src/main/resources/assets/betterend/models/block/cave_bush_01.json b/src/main/resources/assets/betterend/models/block/cave_bush_01.json new file mode 100644 index 00000000..aa1936fe --- /dev/null +++ b/src/main/resources/assets/betterend/models/block/cave_bush_01.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "betterend:block/cave_bush_leaves_1" + } +} diff --git a/src/main/resources/assets/betterend/models/block/cave_bush_02.json b/src/main/resources/assets/betterend/models/block/cave_bush_02.json new file mode 100644 index 00000000..69b07eaa --- /dev/null +++ b/src/main/resources/assets/betterend/models/block/cave_bush_02.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "betterend:block/cave_bush_leaves_2" + } +} diff --git a/src/main/resources/assets/betterend/models/block/cave_bush_03.json b/src/main/resources/assets/betterend/models/block/cave_bush_03.json new file mode 100644 index 00000000..7125d3ae --- /dev/null +++ b/src/main/resources/assets/betterend/models/block/cave_bush_03.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "betterend:block/cave_bush_leaves_3" + } +} diff --git a/src/main/resources/assets/betterend/models/block/cave_bush_04.json b/src/main/resources/assets/betterend/models/block/cave_bush_04.json new file mode 100644 index 00000000..669c71c2 --- /dev/null +++ b/src/main/resources/assets/betterend/models/block/cave_bush_04.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "betterend:block/cave_bush_leaves_4" + } +} diff --git a/src/main/resources/assets/betterend/models/item/cave_bush.json b/src/main/resources/assets/betterend/models/item/cave_bush.json new file mode 100644 index 00000000..81e09eff --- /dev/null +++ b/src/main/resources/assets/betterend/models/item/cave_bush.json @@ -0,0 +1,3 @@ +{ + "parent": "betterend:block/cave_bush_01" +} diff --git a/src/main/resources/assets/betterend/textures/block/cave_bush_leaves_4.png b/src/main/resources/assets/betterend/textures/block/cave_bush_leaves_4.png new file mode 100644 index 0000000000000000000000000000000000000000..b67da077783d7db573f678b12cd1494c9bbaa380 GIT binary patch literal 1976 zcmcIleQXnD7{3k1U@ZwE2@Z^04kI&iy^mf$?xeD@4!3A$g(l2Mkhgbl+jH&Rad)Hb zBw2?#MTZVBILyeVpds-iGBu)x0YPvE2s&es1Ow9uF(Ttb8R28~y{)ap0NFn_x!!ws zzxVh2p6B=6bL)cjk4`O{Rfb{M)Vf;#5_Fzs9g`=a|2dbk0G+02wNDusX1m)uimbONNN~5QV9*AF>JxYlm^5`XyRcQl@%W`^wk~$mn9#u%oU&m zS~ZNxwaq$Q+FTzJn;S)5A{IV^FGvZ9AOTH)rxJ0+5K=y3lvhA&>o!H;qY$&vM^sq> z@rFPUuU2)4yBuy(WH=W0@D9dJ^DH+XXKBVm(H@F%k~AaGZo$dpxgUX|=~6^k;$NJL zg|2)=%rrHDqLRs^Bk6RgdX!>#o~LM*Vp$R)NF%M7AVn(1+&qIH8lo<1rmQNs#R$S` zlj$Rn(ymk}H(DWEI zfLcKUCKw-BmE=fzJkUTus8b9RC?c%$`v@e;A!NW;jNn#|D;~^kn1Rz@N z?juCYXDAW5+wv`{H$I(Xw8@Bd%* zx#Eg3phO{>pcG-{Ls_$C%o^&yu8lssX)fjAXxLfH!jwf9g*gosM6IJKeDuDvJs4KB zzRq72@*Wbq=9OQ}Uijviea^_5=#{HOGq+*RGcD;APqw|({fyHb@gD5QCSH1X(crV8 zEBEi!aaZs4ciP+K`IGDe@$1>vjqQ~aMqd3`bMCNxOP^RX{KDY1Jtyt2^?qsZOP;3P zs~*1Ia`lh7+dk{O+9L6b&6yed``4N?%+?>zXAhq|v+vUvca%-2UH|s>vJ-UYtX;Og zksAlj4-O@#&5n0swt1cBuBA8b?Al*;_QMa3%`V@t`}x7*X_)L!79D?0 Sd$RRyt*fc`f3#@j+J6AatFBc5 literal 0 HcmV?d00001