Mixin提供了一些用于调试的系统参数或者注解属性
Wiki: Mixin Java System Properties
文档: MixinEnvironment.Option
mixin.debug
: 启用所有调试选项mixin.debug.export
: 导出所有合并后的类文件至.mixin.out
文件夹内,如果在类路径中存在Fernflower
反编译器,还会输出反编译后的文件mixin.debug.export.filter
: 一个用于指定要导出哪些类的过滤器,如果需要反编译,这个属性非常有用,因为反编译所有类需要消耗较长时间,支持以下模糊匹配规则:*
: 匹配一个或多个字符,除了点(.
)**
: 匹配任意数量的字符?
: 匹配单个任意字符
mixin.debug.export.decompile
: 启用反编译,仅当类路径中存在Fernflower
反编译器时有效mixin.debug.export.decompile.async
: 启用独立的线程反编译,通常会大大缩短反编译导致的启动游戏的时间。如果启动中游戏崩溃,则可能会输出未反编译的类mixin.debug.export.decompile.mergeGenericSignatures
: 如果启用反编译器,那么会合并注入类中的泛型签名,有时候会让某些进行泛型验证的子系统出现问题,启用此属性禁用泛型合并mixin.debug.verify
: 检查Mixin是否正确注入,仅当调试Mixin库本身的时候才建议启用,用于调试使用Mixin的模组则不建议启用mixin.debug.verbose
: 将DEBUG
级别的日志消息降低为INFO
级别,这样就能在运行时在控制台中显示更多信息mixin.debug.countInjections
: 参见@Inject.expect
属性文档mixin.debug.strict
: 启用严格的检查mixin.debug.strict.unique
: 如果启用,则@Unique
方法在遇到相同方法签名的方法时会直接抛出异常终止游戏,而不是默认的仅在控制台打印警告mixin.debug.strict.targets
: 启用对注入目标严格的检查mixin.debug.profiler
: 启用性能分析mixin.dumpTargetOnFailure
: 通常在Mixin使用时出现异常后会打印一些消息,有时候这些消息并不准确,通常是其他CoreMod对相关的目标进行了更改,启用此属性允许输出应用Mixin前的类文件到.mixin.out
文件夹内,以确定出现异常的原因mixin.checks
: 启用所有检查选项mixin.checks.interfaces
: 检查使用@Inplements
实现的接口,启用此属性,会在控制台输出一个报告,指示了哪些方法未实现,调用这些方法时,会抛出AbstractMethodError
错误。报告会生成在.mixin.out
文件夹下mixin.checks.interfaces.strict
: 当启用了mixin.checks.interfaces
,但未启用此属性,Mixin会跳过对目标类是抽象类的检查,如果启用了此属性,抽象类也将被检查mixin.ignoreConstraints
: 启用此属性,会对注入注解中的constraints
属性的检查出现异常后的抛出错误降级为仅在控制台输出一个警告mixin.hotSwap
: 启用热加载(?),如果用-javaagent
参数加载Mixin的jar包,则会自动启用此属性mixin.env
: 意义不明,Mixin并未使用过此属性,可能是仅为了设计模式而存在mixin.env.obf
: 启用强制使用mcp namemixin.env.disableRefMap
: 启用此属性会禁用映射表mixin.env.remapRefMap
: 启用此属性需要手动指定映射表mixin.env.refMapRemappingFile
: 手动指定一个映射到searge name的映射表,仅当mixin.env.remapRefMap
启用时有效mixin.env.refMapRemappingEnv
: 如果mixin.env.refMapRemappingFile
指定的映射表不是映射到searge name的,需要设置此属性指定映射表指向notch name还是mcp namemixin.env.allowPermissiveMatch
: 此属性默认启用,效果是当启用了mixin.env.remapRefMap
属性时,只匹配目标的名称,不匹配目标的类型/参数类型,将此属性设置为false
则禁用此行为mixin.env.ignoreRequired
: 启用此属性则忽略所有注解的require
属性设置mixin.env.compatLevel
: 设置兼容的Java最低版本,仅有JAVA_6
、JAVA_7
、JAVA_8
、JAVA_9
四种选择mixin.env.shiftByViolation
: 当@At.shift
属性设置得超出最大允许的值时,目前会抛一个警告,高版本Mixin可能会抛出错误,允许以下取值:ignore
: Mixin 0.7以前版本的默认值,忽略警告warn
: 当前的默认值,打印一个警告error
: 直接抛出一个错误
mixin.initialiserInjectionMode
: 设置初始化注入时的行为,默认为default
,可以改为safe
-
@Debug
(文档)
标记在注入类或者注入方法上export
: 仅当此注解标记在注入类上有效。当mixin.debug.export
未设置时,允许输出单个反编译后的合并类,但是当mixin.debug.export
设置为false
时,需要设置mixin.debug.export.decompile
为true
才能正常输出。这个属性在当你不想输出所有合并类,只想输出单个合并类时非常有用print
: 在控制台打印合并后的方法的字节码,仅当mixin.debug.verbose
设置为true
时才有效
-
每个注入注解下的
expect
: 功能和require
属性一致,不过仅当mixin.debug.countInjections
属性设置为true
时才有效,而且这个属性默认值是1,而不是require
的-1