终极模组扩展

终极模组扩展

罗马斗兽场维度,怪物难度随难度缩放,八种技能,阿根廷比索和八层战利品袋。每个难度、掉落、交易和技能都在JSON或KubeJS中定义,因此整合包可以在不修改代码的情况下重写所有内容。

描述

终极模组附加包

我的世界 1.21.1 · NeoForge 21.1.240

这是一个围绕一个理念构建的内容模组:没有任何内容是硬编码的。竞技场、在其中生成的生物、它们的掉落物、商店出售的物品、技能升级的方式——所有这些都存在于任何数据包都可以覆盖的 JSON 文件中,或者如果你更愿意编写代码,也可以放在 KubeJS 脚本中。


竞技场

一个专属维度(ultimatemodadditions:coliseum),拥有一个真正的罗马圆形剧场——不是平坦世界。模组会在维度首次加载时程序化地生成它:沙地竞技场、讲台墙、五层看台、带有两层拱门的外墙、四个大门和一个返回传送门。从边缘掉下去会被传送回沙地上,而不是在虚空中死亡。

进入需要建造和一把钥匙。 你要像搭建下界传送门一样搭建一个传送门框架,但要使用哭泣的黑曜石——最小 4×5,最大 23×23,包括角落。然后你需要用竞技场钥匙右键点击四个角各一次;游戏会为你计数,第四次点击时钥匙会被消耗,传送门被点亮。

即使点亮了,它也不会让随便什么人通过。要踏入其中,你需要攻击、防御和魔法技能达到满级,外加100 级经验等级(经验等级会保留)。每个人在进入时都会被单独检查,所以你不能把一个准备不足的朋友拖在你身后——传送门会直接拒绝他们,并告诉他们缺少什么。离开是免费的,北门旁有一个已点亮的回家传送门。整合包可以在配置中放宽或完全移除整个要求。

该维度运行一个活跃的难度配置,会缩放其中所有生物:生命值、伤害、速度、护甲、击退抗性、追踪范围、掉落经验、硬币、战利品袋概率、永久药水效果和装备掉落。模组附带了四个配置(easy、normal、hard、nightmare),并且它会根据在线玩家数量进一步缩放。

刷怪笼在竞技场建造时会以环形放置在竞技场地面上,每个刷怪笼对应一种生物类型,以保持战斗的多样性——默认为十二个,从僵尸和苦力怕到烈焰人、女巫和末影人。出现的类型、刷怪笼的数量以及每个刷怪笼的设置(延迟、每批生物数量、玩家范围、生成半径)都在配置中,未知的 ID 会被跳过并记录警告日志,这样你可以安全地列出其他模组的生物。不想要它们?设置 enabled = false 并运行 /uma spawners clear 来清除已放置的刷怪笼。/uma spawners place 可以将它们放回去。

技能

八项技能——挖掘、攻击、防御、农业、建造、采集、敏捷和魔法——带有绑定到 K 键的专属界面。

该界面列出每项技能及其图标、颜色、当前等级(相对于最高等级)、显示通往下一等级进度的蓝色经验条,以及一个 + N 按钮,显示下一等级所需的技能点数——绿色表示可以负担,灰色表示不能。点击一行来升级。悬停时,提示框会分解技能详情:每级加成以及你当前累积的具体数量,还有完整的特长列表,其中已解锁的显示为绿色,未解锁的显示为灰色,这样你可以看到即将获得的内容。

每一级都会给你一些东西。 从 2 级开始,每一级都会增加该技能的属性——攻击伤害、护甲、挖掘速度、移动速度、触及距离、最大生命值、幸运——此外,5、10、15、20、25 和 30 级会解锁一个具有更大一次性加成的命名特长。没有无用的等级。

每项技能再升两级就会获得一个永久药水效果,每次都不一样:攻击先给予力量再给予急迫,防御先给予抗性再给予抗火,挖掘先给予急迫再给予夜视,八项技能依此类推。这些效果会自行刷新,所以它们能扛过死亡、维度变化和 /effect clear。整合包可以替换它们、添加更多效果,或者让一种效果随着技能成长而提升强度。

两种升级方式可以共存:花费技能点数,或通过使用技能获得经验值。技能也可以门控物品:模组自带对钻石和下界合金装备、鞘翅、附魔、信标和 Boss 战的要求,你也可以为任何物品添加自己的要求。

阿根廷硬币

九种面额:10、20、50、100、200、500、1000、10000 和 20000。从 10 到 500 是 mangos,从 1000 起是 lucas。

没有转换配方。右键点击一枚硬币,它会将你物品栏中所有散落的硬币自动组合成尽可能少的硬币;潜行 + 右键点击可以将一枚硬币拆分成更小的零钱。兑换台可以接受任意组合的硬币,并自动给出正确的找零。

战利品袋

八个等级:普通、不凡、史诗、神话、传说、欧米伽、食物和附魔。右键点击打开一个,潜行点击打开整组。袋子可以掉落保证物品、加权随机池、原版战利品表,以及嵌套在其中的其他袋子。

只有普通和不凡等级的袋子可以在兑换台购买。竞技场钥匙永远无法购买。

命令

/uma(或更短的 /ums):

  • /uma tps — 真实的服务器性能,因为大多数模组报告有误:过去 100 个游戏刻的平均 TPS 和 MSPT(对比 50 毫秒预算)、该窗口内最差的单刻,以及按维度细分的 MSPT。
  • /uma ping [玩家] — 查看自己或任何其他人的延迟。
  • /uma spawners list | place | clear — 计数、重新放置或清除竞技场刷怪笼。
  • 还有 coliseum、difficulty、skills、bag 和 rebuild_arena 等子命令。

向袋子中添加你自己的战利品

这是大多数整合包会需要的部分。你可以在不重写现有袋子的情况下向它们添加掉落物——你的内容会叠加在模组的或另一个整合包的内容之上。

使用数据包(JSON)

在 data/<你的命名空间>/uma/loot_bag_additions/ 中放置一个文件。命名空间可以是任何你想要的内容:

{
  "tiers": ["legendary", "omega"],
  "entries": [
    { "item": "minecraft:netherite_ingot", "count": { "min": 1, "max": 3 }, "weight": 10 }
  ],
  "guaranteed": [
    { "item": "ultimatemodadditions:coin_20000", "count": 1 }
  ]
}
  • entries 进入随机池,按 weight(权重)抽取。
  • guaranteed 必定掉落。
  • 使用 tiers(整个稀有度,或 ["all"] 表示所有袋子)、bag(一个特定袋子)或 bags(一个列表)来指定目标袋子。这三者会叠加生效。

使用 /reload 重新加载。就是这样。

推荐:OpenLoader

普通数据包存在于单个世界的 datapacks/ 文件夹中,这意味着你必须将其复制到每个新世界。OpenLoader 允许你将相同的文件放在 config/openloader/data/ 中,它们会在 每个 世界中自动加载——对于整合包或服务器来说好得多。路径是相同的,只需 config/openloader/data/<你的命名空间>/uma/loot_bag_additions/…。

使用 KubeJS

如果安装了 KubeJS,模组会添加一个带有链式构建器 API 的全局 UMA 绑定。它放在 kubejs/server_scripts/ 中——数据随数据包一起加载,所以启动脚本和客户端脚本不起作用。

// 铜锭出现在每个袋子里
UMA.bagDrop('nadien_tweaks:copper_everywhere')
  .allTiers()
  .entry('minecraft:copper_ingot', 2, 8, 10)   // 物品,最小数量,最大数量,权重
  .register()

// 仅传说袋子中必出一个下界之星
UMA.bagDrop('nadien_tweaks:legendary_star')
  .bag('ultimatemodadditions:legendary')
  .guaranteed('minecraft:nether_star', 1)
  .register()

// 仅高等级
UMA.bagDrop('nadien_tweaks:high_tiers')
  .tiers('epic', 'mythic', 'legendary', 'omega')
  .entry('minecraft:enchanted_golden_apple', 1, 2, 4)
  .register()

没有 .register() 就什么都不会发生——这是人们经常忘记的一点。

你也可以构建全新的袋子。这也放在 kubejs/server_scripts/ 中——不是 startup_scripts/,也不是 client_scripts/。UMA 数据随数据包一起加载,所以从启动或客户端脚本注册的任何东西在世界加载时都会被丢弃,模组会在日志中警告你:

// kubejs/server_scripts/my_bags.js
UMA.lootBag('nadien_tweaks:mythic')
  .name('神话袋子')
  .tier('mythic')
  .rolls(5, 7)
  .guaranteed('ultimatemodadditions:coin_10000', 1)
  .entry('minecraft:netherite_block', 1, 2, 10)
  .bagEntry('ultimatemodadditions:enchantment', 5)     // 袋子里的袋子
  .lootTableEntry('minecraft:chests/end_city_treasure', 0.5, 3)
  .register()

相同的 UMA 绑定也可以构建难度、生物规则、交易、技能、技能经验来源和技能要求。错误的条目会记录其 ID 并被跳过——它们永远不会破坏整合包的其他部分。


你可以定义的其他所有内容

文件夹 控制的内容
uma/difficulty/ 生物缩放配置
uma/mob_rules/ 哪个生物使用哪个难度,以及它的掉落物
uma/loot_bags/ 袋子内容
uma/loot_bag_additions/ 对现有袋子的附加掉落物
uma/trades/ 兑换台报价
uma/skills/ 技能、特性和特长
uma/skill_xp/ 每项技能的经验来源
uma/skill_requirements/ 在达到特定等级前被锁定的内容

它们每一个都是 data/<你的命名空间>/uma/… 下的纯 JSON 文件,使用 /reload 重新加载。以下是每种类型的一个示例,以便你了解格式:

一个全新的袋子 — uma/loot_bags/boss_reward.json

{
  "name": "Boss 奖励",
  "tier": "legendary",
  "color": 16733525,
  "rolls": { "min": 3, "max": 5 },
  "unique_rolls": true,
  "announce": true,
  "guaranteed": [
    { "item": "ultimatemodadditions:coin_20000", "count": { "min": 1, "max": 2 } }
  ],
  "entries": [
    { "item": "minecraft:netherite_ingot", "count": { "min": 1, "max": 2 }, "weight": 10 },
    { "item": "minecraft:elytra", "count": 1, "weight": 2 },
    { "bag": "ultimatemodadditions:enchantment", "count": 1, "weight": 6 },
    { "loot_table": "minecraft:chests/end_city_treasure", "weight": 4 }
  ]
}

一个商店报价 — uma/trades/boss_reward.json

{
  "name": "Boss 奖励",
  "category": "bags",
  "price": 50000,
  "cost": [ { "item": "minecraft:emerald", "count": 8 } ],
  "result": { "bag": "nadien_tweaks:boss_reward", "count": 1 },
  "requirements": [ { "skill": "ultimatemodadditions:attack", "level": 15 } ],
  "sort_order": 90
}

price 是金钱,可以用任意组合的硬币支付,包括找零。

一个生物的掉落物 — uma/mob_rules/wither_skeletons.json

{
  "priority": 50,
  "match": { "entities": ["minecraft:wither_skeleton"] },
  "difficulty": "ultimatemodadditions:hard",
  "experience_multiplier": 2.0,
  "drops": [
    { "item": "minecraft:netherite_scrap", "count": { "min": 1, "max": 2 }, "chance": 0.25 }
  ],
  "coins": [
    { "tier": "1000", "count": 1, "chance": 0.3 }
  ],
  "bags": [
    { "bag": "nadien_tweaks:boss_reward", "chance": 0.05 }
  ]
}

一个生物有多强 — uma/difficulty/brutal.json

{
  "name": "残酷",
  "health_multiplier": 10.0,
  "damage_multiplier": 4.0,
  "speed_multiplier": 1.2,
  "armor_bonus": 8.0,
  "experience_multiplier": 3.0,
  "coin_multiplier": 8.0,
  "bag_chance_bonus": 0.1,
  "extra_loot_rolls": 2,
  "glowing": true,
  "effects": [
    { "effect": "minecraft:strength", "amplifier": 1, "duration": -1, "chance": 1.0 }
  ],
  "equipment": {
    "mainhand": { "item": "minecraft:netherite_sword", "chance": 0.5, "drop_chance": 0.02 }
  }
}

一项新技能 — uma/skills/alchemy.json

{
  "name": "炼金术",
  "icon": "minecraft:brewing_stand",
  "color": 10181046,
  "max_level": 20,
  "xp_base": 40,
  "xp_growth": 1.25,
  "description": ["药水和其他奇怪的东西。"],
  "traits": [
    { "attribute": "minecraft:generic.luck", "per_level": 0.05, "start_level": 2 }
  ],
  "perks": [
    { "level": 5, "name": "蒸馏师", "description": ["+0.5 幸运"],
      "attribute": "minecraft:generic.luck", "amount": 0.5 }
  ],
  "effects": [
    { "effect": "minecraft:water_breathing", "level": 8 },
    { "effect": "minecraft:night_vision", "level": 18 }
  ]
}

start_level: 2 使其在每一级都能成长,而 effects 从你指定的等级开始授予永久药水效果。将其与 uma/skill_xp/alchemy_brewing.json 配对以指定其经验来源,并与 uma/skill_requirements/potions.json 配对以解锁某些内容:

{ "skill": "nadien_tweaks:alchemy", "actions": ["craft"], "match": { "items": ["minecraft:potion"] }, "amount": 8 }
{ "match": { "items": ["minecraft:potion"] }, "actions": ["use"],
  "requirements": [ { "skill": "nadien_tweaks:alchemy", "level": 4 } ] }

完整的文档、每个字段以及更多示例都在 wiki 中:一页涵盖所有 JSON 类型、整个 KubeJS API、逐级技能表和一个完整的示例。