From 5ed3ce91233f61200e975aacdd7ab3bf29749d29 Mon Sep 17 00:00:00 2001 From: cdqtzrc <3286637847@qq.com> Date: Mon, 24 Jun 2024 18:39:20 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=AF=B9=E7=9D=80=E7=8E=A9?= =?UTF-8?q?=E5=AE=B6=E5=8F=B3=E9=94=AE=E5=8F=AF=E4=BB=A5=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E7=89=A9=E5=93=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dubhe/gugle/carpet/mixin/PlayerMixin.java | 26 +++++++++++++++---- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/src/main/java/dev/dubhe/gugle/carpet/mixin/PlayerMixin.java b/src/main/java/dev/dubhe/gugle/carpet/mixin/PlayerMixin.java index b85239a..3a23cdd 100644 --- a/src/main/java/dev/dubhe/gugle/carpet/mixin/PlayerMixin.java +++ b/src/main/java/dev/dubhe/gugle/carpet/mixin/PlayerMixin.java @@ -9,6 +9,7 @@ import dev.dubhe.gugle.carpet.tools.FakePlayerEnderChestContainer; import dev.dubhe.gugle.carpet.tools.FakePlayerInventoryContainer; import dev.dubhe.gugle.carpet.tools.FakePlayerInventoryMenu; +import net.minecraft.client.player.RemotePlayer; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.SimpleMenuProvider; @@ -40,11 +41,22 @@ private void tick(CallbackInfo ci) { @WrapOperation(method = "interactOn", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/Entity;interact(Lnet/minecraft/world/entity/player/Player;Lnet/minecraft/world/InteractionHand;)Lnet/minecraft/world/InteractionResult;")) private InteractionResult interactOn(Entity entity, Player player, InteractionHand hand, Operation original) { - if (!(entity instanceof EntityPlayerMPFake fakePlayer)) { - return original.call(entity, player, hand); + if (entity instanceof EntityPlayerMPFake fakePlayer) { + // 打开物品栏 + return this.openInventory(player, fakePlayer); + } else if (entity instanceof RemotePlayer) { + // 在客户端中,玩家可以与客户端的被交互玩家交互并返回PASS,这时交互玩家手上如果拿着可以使用的物品,则物品会被使用 + // 所以如果判断被交互实体是客户端玩家,返回SUCCESS + return InteractionResult.SUCCESS; } + return original.call(entity, player, hand); + } + + @Unique + private InteractionResult openInventory(Player player, EntityPlayerMPFake fakePlayer) { SimpleMenuProvider provider = null; if (player.isShiftKeyDown()) { + // 打开末影箱 if (GcaSetting.openFakePlayerEnderChest) { provider = new SimpleMenuProvider( (i, inventory, p) -> ChestMenu.sixRows( @@ -54,6 +66,7 @@ private InteractionResult interactOn(Entity entity, Player player, InteractionHa ComponentTranslate.trans("gca.player.ender_chest", fakePlayer.getDisplayName()) ); } else { + // 打开额外功能菜单 provider = new SimpleMenuProvider( (i, inventory, p) -> ChestMenu.threeRows( i, inventory, @@ -63,6 +76,7 @@ private InteractionResult interactOn(Entity entity, Player player, InteractionHa ); } } else if (GcaSetting.openFakePlayerInventory) { + // 打开物品栏 provider = new SimpleMenuProvider( (i, inventory, p) -> new FakePlayerInventoryMenu( i, inventory, @@ -71,9 +85,11 @@ private InteractionResult interactOn(Entity entity, Player player, InteractionHa ComponentTranslate.trans("gca.player.inventory", fakePlayer.getDisplayName()) ); } - if (provider != null) { - player.openMenu(provider); + + if (provider == null) { + return InteractionResult.PASS; } - return InteractionResult.SUCCESS; + player.openMenu(provider); + return InteractionResult.CONSUME; } }