跳到主要内容

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/ 文件夹中。每个文件定义一个战利品池条目列表,其中每个条目都有独立的概率产生物品。

类型默认值描述
isEnabledBooleantrue会被写入文件,但并未被强制执行:无论此项是否为 true,战利品表都会被注册并可用。若要停用某个表,请把它从内容包的 chestLootTables / barrelLootTables 中移除,并清空它的 spawnPools
spawnPoolsString list[]BetterStructures 生成池名称。当与匹配生成池关联的 EliteMob 被击杀时,此战利品表将用于其掉落物。比较时不区分大小写,并忽略结尾的 .yml,因此 kobold_miner_poolKobold_Miner_Pool.yml 都能匹配。
lootTableList of objects[]每个条目引用一个战利品池文件名和一个 chance(0.0 到 1.0)

战利品表条目格式

lootTable:
- filename: my_loot_pool.yml
chance: 0.5
- filename: another_pool.yml
chance: 0.2

每个条目独立判定。chance0.5 表示此池产生掉落物的概率为 50%。

战利品池

战利品池配置文件位于 loot_pools/ 文件夹中。每个池定义一组可能的物品。当池被判定时,根据加权概率选择一个物品。

类型默认值描述
isEnabledBooleantrue会被写入文件,但并未被强制执行:无论此项是否为 true,战利品池都会被注册并可用。若要停用某个池,请把它从引用它的战利品表条目中移除。
eliteMobsLootList of objects[]可以掉落的 EliteMobs 自定义物品
vanillaLootList 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 生成。当玩家右键点击箱子或木桶时:

  1. 原版容器界面绝不会打开 —— 该交互会被取消,并替换为 Extractioncraft 的搜刮流程。
  2. 玩家必须完全静止站立 3 秒钟。倒计时会以副标题形式显示。
  3. 任何移动都会取消该交互("Don't move while opening a container!")。一名玩家同一时间只能打开一个容器。
  4. 成功后,从内容包的 chestLootTablesbarrelLootTables 列表中选择一个战利品表(加权选择)。
  5. 所选战利品表的条目各自独立判定,产生的物品掉落在容器位置的地面上。
  6. 容器在被搜刮后会被销毁(替换为空气),因此每个容器只能被搜刮一次。

在对局中,活跃的容器每 10 tick 显示传送门粒子效果,使玩家能看到它们。

容器战利品始终按等级 10 生成

无论对局使用的是哪个内容包,容器掉落传给 EliteMobs 的等级都固定为 10。Kobold Mines 内容包所宣传的等级范围来自地图中的怪物,而非箱子和木桶的战利品。

怪物击杀战利品

当 EliteMob 在对局中死亡时,插件会读取该怪物身上的 betterstructures:spawnpool 自定义数据。没有该数据的怪物(即任何并非由 BetterStructures 模块生成器生成的怪物)永远不会产生 Extractioncraft 战利品。

每一个 spawnPools 列表匹配该怪物生成池的战利品表都会在死亡位置生成掉落物 —— 这不是加权挑选,因此在三个战利品表中列出同一个生成池,你就会得到三组独立的判定。怪物自身的等级会传递给 EliteMobs,以生成等级匹配的物品。

怪物等级本身在地图生成时由 BetterStructures 决定:越靠近地图中心的 Boss,生成等级越接近其生成池的最高等级;越靠近边缘的 Boss,则越接近最低等级。因此不断向中心收缩的世界边界会把玩家逐步推向更难 —— 也更有回报 —— 的区域。

撤离时的物品行为

  • 每一位离开对局的玩家,无论成功与否,其背包都会先被灵魂绑定(使用 EliteMobs 灵魂绑定附魔),因此他们带出去的任何东西都会绑定到本人。
  • 成功撤离的玩家保留所有物品。
  • config.ymldeleteItemsOnFailToExtracttrue(默认值)时,未能撤离的玩家会丢失所有背包物品。这涵盖了用 /exc leave 离开、断线以及受到致命伤害的情况。
  • 在对局仍处于等待或倒计时阶段时不会清除任何东西;该规则只在对局开始后才适用。