From f262668414d84358a6c16e742fb44615e37df709 Mon Sep 17 00:00:00 2001 From: Flemmli97 Date: Sat, 11 Mar 2023 18:28:18 +0100 Subject: [PATCH] make some right click handling more accessible --- .../flan/api/fabric/ItemUseBlockFlags.java | 29 +++++++++++++++++++ .../flemmli97/flan/fabric/FlanFabric.java | 3 ++ .../flan/fabric/ItemUseBlockFlags.java | 14 --------- .../mixin/ServerPlayerGameModeMixin.java | 12 +++++++- 4 files changed, 43 insertions(+), 15 deletions(-) create mode 100644 fabric/src/main/java/io/github/flemmli97/flan/api/fabric/ItemUseBlockFlags.java delete mode 100644 fabric/src/main/java/io/github/flemmli97/flan/fabric/ItemUseBlockFlags.java diff --git a/fabric/src/main/java/io/github/flemmli97/flan/api/fabric/ItemUseBlockFlags.java b/fabric/src/main/java/io/github/flemmli97/flan/api/fabric/ItemUseBlockFlags.java new file mode 100644 index 0000000..e004bac --- /dev/null +++ b/fabric/src/main/java/io/github/flemmli97/flan/api/fabric/ItemUseBlockFlags.java @@ -0,0 +1,29 @@ +package io.github.flemmli97.flan.api.fabric; + +import net.fabricmc.fabric.api.event.player.UseBlockCallback; +import net.minecraft.server.level.ServerPlayer; + +/** + * Interface for deciding what right click action should be prevented + * This is used when handling fabrics {@link UseBlockCallback#EVENT} + */ +public interface ItemUseBlockFlags { + + void stopCanUseBlocks(boolean flag); + + void stopCanUseItems(boolean flag); + + /** + * If false prevents interaction with a block + */ + boolean allowUseBlocks(); + + /** + * If false prevents right clicking with an item on a block + */ + boolean allowUseItems(); + + static ItemUseBlockFlags fromPlayer(ServerPlayer player) { + return (ItemUseBlockFlags) player.gameMode; + } +} diff --git a/fabric/src/main/java/io/github/flemmli97/flan/fabric/FlanFabric.java b/fabric/src/main/java/io/github/flemmli97/flan/fabric/FlanFabric.java index 84f21c6..8af9d81 100644 --- a/fabric/src/main/java/io/github/flemmli97/flan/fabric/FlanFabric.java +++ b/fabric/src/main/java/io/github/flemmli97/flan/fabric/FlanFabric.java @@ -1,6 +1,7 @@ package io.github.flemmli97.flan.fabric; import io.github.flemmli97.flan.Flan; +import io.github.flemmli97.flan.api.fabric.ItemUseBlockFlags; import io.github.flemmli97.flan.commands.CommandClaim; import io.github.flemmli97.flan.config.ConfigHandler; import io.github.flemmli97.flan.event.BlockInteractEvents; @@ -93,6 +94,8 @@ public class FlanFabric implements ModInitializer { return res; flags.stopCanUseBlocks(res == InteractionResult.FAIL); flags.stopCanUseItems(ItemInteractEvents.onItemUseBlock(new UseOnContext(p, hand, hitResult)) == InteractionResult.FAIL); + if (!flags.allowUseBlocks() && !flags.allowUseItems()) + return InteractionResult.FAIL; } return InteractionResult.PASS; } diff --git a/fabric/src/main/java/io/github/flemmli97/flan/fabric/ItemUseBlockFlags.java b/fabric/src/main/java/io/github/flemmli97/flan/fabric/ItemUseBlockFlags.java deleted file mode 100644 index 7fa6b0b..0000000 --- a/fabric/src/main/java/io/github/flemmli97/flan/fabric/ItemUseBlockFlags.java +++ /dev/null @@ -1,14 +0,0 @@ -package io.github.flemmli97.flan.fabric; - -import net.minecraft.server.level.ServerPlayer; - -public interface ItemUseBlockFlags { - - void stopCanUseBlocks(boolean flag); - - void stopCanUseItems(boolean flag); - - static ItemUseBlockFlags fromPlayer(ServerPlayer player) { - return (ItemUseBlockFlags) player.gameMode; - } -} diff --git a/fabric/src/main/java/io/github/flemmli97/flan/fabric/mixin/ServerPlayerGameModeMixin.java b/fabric/src/main/java/io/github/flemmli97/flan/fabric/mixin/ServerPlayerGameModeMixin.java index dd8169e..69aa961 100644 --- a/fabric/src/main/java/io/github/flemmli97/flan/fabric/mixin/ServerPlayerGameModeMixin.java +++ b/fabric/src/main/java/io/github/flemmli97/flan/fabric/mixin/ServerPlayerGameModeMixin.java @@ -1,6 +1,6 @@ package io.github.flemmli97.flan.fabric.mixin; -import io.github.flemmli97.flan.fabric.ItemUseBlockFlags; +import io.github.flemmli97.flan.api.fabric.ItemUseBlockFlags; import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ServerPlayerGameMode; import net.minecraft.world.InteractionHand; @@ -47,4 +47,14 @@ public abstract class ServerPlayerGameModeMixin implements ItemUseBlockFlags { public void stopCanUseItems(boolean flag) { this.stopInteractItemBlock = flag; } + + @Override + public boolean allowUseBlocks() { + return !this.stopInteractBlock; + } + + @Override + public boolean allowUseItems() { + return !this.stopInteractItemBlock; + } }