Nutrition GUI 热键

基本信息

属性 值
注册名 key.nutrition(i18n key)
默认按键 Keyboard.KEY_NONE(默认未绑定,玩家需自行在控制选项中设置)
KeyBinding 类别 "Nutrition"
客户端字段 ca.wescook.nutrition.proxy.ClientProxy.keyNutritionGui

功能

按下热键时打开(或关闭)NutritionGui,让玩家随时查看每个 Nutrient 的当前值与进度。

实现

注册

public class ClientProxy extends CommonProxy {
    public static KeyBinding keyNutritionGui;

    @Override
    public void init(FMLInitializationEvent event) {
        if (NutritionConfig.gui.enable) {
            ClientRegistry.registerKeyBinding(
                keyNutritionGui = new KeyBinding("key.nutrition", Keyboard.KEY_NONE, "Nutrition"));
            FMLCommonHandler.instance().bus().register(new EventNutritionKey());
            if (NutritionConfig.gui.enableButton) {
                MinecraftForge.EVENT_BUS.register(new EventNutritionButton());
            }
        }

        if (NutritionConfig.gui.enableTooltips) {
            MinecraftForge.EVENT_BUS.register(new EventTooltip());
        }
    }
}

按键处理

public class EventNutritionKey {
    @SubscribeEvent
    @SideOnly(Side.CLIENT)
    public void keyInput(InputEvent.KeyInputEvent event) {
        if (ClientProxy.keyNutritionGui.isPressed()) {
            Minecraft.getMinecraft().displayGuiScreen(new NutritionGui());
        }
    }
}

关闭逻辑

NutritionGui.keyTyped 中检测到以下任一键也关闭 GUI:

  • Escape(keyCode 1)
  • 玩家背包键(mc.gameSettings.keyBindInventory.getKeyCode())
  • 营养 GUI 键自身(实现 toggle 行为)
if (keyCode == 1 || keyCode == mc.gameSettings.keyBindInventory.getKeyCode()
    || keyCode == ClientProxy.keyNutritionGui.getKeyCode()) {
    mc.thePlayer.closeScreen();
    if (mc.currentScreen == null) mc.setIngameFocus();
}

配置项

  • NutritionConfig.gui.enable = true(默认):控制整个 GUI + 热键总开关;设为 false 时既不注册 KeyBinding 也不注册事件(McRestart 必需)
  • NutritionConfig.gui.enableButton:控制是否在玩家背包 GUI 中注入营养按钮(McRestart 必需)

相关条目