From 9de5cb66763b944400fb58f6222af65608234966 Mon Sep 17 00:00:00 2001 From: 17146 <1714673995@qq.com> Date: Thu, 10 Jul 2025 22:18:21 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96screen=20provider=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../superbwarfare/client/ClickHandler.java | 13 +++++++++++-- .../client/screens/DogTagEditorScreen.java | 9 ++++++--- .../com/atsuishio/superbwarfare/item/DogTag.java | 5 +++-- .../superbwarfare/item/FiringParameters.java | 2 +- .../superbwarfare/item/ItemScreenProvider.java | 3 ++- .../message/send/DogTagFinishEditMessage.java | 6 ++++-- .../resources/assets/superbwarfare/lang/en_us.json | 2 +- .../resources/assets/superbwarfare/lang/zh_cn.json | 2 +- 8 files changed, 29 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/atsuishio/superbwarfare/client/ClickHandler.java b/src/main/java/com/atsuishio/superbwarfare/client/ClickHandler.java index 246dbe992..03f95b9f8 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/ClickHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/ClickHandler.java @@ -30,6 +30,7 @@ import net.minecraft.core.component.DataComponents; import net.minecraft.network.chat.Component; import net.minecraft.sounds.SoundSource; import net.minecraft.util.Mth; +import net.minecraft.world.InteractionHand; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; @@ -290,9 +291,18 @@ public class ClickHandler { isEditing = !isEditing; } if (stack.getItem() instanceof ItemScreenProvider provider) { - var screen = provider.getItemScreen(stack, player); + var screen = provider.getItemScreen(stack, player, InteractionHand.MAIN_HAND); if (screen != null) { Minecraft.getInstance().setScreen(screen); + return; + } + } + ItemStack offHand = player.getOffhandItem(); + if (offHand.getItem() instanceof ItemScreenProvider provider) { + var screen = provider.getItemScreen(offHand, player, InteractionHand.OFF_HAND); + if (screen != null) { + Minecraft.getInstance().setScreen(screen); + return; } } } @@ -358,7 +368,6 @@ public class ClickHandler { } } } - } else { if (player.hasEffect(ModMobEffects.SHOCK)) return; diff --git a/src/main/java/com/atsuishio/superbwarfare/client/screens/DogTagEditorScreen.java b/src/main/java/com/atsuishio/superbwarfare/client/screens/DogTagEditorScreen.java index b19ba6980..7a9a3349d 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/screens/DogTagEditorScreen.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/screens/DogTagEditorScreen.java @@ -17,6 +17,7 @@ import net.minecraft.network.protocol.game.ServerboundRenameItemPacket; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; import net.minecraft.util.StringUtil; +import net.minecraft.world.InteractionHand; import net.minecraft.world.item.ItemStack; import net.neoforged.api.distmarker.Dist; import net.neoforged.api.distmarker.OnlyIn; @@ -38,6 +39,7 @@ public class DogTagEditorScreen extends Screen { private short[][] icon = new short[16][16]; public ItemStack stack; + private InteractionHand hand; private boolean init = false; @@ -47,9 +49,10 @@ public class DogTagEditorScreen extends Screen { @Nullable private String itemName; - public DogTagEditorScreen(ItemStack stack) { + public DogTagEditorScreen(ItemStack stack, InteractionHand hand) { super(GameNarrator.NO_TITLE); this.stack = stack; + this.hand = hand; imageWidth = 207; imageHeight = 185; } @@ -256,7 +259,6 @@ public class DogTagEditorScreen extends Screen { if (DogTagEditorScreen.this.minecraft != null) { DogTagEditorScreen.this.minecraft.setScreen(null); } - var colors = new ArrayList(DogTagEditorScreen.this.icon.length * DogTagEditorScreen.this.icon[0].length); for (var row : DogTagEditorScreen.this.icon) { @@ -266,7 +268,8 @@ public class DogTagEditorScreen extends Screen { } this.updateLocal(colors, DogTagEditorScreen.this.name.getValue()); - PacketDistributor.sendToServer(new DogTagFinishEditMessage(colors, DogTagEditorScreen.this.name.getValue())); + PacketDistributor.sendToServer(new DogTagFinishEditMessage(colors, DogTagEditorScreen.this.name.getValue(), + DogTagEditorScreen.this.hand == InteractionHand.MAIN_HAND)); } @Override diff --git a/src/main/java/com/atsuishio/superbwarfare/item/DogTag.java b/src/main/java/com/atsuishio/superbwarfare/item/DogTag.java index 290c4dfeb..cec1d14fa 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/DogTag.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/DogTag.java @@ -6,6 +6,7 @@ import com.atsuishio.superbwarfare.client.tooltip.component.DogTagImageComponent import com.atsuishio.superbwarfare.component.ModDataComponents; import net.minecraft.client.gui.screens.Screen; import net.minecraft.network.chat.Component; +import net.minecraft.world.InteractionHand; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.tooltip.TooltipComponent; @@ -74,7 +75,7 @@ public class DogTag extends Item implements ICurioItem, ItemScreenProvider { @OnlyIn(Dist.CLIENT) @Override - public @Nullable Screen getItemScreen(ItemStack stack, Player player) { - return new DogTagEditorScreen(stack); + public @Nullable Screen getItemScreen(ItemStack stack, Player player, InteractionHand hand) { + return new DogTagEditorScreen(stack, hand); } } diff --git a/src/main/java/com/atsuishio/superbwarfare/item/FiringParameters.java b/src/main/java/com/atsuishio/superbwarfare/item/FiringParameters.java index dcfb155fb..c0f487265 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/FiringParameters.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/FiringParameters.java @@ -92,7 +92,7 @@ public class FiringParameters extends Item implements ItemScreenProvider { @OnlyIn(Dist.CLIENT) @Override - public @Nullable Screen getItemScreen(ItemStack stack, Player player) { + public @Nullable Screen getItemScreen(ItemStack stack, Player player, InteractionHand hand) { return new FiringParametersScreen(stack); } } diff --git a/src/main/java/com/atsuishio/superbwarfare/item/ItemScreenProvider.java b/src/main/java/com/atsuishio/superbwarfare/item/ItemScreenProvider.java index 0809a56ee..3b7a7ba21 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/ItemScreenProvider.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/ItemScreenProvider.java @@ -1,6 +1,7 @@ package com.atsuishio.superbwarfare.item; import net.minecraft.client.gui.screens.Screen; +import net.minecraft.world.InteractionHand; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.neoforged.api.distmarker.Dist; @@ -10,5 +11,5 @@ import org.jetbrains.annotations.Nullable; public interface ItemScreenProvider { @OnlyIn(Dist.CLIENT) - @Nullable Screen getItemScreen(ItemStack stack, Player player); + @Nullable Screen getItemScreen(ItemStack stack, Player player, InteractionHand hand); } diff --git a/src/main/java/com/atsuishio/superbwarfare/network/message/send/DogTagFinishEditMessage.java b/src/main/java/com/atsuishio/superbwarfare/network/message/send/DogTagFinishEditMessage.java index 3e68d2f96..7e2c5d1d0 100644 --- a/src/main/java/com/atsuishio/superbwarfare/network/message/send/DogTagFinishEditMessage.java +++ b/src/main/java/com/atsuishio/superbwarfare/network/message/send/DogTagFinishEditMessage.java @@ -16,12 +16,14 @@ import org.jetbrains.annotations.NotNull; import java.util.List; -public record DogTagFinishEditMessage(List colors, String name) implements CustomPacketPayload { +public record DogTagFinishEditMessage(List colors, String name, + boolean mainHand) implements CustomPacketPayload { public static final Type TYPE = new Type<>(Mod.loc("dog_tag_finish_edit")); public static final StreamCodec STREAM_CODEC = StreamCodec.composite( ByteBufCodecs.SHORT.apply(ByteBufCodecs.list()), DogTagFinishEditMessage::colors, ByteBufCodecs.STRING_UTF8, DogTagFinishEditMessage::name, + ByteBufCodecs.BOOL, DogTagFinishEditMessage::mainHand, DogTagFinishEditMessage::new ); @@ -29,7 +31,7 @@ public record DogTagFinishEditMessage(List colors, String name) implement public static void handler(DogTagFinishEditMessage message, final IPayloadContext context) { ServerPlayer serverPlayer = (ServerPlayer) context.player(); - ItemStack stack = serverPlayer.getMainHandItem(); + ItemStack stack = message.mainHand ? serverPlayer.getMainHandItem() : serverPlayer.getOffhandItem(); if (!stack.is(ModItems.DOG_TAG.get())) return; stack.set(ModDataComponents.DOG_TAG_IMAGE, message.colors); diff --git a/src/main/resources/assets/superbwarfare/lang/en_us.json b/src/main/resources/assets/superbwarfare/lang/en_us.json index 35e4f2f54..505a9edf5 100644 --- a/src/main/resources/assets/superbwarfare/lang/en_us.json +++ b/src/main/resources/assets/superbwarfare/lang/en_us.json @@ -252,7 +252,7 @@ "item.superbwarfare.medium_armament_module": "Medium Armament Module", "item.superbwarfare.heavy_armament_module": "Heavy Armament Module", "item.superbwarfare.artillery_indicator": "Artillery Indicator", - "des.superbwarfare.item_screen_provider": "Press %1$s key to open GUI when holding with main hand", + "des.superbwarfare.item_screen_provider": "Press %1$s key to open GUI", "attribute.superbwarfare.bullet_resistance": "Bullet Resistance", diff --git a/src/main/resources/assets/superbwarfare/lang/zh_cn.json b/src/main/resources/assets/superbwarfare/lang/zh_cn.json index 9cdec0cb3..0f01d346f 100644 --- a/src/main/resources/assets/superbwarfare/lang/zh_cn.json +++ b/src/main/resources/assets/superbwarfare/lang/zh_cn.json @@ -252,7 +252,7 @@ "item.superbwarfare.medium_armament_module": "中型武装模块", "item.superbwarfare.heavy_armament_module": "重型武装模块", "item.superbwarfare.artillery_indicator": "火炮指示器", - "des.superbwarfare.item_screen_provider": "在主手时按下 %1$s 以打开GUI", + "des.superbwarfare.item_screen_provider": "按下 %1$s 以打开GUI", "attribute.superbwarfare.bullet_resistance": "子弹防护",