属性

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 实现或者某个插件有可能破坏 CauseStackManagerStackFrame 时(不论是弹栈顺序错乱还是尝试弹出已经弹出的 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 也有可能大幅增加性能开销,因为启用此选项后会在所有 EntityTileEntityBlock 的每一次刷新(tick)时创建一个新异常(以获取栈帧)。