Mods
Resource Packs
Data Packs
Modpacks
Shaders
Plugins
Mods Resource Packs Data Packs Plugins Shaders Modpacks
Get Modrinth App Upgrade to Modrinth+
Sign in
ModsPluginsData PacksShadersResource PacksModpacks
Sign in
Settings
AspectsLib

AspectsLib

Library mod that adds data-driven Aspects from Thaumcraft, allowing to attach Aspects to entities and create unique interactions between them.

515
0
Library
Magic
Utility

Compatibility

Minecraft: Java Edition

1.20.1

Platforms

Fabric

Supported environments

Client and server

90% of ad revenue goes to creators

Support creators and Modrinth ad-free with Modrinth+

Links

Report issues View source
Donate on Ko-fi

Creators

Overgrown
Overgrown Lead Developer
Leclowndu93150
Leclowndu93150 Developer
thatrobin
thatrobin Developer
electrictaco Texture Artist

Details

Licensed MIT
Published 4 months ago
Updated 2 weeks ago
DescriptionGalleryChangelogVersions
All versionsAspectsLib (1.1.6)

AspectsLib (1.1.6)

Download
Report

Changelog

I'm excited to announce a complete ground-up rewrite of AspectsLib's core systems! This update represents the most significant changes since the mod's inception, with entirely new implementations of the Aether, Corruption, and Aspects systems.

Aspects System

What's New

The aspects system has been completely redesigned with a more flexible and performant architecture:

Universal Aspect Assignment:

  • Single Data Pack Format for items, blocks, entities, and biomes
  • Tag Support for all assignment types
  • Dynamic Registry with proper dependency management
  • NBT Persistence across saves

New Data Pack Structure:

// data/yourmod/aspect_assignments/your_aspects.json
[
  {
    "item": "minecraft:diamond",
    "aspects": {
      "aspectslib:terra": 10,
      "aspectslib:vitreus": 5
    }
  },
  {
    "item_tag": "#minecraft:logs",
    "aspects": {
      "aspectslib:arbor": 3
    }
  },
  {
    "biome": "minecraft:forest",
    "aspects": {
      "aspectslib:arbor": 8,
      "aspectslib:herba": 6
    }
  }
]

API Usage Examples:

// Get aspects from any object
AspectData itemAspects = AspectsAPI.getAspectData(itemStack);
AspectData blockAspects = AspectsAPI.getBlockAspectData(blockId);
AspectData entityAspects = AspectsAPI.getEntityAspectData(entityId);
AspectData biomeAspects = AspectsAPI.getBiomeAspectData(biomeId);

// Register aspects programmatically
AspectsAPI.registerItemAspect(Items.DIAMOND, AspectsLib.identifier("terra"), 10);
AspectsAPI.registerBiomeAspect(Biomes.FOREST, AspectsLib.identifier("arbor"), 8);

// Create custom aspect data
AspectData.Builder builder = AspectsAPI.createAspectDataBuilder();
builder.add(AspectsLib.identifier("ignis"), 5);
builder.add(AspectsLib.identifier("aqua"), 3);
AspectData customData = builder.build();

Resonance System:

  • Aspect Interactions: Define amplifying or opposing relationships
  • Dynamic Calculations: Automatic RU (Resonance Unit) calculations
  • Data Pack Configurable: Easy to extend with custom interactions
// data/yourmod/resonance/fire_water.json
{
  "aspect1": "aspectslib:ignis",
  "aspect2": "aspectslib:aqua", 
  "type": "opposing",
  "factor": 2.0
}

Aether System

What is the Aether?

The Aether is a dimensional resource system that represents the ambient "mana" in chunks. It's automatically generated from biome aspects and can be harvested.

Key Features

Dimension-Based Configuration:

// data/yourmod/aether_config/overworld.json
{
  "recoveryRate": 1.5,
  "permanentDeadZoneThreshold": 15000,
  "temporaryDeadZoneRecoveryThreshold": 0.2,
  "chunkVolume": 65536
}

Automatic Aether Generation:

  • Aether is generated from biome aspects in each chunk
  • Dead Zones can form when Aether is over-harvested
  • Automatic Recovery happens over time
  • Permanent vs Temporary dead zones with different behaviors

API Usage Examples:

// Check if a spell can be cast
AspectData spellCost = new AspectData.Builder()
    .set(AspectsLib.identifier("ignis"), 5)
    .set(AspectsLib.identifier("vitreus"), 3)
    .build();

if (AetherAPI.canCastSpell(world, player.getBlockPos(), spellCost)) {
    // Cast the spell
    boolean success = AetherAPI.castSpell(world, player.getBlockPos(), spellCost);
}

// Monitor Aether levels
int currentAether = AetherAPI.getAetherLevel(world, pos, AspectsLib.identifier("ignis"));
int capacity = AetherAPI.getAetherCapacity(world, pos, AspectsLib.identifier("ignis"));
double percentage = AetherAPI.getAetherPercentage(world, pos, AspectsLib.identifier("ignis"));

// Manage dead zones
if (AetherAPI.isDeadZone(world, pos)) {
    if (AetherAPI.isPermanentDeadZone(world, pos)) {
        // Permanent wasteland
    } else {
        // Temporary dead zone that can recover
        AetherAPI.forceRecovery(world, pos); // Admin command to force recovery
    }
}

Corruption System

The corruption system now provides meaningful world progression with tangible effects:

Corruption States:

  • Pure (0): No Vitium present
  • Tainted (1): Vitium present but not dominant
  • Corrupted (2): Vitium dominates other aspects
  • Regenerating: Recovering from corruption

Progressive Effects:

  1. Aspect Consumption: Vitium consumes other aspects over time
  2. Sculk Spreading: Automatic sculk growth in corrupted areas
  3. Aether Depletion: Corruption can drain Aether
  4. Dead Zone Creation: Extreme corruption creates Dead Zones

API Usage Examples:

// Check corruption state
int corruptionState = CorruptionAPI.getBiomeCorruptionState(biomeId);
boolean isCorrupted = CorruptionAPI.isBiomeCorrupted(biomeId);
boolean isTainted = CorruptionAPI.isBiomeTainted(biomeId);
boolean isPure = CorruptionAPI.isBiomePure(biomeId);

// Get Vitium levels
int vitiumAmount = CorruptionAPI.getVitiumAmount(biomeId);

// Manipulate corruption
CorruptionAPI.forceCorruption(biomeId, 50); // Add 50 Vitium
CorruptionAPI.purifyBiome(biomeId); // Remove all Vitium

// Access corruption tracking data
CorruptionChunkData chunkData = CorruptionAPI.getChunkData(serverWorld, chunkPos);
Collection<CorruptionChunkData> allTracked = CorruptionAPI.getTrackedChunks(serverWorld);

Recipe Aspect Calculation

The new recipe system automatically calculates aspects for crafted items based on their ingredients.

Configuration:

// config/aspectslib/recipe_aspects.json
{
  "enabled": true,
  "craftingLoss": 0.8,
  "smeltingLoss": 0.9,
  "smithingLoss": 0.95,
  "stonecuttingLoss": 1.0,
  "maxDepth": 20,
  "parallelThreads": 4
}

Commands:

  • /aspectslib recipe recalculate - Force recalculation
  • /aspectslib recipe enable [true|false] - Toggle system

Developer APIs & Integration

Aspect Management:

// Full aspect lifecycle management
Optional<Aspect> aspect = AspectsAPI.getAspect(new Identifier("aspectslib:terra"));
Map<Identifier, Aspect> allAspects = AspectsAPI.getAllAspects();

// Dynamic aspect manipulation
AspectsAPI.addAspect(itemStack, AspectsLib.identifier("ignis"), 5);
AspectsAPI.setAspectData(itemStack, customAspectData);

Tooltip System:

// Custom tooltip visibility conditions
AspectsTooltipConfig.addVisibilityCondition((stack, player) -> {
    return player != null && player.isSneaking();
});

// Aura node visibility
AspectsAPI.addAuraNodeVisibilityCondition((player, hasAspects) -> {
    return player.hasPermissionLevel(2) || hasAspects;
});

Breaking Changes & Migration

Migration Guide:

  • Update data packs to use new aspect_assignments format
  • Update API calls to use new AspectsAPI class
  • Convert aspect definitions to new JSON format
  • Update dimension configs to use aether_config format

Dependencies

dependency-iconFabric APIrequired
dependency-iconOvergrown's Syncoptional

Files

aspectslib-1.1.6.jar(347.73 KiB) Primary
Download
aspectslib-1.1.6-sources.jar(253.96 KiB)
Download

Metadata

Release channel

Release

Version number

1.1.6

Loaders

Fabric

Game versions

1.20.1

Downloads

13

Publication date

October 27, 2025 at 12:40 AM

Publisher

Overgrown

Overgrown

Lead Developer

Version ID

Modrinth is open source.

feat/theseus/tauri-v2@c5403db

© Rinth, Inc.

Company

TermsPrivacyRulesCareers

Resources

SupportBlogDocsStatus

Interact

Discord X (Twitter) Mastodon Crowdin
Get Modrinth App Settings
NOT AN OFFICIAL MINECRAFT SERVICE. NOT APPROVED BY OR ASSOCIATED WITH MOJANG OR MICROSOFT.