LTCatt пре 6 година
родитељ
комит
f85bc83407

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

@@ -8,7 +8,8 @@ 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 javax.annotation.Nullable;
 
 public class NameTagPacket extends Packet {
 
@@ -30,16 +31,15 @@ public class NameTagPacket extends Packet {
     }
 
     // 接收到数据包的事件处理
-    @Override public void onServerReceivePacket(NetworkEvent.Context ctx) {
-        ServerPlayerEntity player = ctx.getSender();
-        ItemStack item = player.getHeldItem(this.hand);
+    @Override public void onServerReceivePacket(@Nullable ServerPlayerEntity senderPlayer) {
+        ItemStack item = senderPlayer.getHeldItem(this.hand);
         if (item.getItem() == Items.NAME_TAG) { // 检查物品,避免客户端通过伪造数据包作弊
             item.setDisplayName(new StringTextComponent(this.displayName));
         } else {
             Main.LOGGER.warn("接收到修改命名牌名称的数据包,但玩家并未手持命名牌");
         }
     }
-    @Override public void onClientReceivePacket(NetworkEvent.Context ctx) {
+    @Override public void onClientReceivePacket(@Nullable ServerPlayerEntity senderPlayer) {
         Main.LOGGER.warn("客户端接收到了修改命名牌名称的数据包,它应该发送给服务端");
     }
 

+ 13 - 12
src/main/java/com/hexdragon/util/network/Packet.java

@@ -1,11 +1,13 @@
 package com.hexdragon.util.network;
 
+import com.hexdragon.enchrebirth.Main;
 import net.minecraft.entity.player.ServerPlayerEntity;
 import net.minecraft.network.PacketBuffer;
 import net.minecraftforge.fml.network.NetworkDirection;
 import net.minecraftforge.fml.network.NetworkEvent;
 import net.minecraftforge.fml.network.PacketDistributor;
 
+import javax.annotation.Nullable;
 import java.util.function.Supplier;
 
 public abstract class Packet {
@@ -15,21 +17,20 @@ public abstract class Packet {
 
     // 接收到数据包的事件处理
     public void onReceivePacket(Supplier<NetworkEvent.Context> ctx) {
-        ctx.get().enqueueWork(() -> {
-            NetworkEvent.Context context = ctx.get();
-            if (context.getDirection() == NetworkDirection.PLAY_TO_SERVER) {
-                onServerReceivePacket(context);
-            } else {
-                onClientReceivePacket(context);
-            }
-        });
-        ctx.get().setPacketHandled(true);
+        final NetworkEvent.Context context = ctx.get();
+        if (context.getDirection() == NetworkDirection.PLAY_TO_SERVER) {
+            context.enqueueWork(() -> onServerReceivePacket(context.getSender()));
+        } else if (context.getDirection() == NetworkDirection.PLAY_TO_SERVER) {
+            context.enqueueWork(() -> onClientReceivePacket(context.getSender()));
+        } else {
+            Main.LOGGER.warn("出现意料外的数据包传递方向");
+        }
+        context.setPacketHandled(true);
     }
 
     // 接收到数据包的处理
-    public abstract void onServerReceivePacket(NetworkEvent.Context ctx);
-
-    public abstract void onClientReceivePacket(NetworkEvent.Context ctx);
+    public abstract void onServerReceivePacket(@Nullable ServerPlayerEntity senderPlayer);
+    public abstract void onClientReceivePacket(@Nullable ServerPlayerEntity senderPlayer);
 
     // 将数据包发送至特定对象
     // 如果要扩展支持的对象范围,使用不同的 PacketDistributor 即可