promotional bannermobile promotional banner

FireFly's Simple Tweaks

Adds 85+ custom enchantments with a deep elemental system, combat tweaks, and scalable mob enhancement
Back to Files

FireFly's Simple Tweaks 2.2.5 for Fabric 1.21.1

File namesimple_tweaks-2.2.5.jar
Uploaded
Nov 7, 2026
Downloads
8
Size
872.3 KB
Mod Loaders
Fabric
File ID
9488239
Type
R
Release
Supported game versions
  • 1.21.1

Curse Maven Snippet

Fabric

modImplementation "curse.maven:fireflys-simple-tweaks-1775917:9488239"

Learn more about Curse Maven

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 (cleanup20 was 2.2.4)
  • Local verification: clean build green · 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):

  1. cleanup30: snapshot the weapon on the projectile (ShotWeapon) and prefer it at impact;
  2. cleanup31: persist the snapshot in the entity's NBT (writeCustomDataToNbt / readCustomDataFromNbt) to survive a save mid-flight; reaction resonance also moved to the snapshot;
  3. cleanup32 (self-audit): discovered the snapshot layer had never fired — vanilla arrows are built via the constructor and never call setOwner; added the 5-arg constructor injection. Same batch: the transformative ICD existed only as a comment and was actually implemented (1 s);
  4. cleanup34: stopped patching handlers one by one and instead substituted the main hand during damage resolution (LivingEntity#damage HEAD/RETURN window + getMainHandStack / getEquippedStack(MAINHAND) injections);
  5. cleanup35: fixed the resulting StackOverflowError — DamageSource#weaponStack loops back into getMainHandStack(); 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 the nbt view edits minecraft:custom_data; values are parsed as raw SNBT);
  • /fst difficulty: new modify <±value> (written to config, survives restarts), modify clear, and check (prints localDifficulty / 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 the cleanup34 recursion: 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 a ServerPlayerEntity is 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