worldbox-observer-mod/.tmp-reflect/DumpPlot.cs
2026-07-17 01:54:59 -05:00

42 lines
1.5 KiB
C#

using System;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Reflection.Metadata;
using System.Reflection.PortableExecutable;
string path = "/home/dazed/.local/share/Steam/steamapps/common/worldbox/worldbox_Data/Managed/Assembly-CSharp.dll";
using var fs = File.OpenRead(path);
using var pe = new PEReader(fs);
var md = pe.GetMetadataReader();
foreach (var typeName in new[]{"Plot","PlotAsset","PlotManager","PlotState"}) {
Console.WriteLine("== "+typeName+" ==");
foreach (var th in md.TypeDefinitions) {
var t = md.GetTypeDefinition(th);
if (md.GetString(t.Name)!=typeName) continue;
Console.WriteLine(" [fields]");
foreach (var fh in t.GetFields()) {
var f = md.GetFieldDefinition(fh);
var n = md.GetString(f.Name);
if (n.StartsWith("<")) continue;
Console.WriteLine(" field "+n);
}
Console.WriteLine(" [methods]");
foreach (var mh in t.GetMethods()) {
var m = md.GetMethodDefinition(mh);
var n = md.GetString(m.Name);
if (n is ".ctor" or ".cctor") continue;
var attrs = m.Attributes;
bool pub = (attrs & MethodAttributes.Public) != 0;
if (!pub && !n.StartsWith("get_") && !n.StartsWith("set_")) continue;
Console.WriteLine(" method "+n+" pub="+pub);
}
Console.WriteLine(" [props via get_]");
foreach (var mh in t.GetMethods()) {
var m = md.GetMethodDefinition(mh);
var n = md.GetString(m.Name);
if (n.StartsWith("get_")) Console.WriteLine(" "+n.Substring(4));
}
}
}