[2021.8.16][Wiki] Prism-Bukkit 维基 —— Prism 回档插件官方维基翻译 [永更] - Minecraft(我的世界)中文论坛 - Powered by Discuz!.html
Minecraft(我的世界)中文论坛
标题: [2021.8.16][Wiki] Prism-Bukkit 维基 —— Prism 回档插件官方维基翻译 [永更] [打印本页]作者: Rothes 时间: 2021-8-16 15:55
标题: [2021.8.16][Wiki] Prism-Bukkit 维基 —— Prism 回档插件官方维基翻译 [永更]
本帖最后由 贺兰兰 于 2021-8-25 12:00 编辑
欢迎来到 Prism-Bukkit 维基!
原文地址: Prism-Bukkit
译文地址: Prism-Bukkit
如果您有条件的话, 建议使用以上的地址. 排版以及分页更良好, 更易于阅读. 上面两个地址是会同步更新的.
插件下载地址: https://www.mcbbs.net/thread-1230654-1-1.html
请点击上方的目录, 开始阅读.
欢迎使用 Prism
Prism (棱镜) 是一款强大的、高效的服务器防熊管理插件,有着回滚、还原等多个功能。 它速度惊人,用途广泛,易于使用。 让熊孩不再破坏游戏的乐趣!
支持
- 对于英文版: Prism 支持在 M.O.S.S. Discord 服务器 上提供. 请不要在 SpigotMC 评论区反馈任何问题或 BUG.
- 对于英文版: 我们欢迎代码修改! 您可以在我们的 AddstarMC Prism GitHub 项目 上提交PR.
- 对于中文版: 请在 MCBBS 帖子 上询问问题.
- 对于中文版: 请在 中文版 GitHub 项目 上提交反馈或PR.
本地化
Prism 现在支持语言本地化 - 您可以在 GitHub 上为 Prism 添加语言.
请记住: 如果您需要帮助, 欢迎向我们寻求支持.
如何安装
- 将 Prism.jar 文件放入您的 Bukkit /plugins 目录中.
- 启动您的服务器, 一个初始配置文件会生成在插件目录 /plugins/Prism 中.
- 最重要的一点, 您必须配置数据库连接.
- 如果您需要架设 MySQL 或 sqlite (无需安装的数据库) 的帮助, 请看下面.
获取 MySQL
请确保您已经安装 MySQL. 大多数的人应该都已经安装了, 也许有一些人还没有接触过 MySQL. MySQL 是一个可以安装于计算机(适用于Windows, Mac 和 Linux)的软件, 可以为 Prism 以及许多其它插件提供数据库服务. 它存储数据非常迅速和高效. 下面是安装 MySQL 的一些教程.
- Mysql - https://dev.mysql.com/doc/mysql-installation-excerpt/5.7/en/ 参阅进阶配置中的 Mysql
- Mariadb - https://mariadb.com/kb/en/getting-installing-and-upgrading-mariadb/ 参阅进阶配置中的 MariaDB
- Percona - https://www.percona.com/doc/percona-server/5.7/installation.html 参阅进阶配置中的 Mysql
第一步
确保 database.mode 配置为 “mysql”. 您需要主机地址, 用户名, 密码和数据库名称来连接到 MySQL.
第二步
输入您的数据库主机名 (MySQL 服务器的地址, 一般为 127.0.0.1 或者 localhost. 输入数据库服务器的用户名和密码, 默认为 root 和空密码.
如果您是自己架设的 MySQL 服务器, 您应该会知道上面的这些信息如何填写. 如果您使用的是别人架设的 MySQL (如共享主机服务), 请让他们提供给您这些信息.小技巧请根据您的数据库类型来参阅相关的配置部分:
一些建议
如果您担心磁盘空间不足, 或者服务器人数极高, 我们建议关闭 water-flow 和 lava-flow 追踪. 这些事件的发生频率十分高, 而且 Bukkit 会在每一个方块坐标上多次调用这些事件. 它们会很快地灌满您的数据库. 一个相对容易的替代实现方式是使用 /prism 排水(drain) 指令. 但, 即使您关闭了流动事件的追踪, Prism 仍会追踪 lava/water-break 事件, 所以您仍然可以回滚被液体破坏的物品.
行为追踪
下面的列表中的行为可以通过配置文件设定追踪或忽略. 要确保一个行为是会被追踪的, 请在您的配置文件中添加特定选项. 任何不存在于列表之中的行为都会被设为 false.
例如
- prism:
- tracking:
- item-remove: true
可追踪行为列表
参阅指令中的 行为列表
报告
/prism (rp|report) sum (blocks|actions) (玩家)
/prism 报告 总计 (方块|行为) (玩家)
Prism 可以针对单个玩家的方块和行为数据提供一组有限的报告.
方块概要报告将列出玩家放置/破坏方块行为的总计数, 并以方块类型分类.
行为概要报告将列出玩家每一行为类型的总计数.
挖矿警告
此功能将在玩家发现了一个自然的(非放置的)矿脉时, 向您发送警告消息. 它会报告出矿石类型和光照强度 (但请注意光照强度并不能在所有情况下都表示玩家使用了矿透). 警告消息会通过矿石类型来添加颜色, 以易于辨认.
这对辨认矿透玩家极其有效, 十分容易识别出挖矿轨迹清晰的玩家.
物品使用警告
此功能将在玩家使用了一些和熊服有关的物品时, 向您发送警告消息. 例如点燃火焰, 放置TNT, 放置活塞, 等等. 这完全可以在配置文件中配置.
如果需要的话, 您也可以在配置文件中配置破坏方块警告列表.
活塞卡透视警告
在原版中存在着一个漏洞(特性), 利用活塞可以使玩家透过方块去看别的东西. Prism 会在玩家可能使用了该特性后, 向您发送警告信息.
灭火与排水
参阅指令中的 灭火 以及 排水.
当执行一次行为为 block-burn 的回滚操作时, Prism 会自动执行一次灭火操作.
区块边界视图
/prism view chunk
/prism 视图 区块
使用此指令会向您在区块边界显示出一个萤石边框. 重复输入一次指令即可关闭.
删除
/prism delete [时长]
/prism 删除 [时长]
服务器管理员可使用此指令来手动清理数据库中的数据记录. 一般来说这不是必须的操作, 因为 Prism 每隔12小时后悔自动执行一次数据清理任务. 参阅 数据清理 .
进阶配置
这里需要一些技术能力. 如果您不清楚这些建议是干什么的, 请跳过.
连接池耗竭
不断看到连接池耗竭的错误信息?小技巧这通常不是 Prism 导致的, 而是与数据库通信的速率不够快导致的. 有很多的办法可以解决这个问题. 如果您正在使用远程 MySQL 服务器, 通常会有些缓慢, 因为每次查询服务器都需要通过因特网来通信, 另外如果是共享 MySQL 托管, 通常性能不是很好.
一些建议:
- 降低连接池等待时间 (pool wait times).
- 增加连接池连接限制数 (pool connection limit), 如果您的远程 MySQL 提供者调整了合适的限制数的话.
- 增加批次发送行为数 (actions per batch), 来让 MySQL 查询在大型变化发生时发送更多的数据, 代价是稍微提高内存占用.
进阶数据库配置
Prism 使用 Hikari 数据库连接池 - 请参阅 Hikari 来配置设定 - 可以在 Hikari.properties 内修改配置.
让事件记录更快
我们的事件数据记录速度默认值设置为适合中型服务器使用的设定. 如果您想让服务器运行得更好, 可以调整 Prism 配置来让事件记录更快.
- actions-per-insert-batch - 决定每次批次插入发送多少个行为. 此功能的唯一限制就是运行内存 (RAM) 和您 MySQL 服务器的 max_allowed_packets 设置. 一般都可以将此数值增加到 5000, 或者更高. 每一次记录器运行的时候, 它会使用批次插入语句来清空队列, 并通过将其值从 1000 改为 5000, 来显著地提高清空队列的速度. 在默认设置下, 有着 11 万方块变化的世界需要 19 秒来保存, 但增加了这个值后只需要 5 秒.
- queue-empty-tick-delay - 决定了记录器每一次检查队列的游戏刻(tick)间隔. (20 tick = 1 秒) 降低此数值会提高队列保存的速度. 例如, 在默认设置下的 3 tick, 每秒有约 6 个队列清空操作.
自定义数据库连接
有时, 您可能想要一个完全可自定义的数据库连接. 只要您选择的数据库连接器支持大部分现代 MySQL 风格的 SQL 指令, 它就应该可以工作. 您可以使用 “Hikari” 来配置它. 您可以调整您的配置文件成如下所示
- datasource:
- type: hikari
- properties:
- prefix: prism_
- useNonStandardSql: true
您需要适当地调整 Hikari.properties 文件, 并提供 JDBC 连接器环境变量. 请参阅 HikariCP 项目 来获取例子. 数据表前缀和是否使用非标准的SQL仍然在这里设置.
- #Prism Hikari 连接数据源配置文件.
- #Sat Jan 02 21:47:38 AEST 2021
- initializationFailTimeout=10
- validationTimeout=5000
- readOnly=false
- registerMbeans=false
- isolateInternalQueries=false
- maxLifetime=1800000
- leakDetectionThreshold=0
- minimumIdle=1
- allowPoolSuspension=false
- idleTimeout=600000
- jdbcUrl=jdbc\:mysql\://localhost\:3306/prism?useUnicode\=true&characterEncoding\=UTF-8&useSSL\=false
- maximumPoolSize=4
- autoCommit=true
- connectionTimeout=30000
- poolName=prism
- username=prism
- password=prism
这是一个 hikari 配置文件的示例 ….它仿造了 MySQL 连接.
MariaDB
MariaDB 并不完全兼容 MYSQL, 它不支持 MySQL 服务器的所有可用的功能. 因此我们只能使用函数的一个子集. Prism 可以支持此数据库, 设置 NonStandardSQL 参数为 false 即可. 但我们仍然会使用 MySQL 驱动, 因为它打包在大多数服务端之中. 或者您可以使用进阶的 Hikari 来配置. (参阅上面的 自定义数据库连接 配置)
- datasource:
- type: mysql
- properties:
- hostname: 127.0.0.1
- username: prism
- password: prism
- databaseName: prism
- prefix: prism_
- port: '3306'
- useNonStandardSql: false
Mysql
在 Ubuntu 上安装 - 实际上只需要运行 sudo apt-get install mysql-server 并按照提示来完成安装, 但是如果需要, 您也可以在这里找到全面的指南: 安装 MySQL.
您可能需要百度来寻找您的特定服务器类型.
在 Windows 上安装 (原作者:我重申, Windows 并不是适合运行 Minecraft 服务器的操作系统) , 但如果您需要的话, 可参考 在 Windows 上安装 MySQL
上面中文的链接都是我瞎找的, 如果懒的话您也可以使用PHPStudy来一键架设.
安装完毕后, 配置 Prism 非常容易. 只需要打开 MYSQL 命令行然后输入
- CREATE SCHEMA `prism`;
- CREATE USER `prism`@`localhost` identified by `prism`;
- GRANT ALL PRIVILEGES ON prism.* TO 'prism'@'localhost';
即可.
记住如果您的 MySQL 和 Minecraft 服务器并不运行在同一个机器, 您就需要调整 localhost 字符串为 MySQL 服务器主机名. 如果您不确定, 可以将其调为 %, 但是这并不安全.
MySQL 配置一般应该调整成这样:
- datasource:
- type: mysql
- properties:
- hostname: 127.0.0.1
- username: prism
- password: prism
- databaseName: prism
- prefix: prism_
- port: '3306'
- useNonStandardSql: true
您需要调整配置项 “hostname”(主机名), “username”(用户名) 和 “password”(密码), 让它们符合您的配置. 如果您使用的是 MySQL, 设置 “useNonStandardSql” 为 true. 如果是 MariaDb (参阅上面的 MariaDB) 请设置为 false. Percona 是 MYSQL 的一个分叉, 旨在完全兼容 MySQL 的前提下提供更高的性能.
Prism 权限列表:
- prism.help - 允许用户查看 Prism 帮助.
- prism.wand.* - 允许用户使用所有魔棒类型.
- prism.wand.inspect - 允许用户使用检查魔棒. 用户拥有 .lookup 时自动允许.
- prism.wand.profile - 允许用户使用简介魔棒. 用户拥有 .lookup 时自动允许.
- prism.wand.rollback - 允许用户使用回滚魔棒. 用户拥有 .rollback 时自动允许.
- prism.wand.restore - 允许用户使用还原魔棒. 用户拥有 .restore 时自动允许.
- prism.setmy.wand - 允许用户设置个人魔棒偏好(首选项), 需要在配置文件中开启此功能. 同时用户需要拥有使用魔棒的权限.
- prism.lookup - 允许用户使用 查询/检查/附近 指令. 建议给予有经验的玩家.
- prism.lookup.paginate - 允许用户翻页查询结果, 不包含 .lookup 权限.
- prism.parameters.* - 允许使用所有查询参数. 子节点为参数名称, 例如 radius(半径) 和 player(玩家).
- prism.parameters.action
- prism.parameters.before
- prism.parameters.block
- prism.parameters.entity
- prism.parameters.id
- prism.parameters.keyword
- prism.parameters.player
- prism.parameters.radius
- prism.parameters.since
- prism.parameters.world
- prism.parameters.flag.*
- prism.parameters.flag.drain
- prism.parameters.flag.drain-lava
- prism.parameters.flag.drain-water
- prism.parameters.flag.extended
- prism.parameters.flag.no-ext
- prism.parameters.flag.no-itemclear
- prism.parameters.flag.per-page
- prism.parameters.flag.no-group
- prism.parameters.flag.overwrite
- prism.parameters.flag.share
- prism.parameters.flag.paste
- prism.extinguish - 允许移除半径内的所有火焰. 建议予给有经验的玩家.
- prism.drain - 允许移除半径内的水和熔岩. 建议给予有经验的玩家.
- prism.preview - 允许用户在 回滚或还原 前预览变化. 建议给予城管.
- prism.rollback - 允许用户回滚变化. 建议给予有经验的城管.
- prism.restore - 允许用户还原 (重新应用) 变化. 建议给予有经验的城管.
- prism.tp - 允许用户传送到一个记录 ID. 建议给予有经验的玩家.
- prism.report - 允许用户查看报告. 建议给予城管.
- prism.reload - 允许用户重载配置文件. 建议给予服务器管理员.
- prism.delete - 允许用户通过指令删除数据库中的数据记录. 建议给予服务器管理员.
- prism.alerts - 使用户接收寻找到矿石的警告以及高危方块放置的警告.
- prism.alerts.ores.ignore - 拥有此权限的玩家不会触发寻找到矿石的警告.
- prism.alerts.use.place.ignore - 拥有此权限的玩家不会触发放置方块的警告.
- prism.alerts.use.break.ignore - 拥有此权限的玩家不会触发破坏方块的警告.
- prism.alerts.use.lighter.ignore - 拥有此权限的玩家不会触发点火的警告.
- prism.alerts.use.lavabucket.ignore - 拥有此权限的玩家不会触发倒出熔岩的警告.
- prism.alerts.ignore - 不会触发警告的父权限节点.
- prism.bypass-use-alerts - 忽略信任的玩家的 use 警告功能.
- prism.override-max-lookup-radius - 允许用户覆写最大查询半径. 默认不给予这个权限, 所以需要明确地设定给玩家.
- prism.override-max-applier-radius - 允许用户覆写最大应用半径. 默认不给予这个权限, 所以需要明确地设定给玩家.
- prism.ignore.tracking.(行为类型) - 为特定的权限组忽略行为类型.
- prism.view - 允许用户使用 视图 指令.
- prism.* - 给予用户所有的权限. 警告: 包含所有忽略追踪的权限节点.
查询
/prism lookup <参数> <标志>
/pr l <参数> <标志>
/pr 查询 <参数> <标志>
/pr near
/pr 附近
默认情况下, Prism 会查询您所有世界中的任何事件. 玩家导致的方块变化, 击杀实体, 放入拿出容器内的物品, 等等. 其中的一些事件纯粹是让您了解信息, 知道是什么玩家做了什么事, 这对判断如何执行回滚和还原操作很有用.
搜索数据库
上述指令的前三个用法可以让您查询您想要的信息. Prism 也提供了三种游戏内的工具让您来查询数据, 每一种都有不同的侧重点.
“查询”指令
/prism lookup <参数> <标志>
/pr l <参数> <标志>
/pr 查询 <参数> <标志>
当检查魔棒和”附近”指令不足以满足需求时, 您可以使用这个指令来从数据库中查询结果. 使用 /prism l (参数) 来查询想要的信息. 请参阅维基中的参数页. 通过配合多种参数同时使用, 您可以轻而易举地筛选记录, 找出需要的东西. 查询操作可以仅是在您的附近查询, 也可以是全局查询. 只需要限定参数即可. 通过添加参数可以限定行为, 玩家和半径等条件. 例如, a:item-pickup p:nasonfish r:10 为十格方块半径内玩家 nasonfish 拾起掉落物的事件; r:global p:YeaItsMe a:place b:chest 为玩家 YeaItsMe 在整个服务器内放置箱子的事件. 您几乎可以无限制地查询出指定的记录.
标准查询结果消息

检查魔棒
/prism wand inspect
/prism 魔棒 检查
/prism i
/prism 检查
执行该指令会切换检查魔棒的开关状态. 魔棒会将一些特定的动作绑定到您的空手/工具上. 检查魔棒可以通过指令 /prism i 或者全称 /prism wand i /prism 魔棒 检查 来切换. 左键单击一个方块可以查看点击的方块处的历史记录. 右键单击方块六侧中的任何一侧可以查看该方块邻边位置处的历史记录. 此功能非常适合于查询对于单个方块的信息记录, 例如箱子或矿石. 请参阅维基中的魔棒页来了解更多信息.
附近
/pr near
/pr 附近
此功能可以用来迅速简便地查询五个方块半径(可配置)内的所有行为. 它会显示所有的行为, 所以您可以马上想象出这个地方发生了什么事情. 此功能非常适合没有确定或明显可见信息的问题. 例如可以用它来查询附近是什么被熊了, 或者谁来过这附近等等.
页码(翻页)
/pr pg [<页码数> | prev | next]
/pr 页码 [<页码数> | 上 | 下]
大多数情况下, “查询”和”附近”操作都会返回大量的结果. 我们会把它们分页来让这些结果易于浏览. 在执行完毕任何一种查询操作后, 使用指令
/prism page [页码#] 可以跳转到不同的结果页码. 此指令只会使用您上次查询到的结果, 且会在查询的五分钟后过期. 同样您也可以使用
/pr page next 和 /pr page prev 来切换到上下页, 也可点击消息中的按钮.
传送
/pr tp <索引>
/pr tp prev | next
/pr tp 上 | 下
当您执行完一次查询操作时, 每个结果消息的前面都会写上一个数字, 那就是这个记录在本次查询中的索引. 如果使用全局或扩展参数进行查询, 您可以看到这个记录的 ID. 使用指令 /prism tp [索引#] 可以传送到一个记录的坐标, 或者使用 /pr tp id:[id] 可以根据记录 ID 来传送. 一次传送之后, 您可以使用 /pr tp (prev|next) 来传送到上一个或下一个索引的坐标处.
备注: 我们目前正在开发一个更只能的传送系统, 它能够准确地判断传送区域的安全性, 并尝试选择邻近的位置作为传送点. 它仍在开发当中.
预览
/prism preview [rollback | restore | apply | cancel ] <参数> <标志>
/prism 预览 [回滚 | 还原 | 应用 | 取消 ] <参数> <标志>
/pr pr
回滚或者还原前先进行预览是最安全的办法. 当您在预览一次回滚/还原操作时, Prism 会使用您给出的参数来查询数据库, 然后向您展示方块的变更 - 这个时候不会应用回滚/还原操作到世界上. 周围的玩家不会看到这个预览, 只有您会看到.
预览可以让您检查本次回滚/还原操作是不是会像您所计划的那样执行 - 如果不是, 您可以取消预览. 这不会对实际地图造成任何影响.
如果不是预期的结果, 使用 /prism preview cancel. 您每次只能有一个挂起的预览, 并且它会在一分钟之后过期. 如果您忘记了挂机了预览或者退出了服务器, 它会自行取消.
应用预览
/prism preview apply
/prism 预览 应用
如果结果一切正常, 您想要将它们应用到地图上的话, 使用 /prism preview apply. 应用预览的时候不需要再次指定参数, 因为 Prism 会记忆您的操作. 当您应用预览的时候, 它会完全按照 回滚/还原 的真实操作来执行.
我们十分建议您养成一个先预览再执行的习惯.
备注: 预览模式只支持方块变更. 物品/实体或者其他的回滚不会在预览里显示出来, 但应用预览的时候它们仍然会被正确地回滚.
回滚
/prism rollback (参数)
/prism 回滚 (参数)
如果您足够专业, 您可能不需要在预览后再执行回滚操作. 执行此指令后会立即应用世界的变更.
回滚魔棒
/prism wand rollback
/prism 魔棒 回滚
回滚魔棒是另一种魔棒类型. 就像是检查魔棒, 它是用于单个方块位置的, 并且与您设置的偏好所绑定.
左键单击一个方块可以回滚点击的方块处的上一行为. 右键单击方块六侧中的任何一侧可以回滚该方块邻边位置处的上一行为. 重新输入一次该指令即可关闭魔棒.
如果发生的问题很小并且您不想考虑指令参数, 这个魔棒很管用.
备注: 开发人员提醒您, 如果您给予回滚权限(给城管), 尤其是击杀实体和拿出容器内物品的权限, 一定要注意城管有权重复进行回滚操作, 以此刷取物品. 没有绝对的办法可以确保物品和实体不会被回滚, 但是您可能不会遇到这种问题, 因为给予城管回滚权限, 它们应该是得到了您的信任的. 不管如何, 您也可以在配置文件中禁用针对拿出物品的回滚.
还原
/prism restore (参数)
/prism 还原 (参数)
还原是一个重新应用被回滚的世界变更的方法. 实际上它是一个撤销回滚的方法.
备注: 无论是回滚还是还原放置方块的行为, Prism 都会尽量防止将方块的变更应用到有更新活动的地方. 例如如果您在还原一次 玩家A 放置的方块, 但 玩家B 已经在这里放置了一个新方块, Prism 就会跳过它.
撤销
撤销目前只对排水操作有效.
Prism 有着一个非常独特的撤销系统, 因为其在本质上就设计成对于 Prism 事件的回滚/还原系统. 在本质上, 我们记录回滚、还原、排水以及一些其他的事件, 就像我们在记录玩家、实体和世界的事件一样.
这种处理的好处是: - 可以在不使用指令数据记录的情况下, 查询回滚、还原、排水等行为的记录. - 可以轻松地撤销上一次的操作, 这是最常用的. - 可以使用 数字ID 来撤销任何支持的操作. - 这意味着当服务器崩溃/关闭之后您也不会失去撤销的能力. - 其他管理员也可以撤销别人的操作.
撤销
在对液体执行 /prism drain 指令后, 您可以撤销它.
/prism undo last
/prism 撤销 上次
恢复上一次执行的排水操作.
/prism undo [ID]
/prism 撤销 [ID]
如果不填 ID 则会列出所有记录的排水操作. 列表中的每一个操作都会写上其 ID, 然后您可以使用这个 ID 来撤销这个排水操作.
删除
/prism delete <参数>
/prism 删除 <参数>
服务器管理员可以使用 /prism delete [时间范围] 来手动清理数据库中的数据记录. 这不是很必要, 因为 Prism 会自动清理数据记录 (每个配置文件) 每 12 小时. 参阅清理多与数据中的 数据清理. 所有的参数都可以与 删除 配合使用.
魔棒
/prism wand [rollback | restore | inspect]
/prism 魔棒 [回滚 | 还原 | 查询]
/pr wand
/pr 魔棒
/pr i
/pr 查询
魔棒让您能够通过点击方块来执行查询、回滚、还原操作.
设定魔棒偏好 / 重置魔棒偏好
/prism setmy mode [hand | item | block]
/prism 偏好 模式 [空手 | 物品 | 方块]
/prism setmy item (材料ID)
/prism 偏好 物品 (材料ID)
/prism resetmy
/prism 重置偏好
有三个魔棒模式可供使用: 空手, 物品, 方块.您可以在配置文件中定义 Prism 用户使用的默认模式. 可以设置魔棒模式、使用的物品、是否自动为用户装备上该物品, 以及更多.
- “空手” 是目前 Prism 默认设置的魔棒模式.
- “物品” 允许用户设置一个默认的 物品ID 来作为魔棒使用.
- “方块” 允许用户设置一个默认的 方块ID 来作为魔棒使用, 所以您也可以仿造其它回滚插件使用的方式, 通过放置方块来模仿空手和物品的右键单击操作. 然而使用方块模式可能会受到其它插件的影响, 且可能有玩家库存更新问题等, 因此我们不建议使用该魔棒模式.
自动装备
您可以设置在玩家启用魔棒的时候是否自动给予玩家魔棒偏好物品. 如果玩家拥有物品, 我们会将其自动到目前的快捷栏槽位中, 与当前所持物品交换.
如果玩家没有物品, 插件会给予他们一个, 然后在他们关闭魔棒的时候移除它!
排水
/pr drain [ water | lava ] r:<半径>
/pr 排水 [ 水 | 熔岩 ] r:<半径>
排去玩家附近的水或熔岩. 遗漏类型将会排去两种液体.
灭火
/pr extinguish r:<半径>
/pr ex
/pr 灭火 r:<半径>
扑灭玩家附近的火焰.
视图
/pr view chunk
/pr 视图 区块
此指令会向您展示一个萤石边框, 这是区块边界的预览. 重新输入一次指令即可关闭该功能.
设置
/pr settings batchsize (数值)
/pr 设置 批次大小 (数值)
目前, 可以使用该指令来动态调节批次大小, 可以以此加快或者减慢记录数据的速度.
记录器
/pr recorder (start | cancel)
/pr 记录器 (开启 | 取消)
开启或者取消(关闭)记录器.
清理
/prism purge <cancel>
/prism 清理 <取消>
计划或取消数据清理任务. 参阅清理多余数据中的 数据清理 .
什么是”已跳过”?
- Prism 禁止回滚的实体. 默认配置: 苦力怕
- Prism 禁止回滚的方块. 默认配置: 火焰, 熔岩
- 由于一些原因, 导致耕地不能回滚到土块. (若不是 泥土/草方块/空气 的话)
- 由于一些原因, 导致睡莲不能回滚到水或者空气上.
- 如果 Prism 尝试放置方块的位置和预期的样子有所变化. 例如 - 如果 玩家A 放置了一个石头并破坏了它, 然后 玩家B 在同一个地方放置了一个泥土, 参数为 p:玩家A a:break 的回滚就会被跳过, 因为 Prism 不想破坏 玩家B 所做的事. 如果要强制回滚, 在参数中添加 -overwrite 标志即可.
参数与标志
参数
“参数”(Parameters) 指的是在 Prism 的 查询、预览、回滚、还原 等指令中使用的”参数”(arguments). 使用它们可以准确地定义 Prism 需要操作的数据.
您可以定义每一个参数、一部分参数、或者不定义任何参数. (如果没有定义则为安全的默认值) 您可以无序地排列它们.
对于大多数的参数类型, 您可以使用逗号来定义多个参数. 例如 a:break,place.
玩家可能收到的常见错误可能是: 您遗漏了有效的行为. 使用 /prism ? 来获取帮助.
对于遇到这个问题的玩家, 可以给予他这个权限节点: prism.parameters.action.required - 但需要将其设置为否 - 也就是 ❌.
参数列表
- a:[行为] - 例如 “block-break” (您可以在下面看到一个完整的列表). 默认值为所有行为.
- r:[半径] - 查询您附近多少格方块半径内的事件记录, 例如 r:20. 默认值为配置文件中所设值.
- r:global r:全局 - 指示 Prism 不要限制记录的位置, 在全世界各个位置中查询. 使用此参数需要特别地在配置文件中配置, 或拥有针对于 查询/回滚/还原 操作使用的权限.
- r:we - 使用 WorldEdit 选区来限制记录的位置. 可以配合 查询/回滚/还原 操作使用. 对任何支持``r``参数的记录都有效. 玩家必须拥有 WorldEdit 选区权限.
- r:玩家名:[半径] 将半径中心定义到另一玩家处.
- r:x,y,z:[半径] - 将半径中心定义到坐标 x,y,z 处.
- r:world r:世界 - 不限制半径, 但将世界限制为当前所处世界或者 w: 参数定义的世界.
- r:c r:区块 - 限制半径范围内目前所处的区块 (目前区块的 x/z, 基岩层到世界高度这个长方体范围内)
- b:[方块名/方块ID] - 例如 b:grass 、b:2 和`b:2:0`. 没有默认值.
- e:[实体名] - 例如 e:pig. 没有默认值.
- t:[时长] - 从 x 时长后发生的事件. 例如1(seconds|秒), 20m(minutes|分), 1h(hour|时), 7d(days|天), 2w(weeks|周). 没有默认值. 您也可以配合多个单位使用, 例如 1时20分.
- before:[时长] - 在 x 时长前发生的事件.
- since:[时长] - 从 x 时长后发生的事件 (等同于 t:).
- p:[玩家名] - 例如 p:viveleroi. 没有默认值.
- w:[世界名] - 例如 w:world_nether. 默认值为所处的世界.
- k:[关键字] - 基于文本的关键字搜索 (主要适用于 指令/聊天 事件).
- id:[ID] - 单个的记录 id.
使用 ! 可以排除单个行为, 玩家, 或者实体. 例如: /pr rollback a:break p:!Rothes
行为列表
短行为是连接号之后的词. 例如短行为 break 会查询所有以 *-break 结尾的行为.
行为 | 可回滚 | 可还原 | 简述 | 权限 状态 |
block-break | ✔️ | ✔️ | 任何被破坏的方块. | ✔️ |
block-burn | ✔️ | ✔️ | 任何被烧掉的方块. | ✔️ |
block-dispense | ❌ | ❌ | 一个方块中发射出去的物品. | ✔️ |
block-fade | ✔️ | ✔️ | 一个消亡的方块, 例如雪融化, 树叶在断开与树的连接后消亡. | ✔️ |
block-fall | ✔️ | ✔️ | 例如沙子坠落. | ✔️ |
block-form | ✔️ | ✔️ | 形成圆石或形成冰. | ✔️ |
block-place | ✔️ | ✔️ | 任何被放置的方块. | ✔️ |
block-shift | ❌ | ❌ | 被活塞推动的方块. | ✔️ |
block-spread | ✔️ | ✔️ | 方块有机地蔓延, 如草方块. | ✔️ |
block-use | ❌ | ❌ | 使用方块, 如工作台. | ✔️ |
bucket-fill | ❌ | ❌ | 填装一个桶. | ✔️ |
bonemeal-use | ❌ | ❌ | 使用骨粉. | ✔️ |
container-access | ❌ | ❌ | 使用一个容器. | ✔️ |
cake-eat | ❌ | ❌ | 食用地上的蛋糕. | ✔️ |
craft-item | ❌ | ❌ | 合成一个物品. | ❌ |
creeper-explode | ✔️ | ✔️ | 苦力怕爆炸. | ✔️ |
crop-trample | ✔️ | ✔️ | 损坏农作物. | ✔️ |
dragon-eat | ✔️ | ✔️ | 末影龙吃掉方块. | ✔️ |
enchant-item | ✔️ | ✔️ | 附魔一个物品. | ❌ |
enderman-pickup | ✔️ | ✔️ | 末影人拿起方块. | ✔️ |
enderman-place | ✔️ | ✔️ | 末影人放置方块. | ✔️ |
entity-break | ✔️ | ✔️ | 实体破坏一个方块. | ✔️ |
entity-dye | ❌ | ❌ | 染色一个物品. | ❌ |
entity-explode | ✔️ | ✔️ | 实体爆炸. | ✔️ |
entity-follow | ❌ | ❌ | 实体跟随一个玩家. | ✔️ |
entity-form | ✔️ | ✔️ | 形成一个实体. | ✔️ |
entity-kill | ✔️ | ✔️ | 实体被击杀. | ✔️ |
entity-leash | ❌ | ❌ | 实体被栓绳拴住. | ✔️ |
entity-shear | ❌ | ❌ | 实体被剪刀剪. | ✔️ |
entity-spawn | ❌ | ❌ | 实体被生成. | ✔️ |
entity-unleash | ❌ | ❌ | 实体被解拴. | ✔️ |
fireball | ❌ | ❌ | 使用火球点火. | ✔️ |
fire-spread | ✔️ | ✔️ | 火焰蔓延. | ✔️ |
firework-launch | ✔️ | ✔️ | 发射烟花. | ✔️ |
hangingitem-break | ✔️ | ✔️ | 例如画被破坏. | ✔️ |
hangingitem-place | ✔️ | ✔️ | 例如画被放置. | ✔️ |
item-drop | ✔️ | ✔️ | 丢弃一个物品到地上. | ✔️ |
item-insert | ✔️ | ✔️ | 将物品放入容器. | ✔️ |
item-pickup | ✔️ | ✔️ | 拾起地上的掉落物. | ✔️ |
item-remove | ✔️ | ✔️ | 拿出容器内的物品. | ✔️ |
item-rotate | ❌ | ❌ | 旋转物品展示框内的物品. | ✔️ |
lava-break | ❌ | ❌ | 熔岩破坏一个方块. | ✔️ |
lava-bucket | ✔️ | ✔️ | 收集熔岩. | ✔️ |
lava-flow | ✔️ | ✔️ | 熔岩流动. | ✔️ |
lava-ignite | ❌ | ❌ | 熔岩点燃周围的环境. | ✔️ |
leaf-decay | ✔️ | ✔️ | 树叶凋落. | ✔️ |
lighter | ❌ | ❌ | 使用打火石. | ✔️ |
lightning | ❌ | ❌ | 闪电劈下来. | ✔️ |
mushroom-grow | ✔️ | ✔️ | 蘑菇树生长. | ✔️ |
player-chat | ❌ | ❌ | 玩家聊天. | ❌ |
player-command | ❌ | ❌ | 玩家执行指令. | ❌ |
player-death | ❌ | ❌ | 玩家死亡. | ✔️ |
player-join | ❌ | ❌ | 玩家进入服务器. | ❌ |
player-kill | ✔️ | ❌ | 击杀玩家. | ❌ |
player-quit | ❌ | ❌ | 玩家离开服务器. | ❌ |
player-teleport | ❌ | ❌ | 玩家传送. | ❌ |
potion-splash | ❌ | ❌ | 玩家掷出喷溅药水. | ✔️ |
sheep-eat | ❌ | ❌ | 绵羊吃草. | ✔️ |
sign-change | ❌ | ✔️ | 修改告示牌上的文本. | ✔️ |
spawnegg-use | ❌ | ❌ | 使用刷怪蛋. | ✔️ |
tnt-explode | ✔️ | ✔️ | TNT 爆炸. | ✔️ |
tnt-prime | ❌ | ❌ | 点燃 TNT. | ❌ |
tree-grow | ✔️ | ✔️ | 树生长. | ✔️ |
vehicle-break | ✔️ | ❌ | 破坏载具. | ✔️ |
vehicle-enter | ❌ | ❌ | 进入载具. | ✔️ |
vehicle-exit | ❌ | ❌ | 离开载具. | ✔️ |
vehicle-place | ❌ | ❌ | 放置载具. | ✔️ |
water-break | ✔️ | ✔️ | 水破坏方块. | ✔️ |
water-bucket | ✔️ | ✔️ | 收集水. | ✔️ |
water-flow | ✔️ | ✔️ | 水流动. | ❌ |
world-edit | ✔️ | ✔️ | 编辑世界. | ❌ |
xp-pickup | ❌ | ❌ | 拾起经验球. | ❌ |
target-hit | ❌ | ❌ | 标靶方块被箭击中. | ❌ |
player-trade | ❌ | ❌ | 玩家与村民交易. | ❌ |
item-receive | ✔️ | ✔️ | 与村民交易收到的物品. | ❌ |
理解行为间的关系
Prism 会将类似的行为分成不同的子行为, 所以您可以更加高效地来查找、回滚、还原您需要的内容.
Prism 以下面两种方式来使用关系.
科属
行为科属定义很简单, 指两种行为十分相似, 比如 creeper-explode 和 tnt-explode 都是因爆炸破坏方块, 但是是由两种不同的原因而导致的. 如果使用短行为名 explode, 插件会查询匹配这个短行为名的所有行为. 如果指定了一个具体的行为名称, 插件就只会查询这一个行为.
比较一下具体的行为名称和短行为名称, 您可以了解更多. block-break 和 water-break 这两个都是具体的行为名称且属于同一科属, 可以单独地追踪, 也可以通过短行为名 break 来追踪双方.
因果
有一些事件是相关联的, 一个事件会导致另一个事件. 要想掌握正确回滚被熊区域的技术, 您真的需要了解它们.
下面举出一个简单的例子. 一个插着火把的木栅栏被烧掉了. 方块被烧掉的记录会以行为 block-burn 记录, 然后火把脱离了放置着它的方块, 火把也会被移除, 以行为 block-break 记录. Prism 会将事件都清晰准确地记录下来, 不会将这个火把被破坏的行为记录为 block-burn , 毕竟火把不可燃烧.
所有 附近/查询/检查 操作都会清晰地向你展示出事件行为记录.
如果要回滚整个栅栏, 应该使用 /prism rollback a:burn,break. 如果只要特别具体的话, 使用 /prism rollback a:block-burn,block-break.
Prism 会智能地先回滚木栅栏, 然后再插上火把.
只要知道了每一个行为代表什么, 您就可以理解行为间的关系了.
这里有两个参考例子: - /prism rollback a:water-flow,water-break - 水流动之后破坏了一个方块. - /prism rollback a:block-break,block-fade - 树被砍之后树叶消亡了.
标志
/pr flags
/pr 标志
此指令会向执行者展示所有可用的标志. 这里面的一些指令标志可以控制将要运行的进程的特定细节, 让您获得 Prism 的全新控制能力.
排水/仅排水/仅排熔岩
/prism (指令) (参数) -drain
添加了排水标志会在回滚期间执行一个排水操作 (与 /prism drain 的效果完全相同). 使用 -drain-lava 或者 -drain-water 可以针对一种特定的液体来执行排水操作.
扩展
除非在配置文件中启用了显示扩展记录, 我们在默认情况下是不会向您显示扩展信息的, 可以减少杂乱的信息. 但是有的时候您可能会需要它. 使用 -extended 可以查询到扩展记录.
扩展查询结果消息

不分组
不想获得自动分组后的查询信息? 这种情况可以使用 -no-group.
不灭火
/prism (指令) (参数) -no-ext
如果在配置文件中配置了, Prism 会在执行 行为为burn 的回滚操作时自动扑灭范围内的火焰. 如果想要为一次特殊的回滚操作关闭此功能, 可以在指令中使用该标志.
覆写
/prism (指令) (参数) -overwrite
覆盖所有在操作过程中可能冲突的方块. 如果没有此标志, 默认它们会被跳过.
每页结果
/prism (指令) (参数) -per-page=#
调整一次查询中每页显示的结果数量.
分享
/prism (指令) (参数) -share=#
分享当前查询的结果给列表中的在线玩家.
粘贴
/prism (指令) (参数) -paste
将结果粘贴在 “https://paste.gg” 中. 这是一个粘贴箱服务网站.
数据清理
Prism 会按照您在配置文件中定义的规则自动清理旧的数据记录. 这有助于降低数据库大小, 并且提高查询、回滚等操作的速率.
您可以通过在配置文件中的 prism.purge 里提供一系列参数来配置数据清理规则, 就像在游戏中使用指令一样.
数据清理如何工作
Prism 会在服务器启动时初始化数据清理管理器, 每隔12小时(根据现实世界而不是游戏刻), 周期数据清理都会异步运行一次. 且每次只会处理一个数据清理规则, Prism 会”分块”数据库查询(如下), 一旦完成, Prism 就会列出移除的数据记录总数并继续处理下一规则.
什么是分块
分块指每一循环周期都通过主键来搜索有限数量的数据记录, 然后再寻找匹配您参数的数据记录的做法. 不管条件如何, 数据库查询都会十分迅速并且只会锁定搜索到的真实条目数量. 这有助于防止数据库锁耗竭的问题, 并且确保服务器运行时新插入的数据不会被锁定.
配置文件项 prism.purge.records-per-batch(每批次记录数) 指每一周期将按主键搜索多少数据记录, 来寻找匹配条件的数据记录. 此参数很有可能发生数据清理系统无法找到任何数据记录的周期问题.
配置文件项 prism.purge.batch-tick-delay(批次游戏刻间隔) 指每次周期的间隔时间, 以游戏刻为单位. 每次在周期搜索完毕 records-per-batch 之后, Prism 都会等待设定的时长, 然后开始下一周期.
您应该根据您的数据库服务器和可管理的大小来调整 records-per-batch 和 batch-tick-delay 的值. Prism 的默认值设为每批次 100,000 条记录, 以及每批次 30 刻 (1.5 秒) 的间隔. 您可以根据需要来调整这些参数.
Prism 会以毫秒为单位报告每个数据清理规则的最大周期时间 (搜索 records-per-batch 的时间) 来帮助您调整数据清理参数. 通常应该使用越大的数据记录数量, 这能降低最大周期时间. 设置 records-per-batch 并让最大周期时间略等于 batch-tick-delay 会是个不错的数据清理基础.
正是有了分块系统, 每次周期才通常都对数据库的影响很小, 因此在数据清理运行时仍然还能保持服务器可以非常迅速地写入新数据.
API文档
挂钩到 API
这个代码块可以用于获取并储存 API, 用于之后的使用. 通常您需要将此调用放于包装类中, 并在加载包装类前检查插件是否为 NULL - 这能确保您不需要 shade Prism 的 API.
- static void hookPrismApi() {
- Plugin plugin = Bukkit.getPluginManager().getPlugin("Prism");
- if (plugin != null & plugin.isEnabled()) {
- PrismApi prismApi = (PrismApi) plugin;
- }
- }
API 用法
- CommandSender sender;
- PrismParameters parameters = this.createParameters();
- parameters.addActionType("block-place");
- parameters.addPlayerName("Rothes");
- final Future<Result> result = this.performLookup(parameters, sender);
- Bukkit.getScheduler().runTaskAsynchronously(instance, new Runnable() {
- @Override
- public void run() {
- try {
- Result done = result.get(); //在完成前会阻塞
- for (me.botsko.prism.api.actions.Handler handler : done.getActionResults()) {
- ///用 handler 做点啥. 记住这是异步的.
- }
- } catch (InterruptedException | ExecutionException e) {
- //处理异常
- }
- }
- });
导入 Prism 到项目
首先, 添加存储库:
Maven:
Gradle (Groovy):
然后, 声明依赖:
Maven:
Gradle (Groovy):
事件
Prism 有 5 个事件可以监听, 来监视 Prism 和其 API.
PrismLoadedEvent
- public class PrismLoadedEvent extends Event {
- public PrismApi getApi() {
- return api;
- }
- }
如果您不想让您的插件依赖于 Prism、在它之后加载, 您可以选择监听这个事件, 也可以让您获得完整加载的 API.
PrismUnloadEvent
这个事件没有任何方法. 监听这个事件可以让您知道何时 Prism API 不再可用.
PrismRollbackEvent
- PrismRollBackEvent{
- /**
- * List.
- *
- * @return List BlockStateChange's
- */
- public List<BlockStateChange> getBlockStateChanges() {
- return blockStateChanges;
- }
- public ApplierResult getResult() {
- return result;
- }
- public Player getOnBehalfOf() {
- return onBehalfOf;
- }
- public PrismParameters getParameters() {
- return parameters;
- }
- }
返回回滚事件的参数以及调用事件的玩家和发生的 BlockStateChanges.
PrismExtinguishEvent
- public class PrismExtinguishEvent extends Event {
- public ArrayList<BlockStateChange> getBlockStateChanges() {
- return blockStateChanges;
- }
- public Player onBehalfOf() {
- return onBehalfOf;
- }
- public int getRadius() {
- return radius;
- }
- }
方法见上.
PrismDrainEvent
- public class PrismBlocksDrainEvent extends Event {
- public ArrayList<BlockStateChange> getBlockStateChanges() {
- return blockStateChanges;
- }
- public Player onBehalfOf() {
- return onBehalfOf;
- }
- public int getRadius() {
- return radius;
- }
- }
方法见上.
作者: MC_屁哥 时间: 2021-8-16 20:49
大佬辛苦了
作者: 小佬虎 时间: 2021-8-17 12:58
感谢翻译,目录结构清晰,帮了大忙
作者: 天墨云 时间: 2021-8-17 17:40
谢谢大佬
作者: 557513165zz 时间: 2021-8-18 04:47
时间磨灭了热情,却掐不断心中 永存的花火。或许曾经因自己的一腔热情而遭人嘲讽,待到归来时,火苗终将变成熊熊烈火,耀眼的是星辰大海,茫茫征途。梦想未泯,青春永存。
作者: 557513165zz 时间: 2021-8-18 04:47
时间磨灭了热情,却掐不断心中 永存的花火。或许曾经因自己的一腔热情而遭人嘲讽,待到归来时,火苗终将变成熊熊烈火,耀眼的是星辰大海,茫茫征途。梦想未泯,青春永存。
作者: M200Sniper 时间: 2021-8-19 12:48
ohhhhhhhhhhhhhh
作者: M200Sniper 时间: 2021-8-19 12:49
wowowowowoowowowowowo
作者: M200Sniper 时间: 2021-8-19 12:49
wuwuwuwuwuuwuwuwy
作者: M200Sniper 时间: 2021-8-19 12:50
水帖水帖水帖水帖水帖水帖
作者: M200Sniper 时间: 2021-8-19 12:51
谢谢大佬
作者: redwineSerena 时间: 2021-8-20 19:46
太强了,太强了
欢迎光临 Minecraft(我的世界)中文论坛 (https://www.mcbbs.net/) | Powered by Discuz! X3.5 |