什么是最有效的方法来删除混淆的名称(Minecraft)?

我为 Minecraft 制作了一个 Lua 模组。一切正常工作,但在 MC 中通常方法的名称会被混淆。如何最好地使普通函数名称重定向到混淆的名称?

例如,用户为右键单击时打印 hello world 的方块编写一个脚本:

function onActivated(world, x, y, z, player)
player:addChatMessage("hello world")
end

addChatMessage 应调用 Java 方法 EntityPlayer.func_71035_c(String text)。

点赞
用户1847592
用户1847592

-- 翻译文件(translation.txt) func_70912_b,setTameSkin,2, func_70913_u,getTameSkin,2, func_70915_j,getShadingWhileShaking,2,在狼颤抖时计算要应用的遮蔽量时使用。 func_70916_h,setAngry,2,设置此狼是否生气。

-- 模糊程序(script.lua) x:func_70913_u(y,z) x:func_70915_j(y,z)

-- 预处理器(preprocessor.lua) local transl = {} for line in io.lines'translation.txt' do local obf,orig = line:match'^(.-),(.-),' transl[obf] = orig end local script = assert(io.open('script.lua','rb' )):read'*a' local output = assert(io.open('script2.lua','wb')) output:write((script:gsub('[%w_]+', transl))) output:close()

-- 预处理器输出(script2.lua) x:getTameSkin(y,z) x:getShadingWhileShaking(y,z)

-- 编辑器:

local obfuscations = {} for line in io.lines'translation.txt' do local obf, orig = line:match'^(.-),(.-),' obfuscations[orig] = obf end

local function get_obf_key_value(t, k, __index) local value = __index and __index(t, k) if value == nil and obfuscations[k] then value = t[obfuscations[k]] end return value end

local cache = {get_obf_key_value = true}

local function __index_constructor(__index) if not __index then return get_obf_key_value end local old__index = cache[__index] if old__index then return old__index == true and __index or old__index else local function new__index(t, k) return get_obf_key_value(t, k, __index) end cache[__index] = new__index cache[new__index] = true return new__index end end

local obf_mt = {__index = get_obf_key_value}

local function correct_metatable(object) local mt = getmetatable(object) if mt == nil then setmetatable(object, obf_mt) else local __index = mt.__index if __index == nil or type(__index) == 'function' then mt.__index = __index_constructor(__index) else correct_metatable(__index) end end end

-- 你应该至少为每个类调用correct_metatable(class_or_object_of_that_class)一次 correct_metatable(wolf) correct_metatable(goat) correct_metatable(cabbage) ...

2013-03-20 15:58:13