A weapon perks project and framework inspired by Destiny 2 for Minecraft. Every sword, axe, pickaxe, shovel, hoe, bow, crossbow, trident and mace you find, craft, loot or trade for can roll two perks and one origin trait, so a diamond sword isn't just a diamond sword, it's your diamond sword.
Details
- Rolled perks — two per weapon, from a pool of 60+, ranging from always-good to only-good-in-the-right-moment. Rampage stacks damage on kills. Nightstalker only works in the dark. Glass Cannon hits harder but costs you health.
- Origin traits — a third trait tied to where or how the weapon was obtained. A pickaxe crafted in the Badlands might carry Mesa and drop bonus gold from ore. A weapon taken from a mob might be Bloodbound to that creature.
- Material-locked perks — a few perks only roll on one material. A wooden sword can splinter into a bleeding wound; you'll never see that on netherite.
- Synergies — perks and origins can share themes (fire, crowds, low health…).
- The Arsenal — press K to inspect every weapon you're carrying, or browse the Codex for every perk and origin in the game with plain-English descriptions.
Requirements
- Minecraft 1.21.1
- NeoForge 21.1.x
Config
config/becomelegend-common.toml — roll chance, perks per item, whether origins roll, and whether old/unrolled items get picked up automatically. Every perk can be disabled if you find them too strong or it doesn't fit your mod list.
Become Legend is a fan-made project inspired by Destiny 2. It is not affiliated with or endorsed by Bungie.
🛠️ Building on the framework The extension API is fully public in the compiled jar. This section is the documentation for it.
Setup — reference the jar as a compile-time dependency in your own NeoForge mod:
dependencies {
compileOnly files('libs/becomelegend-1.0.0.jar')
}
Registries — register into the shared pools like any NeoForge registry:
DeferredRegister<Perk> PERKS = DeferredRegister.create(PerkRegistries.PERK_KEY, "myaddon");
DeferredRegister<OriginTrait> ORIGINS = DeferredRegister.create(PerkRegistries.ORIGIN_KEY, "myaddon");
// register both to your mod event bus as usual
The quick way — PerkBuilder:
PERKS.register("frostbite", () -> PerkBuilder.create(WeaponCategory.MELEE, 8)
.damageWhen(30, (attacker, target) -> target.isFullyFrozen())
.provides("cold")
.build());
Restricting to specific gear:
PERKS.register("splinter_frost", () -> PerkBuilder.create(WeaponCategory.ALL, 8)
.materials("wooden") // or .onlyOn(ItemFilter.tag(...) / .items(...) / .material(...))
.onHit((attacker, weapon, target, source, dmg) -> { /* ... */ })
.build());
WeaponCategory has SWORD, AXE, PICKAXE, SHOVEL, HOE, BOW, CROSSBOW, TRIDENT, MACE, plus the grouped sets ALL, MELEE, RANGED, ATTACK, GATHERING, HANDHELD.
Full control — extend Perk or OriginTrait directly and override any hook from Trait: onApplied, addAttributeModifiers, modifyDamageDealt, onHit, modifyDamageTaken, onDamageTaken, onProjectileLaunched, onKill, modifyExperience, onBlockBroken, modifyBreakSpeed, onHeldTick.
Useful statics on TraitHelper: chance, repair, duplicateDrops, stacks/addStack, isDark, isDaylight, countHostiles, isAfflicted, cooldownReady/startCooldown, isProjectileHit, isHeadshot, isSmash, aoeTargets/isAoeTarget, sharedTheme/synergiesOf/pairsWith/themeName.
Origin sources — pure JSON. Drop a file at data/<yournamespace>/becomelegend/origin_sources/<name>.json:
{
"origin": "myaddon:frostbitten",
"priority": 10,
"weight": 20,
"biomes": ["#minecraft:is_taiga"],
"methods": ["crafted", "chest_loot"],
"items": ["#becomelegend:material/wooden"]
}
Supported filters: methods, biomes, dimensions, loot_tables, entities, min_y/max_y, categories, items.
New weapon categories or materials for modded items — also no code. Add your item to data/<yournamespace>/tags/item/category/<name>.json or .../material/<name>.json. Vanilla materials already tagged: wooden, stone, iron, golden, diamond, netherite.