FireFly's Simple Tweaks 2.2.5 for Fabric 1.21.1
Curse Maven Snippet
What's new
v2.2.5 — Devlog (1.21.1 / Fabric)
- Version:
2.2.5 - Build id:
v2.2.5, build=cleanup36 - Artefact:
simple_tweaks-2.2.5.jar·4CFBE6FE…DACCAEB· 893,220 bytes - Scope:
cleanup21→cleanup36(cleanup20was 2.2.4) - Local verification:
clean buildgreen ·runTest 14/0·runGametest 7/7
1. Elements: from "a damage type" to "an amount with an ICD"
Symptom: elemental damage existed but behaved like "hit again, in another colour" — no aura amount, no cooldown, and the same build scaled wildly with attack speed.
Evidence: reactions were decided by a boolean "is this element present", so any applied element reacted
immediately; transformative damage resolved at (4.0 + level × 0.55) with no internal cooldown.
Fix:
- New
ElementAuras: gauges of weak 1.0 / strong 2.0 / ultra 4.0, lifetimes 9.5 / 12 / 17 s, linear decay; - Attachment ICD (two counters): only the 1st/4th/7th… hit from the same attacker attaches within 2.5 s; venom ticks and the mod's own riders bypass it;
- Counter consumption doubled (1 unit of water eats 2 of fire); after a reaction the first element keeps its remainder, the second leaves nothing;
- Amplifying reactions (melt/vaporize) multiply the triggering hit; transformative ones deal separate damage that ignores the weapon and cannot crit;
- New quicken (nature + lightning): no damage, target becomes quickened for 6 s and nature/lightning hits then gain flat damage.
Impact: the reaction table grew to 19; attack speed can no longer turn reactions into the main damage source for free.
2. Five "elemental-looking" damage sources became real elements
Symptom: chain lightning, venom, celestial blessing, starfall and echo shield dealt plain physical damage — no aura, no reactions.
Fix: all of them now use the matching element_* damage type (lightning / nature / light / fire /
whatever hit you) and leave the matching aura. ElementCombat.isOwnElementalDamage was extended to those
keys so they are not converted twice.
3. Venom damage explosion
Symptom: venom ticks made damage grow exponentially.
Evidence: every DoT tick re-ran the full on-hit pipeline, re-triggering the other enchantments.
Fix: an "auxiliary damage" flag (isAuxiliaryDamage() plus a ThreadLocal set while the mod dispatches its
own damage); 23 handlers now return early on it, 4 defensive handlers deliberately do not.
4. Arrows lock onto the firing weapon (the biggest item of this release)
Symptom: shoot an arrow, switch to a stronger melee weapon, and the arrow hit explodes in damage.
Evidence: every on-hit handler read attacker.mainHandStack at impact time; while the arrow flew the
player swapped weapons, so handlers read the sword.
Fix (four attempts, two of which were disproved by testing):
cleanup30: snapshot the weapon on the projectile (ShotWeapon) and prefer it at impact;cleanup31: persist the snapshot in the entity's NBT (writeCustomDataToNbt/readCustomDataFromNbt) to survive a save mid-flight; reaction resonance also moved to the snapshot;cleanup32(self-audit): discovered the snapshot layer had never fired — vanilla arrows are built via the constructor and never callsetOwner; added the 5-arg constructor injection. Same batch: the transformative ICD existed only as a comment and was actually implemented (1 s);cleanup34: stopped patching handlers one by one and instead substituted the main hand during damage resolution (LivingEntity#damageHEAD/RETURN window +getMainHandStack/getEquippedStack(MAINHAND)injections);cleanup35: fixed the resultingStackOverflowError—DamageSource#weaponStackloops back intogetMainHandStack(); added a ThreadLocal re-entrancy guard.
Impact: LivingDamageEvent-based enchantments (combat_master, heavenly_punishment, healing_blade,
healer, celestial_blessing) are correct now too, while the HUD, inventory, animations and durability are
untouched.
5. Armour curve
Symptom: vanilla armour points past 20 were completely wasted.
Evidence: clamp(armor − damage/f, armor × 0.2, 20.0) inside DamageUtil#getDamageLeft.
Fix: ≤ 20 uses the vanilla formula byte-for-byte; > 20 keeps the 80% percentage and adds 0.5 flat
reduction per extra point per hit, capped at 75% of the remaining damage (never zero). Applies to players
and mobs alike.
6. Mob levels and name tags
Symptom: only /summon mobs got a correct level; summoned/split mobs had no [Lv.N] name.
Evidence: the player scan radius was 64 blocks while vanilla spawn distance is 24–128; the name packet was
sent once at START_TRACKING, which happens after ENTITY_LOAD has already been dropped.
Fix: scan radius 64 → 128 with a nearest-player fallback; level packets are re-broadcast to players within 160 blocks after spawning.
7. New tools and debug commands
- Auto Smelt now understands blast-furnace recipes and prefers their output;
- Eight conversions are now enchantable on swords / bows / crossbows;
/fst debugItem:info/nbt show|set|add|remove|clear/component list|get|set|remove/enchants show|copy|paste|merge|set|remove|clear/name/damage/unbreakable(1.21 has no item NBT, so thenbtview editsminecraft:custom_data; values are parsed as raw SNBT);/fst difficulty: newmodify <±value>(written to config, survives restarts),modify clear, andcheck(printslocalDifficulty / base / offset / modify / playerPower → effective → level).
8. New enchantment
Healing Multiplier (legendary · chestplate): incoming healing gains +10% per level of that heal plus a
flat 0.25 per level, never exceeding missing health.
9. Build-time checks
- Added the game test
damageWindowDoesNotRecurse(7/7 locally). ⚠️ It does not catch thecleanup34recursion: that needs a player attacker, and a game test has no player to attribute damage to — with the guard temporarily removed the test still passes. The gap is recorded; faking aServerPlayerEntityis still open.
10. Not yet accepted for this release
| Item | Why |
|---|---|
| Aura / ICD feel in practice | needs hands-on play, especially reaction rate at high attack speed |
| Armour curve against mobs | needs a mob with armour > 20 |
| Full arrow-weapon-lock chain | CB1/CB2/CC1 need verification in a real client, including the crash repro |
debugItem / persistent difficulty modify |
needs a write-and-restart check |
| Healing Multiplier numbers | needs a feel check for being too strong |
This mod has no additional files

