From ae3756d9ee397df3458281cab4719d8729c38f82 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Fri, 25 Dec 2020 11:50:45 +0300 Subject: [PATCH] Mushrooms generation --- .../blocks/BlockSmallJellyshroom.java | 8 ++++ .../betterend/blocks/basis/BlockAttached.java | 5 ++- .../ru/betterend/registry/EndFeatures.java | 7 ++++ .../world/biome/BiomeUmbrellaJungle.java | 4 ++ .../SingleInvertedScatterFeature.java | 39 +++++++++++++++++++ .../world/features/WallPlantFeature.java | 21 ++++++++-- .../features/trees/UmbrellaTreeFeature.java | 2 +- 7 files changed, 80 insertions(+), 6 deletions(-) create mode 100644 src/main/java/ru/betterend/world/features/SingleInvertedScatterFeature.java diff --git a/src/main/java/ru/betterend/blocks/BlockSmallJellyshroom.java b/src/main/java/ru/betterend/blocks/BlockSmallJellyshroom.java index fb688def..e0abafdc 100644 --- a/src/main/java/ru/betterend/blocks/BlockSmallJellyshroom.java +++ b/src/main/java/ru/betterend/blocks/BlockSmallJellyshroom.java @@ -23,6 +23,7 @@ import net.minecraft.util.math.Direction; import net.minecraft.util.shape.VoxelShape; import net.minecraft.util.shape.VoxelShapes; import net.minecraft.world.BlockView; +import net.minecraft.world.WorldView; import ru.betterend.blocks.basis.BlockAttached; import ru.betterend.client.render.ERenderLayer; import ru.betterend.interfaces.IRenderTypeable; @@ -54,6 +55,13 @@ public class BlockSmallJellyshroom extends BlockAttached implements IRenderTypea } } + @Override + public boolean canPlaceAt(BlockState state, WorldView world, BlockPos pos) { + Direction direction = (Direction) state.get(FACING); + BlockPos blockPos = pos.offset(direction.getOpposite()); + return sideCoversSmallSquare(world, blockPos, direction) && world.getBlockState(blockPos).isOpaque(); + } + @Override public ERenderLayer getRenderLayer() { return ERenderLayer.CUTOUT; diff --git a/src/main/java/ru/betterend/blocks/basis/BlockAttached.java b/src/main/java/ru/betterend/blocks/basis/BlockAttached.java index 84710157..6a6f8525 100644 --- a/src/main/java/ru/betterend/blocks/basis/BlockAttached.java +++ b/src/main/java/ru/betterend/blocks/basis/BlockAttached.java @@ -17,11 +17,12 @@ import net.minecraft.world.WorldView; import ru.betterend.util.BlocksHelper; public abstract class BlockAttached extends BlockBaseNotFull { + public static final DirectionProperty FACING = Properties.FACING; + public BlockAttached(Settings settings) { super(settings); + this.setDefaultState(this.getDefaultState().with(FACING, Direction.UP)); } - - public static final DirectionProperty FACING = Properties.FACING; @Override protected void appendProperties(StateManager.Builder stateManager) { diff --git a/src/main/java/ru/betterend/registry/EndFeatures.java b/src/main/java/ru/betterend/registry/EndFeatures.java index 78c611b1..33e5ca03 100644 --- a/src/main/java/ru/betterend/registry/EndFeatures.java +++ b/src/main/java/ru/betterend/registry/EndFeatures.java @@ -24,6 +24,7 @@ import ru.betterend.world.features.HydraluxFeature; import ru.betterend.world.features.LanceleafFeature; import ru.betterend.world.features.MengerSpongeFeature; import ru.betterend.world.features.OverworldIslandFeature; +import ru.betterend.world.features.SingleInvertedScatterFeature; import ru.betterend.world.features.SinglePlantFeature; import ru.betterend.world.features.UnderwaterPlantFeature; import ru.betterend.world.features.VineFeature; @@ -82,12 +83,16 @@ public class EndFeatures { public static final EndFeature GLOW_PILLAR = new EndFeature("glow_pillar", new GlowPillarFeature(), 1); public static final EndFeature TWISTED_UMBRELLA_MOSS = new EndFeature("twisted_umbrella_moss", new DoublePlantFeature(EndBlocks.TWISTED_UMBRELLA_MOSS, EndBlocks.TWISTED_UMBRELLA_MOSS_TALL, 6), 5); public static final EndFeature JUNGLE_GRASS = new EndFeature("jungle_grass", new SinglePlantFeature(EndBlocks.JUNGLE_GRASS, 7, 3), 8); + public static final EndFeature SMALL_JELLYSHROOM_FLOOR = new EndFeature("small_jellyshroom_floor", new SinglePlantFeature(EndBlocks.SMALL_JELLYSHROOM, 5, 5), 4); // Vines // public static final EndFeature DENSE_VINE = new EndFeature("dense_vine", new VineFeature(EndBlocks.DENSE_VINE, 24), 3); public static final EndFeature TWISTED_VINE = new EndFeature("twisted_vine", new VineFeature(EndBlocks.TWISTED_VINE, 24), 3); public static final EndFeature BULB_VINE = new EndFeature("bulb_vine", new VineFeature(EndBlocks.BULB_VINE, 24), 5); + // Ceil plants + public static final EndFeature SMALL_JELLYSHROOM_CEIL = new EndFeature("small_jellyshroom_ceil", new SingleInvertedScatterFeature(EndBlocks.SMALL_JELLYSHROOM, 8), 8); + // Wall Plants // public static final EndFeature PURPLE_POLYPORE = new EndFeature("purple_polypore", new WallPlantOnLogFeature(EndBlocks.PURPLE_POLYPORE, 3), 5); public static final EndFeature PURPLE_POLYPORE_DENSE = new EndFeature("purple_polypore_dense", new WallPlantOnLogFeature(EndBlocks.PURPLE_POLYPORE, 5), 15); @@ -99,6 +104,8 @@ public class EndFeatures { public static final EndFeature TWISTED_MOSS_WOOD = new EndFeature("twisted_moss_wood", new WallPlantOnLogFeature(EndBlocks.TWISTED_MOSS, 6), 25); public static final EndFeature BULB_MOSS = new EndFeature("bulb_moss", new WallPlantFeature(EndBlocks.BULB_MOSS, 6), 1); public static final EndFeature BULB_MOSS_WOOD = new EndFeature("bulb_moss_wood", new WallPlantOnLogFeature(EndBlocks.BULB_MOSS, 6), 15); + public static final EndFeature SMALL_JELLYSHROOM_WALL = new EndFeature("small_jellyshroom_wall", new WallPlantFeature(EndBlocks.SMALL_JELLYSHROOM, 6), 4); + public static final EndFeature SMALL_JELLYSHROOM_WOOD = new EndFeature("small_jellyshroom_wood", new WallPlantOnLogFeature(EndBlocks.SMALL_JELLYSHROOM, 6), 8); // Water // public static final EndFeature BUBBLE_CORAL = new EndFeature("bubble_coral", new UnderwaterPlantFeature(EndBlocks.BUBBLE_CORAL, 6), 10); diff --git a/src/main/java/ru/betterend/world/biome/BiomeUmbrellaJungle.java b/src/main/java/ru/betterend/world/biome/BiomeUmbrellaJungle.java index 9a8cc656..a5ffe6c2 100644 --- a/src/main/java/ru/betterend/world/biome/BiomeUmbrellaJungle.java +++ b/src/main/java/ru/betterend/world/biome/BiomeUmbrellaJungle.java @@ -14,9 +14,13 @@ public class BiomeUmbrellaJungle extends EndBiome { .addFeature(EndFeatures.END_LAKE) .addFeature(EndFeatures.UMBRELLA_TREE) .addFeature(EndFeatures.TWISTED_UMBRELLA_MOSS) + .addFeature(EndFeatures.SMALL_JELLYSHROOM_FLOOR) .addFeature(EndFeatures.JUNGLE_GRASS) .addFeature(EndFeatures.CYAN_MOSS) .addFeature(EndFeatures.CYAN_MOSS_WOOD) + .addFeature(EndFeatures.SMALL_JELLYSHROOM_WALL) + .addFeature(EndFeatures.SMALL_JELLYSHROOM_WOOD) + .addFeature(EndFeatures.SMALL_JELLYSHROOM_CEIL) .addFeature(EndFeatures.CHARNIA_CYAN) .addFeature(EndFeatures.CHARNIA_GREEN) .addFeature(EndFeatures.CHARNIA_LIGHT_BLUE) diff --git a/src/main/java/ru/betterend/world/features/SingleInvertedScatterFeature.java b/src/main/java/ru/betterend/world/features/SingleInvertedScatterFeature.java new file mode 100644 index 00000000..b3091c7a --- /dev/null +++ b/src/main/java/ru/betterend/world/features/SingleInvertedScatterFeature.java @@ -0,0 +1,39 @@ +package ru.betterend.world.features; + +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.state.property.Properties; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; +import net.minecraft.world.StructureWorldAccess; +import ru.betterend.blocks.basis.BlockAttached; +import ru.betterend.util.BlocksHelper; + +public class SingleInvertedScatterFeature extends InvertedScatterFeature { + private final Block block; + + public SingleInvertedScatterFeature(Block block, int radius) { + super(radius); + this.block = block; + } + + @Override + public boolean canGenerate(StructureWorldAccess world, Random random, BlockPos center, BlockPos blockPos, float radius) { + BlockState state = block.getDefaultState(); + if (block instanceof BlockAttached) { + state = state.with(Properties.FACING, Direction.DOWN); + } + return state.canPlaceAt(world, blockPos); + } + + @Override + public void generate(StructureWorldAccess world, Random random, BlockPos blockPos) { + BlockState state = block.getDefaultState(); + if (block instanceof BlockAttached) { + state = state.with(Properties.FACING, Direction.DOWN); + } + BlocksHelper.setWithoutUpdate(world, blockPos, state); + } +} diff --git a/src/main/java/ru/betterend/world/features/WallPlantFeature.java b/src/main/java/ru/betterend/world/features/WallPlantFeature.java index 5c42152e..dc72aeab 100644 --- a/src/main/java/ru/betterend/world/features/WallPlantFeature.java +++ b/src/main/java/ru/betterend/world/features/WallPlantFeature.java @@ -4,9 +4,11 @@ import java.util.Random; import net.minecraft.block.Block; import net.minecraft.block.BlockState; +import net.minecraft.state.property.Properties; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Direction; import net.minecraft.world.StructureWorldAccess; +import ru.betterend.blocks.basis.BlockAttached; import ru.betterend.blocks.basis.BlockWallPlant; import ru.betterend.util.BlocksHelper; @@ -20,13 +22,26 @@ public class WallPlantFeature extends WallScatterFeature { @Override public boolean canGenerate(StructureWorldAccess world, Random random, BlockPos pos, Direction dir) { - BlockState state = block.getDefaultState().with(BlockWallPlant.FACING, dir); - return block.canPlaceAt(state, world, pos); + if (block instanceof BlockWallPlant) { + BlockState state = block.getDefaultState().with(BlockWallPlant.FACING, dir); + return block.canPlaceAt(state, world, pos); + } + else if (block instanceof BlockAttached) { + BlockState state = block.getDefaultState().with(Properties.FACING, dir); + return block.canPlaceAt(state, world, pos); + } + return block.canPlaceAt(block.getDefaultState(), world, pos); } @Override public void generate(StructureWorldAccess world, Random random, BlockPos pos, Direction dir) { - BlockState state = block.getDefaultState().with(BlockWallPlant.FACING, dir); + BlockState state = block.getDefaultState(); + if (block instanceof BlockWallPlant) { + state = state.with(BlockWallPlant.FACING, dir); + } + else if (block instanceof BlockAttached) { + state = state.with(Properties.FACING, dir); + } BlocksHelper.setWithoutUpdate(world, pos, state); } } diff --git a/src/main/java/ru/betterend/world/features/trees/UmbrellaTreeFeature.java b/src/main/java/ru/betterend/world/features/trees/UmbrellaTreeFeature.java index 37982ad1..62afa027 100644 --- a/src/main/java/ru/betterend/world/features/trees/UmbrellaTreeFeature.java +++ b/src/main/java/ru/betterend/world/features/trees/UmbrellaTreeFeature.java @@ -10,8 +10,8 @@ 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.Direction; import net.minecraft.util.math.BlockPos.Mutable; +import net.minecraft.util.math.Direction; import net.minecraft.util.math.MathHelper; import net.minecraft.world.StructureWorldAccess; import net.minecraft.world.gen.chunk.ChunkGenerator;