骨骼字段语义命名(实测证据)+ 逐类反编译避免大小写撞名

- anchors.tsv:按用户实测把这批字段钉死 ——
  Z/V=x/y、F=rotation、Code/SourceFile=scaleX/scaleY、StackMapTable/LineNumberTable=shearX/shearY
  (证据:编辑器里 Rotate=341.456 / Translate(-168,-116) / Scale(0.8799,0.572) / Shear(-52.221,-28.63)
   与 Inspector 显示值一一对应);D/B/L/I/S/C = 静止姿态组(推断);D:LGP;=skeleton、D:LGp;=parent、B:Color=color。
- names.tsv 合并后 208 条,Renamer 改名 2867 处成员引用。
- src-named 改为**每个类单独反编译、用载荷类名当文件名**:CFR 直接输出会把 GP.java/Gp.java
  这类只差大小写的类写到同一个文件(macOS 文件系统不区分大小写),必须逐类产出。
- 注:CFR 对同名成员的自动改名(var_xxx 风格)不要开(--renamedupmembers),否则会盖掉我们的语义名。
This commit is contained in:
tianmo committed 2026-10-16 15:35:33 +08:00
1 parent d9ea449b64
commit 9a6913e610
3 files changed
+61 -1

No files matched your search

+22
View File
@@ -27,3 +27,25 @@ KP B (I)V setSelectedIndex
# ---- 场景模型:Gp = 骨骼;依据 gp_2.java 的 toString()/D(String,boolean)V ----
Gp D Ljava/lang/String; name
Gp D (Ljava/lang/String;Z)V setName
# ---- 场景模型:Gp = 骨骼的变换字段 ----
# 证据:用户在编辑器里把 root 转到 341.456 / 平移(-168,-116) / 缩放(0.8799,0.572) / 斜切(-52.221,-28.63),
# 面板 Inspector 同步显示 Z=-168.00009 V=-116.0 F=33.676704 Code=0.8799178 SourceFile=0.5720396
# StackMapTable=-52.220505 LineNumberTable=-28.629883 —— 一一对应,故确定语义。
Gp Z F x
Gp V F y
Gp F F rotation
Gp Code F scaleX
Gp SourceFile F scaleY
Gp StackMapTable F shearX
Gp LineNumberTable F shearY
# 静止姿态(rest pose)那一组:值与默认姿态吻合(0,0,0,1,1,0),且未改动时与上面那组相等 —— 推断,留注释待复核
Gp D F setupX
Gp B F setupY
Gp L F setupRotation
Gp I F setupScaleX
Gp S F setupScaleY
Gp C F setupShear
# 引用类字段:skeleton 由 hd.D(set, bone.D)+GP.D(LGp;) 的用法确定;parent 由创建骨骼时 bone.D=parent 确定
Gp D LGP; skeleton
Gp D LGp; parent
Gp B Lcom/badlogic/gdx/graphics/Color; color
1 # 名字映射锚点(只放**已确定**的;每条都要能说清依据,依据写进 混淆名对照表.md)
27 # ---- 场景模型:Gp = 骨骼;依据 gp_2.java 的 toString()/D(String,boolean)V ----
28 Gp
29 Gp
30 # ---- 场景模型:Gp = 骨骼的变换字段 ----
31 # 证据:用户在编辑器里把 root 转到 341.456 / 平移(-168,-116) / 缩放(0.8799,0.572) / 斜切(-52.221,-28.63),
32 # 面板 Inspector 同步显示 Z=-168.00009 V=-116.0 F=33.676704 Code=0.8799178 SourceFile=0.5720396
33 # StackMapTable=-52.220505 LineNumberTable=-28.629883 —— 一一对应,故确定语义。
34 Gp
35 Gp
36 Gp
37 Gp
38 Gp
39 Gp
40 Gp
41 # 静止姿态(rest pose)那一组:值与默认姿态吻合(0,0,0,1,1,0),且未改动时与上面那组相等 —— 推断,留注释待复核
42 Gp
43 Gp
44 Gp
45 Gp
46 Gp
47 Gp
48 # 引用类字段:skeleton 由 hd.D(set, bone.D)+GP.D(LGp;) 的用法确定;parent 由创建骨骼时 bone.D=parent 确定
49 Gp
50 Gp
51 Gp
+17 -1
View File
@@ -1,7 +1,23 @@
# 合并后的名字映射表:先由 MapMethods 指纹自动生成,再用手动锚点覆盖
# 合并后的名字映射表:MapMethods(gdx-1.11.0) 指纹自动生成 + 手动锚点覆盖
# owner name desc newName
Gp B F setupY
Gp B Lcom/badlogic/gdx/graphics/Color; color
Gp C F setupShear
Gp Code F scaleX
Gp D (Ljava/lang/String;Z)V setName
Gp D F setupX
Gp D LGP; skeleton
Gp D LGp; parent
Gp D Ljava/lang/String; name
Gp F F rotation
Gp I F setupScaleX
Gp L F setupRotation
Gp LineNumberTable F shearY
Gp S F setupScaleY
Gp SourceFile F scaleY
Gp StackMapTable F shearX
Gp V F y
Gp Z F x
KP B ()Ljava/lang/String; getSelected
KP B (I)V setSelectedIndex
KP B (Ljava/lang/String;)V setSelected
1 # 合并后的名字映射表:先由 MapMethods 指纹自动生成,再用手动锚点覆盖 # 合并后的名字映射表:MapMethods(gdx-1.11.0) 指纹自动生成 + 手动锚点覆盖
2 # owner # owner
3 Gp
4 Gp
5 Gp
6 Gp
7 Gp Gp
8 Gp
9 Gp
10 Gp
11 Gp Gp
12 Gp
13 Gp
14 Gp
15 Gp
16 Gp
17 Gp
18 Gp
19 Gp
20 Gp
21 KP KP
22 KP KP
23 KP KP
@@ -36,6 +36,7 @@ public final class ObjectPanel {
ClassLoader loader;
Object skin;
Object listTable;
Object listScroll;
Object status;
Object nameField;
List<Object> objects = new ArrayList<Object>();
@@ -61,6 +62,7 @@ public final class ObjectPanel {
Object rows = tableClass.getConstructor().newInstance();
state.listTable = tableClass.getConstructor().newInstance();
Object scroll = scrollClass.getConstructor(actorClass, skinClass).newInstance(state.listTable, skin);
state.listScroll = scroll;
state.status = label(loader, skin, "Press Refresh to list scene objects.");
state.nameField = fieldClass.getConstructor(String.class, skinClass)
.newInstance("particle_bone", skin);
@@ -217,6 +219,7 @@ public final class ObjectPanel {
setStatus(state, "List build failed: " + error);
return;
}
invalidateList(state);
setStatus(state, objects.size() + " scene objects"
+ (state.target == null ? "" : "; target = " + SceneObjects.kind(state.target)
+ " " + SceneObjects.nameOf(state.target)));
@@ -331,6 +334,24 @@ public final class ObjectPanel {
return simple;
}
/**
* 列表内容变了以后,必须让 `Table` 与 `ScrollPane` 重新算一遍尺寸 ——
* 否则 ScrollPane 里缓存的高度还是旧的,表现为"内容多了却不能滚"。
* `b_()V` = `invalidate()`(来源:MapMethods 对 gdx-1.11.0 的指纹比对)。
*/
private static void invalidateList(final State state) {
try {
call(state.listTable, "b_", new Class<?>[0], void.class);
} catch (Throwable ignored) {
// 名字对不上就算了
}
try {
call(state.listScroll, "b_", new Class<?>[0], void.class);
} catch (Throwable ignored) {
// 同上
}
}
/** 用纯文本行填列表区(行不可点)。 */
private static void fillTextRows(final State state, List<String> lines) {
try {
@@ -344,6 +365,7 @@ public final class ObjectPanel {
layoutCell(cell, Obf.CELL_LEFT);
call(state.listTable, Obf.TABLE_ROW, new Class<?>[0], cellClass);
}
invalidateList(state);
} catch (Throwable error) {
System.err.println("[panel] inspector 填充失败: " + error);
}