Skip to content

Client Registration

Moth edited this page Aug 9, 2026 · 4 revisions

Bootstrap Helpers

Butterfly API provides two small helpers for initialization code that should only run once:

Bootstrap RunOnce Bootstrap

Bootstrap groups one or more initialization steps and prevents them from being executed more than once.

Create one with:

private static final Bootstrap BOOTSTRAP = Bootstrap.create();

Then run your initialization:

public static void init() { BOOTSTRAP.run( ModItems::init, ModBlocks::init, ModSounds::init ); }

The first call runs every supplied step.

Later calls do nothing.

Checking Whether It Ran BOOTSTRAP.hasRun();

Returns true after the bootstrap successfully runs.

Return Value

run(...) also returns a boolean:

boolean ran = BOOTSTRAP.run( ModItems::init, ModBlocks::init );

It returns:

true

when the initialization runs for the first time.

It returns:

false

when the bootstrap has already run.

RunOnce

RunOnce is the smaller version of the same idea.

Create one with:

private static final RunOnce INIT = RunOnce.create();

Then:

public static void init() { INIT.run(() -> { // initialization }); } Checking RunOnce INIT.hasRun();

Like Bootstrap, run(...) returns true when the action runs and false when it has already run.

Bootstrap vs RunOnce

Use Bootstrap when initialization naturally consists of multiple steps:

BOOTSTRAP.run( ModItems::init, ModBlocks::init, ModEntities::init );

Use RunOnce when you simply need to protect one action:

INIT.run(ModItems::register);

Both helpers are designed to prevent accidental duplicate initialization.

Clone this wiki locally