黎雨轩
继我之前的问题 Capability系统的nbt数据同步问题 的后续
首先描述一下我遇到的问题:我自定义了一个Capability,将他的Provider绑定在了玩家身上,通过发包的方式同步了服务端和客户端的Capability里面的值。上述过程都很正常,接下来是我发现的问题:


下面是我对这个问题的一些想法:


注:1、数据同步的过程一切正常,我已经进行了充分的测试,下面是网络包的handle:
  1. public static void handle(MSGMindCapabilitySync msg, Supplier<NetworkEvent.Context> ctx) {
  2.         ctx.get().enqueueWork(() -> {
  3.             ServerPlayerEntity clientPlayer = ctx.get().getSender();
  4.             if (clientPlayer != null) {
  5.                 clientPlayer.getCapability(LibCapabilities.MIND_CAPABILITY).ifPresent((capability -> {
  6.                     capability.setMindStrength(msg.mindStrength);
  7.                 }));
  8.             }
  9.             DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> {
  10.                 if (Minecraft.getInstance().player == null) return;
  11.                 Minecraft.getInstance().player.getCapability(LibCapabilities.MIND_CAPABILITY).ifPresent((capability -> {
  12.                     capability.setMindStrength(msg.mindStrength);
  13.                 }));
  14.             });
  15.         });
  16.         ctx.get().setPacketHandled(true);
  17.     }
复制代码
2、客户端能力的调用方式为:
  1. Minecraft.getInstance().player.getCapability(LibCapabilities.MIND_CAPABILITY).ifPresent(capability -> {
  2.             SaintChapter.LOGGER.info(String.valueOf(capability.getMindStrength()));
  3.         });
复制代码


黎雨轩
好叭,把事件系统翻了个底朝天之后终于找到了,PlayerEvent#PlayerLoggedInEvent,这里可以进行服务端初始化

你滴阳光男孩
MCBBS有你更精彩!

第一页 上一页 下一页 最后一页