diff --git a/src/generated/resources/data/anvilcraft/tags/block/hammer_removable.json b/src/generated/resources/data/anvilcraft/tags/block/hammer_removable.json index 2ff1566cc4..21c4b1f39e 100644 --- a/src/generated/resources/data/anvilcraft/tags/block/hammer_removable.json +++ b/src/generated/resources/data/anvilcraft/tags/block/hammer_removable.json @@ -18,6 +18,7 @@ "minecraft:detector_rail", "minecraft:powered_rail", "minecraft:note_block", + "minecraft:jukebox", "minecraft:observer", "minecraft:hopper", "minecraft:dropper", diff --git a/src/main/java/dev/dubhe/anvilcraft/block/HeavyIronBeamBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/HeavyIronBeamBlock.java index 602794a0a1..1638faece0 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/HeavyIronBeamBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/HeavyIronBeamBlock.java @@ -4,20 +4,23 @@ import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Rotation; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.EnumProperty; +import net.minecraft.world.level.block.state.properties.Property; import net.minecraft.world.level.pathfinder.PathComputationType; import net.minecraft.world.phys.shapes.BooleanOp; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; -import org.jetbrains.annotations.Nullable; public class HeavyIronBeamBlock extends Block implements IHammerRemovable, HammerRotateBehavior { @@ -33,7 +36,6 @@ public HeavyIronBeamBlock(Properties properties) { registerDefaultState(getStateDefinition().any().setValue(AXIS, Direction.Axis.X)); } - @Nullable @Override public BlockState getStateForPlacement(BlockPlaceContext context) { return this.defaultBlockState() @@ -61,6 +63,19 @@ public VoxelShape getShape( }; } + @Override + public boolean change(Player player, BlockPos blockPos, Level level, ItemStack anvilHammer) { + BlockState state = level.getBlockState(blockPos); + Direction.Axis newAxis = state.getValue(AXIS) == Direction.Axis.X ? Direction.Axis.Z : Direction.Axis.X; + level.setBlockAndUpdate(blockPos, state.setValue(AXIS, newAxis)); + return true; + } + + @Override + public Property getChangeableProperty(BlockState blockState) { + return AXIS; + } + @Override protected boolean isPathfindable(BlockState state, PathComputationType pathComputationType) { return false; diff --git a/src/main/java/dev/dubhe/anvilcraft/client/event/WheelLifecycleEventListener.java b/src/main/java/dev/dubhe/anvilcraft/client/event/WheelLifecycleEventListener.java index 0335e9fae8..9fa0139fe9 100644 --- a/src/main/java/dev/dubhe/anvilcraft/client/event/WheelLifecycleEventListener.java +++ b/src/main/java/dev/dubhe/anvilcraft/client/event/WheelLifecycleEventListener.java @@ -49,6 +49,7 @@ public class WheelLifecycleEventListener { private static long multiphaseKeyTime = -1L; private static boolean multiphaseKeyWasDown = false; + private static boolean multiphaseKeyPressAccepted = false; private static @Nullable Optional multiphaseWheelCache = null; private static long resonatorKeyTime = -1L; @@ -620,6 +621,10 @@ public static void onKeyInput(InputEvent.MouseButton.Post event) { private static void processMultiphasePress(Minecraft client, int action) { if (client.level == null) return; if (action == GLFW.GLFW_RELEASE) { + if (!WheelLifecycleEventListener.multiphaseKeyPressAccepted) { + return; + } + WheelLifecycleEventListener.multiphaseKeyPressAccepted = false; if (WheelLifecycleEventListener.multiphaseKeyWasDown) { CONTROLLER.onHoldKeyReleased(); } else { @@ -632,6 +637,7 @@ private static void processMultiphasePress(Minecraft client, int action) { } if (Minecraft.getInstance().screen != null) return; if (action == GLFW.GLFW_PRESS) { + WheelLifecycleEventListener.multiphaseKeyPressAccepted = true; if (!WheelLifecycleEventListener.multiphaseKeyWasDown) { WheelLifecycleEventListener.multiphaseKeyTime = client.level.getGameTime(); } diff --git a/src/main/java/dev/dubhe/anvilcraft/data/tags/BlockTagLoader.java b/src/main/java/dev/dubhe/anvilcraft/data/tags/BlockTagLoader.java index 646e0dbee1..45dc38020f 100644 --- a/src/main/java/dev/dubhe/anvilcraft/data/tags/BlockTagLoader.java +++ b/src/main/java/dev/dubhe/anvilcraft/data/tags/BlockTagLoader.java @@ -53,6 +53,7 @@ public static void init(RegistrumTagsProvider provider) { .add(findResourceKey(Blocks.DETECTOR_RAIL)) .add(findResourceKey(Blocks.POWERED_RAIL)) .add(findResourceKey(Blocks.NOTE_BLOCK)) + .add(findResourceKey(Blocks.JUKEBOX)) .add(findResourceKey(Blocks.OBSERVER)) .add(findResourceKey(Blocks.HOPPER)) .add(findResourceKey(Blocks.DROPPER))