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 代码。反过来,这将导致它(显然)无法找到未混淆的方法和名称。
我正在尝试编写一个(非常简单的)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 代码。反过来,这将导致它(显然)无法找到未混淆的方法和名称。