- 版权类型
- 原创
- 插件中文名称
- 物品NBT虚空漏斗
- 插件英文名称
- ItemVoid
- 支持的核心(服务端)
- Spigot
- Paper
- PufferFish
- Leaves
- 语言支持
- English
- 前置组件
- NBTAPI https://modrinth.com/plugin/nbtapi
- 适配版本(Java)
- 1.20
ItemVoid
-物品NBT虚空漏斗,收集一切!
这是我在 RIA 任职时构建的插件,现在公开发布。
在 RIA,整个服务器由超过 60, 000 个完全不同的特殊 NBT 物品构成,大量的自定义武器、护甲、纪念品和花哨的小玩具都基于 NBT 标签制作而成。随之而来的问题是为了存储他们,鱼子们不得不建造大量的仓库,并将物品存进箱子中。日积月累,依然有大量的物品丢失——也许是用完了没有放回来,又或许仅仅是没有找到。总之,它们永远消失在了历史长河里。
ItemVoid 为此而生,在您的服务器运行时,ItemVoid 会在后台扫描和探测带有特殊 NBT 的物品。任意物品满足下列要求就会被保存到数据库中:
性能测试
此插件在构建时首先考虑对服务器的性能,并编写了高性能和高质量的代码。通过一些巧妙的方式,避免了对物品 ItemStack 对象的复制的开销。
每个物品按 NBT 存储,在 NBT 不变的情况下,不会重复保存。去重工作由数据库引擎(H2/MySQL)进行,避免影响服务器性能。
在 Expo 期间以 150+ 玩家数量通过了压力测试,未对服务器造成可测量的性能影响。
扫描
ItemVoid 的扫描器非常善于发现物品,它会扫描包括但不限于这些地方:
命令
权限
配置文件
转载须知
当 Modrinth 下载链接可用时,请勿重新分发二进制文件。
您可以自由的转载到其它站点,但必须附带原始 Modrinth 链接,并通过 Modrinth 下载。
开源许可证
ItemVoid 使用 MIT 协议开放源代码,您可以从 Ghost-chu/ItemVoid 获取源代码。
-物品NBT虚空漏斗,收集一切!
这是我在 RIA 任职时构建的插件,现在公开发布。
在 RIA,整个服务器由超过 60, 000 个完全不同的特殊 NBT 物品构成,大量的自定义武器、护甲、纪念品和花哨的小玩具都基于 NBT 标签制作而成。随之而来的问题是为了存储他们,鱼子们不得不建造大量的仓库,并将物品存进箱子中。日积月累,依然有大量的物品丢失——也许是用完了没有放回来,又或许仅仅是没有找到。总之,它们永远消失在了历史长河里。
ItemVoid 为此而生,在您的服务器运行时,ItemVoid 会在后台扫描和探测带有特殊 NBT 的物品。任意物品满足下列要求就会被保存到数据库中:
- 物品存在自定义 Lores/名字
- 物品包含附魔
- 物品有 Attributes Modifiers
- 物品有 Custom Model Data
性能测试
此插件在构建时首先考虑对服务器的性能,并编写了高性能和高质量的代码。通过一些巧妙的方式,避免了对物品 ItemStack 对象的复制的开销。
每个物品按 NBT 存储,在 NBT 不变的情况下,不会重复保存。去重工作由数据库引擎(H2/MySQL)进行,避免影响服务器性能。
在 Expo 期间以 150+ 玩家数量通过了压力测试,未对服务器造成可测量的性能影响。
扫描
ItemVoid 的扫描器非常善于发现物品,它会扫描包括但不限于这些地方:
- 玩家物品栏(包括盔甲、副手)
- 末影箱
- 生物手中的物品、穿戴的护甲
- 容器(箱子、熔炉、酿造台等)中的物品
- 物品中的嵌套物品(如:潜影盒里的潜影盒/NBT箱子)
- 物品展示框中的物品
- 盔甲架的物品
命令
- /itemvoid queryName <名称> - 按物品名称检索物品(通配符:%)
- /itemvoid queryLore <关键字> - 在物品 Lores 中检索包含指定关键字的物品(使用此命令检索无法使用索引,可能造成数据库压力,并需要较长时间)
- /itemvoid queryMaterial <Material> - 按 Material 名称检索物品,必须是有效的 Bukkit Material 之一。
- /itemvoid forcesaveall - 立刻强制保存所有在内存中暂存的物品到数据库中
- /itemvoid status - 查看目前暂存队列状态等信息
权限
- itemvoid.use - 使用 /itemvoid 的所有命令,并从查询结果中取出物品
配置文件
YAML:
# 事件监听器,以下操作将触发扫描
scan:
# 打开容器/物品栏/GUI
inventory-open: true
# 玩家加入
player-join: true
# 玩家断开
player-quit: true
# 玩家死亡
player-death: true
# 实体/玩家捡拾物品
entity-pickup-item: true
# 区块加载
chunk-load: true
# 最大递归扫描深度
# 递归扫描:ItemVoid 允许扫描嵌套的容器(如:潜影盒内的潜影盒,或者NBT箱子等),此开关设置了这种嵌套扫描的最大层数
recursive-scan-depth: 3
# 保存计划
save:
# 懒惰阈值
# 低于此阈值时,ItemVoid 将以一种比较慵懒的方式保存物品,每个保存窗口 ItemVoid 将生成一个随机数,只有命中随机数时,才会触发保存操作(在此之前,将暂存在服务器内存中),以避免浪费带宽或者CPU资源
lazy-threshold: 512
# 批次最小大小,小于此值的批次保存时不会使用 batch-partition-divide-by 定义的保存行为,而是一次性全部保存
min-batch-size: 1000
# 每次只保存 1/<batch-partition-divide-by> 的物品到数据库中
# 此设计的目的是避免加载一个存在大量物品的区块时,产生数据库压力
# 并允许部分物品留存在内存中,以便在发送到数据库保存之前,尽可能地处理更多的物品去重,缓解数据库压力
batch-partition-divide-by: 3
# 数据库配置
database:
# 是否使用 MySQL 引擎,如果设置为 false,则使用插件自带的 H2 数据库,保存成文件
# 如果为 true,则必须配置下面的 MySQL 连接信息
# 开发者建议:如果你的 MySQL 配置很差,那么建议直接使用 H2
mysql: false
# 数据库 IP 地址
host: localhost
# 数据库端口号
port: 3306
# 数据库名
database: itemvoid
# 用户名
user: root
# 密码
password: passwd
# 表前缀
prefix: "itemvoid_"
# 使用 SSL 安全连接
usessl: false
# 额外高级配置
properties:
# 连接超时时间(毫秒)
connectionTimeout: 60000
# 连接空闲时间(毫秒)
idleTimeout: 10000
# 连接最大生命周期(毫秒)
maxLifetime: 1800000
# 最大连接池大小
maximumPoolSize: 4
# 最少待命的空闲连接数
minimumIdle: 4
# 缓存预编译语句
cachePrepStmts: true
# 预编译语句缓存大小
prepStmtCacheSize: 250
# 缓存的预编译 SQL 限制
prepStmtCacheSqlLimit: 2048
# 使用 Unicode,请保持此选项开启
useUnicode: true
# 字符集编码,请保持此为 utf8
characterEncoding: utf8
# 在更新版本的 MySQL 上,可能需要添加此配置来解决登录问题
allowPublicKeyRetrieval: true
keepaliveTime: 60000
转载须知
当 Modrinth 下载链接可用时,请勿重新分发二进制文件。
您可以自由的转载到其它站点,但必须附带原始 Modrinth 链接,并通过 Modrinth 下载。
开源许可证
ItemVoid 使用 MIT 协议开放源代码,您可以从 Ghost-chu/ItemVoid 获取源代码。