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

- 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

@@ -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);
}