diff --git a/src/main/java/ru/betterend/blocks/basis/BlockBark.java b/src/main/java/ru/betterend/blocks/basis/BlockBark.java new file mode 100644 index 00000000..7d1a086e --- /dev/null +++ b/src/main/java/ru/betterend/blocks/basis/BlockBark.java @@ -0,0 +1,30 @@ +package ru.betterend.blocks.basis; + +import java.io.Reader; + +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; +import ru.betterend.interfaces.Patterned; + +public class BlockBark extends BlockPillar { + public BlockBark(Settings settings) { + super(settings); + } + + @Override + public String getModelPattern(String block) { + Identifier blockId = Registry.BLOCK.getId(this); + return Patterned.createJson(Patterned.BASE_BLOCK_MODEL, blockId, getName(blockId)); + } + + @Override + public String getStatesPattern(Reader data) { + Identifier blockId = Registry.BLOCK.getId(this); + return Patterned.createJson(data, blockId, getName(blockId)); + } + + private String getName(Identifier blockId) { + String name = blockId.getPath(); + return name.replace("_bark", "_log_side"); + } +} diff --git a/src/main/java/ru/betterend/blocks/basis/BlockBarkStripable.java b/src/main/java/ru/betterend/blocks/basis/BlockBarkStripable.java new file mode 100644 index 00000000..5adef8f5 --- /dev/null +++ b/src/main/java/ru/betterend/blocks/basis/BlockBarkStripable.java @@ -0,0 +1,41 @@ +package ru.betterend.blocks.basis; + +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.MaterialColor; +import net.minecraft.block.PillarBlock; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.sound.SoundCategory; +import net.minecraft.sound.SoundEvents; +import net.minecraft.util.ActionResult; +import net.minecraft.util.Hand; +import net.minecraft.util.hit.BlockHitResult; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class BlockBarkStripable extends BlockBark { + private final Block striped; + + public BlockBarkStripable(MaterialColor color, Block striped) { + super(FabricBlockSettings.copyOf(striped).materialColor(color)); + this.striped = striped; + } + + @Override + public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) { + if (player.getMainHandStack().getItem().isIn(FabricToolTags.AXES)) { + world.playSound(player, pos, SoundEvents.ITEM_AXE_STRIP, SoundCategory.BLOCKS, 1.0F, 1.0F); + if (!world.isClient) { + world.setBlockState(pos, striped.getDefaultState().with(PillarBlock.AXIS, state.get(PillarBlock.AXIS)), 11); + if (player != null && !player.isCreative()) { + player.getMainHandStack().damage(1, world.random, (ServerPlayerEntity) player); + } + } + return ActionResult.SUCCESS; + } + return ActionResult.FAIL; + } +} diff --git a/src/main/java/ru/betterend/blocks/complex/WoodenMaterial.java b/src/main/java/ru/betterend/blocks/complex/WoodenMaterial.java index 788e0262..4b0a1f6a 100644 --- a/src/main/java/ru/betterend/blocks/complex/WoodenMaterial.java +++ b/src/main/java/ru/betterend/blocks/complex/WoodenMaterial.java @@ -8,6 +8,8 @@ import net.minecraft.block.MaterialColor; import net.minecraft.item.Items; import net.minecraft.tag.BlockTags; import net.minecraft.tag.ItemTags; +import ru.betterend.blocks.basis.BlockBark; +import ru.betterend.blocks.basis.BlockBarkStripable; import ru.betterend.blocks.basis.BlockBarrel; import ru.betterend.blocks.basis.BlockBase; import ru.betterend.blocks.basis.BlockChest; @@ -57,10 +59,10 @@ public class WoodenMaterial { FabricBlockSettings materialPlanks = FabricBlockSettings.copyOf(Blocks.OAK_PLANKS).materialColor(planksColor); log_stripped = BlockRegistry.registerBlock(name + "_stripped_log", new BlockPillar(materialPlanks)); - bark_stripped = BlockRegistry.registerBlock(name + "_stripped_bark", new BlockPillar(materialPlanks)); + bark_stripped = BlockRegistry.registerBlock(name + "_stripped_bark", new BlockBark(materialPlanks)); log = BlockRegistry.registerBlock(name + "_log", new BlockLogStripable(woodColor, log_stripped)); - bark = BlockRegistry.registerBlock(name + "_bark", new BlockLogStripable(woodColor, bark_stripped)); + bark = BlockRegistry.registerBlock(name + "_bark", new BlockBarkStripable(woodColor, bark_stripped)); planks = BlockRegistry.registerBlock(name + "_planks", new BlockBase(materialPlanks)); stairs = BlockRegistry.registerBlock(name + "_stairs", new BlockStairs(planks));