如何解编译MinecraftMod?
请介绍一下自己
大家好!我是LiT!的马鲁,我在露营上已经有大约2年的经验了。
关于我历次参加的课程中,我最热衷于的话题是关于《我的世界》。
解凍!
大家好,你们有没有这样的经历呢?
“想参考那个mod,但源代码没有公开……”
那么,现在提出一个问题。应该如何解决呢?
答案是…
这是进行反编译的操作!
你要怎么做?
-
- 下载jd_gui
-
- 反编译mod
- 修复func_和field_相关的错误
我会详细解释下去。
1. 下载 jd_gui
2. 模块的反编译
现在已经完成了反编译本身,但是这样还不能使用,因此我们需要进行一些调整。
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系列,解決編譯完成的問題!(在不違反授權的範圍內)我們可以透過任何方式如煮熟或烤來提升技能!