-
- entity.setname("magicbullet.png");
- MessagePositionHistory message = new MessagePositionHistory();
- message.entity=entity;
- message.nbt = new NBTTagCompound();
- message.nbt.setString("name","magicbullet.png");
- NetworkLoader.instance.sendToAll(message);
- public class MessagePositionHistory implements IMessage
- {
- public NBTTagCompound nbt;
- public EntityMagicBullet entity;
- @Override
- public void fromBytes(ByteBuf buf)
- {
- nbt = ByteBufUtils.readTag(buf);
- }
- @Override
- public void toBytes(ByteBuf buf)
- {
- ByteBufUtils.writeTag(buf, nbt);
- }
-
- public static class Handler implements IMessageHandler<MessagePositionHistory, IMessage>
- {
- @Override
- public IMessage onMessage(MessagePositionHistory message, MessageContext ctx)
- {
- if (ctx.side == Side.CLIENT)
- {
- final String name = message.nbt.getString("name");
- Minecraft.getMinecraft().addScheduledTask(new Runnable()
- {
- @Override
- public void run()
- {
- //EntityPlayer player = Minecraft.getMinecraft().player;
- EntityMagicBullet e= message.entity;
- e.setname(name);
- }
- });
- }
- return null;
- }
- }
- }
如题,应该如何将服务端对自定义的数据同步到客户端,这样写似乎没有作用,是实体的数据没传输过去吗?应该如何去客户端同步某一实体的数据。
没有大佬能来解答一下吗?
复制代码
- Minecraft.getMinecraft().addScheduledTask(new Runnable()
- {
- @Override
- public void run()
- {
- //EntityPlayer player = Minecraft.getMinecraft().player;
- EntityMagicBullet e= message.entity;
- e.setname(name);
- }
- });
显然你没有在这个数据包里写明“我要同步的是哪一个实体”。所以没有效果。
sendToAll 方法是“面向玩家”的,也就是说你发送数据包,收数据包的人是你的玩家。玩家的客户端负责处理数据。你不写清楚是哪一个实体的数据需要同步,那玩家的客户端也就不知道哪一个实体的数据需要同步。
具体来说,fromBytes() 方法里你不仅要从 ByteBuf 里读实体信息,还要读“是哪一个实体”。
题外话,这个需求看上去用 DataParameter<?> 更好一点。一次同步一整个 NBT?你在浪费流量。
本帖最后由 数据system 于 2020-4-2 10:29 编辑
大佬这个该怎么去读取实体,ByteBufUtils好像没有读取实体的方法,这方面我实在不会,请问有教程之类的资料吗?
3TUSK 发表于 2020-4-2 03:01
显然你没有在这个数据包里写明“我要同步的是哪一个实体”。所以没有效果。
sendToAll 方法是“面向玩家 ...
大佬这个该怎么去读取实体,ByteBufUtils好像没有读取实体的方法,这方面我实在不会,请问有教程之类的资料吗?
数据system 发表于 2020-4-2 10:28
大佬这个该怎么去读取实体,ByteBufUtils好像没有读取实体的方法,这方面我实在不会,请问有教程之类的资料 ...
读取实体的UUID,在客户端根据UUID找到这个实体