如何解编译MinecraftMod?

请介绍一下自己

大家好!我是LiT!的马鲁,我在露营上已经有大约2年的经验了。
关于我历次参加的课程中,我最热衷于的话题是关于《我的世界》。

解凍!

大家好,你们有没有这样的经历呢?
“想参考那个mod,但源代码没有公开……”
那么,现在提出一个问题。应该如何解决呢?

答案是…

这是进行反编译的操作!

你要怎么做?

    1. 下载jd_gui

 

    1. 反编译mod

 

    修复func_和field_相关的错误

我会详细解释下去。

1. 下载 jd_gui

1.png

2. 模块的反编译

2.png
3.png
c0ccb904-0108-ea63-4058-1dc444e0655b.png

现在已经完成了反编译本身,但是这样还不能使用,因此我们需要进行一些调整。

3. 修复func_和field_相关的错误

请先看一下这个。

package maru.seititools;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;

public class seiti extends net.minecraft.item.Item {

  private boolean isair;

  public seiti()
  {
    func_77637_a(net.minecraft.creativetab.CreativeTabs.field_78040_i);
    func_77655_b("seititools_seiti");
    func_111206_d("seititools:seiti");
  }

  public boolean func_77648_a(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int meta, float wx, float wy, float wz)
  {
    this.isair = true;
    for (int i = -5; i <= 5; i++) {
      for (int j = 1; j <= 10; j++) {
        for (int k = -5; k <= 5; k++) {
          net.minecraft.block.Block block = world.func_147439_a(x + i, y + j, z + k);
          if ((block != Blocks.field_150357_h) && (block != Blocks.field_150378_br)) {
            world.func_147480_a(x + i, y + j, z + k, true);
          }
          if (block != Blocks.field_150350_a) {
            this.isair = false;
          }
        }
      }
    }
    if (this.isair) {
      return true;
    }
    stack.field_77994_a -= 1;
    return true;
  }
}

你也遇到类似func_77637_a这样看不懂的东西了吧?
这是因为在编程中使用的函数和Minecraft使用的函数有不同的名称,所以在编译时需要进行修复(大概是这样)。
所以让我们来修复一下吧。

如果你搜索“minecraft Mod Corder Pack”,我想你可以找到MCP的下载页面。从那里下载对应版本的MCP,并找到fields.csv和methods.csv等文件。这些文件包含了func、field系列和原始变量名和函数名之间的对照表。


此外,

MCP Mapping Viewer 在混淆后的名称方面非常方便。

收到了这个评论,但是由于不太理解如何使用,所以选择了放弃。非常抱歉。(我确实技术不够熟练)
如果你对此有兴趣,请随意尝试使用。

任务已经执行完毕!

只要修正func和field系列,解決編譯完成的問題!(在不違反授權的範圍內)我們可以透過任何方式如煮熟或烤來提升技能!

广告
将在 10 秒后关闭
bannerAds