From 8a89794f0801e0092f63dce80ba9f5c29fab8bd3 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Wed, 21 Oct 2020 16:12:18 +0300 Subject: [PATCH] Cave Flora --- .../betterend/blocks/BlockTerrainPlant.java | 19 ++++++ .../ru/betterend/registry/BlockRegistry.java | 4 ++ .../betterend/registry/BlockTagRegistry.java | 1 + .../betterend/registry/FeatureRegistry.java | 3 + .../world/features/CavePlantFeature.java | 27 +++++++++ .../features/FullHeightScatterFeature.java | 54 ++++++++++++++++++ .../betterend/world/features/RoundCave.java | 14 ++++- .../betterend/blockstates/cave_grass.json | 14 +++++ .../betterend/blockstates/cave_moss.json | 21 +++++++ .../betterend/blockstates/cave_moss_path.json | 10 ++++ .../betterend/blockstates/chorus_grass.json | 26 +-------- .../betterend/models/block/cave_grass_01.json | 6 ++ .../betterend/models/block/cave_grass_02.json | 6 ++ .../betterend/models/block/cave_grass_03.json | 6 ++ .../betterend/models/block/cave_grass_04.json | 6 ++ .../betterend/models/block/cave_grass_05.json | 6 ++ .../betterend/models/block/cave_grass_06.json | 6 ++ .../betterend/models/block/cave_grass_07.json | 6 ++ .../betterend/models/block/cave_grass_08.json | 6 ++ .../betterend/models/block/cave_moss.json | 12 ++++ .../models/block/cave_moss_path.json | 7 +++ .../models/block/cross_inverted.json | 26 +++++++++ .../betterend/models/item/cave_grass.json | 6 ++ .../betterend/models/item/cave_moss.json | 3 + .../betterend/models/item/cave_moss_path.json | 3 + .../textures/block/cave_bush_leaves_1.png | Bin 0 -> 1947 bytes .../textures/block/cave_bush_leaves_2.png | Bin 0 -> 2054 bytes .../textures/block/cave_bush_leaves_3.png | Bin 0 -> 2021 bytes .../betterend/textures/block/cave_grass_1.png | Bin 0 -> 2364 bytes .../betterend/textures/block/cave_grass_2.png | Bin 0 -> 3107 bytes .../textures/block/cave_moss_path_top.png | Bin 0 -> 2316 bytes .../textures/block/cave_moss_side.png | Bin 0 -> 2182 bytes .../textures/block/cave_moss_top.png | Bin 0 -> 2010 bytes 33 files changed, 272 insertions(+), 26 deletions(-) create mode 100644 src/main/java/ru/betterend/blocks/BlockTerrainPlant.java create mode 100644 src/main/java/ru/betterend/world/features/CavePlantFeature.java create mode 100644 src/main/java/ru/betterend/world/features/FullHeightScatterFeature.java create mode 100644 src/main/resources/assets/betterend/blockstates/cave_grass.json create mode 100644 src/main/resources/assets/betterend/blockstates/cave_moss.json create mode 100644 src/main/resources/assets/betterend/blockstates/cave_moss_path.json create mode 100644 src/main/resources/assets/betterend/models/block/cave_grass_01.json create mode 100644 src/main/resources/assets/betterend/models/block/cave_grass_02.json create mode 100644 src/main/resources/assets/betterend/models/block/cave_grass_03.json create mode 100644 src/main/resources/assets/betterend/models/block/cave_grass_04.json create mode 100644 src/main/resources/assets/betterend/models/block/cave_grass_05.json create mode 100644 src/main/resources/assets/betterend/models/block/cave_grass_06.json create mode 100644 src/main/resources/assets/betterend/models/block/cave_grass_07.json create mode 100644 src/main/resources/assets/betterend/models/block/cave_grass_08.json create mode 100644 src/main/resources/assets/betterend/models/block/cave_moss.json create mode 100644 src/main/resources/assets/betterend/models/block/cave_moss_path.json create mode 100644 src/main/resources/assets/betterend/models/block/cross_inverted.json create mode 100644 src/main/resources/assets/betterend/models/item/cave_grass.json create mode 100644 src/main/resources/assets/betterend/models/item/cave_moss.json create mode 100644 src/main/resources/assets/betterend/models/item/cave_moss_path.json create mode 100644 src/main/resources/assets/betterend/textures/block/cave_bush_leaves_1.png create mode 100644 src/main/resources/assets/betterend/textures/block/cave_bush_leaves_2.png create mode 100644 src/main/resources/assets/betterend/textures/block/cave_bush_leaves_3.png create mode 100644 src/main/resources/assets/betterend/textures/block/cave_grass_1.png create mode 100644 src/main/resources/assets/betterend/textures/block/cave_grass_2.png create mode 100644 src/main/resources/assets/betterend/textures/block/cave_moss_path_top.png create mode 100644 src/main/resources/assets/betterend/textures/block/cave_moss_side.png create mode 100644 src/main/resources/assets/betterend/textures/block/cave_moss_top.png diff --git a/src/main/java/ru/betterend/blocks/BlockTerrainPlant.java b/src/main/java/ru/betterend/blocks/BlockTerrainPlant.java new file mode 100644 index 00000000..d3587c9b --- /dev/null +++ b/src/main/java/ru/betterend/blocks/BlockTerrainPlant.java @@ -0,0 +1,19 @@ +package ru.betterend.blocks; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import ru.betterend.blocks.basis.BlockPlant; + +public class BlockTerrainPlant extends BlockPlant { + private final Block ground; + + public BlockTerrainPlant(Block ground) { + super(true); + this.ground = ground; + } + + @Override + protected boolean isTerrain(BlockState state) { + return state.isOf(ground); + } +} diff --git a/src/main/java/ru/betterend/registry/BlockRegistry.java b/src/main/java/ru/betterend/registry/BlockRegistry.java index 2b20a0b9..99cc8ef5 100644 --- a/src/main/java/ru/betterend/registry/BlockRegistry.java +++ b/src/main/java/ru/betterend/registry/BlockRegistry.java @@ -28,6 +28,7 @@ import ru.betterend.blocks.BlockMossyPythadendronSapling; import ru.betterend.blocks.BlockOre; import ru.betterend.blocks.BlockPath; import ru.betterend.blocks.BlockTerrain; +import ru.betterend.blocks.BlockTerrainPlant; import ru.betterend.blocks.BlockUmbrellaMoss; import ru.betterend.blocks.BlockUmbrellaMossTall; import ru.betterend.blocks.EndPortalBlock; @@ -49,11 +50,13 @@ public class BlockRegistry { public static final Block END_MYCELIUM = registerBlock("end_mycelium", new BlockTerrain(MaterialColor.LIGHT_BLUE)); public static final Block END_MOSS = registerBlock("end_moss", new BlockTerrain(MaterialColor.CYAN)); public static final Block CHORUS_NYLIUM = registerBlock("chorus_nylium", new BlockTerrain(MaterialColor.MAGENTA)); + public static final Block CAVE_MOSS = registerBlock("cave_moss", new BlockTerrain(MaterialColor.PURPLE)); // Roads // public static final Block END_MYCELIUM_PATH = registerBlock("end_mycelium_path", new BlockPath(END_MYCELIUM)); public static final Block END_MOSS_PATH = registerBlock("end_moss_path", new BlockPath(END_MOSS)); public static final Block CHORUS_NYLIUM_PATH = registerBlock("chorus_nylium_path", new BlockPath(CHORUS_NYLIUM)); + public static final Block CAVE_MOSS_PATH = registerBlock("cave_moss_path", new BlockPath(CAVE_MOSS)); // Rocks // public static final StoneMaterial FLAVOLITE = new StoneMaterial("flavolite", MaterialColor.SAND); @@ -82,6 +85,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 CAVE_GRASS = registerBlock("cave_grass", new BlockTerrainPlant(CAVE_MOSS)); public static final Block BLUE_VINE_SEED = registerBlock("blue_vine_seed", new BlockBlueVineSeed()); public static final Block BLUE_VINE = registerBlockNI("blue_vine", new BlockBlueVine()); diff --git a/src/main/java/ru/betterend/registry/BlockTagRegistry.java b/src/main/java/ru/betterend/registry/BlockTagRegistry.java index 24e2ead4..ca7d6ca8 100644 --- a/src/main/java/ru/betterend/registry/BlockTagRegistry.java +++ b/src/main/java/ru/betterend/registry/BlockTagRegistry.java @@ -24,6 +24,7 @@ public class BlockTagRegistry { addSurfaceBlock(BlockRegistry.END_MYCELIUM); addSurfaceBlock(BlockRegistry.CHORUS_NYLIUM); addSurfaceBlock(BlockRegistry.ENDSTONE_DUST); + addSurfaceBlock(BlockRegistry.CAVE_MOSS); TagHelper.addTag(GEN_TERRAIN, BlockRegistry.ENDER_ORE, BlockRegistry.FLAVOLITE.stone, BlockRegistry.VIOLECITE.stone); } diff --git a/src/main/java/ru/betterend/registry/FeatureRegistry.java b/src/main/java/ru/betterend/registry/FeatureRegistry.java index 10ecde55..7ae8ecdd 100644 --- a/src/main/java/ru/betterend/registry/FeatureRegistry.java +++ b/src/main/java/ru/betterend/registry/FeatureRegistry.java @@ -9,6 +9,7 @@ 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.CavePlantFeature; import ru.betterend.world.features.DoublePlantFeature; import ru.betterend.world.features.EndFeature; import ru.betterend.world.features.EndLakeFeature; @@ -36,6 +37,7 @@ public class FeatureRegistry { public static final EndFeature CREEPING_MOSS = new EndFeature("creeping_moss", new SinglePlantFeature(BlockRegistry.CREEPING_MOSS, 5), 5); 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 DENSE_VINE = new EndFeature("dense_vine", new VineFeature(BlockRegistry.DENSE_VINE, 24), 3); @@ -61,6 +63,7 @@ public class FeatureRegistry { addFeature(FLAVOLITE_LAYER, features); addFeature(ENDER_ORE, features); addFeature(ROUND_CAVE_RARE, features); + addFeature(CAVE_GRASS, features); if (id.getNamespace().equals("minecraft")) { if (id.getPath().equals("end_highlands")) { diff --git a/src/main/java/ru/betterend/world/features/CavePlantFeature.java b/src/main/java/ru/betterend/world/features/CavePlantFeature.java new file mode 100644 index 00000000..59c8a8a7 --- /dev/null +++ b/src/main/java/ru/betterend/world/features/CavePlantFeature.java @@ -0,0 +1,27 @@ +package ru.betterend.world.features; + +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.StructureWorldAccess; +import ru.betterend.util.BlocksHelper; + +public class CavePlantFeature extends FullHeightScatterFeature { + private final Block plant; + + public CavePlantFeature(Block plant, int radius) { + super(radius); + this.plant = plant; + } + + @Override + public boolean canGenerate(StructureWorldAccess world, Random random, BlockPos center, BlockPos blockPos, float radius) { + return plant.canPlaceAt(world.getBlockState(blockPos), world, blockPos); + } + + @Override + public void generate(StructureWorldAccess world, Random random, BlockPos blockPos) { + BlocksHelper.setWithoutUpdate(world, blockPos, plant); + } +} diff --git a/src/main/java/ru/betterend/world/features/FullHeightScatterFeature.java b/src/main/java/ru/betterend/world/features/FullHeightScatterFeature.java new file mode 100644 index 00000000..b5b112f9 --- /dev/null +++ b/src/main/java/ru/betterend/world/features/FullHeightScatterFeature.java @@ -0,0 +1,54 @@ +package ru.betterend.world.features; + +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; +import ru.betterend.util.BlocksHelper; +import ru.betterend.util.MHelper; + +public abstract class FullHeightScatterFeature extends DefaultFeature { + private static final Mutable POS = new Mutable(); + private final int radius; + + public FullHeightScatterFeature(int radius) { + this.radius = radius; + } + + public abstract boolean canGenerate(StructureWorldAccess world, Random random, BlockPos center, BlockPos blockPos, float radius); + + public abstract void generate(StructureWorldAccess world, Random random, BlockPos blockPos); + + @Override + public boolean generate(StructureWorldAccess world, ChunkGenerator chunkGenerator, Random random, BlockPos center, DefaultFeatureConfig featureConfig) { + 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.down()).isAir()) { + float r = MHelper.randRange(radius * 0.5F, radius, random); + int count = MHelper.floor(r * r * MHelper.randRange(1.5F, 3F, random)); + for (int i = 0; i < count; i++) { + float pr = r * (float) Math.sqrt(random.nextFloat()); + float theta = random.nextFloat() * MHelper.PI2; + float x = pr * (float) Math.cos(theta); + float z = pr * (float) Math.sin(theta); + + POS.set(center.getX() + x, y + 5, center.getZ() + z); + int down = BlocksHelper.downRay(world, POS, 16); + if (down > 10) continue; + POS.setY(POS.getY() - down); + + if (canGenerate(world, random, center, POS, r)) { + generate(world, random, POS); + } + } + } + } + return true; + } +} diff --git a/src/main/java/ru/betterend/world/features/RoundCave.java b/src/main/java/ru/betterend/world/features/RoundCave.java index ceee05c7..f122e5b5 100644 --- a/src/main/java/ru/betterend/world/features/RoundCave.java +++ b/src/main/java/ru/betterend/world/features/RoundCave.java @@ -2,6 +2,7 @@ package ru.betterend.world.features; import java.util.Random; +import net.minecraft.block.BlockState; import net.minecraft.client.util.math.Vector3f; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos.Mutable; @@ -43,6 +44,9 @@ 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; @@ -59,9 +63,17 @@ 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 (world.getBlockState(bpos).isIn(BlockTagRegistry.GEN_TERRAIN)) { + if ((stateGround = world.getBlockState(bpos)).isIn(BlockTagRegistry.GEN_TERRAIN) || stateGround.getMaterial().isReplaceable()) { 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); + }*/ + } } } } diff --git a/src/main/resources/assets/betterend/blockstates/cave_grass.json b/src/main/resources/assets/betterend/blockstates/cave_grass.json new file mode 100644 index 00000000..5c5e629e --- /dev/null +++ b/src/main/resources/assets/betterend/blockstates/cave_grass.json @@ -0,0 +1,14 @@ +{ + "variants": { + "": [ + { "model": "betterend:block/cave_grass_01" }, + { "model": "betterend:block/cave_grass_02" }, + { "model": "betterend:block/cave_grass_03" }, + { "model": "betterend:block/cave_grass_04" }, + { "model": "betterend:block/cave_grass_05" }, + { "model": "betterend:block/cave_grass_06" }, + { "model": "betterend:block/cave_grass_07" }, + { "model": "betterend:block/cave_grass_08" } + ] + } +} diff --git a/src/main/resources/assets/betterend/blockstates/cave_moss.json b/src/main/resources/assets/betterend/blockstates/cave_moss.json new file mode 100644 index 00000000..2850aa74 --- /dev/null +++ b/src/main/resources/assets/betterend/blockstates/cave_moss.json @@ -0,0 +1,21 @@ +{ + "variants": { + "": [ + { + "model": "betterend:block/cave_moss" + }, + { + "model": "betterend:block/cave_moss", + "y": 90 + }, + { + "model": "betterend:block/cave_moss", + "y": 180 + }, + { + "model": "betterend:block/cave_moss", + "y": 270 + } + ] + } +} diff --git a/src/main/resources/assets/betterend/blockstates/cave_moss_path.json b/src/main/resources/assets/betterend/blockstates/cave_moss_path.json new file mode 100644 index 00000000..41a59367 --- /dev/null +++ b/src/main/resources/assets/betterend/blockstates/cave_moss_path.json @@ -0,0 +1,10 @@ +{ + "variants": { + "": [ + { "model": "betterend:block/cave_moss_path" }, + { "model": "betterend:block/cave_moss_path", "y": 90 }, + { "model": "betterend:block/cave_moss_path", "y": 180 }, + { "model": "betterend:block/cave_moss_path", "y": 270 } + ] + } +} diff --git a/src/main/resources/assets/betterend/blockstates/chorus_grass.json b/src/main/resources/assets/betterend/blockstates/chorus_grass.json index 6de30ad2..59f9eb5e 100644 --- a/src/main/resources/assets/betterend/blockstates/chorus_grass.json +++ b/src/main/resources/assets/betterend/blockstates/chorus_grass.json @@ -8,31 +8,7 @@ { "model": "betterend:block/chorus_grass_05" }, { "model": "betterend:block/chorus_grass_06" }, { "model": "betterend:block/chorus_grass_07" }, - { "model": "betterend:block/chorus_grass_08" }, - { "model": "betterend:block/chorus_grass_01", "y": 90 }, - { "model": "betterend:block/chorus_grass_02", "y": 90 }, - { "model": "betterend:block/chorus_grass_03", "y": 90 }, - { "model": "betterend:block/chorus_grass_04", "y": 90 }, - { "model": "betterend:block/chorus_grass_05", "y": 90 }, - { "model": "betterend:block/chorus_grass_06", "y": 90 }, - { "model": "betterend:block/chorus_grass_07", "y": 90 }, - { "model": "betterend:block/chorus_grass_08", "y": 90 }, - { "model": "betterend:block/chorus_grass_01", "y": 180 }, - { "model": "betterend:block/chorus_grass_02", "y": 180 }, - { "model": "betterend:block/chorus_grass_03", "y": 180 }, - { "model": "betterend:block/chorus_grass_04", "y": 180 }, - { "model": "betterend:block/chorus_grass_05", "y": 180 }, - { "model": "betterend:block/chorus_grass_06", "y": 180 }, - { "model": "betterend:block/chorus_grass_07", "y": 180 }, - { "model": "betterend:block/chorus_grass_08", "y": 180 }, - { "model": "betterend:block/chorus_grass_01", "y": 270 }, - { "model": "betterend:block/chorus_grass_02", "y": 270 }, - { "model": "betterend:block/chorus_grass_03", "y": 270 }, - { "model": "betterend:block/chorus_grass_04", "y": 270 }, - { "model": "betterend:block/chorus_grass_05", "y": 270 }, - { "model": "betterend:block/chorus_grass_06", "y": 270 }, - { "model": "betterend:block/chorus_grass_07", "y": 270 }, - { "model": "betterend:block/chorus_grass_08", "y": 270 } + { "model": "betterend:block/chorus_grass_08" } ] } } diff --git a/src/main/resources/assets/betterend/models/block/cave_grass_01.json b/src/main/resources/assets/betterend/models/block/cave_grass_01.json new file mode 100644 index 00000000..35b94ccf --- /dev/null +++ b/src/main/resources/assets/betterend/models/block/cave_grass_01.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cross", + "textures": { + "cross": "betterend:block/cave_grass_1" + } +} diff --git a/src/main/resources/assets/betterend/models/block/cave_grass_02.json b/src/main/resources/assets/betterend/models/block/cave_grass_02.json new file mode 100644 index 00000000..0b299718 --- /dev/null +++ b/src/main/resources/assets/betterend/models/block/cave_grass_02.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cross", + "textures": { + "cross": "betterend:block/cave_grass_2" + } +} diff --git a/src/main/resources/assets/betterend/models/block/cave_grass_03.json b/src/main/resources/assets/betterend/models/block/cave_grass_03.json new file mode 100644 index 00000000..7e1e8c1d --- /dev/null +++ b/src/main/resources/assets/betterend/models/block/cave_grass_03.json @@ -0,0 +1,6 @@ +{ + "parent": "betterend:block/cross_inverted", + "textures": { + "cross": "betterend:block/cave_grass_1" + } +} diff --git a/src/main/resources/assets/betterend/models/block/cave_grass_04.json b/src/main/resources/assets/betterend/models/block/cave_grass_04.json new file mode 100644 index 00000000..0e559d86 --- /dev/null +++ b/src/main/resources/assets/betterend/models/block/cave_grass_04.json @@ -0,0 +1,6 @@ +{ + "parent": "betterend:block/cross_inverted", + "textures": { + "cross": "betterend:block/cave_grass_2" + } +} diff --git a/src/main/resources/assets/betterend/models/block/cave_grass_05.json b/src/main/resources/assets/betterend/models/block/cave_grass_05.json new file mode 100644 index 00000000..0eeeb608 --- /dev/null +++ b/src/main/resources/assets/betterend/models/block/cave_grass_05.json @@ -0,0 +1,6 @@ +{ + "parent": "betterend:block/crop_block", + "textures": { + "texture": "betterend:block/cave_grass_1" + } +} diff --git a/src/main/resources/assets/betterend/models/block/cave_grass_06.json b/src/main/resources/assets/betterend/models/block/cave_grass_06.json new file mode 100644 index 00000000..321802bc --- /dev/null +++ b/src/main/resources/assets/betterend/models/block/cave_grass_06.json @@ -0,0 +1,6 @@ +{ + "parent": "betterend:block/crop_block", + "textures": { + "texture": "betterend:block/cave_grass_2" + } +} diff --git a/src/main/resources/assets/betterend/models/block/cave_grass_07.json b/src/main/resources/assets/betterend/models/block/cave_grass_07.json new file mode 100644 index 00000000..214d7b32 --- /dev/null +++ b/src/main/resources/assets/betterend/models/block/cave_grass_07.json @@ -0,0 +1,6 @@ +{ + "parent": "betterend:block/crop_block_inverted", + "textures": { + "texture": "betterend:block/cave_grass_1" + } +} diff --git a/src/main/resources/assets/betterend/models/block/cave_grass_08.json b/src/main/resources/assets/betterend/models/block/cave_grass_08.json new file mode 100644 index 00000000..274ada79 --- /dev/null +++ b/src/main/resources/assets/betterend/models/block/cave_grass_08.json @@ -0,0 +1,6 @@ +{ + "parent": "betterend:block/crop_block_inverted", + "textures": { + "texture": "betterend:block/cave_grass_2" + } +} diff --git a/src/main/resources/assets/betterend/models/block/cave_moss.json b/src/main/resources/assets/betterend/models/block/cave_moss.json new file mode 100644 index 00000000..c5ae0c77 --- /dev/null +++ b/src/main/resources/assets/betterend/models/block/cave_moss.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "down": "block/end_stone", + "east": "betterend:block/cave_moss_side", + "north": "betterend:block/cave_moss_side", + "particle": "betterend:block/cave_moss_side", + "south": "betterend:block/cave_moss_side", + "up": "betterend:block/cave_moss_top", + "west": "betterend:block/cave_moss_side" + } +} diff --git a/src/main/resources/assets/betterend/models/block/cave_moss_path.json b/src/main/resources/assets/betterend/models/block/cave_moss_path.json new file mode 100644 index 00000000..d46c7c2e --- /dev/null +++ b/src/main/resources/assets/betterend/models/block/cave_moss_path.json @@ -0,0 +1,7 @@ +{ "parent": "betterend:block/path", + "textures": { + "top": "betterend:block/cave_moss_path_top", + "side": "betterend:block/cave_moss_side", + "bottom": "block/end_stone" + } +} diff --git a/src/main/resources/assets/betterend/models/block/cross_inverted.json b/src/main/resources/assets/betterend/models/block/cross_inverted.json new file mode 100644 index 00000000..5f4f8f7a --- /dev/null +++ b/src/main/resources/assets/betterend/models/block/cross_inverted.json @@ -0,0 +1,26 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "#cross" + }, + "elements": [ + { "from": [ 0.8, 0, 8 ], + "to": [ 15.2, 16, 8 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, + "shade": false, + "faces": { + "north": { "uv": [ 16, 0, 0, 16 ], "texture": "#cross" }, + "south": { "uv": [ 16, 0, 0, 16 ], "texture": "#cross" } + } + }, + { "from": [ 8, 0, 0.8 ], + "to": [ 8, 16, 15.2 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, + "shade": false, + "faces": { + "west": { "uv": [ 16, 0, 0, 16 ], "texture": "#cross" }, + "east": { "uv": [ 16, 0, 0, 16 ], "texture": "#cross" } + } + } + ] +} diff --git a/src/main/resources/assets/betterend/models/item/cave_grass.json b/src/main/resources/assets/betterend/models/item/cave_grass.json new file mode 100644 index 00000000..ae7f981a --- /dev/null +++ b/src/main/resources/assets/betterend/models/item/cave_grass.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "betterend:block/cave_grass_1" + } +} diff --git a/src/main/resources/assets/betterend/models/item/cave_moss.json b/src/main/resources/assets/betterend/models/item/cave_moss.json new file mode 100644 index 00000000..caeaacbf --- /dev/null +++ b/src/main/resources/assets/betterend/models/item/cave_moss.json @@ -0,0 +1,3 @@ +{ + "parent": "betterend:block/cave_moss" +} diff --git a/src/main/resources/assets/betterend/models/item/cave_moss_path.json b/src/main/resources/assets/betterend/models/item/cave_moss_path.json new file mode 100644 index 00000000..7915c469 --- /dev/null +++ b/src/main/resources/assets/betterend/models/item/cave_moss_path.json @@ -0,0 +1,3 @@ +{ + "parent": "betterend:block/cave_moss_path" +} diff --git a/src/main/resources/assets/betterend/textures/block/cave_bush_leaves_1.png b/src/main/resources/assets/betterend/textures/block/cave_bush_leaves_1.png new file mode 100644 index 0000000000000000000000000000000000000000..93fed79c93d624f9ce99c87a047701ce6309f732 GIT binary patch literal 1947 zcmcIleQeZZ81FU#-EGN|8Q6gdrBgQJdi}bOwQ^(QZfs|~c^j87gCD%tzIUtKwO!kB zcXP?cRETj(AQ2Zc^b}AMKLW%Lg5fJu)PM<^7)&I>Vj@NiLzf6)xbyAp?j#15{bQ51 zZ~Ok9-}8Gu`t-$6M_Xn2(sB&LDg*8QE_AQ5&bt?)>+-2AK(~9e_QwqjvsGJX3HJI} z4TdfFRt|TY-N8o%QB632q(-14mCz6x!&a?MX+YcrO*{f)vf?EsKRZs~vg9S!yMlC3 z^T8guy}1jug&{H zPhO(OG&O;ulF6ha$vIR#Mln3kQ#4DlEQt`LkycEQA{C>yz~G05sLPrus|s#0f{5B@ zdI_X-HiU#$q*aW3noz>16woNfL0cgefWhG0&_tq$Hq6$|$V*=DZHbL=T7y&(k@8NF|YiahO0b0|{e_uCyN2RE-|>4sjH>i_vI;Plv!%^{}eO z3xx_5Sa6@uDoi6@zg|`(HEBF(iOSnRKQN(}U}=^n8Jc97Fyj^&MqphJ(VRfjv(O-F z1qqm7eqdFSqv`oTgFzvn7$#6e81Q=uB+4Pnk^mzv566i-2^kuatjFmlc?JN|37`i= z#YQ(Db>?&-d%r67SsAqKXFFF?MZ{4|k|0H09M4%D8D$vK!#X1*04^6Pxq(vxPG>ag zb{E(l(`EGWfcUMfmMRG`(qhyVMGa3P8c6cA(?#+k%afw$_OOi}XCoIusw7c}s(J#T zR*@4R1}RO65%|Aqd}>_PgQ|pb&RGqO*ijVivVp3X&VM57U~hgEm+@TR2|%>k-Ajm8 zouNeJU(2`2-u!gV(k6Q#BAui7voJ%Ann|F;mKe(PeEN&JlYRqio?HF=YXASL&nH*x z0ZI&_2}%)GJd`zSW=li;w`#e)Tjo*$j)tAJEKXVUP@L0HLDV{$!kxdJy^LWcTEO2D zZagiH)!F~d{_*9xisdr{vFkS`m+Zl~OM~gBI=60n^J&hUX*~56cGuLtH51Q-uit+{ z$6beRzCAJ`H!Q69E`Bq+W#>q9+007^G;Y7`Yx?}awdW_Mk6);G<~O9(V&d zuzl5)E98;x(s#?Gx}S}bhFu4aT)dV&UcYo>;K#O~YGOi({gJZ^@C}OtZJE8*_b$m? gS{rwqc&!8LSov$~ldsy+*6%aW+Ts6j&Boz>0OHP&AOHXW literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/betterend/textures/block/cave_bush_leaves_2.png b/src/main/resources/assets/betterend/textures/block/cave_bush_leaves_2.png new file mode 100644 index 0000000000000000000000000000000000000000..660927b5997552f896b3617af4e5d9856d6f0f17 GIT binary patch literal 2054 zcmcIleNYr-7+*k1ElRWrW&Bvzk2KrcPwr#$P~cE7j|eY;a>Vy`-{V&9cF)~~I~XfN zF>A;VEJ1WqQ!$)0Q)6h%KyB19mC0$EN+-3CsdNx0Y%H~pcj364MjifXXLk49eSgpI z`8^-|>}&aXvyz6S4#6-iDL2PefbK)hb5J6>j_v*%pxfY3PO*+*4-PlaIIMBg2n-we zx$G%2irjMqQ4Lyvqlm-2A zPL&4dR^@rbsxr|b5!2K0X%PVt1fc=&NHC!2Lc~e*@Cs;czNQGg2V#^ti44;rUgXZl zvs4Y@X%;IfGCYgh92Uk(J6QfnoTV8XMcXKbBWXsUtpex3qX&V!X_8MUaLtVRLQhV@ zZx|tgqQc>@CCph=t(0OM4hKcE6w8tbLF$!?0V1TLkMCn}L0#13kRhuIZZZO|T5dQA zq_j7LU?@hb=+QKxgi#R?q8JNphSUdiyYCMT24iU5$gV(MqI&O2ta~a$kSc(>TCRyO zy8+C| zK_A;Qnv6ak5V(`oR3#xs#?HbtT4G6`BRZ>(?0)BV!qxe$-)DYQS67m9 zp4AUqRu))(I8yWIzL}OuE!UNn4PwWokH764edcs=mwrZ1ztGh^y4aGsWlUSjlCF$3 z=|^1kPn=W=ToQF6(uxM{`SVg z_`;4GLvOE~aj-e{=AQZ!2b$hUU;gLz=JwfdrPbvuJ>9fDi+y|E(<$SB3aE4u*3sHh zkvvG~Jk;KCVn6}^&?o+(FYosW8Pcu!KfgK0XFa=abc$!uz`d8bg;(;bt6q4u5ldMx zXTpr)S*x6T>*b4=Cl09pD{Q~|#gb(Escr8ap4+~<2~*cE$C7r;kAI&T?5|yLYQ@(z zmA^08zH8@(yB74ni=RDZWB0G$EZTJJ(%R&P zYszq#*g6X4N%2c+RyTjx_SBSp1*;nBj#XTraV%5Xd8>Bvvfm1moZeyf$7XWYq>;tB zOC8N8xLr-3YFmsyY}FfIeEfXkps`yU@yu`Yep$Rj7?RxjNJ!$WbyW84M zl5HqM;y?n5i_9dMG>>n?A@80*` z=Y4+9@8f>Awyt(jQ9(%of*?h{8t)SLoMes(`S3pbT8f8{iE7Q$I)W5VF^2_tyK6dv zbV}tt-VyGm#v1JZF=~q1< zBGoi&U}dE2aiQr8gVr=L#4Yhwr)|NN z8;cl*$`M379=FFCyP|~&%H?tqBu&sX4iUJXlnp+C%X(>s!3%UjlT<@eWYlEjgG!^} z#-P$s7h-CbR@T#Df&n8Eyh>1Z(sU^U^!pzSjm5HP-Kc7UR?>R!NvsEwDj=2sU1`(= zP}Kxvqcmeo6tZX4MlCwxsVER23StnZLt#|blp0YCMUN==@guvP^+x498sH5@3n)r7 zlc>533+nNhiK#%#mPxXx#PzwRsPq}&H z0vQxZc0?CE?^T3GGlJ&%(aIGS0di!6#E~>5vMdj9w%jS;e269Spu^$9#h}aSWGg6| z5gZw|Cp8IvJbd(SR#TM-839#6vLT+w1rP){6J%N3MTZqx=n-M@Ujxozdq{*wNp%|}$rgjROje&pxfo-Ivu zpl6=*Xx^4LHXY9Y?62#Sr^8P26Uw+9lD<3UBl#_ox?`%%dv~KbY zHJnP#4$lvNexdJG+nSl(J;th^ayH<7wbiw`ziC~IcQuqu%~!+c&+lD5aKTw!&$dmO zrj?w%I%F%=w&kv#e73Of%C4h-Zms;`oAI;0C5u~6t!>}HR@>UXv-EB{8LMov*f#g< z>%WmYSXR>D`*G2Q>0! literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/betterend/textures/block/cave_grass_1.png b/src/main/resources/assets/betterend/textures/block/cave_grass_1.png new file mode 100644 index 0000000000000000000000000000000000000000..d67dad55f58e908ff710f6b301119e5de601d1a1 GIT binary patch literal 2364 zcmcImeQeZZ96nGPf|CJpB0(r62F=#%$F;q-?wI3lV?%C^2;1CgrL5wg35}1JUhjT~-MTnq`0YL;6(GWg1gCP*{TrM+k^4q8J5d6c(`-*bFF)O zgv*tYuZJt`%HR}9F`{mu8Zva(MdJwVa^>aM#ep&#+L#Qh^q3Ft{A3S~>8cN};DS^z z?uXTSaf1n`HI#;xhS`d!;`tM>ygCUHM4=6^x@aV3Np(Iv!7HJ$Gfm=H0%Fhh;RViy zSY@yb^BX3_I5$ryG|OOK(M|J|$gsH>L(yK6@{+WNplFHWC69jXgS|te(KOn!3+JL;l6re2w!-ysNQR(g z)R+n^oC{<2xYTBK=3L{`oR_HO+sI{JQL?ze20I;DCXDEguXo_IyFwLT>Neq`mc_fPJ zh6a%pRA7Vuf_VuQnqmJ1HdI}!?+Y{-luBZj4Ppu`3HWd%%B}0Fq-cr;WH0g%4>Up+ zSwM)gz!0iPa{?4tC@5M&7g`@Mlo}_4&iZcWs)m9%(n*pi567!C2MIv{$gw;t5F+F` zLKHbP%c>q3$SJnxOdT~3h}_QVs8SK5D5?Okv_SBRmm)NZr3s)yhF}F*&@@?QRgu9l zRgpBqi~?j8JqoHI8IM)r*ex}FBVw3ALq$3FIEF^-D2ig;Le;BJw#YO%Cpn7fSi*M_ zP#nAaaK))JRPp4r-b42Krn8&2wi+VRUW(rhvkc9y1tu)0LYeN1zsS4kx4_)q)q6Oo z2pmTdl;#D52eLdN01gmdRpogK$UMs`sp$VN^~vNa)gV>{(HoS+?>(NrdHHVDxTCx7 zu^K(cLptxyZmW@Zy6~1?Q=L$Nderf#m8|SUP?fIngq|Bu;TRrJsz7)>v_|k8i+Y*$ za)d`zJv1YVtipTq5-K7(;!2FVY02LAPatnQ1yYOA(c%o#XBv7)pNcSs3TdJA%W+&+Hdct>0Fiue72&MRj+=l{CiYFkk@x#>s~cI0z4=b=v5 zs7IHC50)+M_oML2_fuCsJf-r0rW8%Oa9zt)=#IDA7qwq1SWtXmk7s6UXXB7LW_}>! z<9)LpX`&=y-l=&-{VP6LaO}`cyz8e(&JF6+HE zTe#tBN8sXVVO>%TnGy7btK zzv1Qkg`qolG-tIB&b|E6*=PQWynJ!LJ2!-HAK-qsWzE1r2Rn&1(#ht{53H@|SlM=H zczBJ`HA`50w4pGZQ`)xevE{qZtZkgpGO}y)2}RM$i?{5n{_Nb6Y@+FBrXwTo<{w8- zkB+vg`|l5e*B5OV6S{WkX>5B&=*oBV3a7qmOdoZj?Be{fx{`af{)aZ-k|J^M*=Ns< x@qDZDFJ*JP&VRkJ;f2hFTa^RvT&dsmeB;fp8pn@WmFxV!DJd)sY@0Z9(LeqnEUN$j literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/betterend/textures/block/cave_grass_2.png b/src/main/resources/assets/betterend/textures/block/cave_grass_2.png new file mode 100644 index 0000000000000000000000000000000000000000..56ba35ba90351a21d1b53acd32ae43eb62ca1284 GIT binary patch literal 3107 zcmd5;TWl0n7+w%sDJ6g;P<-h)psC92Tz77E*_1BWs#|I)DVmz}?9ADA?C#DmGwrse zrU)j`(8z-ZqTnSahzUwdj1hu%p^XHCX&;OU(MCW8B*wJmB8sK;%-*Qb(yBZ-$?VLW z{m%FQ=f8aCw3nAXIWOnI9GA;Aue8Kpfu0MT`~EESn}1~tpvN4ef-G1je{wInS`5=k*6!w?8TSj|xzG!ap2S(?EQEydIfThpVM!w7)=}W*XBGJTuv-({0_V z(47u2Zz}C%5T@RIP3F0(8kCL>pI*3T`lKdph(nEF(n6Ri8 z#dJFLMNa0w1sd<}y$}qABtcRLN~L&0R5^(dQLYII26+MSA)pFUdi8gD??DwSvwXT5 z|E2e-;3{<>S__fe9If|e-4^4ysrxHjZL;^|@C9w?fhywf{ zzdnC@SfHk>1>cmNg!`mi{!UISsZJea!YJH@5}&K|EicyBV>9+P77}l+7cY0v{Lf23e;wVX63{>Pq7|er9F@kMSu=FJSQS4;XQ;T zdC(}QvOy3mOoTYBO~o~xJ!2eKf;H(PdH1y>kmJro$dSYlI%qksnG+uR$ea;j6e*L5 zPJml;w$E|7X0(?2iz>xa%E;K5@4kmOx4*oK8p`UbS)`(C`|~&2&z*_4<;L5_M*Dku zdQSHB^>tAluZc@G&)jvX_lc}sYxDC?cee)5{&{7`xr}PX_KihcK zHz?rq#792pDY$W6*z5cJ#qZiq?5JA$+utp5B@JRo)Kb8$#)#ndx)ec;bjmBGt z=YKW&($&Jkk2X`MUHcAH9p5rm_O|-_@DS6>?Z$!`Y4PH+J^t zx_2);H;X@e{(YGH?H+#YV$1OBMK=X@AfD4P&=Ee<%?w4(%)GGnP)$w28;g5Rw*9bt z4aS(&g}p=9zFw5ox#?8-%uB!S*_6A&*WLTVk>l_EJof3++sFSKVIb^rhX literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/betterend/textures/block/cave_moss_path_top.png b/src/main/resources/assets/betterend/textures/block/cave_moss_path_top.png new file mode 100644 index 0000000000000000000000000000000000000000..024a88bc55212707956d73b81a78a5745f2fc45e GIT binary patch literal 2316 zcmcIm4Nw$i7(O*YEE5N7K$&S>afEc)zq{jh^FZW44n0FW1+-E3cE3ATxZC4)xjW7n zB`wkb9koa^r~DyJOUoZbXn;)Z+vB*bA#-ZFnZ5n?+h?Em zdEfWh@7qPWlg1C|Kcv4#qZwe%Hs!%{w0iXG4gYJG7U|(B%AH*(Yc!9?s7Ei&>NT+% zO+=k&El>(96IotzCUb&h1Id1;8=^IuF=>7`#}@+yu>ptZGNR4-KmHQgD*S2$CiAEX^RH9}1&+1Us8&$_mAT zS4Ol*QQRz!`+UA+ADt|D95~4^3{FruMPU$u$>lDE^J6Y~csGLy$h=2%E288=R7TDw zl_^FPD(yGnr$tO(_Tz_%P00<|zpV7kC_$04H!MGQ^T$EUc2n z5{CCk>vV?EvXbeAibA>dh?cG8Zh+?jSt|4JAkzyY4(}G`E|L^UE|UHxkMQkqHf}b< z12{$USS6{XyHUB_EJ#L%+86_pm@m2n$tNeNfkMv!6Q=+pN)Z%+kpxDOR#L|j1WOa6 z2pSH$pcZHafm661!3?XT{sfi;(O&+KP=ROdlE=xxLWxe!0dTj=5sYTBux6L6a4sI0 zO-2+-O%_Fg1vEhkHYx?v>IplhrL+{r0FKAB43s8tJRkty{k%!y%hV>S&v*G*ka)-u zE*+~k=(H(%KtVQ|#-Mq17?Z-;F(3c~;0!jsf#$l|p7)6GmEuYsWK~rOkkO#k*(jPa zV8CY6V>b9cU<^$$n2w_o$=p~lpRl6HeUhOjw(9pElL!BN?Q5UVR2td+@G`|ZbOLoP_c|f`Y*7Q;Qh5wy? zne#qeJd7jJbK-ZkJwc;5joSSkDEoRe!Ka~)$2De)S?x~ z4$J4ffR5+S#4a=Ui|QES+SM?-vbJW|(7N}pr`LSjLPZYtjEvj;Wc`Rt?~&AtxoN`&oC=H_+Yx9gH8WT8&fY!p_ME{{l?jWZ-yIuU?=9Ybulnf0YiWDi+gnZT zFPES9PW69&XsvDGh@1~|;=EX!kd99IspFk#Cp%o{b2jL!;+hhs`RrR72G?Ur>vW>F zPyhJTIYMjnt;zc;SLjb{ns}%5@~nu3{^LoXT#3ay6DD^~J+m$k$*-n+a literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/betterend/textures/block/cave_moss_side.png b/src/main/resources/assets/betterend/textures/block/cave_moss_side.png new file mode 100644 index 0000000000000000000000000000000000000000..d4000e6fc84d20d7e14fa8b3a4ffd6ac6ec9fc95 GIT binary patch literal 2182 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 ns(ZD*yy3;Ht?7UcX1SBdPz literal 0 HcmV?d00001