Przeglądaj źródła

可以发包并修改命名牌内容了

LTCatt 6 lat temu
rodzic
commit
9ec29c420a

+ 2 - 2
src/main/java/com/hexdragon/enchrebirth/block/anvil/AnvilContainerRe.java

@@ -1,8 +1,8 @@
 package com.hexdragon.enchrebirth.block.anvil;
 
-import com.hexdragon.core.item.EnchantmentHelperRe;
-import com.hexdragon.core.item.ItemHelperRe;
 import com.hexdragon.enchrebirth.registry.RegMain;
+import com.hexdragon.util.item.EnchantmentHelperRe;
+import com.hexdragon.util.item.ItemHelperRe;
 import net.minecraft.block.AnvilBlock;
 import net.minecraft.block.Block;
 import net.minecraft.block.BlockState;

+ 3 - 3
src/main/java/com/hexdragon/enchrebirth/block/grindstone/GrindstoneContainerRe.java

@@ -1,9 +1,9 @@
 package com.hexdragon.enchrebirth.block.grindstone;
 
-import com.hexdragon.core.item.CraftResultInventoryRe;
-import com.hexdragon.core.item.EnchantmentHelperRe;
-import com.hexdragon.core.item.ItemHelperRe;
 import com.hexdragon.enchrebirth.registry.RegMain;
+import com.hexdragon.util.item.CraftResultInventoryRe;
+import com.hexdragon.util.item.EnchantmentHelperRe;
+import com.hexdragon.util.item.ItemHelperRe;
 import net.minecraft.block.Blocks;
 import net.minecraft.enchantment.Enchantment;
 import net.minecraft.enchantment.EnchantmentHelper;

+ 4 - 2
src/main/java/com/hexdragon/enchrebirth/item/name_tag/NameTagScreen.java

@@ -1,6 +1,8 @@
 package com.hexdragon.enchrebirth.item.name_tag;
 
 import com.hexdragon.enchrebirth.Main;
+import com.hexdragon.util.network.Networking;
+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;
@@ -65,7 +67,7 @@ public class NameTagScreen extends Screen {
         super.closeScreen();
     }
     public void onClose() {
-        Main.LOGGER.warn("CLOSE: " + textField.getText());
-
+        // Main.LOGGER.warn("CLOSE: " + textField.getText());
+        Networking.INSTANCE.sendToServer(new StringPacket(textField.getText()));
     }
 }

+ 7 - 0
src/main/java/com/hexdragon/enchrebirth/registry/RegClient.java

@@ -4,6 +4,7 @@ import com.hexdragon.enchrebirth.Main;
 import com.hexdragon.enchrebirth.block.anvil.AnvilRenderer;
 import com.hexdragon.enchrebirth.block.anvil.AnvilScreenRe;
 import com.hexdragon.enchrebirth.block.grindstone.GrindstoneScreenRe;
+import com.hexdragon.util.network.Networking;
 import net.minecraft.client.gui.ScreenManager;
 import net.minecraftforge.api.distmarker.Dist;
 import net.minecraftforge.api.distmarker.OnlyIn;
@@ -11,6 +12,7 @@ import net.minecraftforge.eventbus.api.SubscribeEvent;
 import net.minecraftforge.fml.client.registry.ClientRegistry;
 import net.minecraftforge.fml.common.Mod;
 import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
+import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
 
 @Mod.EventBusSubscriber(modid = Main.MODID, bus = Mod.EventBusSubscriber.Bus.MOD) @OnlyIn(Dist.CLIENT)
 public class RegClient {
@@ -31,4 +33,9 @@ public class RegClient {
         ClientRegistry.bindTileEntityRenderer(RegMain.tileEntityDamagedNetheriteAnvil.get(), (AnvilRenderer::new));
     }
 
+    @SubscribeEvent public static void onCommonSetup(FMLCommonSetupEvent event) {
+        // 注册数据包
+        Networking.registerMessage();
+    }
+
 }

+ 1 - 1
src/main/java/com/hexdragon/core/item/CraftResultInventoryRe.java → src/main/java/com/hexdragon/util/item/CraftResultInventoryRe.java

@@ -1,4 +1,4 @@
-package com.hexdragon.core.item;
+package com.hexdragon.util.item;
 
 import net.minecraft.entity.player.PlayerEntity;
 import net.minecraft.inventory.IInventory;

+ 1 - 1
src/main/java/com/hexdragon/core/item/EnchantmentHelperRe.java → src/main/java/com/hexdragon/util/item/EnchantmentHelperRe.java

@@ -1,4 +1,4 @@
-package com.hexdragon.core.item;
+package com.hexdragon.util.item;
 
 import com.sun.istack.internal.NotNull;
 import net.minecraft.enchantment.Enchantment;

+ 1 - 1
src/main/java/com/hexdragon/core/item/ItemHelperRe.java → src/main/java/com/hexdragon/util/item/ItemHelperRe.java

@@ -1,4 +1,4 @@
-package com.hexdragon.core.item;
+package com.hexdragon.util.item;
 
 import net.minecraft.item.ArmorItem;
 import net.minecraft.item.Item;

+ 30 - 0
src/main/java/com/hexdragon/util/network/Networking.java

@@ -0,0 +1,30 @@
+package com.hexdragon.util.network;
+
+import net.minecraft.util.ResourceLocation;
+import net.minecraftforge.fml.network.NetworkRegistry;
+import net.minecraftforge.fml.network.simple.SimpleChannel;
+
+public class Networking {
+    public static SimpleChannel INSTANCE;
+    private static int ID = 0;
+
+    public static int nextID() {
+        return ID++;
+    }
+
+    public static void registerMessage() {
+        INSTANCE = NetworkRegistry.newSimpleChannel(
+                new ResourceLocation("corerebirth" + ":string_packet"),
+                () -> "1.0",
+                (s) -> true,
+                (s) -> true
+        );
+        INSTANCE.registerMessage(
+                nextID(),
+                StringPacket.class,
+                StringPacket::toBytes,
+                StringPacket::new,
+                StringPacket::handler
+        );
+    }
+}

+ 42 - 0
src/main/java/com/hexdragon/util/network/StringPacket.java

@@ -0,0 +1,42 @@
+package com.hexdragon.util.network;
+
+import com.hexdragon.enchrebirth.Main;
+import net.minecraft.entity.player.ServerPlayerEntity;
+import net.minecraft.item.ItemStack;
+import net.minecraft.item.Items;
+import net.minecraft.network.PacketBuffer;
+import net.minecraft.util.Hand;
+import net.minecraft.util.text.StringTextComponent;
+import net.minecraftforge.fml.network.NetworkEvent;
+
+import java.util.function.Supplier;
+
+public class StringPacket {
+    private String message;
+
+    public StringPacket(PacketBuffer buffer) {
+        message = buffer.readString(Short.MAX_VALUE);
+    }
+
+    public StringPacket(String message) {
+        this.message = message;
+    }
+
+    public void toBytes(PacketBuffer buf) {
+        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);
+            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);
+            }
+        });
+        ctx.get().setPacketHandled(true);
+    }
+}