属性¶
Sponge 使用若干系统属性以协助调试及其他任务。你可以通过命令行来指定这些属性的具体值,而这些属性能提供的日志会在你提交 issue ticket 的时候派上用场。
使用方法¶
你需要在启动服务器的命令中用 -Dkey=value
这样的语法来指定命令行参数,就像这样:java -Dsponge.shouldFireAll=true -Dsponge.filter.debug=true -jar forge.jar
。
注解
上述示例本身就是启动服务器的命令。你的服务器启动命令也许会有其他选项在里面。
可用属性¶
属性名 | 说明 |
---|---|
sponge.shouldFireAll (布尔值,默认为 false) |
设定为 true 时,Sponge 将会无视事件是否有对应的监听器,直接创建并发布事件(正常情况下,Sponge 不会发布那些没有人监听的事件,比如说如果没有人监听 ChangeBlockEvent ,这个事件及其子事件就不会发布)。 |
sponge.debugShouldFire (布尔值,默认为 false) |
在因事件监听器注册或取消注册而导致 ShouldFire 变化时,记录下这个变化(即从 false 变成 true 或从 true 变成 false)。 |
timings.bypassMax (任意值) |
允许超出 Aikar 的 Timing API 的 frame 数量上限。仅当 API 也被配置为允许超出此上限时该设定才会生效。 |
sponge.debugcauseframes (布尔值,默认为 false) |
在 Sponge 实现或者某个插件有可能破坏 CauseStackManager 的 StackFrame 时(不论是弹栈顺序错乱还是尝试弹出已经弹出的 frame),向此时每一个 StackFrame 加入栈帧。对调试 frame 的产生时间有帮助。 |
sponge.debugProxyChanges (布尔值,默认为 false) |
和 StackFrame 产生栈帧类似,该选项用于在每一个被捕获的方块更新、邻近方块更新和 TileEntity 更新产生的 BlockTransaction 中追加栈帧。在追寻方块更新的来源时能派上用场,若在处理该 transaction 时有新异常抛出则相当于提供更多信息。在反馈和 BlockTransaction 有关的 issue 时应当提供启用此选项后产生的日志。 |
sponge.filter.debug (布尔值,默认为 false) |
将 filter generator 产生的所有类全部输出至 .sponge.debug.out 目录下,并以被修改的类的名字命名。 |
sponge.print_all_catalog_types (布尔值,默认为 false) |
在启动结束后打印全部 CatalogType 和它们名下的字符串 ID,在查询原版、Mod 和插件创建的 CatalogType 下的某个 ID 时会派上用场。 |
sponge.debugBlockTransactions (布尔值,默认为 false) |
对于所有被捕获的方块,打印非常冗长的调试信息,包括哪一个 BlockState 被桥接(proxied)了,在处理当前 Chunk 时有哪些 BlockState 存在,以及在下一个 transcation 变化之前有哪些 BlockState 存在,对于所有被追踪的 TileEntity 同样适用。对于调试涉及到 ChangeBlockEvent 以及它的处理的 Sponge 实现以及插件有帮助。 |
警告
sponge.debugcauseframes 有可能会增加性能开销,因为整个游戏生命周期中的每一 frame 都会产生新的栈帧。
sponge.debugProxyChanges 也有可能大幅增加性能开销,因为启用此选项后会在所有 Entity
、TileEntity
和 Block
的每一次刷新(tick)时创建一个新异常(以获取栈帧)。