diff --git a/src/main/java/ru/betterend/blocks/MossyBoneBlock.java b/src/main/java/ru/betterend/blocks/MossyBoneBlock.java new file mode 100644 index 00000000..971f4fd8 --- /dev/null +++ b/src/main/java/ru/betterend/blocks/MossyBoneBlock.java @@ -0,0 +1,56 @@ +package ru.betterend.blocks; + +import java.util.Collections; +import java.util.List; +import java.util.Random; + +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.block.SnowBlock; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.enchantment.Enchantments; +import net.minecraft.item.ItemStack; +import net.minecraft.loot.context.LootContext; +import net.minecraft.loot.context.LootContextParameters; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; +import net.minecraft.world.WorldView; +import net.minecraft.world.chunk.light.ChunkLightProvider; +import ru.betterend.blocks.basis.EndPillarBlock; + +public class MossyBoneBlock extends EndPillarBlock { + public MossyBoneBlock() { + super(FabricBlockSettings.copyOf(Blocks.BONE_BLOCK).hardness(0.5F).ticksRandomly()); + } + + @Override + public List getDroppedStacks(BlockState state, LootContext.Builder builder) { + ItemStack tool = builder.get(LootContextParameters.TOOL); + if (tool != null && EnchantmentHelper.getLevel(Enchantments.SILK_TOUCH, tool) > 0) { + return Collections.singletonList(new ItemStack(this)); + } + return Collections.singletonList(new ItemStack(Blocks.BONE_BLOCK)); + } + + @Override + public void randomTick(BlockState state, ServerWorld world, BlockPos pos, Random random) { + if (random.nextInt(16) == 0 && !canSurvive(state, world, pos)) { + world.setBlockState(pos, Blocks.BONE_BLOCK.getDefaultState().with(AXIS, state.get(AXIS))); + } + } + + public static boolean canSurvive(BlockState state, WorldView worldView, BlockPos pos) { + BlockPos blockPos = pos.up(); + BlockState blockState = worldView.getBlockState(blockPos); + if (blockState.isOf(Blocks.SNOW) && (Integer)blockState.get(SnowBlock.LAYERS) == 1) { + return true; + } else if (blockState.getFluidState().getLevel() == 8) { + return false; + } else { + int i = ChunkLightProvider.getRealisticOpacity(worldView, state, pos, blockState, blockPos, Direction.UP, blockState.getOpacity(worldView, blockPos)); + return i < 5; + } + } +} diff --git a/src/main/java/ru/betterend/blocks/TerrainPlantBlock.java b/src/main/java/ru/betterend/blocks/TerrainPlantBlock.java index 53e3b007..f558395d 100644 --- a/src/main/java/ru/betterend/blocks/TerrainPlantBlock.java +++ b/src/main/java/ru/betterend/blocks/TerrainPlantBlock.java @@ -5,15 +5,20 @@ import net.minecraft.block.BlockState; import ru.betterend.blocks.basis.EndPlantBlock; public class TerrainPlantBlock extends EndPlantBlock { - private final Block ground; + private final Block[] ground; - public TerrainPlantBlock(Block ground) { + public TerrainPlantBlock(Block... ground) { super(true); this.ground = ground; } @Override protected boolean isTerrain(BlockState state) { - return state.isOf(ground); + for (Block block: ground) { + if (state.isOf(block)) { + return true; + } + } + return false; } } diff --git a/src/main/java/ru/betterend/registry/EndBlocks.java b/src/main/java/ru/betterend/registry/EndBlocks.java index b3fd0614..22764be5 100644 --- a/src/main/java/ru/betterend/registry/EndBlocks.java +++ b/src/main/java/ru/betterend/registry/EndBlocks.java @@ -68,6 +68,7 @@ import ru.betterend.blocks.LumecornSeedBlock; import ru.betterend.blocks.MengerSpongeBlock; import ru.betterend.blocks.MengerSpongeWetBlock; import ru.betterend.blocks.MissingTileBlock; +import ru.betterend.blocks.MossyBoneBlock; import ru.betterend.blocks.MossyGlowshroomCapBlock; import ru.betterend.blocks.MossyGlowshroomHymenophoreBlock; import ru.betterend.blocks.MossyGlowshroomSaplingBlock; @@ -144,6 +145,7 @@ public class EndBlocks { public static final Block RUTISCUS_PATH = registerBlock("rutiscus_path", new EndPathBlock(RUTISCUS)); public static final Block MOSSY_OBSIDIAN = registerBlock("mossy_obsidian", new MossyObsidian()); + public static final Block MOSSY_BONE = registerBlock("mossy_bone", new MossyBoneBlock()); // Rocks // public static final StoneMaterial FLAVOLITE = new StoneMaterial("flavolite", MaterialColor.SAND); @@ -231,8 +233,8 @@ public class EndBlocks { public static final Block SALTEAGO = registerBlock("salteago", new TerrainPlantBlock(END_MOSS)); public static final Block VAIOLUSH_FERN = registerBlock("vaiolush_fern", new TerrainPlantBlock(END_MOSS)); public static final Block FRACTURN = registerBlock("fracturn", new TerrainPlantBlock(END_MOSS)); - public static final Block CLAWFERN = registerBlock("clawfern", new TerrainPlantBlock(SANGNUM)); - public static final Block GLOBULAGUS = registerBlock("globulagus", new TerrainPlantBlock(SANGNUM)); + public static final Block CLAWFERN = registerBlock("clawfern", new TerrainPlantBlock(SANGNUM, MOSSY_OBSIDIAN, MOSSY_BONE)); + public static final Block GLOBULAGUS = registerBlock("globulagus", new TerrainPlantBlock(SANGNUM, MOSSY_OBSIDIAN, MOSSY_BONE)); public static final Block ORANGO = registerBlock("orango", new TerrainPlantBlock(RUTISCUS)); public static final Block AERIDIUM = registerBlock("aeridium", new TerrainPlantBlock(RUTISCUS)); public static final Block LUTEBUS = registerBlock("lutebus", new TerrainPlantBlock(RUTISCUS)); diff --git a/src/main/resources/assets/betterend/blockstates/mossy_bone.json b/src/main/resources/assets/betterend/blockstates/mossy_bone.json new file mode 100644 index 00000000..f825d388 --- /dev/null +++ b/src/main/resources/assets/betterend/blockstates/mossy_bone.json @@ -0,0 +1,7 @@ +{ + "variants": { + "axis=x": { "model": "betterend:block/mossy_bone_hor", "y": 90 }, + "axis=y": { "model": "betterend:block/mossy_bone_ver" }, + "axis=z": { "model": "betterend:block/mossy_bone_hor" } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/models/block/mossy_bone_hor.json b/src/main/resources/assets/betterend/models/block/mossy_bone_hor.json new file mode 100644 index 00000000..acc98207 --- /dev/null +++ b/src/main/resources/assets/betterend/models/block/mossy_bone_hor.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "down": "block/bone_block_side", + "east": "betterend:block/mossy_bone_side_ver", + "north": "betterend:block/mossy_bone_cut", + "particle": "betterend:block/mossy_bone_side_ver", + "south": "betterend:block/mossy_bone_cut", + "up": "betterend:block/sangnum_top", + "west": "betterend:block/mossy_bone_side_ver" + } +} diff --git a/src/main/resources/assets/betterend/models/block/mossy_bone_ver.json b/src/main/resources/assets/betterend/models/block/mossy_bone_ver.json new file mode 100644 index 00000000..8534387e --- /dev/null +++ b/src/main/resources/assets/betterend/models/block/mossy_bone_ver.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "down": "block/bone_block_top", + "east": "betterend:block/mossy_bone_side_ver", + "north": "betterend:block/mossy_bone_side_ver", + "particle": "betterend:block/mossy_bone_side_ver", + "south": "betterend:block/mossy_bone_side_ver", + "up": "betterend:block/sangnum_top", + "west": "betterend:block/mossy_bone_side_ver" + } +} diff --git a/src/main/resources/assets/betterend/models/item/amaranita_hyphae.json b/src/main/resources/assets/betterend/models/item/amaranita_hyphae.json deleted file mode 100644 index 0277110e..00000000 --- a/src/main/resources/assets/betterend/models/item/amaranita_hyphae.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "betterend:block/amaranita_hyphae" -} diff --git a/src/main/resources/assets/betterend/models/item/mossy_bone.json b/src/main/resources/assets/betterend/models/item/mossy_bone.json new file mode 100644 index 00000000..22aebdb8 --- /dev/null +++ b/src/main/resources/assets/betterend/models/item/mossy_bone.json @@ -0,0 +1,3 @@ +{ + "parent": "betterend:block/mossy_bone_ver" +} diff --git a/src/main/resources/assets/betterend/textures/block/mossy_bone_cut.png b/src/main/resources/assets/betterend/textures/block/mossy_bone_cut.png new file mode 100644 index 00000000..774c8208 Binary files /dev/null and b/src/main/resources/assets/betterend/textures/block/mossy_bone_cut.png differ diff --git a/src/main/resources/assets/betterend/textures/block/mossy_bone_side_hor.png b/src/main/resources/assets/betterend/textures/block/mossy_bone_side_hor.png new file mode 100644 index 00000000..a10d9ffb Binary files /dev/null and b/src/main/resources/assets/betterend/textures/block/mossy_bone_side_hor.png differ diff --git a/src/main/resources/assets/betterend/textures/block/mossy_bone_side_ver.png b/src/main/resources/assets/betterend/textures/block/mossy_bone_side_ver.png new file mode 100644 index 00000000..9584de5e Binary files /dev/null and b/src/main/resources/assets/betterend/textures/block/mossy_bone_side_ver.png differ