-
Notifications
You must be signed in to change notification settings - Fork 0
API Overview
The Neo Vitae API lets addon mods interact with Neo Vitae's core systems including Animas, Ara Vitaes, Altar Runes, Rituals, Sigils, and Sentient Armor. It is intended for mod developers who want to extend, modify, or integrate with Neo Vitae from their own mod.
If you're a player looking for in-game mechanics rather than code, start at the Home page and the per-system player guides such as Rituals, Sigils, and Sentient Armor.
For complete signatures, types, and method-by-method details, see API Reference.
Neo Vitae targets multiple Minecraft + NeoForge versions in parallel. The API surface is the same on all of them, but a handful of upstream classes have been renamed by Minecraft itself between versions. The wiki uses 1.21.1 names as its canonical reference. The table below maps each renamed type so 26.1 readers can substitute without confusion.
| 1.21.1 / NeoForge 21.x | 26.1 / NeoForge 26.x | Notes |
|---|---|---|
net.minecraft.resources.ResourceLocation |
net.minecraft.resources.Identifier |
Same identity, renamed by Mojang in 1.21.2. Static factories renamed accordingly (ResourceLocation.fromNamespaceAndPath -> Identifier.fromNamespaceAndPath). |
net.minecraft.world.item.ItemStack (as recipe output) |
net.minecraft.world.item.ItemStackTemplate |
26.1 introduced a template wrapper for recipe outputs to allow late binding. Convert to a runtime ItemStack via template.create(). |
net.neoforged.neoforge.fluids.FluidStack (as recipe output) |
net.neoforged.neoforge.fluids.FluidStackTemplate |
Same wrapper concept as ItemStackTemplate. |
IFluidHandler.fill / drain with FluidAction
|
Transaction-scoped ResourceHandler<FluidResource>.insert / extract
|
NeoForge 26.x switched to the transactional resource-handler model for capabilities. |
@OnlyIn(Dist.CLIENT) (member-stripping) |
Removed | 26.1 no longer strips members at runtime. See the 26.1_primer.md for the replacement patterns (call-site gating, helper class isolation, FMLEnvironment.getDist()). |
Anything not in this table behaves identically between versions. If you're writing addon code and seeing a NoSuchMethodError or ClassNotFoundException referencing one of the renamed types, swap the name from the column matching your target.
Add Neo Vitae as a dependency in your build.gradle:
repositories {
maven {
name = "BreakInBlocks"
url = "https://maven.breakinblocks.com/releases"
}
// Modonomicon is a transitive dependency of NeoVitae
maven {
name = "KliKli's maven"
url = "https://dl.cloudsmith.io/public/klikli-dev/mods/maven/"
content { includeGroup "com.klikli_dev" }
}
// Geckolib is a transitive dependency of NeoVitae
maven {
name = "Geckolib"
url = "https://dl.cloudsmith.io/public/geckolib3/geckolib/maven/"
content { includeGroup "software.bernie.geckolib" }
}
}
dependencies {
implementation("com.breakinblocks.neovitae:neovitae:${minecraftVersion}-${neoVitaeVersion}")
}You can find the version of the latest released artifact here.
Note: The API classes are in the main mod JAR under
com.breakinblocks.neovitae.api. There is no separate api artifact.
All API classes live in the main source set at src/main/java/com/breakinblocks/neovitae/api/. There is no separate API artifact or source set; you compile against the main jar and the same classes are loaded at runtime.
com.breakinblocks.neovitae.api/
├── NeoVitaeAPI.java
├── INeoVitaeAPI.java
├── altar/
│ ├── IAraVitae.java
│ └── rune/
│ ├── AltarRuneModifiers.java
│ ├── EnumAltarRuneType.java
│ ├── IAltarRuneRegistry.java
│ ├── IAltarRuneType.java
│ └── RuneInstance.java
├── capability/
│ └── NVCapabilities.java
├── event/
│ ├── AltarRuneEvent.java
│ ├── AnimaEvent.java
│ └── SentientArmorEvent.java
├── incense/
│ ├── ITranquilityHandler.java
│ └── TranquilityHandler.java
├── item/
│ └── IUpgradeHolder.java
├── recipe/
│ ├── AraVitaeInput.java
│ └── AraVitaeRecipe.java
├── registry/
│ └── NeoVitaeRegistries.java
├── ritual/
│ ├── AreaDescriptor.java # + Rectangle, HemiSphere, Cross
│ ├── EnumRuneType.java
│ ├── IImperfectRitual.java
│ ├── IImperfectRitualStone.java
│ ├── IRitual.java
│ └── RitualComponent.java
├── routing/
│ ├── IRoutingNode.java
│ ├── IMasterRoutingNode.java
│ ├── IItemRoutingNode.java
│ ├── IInputItemRoutingNode.java
│ ├── IOutputItemRoutingNode.java
│ ├── IFluidRoutingNode.java
│ ├── IInputFluidRoutingNode.java
│ ├── IOutputFluidRoutingNode.java
│ ├── IItemFilter.java
│ ├── IFluidFilter.java
│ ├── IEnergyFilter.java
│ ├── IRoutingFilter.java
│ ├── IFilterKey.java
│ ├── RoutingChannel.java
│ └── RoutingChannelRegistry.java
├── sentient/
│ ├── ISentientArmorManager.java
│ └── ISentientArmorUpgrade.java
├── sigil/
│ ├── ISigilEffect.java
│ ├── SigilEffect.java
│ ├── SigilType.java
│ └── effects/
│ └── SigilEffects.java # + built-in effect classes
├── soul/
│ ├── IAnima.java
│ ├── AnimaTicket.java
│ └── SyphonResult.java
├── stream/
│ ├── StreamEffect.java
│ ├── StreamPresets.java
│ └── BlockyMode.java
└── spiritus/
├── ISpiritusHandler.java
├── IPlayerSpiritusHandler.java
├── SpiritusHandler.java
└── SpiritusState.java
These are in com.breakinblocks.neovitae.common (not the API package) but might be used by addons:
| Class | Package | Purpose |
|---|---|---|
NVAttributes |
common.attribute |
Custom player attributes (Blood Siphon, Blood Shield, etc.) |
NVItems |
common.item |
Item registry |
NVBlocks |
common.block |
Block registry |
NVMobEffects |
common.effect |
Custom mob effects (Flight, Bounce, Gravity, etc.) |
SpiritusType |
common.datacomponent |
Spiritus aspect enum (RAW, RUINA, NIHILUM, VINDICTA, INVICTUS) |
NVDataComponents |
common.datacomponent |
Data component registry |
ForgeRecipe |
common.recipe.forge |
Hellfire Forge recipe class |
FlaskRecipe |
common.recipe.flask |
Flask recipe base class |
SigilTypeRegistry |
registry |
Holds SIGIL_TYPE_KEY for sigil-type registry references |
The patterns below cover the most common addon entry points. Each links to its full reference section in API Reference.
import com.breakinblocks.neovitae.api.NeoVitaeAPI;
import com.breakinblocks.neovitae.api.INeoVitaeAPI;
// Get the API instance (safe to call from FMLCommonSetupEvent or later)
INeoVitaeAPI api = NeoVitaeAPI.getInstance();See the Anima System reference for full details, including AnimaTicket and the SyphonResult record.
INeoVitaeAPI api = NeoVitaeAPI.getInstance();
IAnima anima = api.getAnima(player.getUUID());
if (anima != null) {
int currentEV = anima.getCurrentEV();
}
AnimaTicket ticket = AnimaTicket.create(100);
SyphonResult result = anima.syphonAndDamage(player, ticket);
if (result.success()) {
performSigilEffect();
}See the Ritual System reference for IRitual, RitualComponent, and AreaDescriptor details. Players-facing ritual info lives in Rituals.
public static final DeferredRegister<Ritual> RITUALS =
DeferredRegister.create(NeoVitaeRegistries.RITUAL_KEY, "yourmodid");
public static final DeferredHolder<Ritual, MyCustomRitual> MY_RITUAL =
RITUALS.register("my_ritual", MyCustomRitual::new);
public YourMod(IEventBus modBus) {
RITUALS.register(modBus);
}See the Sigil System reference for the full effect/JSON pipeline. Player-facing sigil docs live in Sigils.
public static final DeferredRegister<MapCodec<? extends ISigilEffect>> SIGIL_EFFECTS =
DeferredRegister.create(NeoVitaeRegistries.SIGIL_EFFECT_TYPE_KEY, "mymod");
public static final Supplier<MapCodec<MyCustomEffect>> MY_CUSTOM_EFFECT =
SIGIL_EFFECTS.register("my_custom_effect", () -> MyCustomEffect.CODEC);
public static void register(IEventBus modBus) {
SIGIL_EFFECTS.register(modBus);
}See the Sentient Armor System reference for ISentientArmorManager, UpgradeInfo, and IUpgradeHolder. Player-facing info lives in Sentient Armor.
ISentientArmorManager manager = api.getSentientArmorManager();
if (manager.hasFullSet(player)) {
ResourceLocation upgradeId = ResourceLocation.fromNamespaceAndPath("neovitae", "strong_legs");
int level = manager.getUpgradeLevel(player, upgradeId);
manager.grantUpgradeExperience(player, upgradeId, 10.0f);
}-
Hellfire Forge - Recipe type is
neovitae:hellfire_forge, recipe directory ishellfire_forge/. Internal references useHELLFIRE_FORGE_*naming. - API classes in main JAR - there is no separate API artifact or source set. Compile against the main jar; the same classes are loaded at runtime.
-
Modonomicon transitive dependency - addons that compile against NeoVitae may need Modonomicon on the classpath (for
NVGuideBookItem). -
API stability - The interfaces in
com.breakinblocks.neovitae.api.*are the supported surface for addons. Classes outside that package (including thecommon.*helpers listed above) are used by addons in practice but are not held to the same stability guarantees and may shift between releases. Pin your dependency to a known-good version range. -
@OnlyInis not used in this API on 1.21.1 in a way that affects addons, but if you backport patterns from this doc to the 26.1 port note that the annotation is removed there. Always gate client references throughclient/packages. - Reporting issues - please include the Neo Vitae version, NeoForge version, relevant code snippets, and full error logs.
- API Reference - Full per-system signatures, codecs, JSON formats, and worked examples.
- Rituals, Sigils, Sentient Armor - Player-facing gameplay docs for the systems you'll be hooking into.
- Home - Wiki index.
Start Here
Core Systems
- Ara Vitae and Runes
- Blood Orbs and Anima
- Sigils
- Tabula Vitae, Flasks and Anointments
- Hellfire Forge and Sentient Equipment
- Sentient Armor
- Rituals
- Spiritus, Aspects and Crystals
- Alchemy Arrays
- Athanor and Materials
The Endless Dungeon
Automation
Pack Makers
Developers
Project