ItemVoid —— NBT 虚空漏斗,收集服务器上的一切奇怪物品!

原创 开源 工具 ItemVoid —— NBT 虚空漏斗,收集服务器上的一切奇怪物品! 1.8

版权类型
原创
插件中文名称
物品NBT虚空漏斗
插件英文名称
ItemVoid
原帖地址
https://modrinth.com/plugin/itemvoid-plugin?utm_source=minebbs
支持的核心(服务端)
  1. Spigot
  2. Paper
  3. PufferFish
  4. Leaves
语言支持
English
前置组件
NBTAPI https://modrinth.com/plugin/nbtapi
适配版本(Java)
  1. 1.20
ItemVoid

-物品NBT虚空漏斗,收集一切!


这是我在 RIA 任职时构建的插件,现在公开发布。

在 RIA,整个服务器由超过 60, 000 个完全不同的特殊 NBT 物品构成,大量的自定义武器、护甲、纪念品和花哨的小玩具都基于 NBT 标签制作而成。随之而来的问题是为了存储他们,鱼子们不得不建造大量的仓库,并将物品存进箱子中。日积月累,依然有大量的物品丢失——也许是用完了没有放回来,又或许仅仅是没有找到。总之,它们永远消失在了历史长河里。

ItemVoid 为此而生,在您的服务器运行时,ItemVoid 会在后台扫描和探测带有特殊 NBT 的物品。任意物品满足下列要求就会被保存到数据库中:
  • 物品存在自定义 Lores/名字
  • 物品包含附魔
  • 物品有 Attributes Modifiers
  • 物品有 Custom Model Data
一旦保存到数据库中后,管理即可使用命令根据特定条件检索保存的物品,并从 GUI 中取出。

314043600-f9052d4c-f64b-4d03-936c-7d93caa60e4e.png


性能测试

此插件在构建时首先考虑对服务器的性能,并编写了高性能和高质量的代码。通过一些巧妙的方式,避免了对物品 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 获取源代码。
  • 喜欢
反馈: HiTech0926
作者
Ghost_chu
下载
249
查看
588
首次发布
最后更新

评分

0.00 星 0 次评分
后退
顶部 底部