将下载的minecraft mod更新为1.8

时间:2016-03-08 16:06:13

标签: java eclipse minecraft minecraft-forge

我已经下载了一个forge mod(ArrowMarker 1.7.10版本),我想更新它,因此它适用于1.8 forge Minecraft。我尝试了什么: 首先,我设置了一个基本的1.8锻造mod,完全可以工作。 然后我尝试了多个反编译器来反编译.jar存档,但是当我粘贴这些文件的代码时,我会遇到很多错误。 (例如,不存在的功能)。我怎么能将这个mod更新为1.8?
Arrow marker 1.7.10

奇怪的反编译的例子:(它在func_151468_f或mc.field事情上的错误)

<bean id="sysProperties" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
    <property name="targetObject" ref="databaseConfigurator" />
    <property name="targetMethod" value="getProperties"/>
</bean> 

<bean id="databaseConfigurator" class="my.util.config.MyDatabaseConfigurator">
    <property name="datasource" ref="dataSource" />
    <property name="propertyFile" value="/WEB-INF/my.properties" />
    <property name="applicationName" value="ThisApp" />
</bean>



<bean name="PropertyPlaceholderConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="properties" ref="CommonsConfigurationFactoryBean"/>
</bean>

<bean name="CommonsConfigurationFactoryBean" class="org.springmodules.commons.configuration.CommonsConfigurationFactoryBean">
       <constructor-arg ref="databaseConfigurator"/>
</bean>

1 个答案:

答案 0 :(得分:3)

我理解这篇文章是旧的,但它有助于给出一个清晰简洁的答案。这可以帮助新开发人员了解正在发生的事情。

信息

您看到的是混淆的方法/字段名称(称为searge名称)。这是因为代码保护系统称为obfuscation。它可以防止人们复制您的代码,并为此获得赞誉。通常情况下,这不会造成太多问题,因为它只会创建难以辨认但工作正常的代码。

问题

然而,Minecraft Forge的运作方式略有不同。由于它反编译并重新格式化整个minecraft客户端,因此它可以访问模糊方法/字段无法找到的非常具体的名称。这会导致Java IDE抛出错误,主要是未实现的错误,它无法找到指定的方法/字段。同样重要的是要注意'方法'总是以 func 开头,这意味着功能。同样,字段将以字段开头,参数将以 p 开头。

解决方案

由于你说这个mod是在1.7.10中编写的,它使用1.7.10混淆,这意味着你应该下载this file。此文件包含三个 csv 文件,名为methods,fields和params。你关心的是方法和领域。如果您拥有它,请在文本编辑器或Excel中打开这些文件。现在,将模糊的方法名称或字段名称复制到剪贴板上。完成后,打开相应的文件(如果您复制了“func_”,打开methods.csv等)。使用“查找”选项查找模糊名称。除此之外,应列出官方MC名称。例如,您的混淆代码,转换为正常的MC代码应该如下所示:

@SubscribeEvent
public void RenderVillageCheckerFromEvent(InputEvent.KeyInputEvent event)
{
    if (key_enable.isPressed())
    {
        ArrowMarker.arrowMarker.mode += 1;
        if (ArrowMarker.arrowMarker.mode == 4) {
            ArrowMarker.arrowMarker.mode = 0;
        }
    }
    if (key_h.isPressed()) {
        ArrowMarker.arrowMarker.Hactive = (ArrowMarker.arrowMarker.Hactive);
    }
    if (sen == -1.0F) {
        sen = mc.gameSettings.mouseSensitivity;
    }
    if (key_slow.getIsKeyPressed()) {
        mc.gameSettings.mouseSensitivity = (sen / 10.0F);
    } else {
        mc.gameSettings.mouseSensitivity = sen;
    }
    if ((mc.currentScreen != null) && (ArrowMarker.arrowMarker.mode > 2)) {
        ArrowMarker.arrowMarker.mode = 1;
    }
}

现在上面只解决了1.7.10客户端的错误。大多数方法名称/字段都会更改每个版本,并且大部分代码都会被破坏。我的建议是首先执行上述解决方案并构建1.7.10 forge下载。一旦确认构建并正常工作,请下载forge for 1.8并将paste src文件夹复制到新的forge目录中。将弹出多个错误,您最好的机会是查看它们,并尝试查找发生的错误。伪造forums是完美的,因为那里的用户在混淆和存在的新方法/领域方面有广泛的知识。另一种方法是交叉引用1.7.10混淆与1.8混淆(可以找到其csv文件here)。这意味着你采用混淆的方法/字段,并在1.8 csv文件中搜索它。这种方法通常效果不好,但在某些情况下确实有效。

结论

总结(或tl; dr)

  • here下载模糊名称参考列表。
  • 找到混淆的名称引用,找到官方记录的名称(是混淆名称中的第二个值,即func_123456_a,methodName,0,description)
  • 编译并运行1.7.10,然后复制粘贴到1.8目录,通过交叉引用从1.7.10解决错误 - &gt; 1.8。
  • mod应该正确更新。玩你最新的mod玩得开心!

重要通知

请勿尝试将软件重新分发为您自己的软件。这会给你带来很多麻烦,合法与否。不值得窃取代码并声称它是您自己的代码。如果您打算发布更新版本,请确保您归功于该mod的原始作者。