Forge 在 Entity#getName() 上返回 NoSuchMethodExcepton

Forge returning NoSuchMethodExcepton on Entity#getName()

我正在尝试编写一个(非常简单的)Forge mod 来监视和提醒小鸡的生成,但代码无法运行。相反,当我尝试读取实体名称时,它会抛出 NoSuchMethodException

我的代码如下:

@SubscribeEvent
public void OnEntityJoinWorld(EntityJoinWorldEvent event) {
    if (!(event.getEntity() instanceof EntityChicken)) {
        return;
    }

    Entity chicken = event.getEntity();

    String message = "Chicken named " + chicken.getName() + " spawned at " + chicken.posX
                                                          + "," + chicken.posY
                                                          + "," + chicken.posZ
                                                          + ".";

    Minecraft.getMinecraft().thePlayer.addChatMessage(new TextComponentString(message));
    LOGGER.info(message);
}

具体错误为:

java.lang.NoSuchMethodError: net.minecraft.entity.Entity.getName()Ljava/lang/String;

所使用的 Forge 和 Minecraft 版本是相同的,所以要么我忽略了一些非常简单的事情,要么这不是我应该做的事情。我该如何解决这个问题?

你不应该使用: EntityChicken 鸡 = event.getEntity(); 然后导入 EntityChicken?

编辑: 您的错误是因为当您执行 chicken.getName() 时,它想要获取 event.getEntity() 的名称并且 event.getEntity() 的类型设置为 Entity,这会产生错误。您应该做的是将 event.getEntity() 的类型更改为 EntityChicken,如上所述

请务必使用 Gradle build 选项而不是 jar 选项编译您的项目。

仅使用 jar 时,Gradle 不会重新混淆所有 Minecraft 代码。反过来,这将导致它(显然)无法找到未混淆的方法和名称。