From 46ceaee8be6e896a00abacdc08a02cea840f061e Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Wed, 30 Sep 2020 00:14:10 +0300 Subject: [PATCH] Fixes --- .../blocks/BlockMossyGlowshroomFur.java | 8 +- .../blocks/BlockMossyGlowshroomSapling.java | 11 ++ .../blocks/basis/BlockFeatureSapling.java | 97 ++++++++++++++++++ .../gui/EndStoneSmelterRecipeBookScreen.java | 1 - .../client/gui/EndStoneSmelterScreen.java | 2 - .../ru/betterend/registry/BlockRegistry.java | 2 + .../betterend/registry/FeatureRegistry.java | 2 - .../java/ru/betterend/util/sdf/PosInfo.java | 15 +-- .../util/sdf/primitive/SDFCapedCone.java | 5 + .../util/sdf/primitive/SDFCapsule.java | 5 + .../betterend/util/sdf/primitive/SDFLine.java | 5 + .../util/sdf/primitive/SDFPrimitive.java | 7 ++ .../util/sdf/primitive/SDFSphere.java | 5 + .../features/MossyGlowshroomFeature.java | 52 +++++++--- .../world/features/StoneSpiralFeature.java | 26 ----- .../blockstates/mossy_glowshroom_sapling.json | 5 + .../assets/betterend/lang/en_us.json | 1 + .../assets/betterend/lang/ru_ru.json | 1 + .../block/mossy_glowshroom_sapling.json | 6 ++ .../models/item/mossy_glowshroom_sapling.json | 6 ++ .../block/mossy_glowshroom_sapling.png | Bin 0 -> 2087 bytes 21 files changed, 207 insertions(+), 55 deletions(-) create mode 100644 src/main/java/ru/betterend/blocks/BlockMossyGlowshroomSapling.java create mode 100644 src/main/java/ru/betterend/blocks/basis/BlockFeatureSapling.java delete mode 100644 src/main/java/ru/betterend/world/features/StoneSpiralFeature.java create mode 100644 src/main/resources/assets/betterend/blockstates/mossy_glowshroom_sapling.json create mode 100644 src/main/resources/assets/betterend/models/block/mossy_glowshroom_sapling.json create mode 100644 src/main/resources/assets/betterend/models/item/mossy_glowshroom_sapling.json create mode 100644 src/main/resources/assets/betterend/textures/block/mossy_glowshroom_sapling.png diff --git a/src/main/java/ru/betterend/blocks/BlockMossyGlowshroomFur.java b/src/main/java/ru/betterend/blocks/BlockMossyGlowshroomFur.java index e64493fa..cbfaabdf 100644 --- a/src/main/java/ru/betterend/blocks/BlockMossyGlowshroomFur.java +++ b/src/main/java/ru/betterend/blocks/BlockMossyGlowshroomFur.java @@ -33,6 +33,8 @@ import net.minecraft.world.WorldView; import ru.betterend.blocks.basis.BlockBaseNotFull; import ru.betterend.client.ERenderLayer; import ru.betterend.client.IRenderTypeable; +import ru.betterend.registry.BlockRegistry; +import ru.betterend.util.MHelper; public class BlockMossyGlowshroomFur extends BlockBaseNotFull implements IRenderTypeable { private static final EnumMap BOUNDING_SHAPES = Maps.newEnumMap(Direction.class); @@ -96,7 +98,11 @@ public class BlockMossyGlowshroomFur extends BlockBaseNotFull implements IRender 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 { + } + else if (MHelper.RANDOM.nextInt(16) == 0) { + return Lists.newArrayList(new ItemStack(BlockRegistry.MOSSY_GLOWSHROOM_SAPLING)); + } + else { return Lists.newArrayList(); } } diff --git a/src/main/java/ru/betterend/blocks/BlockMossyGlowshroomSapling.java b/src/main/java/ru/betterend/blocks/BlockMossyGlowshroomSapling.java new file mode 100644 index 00000000..fc39646a --- /dev/null +++ b/src/main/java/ru/betterend/blocks/BlockMossyGlowshroomSapling.java @@ -0,0 +1,11 @@ +package ru.betterend.blocks; + +import ru.betterend.blocks.basis.BlockFeatureSapling; +import ru.betterend.registry.FeatureRegistry; +import ru.betterend.world.features.DefaultFeature; + +public class BlockMossyGlowshroomSapling extends BlockFeatureSapling { + public BlockMossyGlowshroomSapling() { + super((DefaultFeature) FeatureRegistry.MOSSY_GLOWSHROOM.getFeature(), 7); + } +} diff --git a/src/main/java/ru/betterend/blocks/basis/BlockFeatureSapling.java b/src/main/java/ru/betterend/blocks/basis/BlockFeatureSapling.java new file mode 100644 index 00000000..323373d7 --- /dev/null +++ b/src/main/java/ru/betterend/blocks/basis/BlockFeatureSapling.java @@ -0,0 +1,97 @@ +package ru.betterend.blocks.basis; + +import java.util.Random; + +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +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.server.world.ServerWorld; +import net.minecraft.sound.BlockSoundGroup; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; +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 net.minecraft.world.gen.feature.DefaultFeatureConfig; +import ru.betterend.client.ERenderLayer; +import ru.betterend.client.IRenderTypeable; +import ru.betterend.registry.BlockTagRegistry; +import ru.betterend.world.features.DefaultFeature; + +public class BlockFeatureSapling extends BlockBaseNotFull implements Fertilizable, IRenderTypeable { + private static final VoxelShape SHAPE = Block.createCuboidShape(4, 2, 4, 12, 16, 12); + private final DefaultFeature feature; + + public BlockFeatureSapling(DefaultFeature feature) { + super(FabricBlockSettings.of(Material.PLANT) + .breakByHand(true) + .collidable(false) + .breakInstantly() + .sounds(BlockSoundGroup.GRASS) + .ticksRandomly()); + this.feature = feature; + } + + public BlockFeatureSapling(DefaultFeature feature, int light) { + super(FabricBlockSettings.of(Material.PLANT) + .breakByHand(true) + .collidable(false) + .breakInstantly() + .sounds(BlockSoundGroup.GRASS) + .lightLevel(light) + .ticksRandomly()); + this.feature = feature; + } + + @Override + public VoxelShape getOutlineShape(BlockState state, BlockView view, BlockPos pos, ShapeContext ePos) { + return SHAPE; + } + + @Override + public boolean canPlaceAt(BlockState state, WorldView world, BlockPos pos) { + return world.getBlockState(pos.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 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 random.nextInt(16) == 0; + } + + @Override + public void grow(ServerWorld world, Random random, BlockPos pos, BlockState state) { + feature.generate(world, world.getChunkManager().getChunkGenerator(), random, pos, DefaultFeatureConfig.INSTANCE); + } + + @Override + public void scheduledTick(BlockState state, ServerWorld world, BlockPos pos, Random random) { + super.scheduledTick(state, world, pos, random); + if (canGrow(world, random, pos, state)) { + grow(world, random, pos, state); + } + } + + @Override + public ERenderLayer getRenderLayer() { + return ERenderLayer.CUTOUT; + } +} diff --git a/src/main/java/ru/betterend/client/gui/EndStoneSmelterRecipeBookScreen.java b/src/main/java/ru/betterend/client/gui/EndStoneSmelterRecipeBookScreen.java index d6be2a4c..312658e0 100644 --- a/src/main/java/ru/betterend/client/gui/EndStoneSmelterRecipeBookScreen.java +++ b/src/main/java/ru/betterend/client/gui/EndStoneSmelterRecipeBookScreen.java @@ -18,7 +18,6 @@ import net.minecraft.recipe.Ingredient; import net.minecraft.recipe.Recipe; import net.minecraft.screen.slot.Slot; import net.minecraft.util.collection.DefaultedList; - import ru.betterend.blocks.entities.EndStoneSmelterBlockEntity; @Environment(EnvType.CLIENT) diff --git a/src/main/java/ru/betterend/client/gui/EndStoneSmelterScreen.java b/src/main/java/ru/betterend/client/gui/EndStoneSmelterScreen.java index 28bc478a..9854cd88 100644 --- a/src/main/java/ru/betterend/client/gui/EndStoneSmelterScreen.java +++ b/src/main/java/ru/betterend/client/gui/EndStoneSmelterScreen.java @@ -4,7 +4,6 @@ import com.mojang.blaze3d.systems.RenderSystem; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; - import net.minecraft.client.gui.screen.ingame.HandledScreen; import net.minecraft.client.gui.screen.recipebook.RecipeBookProvider; import net.minecraft.client.gui.screen.recipebook.RecipeBookWidget; @@ -16,7 +15,6 @@ import net.minecraft.screen.slot.SlotActionType; import net.minecraft.text.StringVisitable; import net.minecraft.text.Text; import net.minecraft.util.Identifier; - import ru.betterend.BetterEnd; @Environment(EnvType.CLIENT) diff --git a/src/main/java/ru/betterend/registry/BlockRegistry.java b/src/main/java/ru/betterend/registry/BlockRegistry.java index 6ff2a2d3..347005bb 100644 --- a/src/main/java/ru/betterend/registry/BlockRegistry.java +++ b/src/main/java/ru/betterend/registry/BlockRegistry.java @@ -11,6 +11,7 @@ import ru.betterend.blocks.BlockEndstoneDust; import ru.betterend.blocks.BlockMossyGlowshroomCap; import ru.betterend.blocks.BlockMossyGlowshroomFur; import ru.betterend.blocks.BlockMossyGlowshroomHymenophore; +import ru.betterend.blocks.BlockMossyGlowshroomSapling; import ru.betterend.blocks.BlockOre; import ru.betterend.blocks.BlockTerrain; import ru.betterend.blocks.EndStoneSmelter; @@ -30,6 +31,7 @@ public class BlockRegistry { public static final Block MOSSY_GLOWSHROOM_HYMENOPHORE = registerBlock("mossy_glowshroom_hymenophore", new BlockMossyGlowshroomHymenophore()); 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); + public static final Block MOSSY_GLOWSHROOM_SAPLING = registerBlock("mossy_glowshroom_sapling", new BlockMossyGlowshroomSapling()); // Ores // public static final Block ENDER_ORE = registerBlock("ender_ore", new BlockOre(ItemRegistry.ENDER_DUST, 1, 3)); diff --git a/src/main/java/ru/betterend/registry/FeatureRegistry.java b/src/main/java/ru/betterend/registry/FeatureRegistry.java index fe445ca1..c76968bd 100644 --- a/src/main/java/ru/betterend/registry/FeatureRegistry.java +++ b/src/main/java/ru/betterend/registry/FeatureRegistry.java @@ -3,10 +3,8 @@ package ru.betterend.registry; import ru.betterend.world.features.EndFeature; import ru.betterend.world.features.EndLakeFeature; import ru.betterend.world.features.MossyGlowshroomFeature; -import ru.betterend.world.features.StoneSpiralFeature; public class FeatureRegistry { - public static final EndFeature STONE_SPIRAL = new EndFeature("stone_spiral", new StoneSpiralFeature(), 2); public static final EndFeature MOSSY_GLOWSHROOM = new EndFeature("mossy_glowshroom", new MossyGlowshroomFeature(), 1); public static final EndFeature END_LAKE = EndFeature.MakeLakeFeature("end_lake", new EndLakeFeature(), 100); diff --git a/src/main/java/ru/betterend/util/sdf/PosInfo.java b/src/main/java/ru/betterend/util/sdf/PosInfo.java index 1466aa9a..d072c6c9 100644 --- a/src/main/java/ru/betterend/util/sdf/PosInfo.java +++ b/src/main/java/ru/betterend/util/sdf/PosInfo.java @@ -5,6 +5,7 @@ import java.util.Map; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; public class PosInfo { private static final BlockState AIR = Blocks.AIR.getDefaultState(); @@ -30,20 +31,20 @@ public class PosInfo { this.state = state; } - public BlockState getStateUp() { - PosInfo info = blocks.get(pos.up()); + public BlockState getState(Direction dir) { + PosInfo info = blocks.get(pos.offset(dir)); if (info == null) { return AIR; } return info.getState(); } + public BlockState getStateUp() { + return getState(Direction.UP); + } + public BlockState getStateDown() { - PosInfo info = blocks.get(pos.down()); - if (info == null) { - return AIR; - } - return info.getState(); + return getState(Direction.DOWN); } public int hashCode() { diff --git a/src/main/java/ru/betterend/util/sdf/primitive/SDFCapedCone.java b/src/main/java/ru/betterend/util/sdf/primitive/SDFCapedCone.java index d7aaa934..de8b01c3 100644 --- a/src/main/java/ru/betterend/util/sdf/primitive/SDFCapedCone.java +++ b/src/main/java/ru/betterend/util/sdf/primitive/SDFCapedCone.java @@ -2,6 +2,7 @@ package ru.betterend.util.sdf.primitive; import java.util.function.Function; +import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; @@ -20,6 +21,10 @@ public class SDFCapedCone extends SDFPrimitive { super(state); } + public SDFCapedCone(Block block) { + super(block); + } + public SDFCapedCone setRadius1(float radius) { this.radius1 = radius; return this; diff --git a/src/main/java/ru/betterend/util/sdf/primitive/SDFCapsule.java b/src/main/java/ru/betterend/util/sdf/primitive/SDFCapsule.java index 4bfeba6a..80783c7c 100644 --- a/src/main/java/ru/betterend/util/sdf/primitive/SDFCapsule.java +++ b/src/main/java/ru/betterend/util/sdf/primitive/SDFCapsule.java @@ -2,6 +2,7 @@ package ru.betterend.util.sdf.primitive; import java.util.function.Function; +import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; @@ -19,6 +20,10 @@ public class SDFCapsule extends SDFPrimitive { super(state); } + public SDFCapsule(Block block) { + super(block); + } + public SDFCapsule setRadius(float radius) { this.radius = radius; return this; diff --git a/src/main/java/ru/betterend/util/sdf/primitive/SDFLine.java b/src/main/java/ru/betterend/util/sdf/primitive/SDFLine.java index 9b2eb6f3..da9359cd 100644 --- a/src/main/java/ru/betterend/util/sdf/primitive/SDFLine.java +++ b/src/main/java/ru/betterend/util/sdf/primitive/SDFLine.java @@ -2,6 +2,7 @@ package ru.betterend.util.sdf.primitive; import java.util.function.Function; +import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; @@ -24,6 +25,10 @@ public class SDFLine extends SDFPrimitive { super(state); } + public SDFLine(Block block) { + super(block); + } + public SDFLine setRadius(float radius) { this.radius = radius; return this; diff --git a/src/main/java/ru/betterend/util/sdf/primitive/SDFPrimitive.java b/src/main/java/ru/betterend/util/sdf/primitive/SDFPrimitive.java index 9038f3fd..30079c6e 100644 --- a/src/main/java/ru/betterend/util/sdf/primitive/SDFPrimitive.java +++ b/src/main/java/ru/betterend/util/sdf/primitive/SDFPrimitive.java @@ -2,6 +2,7 @@ package ru.betterend.util.sdf.primitive; import java.util.function.Function; +import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.util.math.BlockPos; import ru.betterend.util.sdf.SDF; @@ -19,6 +20,12 @@ public abstract class SDFPrimitive extends SDF { }; } + public SDFPrimitive(Block block) { + this.placerFunction = (pos) -> { + return block.getDefaultState(); + }; + } + public BlockState getBlockState(BlockPos pos) { return placerFunction.apply(pos); } diff --git a/src/main/java/ru/betterend/util/sdf/primitive/SDFSphere.java b/src/main/java/ru/betterend/util/sdf/primitive/SDFSphere.java index a544ff49..c6364aa4 100644 --- a/src/main/java/ru/betterend/util/sdf/primitive/SDFSphere.java +++ b/src/main/java/ru/betterend/util/sdf/primitive/SDFSphere.java @@ -2,6 +2,7 @@ package ru.betterend.util.sdf.primitive; import java.util.function.Function; +import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.util.math.BlockPos; import ru.betterend.util.MHelper; @@ -17,6 +18,10 @@ public class SDFSphere extends SDFPrimitive { super(state); } + public SDFSphere(Block block) { + super(block); + } + public SDFSphere setRadius(float radius) { this.radius = radius; return this; diff --git a/src/main/java/ru/betterend/world/features/MossyGlowshroomFeature.java b/src/main/java/ru/betterend/world/features/MossyGlowshroomFeature.java index 4939cb1e..b3095bda 100644 --- a/src/main/java/ru/betterend/world/features/MossyGlowshroomFeature.java +++ b/src/main/java/ru/betterend/world/features/MossyGlowshroomFeature.java @@ -3,6 +3,7 @@ package ru.betterend.world.features; import java.util.List; import java.util.Random; import java.util.Set; +import java.util.function.Function; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; @@ -20,6 +21,7 @@ import ru.betterend.registry.BlockTagRegistry; import ru.betterend.util.BlocksHelper; import ru.betterend.util.MHelper; import ru.betterend.util.SplineHelper; +import ru.betterend.util.sdf.PosInfo; import ru.betterend.util.sdf.SDF; import ru.betterend.util.sdf.operator.SDFBinary; import ru.betterend.util.sdf.operator.SDFCoordModify; @@ -34,6 +36,8 @@ import ru.betterend.util.sdf.primitive.SDFCapedCone; import ru.betterend.util.sdf.primitive.SDFSphere; public class MossyGlowshroomFeature extends DefaultFeature { + private static final Function POST_PROCESS; + private static final Function REPLACE; private static final Vector3f CENTER = new Vector3f(); private static final SDFBinary FUNCTION; private static final SDFTranslate HEAD_POS; @@ -61,7 +65,12 @@ public class MossyGlowshroomFeature extends DefaultFeature { HEAD_POS.setTranslate(pos.getX(), pos.getY(), pos.getZ()); ROOTS.setAngle(random.nextFloat() * MHelper.PI2); FUNCTION.setSourceA(sdf); - Set blocks = new SDFScale().setScale(MHelper.randRange(0.5F, 1F, random)).setSource(FUNCTION).fillRecursive(world, blockPos); + Set blocks = new SDFScale() + .setScale(MHelper.randRange(0.5F, 1F, random)) + .setSource(FUNCTION) + .setReplaceFunction(REPLACE) + .setPostProcess(POST_PROCESS) + .fillRecursive(world, blockPos); for (BlockPos bpos: blocks) { BlockState state = world.getBlockState(bpos); @@ -92,8 +101,8 @@ public class MossyGlowshroomFeature extends DefaultFeature { } static { - SDFCapedCone cone1 = new SDFCapedCone(BlockRegistry.MOSSY_GLOWSHROOM_CAP.getDefaultState()).setHeight(2.5F).setRadius1(1.5F).setRadius2(2.5F); - SDFCapedCone cone2 = new SDFCapedCone(BlockRegistry.MOSSY_GLOWSHROOM_CAP.getDefaultState()).setHeight(3F).setRadius1(2.5F).setRadius2(13F); + SDFCapedCone cone1 = new SDFCapedCone(BlockRegistry.MOSSY_GLOWSHROOM_CAP).setHeight(2.5F).setRadius1(1.5F).setRadius2(2.5F); + SDFCapedCone cone2 = new SDFCapedCone(BlockRegistry.MOSSY_GLOWSHROOM_CAP).setHeight(3F).setRadius1(2.5F).setRadius2(13F); SDF posedCone2 = new SDFTranslate().setTranslate(0, 5, 0).setSource(cone2); SDF posedCone3 = new SDFTranslate().setTranslate(0, 7F, 0).setSource(cone2); SDF upCone = new SDFSubtraction().setSourceA(posedCone2).setSourceB(posedCone3); @@ -104,7 +113,7 @@ public class MossyGlowshroomFeature extends DefaultFeature { innerCone = new SDFScale3D().setScale(1.2F, 1F, 1.2F).setSource(innerCone); cones = new SDFUnion().setSourceA(cones).setSourceB(innerCone); - SDF glowCone = new SDFCapedCone(BlockRegistry.MOSSY_GLOWSHROOM_HYMENOPHORE.getDefaultState()).setHeight(3F).setRadius1(2F).setRadius2(12.5F); + SDF glowCone = new SDFCapedCone(BlockRegistry.MOSSY_GLOWSHROOM_HYMENOPHORE).setHeight(3F).setRadius1(2F).setRadius2(12.5F); glowCone = new SDFTranslate().setTranslate(0, 4.25F, 0).setSource(glowCone); glowCone = new SDFSubtraction().setSourceA(glowCone).setSourceB(posedCone3); @@ -119,15 +128,22 @@ public class MossyGlowshroomFeature extends DefaultFeature { HEAD_POS = (SDFTranslate) new SDFTranslate().setSource(new SDFTranslate().setTranslate(0, 2.5F, 0).setSource(cones)); - SDF roots = new SDFSphere(BlockRegistry.MOSSY_GLOWSHROOM.bark.getDefaultState()).setRadius(4F); + SDF roots = new SDFSphere(BlockRegistry.MOSSY_GLOWSHROOM.bark).setRadius(4F); roots = new SDFScale3D().setScale(1, 0.7F, 1).setSource(roots); ROOTS = (SDFFlatWave) new SDFFlatWave().setRaysCount(5).setIntensity(1.5F).setSource(roots); FUNCTION = new SDFSmoothUnion().setRadius(4).setSourceB(new SDFUnion().setSourceA(HEAD_POS).setSourceB(ROOTS)); - FUNCTION.setPostProcess((info) -> { + + REPLACE = (state) -> { + if (state.getBlock() != Blocks.END_STONE && state.isIn(BlockTagRegistry.END_GROUND)) { + return true; + } + return state.getMaterial().isReplaceable(); + }; + + POST_PROCESS = (info) -> { if (BlockRegistry.MOSSY_GLOWSHROOM.isTreeLog(info.getState())) { - BlockState up = info.getStateUp(); - if (!BlockRegistry.MOSSY_GLOWSHROOM.isTreeLog(up) || !BlockRegistry.MOSSY_GLOWSHROOM.isTreeLog(info.getStateDown())) { + if (!BlockRegistry.MOSSY_GLOWSHROOM.isTreeLog(info.getStateUp()) || !BlockRegistry.MOSSY_GLOWSHROOM.isTreeLog(info.getStateDown())) { return BlockRegistry.MOSSY_GLOWSHROOM.bark.getDefaultState(); } } @@ -135,15 +151,19 @@ public class MossyGlowshroomFeature extends DefaultFeature { if (BlockRegistry.MOSSY_GLOWSHROOM.isTreeLog(info.getStateDown())) { return info.getState().with(BlockMossyGlowshroomCap.TRANSITION, true); } + + int air = 0; + for (Direction dir: Direction.values()) { + if (info.getState(dir).isAir()) { + air ++; + } + } + if (air > 4) { + info.setState(AIR); + return AIR; + } } return info.getState(); - }); - - FUNCTION.setReplaceFunction((state) -> { - if (state.getBlock() != Blocks.END_STONE && state.isIn(BlockTagRegistry.END_GROUND)) { - return true; - } - return state.getMaterial().isReplaceable(); - }); + }; } } diff --git a/src/main/java/ru/betterend/world/features/StoneSpiralFeature.java b/src/main/java/ru/betterend/world/features/StoneSpiralFeature.java deleted file mode 100644 index fbe029b2..00000000 --- a/src/main/java/ru/betterend/world/features/StoneSpiralFeature.java +++ /dev/null @@ -1,26 +0,0 @@ -package ru.betterend.world.features; - -import java.util.Random; - -import net.minecraft.block.Blocks; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; -import net.minecraft.world.Heightmap.Type; -import net.minecraft.world.StructureWorldAccess; -import net.minecraft.world.gen.chunk.ChunkGenerator; -import net.minecraft.world.gen.feature.DefaultFeatureConfig; - -public class StoneSpiralFeature extends DefaultFeature { - @Override - public boolean generate(StructureWorldAccess world, ChunkGenerator generator, Random random, BlockPos pos, DefaultFeatureConfig config) { - BlockPos topPos = world.getTopPosition(Type.WORLD_SURFACE, pos); - Direction offset = Direction.NORTH; - - for (int y = 1; y <= 15; y++) { - offset = offset.rotateYClockwise(); - world.setBlockState(topPos.up(y).offset(offset), Blocks.STONE.getDefaultState(), 3); - } - - return true; - } -} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/blockstates/mossy_glowshroom_sapling.json b/src/main/resources/assets/betterend/blockstates/mossy_glowshroom_sapling.json new file mode 100644 index 00000000..6d24ba19 --- /dev/null +++ b/src/main/resources/assets/betterend/blockstates/mossy_glowshroom_sapling.json @@ -0,0 +1,5 @@ +{ + "variants": { + "": { "model": "betterend:block/mossy_glowshroom_sapling" } + } +} diff --git a/src/main/resources/assets/betterend/lang/en_us.json b/src/main/resources/assets/betterend/lang/en_us.json index 7ff6b9f3..0dca5708 100644 --- a/src/main/resources/assets/betterend/lang/en_us.json +++ b/src/main/resources/assets/betterend/lang/en_us.json @@ -14,6 +14,7 @@ "item.betterend.terminite_ingot": "Terminite Ingot", "item.betterend.aeternium_ingot": "Aeternium Ingot", + "block.betterend.mossy_glowshroom_sapling": "Mossy Glowshroom Sapling", "block.betterend.mossy_glowshroom_cap": "Mossy Glowshroom Cap", "block.betterend.mossy_glowshroom_fur": "Mossy Glowshroom Fur", "block.betterend.mossy_glowshroom_hymenophore": "Mossy Glowshroom Hymenophore", diff --git a/src/main/resources/assets/betterend/lang/ru_ru.json b/src/main/resources/assets/betterend/lang/ru_ru.json index 1f24edde..48f5fcf2 100644 --- a/src/main/resources/assets/betterend/lang/ru_ru.json +++ b/src/main/resources/assets/betterend/lang/ru_ru.json @@ -14,6 +14,7 @@ "item.betterend.terminite_ingot": "Терминитовый слиток", "item.betterend.aeternium_ingot": "Этериевый слиток", + "block.betterend.mossy_glowshroom_sapling": "Саженец мшистого светогриба", "block.betterend.mossy_glowshroom_cap": "Шляпка мшистого светогриба", "block.betterend.mossy_glowshroom_fur": "Волоски мшистого светогриба", "block.betterend.mossy_glowshroom_hymenophore": "Гименофор мшистого светогриба", diff --git a/src/main/resources/assets/betterend/models/block/mossy_glowshroom_sapling.json b/src/main/resources/assets/betterend/models/block/mossy_glowshroom_sapling.json new file mode 100644 index 00000000..0cc2dd73 --- /dev/null +++ b/src/main/resources/assets/betterend/models/block/mossy_glowshroom_sapling.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "betterend:block/mossy_glowshroom_sapling" + } +} diff --git a/src/main/resources/assets/betterend/models/item/mossy_glowshroom_sapling.json b/src/main/resources/assets/betterend/models/item/mossy_glowshroom_sapling.json new file mode 100644 index 00000000..575a210a --- /dev/null +++ b/src/main/resources/assets/betterend/models/item/mossy_glowshroom_sapling.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "betterend:block/mossy_glowshroom_sapling" + } +} diff --git a/src/main/resources/assets/betterend/textures/block/mossy_glowshroom_sapling.png b/src/main/resources/assets/betterend/textures/block/mossy_glowshroom_sapling.png new file mode 100644 index 0000000000000000000000000000000000000000..d1b7729962c4260dd76e30a9df3522f267214917 GIT binary patch literal 2087 zcmbVN4Qvx-817(&QDNB_7(~$90h7tD_tS3eohxHo=T@NuMsjFAWlG>jvykk1d%A1ku1?bHa3T_Kw$V?+Z8mZ$R&68-QDv( z-}}6O_x6n9!eNHd2Axhf%u!@7f%hcsOc(^O&tAU=;BAOhG+WW>o=DNoI9=n$Q97Oe ztl%nB%be2~R`eSIC%SoK$S*;(PM4h%k^t-DRm9DEg@6t1I&vIE1kQ$*W;zL{l+Tw7 zMKv-%tESk+*7#VOLvto0*&zlJ_<0o|A%8_cVL~=E%*(*F_8Lc#Fhup)&|Gapq|7-3 z$roiF$uwqRENP|?3vDE`2%0iyAQVAbaKeI+4EVUIZ$=PP(W zA5ayDC1V@F&^nzl_(Og1`(tQDEvSMrq5*j*T5(lNJYK>pVx`RT1yyjzahe*5$(MPc zin2=-EBX^PqhB79pRXmxicBmO0-P9B(jTzl?Lg&iC`C{NM$i~VyC@T5(sDP6FfjxX zfjVI+a6ko*1{OKNQ~jUNSbUj$u|kxcA_x62p$Nw^9#QrK7z@DX zR1jc!huwxk*+xO&7(h`xZF2Ki76)j|3e0ZI%92@_l{3?{8^DW&>bJLxY^9c`etYhJ z+E14S*j%9Ev3Xz<+}GXDk_#0nFndb0Me=|*x~dQ+N7|7SS?KD0QxC|bIIGo-nRpM4 zL6rb=6TpK}oI4A!CX<=uJlVL`9grf@cyOVGOq1*}1Ii3wj6kNwSk0Gazn@71MgJdJa|6khm7KHQuQbP zP)irSJbz)q9AC%DjE-|1ALP70x;5toL%E^$vmrm#OYqiH)ZCE4Mgp*R-|w9%2bvt~8V7u&CY}7Ydq-;BmBuYMlFLi$2WFH_GY%br z4(jZUJG^_V>y1~YuK8`qyrQkfDK{KjsuFIuZ%8<{Y1O-n3=`s4PamG>8n4f-@4Whb zcanJiUfkI9C5fBm%hlPdJ#U)MwLC>`zmlbIU%aw`J9;EBqjKvfRff&WYdSuj+TcCC zt@-Xx^SGg3C+$ja{_&D-&685K|CvKezg)0oees?7JxO(Ihu1fyIqCzJmiFt7l<{@G zeP&-@_r^oLX!6WN_ZP~FWUguD{ldAbXgz(vOGNNMYmPK-LXs4ivI z#l`HHlj(zqf#$i+*3+fa54PRnceAy%BRW6bFCH!2w>A#H)UtBfqGR3Pjk(d&^Zew+ wx0+9}mqr5Lo@Ik~F7b86Upv!6k7bX?EibyTt=s4QO8b>N3X1Lf@)p$p34zhu;s5{u literal 0 HcmV?d00001