





All effects are fully customizable through Mod Menu.
Simple Blood exposes a client-side API to fully control blood behaviour for your mod's entities. Call it from your client initializer. Everything you register overrides the config and defaults; every option is optional, so you only set what you want to change.
import com.bloodmod.BloodModAPI;
// Registering by the raw id string works on every loader & MC version:
BloodModAPI.registerEntityBlood("yourmod:custom_mob", new BloodModAPI.BloodSettings()
.setColor(0xFF0000) // blood colour 0xRRGGBB (or setColor(r, g, b))
.setCanBleed(true)
.setCanDripAtLowHealth(true) // continuous drip while wounded
.setTransformToStains(true)); // ground stains + underwater fog
// You can also register by EntityType:
BloodModAPI.registerEntityBlood(YourEntities.CUSTOM_MOB, new BloodModAPI.BloodSettings()
.setColor(0x8B0000));
BloodSettings optionsColour
setColor(int rgb) / setColor(int r, int g, int b) — static blood colour.setColorProvider(Function<LivingEntity, Integer>) — dynamic colour resolved per
entity instance (e.g. follow an entity's tint or state). Return null to fall back.Core behaviour
setCanBleed(boolean) — whether it bleeds at all.setCanDripAtLowHealth(boolean) — set false for constructs/undead.setTransformToStains(boolean) — ground stains + water fog clouds.Water & environment
setCreatesFogUnderwater(boolean) — force the underwater-fog behaviour on its own.setParticlesDespawnInWater(boolean) — particles vanish on water contact (snow-golem style).setBleedWhenAsphyxiating(boolean) — opt back in to bleeding from drowning /
suffocation / drying-out (Simple Blood suppresses those by default).Amount, size & sound
setParticleSizeMultiplier(float) — droplet size (1.0 = default).setBurstIntensityMultiplier(float) — particles per hit/death.setDripIntensityMultiplier(float) — low-health drip amount.setBloodSound(SoundEvent) — custom blood sound.setSoundEnabled(boolean) — per-entity sound toggle.Advanced
setBleedPredicate(BiPredicate<LivingEntity, DamageSource>) — full control over which
hits bleed; return true to bleed. Overrides the default asphyxiation filtering.// Dynamic colour that follows the entity:
BloodModAPI.registerEntityBlood("yourmod:rainbow_slime", new BloodModAPI.BloodSettings()
.setColorProvider(e -> ((RainbowSlime) e).getTintRGB()));
// A sap-bleeding treant: brown, no drip, no stains:
BloodModAPI.registerEntityBlood("yourmod:treant", new BloodModAPI.BloodSettings()
.setColor(0x5B3A1A)
.setCanDripAtLowHealth(false)
.setTransformToStains(false));
// A water elemental that DOES bleed when it dries out:
BloodModAPI.registerEntityBlood("yourmod:water_elemental", new BloodModAPI.BloodSettings()
.setBleedWhenAsphyxiating(true));
// A big boss that bleeds heavily, but never from fall damage:
BloodModAPI.registerEntityBlood("yourmod:colossus", new BloodModAPI.BloodSettings()
.setParticleSizeMultiplier(1.5f)
.setBurstIntensityMultiplier(2.0f)
.setBleedPredicate((entity, source) -> !source.is(DamageTypes.FALL)));
// Stop these damage types from ever producing blood, for ANY entity:
BloodModAPI.addNonBleedingDamageType(DamageTypes.IN_FIRE);
BloodModAPI.addNonBleedingDamageType(DamageTypes.LAVA);
BloodModAPI.getRegisteredEntities(); // Set<String> of registered ids
BloodModAPI.unregisterEntityBlood("yourmod:x"); // remove one
The built-in drowning / suffocation / dry-out suppression always applies unless an
entity opts out via setBleedWhenAsphyxiating(true) or its own bleedPredicate.