如何编辑Minecraft Mod Class文件?

时间:2018-01-24 18:00:26

标签: java minecraft

我试图在Pam&#39的Harvestcraft mod中编辑一行。原因是在游戏中这些"花园"在mod生成中经常出现。这个mod有一个配置文件,但rarity = 1的最低可能值仍然太高。这个稀有是一个int,我想把它改成这个Mod的jar文件中的浮点数,这样我就可以使用0.5或小于1的东西来减少机会这些花园产卵。

我将.class文件复制并粘贴到intelliJ中,但它只是可读的。编写我自己的文本文件并将扩展名更改为.class显然会破坏文件。

在过去的一个小时里,我一直在尝试谷歌答案。人们说你可能需要设置一个modding环境,反编译代码,然后在更改后重新编译它。对于一行简单的代码编辑来说,这似乎很啰嗦。

编辑:我还没想到它。要添加的东西:我下载了这个类文件编辑器http://dirty-joe.com/ 它让我编辑带有int的字段来浮动。但是这有两个问题;

1,我还需要编辑一个getInt()到getFloat()的方法,这是我不能做的。

2,当我保存新编辑的类文件时,然后尝试使用此JOE编辑器重新打开它。它给了我一个文件错误。这告诉我,如果我编辑类文件,它无论如何都会破坏它。

2 个答案:

答案 0 :(得分:1)

你在技术上可以做到这一点,但这将是一个痛苦。如果它只是改变一个变量,那可能很简单,但现在你也在谈论改变一个字段的类型。

有几种方法可以做到这一点,我没有看到其中一个列出,所以我会提到它。

首先,您可以反编译/重新编译。我曾尝试过这样做过一次,但它确实效果不好。重新编译会产生大量错误,因为它不会是一个完全准确的反编译。

第二个选项,如果不需要更改字段类型,这将是最简单的选择,正在编辑机器代码。 Java被编译为JVM专门使​​用的汇编代码。你会找到指令,改变价值,你就会变得金黄。 (我说最容易,但如果你以前从未见过装配,那么你们看起来都像希腊语。)

回到问题:您正在谈论更改数据类型。这还不够。您不仅需要更改数据类型,而且使用该数据类型的每个点并调用其get方法。调用getter的每个点,它期望一个int返回值。如果float进入int,则会自动转换为int

这就是你如何做到的,但这不值得你花时间。只需要求开发人员为您进行更新。事实上,如果this是您正在谈论的模式,它已经是开源的,您可以自己进行更改。

答案 1 :(得分:1)

HarvestCraft's GitHub page上发出问题或提取请求。

或者,您可以从那里下载源代码,进行更改,然后编译可以自己使用的版本。当然,你必须建立一个Forge开发环境才能做到这一点,但这也不是很难:

  1. 转到Forge' download page
  2. 下载适用于Minecraft的版本的MDK
  3. 解压缩到目录
  4. 从此目录中的命令行运行gradlew setupEclipseForge/src/java
  5. 下载并安装Eclipse
  6. 将HarvestCraft的src目录添加到Forge src目录中(以便其中的内容最终在另一个Forge/src/src/java中,而不是gradlew build)。
  7. 运行Eclipse,告诉它打开现有工作区,将其指向您安装Forge的位置。
  8. 进行更改
  9. 运行Forge/builds/lib
  10. 从{{1}}
  11. 获取生成的jar