配置文件
TreasuresLite 有三类配置文件,分别控制不同层面的行为:
| 文件 | 路径 | 作用 |
|---|---|---|
config.yml | plugins/TreasuresLite/config.yml | 全局设置(显示、发包、数据库) |
location.yml | plugins/TreasuresLite/location.yml | 坐标分组、刷新规则、生成器 |
treasures/*.yml | plugins/TreasuresLite/treasures/ | 每个宝箱的独立配置(外观、奖励、钥匙、事件) |
所有配置文件支持热重载,执行 /tsl reload 即可生效。
config.yml — 全局配置
控制宝箱的显示行为、物品掉落规则和数据库连接。
view:
refresh: 600
distance: 16
async: true
virtualize_ui: false
drop_owner: true
code:
database:
enable: true
host: localhost
port: 3306
user: root
password: root
database: minecraft
table: "ce_treasure"
view — 显示与发包
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
refresh | 整数 (tick) | 600 | 定时刷新宝箱显示的间隔。600 tick = 30 秒。除定时刷新外,玩家进服、传送、切换世界也会触发刷新 |
distance | 整数 (格) | 16 | 宝箱显示距离。只有玩家在此范围内才会收到虚拟方块数据包。值越大客户端负担越重,建议 16~32 |
async | 布尔 | true | 是否异步发送数据包。开启可减轻主线程压力。网易服(基岩版互通)必须关闭,否则可能导致发包异常 |
virtualize_ui | 布尔 | false | 是否虚拟化宝箱 GUI 界面。BungeeCord 子服环境下可能出现异常,遇到问题请关闭 |
性能建议
refresh值越小刷新越频繁,对大量在线玩家的服务器建议适当调大(如 1200)distance建议不超过 32,过大会增加不必要的发包量
drop_owner — 掉落物归属
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
drop_owner | 布尔 | true | 当玩家背包满时,领取的奖励物品会掉落到地面。开启后掉落物只有该玩家能拾取,防止被其他人捡走 |
database — 数据库
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
enable | 布尔 | true | 是否使用 MySQL。关闭则使用本地 SQLite |
host | 字符串 | localhost | 数据库地址 |
port | 整数 | 3306 | 数据库端口 |
user | 字符串 | root | 用户名 |
password | 字符串 | root | 密码 |
database | 字符串 | minecraft | 数据库名 |
table | 字符串 | ce_treasure | 数据表名 |
警告
数据库功能目前为预留配置,暂未启用。当前版本数据存储使用本地文件。
location.yml — 坐标与刷新规则
这是 TreasuresLite 最核心的配置文件,决定了宝箱在哪里生成、多久刷新、谁能看到。
文件分为两大部分:location(坐标分组)和 generator(生成器规则)。
location — 坐标分组
定义固定坐标点,供后续生成器引用。每个分组包含一组坐标,格式为 世界名, X, Y, Z, 朝向。
location:
# 分组名可以自定义
spawn_area:
- 'world, 100, 65, 200, east'
- 'world, 105, 65, 210, south'
nether_area:
- 'world_nether, 50, 40, 50, north'
- 'world_nether, -30, 35, 80'
| 参数 | 说明 |
|---|---|
| 世界名 | 世界文件夹名称,如 world、world_nether |
| X, Y, Z | 方块坐标(整数) |
| 朝向 | 可选。north、south、east、west,不填则随机朝向 |
提示
坐标分组只是定义"位置在哪",具体哪个宝箱出现在哪个分组,由下方 generator 配置决定。
generator.normal — 固定坐标生成器
将宝箱绑定到坐标分组,按周期刷新。
generator:
normal:
# 全局刷新周期(tick),36000 = 30 分钟
# 设为 0 则只有配置了 cooldown 的坐标组生效
period: 36000
# 特定坐标组的独立刷新时间(覆盖全局 period)
cooldown:
spawn_area: 6000 # 5 分钟刷新一次
nether_area: 72000 # 1 小时刷新一次
# 公共宝箱:一人领取后所有人都看不到,直到下次刷新
public:
def:
- spawn_area
# 宝箱与坐标组的绑定
treasure:
def:
spawn_area: "true"
nether_area: "check player level > 10"
逐项说明:
| 配置项 | 类型 | 说明 |
|---|---|---|
period | 整数 (tick) | 全局刷新周期。所有未配置独立 cooldown 的坐标组使用此值。设为 0 则只有 cooldown 中列出的坐标组会刷新 |
cooldown.<组名> | 整数 (tick) | 为指定坐标组设置独立刷新时间,覆盖全局 period |
public.<宝箱> | 列表 | 公共宝箱。列出的坐标组中,宝箱被任意一个玩家领取后,所有玩家都看不到该坐标的宝箱,直到下次刷新 |
treasure.<宝箱>.<组名> | Kether 条件 | 将宝箱文件绑定到坐标组。值为 Kether 条件表达式,"true" 表示无条件显示 |
刷新机制细节
- 刷新周期修改后,需要重启服务器才能生效(不是 reload)
- 玩家退出服务器时不会立即清空缓存,而是等到下一个刷新周期
- 玩家进服时,如果缓存已过期才会重新生成坐标
- 如果同一坐标被多个宝箱绑定且条件都满足,只会显示其中一个
条件表达式
treasure 绑定支持 Kether 脚本作为条件。常见用法:
treasure:
# 无条件显示
daily_chest:
spawn_area: "true"
# 等级大于 10 才显示
elite_chest:
spawn_area: "check player level > 10"
# 拥有特定权限才显示
vip_chest:
spawn_area: "check player perm vip.chest"
generator.random — 随机坐标生成器
在指定区域内随机生成宝箱坐标,每个玩家的坐标独立随机。
generator:
random:
period: 36000
treasure:
# 地表模式:从高处往下找到第一个实心方块
- location: "world: 50,100 ~ -50,-100: ground#255: random"
max: 5
chest: def
# 范围模式:在指定 Y 范围内随机
- location: "world: 50,100 ~ -50,-100: range#0~40#air,stone,water"
max: 4
chest: def
if: "check player level > 5"
location 格式
世界名: X1,Z1 ~ X2,Z2: 随机规则: 朝向
| 部分 | 说明 |
|---|---|
世界名 | 生成区域所在的世界 |
X1,Z1 ~ X2,Z2 | 矩形区域的两个对角坐标(只需 X 和 Z) |
| 随机规则 | 决定 Y 坐标的生成方式,见下表 |
| 朝向 | north/south/east/west/random |
随机规则
| 规则 | 格式 | 说明 |
|---|---|---|
ground | ground#最大Y | 从指定高度往下扫描,找到第一个非空气方块,在其上方放置宝箱。适合地表生成 |
range | range#最小Y~最大Y#方块类型 | 在 Y 范围内随机选择坐标。适合矿洞、地下城等场景 |
其他参数
| 参数 | 类型 | 说明 |
|---|---|---|
max | 整数或范围 | 该区域内生成的最大宝箱数量,支持范围写法如 3~5 |
chest | 字符串 | 宝箱文件名(不含 .yml 后缀) |
if | Kether 条件 | 可选。满足条件的玩家才会生成该区域的宝箱,默认 "true" |
宝箱配置文件 — treasures/*.yml
每个 .yml 文件定义一种宝箱类型,文件名即宝箱 ID。插件会递归加载 treasures/ 目录下所有 .yml 文件。
完整结构概览
# GUI 标题,支持颜色代码和 PlaceholderAPI
title: "奖励箱"
# GUI 字符布局
layout:
- '#########'
- ' 1111111 '
- '#########'
# 宝箱设置(方块外观、钥匙、背包锁定)
settings:
block: "CHEST"
lock_inventory: true
open_key: { ... }
# 事件脚本
events:
open: |-
tell "打开了宝箱"
close: |-
tsl-claim
claim: |-
tell "领取了奖励"
spawn: |-
tell "宝箱出现了"
# 可领取的奖励物品
claim:
key: 1
amount: 3~8
layout: random
generator: { ... }
# 装饰图标
icons:
'#':
material: "gray stained glass pane"
name: " "
各节点的详细配置说明请参阅对应的功能文档:
| 节点 | 详细文档 |
|---|---|
settings.block | 虚拟宝箱 — 方块外观配置 |
settings.open_key | 钥匙系统 |
layout / icons / events | GUI 与动画 |
claim / generator | 奖励系统 |
settings — 宝箱设置
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
block | 字符串或对象 | — | 虚拟方块的外观。支持简化字符串("CHEST")、CraftEngine ID("ce:xxx")、头颅("player_head:Notch")或详细对象配置 |
lock_inventory | 布尔 | false | 开启后玩家在宝箱 GUI 中无法点击自己背包内的物品 |
open_key | 对象 | — | 钥匙配置。不写此节点则无需钥匙即可开箱 |
claim — 奖励生成
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
key | 字符 | — | 对应 layout 中代表可领取槽位的字符 |
amount | 字符串 | "0" | 生成的奖励数量,支持范围写法如 3~8 |
layout | 字符串 | "random" | 物品在槽位中的分布方式:random(随机)或 order(顺序) |
generator | 对象 | — | 奖励物品定义,每个子键为一种奖励。详见 奖励系统 |
events — 事件脚本
| 事件 | 触发时机 | 常用场景 |
|---|---|---|
open | 钥匙检查通过后、GUI 打开前 | 播放音效、发送提示。可用 tsl-cancel 取消开箱 |
close | GUI 关闭时 | 自动领取剩余奖励(tsl-claim) |
claim | 玩家点击领取单个奖励时 | 发送领取提示。可用 &amount 获取数量 |
spawn | 宝箱方块发包显示时 | 发送发现提示。可用 &chest-world/&chest-x/&chest-y/&chest-z |
实战示例:从零配置一个每日宝箱
下面演示如何创建一个每日刷新的宝箱,放在出生点附近,需要钥匙才能打开。
第一步:创建宝箱文件 treasures/daily.yml
title: "&6&l每日宝箱"
layout:
- '#########'
- ' 1111111 '
- ' 1111111 '
- '#########'
settings:
block: "TRAPPED_CHEST"
lock_inventory: true
open_key:
deny: |-
tell "&c你需要一把每日钥匙才能打开"
key:
- check:
material: "tripwire_hook"
name: "每日钥匙"
consume: true
events:
close: |-
tsl-claim
claim:
key: 1
amount: 3~5
layout: random
generator:
diamond:
chance: 20
material: "diamond"
amount: 1~3
give: source
iron:
chance: 50
material: "iron_ingot"
amount: 3~8
give: source
gold:
chance: 30
material: "gold_ingot"
amount: 2~5
give: source
icons:
'#':
material: "gray stained glass pane"
name: " "
第二步:配置坐标 在 location.yml 中添加:
location:
daily_spots:
- 'world, 100, 65, 200, east'
- 'world, -50, 70, 150, south'
generator:
normal:
period: 0
cooldown:
daily_spots: 1728000 # 24 小时 = 1728000 tick
treasure:
daily:
daily_spots: "true"
第三步: 执行 /tsl reload,然后用 /tsl open daily 测试效果。