Skip to content

API & Addon Integration Reference ​

Library / APICompatible VersionIntegration Purpose
DasikLibrary>= 1.8.15DasikAnimalGeneticsAPI, DynamicGameRuleManager, ModVersionGuard
Fabric Loader>= 0.19.1Mod entrypoints and client/server gating
YACL v33.8.2+1.21.4-fabricOptional client configuration GUI builder

🧬 DasikAnimalGeneticsAPI Integration ​

Natural Reproduction registers universal data-driven GeneticsConfig rules across all 27 animal species using EntityGeneticsRegistry and GeneticsLimitRegistry:

java
import net.dasik.social.api.genetics.EntityGeneticsRegistry;
import net.dasik.social.api.genetics.GeneticsConfig;
import net.dasik.social.api.genetics.GeneticsLimitRegistry;
import net.dasik.social.api.genetics.TraitConfig;
import net.dasik.social.api.genetics.MutationRule;

// Register Data-Driven Traits across all 27 Animal Species
Map<String, TraitConfig> animalTraits = Map.of(
    "scale", new TraitConfig("scale", "minecraft:scale", "ADD_VALUE", 0.0f, 1.0f, 0.50f, 1.30f),
    "max_health", new TraitConfig("max_health", "minecraft:generic.max_health", "ADD_VALUE", 2.0f, 0.5f, -4.0f, 12.0f),
    "movement_speed", new TraitConfig("movement_speed", "minecraft:generic.movement_speed", "ADD_MULTIPLIED_BASE", 0.05f, 0.5f, -0.04f, 0.08f)
);

GeneticsConfig config = new GeneticsConfig(animalTraits, animalMutations);

for (EntityType<?> type : allAnimals) {
    EntityGeneticsRegistry.register(type, config);

    // Register Dynamic Limit Callbacks tied to server MIN_SCALE & MAX_SCALE GameRules
    GeneticsLimitRegistry.registerMin(type, "scale", (entity, defaultMin) -> {
        if (entity.level() instanceof ServerLevel sl) {
            return DynamicGameRuleManager.getInt(sl, MIN_SCALE) / 100.0f;
        }
        return 0.50f;
    });

    GeneticsLimitRegistry.registerMax(type, "scale", (entity, defaultMax) -> {
        if (entity.level() instanceof ServerLevel sl) {
            return DynamicGameRuleManager.getInt(sl, MAX_SCALE) / 100.0f;
        }
        return 1.30f;
    });
}

⚙️ DynamicGameRuleManager Integration ​

Query or modify dynamic namespaced GameRules programmatically:

java
import net.dasik.social.api.gamerule.DynamicGameRuleManager;
import net.minecraft.server.level.ServerLevel;
import net.vanillaoutsider.naturalreproduction.NaturalReproductionFabric;

// Query boolean GameRule
boolean isEnabled = DynamicGameRuleManager.getBoolean(level, NaturalReproductionFabric.ENABLED);

// Query integer GameRule
int densityCap = DynamicGameRuleManager.getInt(level, NaturalReproductionFabric.DENSITY_CAP);

// Query per-species GameRule
boolean isCowAllowed = NaturalReproductionFabric.isSpeciesAllowed(level, EntityTypes.COW);

🛡️ Zero-Dependency Guard (ModVersionGuard) ​

Natural Reproduction incorporates zero-dependency version guards resolved via Knot ClassLoader:

java
import net.dasik.social.api.util.ModVersionGuard;

// Verified against MC 26.2+
ModVersionGuard.checkClass("net.minecraft.world.entity.EntityTypes");

🔌 Addon Event Hooks ​

Addon mods can inspect autonomous reproduction events by querying BreedingTrackerLogger:

java
import net.vanillaoutsider.naturalreproduction.util.BreedingTrackerLogger;

// Check if tracker logs are enabled
boolean loggingActive = BreedingTrackerLogger.isEnabled();

For setup and building, see Developer Setup & Building.

Official documentation & web portal for Dasik Igaijinn mods.