为什么 Minecraft Forge 有这些奇怪的变量名称?

Fen*_*lim 2 java minecraft minecraft-forge

我对我的 Minecraft Forge 项目不稳定感到沮丧。

为什么?因为大多数代码都有奇怪的参数,我无法理解。在此之前,我的其他项目没有这种疯狂。这是一个例子:

public WoodFurnaceBlock(Properties p_49795_) {
    super(p_49795_);
}
Run Code Online (Sandbox Code Playgroud)

在此示例中,参数看起来像一个奇怪的 id,这可能是导入错误。有没有一个网站可以搜索这个论点的含义,或者我是否必须以一种糟糕的方式忍受它。

请记住,在我的项目中,大多数论点都被打破了。

Tsc*_*cka 7

奇怪的 id 的原因是 Mojang 混淆了他们的代码。

Forge 背后的人们使用映射器将方法、类和属性名称转换为人类可读的名称。他们使用 MCP 映射将对 Minecraft 代码的方法调用转换为模糊代码可以理解的调用。

这也是为什么在新版本发布后,forge 总是需要一些时间才能发布他们的版本,因为他们需要检查和改进他们的映射和命名。

这也解释了为什么相同的方法在不同的 Forge 版本中对于不同的 Minecraft 版本可以有不同的名称,因为它们可以决定更好或不同的命名方案。

在你的例子中,变量仍然是混淆的值,它还没有指定映射,或者没有人发现值得想出一个名称并将映射添加到其中,或者将其推到队列中,重点关注首先是更重要的类和方法名称,而不是相对不重要的属性名称。

尝试通过属性的类型名称来推断属性的用途。将整个类复制到您自己的命名空间中,并使用重构为变量和参数提供正确的名称,以便您可以更好地阅读代码。

不要忘记 Forge 是由志愿者维护的,制作这些映射需要花费大量的时间和精力。

您还可以自愿付出一些努力https://github.com/MinecraftForge/MCPConfig

通常,当版本较长时,越来越多的这些奇怪的映射会被解析为正确的名称。当您使用较新的版本时,您的 IDE 将在更多实例中使用这些奇怪的属性名称生成这些方法。

只需给他们正确的名字即可。我将把你的例子重构为:

class WoodFurnaceBlock {
  public WoodFurnaceBlock(Properties properties) {
    super(properties);
  }
}
Run Code Online (Sandbox Code Playgroud)

我曾经花了半年的时间来弄清楚如何像 1.7.10 中的下界神庙那样进行正确的结构生成,仅使用混淆的代码,必须考虑名称,然后重构为更好的名称,因为我更好地理解了 Mojang 的代码做到了。

当使用 Forge 进行改装时,这将始终是开发体验的一部分。

如果您更喜欢在简单模式下做事,我建议您使用 bukkit/spigot 插件。做一些奇特的事情(比如自定义怪物和方块)比较困难,但它更容易,而且代码更一致。