我试图在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编辑器重新打开它。它给了我一个文件错误。这告诉我,如果我编辑类文件,它无论如何都会破坏它。
答案 0 :(得分:1)
你在技术上可以做到这一点,但这将是一个痛苦。如果它只是改变一个变量,那可能很简单,但现在你也在谈论改变一个字段的类型。
有几种方法可以做到这一点,我没有看到其中一个列出,所以我会提到它。
首先,您可以反编译/重新编译。我曾尝试过这样做过一次,但它确实效果不好。重新编译会产生大量错误,因为它不会是一个完全准确的反编译。
第二个选项,如果不需要更改字段类型,这将是最简单的选择,正在编辑机器代码。 Java被编译为JVM专门使用的汇编代码。你会找到指令,改变价值,你就会变得金黄。 (我说最容易,但如果你以前从未见过装配,那么你们看起来都像希腊语。)
回到问题:您正在谈论更改数据类型。这还不够。您不仅需要更改数据类型,而且使用该数据类型的每个点并调用其get
方法。调用getter的每个点,它期望一个int返回值。如果float
进入int
,则会自动转换为int
。
这就是你如何做到的,但这不值得你花时间。只需要求开发人员为您进行更新。事实上,如果this是您正在谈论的模式,它已经是开源的,您可以自己进行更改。
答案 1 :(得分:1)
在HarvestCraft's GitHub page上发出问题或提取请求。
或者,您可以从那里下载源代码,进行更改,然后编译可以自己使用的版本。当然,你必须建立一个Forge开发环境才能做到这一点,但这也不是很难:
gradlew setupEclipse
和Forge/src/java
Forge/src/src/java
中,而不是gradlew build
)。Forge/builds/lib