From 7230d562e5f94dc5413bc372addb5d5ea69434e7 Mon Sep 17 00:00:00 2001 From: Neha YoruNina <836193631@qq.com> Date: Sun, 21 Jan 2024 22:15:01 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E7=81=BE=E5=8F=98Boss?= =?UTF-8?q?=E5=99=A8=E5=AE=98=E8=AE=BE=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../quests/chapters/1048F50BAEFE652C.snbt | 446 ++++++++++++++++-- config/ftbquests/quests/chapters/2.snbt | 4 +- .../quests/chapters/619A3CDD61EDA493.snbt | 6 +- kubejs/assets/kubejs/lang/zh_cn.json | 25 +- .../item/organs/food/mini_vampire.png | Bin 0 -> 318 bytes .../{blooded_chip.png => ancient_chip.png} | Bin .../item/organs/{magic => relics}/bad_ink.png | Bin .../organs/relics/ender_guard_eyeball.png | Bin 0 -> 349 bytes .../item/organs/relics/harbinger_lung.png | Bin 0 -> 335 bytes .../item/organs/relics/netherite_muscle.png | Bin 0 -> 370 bytes kubejs/client_scripts/jei.js | 6 +- .../boss/ancient_remnant.json | 5 + .../entity_assignment/boss/common_boss.json | 4 - .../boss/ender_guardian.json | 5 + .../boss/netherite_monstrosity.json | 5 + .../entity_assignment/boss/void_blossom.json | 5 + .../kubejs/types/boss/ancient_remnant.json | 113 +++++ .../kubejs/types/boss/ender_guardian.json | 112 +++++ .../types/boss/netherite_monstrosity.json | 113 +++++ .../data/kubejs/types/boss/the_harbinger.json | 2 +- .../data/kubejs/types/boss/void_blossom.json | 112 +++++ kubejs/server_scripts/curios/charm_recipes.js | 2 + kubejs/server_scripts/event_stream.js | 1 - kubejs/server_scripts/organ/active_effect.js | 2 +- kubejs/server_scripts/organ/player_bear.js | 70 +++ .../organ/{entity_hurt.js => player_hurt.js} | 77 +-- kubejs/server_scripts/organ/player_tick.js | 16 +- kubejs/server_scripts/recipes/bio_forging.js | 2 +- kubejs/server_scripts/recipes/common.js | 2 +- kubejs/server_scripts/utils/common.js | 18 + kubejs/startup_scripts/organ_register.js | 89 +++- 31 files changed, 1090 insertions(+), 152 deletions(-) create mode 100644 kubejs/assets/kubejs/textures/item/organs/food/mini_vampire.png rename kubejs/assets/kubejs/textures/item/organs/relics/{blooded_chip.png => ancient_chip.png} (100%) rename kubejs/assets/kubejs/textures/item/organs/{magic => relics}/bad_ink.png (100%) create mode 100644 kubejs/assets/kubejs/textures/item/organs/relics/ender_guard_eyeball.png create mode 100644 kubejs/assets/kubejs/textures/item/organs/relics/harbinger_lung.png create mode 100644 kubejs/assets/kubejs/textures/item/organs/relics/netherite_muscle.png create mode 100644 kubejs/data/kubejs/entity_assignment/boss/ancient_remnant.json create mode 100644 kubejs/data/kubejs/entity_assignment/boss/ender_guardian.json create mode 100644 kubejs/data/kubejs/entity_assignment/boss/netherite_monstrosity.json create mode 100644 kubejs/data/kubejs/entity_assignment/boss/void_blossom.json create mode 100644 kubejs/data/kubejs/types/boss/ancient_remnant.json create mode 100644 kubejs/data/kubejs/types/boss/ender_guardian.json create mode 100644 kubejs/data/kubejs/types/boss/netherite_monstrosity.json create mode 100644 kubejs/data/kubejs/types/boss/void_blossom.json create mode 100644 kubejs/server_scripts/organ/player_bear.js rename kubejs/server_scripts/organ/{entity_hurt.js => player_hurt.js} (79%) create mode 100644 kubejs/server_scripts/utils/common.js diff --git a/config/ftbquests/quests/chapters/1048F50BAEFE652C.snbt b/config/ftbquests/quests/chapters/1048F50BAEFE652C.snbt index a0d39e51..dee6a4e4 100644 --- a/config/ftbquests/quests/chapters/1048F50BAEFE652C.snbt +++ b/config/ftbquests/quests/chapters/1048F50BAEFE652C.snbt @@ -66,8 +66,8 @@ type: "item" }] title: "糖果心" - x: -8.75d - y: 3.0d + x: -5.25d + y: 10.25d } { dependencies: ["6794388AA5357126"] @@ -95,8 +95,8 @@ type: "checkmark" }] title: "魔法使与糖果心" - x: -7.75d - y: 1.75d + x: -4.25d + y: 9.0d } { dependencies: ["6662469DC72EA384"] @@ -141,7 +141,7 @@ type: "checkmark" }] title: "Boss遗物器官" - x: -4.25d + x: -5.75d y: 1.75d } { @@ -169,8 +169,8 @@ item: "kubejs:candy_pancreas" type: "item" }] - x: -7.75d - y: 3.0d + x: -4.25d + y: 10.25d } { dependencies: ["795DE8D8EF4D3A01"] @@ -191,8 +191,8 @@ item: "kubejs:candy_stomach" type: "item" }] - x: -6.75d - y: 3.0d + x: -3.25d + y: 10.25d } { dependencies: ["795DE8D8EF4D3A01"] @@ -213,8 +213,8 @@ item: "kubejs:magic_spine" type: "item" }] - x: -7.75d - y: 4.0d + x: -4.25d + y: 11.25d } { dependencies: ["795DE8D8EF4D3A01"] @@ -247,8 +247,8 @@ type: "item" } ] - x: -8.75d - y: 4.0d + x: -5.25d + y: 11.25d } { dependencies: ["795DE8D8EF4D3A01"] @@ -269,8 +269,8 @@ item: "kubejs:magic_muscle" type: "item" }] - x: -6.75d - y: 4.0d + x: -3.25d + y: 11.25d } { dependencies: ["6794388AA5357126"] @@ -333,73 +333,123 @@ type: "checkmark" }] title: "革命机械" - x: -0.5d + x: 0.0d y: 1.75d } { dependencies: ["7CFE03E2610EA31B"] + description: [ + "革命系列的&6核心器官&r,通过消耗煤炭来获得临时的效果增益。" + "" + "&c熔火效果&r每有一级,将会提供额外&63&r点的固定攻击伤害加成。" + ] id: "55C12BA0AF6395BA" + rewards: [{ + id: "5805F720AB0034D2" + item: "lightmanscurrency:coin_gold" + type: "item" + }] + subtitle: "熔炉的火焰温暖胸膛" tasks: [{ id: "0A06133224D37B30" item: "kubejs:furnace_core" type: "item" }] - x: -1.5d + x: -1.0d y: 3.0d } { dependencies: ["7CFE03E2610EA31B"] + description: [ + "革命系列的&6核心器官&r,通过消耗煤炭来获得临时的效果增益。" + "" + "&c心火效果&r会在buff仅有5s时触发心火暴击效果,在效果期间伤害会变为&2原伤害 * (1.0 * 效果等级 + 1.5)&r的伤害值。" + ] id: "5A21F4A601331B62" + rewards: [{ + id: "3E0BB55225790C5D" + item: "lightmanscurrency:coin_gold" + type: "item" + }] + subtitle: "心火熊熊燃烧,涌出胸膛" tasks: [{ id: "370448F04E7517CB" item: "kubejs:burning_heart" type: "item" }] - x: -0.5d + x: 0.0d y: 3.0d } { dependencies: ["7CFE03E2610EA31B"] + description: ["根据其放置在胸腔中的数量,提供额外的&c心火/熔火&r等级。"] id: "7C75261D5B3850A1" + rewards: [{ + id: "243A2555A0DF3169" + item: "lightmanscurrency:coin_gold" + type: "item" + }] + subtitle: "齿轮嘎吱作响" tasks: [{ id: "4E8DA24D4EEE3859" item: "kubejs:revolution_gear" type: "item" }] - x: 0.5d + x: 1.0d y: 3.0d } { dependencies: ["7CFE03E2610EA31B"] + description: ["根据革命系列器官的数量给予额外的&2生命值&r。"] id: "2B68E92732922528" + rewards: [{ + id: "176B9BBF7B56D612" + item: "lightmanscurrency:coin_gold" + type: "item" + }] + subtitle: "线缆链接着胸腔中的一切" tasks: [{ id: "22E7533783E26139" item: "kubejs:revolution_cable" type: "item" }] - x: -1.5d + x: -1.0d y: 4.0d } { dependencies: ["7CFE03E2610EA31B"] + description: ["根据其放置在胸腔中的数量,提供额外的&c心火/熔火&r持续时间长。"] id: "0D1CC41165B1B371" + rewards: [{ + id: "36C77B5564DBE9C2" + item: "lightmanscurrency:coin_gold" + type: "item" + }] + subtitle: "火焰燃烧永无休止" tasks: [{ id: "424673065E35B4CD" item: "kubejs:revolution_relay" type: "item" }] - x: -0.5d + x: 0.0d y: 4.0d } { dependencies: ["7CFE03E2610EA31B"] + description: ["根据其放置在胸腔中的数量,减少&c心火/熔火&r持续时间长。"] id: "407F877FE481FDB5" + rewards: [{ + id: "2CC8039C7335A716" + item: "lightmanscurrency:coin_gold" + type: "item" + }] + subtitle: "火焰变得更加明亮" tasks: [{ id: "59DBDD2FBCCD8B21" item: "kubejs:revolution_delay" type: "item" }] - x: 0.5d + x: 1.0d y: 4.0d } { @@ -412,12 +462,17 @@ hide_dependent_lines: true icon: "kubejs:telescopic_attack_arm" id: "437705D28D92B135" + rewards: [{ + id: "5D47BBADBCFA005D" + item: "lightmanscurrency:coin_gold" + type: "item" + }] shape: "rsquare" subtitle: "成长为我所想" tasks: [{ - id: "2901FD4568C245E6" - title: "我已了解" - type: "checkmark" + id: "5375B1C61A990743" + item: "kubejs:empty_organ_charm" + type: "item" }] title: "进化器官" x: 3.25d @@ -455,7 +510,7 @@ { dependencies: ["437705D28D92B135"] description: [ - "伸缩臂可以通过容器提升为&4伸缩攻击臂&r" + "伸缩臂可以通过容器提升为&6伸缩攻击臂&r" "" "同时,你也可以通过机械手的配方将其升级为&6伸缩工具臂&r" ] @@ -562,8 +617,8 @@ } type: "item" }] - x: -3.25d - y: 7.0d + x: -6.25d + y: 5.0d } { dependencies: ["6662469DC72EA384"] @@ -688,8 +743,8 @@ } type: "item" }] - x: -5.25d - y: 6.0d + x: -9.25d + y: 4.0d } { dependencies: ["6662469DC72EA384"] @@ -704,7 +759,7 @@ item: "lightmanscurrency:coin_gold" type: "item" }] - subtitle: "来自最幽深地狱的视线" + subtitle: "你必须低下头,心生敬畏" tasks: [{ id: "1781DF0940904B8C" item: { @@ -714,8 +769,8 @@ } type: "item" }] - x: -4.25d - y: 6.0d + x: -9.25d + y: 5.0d } { dependencies: ["6662469DC72EA384"] @@ -736,8 +791,8 @@ } type: "item" }] - x: -3.25d - y: 6.0d + x: -2.25d + y: 4.0d } { dependencies: ["6662469DC72EA384"] @@ -758,8 +813,8 @@ } type: "item" }] - x: -4.25d - y: 7.0d + x: -7.25d + y: 5.0d } { dependencies: ["6662469DC72EA384"] @@ -780,8 +835,8 @@ } type: "item" }] - x: -5.25d - y: 7.0d + x: -8.25d + y: 3.0d } { dependencies: ["6662469DC72EA384"] @@ -843,8 +898,8 @@ } type: "item" }] - x: 5.25d - y: 3.0d + x: 6.25d + y: 5.0d } { dependencies: ["235753780EE3782C"] @@ -948,12 +1003,19 @@ } type: "item" }] - x: 6.25d - y: 5.0d + x: 5.25d + y: 3.0d } { dependencies: ["309791281FE1F06A"] + description: ["一个位置&2检测类型&r的器官,能够根据周围食物器官的数量给予额外的生命值加成。"] id: "0CEDF28C965FF8E5" + rewards: [{ + id: "5B71184543C55AD8" + item: "lightmanscurrency:coin_gold" + type: "item" + }] + subtitle: "食物与健康" tasks: [{ id: "1A4C6BC3E715C638" item: { @@ -963,12 +1025,19 @@ } type: "item" }] - x: 9.0d + x: 8.5d y: 3.0d } { dependencies: ["309791281FE1F06A"] + description: ["基础的食物器官。"] id: "5B73C3290177E214" + rewards: [{ + id: "705550EB3EC4F754" + item: "lightmanscurrency:coin_gold" + type: "item" + }] + subtitle: "最常见的食物器官" tasks: [{ id: "0D12A6E81A52DDB4" item: { @@ -978,12 +1047,19 @@ } type: "item" }] - x: 10.0d + x: 9.5d y: 3.0d } { dependencies: ["309791281FE1F06A"] + description: ["在食用幸运饼干时概率获得。"] id: "50BC3F4DA0F1BC9D" + rewards: [{ + id: "2455F73E408EC695" + item: "lightmanscurrency:coin_gold" + type: "item" + }] + subtitle: "究极幸运星" tasks: [{ id: "58136D83DEE74095" item: { @@ -993,12 +1069,19 @@ } type: "item" }] - x: 11.0d + x: 10.5d y: 3.0d } { dependencies: ["309791281FE1F06A"] + description: ["在食用&2饼干&r和&2奶油&r时会获得相当持久的特殊效果。"] id: "450518C1E9B5DBCB" + rewards: [{ + id: "705B51E06059840D" + item: "lightmanscurrency:coin_gold" + type: "item" + }] + subtitle: "廉价奶油物品" tasks: [{ id: "2D0238D40E8300B0" item: { @@ -1008,7 +1091,7 @@ } type: "item" }] - x: 9.0d + x: 8.5d y: 4.0d } { @@ -1022,17 +1105,19 @@ type: "checkmark" }] title: "食物器官" - x: 10.0d + x: 9.5d y: 1.75d } { dependencies: ["4F074296A3A9D918"] + description: ["在奔跑时能够提供资源点。当玩家移动速度较快时,佩戴多个发条,能够提供相当可观的资源点数提升。"] id: "2A8B1C05CF6801A8" rewards: [{ id: "233C5A031F4E96F9" item: "lightmanscurrency:coin_gold" type: "item" }] + subtitle: "仓鼠轮?" tasks: [{ id: "7A124C6421679BDE" item: { @@ -1047,12 +1132,14 @@ } { dependencies: ["4F074296A3A9D918"] + description: ["能够将资源点数转化成为伤害的器官,在&6资源类Build&r中起到&6核心部件&r的作用。"] id: "209E99AA8A803BE9" rewards: [{ id: "6524369466C4750B" item: "lightmanscurrency:coin_gold" type: "item" }] + subtitle: "如今,工厂中的血肉化为熔岩" tasks: [{ id: "2580EB7EF132E366" item: { @@ -1067,7 +1154,18 @@ } { dependencies: ["7CFE03E2610EA31B"] + description: [ + "手持&b水瓶&r右键,即可获得少量的资源点数。" + "" + "如果身处在&c心火/熔火&r状态下,其会将&c心火/熔火&r转换为对应的另一个状态,并且延长效果持续时长。根据效果等级,可以给予额外的大量资源点数。" + ] id: "4C96584263F15A3C" + rewards: [{ + id: "49CF05D92EB40594" + item: "lightmanscurrency:coin_gold" + type: "item" + }] + subtitle: "正是蒸汽引领了我们的第一次革命" tasks: [{ id: "1AA74E7782D8ABCF" item: { @@ -1077,13 +1175,19 @@ } type: "item" }] - x: -1.5d + x: -1.0d y: 5.0d } { dependencies: ["309791281FE1F06A"] - description: [""] + description: ["在胸腔中摆放位置距离胸腔中心越远,提供的生命值越多。"] id: "40DE4D7FB506EEF7" + rewards: [{ + id: "30383E8596B92F36" + item: "lightmanscurrency:coin_gold" + type: "item" + }] + subtitle: "吃一口,凉凉的。" tasks: [{ id: "38F7A9F12962699A" item: { @@ -1093,7 +1197,7 @@ } type: "item" }] - x: 10.0d + x: 9.5d y: 4.0d } { @@ -1200,7 +1304,7 @@ description: [ "在下界的任意奖励品箱或者维度地牢的普通等级奖励箱中有概率掉落。" "" - "在激活时能够稳定提供&2200点资源点数上限&r,并且能够将红石块即时转化为100资源点数。" + "在激活时能够稳定提供&2100点资源点数上限&r,并且能够将红石块即时转化为100资源点数。" ] id: "514236B73891412F" rewards: [{ @@ -1258,6 +1362,7 @@ } { dependencies: ["4F074296A3A9D918"] + description: ["能够极大幅度的提高呼吸效率. . .除此之外别无他用。"] id: "487F865668983381" rewards: [{ id: "2CD645DCF3C8596B" @@ -1279,6 +1384,7 @@ } { dependencies: ["4F074296A3A9D918"] + description: ["媲美T3级别的防御力提升,缺点在于会降低移动速度。"] id: "5FBF5D70BCFBD9AF" rewards: [{ id: "742CB0CBEAB0D9C5" @@ -1300,6 +1406,7 @@ } { dependencies: ["4F074296A3A9D918"] + description: ["媲美T3级别的防御力提升,缺点在于会降低移动速度。"] id: "2608FB8AF6185F62" rewards: [{ id: "18B74994CE09656B" @@ -1319,6 +1426,241 @@ x: -6.75d y: 11.25d } + { + dependencies: ["6662469DC72EA384"] + description: ["可以在&c聚沙巨魔&r的胸腔中获得,能够提供玩家在沙地上的额外移动buff。"] + id: "69E1AE4B87F60DF1" + rewards: [{ + id: "3DA2DCCAFBBEA9F9" + item: "lightmanscurrency:coin_gold" + type: "item" + }] + subtitle: "沙地能手" + tasks: [{ + id: "41751E18A3F5220D" + item: { + Count: 1b + id: "kubejs:sand_bone" + tag: { } + } + type: "item" + }] + x: -2.25d + y: 3.0d + } + { + dependencies: ["6662469DC72EA384"] + description: [ + "在&c敲钟人&r的胸腔中获得. . .但绝大多数玩家会在&2早期的Wares任务&r中就已经得到。" + "" + "能够提供给玩家稳定的拾取死亡掉落物品的方法。" + ] + id: "24C231712698A9F9" + rewards: [{ + id: "4AA4D03C984924D8" + item: "lightmanscurrency:coin_gold" + type: "item" + }] + subtitle: "魂归亡土" + tasks: [{ + id: "762F546E2E88C2A4" + item: { + Count: 1b + id: "kubejs:ring_for_home" + tag: { } + } + type: "item" + }] + x: -7.25d + y: 3.0d + } + { + dependencies: ["6662469DC72EA384"] + description: [ + "在&c末影守卫&r的胸腔中可以发现。" + "" + "其给予的负面效果并非是全量的——只有&2少部分负面效果&r存在在随机池中,包括:缓慢、中毒、灼烧、虚弱、凋零、眩晕、流血、诅咒。" + ] + id: "2B254AA97849DC42" + rewards: [{ + id: "5A782F5AED7699E3" + item: "lightmanscurrency:coin_gold" + type: "item" + }] + subtitle: "它从另一维度把信息带了回来" + tasks: [{ + id: "5E1186883A31A9E9" + item: { + Count: 1b + id: "kubejs:ender_guard_eyeball" + tag: { } + } + type: "item" + }] + x: -6.25d + y: 3.0d + } + { + dependencies: ["6662469DC72EA384"] + description: [ + "在&c焰魔&r的胸腔中获得。" + "" + "玩家在着火状态下会逐渐累积&2最高为5级的力量效果&r,能够造成相当可观额外输出。但需要注意力量的持续时间极短,而判定时间间隔为2s,因此很容导致buff断续。" + ] + id: "271802F527EBA289" + rewards: [{ + id: "496B81283CED3C68" + item: "lightmanscurrency:coin_gold" + type: "item" + }] + subtitle: "强力的输出器官" + tasks: [{ + id: "513EB3734EF98ED4" + item: { + Count: 1b + id: "kubejs:embers_liver" + tag: { } + } + type: "item" + }] + x: -8.25d + y: 4.0d + } + { + dependencies: ["6662469DC72EA384"] + description: [ + "在&c下界合金巨兽&r的胸腔中获得。" + "" + "能够让攻击伤害扩散到周围单位身上,但此扩散伤害并不认为是玩家造成的伤害,且不继承其他器官的攻击特殊效果。" + ] + id: "070F4AA2D5E3671F" + rewards: [{ + id: "462B23FB914833DA" + item: "lightmanscurrency:coin_gold" + type: "item" + }] + subtitle: "狂热战士" + tasks: [{ + id: "79A55241EBF146D3" + item: { + Count: 1b + id: "kubejs:netherite_muscle" + tag: { } + } + type: "item" + }] + x: -7.25d + y: 4.0d + } + { + dependencies: ["6662469DC72EA384"] + id: "6E082577F9B3D5B0" + rewards: [{ + id: "5491E3B6B2D55DEC" + item: "lightmanscurrency:coin_gold" + type: "item" + }] + tasks: [{ + id: "229D5814E728D022" + item: { + Count: 1b + id: "kubejs:harbinger_lung" + tag: { } + } + type: "item" + }] + x: -6.25d + y: 4.0d + } + { + dependencies: ["6662469DC72EA384"] + id: "3F95DAB6801AC2E3" + rewards: [{ + id: "077C253EDA62C0CD" + item: "lightmanscurrency:coin_gold" + type: "item" + }] + tasks: [{ + id: "5494E890A50E5838" + item: { + Count: 1b + id: "kubejs:ancient_chip" + tag: { } + } + type: "item" + }] + x: -8.25d + y: 5.0d + } + { + dependencies: ["6662469DC72EA384"] + description: [ + "&m&7用于填充Boss器官使用的通用器官模板&r&r" + "" + "中规中矩的属性,可以用于不知道放什么的情况下使用。" + ] + id: "748B8B95691F809B" + subtitle: "长久岁月中. . .肌肉消融为金属" + tasks: [{ + id: "6296C205331927D1" + item: { + Count: 1b + id: "kubejs:relic_metal_plate" + tag: { } + } + type: "item" + }] + x: -9.25d + y: 3.0d + } + { + dependencies: ["309791281FE1F06A"] + description: [ + "通过器官容器进化&6二重身&r获得。" + "" + "能够在&2生命值低于30%的时候给予玩家吸血效果&r,20%的时候效果变化为2级,10%的时候变化为3级。" + ] + id: "54066B06BF4DCAD7" + rewards: [{ + id: "429274F36E753A6F" + item: "lightmanscurrency:coin_gold" + type: "item" + }] + subtitle: "它好像有点焦急" + tasks: [{ + id: "420FCE6733A36FDA" + item: { + Count: 1b + id: "kubejs:mini_vampire" + tag: { } + } + type: "item" + }] + x: 10.5d + y: 4.0d + } + { + dependencies: ["4F074296A3A9D918"] + description: ["桥接了&c玫瑰&r、&2革命&r、&6资源&r类器官的重要兼容性器官。成型后能够为玩家提供巨量的资源点数。"] + id: "0843824CD5F1C712" + rewards: [{ + id: "236031DF7F51994E" + item: "lightmanscurrency:coin_gold" + type: "item" + }] + subtitle: "Power Up!" + tasks: [{ + id: "20B01C7DD0952A2C" + item: { + Count: 1b + id: "kubejs:enery_bottle_max" + tag: { } + } + type: "item" + }] + x: -8.75d + y: 12.25d + } ] title: "胸腔:器官收集指南" } diff --git a/config/ftbquests/quests/chapters/2.snbt b/config/ftbquests/quests/chapters/2.snbt index f7d428c8..46e036f2 100644 --- a/config/ftbquests/quests/chapters/2.snbt +++ b/config/ftbquests/quests/chapters/2.snbt @@ -836,9 +836,9 @@ description: [ "在通常地牢的探索过程中,偶尔你会遇到名为神恩项链的特殊饰品。携带着它击败&2具有强大破坏力和再生能力的boss&r,将会使其完全充能。" "" - "与此同时,在维度地牢的特殊沙漠主题副本,你可以寻找到建立在命令方块之上的召唤祭坛。通过使用该祭坛,以满溢神恩项链作为召唤催化剂,即可随机召唤出&2一名神恩Boss&r。" + "与此同时,在维度地牢的特殊沙漠主题副本,你可以寻找到建立在命令方块之上的召唤祭坛。通过使用该祭坛,以满溢神恩项链作为召唤催化剂,即可随机召唤出一名&c神恩Boss&r。" "" - "神恩Boss的强度并不高,因为其具有的能力与原本Boss并无二样。但是对于玩家的DPS有着相对较高的要求。在所有的阶段,神恩Boss拥有着常驻&61%最大生命值/s&r的生命恢复效率,并且,&2在每个33%血量的阶段,其会随机获得一种伤害免疫类型&r。并且在生命值的最后33%时,其会&2进行180s的DPS Check&r,如果没有在Buff消退前击败Boss,其会&4回复所有生命力&r,并且额外获得一种免疫种类。" + "&c神恩Boss&r的强度并不高,因为其具有的能力与原本Boss并无二样。但是对于玩家的DPS有着相对较高的要求。在所有的阶段,神恩Boss拥有着常驻&61%最大生命值/s&r的生命恢复效率,并且,&2在每个33%血量的阶段,其会随机获得一种伤害免疫类型&r。并且在生命值的最后33%时,其会&2进行180s的DPS Check&r,如果没有在Buff消退前击败Boss,其会&4回复所有生命力&r,并且额外获得一种免疫种类。" "" "{@pagebreak}" "为了成功击败神恩Boss,你需要拥有&2魔法、远程、近战&r三种类型的有效攻击手段。" diff --git a/config/ftbquests/quests/chapters/619A3CDD61EDA493.snbt b/config/ftbquests/quests/chapters/619A3CDD61EDA493.snbt index 51953126..fac154c7 100644 --- a/config/ftbquests/quests/chapters/619A3CDD61EDA493.snbt +++ b/config/ftbquests/quests/chapters/619A3CDD61EDA493.snbt @@ -114,7 +114,11 @@ { can_repeat: true dependencies: ["0C769BB94D282CC6"] - description: ["怪物会随机从铁甲、锁链甲、钻石甲、下界合金甲间随机选取盔甲穿戴。"] + description: [ + "怪物会随机从铁甲、锁链甲、钻石甲、下界合金甲间随机选取盔甲穿戴。" + "" + "这同样意味着你无法直接对怪物进行开胸。" + ] icon: { Count: 1b id: "unusualprehistory:sloth_pouch_armor" diff --git a/kubejs/assets/kubejs/lang/zh_cn.json b/kubejs/assets/kubejs/lang/zh_cn.json index 41056177..7fbf8d68 100644 --- a/kubejs/assets/kubejs/lang/zh_cn.json +++ b/kubejs/assets/kubejs/lang/zh_cn.json @@ -109,6 +109,7 @@ "item.kubejs.lucky_cookie_organ": "幸运饼干", "item.kubejs.cream_cookie_heart": "快乐奶油饼干心", "item.kubejs.mini_slime": "迷你史莱姆", + "item.kubejs.mini_vampire": "迷你吸血鬼", "item.kubejs.diamond_bottle": "钻石风暴瓶", "item.kubejs.desire_of_midas": "迈达斯之愿", "item.kubejs.rapier_wand": "新月细剑", @@ -119,6 +120,9 @@ "item.kubejs.blood_moon_wand": "鲜血之月魔杖", "item.kubejs.ring_for_home": "归魂亡铃", "item.kubejs.embers_liver": "余烬肝脏", + "item.kubejs.netherite_muscle": "下界合金肌肉", + "item.kubejs.ender_guard_eyeball": "末影守卫眼球", + "item.kubejs.harbinger_lung": "先驱者的肺", "item.kubejs.forbidden_fruit": "禁忌之果", "item.kubejs.executioner_blade_pieces": "行刑者剑刃碎片", "item.kubejs.huge_lung": "巨型肺脏", @@ -141,7 +145,7 @@ "item.kubejs.tamagotchi": "Tamagotchi!", "item.kubejs.enery_bottle_max": "满装能量瓶", "item.kubejs.revolution_steam_engine": "革命蒸汽机", - "item.kubejs.blooded_chip": "血污芯片", + "item.kubejs.ancient_chip": "远古芯片", "item.kubejs.red_ink": "红墨水", "item.kubejs.bad_ink": "坏水", "item.kubejs.lost_paradise": "失乐园", @@ -274,10 +278,14 @@ "kubejs.jei.flower_heart.1": "手持花之魔杖并向盛开的杜鹃丛献祭副手的花飘飘获得", "kubejs.jei.demon_eyeball.1": "恶魔之眼可以在下界铁掌的胸腔中获得", "kubejs.jei.parasitic_elf.1": "寄宿精灵可以在福尔图娜女爵的胸腔中获得", - "kubejs.jei.blooded_chip.1": "血污芯片可以在先驱者的胸腔中获得", + "kubejs.jei.ancient_chip.1": "远古芯片可以在远古遗魂的胸腔中获得", "kubejs.jei.embers_liver.1": "余烬肝脏可以在焰魔的胸腔中获得", + "kubejs.jei.netherite_muscle.1": "下界合金肌肉可以在下界合金巨兽的胸腔中获得", + "kubejs.jei.ender_guard_eyeball.1": "末影守卫的眼球可以在末影守卫的胸腔中获得", + "kubejs.jei.harbinger_lung.1": "先驱者的肺可以在先驱者的胸腔中获得", "kubejs.jei.bad_ink.1": "坏水可以在暗夜巫妖的胸腔中获得", "kubejs.jei.mini_slime.1": "手持玻璃瓶击杀史莱姆掉落", + "kubejs.jei.mini_vampire.1": "在器官容器中通过二重身进化获得", "kubejs.jei.blood_moon_wand.1": "在夜晚身着血腥教徒套装转化鲜血法杖获得", "kubejs.jei.ring_for_home.1": "归魂亡铃可以在敲钟人的胸腔中获得", "kubejs.jei.diamond_bottle.1": "在雷暴天手持水瓶右击钻石块获得", @@ -821,11 +829,18 @@ "kubejs.tooltips.demon_eyeball.6": "此效果唯一", "kubejs.tooltips.sand_bone.1": "无形的沙子凝聚成体", "kubejs.tooltips.sand_bone.2": "当玩家行走在沙子上时会获得速度Ⅱ效果", - "kubejs.tooltips.blooded_chip.1": "血液滋养了这些电路", - "kubejs.tooltips.blooded_chip.2": "弓箭击中目标时,箭矢越接近实体上部,伤害越高", + "kubejs.tooltips.ancient_chip.1": "时光滋养了这些电路", + "kubejs.tooltips.ancient_chip.2": "弓箭击中目标时,箭矢越接近实体上部,伤害越高", "kubejs.tooltips.embers_liver.1": "它一直在熊熊燃烧. . .", "kubejs.tooltips.embers_liver.2": "当你处于着火状态时,提供力量效果", "kubejs.tooltips.embers_liver.3": "力量等级每2秒提升1级,最高5级", + "kubejs.tooltips.netherite_muscle.1": "粉碎一切", + "kubejs.tooltips.netherite_muscle.2": "你的攻击总会尝试扩散到周围半径3范围内的所有生物身上", + "kubejs.tooltips.netherite_muscle.3": "但不会携带额外的攻击效果,仅造成伤害", + "kubejs.tooltips.ender_guard_eyeball.1": "它看到了另一个维度的信息", + "kubejs.tooltips.ender_guard_eyeball.2": "弓箭攻击会为敌人引发随机的负面效果", + "kubejs.tooltips.harbinger_lung.1": "从肺中喷吐出的灰烬能够缓解疼痛", + "kubejs.tooltips.harbinger_lung.2": "受伤时,会消耗等同于原伤害的资源点数来使伤害降低为原本的1/2", "kubejs.tooltips.nether_star_shard.1": "激活后为你提供", "kubejs.tooltips.nether_star_shard.2": "10%", "kubejs.tooltips.nether_star_shard.3": "暴击概率", @@ -879,6 +894,8 @@ "kubejs.tooltips.cream_cookie_heart.7": "效果互斥", "kubejs.tooltips.mini_slime.1": "吃一口,凉凉的", "kubejs.tooltips.mini_slime.2": "距离中心位置越远,激活后给予的生命值越多", + "kubejs.tooltips.mini_vampire.1": "它张牙舞爪的在你的胸膛里乱撞", + "kubejs.tooltips.mini_vampire.2": "在你血量低于30%时会给予你吸血效果,血量越低效果越强", "kubejs.tooltips.lung_template.1": "从无名肉块中取出的器官", "kubejs.tooltips.muscle_template.1": "从无名肉块中取出的器官", "kubejs.tooltips.heart_template.1": "从无名肉块中取出的器官", diff --git a/kubejs/assets/kubejs/textures/item/organs/food/mini_vampire.png b/kubejs/assets/kubejs/textures/item/organs/food/mini_vampire.png new file mode 100644 index 0000000000000000000000000000000000000000..41baaf0a9ec051550b333d97ec0990d1643dc63a GIT binary patch literal 318 zcmV-E0m1%>P)Px#_(?=TR5*=|Qn3ocFc5teC#gEQB;Z&mxQmnj>6iEm*$aY0I!Oz`p%h%t!CXw! zoOsZNzTA8F?onV~l)*%N@h4flPX(k#QFxgGgL5KjyW7d$Jehvg;GDc7lL2JOj3*-W zefg&A=X*wuaVBe}f&j6Dx~j4c821inBA}I`cz?BV6Sy}*gZ+p2f3RAw;RD6_bPD+8@j&0Ucshr}@mP4c zxZUqz_{_!CPvtY39M@ccMPi}O+HfDQkP-Y=V+^qnlLQyPt1*TK=cEPx$7fD1xR5*=eU>In?h)posC-pxz@ugd4V^xo#`R$WW|IxwQC!hY~G8nt&`2wgI z3eXKU?UVX{O6JD@U*3Pmh=nPc8~;DK^@_Ndcyj9%+@LS- zzvI=6HzCQg=`zTO%QJj?_nYC}?`I4h>+&$vV}t<%10uym`=tJ7c*(#ZBQDQy@$qH+ v{>KL@f+qc+lDQGT-wA={$oZ5RfC~Ts!o#;$z*_sJ00000NkvXXu0mjfcfOp# literal 0 HcmV?d00001 diff --git a/kubejs/assets/kubejs/textures/item/organs/relics/harbinger_lung.png b/kubejs/assets/kubejs/textures/item/organs/relics/harbinger_lung.png new file mode 100644 index 0000000000000000000000000000000000000000..1015e2045d02ec929bf2a2b5768309f9da7944cb GIT binary patch literal 335 zcmV-V0kHmwP)Px$2}wjjR5*?0k}*reP!Pv|iqa%X>n7$ULt6z)rR7QJSl*Bi;o@dLj;o?>!P$O+ z4jG(898z$t(7xJ5XqRS;i!L@#BaZ&zmgDYs_va4&g|d&x)%s7(p6gSu?SF!PH`#Oj ztl2oq`geWf7T<1AvPu9X$3U&@L4S8yiPS~y5z9YWV>7@jt9joNEuM6?6BtwYV`x842%|5076u0wIxyp-0Z%f zR7k5W5u#cQp!Epbu{cRCafX|8FK)3N3#~`R005KmjOWv9?zi5UU!5}<&x{swub@=8 h@-%TgFkS3#dI!x&M`2htOM(CZ002ovPDHLkV1gG6kZ1q^ literal 0 HcmV?d00001 diff --git a/kubejs/assets/kubejs/textures/item/organs/relics/netherite_muscle.png b/kubejs/assets/kubejs/textures/item/organs/relics/netherite_muscle.png new file mode 100644 index 0000000000000000000000000000000000000000..42a177de85ae8feb3b2c7cb82b891da364026440 GIT binary patch literal 370 zcmV-&0ge8NP)Px$EJ;K`R5*>zlA%rmK@f(&62xT`+1w#EcU7AdbqPoWnh*p*p?D5bf#4ac`XGIP zDg>&Ekg9U5p=nUtbA!0tmA2Og2a}AMo&W!5{vG)1=0h7(-?)%K>E8 z)}(drC1CcnAWc)^I3~&ks7NwvNsMVGY$MRj+6DyBy*py|^2PJLM?{FCX#WateGd+b zqM#@W;yC8)(qXRzkt*vrY*RlU#xR65g%ASs`5Y0UoCHFsvemfLJlEv_{dhpti|Sak z=bZMO)681!Ij743s$*%4+*%>J6|P4)Cl|J<)ruhmx{rqAo0SJ^D})eWx&oAw)u?4z z^0`?2Z11#r01jTq9;V<&71_J@YoINb+JnTHwJ+LGZoS&gV%z!dRR16G4fpeL``S@o Q@c;k-07*qoM6N<$f<{9 literal 0 HcmV?d00001 diff --git a/kubejs/client_scripts/jei.js b/kubejs/client_scripts/jei.js index cd847264..07675b1f 100644 --- a/kubejs/client_scripts/jei.js +++ b/kubejs/client_scripts/jei.js @@ -26,7 +26,11 @@ JEIEvents.information(event => { event.addItem('kubejs:diamond_bottle', Text.black({ "translate": "kubejs.jei.diamond_bottle.1" })) event.addItem('kubejs:blood_moon_wand', Text.black({ "translate": "kubejs.jei.blood_moon_wand.1" })) event.addItem('kubejs:pandora_inactive', Text.black({ "translate": "kubejs.jei.pandora_inactive.1" })) - event.addItem('kubejs:blooded_chip', Text.black({ "translate": "kubejs.jei.blooded_chip.1" })) + event.addItem('kubejs:ender_guard_eyeball', Text.black({ "translate": "kubejs.jei.ender_guard_eyeball.1" })) + event.addItem('kubejs:netherite_muscle', Text.black({ "translate": "kubejs.jei.netherite_muscle.1" })) + event.addItem('kubejs:harbinger_lung', Text.black({ "translate": "kubejs.jei.harbinger_lung.1" })) + event.addItem('kubejs:ancient_chip', Text.black({ "translate": "kubejs.jei.ancient_chip.1" })) + event.addItem('kubejs:mini_vampire', Text.black({ "translate": "kubejs.jei.mini_vampire.1" })) event.addItem('kubejs:ring_for_home', Text.black({ "translate": "kubejs.jei.ring_for_home.1" })) event.addItem('kubejs:embers_liver', Text.black({ "translate": "kubejs.jei.embers_liver.1" })) event.addItem('kubejs:bad_ink', Text.black({ "translate": "kubejs.jei.bad_ink.1" })) diff --git a/kubejs/data/kubejs/entity_assignment/boss/ancient_remnant.json b/kubejs/data/kubejs/entity_assignment/boss/ancient_remnant.json new file mode 100644 index 00000000..6136c09c --- /dev/null +++ b/kubejs/data/kubejs/entity_assignment/boss/ancient_remnant.json @@ -0,0 +1,5 @@ +{ + "chestcavity": "kubejs:types/boss/ancient_remnant.json", + "entities": ["cataclysm:ancient_remnant"] + } + \ No newline at end of file diff --git a/kubejs/data/kubejs/entity_assignment/boss/common_boss.json b/kubejs/data/kubejs/entity_assignment/boss/common_boss.json index 2eeba477..c13acbba 100644 --- a/kubejs/data/kubejs/entity_assignment/boss/common_boss.json +++ b/kubejs/data/kubejs/entity_assignment/boss/common_boss.json @@ -15,14 +15,10 @@ "somebosses:crimson_vampire", "somebosses:nameless_one", "somebosses:hand_head", - "cataclysm:netherite_monstrosity", - "cataclysm:ender_guardian", - "cataclysm:ancient_remnant", "goety:apostle", "goety:vizier", "invasioncodered:gashslit", "irons_spellbooks:dead_king", - "bosses_of_mass_destruction:void_blossom", "bosses_of_mass_destruction:obsidilith", "meetyourfight:rosalyne", "meetyourfight:swampjaw", diff --git a/kubejs/data/kubejs/entity_assignment/boss/ender_guardian.json b/kubejs/data/kubejs/entity_assignment/boss/ender_guardian.json new file mode 100644 index 00000000..8c70d633 --- /dev/null +++ b/kubejs/data/kubejs/entity_assignment/boss/ender_guardian.json @@ -0,0 +1,5 @@ +{ + "chestcavity": "kubejs:types/boss/ender_guardian.json", + "entities": ["cataclysm:ender_guardian"] + } + \ No newline at end of file diff --git a/kubejs/data/kubejs/entity_assignment/boss/netherite_monstrosity.json b/kubejs/data/kubejs/entity_assignment/boss/netherite_monstrosity.json new file mode 100644 index 00000000..9156b44b --- /dev/null +++ b/kubejs/data/kubejs/entity_assignment/boss/netherite_monstrosity.json @@ -0,0 +1,5 @@ +{ + "chestcavity": "kubejs:types/boss/netherite_monstrosity.json", + "entities": ["cataclysm:netherite_monstrosity"] + } + \ No newline at end of file diff --git a/kubejs/data/kubejs/entity_assignment/boss/void_blossom.json b/kubejs/data/kubejs/entity_assignment/boss/void_blossom.json new file mode 100644 index 00000000..4ccd39d0 --- /dev/null +++ b/kubejs/data/kubejs/entity_assignment/boss/void_blossom.json @@ -0,0 +1,5 @@ +{ + "chestcavity": "kubejs:types/boss/void_blossom.json", + "entities": ["bosses_of_mass_destruction:void_blossom"] + } + \ No newline at end of file diff --git a/kubejs/data/kubejs/types/boss/ancient_remnant.json b/kubejs/data/kubejs/types/boss/ancient_remnant.json new file mode 100644 index 00000000..f63ca117 --- /dev/null +++ b/kubejs/data/kubejs/types/boss/ancient_remnant.json @@ -0,0 +1,113 @@ +{ + "defaultChestCavity": [ + { + "item": "kubejs:relic_metal_plate", + "position": 0 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 1 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 2 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 3 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 4 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 5 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 6 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 7 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 8 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 9 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 10 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 11 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 12 + }, + { + "item": "kubejs:ancient_chip", + "position": 13 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 14 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 15 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 16 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 17 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 18 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 19 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 20 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 21 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 22 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 23 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 24 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 25 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 26 + } + ] + } + \ No newline at end of file diff --git a/kubejs/data/kubejs/types/boss/ender_guardian.json b/kubejs/data/kubejs/types/boss/ender_guardian.json new file mode 100644 index 00000000..ca67665c --- /dev/null +++ b/kubejs/data/kubejs/types/boss/ender_guardian.json @@ -0,0 +1,112 @@ +{ + "defaultChestCavity": [ + { + "item": "kubejs:relic_metal_plate", + "position": 0 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 1 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 2 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 3 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 4 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 5 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 6 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 7 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 8 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 9 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 10 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 11 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 12 + }, + { + "item": "kubejs:ender_guard_eyeball", + "position": 13 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 14 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 15 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 16 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 17 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 18 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 19 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 20 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 21 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 22 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 23 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 24 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 25 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 26 + } + ] +} diff --git a/kubejs/data/kubejs/types/boss/netherite_monstrosity.json b/kubejs/data/kubejs/types/boss/netherite_monstrosity.json new file mode 100644 index 00000000..59ed3c88 --- /dev/null +++ b/kubejs/data/kubejs/types/boss/netherite_monstrosity.json @@ -0,0 +1,113 @@ +{ + "defaultChestCavity": [ + { + "item": "kubejs:relic_metal_plate", + "position": 0 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 1 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 2 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 3 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 4 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 5 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 6 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 7 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 8 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 9 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 10 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 11 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 12 + }, + { + "item": "kubejs:netherite_muscle", + "position": 13 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 14 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 15 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 16 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 17 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 18 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 19 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 20 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 21 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 22 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 23 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 24 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 25 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 26 + } + ] + } + \ No newline at end of file diff --git a/kubejs/data/kubejs/types/boss/the_harbinger.json b/kubejs/data/kubejs/types/boss/the_harbinger.json index 7b1b3f8e..8f068bb3 100644 --- a/kubejs/data/kubejs/types/boss/the_harbinger.json +++ b/kubejs/data/kubejs/types/boss/the_harbinger.json @@ -53,7 +53,7 @@ "position": 12 }, { - "item": "kubejs:blooded_chip", + "item": "kubejs:harbinger_lung", "position": 13 }, { diff --git a/kubejs/data/kubejs/types/boss/void_blossom.json b/kubejs/data/kubejs/types/boss/void_blossom.json new file mode 100644 index 00000000..fe6f4e57 --- /dev/null +++ b/kubejs/data/kubejs/types/boss/void_blossom.json @@ -0,0 +1,112 @@ +{ + "defaultChestCavity": [ + { + "item": "kubejs:relic_metal_plate", + "position": 0 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 1 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 2 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 3 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 4 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 5 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 6 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 7 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 8 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 9 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 10 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 11 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 12 + }, + { + "item": "kubejs:flower_heart", + "position": 13 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 14 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 15 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 16 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 17 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 18 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 19 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 20 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 21 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 22 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 23 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 24 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 25 + }, + { + "item": "kubejs:relic_metal_plate", + "position": 26 + } + ] +} diff --git a/kubejs/server_scripts/curios/charm_recipes.js b/kubejs/server_scripts/curios/charm_recipes.js index eec10464..3855a7dc 100644 --- a/kubejs/server_scripts/curios/charm_recipes.js +++ b/kubejs/server_scripts/curios/charm_recipes.js @@ -75,4 +75,6 @@ const organCharmNbtMap = { 'kubejs:stomach_diamond': { type: 'diet', dietTask: { minHunger: 1, foodTypeAmount: 13, foodTypeList: [] }, targetOrgan: 'kubejs:greedy_stomach' }, 'kubejs:stomach_tumor': { type: 'mining', miningTask: { targetblock: ['minecraft:diamond_block', 'minecraft:gold_block', 'minecraft:iron_block', 'minecraft:copper_block'], counter: 0, consume: true, miningAmount: 32 }, targetOrgan: 'kubejs:desire_of_midas' }, + + 'kubejs:doppelganger': { type: 'diet', dietTask: { minHunger: 4, foodTypeAmount: 13, foodTypeList: [] }, targetOrgan: 'kubejs:mini_vampire' }, } \ No newline at end of file diff --git a/kubejs/server_scripts/event_stream.js b/kubejs/server_scripts/event_stream.js index 214e76f5..47c346bb 100644 --- a/kubejs/server_scripts/event_stream.js +++ b/kubejs/server_scripts/event_stream.js @@ -17,7 +17,6 @@ global.playerDamage = event => { let player = event.source.player if (!player) return; - player.tell(event.source.type) let data = new EntityHurtCustomModel() organEntityHurtByPlayer(event, data) burningHeartEntityHurtByPlayer(event, data) diff --git a/kubejs/server_scripts/organ/active_effect.js b/kubejs/server_scripts/organ/active_effect.js index 2e02b127..63dabe68 100644 --- a/kubejs/server_scripts/organ/active_effect.js +++ b/kubejs/server_scripts/organ/active_effect.js @@ -115,7 +115,7 @@ const organActiveStrategies = { 'kubejs:revolution_cable': function (player, organ, attributeMap) { let typeMap = getPlayerChestCavityTypeMap(player); if (typeMap.has('kubejs:revolution')) { - let value = typeMap.get('kubejs:revolution').length * 1 + let value = typeMap.get('kubejs:revolution').length * 2 attributeMapValueAddition(attributeMap, global.HEALTH_UP, value) } }, diff --git a/kubejs/server_scripts/organ/player_bear.js b/kubejs/server_scripts/organ/player_bear.js new file mode 100644 index 00000000..066c2868 --- /dev/null +++ b/kubejs/server_scripts/organ/player_bear.js @@ -0,0 +1,70 @@ +// priority: 10 +/** + * 承受伤害 + * @param {Internal.LivingHurtEvent} event + * @param {EntityHurtCustomModel} data + * @returns + */ +function organPlayerHurtByOthers(event, data) { + let player = event.entity; + let typeMap = getPlayerChestCavityTypeMap(player); + if (typeMap.has('kubejs:bear')) { + typeMap.get('kubejs:bear').forEach(organ => { + organPlayerBearStrategies[organ.id](event, organ, data) + }) + } + let onlySet = new Set() + if (typeMap.has('kubejs:bear_only')) { + typeMap.get('kubejs:bear_only').forEach(organ => { + if (!onlySet.has(organ.id)) { + onlySet.add(organ.id) + organPlayerBearOnlyStrategies[organ.id](event, organ, data) + } + }) + } +} + +/** + * 玩家承受伤害处理策略 + * @constant + * @type {Object} + */ +const organPlayerBearStrategies = { + 'kubejs:red_ink': function (event, organ, data) { + getPlayerMagicData(event.entity).addMana(event.amount * 5) + }, +}; + + +/** + * 玩家承受伤害唯一处理策略 + * @constant + * @type {Object} + */ +const organPlayerBearOnlyStrategies = { + 'kubejs:doppelganger': function (event, organ, data) { + let player = event.entity + if (event.amount < player.getHealth()) { + return + } + let typeMap = getPlayerChestCavityTypeMap(player) + if (typeMap.has('kubejs:legends')) { + let amount = typeMap.get('kubejs:legends').length + if (Math.random() < Math.min(0.25 + 0.1 * amount, 0.8)) { + player.potionEffects.add('minecraft:absorption', 40, 2) + } + } + }, + 'kubejs:heart_of_blade': function (event, organ, data) { + data.returnDamage = data.returnDamage + event.entity.getArmorValue() + }, + 'kubejs:harbinger_lung': function (event, organ, data) { + let count = event.entity.persistentData.getInt(resourceCount) + if (count >= event.amount) { + event.amount = event.amount / 2 + updateResourceCount(event.entity, count - Math.floor(event.amount)) + } + }, +}; + + diff --git a/kubejs/server_scripts/organ/entity_hurt.js b/kubejs/server_scripts/organ/player_hurt.js similarity index 79% rename from kubejs/server_scripts/organ/entity_hurt.js rename to kubejs/server_scripts/organ/player_hurt.js index 506075a5..6e1d9f4f 100644 --- a/kubejs/server_scripts/organ/entity_hurt.js +++ b/kubejs/server_scripts/organ/player_hurt.js @@ -25,68 +25,6 @@ function organEntityHurtByPlayer(event, data) { } -/** - * 承受伤害 - * @param {Internal.LivingHurtEvent} event - * @param {EntityHurtCustomModel} data - * @returns - */ -function organPlayerHurtByOthers(event, data) { - let player = event.entity; - let typeMap = getPlayerChestCavityTypeMap(player); - if (typeMap.has('kubejs:bear')) { - typeMap.get('kubejs:bear').forEach(organ => { - organPlayerBearStrategies[organ.id](event, organ, data) - }) - } - let onlySet = new Set() - if (typeMap.has('kubejs:bear_only')) { - typeMap.get('kubejs:bear_only').forEach(organ => { - if (!onlySet.has(organ.id)) { - onlySet.add(organ.id) - organPlayerBearOnlyStrategies[organ.id](event, organ, data) - } - }) - } -} - -/** - * 玩家承受伤害处理策略 - * @constant - * @type {Object} - */ -const organPlayerBearStrategies = { - 'kubejs:red_ink': function (event, organ, data) { - getPlayerMagicData(event.entity).addMana(event.amount * 5) - }, -}; - - -/** - * 玩家承受伤害唯一处理策略 - * @constant - * @type {Object} - */ -const organPlayerBearOnlyStrategies = { - 'kubejs:doppelganger': function (event, organ, data) { - let player = event.entity - if (event.amount < player.getHealth()) { - return - } - let typeMap = getPlayerChestCavityTypeMap(player) - if (typeMap.has('kubejs:legends')) { - let amount = typeMap.get('kubejs:legends').length - if (Math.random() < Math.min(0.25 + 0.1 * amount, 0.8)) { - player.potionEffects.add('minecraft:absorption', 40, 2) - } - } - }, - 'kubejs:heart_of_blade': function (event, organ, data) { - data.returnDamage = data.returnDamage + event.entity.getArmorValue() - }, -}; - - /** * 造成伤害处理策略 * @constant @@ -254,5 +192,18 @@ const organPlayerDamageOnlyStrategies = { } updateResourceCount(player, count + Math.floor(roseCount * amplifier)) }, - + 'kubejs:netherite_muscle': function (event, organ, data) { + let entity = event.entity + let entityList = getEntitiesWithinRadius(entity.getLevel(), entity.position(), 3) + entityList.forEach(entity => { + if (entity.isAlive()) { + entity.attack(event.amount) + } + }) + }, + 'kubejs:ender_guard_eyeball': function (event, organ, data) { + if (event.source.type != 'arrow') return + let potionList = ['minecraft:slowness', 'minecraft:poison', 'cataclysm:abyssal_burn', 'minecraft:weakness', 'minecraft:wither', 'tetra:stun', 'tetra:bleeding', 'goety:cursed'] + event.entity.potionEffects.add(randomGet(potionList), 20 * 4, 0) + }, }; \ No newline at end of file diff --git a/kubejs/server_scripts/organ/player_tick.js b/kubejs/server_scripts/organ/player_tick.js index d47844ab..580c6d7c 100644 --- a/kubejs/server_scripts/organ/player_tick.js +++ b/kubejs/server_scripts/organ/player_tick.js @@ -1,6 +1,6 @@ PlayerEvents.tick(event => { let player = event.player - + if (event.player.age % 20 != 0) { return } @@ -37,7 +37,7 @@ const organPlayerTickStrategies = { } else if (count > 0) { updateResourceCount(player, count - 1) } - } + }, }; /** @@ -82,4 +82,16 @@ const organPlayerTickOnlyStrategies = { } player.potionEffects.add('minecraft:strength', 6 * 20, Math.min(amplifier + 1, 4)) }, + 'kubejs:mini_vampire': function (event, organ) { + let player = event.player + let maxHealth = player.getMaxHealth() + let health = player.getHealth() + if (health < maxHealth * 0.1) { + player.potionEffects.add('kubejs:vampiric', 20 * 3, 2) + } else if (health < maxHealth * 0.2) { + player.potionEffects.add('kubejs:vampiric', 20 * 3, 1) + } else if (health < maxHealth * 0.3) { + player.potionEffects.add('kubejs:vampiric', 20 * 3, 0) + } + }, }; diff --git a/kubejs/server_scripts/recipes/bio_forging.js b/kubejs/server_scripts/recipes/bio_forging.js index f44031f7..a125fa86 100644 --- a/kubejs/server_scripts/recipes/bio_forging.js +++ b/kubejs/server_scripts/recipes/bio_forging.js @@ -50,7 +50,7 @@ ServerEvents.recipes(event => { registerCustomRecipe(new BioForgingRecipe([{ 'count': 2, 'item': 'biomancy:regenerative_fluid' }, { 'count': 2, 'item': 'biomancy:hormone_secretion' }, { 'count': 6, 'item': 'biomancy:mob_marrow' }, { 'count': 8, 'item': 'createaddition:electrum_wire' }], Item.of('kubejs:platelet_dispatcher')).setNutrientsCost(48).setTab('biomancy:weapons')) - registerCustomRecipe(new BioForgingRecipe([{ 'count': 1, 'item': 'minecraft:spider_eye' }, { 'count': 3, 'item': 'meetyourfight:phantoplasm' }, { 'count': 6, 'item': 'biomancy:exotic_compound' }], Item.of('kubejs:phantom_eyeball')).setNutrientsCost(60).setTab('biomancy:weapons')) + registerCustomRecipe(new BioForgingRecipe([{ 'count': 1, 'item': 'minecraft:spider_eye' }, { 'count': 1, 'item': 'meetyourfight:phantoplasm' }, { 'count': 6, 'item': 'biomancy:exotic_compound' }], Item.of('kubejs:phantom_eyeball')).setNutrientsCost(60).setTab('biomancy:weapons')) registerCustomRecipe(new BioForgingRecipe([{ 'count': 1, 'item': 'kubejs:stomach_template' }, { 'count': 2, 'item': 'biomancy:enlargement_serum' }, { 'count': 16, 'item': 'biomancy:malignant_flesh_veins' }, { 'count': 8, 'item': 'biomancy:nutrient_bar' }], Item.of('kubejs:stomach_tumor')).setNutrientsCost(40).setTab('biomancy:weapons')) diff --git a/kubejs/server_scripts/recipes/common.js b/kubejs/server_scripts/recipes/common.js index f9a90538..7d538f30 100644 --- a/kubejs/server_scripts/recipes/common.js +++ b/kubejs/server_scripts/recipes/common.js @@ -148,5 +148,5 @@ ServerEvents.recipes(event => { event.shaped('kubejs:doppelganger', [ ['', 'nameless_trinkets:reverse_card', ''], - ['minecraft:totem_of_undying', 'goety:haunted_armor_stand', 'minecraft:totem_of_undying']]) + ['minecraft:totem_of_undying', 'meetyourfight:phantoplasm', 'minecraft:totem_of_undying']]) }) \ No newline at end of file diff --git a/kubejs/server_scripts/utils/common.js b/kubejs/server_scripts/utils/common.js new file mode 100644 index 00000000..2592fc15 --- /dev/null +++ b/kubejs/server_scripts/utils/common.js @@ -0,0 +1,18 @@ +/** +* 获取某个半径内的实体,自动排除玩家 +* @param {Internal.Level} level +* @param {Vec3} pos +* @param {Number} radius +* @returns {Array} +*/ +function getEntitiesWithinRadius(level, pos, radius) { + let area = new AABB.of(pos.x() - radius, pos.y() - radius, pos.z() - radius, pos.x() + radius, pos.y() + radius, pos.z() + radius) + let entityAABBList = level.getEntitiesWithin(area) + let entityList = [] + entityAABBList.forEach(entity => { + if (entity.distanceToSqr(pos) <= radius && !entity.isPlayer()) { + entityList.push(entity) + } + }) + return entityList +} \ No newline at end of file diff --git a/kubejs/startup_scripts/organ_register.js b/kubejs/startup_scripts/organ_register.js index 08394f45..2863b082 100644 --- a/kubejs/startup_scripts/organ_register.js +++ b/kubejs/startup_scripts/organ_register.js @@ -143,7 +143,7 @@ StartupEvents.registry('item', event => { registerOrgan(new Organ('kubejs:revolution_cable') .addScore('nerves', 1) .addScore('strength', -2) - .addTextLines('ctrl', [LEADING_SYMBOL, Text.gray({ "translate": "kubejs.tooltips.revolution_cable.1" }), Text.of({ "translate": "kubejs.tooltips.revolution_cable.2" }).color('#deaa00'), Text.gray({ "translate": "kubejs.tooltips.revolution_cable.3" }), Text.yellow(1), Text.gray({ "translate": "kubejs.tooltips.revolution_cable.4" }), Text.yellow({ "translate": "kubejs.tooltips.revolution_cable.5" })]) + .addTextLines('ctrl', [LEADING_SYMBOL, Text.gray({ "translate": "kubejs.tooltips.revolution_cable.1" }), Text.of({ "translate": "kubejs.tooltips.revolution_cable.2" }).color('#deaa00'), Text.gray({ "translate": "kubejs.tooltips.revolution_cable.3" }), Text.yellow(2), Text.gray({ "translate": "kubejs.tooltips.revolution_cable.4" }), Text.yellow({ "translate": "kubejs.tooltips.revolution_cable.5" })]) .build()) .texture('kubejs:item/organs/machine/revolution_cable') .tag('kubejs:revolution') @@ -262,6 +262,7 @@ StartupEvents.registry('item', event => { .build()) .texture('kubejs:item/organs/machine/revolution_steam_engine') .tag('kubejs:rclick_only') + .tag('kubejs:revolution') .tag('kubejs:machine') .tag('itemborders:diamond'); // 糖果心与魔法使系列物品 @@ -363,15 +364,6 @@ StartupEvents.registry('item', event => { .tag('kubejs:magic') .tag('kubejs:bear'); - registerOrgan(new Organ('kubejs:bad_ink') - .addScore('strength', -1) - .addScore('filtration', 0.5) - .addTextLines('ctrl', [LEADING_SYMBOL, Text.gray({ "translate": "kubejs.tooltips.bad_ink.1" }), Text.gold(20), Text.gray({ "translate": "kubejs.tooltips.bad_ink.2" })]) - .build()) - .texture('kubejs:item/organs/magic/bad_ink') - .tag('itemborders:gold') - .tag('kubejs:magic') - .tag('kubejs:active'); registerOrgan(new Organ('kubejs:blood_moon_wand') .addScore('nerves', 1) @@ -466,6 +458,7 @@ StartupEvents.registry('item', event => { .build()) .texture('kubejs:item/organs/legends/doppelganger') .tag('kubejs:legends') + .tag('kubejs:evolution') .tag('kubejs:bear_only'); registerOrgan(new Organ('kubejs:lost_paradise') @@ -747,13 +740,13 @@ StartupEvents.registry('item', event => { .tag('kubejs:player_tick_only') .tag('kubejs:relics'); - registerOrgan(new Organ('kubejs:blooded_chip') + registerOrgan(new Organ('kubejs:ancient_chip') .addScore('nerves', 1.25) .addScore('strength', 0.25) - .addTextLines('default', [Text.gray({ "translate": "kubejs.tooltips.blooded_chip.1" })]) - .addTextLines('alt', [LEADING_SYMBOL, Text.gray({ "translate": "kubejs.tooltips.blooded_chip.2" })]) + .addTextLines('default', [Text.gray({ "translate": "kubejs.tooltips.ancient_chip.1" })]) + .addTextLines('alt', [LEADING_SYMBOL, Text.gray({ "translate": "kubejs.tooltips.ancient_chip.2" })]) .build()) - .texture('kubejs:item/organs/relics/blooded_chip') + .texture('kubejs:item/organs/relics/ancient_chip') .tag('kubejs:damage_only') .tag('kubejs:machine') .tag('kubejs:relics'); @@ -783,6 +776,54 @@ StartupEvents.registry('item', event => { .tag('kubejs:player_tick_only') .tag('kubejs:relics'); + registerOrgan(new Organ('kubejs:netherite_muscle') + .addScore('strength', 2.25) + .addScore('fire_resistant', 1) + .addScore('digestion', -1) + .addScore('iron_repair', 1) + .addTextLines('default', [Text.gray({ "translate": "kubejs.tooltips.netherite_muscle.1" })]) + .addTextLines('alt', [LEADING_SYMBOL, Text.gray({ "translate": "kubejs.tooltips.netherite_muscle.2" })]) + .addTextLines('alt', [LEADING_SYMBOL, Text.gray({ "translate": "kubejs.tooltips.netherite_muscle.3" })]) + .build()) + .texture('kubejs:item/organs/relics/netherite_muscle') + .tag('kubejs:muscle') + .tag('kubejs:damage_only') + .tag('kubejs:relics'); + + registerOrgan(new Organ('kubejs:ender_guard_eyeball') + .addScore('hydrophobia', 1) + .addScore('luck', -2) + .addScore('crystalsynthesis', 0.25) + .addTextLines('default', [Text.gray({ "translate": "kubejs.tooltips.ender_guard_eyeball.1" })]) + .addTextLines('alt', [LEADING_SYMBOL, Text.gray({ "translate": "kubejs.tooltips.ender_guard_eyeball.2" })]) + .build()) + .texture('kubejs:item/organs/relics/ender_guard_eyeball') + .tag('kubejs:damage_only') + .tag('kubejs:relics'); + + registerOrgan(new Organ('kubejs:harbinger_lung') + .addScore('breath_recovery', 1) + .addScore('breath_capacity', 1) + .addScore('withered', 0.5) + .addTextLines('default', [Text.gray({ "translate": "kubejs.tooltips.harbinger_lung.1" })]) + .addTextLines('alt', [LEADING_SYMBOL, Text.gray({ "translate": "kubejs.tooltips.harbinger_lung.2" })]) + .build()) + .texture('kubejs:item/organs/relics/harbinger_lung') + .tag('kubejs:machine') + .tag('kubejs:bear_only') + .tag('kubejs:relics'); + + registerOrgan(new Organ('kubejs:bad_ink') + .addScore('strength', -1) + .addScore('filtration', 0.5) + .addTextLines('ctrl', [LEADING_SYMBOL, Text.gray({ "translate": "kubejs.tooltips.bad_ink.1" }), Text.gold(20), Text.gray({ "translate": "kubejs.tooltips.bad_ink.2" })]) + .build()) + .texture('kubejs:item/organs/relics/bad_ink') + .tag('itemborders:gold') + .tag('kubejs:magic') + .tag('kubejs:relics') + .tag('kubejs:active'); + // 碎片 registerOrgan(new Organ('kubejs:nether_star_shard') .addScore('fire_resistant', 0.5) @@ -890,7 +931,7 @@ StartupEvents.registry('item', event => { registerOrgan(new Organ('kubejs:lamellar_armor_piece') .addScore('defense', 2.25) - .addScore('speed', -0.5) + .addScore('speed', -1) .build()) .texture('kubejs:item/organs/machine/lamellar_armor_piece') .tag('itemborders:iron') @@ -898,7 +939,7 @@ StartupEvents.registry('item', event => { registerOrgan(new Organ('kubejs:chain_armor_piece') .addScore('defense', 2) - .addScore('speed', -0.25) + .addScore('speed', -0.5) .build()) .texture('kubejs:item/organs/machine/chain_armor_piece') .tag('itemborders:iron') @@ -930,7 +971,7 @@ StartupEvents.registry('item', event => { // 食物系列 registerOrgan(new Organ('kubejs:hamimelon_organ') - .addScore('health', -0.5) + .addScore('health', 0.5) .addScore('endurance', 1.5) .addScore('luck', 1) .addTextLines('default', [Text.gray({ "translate": "kubejs.tooltips.hamimelon_organ.1" })]) @@ -943,7 +984,7 @@ StartupEvents.registry('item', event => { .tag('kubejs:active'); registerOrgan(new Organ('kubejs:watermelon_organ') - .addScore('health', 0.5) + .addScore('health', 1) .addScore('speed', 0.5) .addTextLines('default', [Text.gray({ "translate": "kubejs.tooltips.watermelon_organ.1" })]) .build()) @@ -984,6 +1025,18 @@ StartupEvents.registry('item', event => { .tag('itemborders:diamond') .tag('kubejs:food'); + registerOrgan(new Organ('kubejs:mini_vampire') + .addScore('health', -0.5) + .addScore('speed', 1) + .addScore('fire_resistant', -1) + .addTextLines('default', [Text.gray({ "translate": "kubejs.tooltips.mini_vampire.1" })]) + .addTextLines('alt', [LEADING_SYMBOL, Text.gray({ "translate": "kubejs.tooltips.mini_vampire.2" })]) + .build()) + .texture('kubejs:item/organs/food/mini_vampire') + .tag('kubejs:player_tick_only') + .tag('itemborders:diamond') + .tag('kubejs:food'); + // alex registerOrgan(new Organ('kubejs:warped_heart').addScore('health', 2.0).addScore('nerves', -0.75).build()).texture('kubejs:item/organs/alex/warped_heart').tag('kubejs:heart');