You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Minecraft Fabric 1.20.1模组开发求助:按键显示Biome报错

Minecraft Fabric 1.20.1模组开发:修复显示生物群系的按键功能报错

我正在开发Minecraft Fabric 1.20.1模组,需求是按下键时在聊天框显示当前所在的生物群系。运行代码时出现错误:error: package net.minecraft.Text does not exist import net.minecraft.Text.literal;`,原代码如下:

import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.api.ModInitializer;
import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.network.ClientPlayerEntity;
import net.minecraft.client.option.KeyBinding;
import net.minecraft.Text.literal;
import net.minecraft.util.Identifier;
import org.lwjgl.glfw.GLFW;

public class Biome implements ClientModInitializer {

    private static final KeyBinding KEY_BINDING = KeyBindingHelper.registerKeyBinding(new KeyBinding(
            "key.yourmod.showbiome",
            GLFW.GLFW_KEY_GRAVE_ACCENT,
            "category.yourmod"
    ));

    @Override
    public void onInitializeClient() {
        // Register the key press event listener
        KeyBindingHelper.registerKeyBinding(KEY_BINDING);
    }

    public static void onKeyPressed() {
        if (KEY_BINDING.wasPressed()) {
            MinecraftClient client = MinecraftClient.getInstance();
            ClientPlayerEntity player = client.player;

            if (player != null && player.world != null) {
                String biomeName = player.world.getBiome(player.getBlockPos()).getTranslationKey();
                player.sendMessage(new LiteralText("You are in the biome: " + biomeName), false);
            }
        }
    }
}

错误原因及修复步骤

  • 导入路径错误:net.minecraft.Text.literal不是正确的包路径,Minecraft 1.20.1中文本相关类位于net.minecraft.text包下,LiteralText是具体实现类,需修正导入语句。
  • 重复注册按键:初始化KEY_BINDING时已通过KeyBindingHelper.registerKeyBinding完成注册,onInitializeClient中再次调用属于冗余操作,需删除。
  • 缺少按键事件触发逻辑:原代码的onKeyPressed方法未绑定任何事件,需通过Fabric的客户端Tick事件监听按键输入,确保逻辑被正确执行。

修正后的完整代码

import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper;
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.network.ClientPlayerEntity;
import net.minecraft.client.option.KeyBinding;
import net.minecraft.text.LiteralText;
import net.minecraft.text.Text;
import org.lwjgl.glfw.GLFW;

public class BiomeMod implements ClientModInitializer {

    private static final KeyBinding SHOW_BIOME_KEY = KeyBindingHelper.registerKeyBinding(new KeyBinding(
            "key.yourmod.showbiome",
            GLFW.GLFW_KEY_GRAVE_ACCENT,
            "category.yourmod"
    ));

    @Override
    public void onInitializeClient() {
        // 注册客户端Tick事件监听按键输入
        ClientTickEvents.END_CLIENT_TICK.register(client -> {
            while (SHOW_BIOME_KEY.wasPressed()) {
                ClientPlayerEntity player = client.player;
                if (player != null && player.world != null) {
                    String biomeTranslationKey = player.world.getBiome(player.getBlockPos()).getTranslationKey();
                    // 使用Text.translatable获取本地化的生物群系名称
                    Text biomeName = Text.translatable(biomeTranslationKey);
                    player.sendMessage(new LiteralText("当前所在生物群系: ").append(biomeName), false);
                }
            }
        });
    }
}

额外优化说明

  • 将类名从Biome改为BiomeMod,避免与Minecraft内置的Biome类重名,减少潜在冲突。
  • 使用Text.translatable替代直接拼接翻译键,会显示游戏内本地化的生物群系名称(如中文环境下显示“森林”而非“biome.minecraft.forest”),提升用户体验。
  • 采用ClientTickEvents.END_CLIENT_TICK事件处理按键,这是Fabric客户端处理按键输入的标准方式,确保逻辑稳定触发。

内容的提问来源于stack exchange,提问作者Noam Wolf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 22:47:02