跳到主要内容

第一个宝箱

跟着这一页做完,你会得到一个能在游戏里看到、能右键打开、能领到奖励的宝箱。

全程大约 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
只会生成 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
记 Y 坐标的时候注意

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,它是示例文件。正确做法是复制一份:

  1. 复制 treasures/def.yml,改名成 daily.yml
  2. 这样你就有了一个新的宝箱 ID:daily
  3. 在 location.yml 的 treasure: 下面加上它
    treasure:
def:
my_spots: "true"
daily:
my_spots: "true"
  1. /tsl reload,然后 /tsl open daily 测试
文件名就是 ID

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 有个实用效果:玩家关闭界面时会自动领走没点的奖励,不会白白浪费。