网络
编写一个 Packet:
import java.util.function.Supplier;
import net.minecraft.network.PacketBuffer;
import net.minecraftforge.fml.network.NetworkEvent.Context;
import snownee.kiwi.network.Packet;
public class MyPacket extends Packet
{
private int number;
public MyPacket(int number)
{
this.number = number;
}
public static class Handler extends PacketHandler<MyPacket>
{
@Override
public void encode(MyPacket msg, PacketBuffer buffer)
{
buffer.writeVarInt(msg.number);
}
@Override
public MyPacket decode(PacketBuffer buffer)
{
return new MyPacket(buffer.readVarInt());
}
@Override
public void handle(MyPacket message, Supplier<Context> ctx)
{
ctx.get().enqueueWork(() -> {
System.out.println(message.number);
});
ctx.get().setPacketHandled(true);
}
}
}
在 preInit 阶段注册这个 Packet:
NetworkChannel.register(MyPacket.class, new MyPacket.Handler());
发送这个 Packet:
// 仅发送给位于主世界的玩家
new MyPacket(943).send(PacketDistributor.DIMENSION.with(() -> DimensionType.OVERWORLD));
若你的 Packet 只有一种发送方式,可以尝试复写 send 方法:
new MyPacket(943).send();
若你的 Packet 只需从客户端发出,可以直接继承 snownee.kiwi.network.ClientPacket
。使用上述方法发送你的 Packet。