使用 Spigot 复制大区域

Copy large regions with Spigot

我目前正在开发一个训练插件,每个玩家都会有自己的区域,例如学习桥牌。所以当一个玩家加入时,插件应该自动为这个玩家生成一个新的区域,并在他离开时删除它。

我创建了一个 SetupCommand,您必须在其中设置应复制的区域的开始和结束。

现在唯一要做的就是复制该区域并将玩家传送到该区域,但是,我找不到任何好的方法来做到这一点。到目前为止,我找到的唯一解决方案是循环遍历所有块并将它们一一复制。但我可以想象这不是最好的解决方案,会导致延迟,不仅是服务器端,还有客户端。

有没有比这更好的克隆区域的方法? 我读过你应该使用 Schematics,但他们没有详细说明。

使用 FAWE 或 WorldEdit 到 copy/paste 个部分

如果你使用Block#setType,性能会很慢,所以如果你不想使用API,你应该使用NMS,但是使用NMS不是一个好的做法。

网管的缺点: 大多数 nms 方法都被混淆了。在一个版本中,该方法称为 f(),在下一个版本中可能是 c()。

如何使用 FAWE copy/paste: https://www.spigotmc.org/threads/how-to-paste-a-schematic-with-fawe.402950/

如何 copy/paste 使用 worldedit: https://www.spigotmc.org/threads/worldedit-api-schematic-copy-save-load-and-paste.498476/

综上所述,建议使用API

如果您对 java 有经验并且对自己的技能感到满意,您可以尝试将列表中的块作为 List 并将其保存为 base64 到您的数据库或其他。您可以每次将其解析回块列表并替换它。我宁愿建议您使用工具 Serializeable 制作自定义块 class,然后向其添加一些值,例如 LocationMaterialBlockData