Java 将下载的minecraft mod更新为1.8

Java 将下载的minecraft mod更新为1.8,java,eclipse,minecraft,minecraft-forge,Java,Eclipse,Minecraft,Minecraft Forge,我已经下载了一个forge mod(ArrowMarker 1.7.10版本),我想对其进行更新,使其在1.8 forge Minecraft上工作。我尝试的是: 首先,我建立了一个基本的1.8锻造模式,它可以完全工作。 然后我尝试了多个反编译器来反编译.jar归档文件,但是当我粘贴这些文件的代码时,我总是会遇到很多错误。(例如,函数不存在)。如何将此mod更新为1.8? 奇怪的反编译示例:(它在func_151468_f或mc.field上出错) 我知道这篇文章很老,但它有助于给出一个清晰简

我已经下载了一个forge mod(ArrowMarker 1.7.10版本),我想对其进行更新,使其在1.8 forge Minecraft上工作。我尝试的是: 首先,我建立了一个基本的1.8锻造模式,它可以完全工作。 然后我尝试了多个反编译器来反编译.jar归档文件,但是当我粘贴这些文件的代码时,我总是会遇到很多错误。(例如,函数不存在)。如何将此mod更新为1.8?

奇怪的反编译示例:(它在func_151468_f或mc.field上出错)


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

问询处 您看到的是模糊的方法/字段名称(称为searge名称)。这是由于代码保护系统称为。它阻止人们复制您的代码,并因此而获得荣誉。通常情况下,这不会带来太多问题,因为它只会创建难以辨认但可以正常工作的代码

问题 然而,Minecraft Forge的运作方式有点不同。由于它对整个minecraft客户端进行反编译和重新格式化,因此它可以访问模糊的方法/字段无法找到的非常特定的名称。这会导致JavaIDE抛出错误,主要是未实现的错误,其中找不到指定的方法/字段。还需要注意的是,“方法”总是以func开头,这意味着函数。类似地,字段将以字段开头,参数将以p开头

解决方案 因为你说这个mod是用1.7.10编写的,所以它使用了1.7.10模糊处理,这意味着你应该下载。此文件包含三个csv文件:命名方法、字段和参数。您关心的是方法和字段。在文本编辑器或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目录中。多个错误将弹出,您最好的机会是查看它们,并尝试找出发生了什么错误。forge是完美的,因为那里的用户在模糊处理和现有的新方法/领域方面拥有丰富的知识。另一种方法是交叉引用1.7.10模糊处理和1.8模糊处理(可以找到其csv文件)。这意味着您使用模糊化的方法/字段,并在1.8 csv文件中搜索它。这种方法通常效果不太好,但在某些情况下确实有效

结论 总而言之(或tl;dr)

  • 从下载模糊名称引用列表
  • 查找模糊名称引用,并查找正式记录的名称(是模糊名称中的第二个值,即func_123456_a,methodName,0,description)
  • 编译并运行1.7.10,然后将粘贴复制到1.8目录中,通过从1.7.10->1.8交叉引用来解决错误
  • 国防部应该正确更新。玩你更新的mod玩得开心
重要通知
不要试图将软件重新分发为您自己的。这会给你带来很多麻烦,不管合法与否。窃取代码并声称它是您自己的代码是不值得的。如果您计划发布更新版本,请确保您相信该mod的原始作者。

您看到的是SRG名称。您希望将它们转换为普通名称。获取fields.csv和methods.csv的副本,您将能够将字段和func名称转换为专有名称。我认为MCP有一个自动交换这些名称的程序,但我不知道如何。反编译器通常很难为任何非平凡的库/程序创建可重新编译的代码。我建议您尝试获取原始来源,例如联系开发人员。错误具体是什么?你能说得更具体些吗!只要说出控制台为
func_151468_f()
字段_71474_y
sthanks-Pokechu22输出的内容就可以了,尽管有些seam不推荐使用,因为它们在excel文件中不存在。有没有办法快速替换它们,因为其中一个文件有800多行代码。非常感谢您提供的信息丰富的答案!即使我放弃了mod(以及minecraft的整体编码),对stackoverflow有一个清晰的答案仍然很好。我不打算重新发布这个mod,我只是试着更新它以供个人使用。
@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;
    }
}