package com.livingworld.modules.worldeffects;

/**
 * Receives {@link WorldEffectRequest}s generated by {@link WorldEffectsModule}
 * and applies the corresponding changes to the world.
 *
 * <p>The NeoForge platform adapter registers itself as a consumer during bootstrap.
 * Tests register a capturing consumer to verify which effects were requested.
 */
@FunctionalInterface
public interface WorldEffectConsumer {

    /** Called when the ecosystem simulation wants a visible world change applied. */
    void consume(WorldEffectRequest request);

    /** A no-op consumer used when no platform adapter is registered. */
    WorldEffectConsumer NO_OP = request -> {};
}
