UltimateCustomGear-1.21.1-1.5.0-NeoForge.jar
Curse Maven Snippet
What's new
⚠️ Important Notes
- Resistances are fully hot-reloadable — tune every value live with
/customgear reload - Adding or removing the
armor_3dblock requires a game restart (the item class is chosen at registration) - GeckoLib is an optional dependency: without it the mod starts normally and 3D armor falls back to
armor_layers(or to the vanilla iron layers if none were declared)
✨ New Features
Mob Drops
mob_drops.minnow accepts0, matching vanilla drops that can roll empty (rotten flesh is 0-2). It compounds withchance: a 25% chance of 0-2 drops something roughly 17% of the time
Damage Resistances (three layers)
- Three new fields on armor —
damage_resistances(by damage type),attacker_resistances(by attacker) andconditional_resistances(attacker + damage type combined). - Available at set level and per piece. Piece entries merge with the set ones, winning only on the keys they declare — the rest of the set still applies to that piece.
inherit_set_resistances: falseopts a piece out of the set entirely - Each equipped piece resolves its own specificity and the pieces then add up, so a rule on one piece never silences the others
- Values are per equipped piece:
0.125on a four-piece set is 50% with the full set worn - Specificity model, not accumulation:
conditional>attacker>damage. The first layer with any match replaces the more general ones for that piece, even when its value is lower. Within a layer, matching entries add up; the pieces then add up - Accepts exact damage types (
"minecraft:arrow"), damage type tags ("#minecraft:is_projectile") and modded types ("iceandfire:dragon_fire") — see DAMAGE_TYPES.md for the full list attacker_resistancesaccepts exact entities, entity tags ("#minecraft:undead"), mod wildcards ("mekanism:*") and specific players ("player:Name")- Projectiles inherit their owner: an arrow is attributed to the skeleton that fired it, not to the arrow
- Clamped to 1.0, with no balance ceiling — total immunity is a legitimate design choice
player:entries are hidden from the tooltip by default so surprise armor stays a surprise; the newshow_player_resistancesfield (defaultfalse) makes them visible- New tooltip sections for each layer, capped at 4 entries with "…and N more"
3D Armor with GeckoLib
- New optional
texture.armor_3dblock withmodel,texture(both required) andanimation(optional) — its mere presence switches the piece to 3D rendering - Respects the surrounding
mode: incustomthe files are copied into the dynamic pack; inreferencethey are resource locations belonging to another mod, which then becomes required - Falls back cleanly to 2D layers when GeckoLib is absent
🐛 Bug Fixes
- Food
on_eat_effectswere baked intoFoodPropertiesat construction: the tooltip updated on reload but eating still applied the old effects. Effects (andgetUseDuration) now read the live item map, so reload works end to end - Armor with no
armor_layersdeclared produced broken (magenta) inventory icons — an early return skipped item model generation. Layers are now genuinely optional - The "…and N more" counter in the Dropped by tooltip section counted blank entries, reporting more sources than existed
🔧 Technical Changes
DamageResistanceHandler.java— new: resolves the three layers at damage time readingGEAR_MAPthroughGearLookup(hot-reloadable); attributes projectiles viasource.getEntity()MobDropHandler.java—minmay now be0; a roll of zero simply drops nothing instead of being clamped up to oneEntityMatcher.java— new inutil/: entity matching (exact ID, tags,mod:*,player:) extracted fromMobDropHandlerso the resistance handler can share itResistanceResolver.java— new inutil/: merges set-level and piece-level resistances and honorsinherit_set_resistances. BothDamageResistanceHandlerandTooltipHelperresolve through it so the tooltip can never drift from the real reductionGearData.java— newdamageResistances,attackerResistances,conditionalResistances(set and per piece),showPlayerResistances,ConditionalResistanceclass, andArmor3DDatainsideTextureDataGearParser.java— validation of the three resistance fieldsUniversalParser.java—mob_drops.minnow accepts0(the whole item was previously rejected), with separate messages for a negativeminand formaxbelowminTooltipHelper.java— three new resistance sections, entries filtered before rendering so hidden and zero-valued ones never reach the "…and N more" count; the same fix applied to the existing "Dropped by" sectionGeckoArmorItem.java— new initems/gear/geo/;GearRegistry.registerArmorpicks the item class,GearModelGeneratorcopies the model files incustommodeCustomFoodItem.java—on_eat_effectsmoved out ofFoodPropertiesand applied infinishUsingItem
📦 Dependencies
- GeckoLib — optional, only required for
armor_3d
This mod has no additional files

