promotional bannermobile promotional banner

Evolutionary Defense Tower

This mod adds the Hell Tower, a mob inspired by Clash Royale’s Inferno Tower. It features a “Crazier King Mode” upgrade system with iconic paths like “Hell Split Line.” 
Back to Files

evolutionarydefensetower-1.2.0.jar

File nameevolutionarydefensetower-1.2.0.jar
Uploader
PyroStellaPyroStella
Uploaded
Aug 30, 2026
Downloads
12
Size
612.7 KB
Mod Loaders
NeoForge
File ID
8766454
Type
R
Release
Supported game versions
  • 1.21.1

Curse Maven Snippet

NeoForge

implementation "curse.maven:evolutionary-defense-tower-1500519:8766454"

Learn more about Curse Maven

What's new

Evolutionary Defense Tower — Changelog 1.2.0

Version: 1.2.0 | Minecraft: 1.21.1 | Loader: NeoForge 21.1.248+ | Java: 21 | GeckoLib: 4.9.2 Author: PyroStella | Mod ID: evolutionarydefensetower


What's New in 1.2.0

1.2.0 migrates the mod to NeoForge 1.21.1 and completes previously missing content. This update fixes several gameplay-critical bugs from 1.1.0 (the bypasses_cooldown tag not working, crossbow projectiles not triggering retaliation, the Hell Tower turret head not rotating, an attachment crash when saving, and a thread crash when loading a world), and finalizes the X-Bow and Catastrophe (千机变) module that were previously marked "Work in Progress". It also adds the electromagnetic shell dynamic renderer, electricity particles, standable towers, combo-based burning on the Hell Tower, and improved beam rendering.

Bug Fixes (from 1.1.0)

  1. Damage type could not bypass the invulnerability frame The data-pack tag bypasses_cooldown.json mistakenly used the singular field "value":[...] instead of the plural "values":[...], which left the tag empty and meant the damage type never took effect. This is now corrected, so any damage type placed in that tag properly skips the target's invulnerability frames.

  2. Four crossbow projectiles did not trigger retaliation The DamageSource constructor arguments in EDTDamage.source() were in the wrong order (the attacker was placed in the directEntity slot), so getEntity() returned the bolt instead of the tower, and targets could not register hatred to retaliate. The arguments are now swapped to (holder, directEntity, attacker), so magic bolt / electromagnetic shell / dragon's breath projectiles correctly cause targets to fight back.

  3. Hell Tower turret head did not rotate The renderer mistakenly bound the yaw angle to the X-Bow-only bone tower_horizontal_rotation_component, which does not exist in the Hell Tower model, so the turret head never faced the target. It now uses the Hell Tower's actual firing bone eye to drive both yaw (Y) and pitch (X, clamped to -15°~30°), restoring target tracking.

  4. hell_tower_combo attachment failed to serialize when saving The serialize codec of the attachment used an integer-keyed Map (Codec.unboundedMap(INT, INT)), but NBT CompoundTag only accepts string keys, throwing IllegalStateException: some keys are not strings on save. The integer keys are now converted to/from string keys at the save boundary, while the in-memory structure and network sync codec are unchanged, so saving no longer errors.

  5. World load crash: Accessing LegacyRandomSource from multiple threads The Hell Tower attack-effect listener (HellTowerSpecialEffect) was annotated Dist.CLIENT, but in single-player LivingDamageEvent.Pre / LivingDeathEvent are fired on the server thread, and the listener accessed the client-world random source from that server thread, causing a crash. The handlers now only capture an immutable snapshot (coordinates / combo count) when fired on the server, then dispatch particle spawning back to the client render thread via Minecraft.getInstance().tell(...). Loading and combat no longer crash.

  6. Missing Simplified Chinese translation for bolt In zh_cn.json the entry entity...bolt still showed the raw word "bolt". It is now translated to 「弩矢」.

  7. Three projectiles had no entity name magic_bolt (Magic Bolt), electromagnetic_projectile (Electromagnetic Shell), and flying_dragon_exhales_breath (Dragon's Breath) previously had no localization at all. Both en_us and zh_cn now provide consistent names shown in spawn eggs / F3 / commands.

  8. Lightning Strike (G-05) recipe did not restrict enchantment type The enchantment book's NBT level was written as an integer (lvl:1), which did not match the in-game short type (1s), so the restriction silently failed (any enchanted book worked). It is now corrected to lvl:1s / 2s / 3s, and each tier requires the matching Quick Charge enchanted book (I needs I, II needs II, III needs III), so the restriction truly works.

  9. Catastrophe (X-01) description did not match implementation The old docs claimed Catastrophe increased X-Bow HP (+80%/+60%/+40%), but the actual implementation sacrifices HP for bullet level. 1.2.0 clarifies and unifies this to "HP -20%/-40%/-60%, bullet level +1/+2/+3", matching the intended design (sacrifice for a qualitative upgrade).

New Features & Content

  1. X-Bow officially released The X-Bow, previously marked "Work in Progress", now has full combat capability: a multi-tier bullet system, gear-rotation animations, its dedicated evolution module, standable-on behavior, and its own driven render bones.

  2. X-Bow Builder crafting recipe The X-Bow Builder could only be obtained from Creative mode before; it now has a shaped recipe:

    [M] [Z] [M]      M = Iron Ingot
    [M] [S] [M]      Z = Crossbow
    [N] [N] [N]      S = any Log
                      N = Smooth Stone
    
  3. Catastrophe (X-01) three-tier recipes Previously there was no recipe at all (a missing feature). The three tiers are now added, escalating from easy → moderate → hard, based on the Evolutionary Module Template:

    • Tier I (First Form): Evolutionary Module Template + 4× Redstone + 2× Copper Ingot + 1× Amethyst Shard + 1× Flint and Steel
    • Tier II (Adaptive Split): Catastrophe I + 2× Observer + 2× Piston + 1× Dispenser + Multishot Enchanted Book
    • Tier III (Perfected): Catastrophe II + 2× Echo Shard + 4× Netherite Ingot + 2× Copper Block
  4. Lightning Strike (G-05) recipe adjustment Alongside the enchantment-restriction fix above: Tier III loses 1 Netherite Ingot and Tier II loses 1 Dispenser, freeing slots for the matching-tier Quick Charge book; all tiers stay within the recipe ingredient limit.

  5. Hell Tower attacks now set targets on fire Each hit sets the target on fire for a duration in seconds equal to the current combo count (first hit = 1s, longer at higher combos). Each hit refreshes the burn to the current combo seconds rather than shortening an existing burn, producing a "the longer the combo, the hotter it burns" suppression effect alongside the exponential damage scaling.

  6. Towers can be stood on like blocks BaseTower now overrides canBeCollidedWith() → true. Combined with the existing isPushable() = false, players and mobs can stand on top of towers while the tower itself is never pushed away.

  7. Electromagnetic Shell dynamic material renderer A brand-new ElectromagneticProjectileRenderer: three tubular layers rendered with the creeper_armor energy texture. Each layer's random size ratio (0.8 / 1 / 1.2) and draw order, and each face's CW/CCW spin direction, are fixed at spawn and never change. The shell rotates so one face is perpendicular to the velocity vector and stretches along the reverse velocity direction (max stretch 2 / 1.5 / 1.2 when speed reaches 3).

  8. Electricity particle Registered the electricity particle: switches texture every 2 ticks, shrinks gradually to 0.9×, moves randomly in all directions, passes through blocks, has no friction, and fades out to 0.5 alpha over its lifetime.

  9. Hell Tower laser frustum rendering improvement The bottom face (tower-eye end) of the beam frustum is now always parallel to the Y axis (a vertical ring), so it no longer flips when the turret pitches up or down; the beam as a whole still points accurately at the target.

  10. EN/ZH entity name alignment Following the missing-translation fixes above, all projectile and bolt localization names are now fully aligned between en_us and zh_cn (52 keys each).

Developer Notes (not for release)

module_refuse.ogg is still not wired into the module-refusal logic (orphan asset). The electricity particle is registered but its in-combat spawn/trigger hook is pending. particle_atlas.png leftover texture is pending cleanup. Some values in the 1.1.0 docs (e.g. Hell Tower Builder materials, Catastrophe HP sign) disagreed with the final implementation; this changelog follows the actual code.


进化防御塔 — 更新日志 1.2.0

版本: 1.2.0 | Minecraft: 1.21.1 | 加载器: NeoForge 21.1.248+ | Java: 21 | GeckoLib: 4.9.2 作者: PyroStella | Mod ID: evolutionarydefensetower


新版本介绍

1.2.0 是模组向 NeoForge 1.21.1 的迁移与功能补全版本。本次更新彻底修复了 1.1.0 中多项影响玩法的核心 Bug(伤害类型跳过无敌帧失效、连弩子弹不触发反击、地狱塔炮台头不旋转、存档时附件崩溃、加载世界时线程崩溃等),并补齐了此前标记为「开发中」的 X 连弩千机变(Catastrophe)模块 的完整合成与实战能力。同时新增电磁炮弹动态材质渲染、电能粒子、防御塔可踩踏站立、地狱塔连击点燃、激光棱台渲染优化等内容。

旧版本(1.1.0)已存在的 Bug 修复

  1. 伤害类型无法跳过受伤无敌帧 数据包标签 bypasses_cooldown.json 误将字段写成 "value":[...](单数),应为 "values":[...](复数),导致标签始终为空、伤害类型从未生效。现已修正,放入该标签的伤害类型可正常跳过实体受伤无敌帧。

  2. 连弩 4 种子弹命中后目标不反击 EDTDamage.source()DamageSource 构造参数顺序颠倒(攻击者被放在了 directEntity 位),导致 getEntity() 返回弩箭而非炮塔,目标无法记仇反击。已对调参数为 (holder, directEntity, attacker),魔法弹 / 电磁炮弹 / 飞龙吐息等子弹命中后正常触发目标反击。

  3. 地狱之塔炮台头不旋转 渲染器错误地把偏航角绑定到 X 连弩专属骨骼 tower_horizontal_rotation_component(地狱塔模型中不存在该骨骼),导致炮台头永远不朝向目标。现已改用地狱塔实际发射件骨骼 eye 同时驱动偏航(Y)与俯仰(X,限制 -15°~30°),炮台头恢复追踪目标。

  4. 暂停 / 存档时报错 hell_tower_combo 附件序列化失败 附件的 serialize 编解码器使用了整数键的 Map(Codec.unboundedMap(INT, INT)),而 NBT 的 CompoundTag 仅接受字符串键,存盘时抛 IllegalStateException: some keys are not strings。已在存档边界将整数键↔字符串键互转,内存结构与网络同步码流保持不变,存档不再报错。

  5. 加载世界时崩溃:跨线程访问随机源 地狱塔攻击特效监听器(HellTowerSpecialEffect)虽标注 Dist.CLIENT,但在单人模式下 LivingDamageEvent.Pre / LivingDeathEvent 由服务端线程触发,监听器却在服务端线程访问客户端世界随机源导致崩溃。现已改为:仅在服务端触发时记录不可变快照(坐标 / 连击数),并通过 Minecraft.getInstance().tell(...) 派发回客户端渲染线程生成粒子,加载与战斗均不再崩溃。

  6. 简体中文漏翻译:bolt 未汉化 zh_cn.jsonentity...bolt 仍显示原文 "bolt",现已译为「弩矢」。

  7. 3 个抛射物缺少实体名 magic_bolt(魔法弹)、electromagnetic_projectile(电磁炮弹)、flying_dragon_exhales_breath(飞龙吐息)此前无任何本地化名,现已在中英双语补齐,spawn egg / F3 / 命令中显示一致叫法。

  8. 闪电打击(G-05)配方未限制附魔类别 配方中附魔书的 NBT 等级写成整型(lvl:1),与游戏内短整型(1s)不匹配,导致限制失效(任意附魔书皆可合成)。现已修正为 lvl:1s / 2s / 3s,并且每一级需对应等级的**快速装填(Quick Charge)**附魔书(I 级配 I、II 级配 II、III 级配 III),限制真正生效。

  9. 千机变(X-01)属性描述与实现不符 旧文档称千机变提升 X 连弩生命值(+80%/+60%/+40%),实际实现为牺牲生命值换取子弹等级。1.2.0 明确并统一为「生命值 -20%/-40%/-60%,子弹等级 +1/+2/+3」,与设计意图(牺牲换质变)一致。

新增项

  1. X 连弩(X-Bow)正式发布 此前标记为「开发中」的 X 连弩现已具备完整实战能力:多级子弹系统、齿轮旋转动画、专属进化模块、可踩踏站立、独立渲染骨骼驱动。

  2. X 连弩建造器合成配方 此前 X 连弩建造器只能在创造模式获取,现加入有序合成:

    [M] [Z] [M]      M = 铁锭
    [M] [S] [M]      Z = 弩
    [N] [N] [N]      S = 原木(任意)
                      N = 平滑石
    
  3. 千机变(Catastrophe / X-01)三档合成配方 此前无任何配方(功能缺口),现补齐三档,按「易获取 → 一定量资源 → 难获取」递进,基底使用进化模块模板:

    • I 级(千机雏形): 进化模块模板 + 红石×4 + 铜锭×2 + 紫水晶碎片×1 + 打火石×1
    • II 级(应变分化): 千机变 I + 观测器×2 + 活塞×2 + 发射器×1 + 多重射击附魔书
    • III 级(臻于化境): 千机变 II + 回响碎片×2 + 下界合金锭×4 + 铜块×2
  4. 闪电打击(G-05)配方调整 配合上面的附魔限制修复:III 级去除 1 个下界合金锭,II 级去除 1 个发射器,为对应等级的快速装填附魔书腾出位置;各等级材料数均符合合成上限。

  5. 地狱之塔攻击附带点燃 每次命中使目标着火,燃烧秒数 = 当前连击次数(首击 1 秒,连击越高烧得越久),每击刷新到当前连击秒数而非缩短已有燃烧。配合「伤害随连击指数增长」形成越战越烫的压制力。

  6. 防御塔可像方块一样被踩踏站立 BaseTower 新增 canBeCollidedWith() → true,配合既有的 isPushable() = false,玩家与生物均可站在塔顶,且塔不会被推走。

  7. 电磁炮弹动态材质渲染 全新的 ElectromagneticProjectileRenderer:3 层管状体以 creeper_armor 充能材质渲染,每层随机大小比例(0.8 / 1 / 1.2)与绘制顺序、每面顺/逆时针在生成时确定且不变;根据速度方向旋转使一个面垂直于速度向量,并按速度沿反方向拉伸(速度达 3 时达最大拉伸 2 / 1.5 / 1.2)。

  8. 电能粒子(electricity) 注册 electricity 粒子:每 2 tick 切换贴图、逐渐缩小至 0.9 倍、全方向随机移动、可穿方块、无阻力,并随时间淡出至透明度 0.5。

  9. 地狱塔激光棱台渲染优化 塔眼端(下底)棱台底面现在始终与 Y 轴平行(竖直圆面),无论炮台俯仰都不再翻转;光束整体仍准确指向目标。

  10. 中英双语实体名对齐 随上面的漏翻修复,所有抛射物与 bolt 的本地化名称已在 en_us / zh_cn 中完整对齐(各 52 键)。

开发者备注(非发布内容)

module_refuse.ogg 音效尚未接入模块拒绝逻辑(孤儿资源)。electricity 粒子已注册,但「在实战中生成/触发」的接线待接入。particle_atlas.png 遗留贴图待清理。上一版文档中部分数值(如地狱之塔建造器材料、千机变生命值符号)与最终实现不一致,本次已按实际代码为准重写。

This mod has no additional files