Extractioncraft 战利品系统
Extractioncraft 拥有一个分层的战利品系统,基于三个概念构建:内容包引用战利品表,战利品表引用战利品池,战利品池定义实际可以掉落的物品。
概述
Content Package
-> chestLootTables / barrelLootTables (weighted selection)
-> Loot Table
-> lootTable entries (each has a chance to roll)
-> Loot Pool
-> eliteMobsLoot / vanillaLoot (weighted selection of one item)
战利品表
战利品表配置文件位于 loot_tables/ 文件夹中。每个文件定义一个战利品池条目列表,其中每个条目都有独立的概率产生物品。
| 键 | 类型 | 默认值 | 描述 |
|---|---|---|---|
isEnabled | Boolean | true | 会被写入文件,但并未被强制执行:无论此项是否为 true,战利品表都会被注册并可用。若要停用某个表,请把它从内容包的 chestLootTables / barrelLootTables 中移除,并清空它的 spawnPools。 |
spawnPools | String list | [] | BetterStructures 生成池名称。当与匹配生成池关联的 EliteMob 被击杀时,此战利品表将用于其掉落物。比较时不区分大小写,并忽略结尾的 .yml,因此 kobold_miner_pool 和 Kobold_Miner_Pool.yml 都能匹配。 |
lootTable | List of objects | [] | 每个条目引用一个战利品池文件名和一个 chance(0.0 到 1.0) |
战利品表条目格式
lootTable:
- filename: my_loot_pool.yml
chance: 0.5
- filename: another_pool.yml
chance: 0.2
每个条目独立判定。chance 为 0.5 表示此池产生掉落物的概率为 50%。
战利品池
战利品池配置文件位于 loot_pools/ 文件夹中。每个池定义一组可能的物品。当池被判定时,根据加权概率选择一个物品。
| 键 | 类型 | 默认值 | 描述 |
|---|---|---|---|
isEnabled | Boolean | true | 会被写入文件,但并未被强制执行:无论此项是否为 true,战利品池都会被注册并可用。若要停用某个池,请把它从引用它的战利品表条目中移除。 |
eliteMobsLoot | List of objects | [] | 可以掉落的 EliteMobs 自定义物品 |
vanillaLoot | List of objects | [] | 可以掉落的原版 Minecraft 物品 |
EliteMobs 战利品条目
eliteMobsLoot:
- filename: my_elite_item.yml
weight: 1.0
- filename: another_item.yml
weight: 0.5
filename 引用一个 EliteMobs 自定义物品配置。weight 决定池中所有条目之间的相对掉落概率。
原版战利品条目
vanillaLoot:
- material: DIAMOND
weight: 1.0
- material: GOLD_INGOT
weight: 2.0
material 是 Bukkit Material 枚举名称。weight 的工作方式与精英战利品条目相同。池中的所有精英和原版条目在单次加权选择中竞争,因此一个池每次判定最多产生一件物品。原版物品总是以单个物品的形式掉落。无法识别的 material 会在启动时被跳过并输出警告;而与任何 EliteMobs 自定义物品都不匹配的 eliteMobsLoot 文件名会在掉落时记录警告,并且不产出任何东西。
权重可以写成小数(0.5)、整数(2)或带引号的字符串("1.5");这三种都能解析。缺失或非数字的 weight 会被当作 0 处理,并记录一条警告。
容器战利品(箱子和木桶)
在对局中,箱子和木桶会在对局开始时由 BetterStructures 生成。当玩家右键点击箱子或木桶时:
- 原版容器界面绝不会打开 —— 该交互会被取消,并替换为 Extractioncraft 的搜刮流程。
- 玩家必须完全静止站立 3 秒钟。倒计时会以副标题形式显示。
- 任何移动都会取消该交互("Don't move while opening a container!")。一名玩家同一时间只能打开一个容器。
- 成功后,从内容包的
chestLootTables或barrelLootTables列表中选择一个战利品表(加权选择)。 - 所选战利品表的条目各自独立判定,产生的物品掉落在容器位置的地面上。
- 容器在被搜刮后会被销毁(替换为空气),因此每个容器只能被搜刮一次。
在对局中,活跃的容器每 10 tick 显示传送门粒子效果,使玩家能看到它们。
无论对局使用的是哪个内容包,容器掉落传给 EliteMobs 的等级都固定为 10。Kobold Mines 内容包所宣传的等级范围来自地图中的怪物,而非箱子和木桶的战利品。
怪物击杀战利品
当 EliteMob 在对局中死亡时,插件会读取该怪物身上的 betterstructures:spawnpool 自定义数据。没有该数据的怪物(即任何并非由 BetterStructures 模块生成器生成的怪物)永远不会产生 Extractioncraft 战利品。
每一个 spawnPools 列表匹配该怪物生成池的战利品表都会在死亡位置生成掉落物 —— 这不是加权挑选,因此在三个战利品表中列出同一个生成池,你就会得到三组独立的判定。怪物自身的等级会传递给 EliteMobs,以生成等级匹配的物品。
怪物等级本身在地图生成时由 BetterStructures 决定:越靠近地图中心的 Boss,生成等级越接近其生成池的最高等级;越靠近边缘的 Boss,则越接近最低等级。因此不断向中心收缩的世界边界会把玩家逐步推向更难 —— 也更有回报 —— 的区域。
撤离时的物品行为
- 每一位离开对局的玩家,无论成功与否,其背包都会先被灵魂绑定(使用 EliteMobs 灵魂绑定附魔),因此他们带出去的任何东西都会绑定到本人。
- 成功撤离的玩家保留所有物品。
- 当
config.yml中deleteItemsOnFailToExtract为true(默认值)时,未能撤离的玩家会丢失所有背包物品。这涵盖了用/exc leave离开、断线以及受到致命伤害的情况。 - 在对局仍处于等待或倒计时阶段时不会清除任何东西;该规则只在对局开始后才适用。