ソースを参照

发包支持左右手判断,可以正常获取原本名称

LTCatt 6 年 前
親
コミット
c0a562f586

+ 7 - 5
src/main/java/com/hexdragon/enchrebirth/item/name_tag/NameTagScreen.java

@@ -6,16 +6,19 @@ import com.hexdragon.util.network.StringPacket;
 import com.mojang.blaze3d.matrix.MatrixStack;
 import net.minecraft.client.gui.screen.Screen;
 import net.minecraft.client.gui.widget.TextFieldWidget;
+import net.minecraft.util.Hand;
 import net.minecraft.util.ResourceLocation;
+import net.minecraft.util.text.StringTextComponent;
 import net.minecraft.util.text.TranslationTextComponent;
 import org.lwjgl.opengl.GL11;
 
 public class NameTagScreen extends Screen {
 
     String defaultName;
-    public NameTagScreen(String defaultName) {
+    Hand hand;
+    public NameTagScreen(String defaultName, Hand hand) {
         super(new TranslationTextComponent("gui.name_tag.title"));
-        this.defaultName = defaultName;
+        this.defaultName = defaultName; this.hand = hand;
     }
     final ResourceLocation GUI_TEXTURE = new ResourceLocation(Main.MODID, "textures/gui/name_tag.png");
     TextFieldWidget textField;
@@ -26,7 +29,7 @@ public class NameTagScreen extends Screen {
         this.guiLeft = (this.width - this.xSize) / 2;
         this.guiTop = (this.height - this.ySize) / 2;
         // (x,y), (width, height)
-        this.textField = new TextFieldWidget(this.font, guiLeft + 61, guiTop + 27, 95, 16, new TranslationTextComponent("item.name_tag.name"));
+        this.textField = new TextFieldWidget(this.font, guiLeft + 61, guiTop + 27, 95, 16, new StringTextComponent(defaultName));
         this.textField.setText(defaultName);
         this.children.add(this.textField);
         super.init();
@@ -67,7 +70,6 @@ public class NameTagScreen extends Screen {
         super.closeScreen();
     }
     public void onClose() {
-        // Main.LOGGER.warn("CLOSE: " + textField.getText());
-        Networking.INSTANCE.sendToServer(new StringPacket(textField.getText()));
+        Networking.INSTANCE.sendToServer(new StringPacket(textField.getText(), (byte) (hand == Hand.MAIN_HAND ? 0 : 1)));
     }
 }

+ 2 - 2
src/main/java/com/hexdragon/enchrebirth/mixin/item/NameTagItemMixin.java

@@ -21,8 +21,8 @@ public abstract class NameTagItemMixin extends Item {
     @Override public ActionResult<ItemStack> onItemRightClick(World worldIn, PlayerEntity playerIn, Hand handIn) {
         if (worldIn.isRemote) {
             DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> {
-                ITextComponent defaultName = getDisplayName(playerIn.getHeldItem(handIn));
-                Minecraft.getInstance().displayGuiScreen(new NameTagScreen(defaultName.getString()));
+                ITextComponent defaultName = playerIn.getHeldItem(handIn).getDisplayName();
+                Minecraft.getInstance().displayGuiScreen(new NameTagScreen(defaultName.getString(), handIn));
             });
         }
         return super.onItemRightClick(worldIn, playerIn, handIn);

+ 6 - 3
src/main/java/com/hexdragon/util/network/StringPacket.java

@@ -12,27 +12,30 @@ import net.minecraftforge.fml.network.NetworkEvent;
 import java.util.function.Supplier;
 
 public class StringPacket {
+    private byte hand;
     private String message;
 
     public StringPacket(PacketBuffer buffer) {
+        hand = buffer.readByte();
         message = buffer.readString(Short.MAX_VALUE);
     }
 
-    public StringPacket(String message) {
+    public StringPacket(String message, byte hand) {
         this.message = message;
+        this.hand = hand;
     }
 
     public void toBytes(PacketBuffer buf) {
+        buf.writeByte(this.hand);
         buf.writeString(this.message);
     }
 
     public void handler(Supplier<NetworkEvent.Context> ctx) {
         ctx.get().enqueueWork(() -> {
             ServerPlayerEntity player = ctx.get().getSender();
-            ItemStack item = player.getHeldItem(Hand.MAIN_HAND);
+            ItemStack item = player.getHeldItem(this.hand == 0 ? Hand.MAIN_HAND : Hand.OFF_HAND);
             if (item.getItem() == Items.NAME_TAG) {
                 item.setDisplayName(new StringTextComponent(this.message));
-                // TODO : 检查在副手的情况?
             } else {
                 Main.LOGGER.warn("Got a wrong name tag packet: " + this.message);
             }