第一个宝箱
跟着这一页做完,你会得到一个能在游戏里看到、能右键打开、能领到奖励的宝箱。
全程大约 10 分钟。每一步都有验证方法,某一步没通过就先解决它,不要往下走。
第 0 步:装插件
把 TreasuresLite.jar 放进服务器的 plugins/ 文件夹,然后重启服务器。
不需要额外装 TabooLib,插件里已经带了。
怎么验证成功了:控制台里应该能看到这样几行
Successfully running TreasuresLite!
已重载 treasures/def.yml 配置
[Treasure] 已加载 1 个宝箱配置: def
第三行的 已加载 1 个宝箱配置: def 是关键。如果没有这一行,说明配置没加载出来,先看 排查手册。
现在你的服务器上应该多了这些文件:
plugins/TreasuresLite/
├── config.yml
├── location.yml
└── treasures/
└── def.yml
插件只在 treasures 文件夹不存在时释放一个 def.yml 作为示例。你在网上可能看到有人提到 skull_test.yml,那是开发用的头颅测试文件,不会自动生成。
第 1 步:先确认插件本身是好的
在动任何配置之前,先用命令确认插件能正常工作。
进游戏,给自己 OP,然后执行:
/tsl open def
你应该看到:一个标题是"奖励箱"的界面弹出来,里面有几个名字是"生成了 stone"的石头,边框是灰色玻璃板。
默认 def.yml 的奖励配了 give: none,意思是"点击后物品消失,但不给玩家任何东西"。它只是个演示用的空壳。
想让玩家真的拿到物品,要把 give 改成 source。详见 奖励怎么配。
如果这一步就不行,问题在插件本身或配置文件,跟坐标无关,去看 排查手册。
如果成功了,说明宝箱定义没问题,接下来要解决的是"让它出现在世界里"。
/tsl open 只是直接打开界面,它跟"宝箱在世界里显示"完全是两套逻辑。很多人卡在"命令能打开但世界里看不到",原因几乎都在坐标配置上。
第 2 步:找一个放宝箱的位置
进游戏,走到你想放宝箱的地方,按 F3 看坐标(Bedrock 版在设置里开显示坐标)。
记下三个数字和世界名。假设你得到的是:
- 世界:
world - 坐标:
X=100、Y=65、Z=200
F3 里的 XYZ 那一行是你脚所在的位置。宝箱会出现在你填的那个坐标上,所以直接用这个值就行,宝箱会正好在你站的位置。
如果你填的位置本来有方块,宝箱会盖住它的显示(只是显示,方块本身没变)。建议选一块空地。
第 3 步:告诉插件这个位置
打开 plugins/TreasuresLite/location.yml。
你会看到默认内容里有 location:、generator: 这些段落。我们要改两个地方。
改第一处:找到最上面的 location:,把它整段替换成下面这样
location:
my_spots:
- 'world, 100, 65, 200, north'
这里的意思是:定义一个叫 my_spots 的坐标组,里面有一个位置。
把 world, 100, 65, 200 换成你自己记下来的世界名和坐标。最后的 north 是箱子朝向,先照抄。
这一行必须写满 世界名, X, Y, Z, 朝向 五段,中间用逗号隔开。
少写朝向(比如 'world, 100, 65, 200')是最常见的错误,插件会跳过这一行,控制台输出 无法解析坐标,你的宝箱就永远不会出现。
朝向只能填 north、south、east、west、random 这五个词中的一个。
改第二处:往下找到 generator: 里面的 normal:,再找到它下面的 treasure:,改成这样
generator:
normal:
period: 1800000
treasure:
def:
my_spots: "true"
这里的意思是:宝箱 def 出现在坐标组 my_spots 上,条件是 "true"(也就是无条件,所有人都能看到)。
注意 def 和 my_spots 这两个名字:
def必须和treasures/里的文件名对应(def.yml→def)my_spots必须和你上面定义的坐标组名字一致
名字对不上是第二常见的错误。
第 4 步:让配置生效
回到游戏,执行:
/tsl reload
你应该看到:控制台输出 已重载 treasures/def.yml 配置 和 重载完成。
如果控制台出现 无法解析坐标 location.my_spots[0]='...',说明第 3 步的坐标格式写错了,回去检查是不是少了朝向。
如果出现 宝箱 def 引用了不存在的坐标组 my_spots,说明两处的组名不一致。
第 5 步:去看看
走到你填的那个坐标附近,距离要在 16 格以内。
如果宝箱没马上出现,执行一次:
/tsl update
这个命令会强制把宝箱重新发给你。
你应该看到:那个位置出现一个箱子。右键它,弹出"奖励箱"界面。
第 6 步:验证它真的是虚拟的
试试这几件事,能帮你理解这个插件的行为:
- 左键挖它:挖不动,也不会掉东西。插件拦截了挖掘操作
- 让另一个玩家去看:他也能看到(因为条件是
"true",所有人都满足) - 开一次箱子,然后走远再回来:箱子消失了,因为你已经领过了,要等下一个刷新周期
- 关掉插件重进:箱子彻底不见,因为它从来没有真的存在过
完成了,接下来改什么
现在你有一个能用的宝箱了。按需要往下改:
| 你想做的事 | 去哪一页 |
|---|---|
| 把箱子换成陷阱箱、末影箱或者自定义头颅 | 宝箱长什么样 |
| 多加几个刷新点,或者让宝箱在野外随机出现 | 宝箱出现在哪里 |
| 改奖励内容、概率、数量 | 奖励怎么配 |
| 让玩家必须拿钥匙才能开 | 要钥匙才能开 |
建一个属于自己的宝箱
不要一直改 def.yml,它是示例文件。正确做法是复制一份:
- 复制
treasures/def.yml,改名成daily.yml - 这样你就有了一个新的宝箱 ID:
daily - 在
location.yml的treasure:下面加上它
treasure:
def:
my_spots: "true"
daily:
my_spots: "true"
/tsl reload,然后/tsl open daily测试
treasures/ 下面所有 .yml 文件都会被加载,包括子文件夹里的。文件名去掉后缀就是宝箱 ID。
因为子文件夹不算命名空间,所以 treasures/a/daily.yml 和 treasures/b/daily.yml 的 ID 都是 daily,会互相覆盖。给文件起名的时候注意不要重复。
一份可以直接抄的完整配置
如果你想跳过上面的步骤,这里是两个文件的完整内容,改掉坐标就能用。
location.yml:
location:
my_spots:
- 'world, 100, 65, 200, north'
- 'world, 110, 65, 200, south'
generator:
normal:
period: 1800000
treasure:
def:
my_spots: "true"
random:
period: 1800000
treasure: []
treasures/simple.yml(一个精简版宝箱,比 def.yml 干净很多):
title: "&6&l奖励箱"
layout:
- '#########'
- ' 1111111 '
- '#########'
settings:
block: "CHEST"
lock_inventory: true
events:
close: |-
tsl-claim
claim:
key: 1
amount: 3
layout: random
generator:
diamond:
chance: 20
give: source
material: "diamond"
amount: 1
iron:
chance: 50
give: source
material: "iron_ingot"
amount: 3~5
gold:
chance: 30
give: source
material: "gold_ingot"
amount: 2~4
icons:
'#':
material: "GRAY_STAINED_GLASS_PANE"
name: " "
用这份配置的话,记得把 location.yml 里的 def 改成 simple。
这份配置里的 events.close: tsl-claim 有个实用效果:玩家关闭界面时会自动领走没点的奖励,不会白白浪费。