Hrtzee
本帖最后由 Hrtzee 于 2021-9-20 20:52 编辑

参考别人写的mod和boson的教程写了一套Capability,其中有manaUse和isMage两个布尔值,且都放在同一个Capability里面;又写了一套指令系统供调试,实测两个布尔值都能够独立被读取和写入。但是当我把manaUse放入自定义用户输入里面时,却不能对其修改和读取(代码如下),调试结果标在下面。也就是说,MAGE这个Capability是isPresent,但是ManaUse在用户输入的代码里面什么都没有返回,这是为什么?请大佬帮帮忙
@SubscribeEvent
public static void onKeyboardInput(InputEvent.KeyInputEvent event){
    if(MANA_USE_KEY.isDown()){
        PlayerEntity player = Minecraft.getInstance().player;
        assert player != null;
        player.getCapability(CapabilityRegistryHandler.MAGE).ifPresent((l) -> {
            boolean manaUs = !l.getManaUse();
            l.setManaUse(manaUs);
            NetWorking.INSTANCE.sendToServer(new MagePacket(l.getIsMage(), manaUs, l.getMana(),l.getMaxMana(),l.getSpell()));
            TranslationTextComponent translationTextComponent = new TranslationTextComponent(manaUs?"message.fantasymagic.mana_use_true":"message.fantasymagic.mana_use_false");
            StringTextComponent stringTextComponent = new StringTextComponent(manaUs? "true":"false");
            player.sendMessage(translationTextComponent, player.getUUID());//不执行
            player.sendMessage(stringTextComponent, player.getUUID());//不执行
        });
        player.sendMessage(new StringTextComponent(player.getCapability(CapabilityRegistryHandler.MAGE).isPresent()?"Yes":"No"),player.getUUID());//输出“Yes”
    }
}











2021.12 数据,可能有更多内容参考别人写的mod和boson的教程写了一套Capability,其中有manaUse和isMage两个布尔值,且都放在同一个Capability里面;又写了一套指令系统供调试,实测两个布尔值都能够独立被读取和写入。但是当我把manaUse放入自定义用户输入里面时,却不能对其修改和读取(代码如下),调试结果标在下面。也就是说,MAGE这个Capability是isPresent,但是ManaUse在用户输入的代码里面什么都没有返回,这是为什么?请大佬帮帮忙
@SubscribeEvent
public static void onKeyboardInput(InputEvent.KeyInputEvent event){
    if(MANA_USE_KEY.isDown()){
  PlayerEntity player = Minecraft.getInstance().player;
  assert player != null;
  player.getCapability(CapabilityRegistryHandler.MAGE).ifPresent((l) -> {
   boolean manaUs = !l.getManaUse();
   l.setManaUse(manaUs);
   NetWorking.INSTANCE.sendToServer(new MagePacket(l.getIsMage(), manaUs, l.getMana(),l.getMaxMana(),l.getSpell()));
   TranslationTextComponent translationTextComponent = new TranslationTextComponent(manaUs?"message.fantasymagic.mana_use_true":"message.fantasymagic.mana_use_false");
   StringTextComponent stringTextComponent = new StringTextComponent(manaUs? "true":"false");
   player.sendMessage(translationTextComponent, player.getUUID());//不执行
   player.sendMessage(stringTextComponent, player.getUUID());//不执行
  });
  player.sendMessage(new StringTextComponent(player.getCapability(CapabilityRegistryHandler.MAGE).isPresent()?"Yes":"No"),player.getUUID());//输出“Yes”
    }
}



自然_Hungteen
Input是客户端独有事件,你在这里获取Capability显然是无效的。你应该先发包让后去包的处理里面执行服务端相关代码。
可以参考我的代码:
输入类事件
服务端处理

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