AkumaLib

Quick rating

Community listing page, reviews here may not be monitored by the author.

AkumaLib

No reviews yet

Shared library for Mine Mine no Mi to help creating addons

Mod Loaders
Minecraft

About

Description

🧩 AkumaLib

A shared ability framework for Mine Mine no Mi addons.


⚠️ Landed here from a "missing dependency" screen?

That's the normal reason. AkumaLib is a library, not a content mod — on its own it adds no fruits, no abilities, no items and no recipes. Since 4.0.0 it does one thing by itself: it corrects faults of Mine Mine no Mi (see below).

Drop it in your mods folder next to Mine Mine no Mi and the addon that asked for it, and you're done.


📦 Requirements

Minecraft 1.20.1
Forge 47.4.18 or newer
Mine Mine no Mi required
JEI / EMI optional — recipe viewers show every workstation and profession drop

Client and server. If you play on a server, both sides need it. 4.0.0 and 4.1.0 play together. Since 4.0.0 the network protocol is new: a 4.x client cannot join a 3.1.0 or older server, nor the other way round - update the server, every player and every addon together (an addon made for "any 3.x" refuses to start beside 4.x: take its version for AkumaLib 4). Since 3.1.0 the protocol was new too: a 3.1.0 client cannot join a 3.0.0 or older server; Missing Missing no Mi 1.0.0 needs 3.1.0. 3.0.0, 2.12.0, 2.11.0, 2.10.0, 2.9.0 and 2.8.0 play together; since 3.0.0 addons put their fruits in the Devil Fruit boxes with data files, so update InoFruits and Missing Missing no Mi with it; since 2.8.0 the network protocol is new: a 2.8.0 or newer client cannot join a 2.7.x or older server, nor the other way round. Update the server and every player together. Avoid 2.5.0 and 2.6.0: they crash a normal game at start-up. Avoid 2.8.0 and 2.9.0 too: a death wiped the players' profession XP or titles.


🩹 What it corrects in Mine Mine no Mi (since 4.0.0)

After a full read of the base mod's code, AkumaLib corrects its faults in some seventy-five places. You do not have to do anything: install it and they are corrected.

  • Crashes, freezes and lost progress — worlds stuck at "Preparing spawn area", six crashes, loyalty and training points lost at a relog, techniques left half-running after a death, hotbar keys lost through combat mode.
  • Items and blocks destroyed for nothing — the MH5 gas, the Straw Doll, the Sake Cup, Baku Factory on a chest, Black Hole's darkness left in the world.
  • Combat — instant shots through walls, explosions that hurt nobody, Haki that stopped all wear, launches seen backwards by other players.
  • Servers — the server checks what only the screens checked (trades, healing, crews, challenges), protected areas are protected from what goes off beside them, abilities respect the griefing setting.
  • Performance — far less work per mob per tick, far fewer packets, no more freezes from Raigo, Ursus Shock, Liberation, a long aim or the end of a challenge; smoother with many mobs on screen.

Every correction has a switch, in the section baseModFixes of akumalib-server.toml and akumalib-client.toml. Set one to false and the base mod's own behaviour is back for that group. The full list is in each version's changelog.


🍈 Mods that use it

  • Awaken Awaken no Mi — awakened Devil Fruit abilities. AkumaLib was extracted from it.
  • InoFruits — 34 brand-new Devil Fruits, none of them in the base mod.
  • Cruise Cruise no Mi — the professions and the island life of One Piece: Unlimited Cruise 2: fishing, cooking, forging, sewing, boats.
  • Mine Mine no Mi: Sky Island — Skypiea as a dimension of its own, reached by a Knock-Up Stream.

Built an addon on top of AkumaLib? Open an issue on the repository and it will be listed here.


🛠️ For addon developers

Mine Mine no Mi hands you Ability and a set of components. Everything above that — a zone that charges and expands, a wave that converts terrain, a passive that grants attribute bonuses while a condition holds — you would otherwise write yourself, and write slightly differently from the next addon.

AkumaLib is that layer, extracted once and shared: 269 classes — 20 ability base classes, a professions framework, world events, and the worldgen and dimension tools a new dimension needs.

Ability base classes

Class What you get
ZoneAbility a charged spherical zone applying effects continuously
SpreadingBlockAbility a zone that replaces ground blocks — and puts them back
DomainAbility the shared parent of both, carrying the four-slot ZoneSoundSet - whose charge sound never layers over itself once you give it the clip's length
BlockWaveAbility a radial wave converting blocks outward, in sphere, surface or terrain-following mode
ConditionalStatPassiveAbility a passive granting attribute bonuses while a condition holds
AuraAbility a passive aura ticking every nearby enemy
GrabAbility the state machine behind a grab — catch, hold, release — from a melee swing or, through beginGrab, from a tongue, a rope or a harpoon
ProduceItemAbility for a fruit that makes its own substance, where the user is the material
StompAbility · MoveAbility · InstantDashAbility charged stomp, continuous dash, teleport dash
GaugePassiveAbility a passive holding one value shown as a HUD gauge — clamped, synced to its holder, saved
TwoFormFlightAbility the flight of a Zoan with two flying forms, as the base mod's Phoenix flies — plus AkumaFlight to switch it on and off with the forms
BlockUseAbility · CraftingAbility · TransmutationAbility · GroundAbility smaller bases

Plus MorphStats (a builder for a form's attribute block, with conditional sub-blocks), MorphGates (form-locked use conditions), AkumaTargeting (target selection that always excludes the caster, the point a technique is aimed at, a cone test, the one enemy check, and a reach grown to a large morph), AkumaMotion (a pull toward a point with a tunable speed curve, or a push along a direction), AkumaTickQueue (work that must land at the end of the tick), EffectOwners (who applied an effect to whom, keyed on the target's id), AkumaProtection (protected-area checks that match the base mod), AkumaLines (a rope or tether drawn on the client, one packet instead of a particle trail), the AmplificationBus for a form that amplifies its own fruit's kit, MarkerEffect and OverlayEffect, BlockHighlightManager (outline blocks through terrain, for one player), BoomerangProjectile, LatchingProjectile (a projectile that latches onto the first body it meets and hits it several times, each hit through the ability pipeline, drawn as cuts rather than as a model frozen on the target), IBladedHandsAbility (hands turned into blades count as a sword for the techniques that need one, and keep the bare fist's bonus), PropagationHelper, BlockPlacingHelper, AttributeBonusHelper, tooltip helpers (with AkumaSourceTooltip, which writes in words the damage source values the base mod shows only as icons, or not at all, and what a hit pierces), and the morph, animation and networking scaffolding — including an awakened-zoan smoke layer that follows the model's head.

What a technique leaves in the world

  • TemporaryBlocks — walls, cages and platforms a technique raises, grouped per owner: taken back when the technique ends, when the owner dies and when the server stops; broken, blown up or pushed by a piston, they drop nothing.
  • AbilityLifecycle — continuous techniques stopped on their user's death (the base mod keeps them going), gravity switched off and reliably back on (even across a reconnect), a soft landing after a leap.
  • ThrownBodies — a body sent flying slams once into what it meets, and you choose what that does.
  • SummonedAllies — a summoned creature that does not hit with its master's punch bonus, attacks only what it should, and leaves with its master.
  • ExternalMorphs — a form put on from outside a fruit (a curse, a lasting state): seen by every tracking player, kept across respawn, dimension change and login while a keeper says it holds, and taken off at the right size.
  • EntityHighlights and ScreenMarkers — a creature outlined, or places pointed at on the screen, for one player only.
  • AbilityProgress, SharedCooldowns, GatedUnlocks — uses that unlock the next technique, one cooldown shared by several, unlocks checked again when they may have changed.
  • hurtBurst — several hits on the same target in one blow, each one counted; ServerScopedMap — static state that never leaks from one world to the next.
  • First-person limbs — FirstPersonLimbs, HandGraft and ArmCoating draw a form's arm, a Black Leg user's leg and a graft glued to the hand in first person, with Haki and Diable Jambe laid over them as the base mod does without a form.

Professions, creatures and gathering

The systems behind a trades addon, written once for every addon:

  • Professions — a registry, per-player XP and levels with curves in data, which a server owner can override in the server config along with XP multipliers and what a death costs, Solo / Crew / Auto modes (one trade per player on a server), a professions screen and per-profession pages in Mine Mine no Mi's own book (perks, what each level unlocks), a Profession tab in the base mod's character creator, XP boost effects.
  • Titles — earned from code, from profession levels or from a data pack's advancement, listed by category on their own plank of the character screen, and worn after the player's name in the player list.
  • Workstations — a block, shapeless JSON recipes of up to 36 ingredients with a level and XP each, one shared menu that shows what you have and what you need. A recipe can also be one to find: learned for good by reading a recipe item found in a chest or on a stall. Every workstation of every addon appears in JEI and EMI with no addon code, and so do what gathering professions get and where catchable creatures live.
  • Catchable creatures — small creatures you catch rather than kill: variants, reactions (flee, take off, attack), perches on flowers and trunks, flying ones, a data-driven surface spawner (biomes, time of day, underground, altitude, dimension) and lures.
  • Traps — timed trap blocks with data-driven catches, that remember the gear they were made of.
  • Gathering — hanging fruit that ripens and grows back, profession crops and seeds, profession-only blocks.
  • Advancement triggers for levels, crafts and captures; Doriki, Cola, Belly/Extol and Devil Fruit helpers.

World events

  • AkumaWorldEvents — events that come to the world on their own now and then, the way the base mod brings its caravans: a type says how often, where near a player, and how long; the library schedules them, saves them with the world, announces them in the chat, and ends them on time.
  • Barkeeper rumours — the base mod's barkeepers sell the rumours of the events near them. In Mine Mine no Mi 0.11.5 a barkeeper told nothing to a player who is neither a Marine nor a Bounty Hunter; he now tells of the world events.
  • /akumalib events lists, starts and stops them, for operators and for testing.

Worldgen and dimensions

For an addon that shapes terrain of its own, or adds a dimension:

  • Worldgen and fluid registers on AkumaRegistry — density functions, biome sources, chunk generators, structures, placements and piece types, features, placement modifiers, fluids and fluid types.
  • AkumaCells — a deterministic grid of features ("an island here, and nothing for a few thousand blocks") that every reader agrees on: warped outlines, values blended across overlapping features, a radius per cell.
  • OverworldLookup — the overworld's biomes and seed, read from another dimension's worldgen thread.
  • AkumaDimensionTravel — send a body to another dimension with its boat and its rider, arriving with a velocity, into a chunk held loaded.
  • AkumaJigsaw — add pieces to another mod's jigsaw pools without replacing its files.

Registry and loot

  • Devil Fruit boxes from data files. data/<mod>/akumalib/dfboxes/*.json, in the shape of the base mod's own box tables with an inject keyword: add fruits to a box, re-weigh any fruit (base mod ones included) or remove one. Weight 100 and the one-fruit-per-world guard by default; files add up across mods and data packs, removals apply last, so a server's data pack has the last word.
  • Your fruits are exactly as rare as the base mod's. They are added inside the box pool itself, so they also come out of the 5% roll where a box upgrades to the next tier — which no loot modifier can reach.
  • registerFruitItem groups a fruit's abilities in the ability menu. registerItem is the wrong entry point for a Devil Fruit and nothing says so: registered as a plain item, a fruit loads, drops from commands and grants its abilities — ungrouped. A registered fruit that ends up in no box is named in the log at start-up.
  • akumalib:roll_table is a global loot modifier consumers drive from data, for chests and any other table you do not own. Minecraft loot tables do not merge, so adding items to one needs a Forge GLM — and the codec is identical for every addon. Consumers ship JSON only.

The part that actually saves you time

The base classes are not thin wrappers. Each one encodes fixes for problems that are easy to hit, hard to attribute, and invisible until a player reports them:

  • Zones put the world back properly. SpreadingBlockAbility restores through Block.updateFromNeighbourShapes — replaying the raw remembered state leaves you with a grass block still flagged snowy under open sky, and a torch floating where its support used to be.

  • Zones survive a disconnect. The tick that drains the restore queue stops the moment the holder leaves the world, so a naive implementation leaves converted terrain permanently. Active zones are tracked statically, and the library restores them on logout, dimension change and server shutdown — there is no handler for you to add.

  • Conditional passives don't stick. Bonuses are applied and removed idempotently rather than on transitions, because addPermanentModifier persists in NBT — with transition detection, one reconnect turns a conditional buff into a permanent one.

  • And they let go when they should. A Devil Fruit passive is disabled the moment its holder steps in water, and PassiveAbility.tick() stops dispatching before it can clean up after itself. ConditionalStatPassiveAbility hooks the disable directly.

  • Charges cut from outside clean up after themselves. Water, Seastone and handcuffs stop a charge without ever reaching its end event - which is where a charge takes back what its start put in the world. A zone would leave its sphere behind, a spreading zone's blocks would stay for good, a charging user would stay rooted. The library runs the cleanup first, and IChargeInterruptible lets your own charges join in; ChargeGuard tells a completed charge from one stopped early.

  • Partial morphs are drawn at the size you set. In Mine Mine no Mi 0.11.5 a form drawn over the player is drawn at the square of its scale - its render callback runs twice a frame - so a hybrid scaled 1.35 comes out at 1.82, well past its box. The library answers the base mod's morph lookup as it was meant to, so your preRenderCallback runs once. The base mod's own Mammoth and Allosaurus hybrids are fixed along the way.

  • And their box follows them on every client. The base mod never resizes a partial morph's box on the client, so every screen hit, pushed and blocked a normal-sized player. The library keeps it in step.

  • The combat bar follows the server. In Mine Mine no Mi 0.11.5 an ability sync keeps whatever ability a slot already held and loads the new data into it: after a fruit change a slot stays empty until the next sync, a swap between slots loses an ability, an emptied slot keeps its old one - on the owner's screen and on every player tracking them, who then see no form and no running technique. The library empties each slot whose ability changed, so the base mod builds the right one; a slot that keeps its ability keeps its state.

  • Forms look right in first person. A morph model keeps the pose of its last third-person frame, so claws drawn over the hand came out shifted after a crouch or a swing; with a form on, a Black Leg user saw a bare arm instead of their leg, and Haki or Diable Jambe did not cover the limb. FirstPersonLimbs and HandGraft fix all three.

  • Wind has its icon. SourceElement.AIR has no texture in the base mod; the library supplies one, so wind techniques show their element in the tooltip.

  • The base mod's structure spawners stop putting mobs in walls. Its camps, bases and houses moved each new mob up to two blocks aside without looking; AkumaLib places them where they fit, on the spawner's side of the walls. fixStructureSpawnerPlacement in the server config turns it off.

Extending the class gets you all of that. Departing from one is fine too — the class comments record what went wrong the first time.

Adding it to your project

AkumaLib is published on CurseForge, so it is pulled through Cursemaven:

// build.gradle
repositories {
    maven {
        url "https://cursemaven.com"
        content { includeGroup "curse.maven" }
    }
}

dependencies {
    // project 1678152; the file id is the number at the end of a file's URL on the Files tab
    implementation fg.deobf("curse.maven:akumalib-1678152:<file id>")
}
# mods.toml
[[dependencies.yourmod]]
    modId = "akumalib"
    mandatory = true
    versionRange = "[4.0.0,5)"
    ordering = "AFTER"
    side = "BOTH"

The file id changes with every upload, so moving to a newer AkumaLib means picking up the new one. If you develop the library and your addon side by side, a sibling checkout is picked up through a composite build instead, without publishing anything.


🔒 API stability

Publishing freezes the API. From 1.0.0 onward, a breaking change to the shared surface is a major version bump and forces a synchronised release of the library and every consumer — so a consumer's versionRange should exclude the next major.

3.0.0 is a major version. It removes what 2.x had marked for removal: the automatic box filling of registerFruitItem and its three-argument form, AkumaLootInjection (declare fruits in dfboxes data files instead), BlockOverlayManager.addOverlay / removeOverlay / removeAllForZone, the old SyncZoneOverlayPacket constructor and AkumaI18n.MESSAGE_MISSING (use MESSAGE_MISSING_MATERIALS). Everything else from 2.x is unchanged. Use versionRange = "[3.0.0,4)".

3.1.0 only adds: no signature was removed or changed. An addon that uses the 3.1.0 helpers declares versionRange = "[3.1.0,4)".

4.0.0 is a major version by its number, not by its API. It marks the day AkumaLib started correcting Mine Mine no Mi itself. No signature was removed or changed since 3.1.0: an addon's code needs no change. But a range such as [3.1.0,4) refuses 4.0.0, so an addon has to be released again with versionRange = "[4.0.0,5)" (or [3.1.0,5) if it uses nothing newer). The network protocol is 6.

4.1.0 only adds: no signature was removed or changed, and the network protocol is still 6. An addon that uses the 4.1.0 helpers (SteadyBiomes, Whereabouts, BookScreen…) declares versionRange = "[4.1.0,5)".


⚖️ License

All Rights Reserved.