Перейти к содержимому
Mineforgian

AspectsLib

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

1K загрузок1 подписчиковMITfabric

Обновлён 20 февраля 2026 г. · опубликован 18 июля 2025 г.

  • Aspects (Displayed On Item Tooltip)
  • AspectsLib (Alternative Icon, No Background)

AspectsLib (Alternative Icon, No Background)

AspectsLib is a comprehensive library mod that adds a customizable "aspect" system to Minecraft. It includes:

  1. A complete hierarchy of 37 built-in aspects organized into four tiers (Primal, Secondary, Tertiary, Quaternary)
  2. Tools to define custom aspects via JSON datapacks
  3. Aspect assignment to items, entities, and blocks
  4. Visual aspect display in item tooltips with icons and values
  5. Complex aspect interaction system with resonance calculations
  6. Full API for mod developers to extend the system
Tier Aspect Meaning
Primal Aer Air
Aqua Water
Ignis Fire
Ordo Order
Perditio Entropy
Terra Earth
Secondary Gelum Ice
Lux Light
Metallum Metal
Mortuus Death
Motus Motion
Permutatio Change
Potentia Power
Vacuos Void
Victus Life
Vitreus Glass
Tertiary Bestia Beast
Exanimis Undeath
Herba Plant
Instrumentum Tool
Praecantatio Magic
Spiritus Spirit
Tenebrae Darkness
Vinculum Binding
Volatus Flight
Quaternary Alienis Unknown
Alkimia Alchemy
Auram Aura
Aversion Repulsion
Cognitio Knowledge
Desiderium Desire
Fabrico Construction
Humanus Humanity
Machina Machine
Praemunio Protection
Sensus Sense
Vitium Corruption

Версии

ВерсияКаналИграЗагрузчикиДатаСкачать
1.2.0Релиз1.20.1fabric20 февраля 2026 г.Скачать (413 КБ)
1.1.8Релиз1.20.1fabric16 ноября 2025 г.Скачать (353 КБ)
1.1.7Релиз1.20.1fabric27 октября 2025 г.Скачать (353 КБ)
1.1.6Релиз1.20.1fabric27 октября 2025 г.Скачать (348 КБ)
1.1.5Релиз1.20.1fabric23 сентября 2025 г.Скачать (306 КБ)
1.1.4Релиз1.20.1fabric18 сентября 2025 г.Скачать (303 КБ)
1.1.3Релиз1.20.1fabric5 сентября 2025 г.Скачать (302 КБ)
1.1.2Релиз1.20.1fabric26 августа 2025 г.Скачать (291 КБ)
1.1.1Релиз1.20.1fabric26 августа 2025 г.Скачать (290 КБ)
1.0.5Релиз1.20.1fabric5 августа 2025 г.Скачать (167 КБ)
1.0.3Бета1.20.1fabric23 июля 2025 г.Скачать (166 КБ)
1.0.0Релиз1.20.1fabric18 июля 2025 г.Скачать (112 КБ)

Ченджлог

1.2.0Релиз1.20.1 · 20 февраля 2026 г.
  • Added Spell System Implementation (with proper casting and networking this time)
1.1.8Релиз1.20.1 · 16 ноября 2025 г.

(Pull Request #12 by pirate0815)

Originally, if AetherChunkData is loaded from disk, the final world variable is set to null. If the world is loaded from disk and a particular chunk was saved and becomes corrupted this can cause a Null Pointer Exception: java.lang.NullPointerException: Cannot invoke "net.minecraft.world.World.isClient()" because "world" is null at knot//dev.overgrown.aspectslib.aether.AetherManager.isDeadZone(AetherManager.java:79) at knot//dev.overgrown.aspectslib.aether.AetherChunkData.canHarvest(AetherChunkData.java:98) at knot//dev.overgrown.aspectslib.aether.AetherChunkData.harvestAether(AetherChunkData.java:107) at knot//dev.overgrown.aspectslib.corruption.CorruptionManager.processAetherConsumption(CorruptionManager.java:306) at knot//dev.overgrown.aspectslib.corruption.CorruptionManager.processRegionCorruption(CorruptionManager.java:138) at knot//dev.overgrown.aspectslib.corruption.CorruptionManager.processWorldCorruption(CorruptionManager.java:86) at knot//dev.overgrown.aspectslib.corruption.CorruptionManager.onServerTick(CorruptionManager.java:52)

This update fixes the problem by having AetherWorldState set the world variable of all its loaded AetherChunkData objects on the first call to get any AetherChunkData.

1.1.7Релиз1.20.1 · 27 октября 2025 г.
  • Fixed Corruption affecting biomes globally, now it's localized by chunks (Pull Request #10 by Leclowndu93150)
1.1.6Релиз1.20.1 · 27 октября 2025 г.

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
1.1.5Релиз1.20.1 · 23 сентября 2025 г.
  • Added proper rendering to the Aura Node entity (Pull Request #3 by Favouriteless
  • Gave Aura Nodes conditional transparency based on a condition similar to how aspects are shown on tooltips. I modifed the rendering code to make it transparent by default and only show fully when a condition is met. The Aura Node visibility should be completely configurable by other mods using the API now, with no default condition.

Usage Example for Other Mods

Other mods using your library would need to add their own visibility conditions:

// In another mod's client initialization
AspectsAPI.addAuraNodeVisibilityCondition((player, hasAspects) -> {
    // Example: Show nodes when player has a specific item
    return player.getMainHandStack().isOf(Items.NETHER_STAR);
});

// Or example: Show nodes when player is in creative mode
AspectsAPI.addAuraNodeVisibilityCondition((player, hasAspects) -> {
    return player.isCreative();
});

// Or example: Show nodes when player has a specific effect
AspectsAPI.addAuraNodeVisibilityCondition((player, hasAspects) -> {
    return player.hasStatusEffect(StatusEffects.NIGHT_VISION);
});

Default Behavior Now

  • By default: Aura nodes are semi-transparent (20% opacity) because no conditions are met
  • When conditions are added via API: Nodes become fully visible (100% opacity) when any condition returns true
  • Completely pluggable: No built-in logic - entirely driven by API consumers

This makes the library modular and allows each mod that uses it to define its own conditions for when Aura Nodes should be visible.

1.1.4Релиз1.20.1 · 18 сентября 2025 г.
  • Fixed critical entrypoint stage main crash upon initializing game
  • Removed Vitium hard coding in Corruption Manager
  • Added new aspectslib:aether_density report command with 3 sub-commands report, list, corrupt
1.1.3Релиз1.20.1 · 5 сентября 2025 г.
  • Fixed Aether Densities not loading properly from data packs. (Pull Request #2 by Leclowndu93150)
  • Updated Sculk spread when Vitium is the dominant aspect
1.1.2Релиз1.20.1 · 26 августа 2025 г.

Fixed issue with the corruption calculation. The problem was that the CorruptionManager is only checking the dynamic modifications and not considering the base biome densities.

I added the calculation of base biome density using BiomeAetherDensityManager.DENSITY_MAP and combined base density and dynamic modifications to calculate the total amounts.

I've also added a proper check to make sure corruption only starts when Vitium is truly dominant. The condition now is: totalVitium > totalOtherAspects where:

  • totalVitium = base vitium + dynamic vitium modifications
  • totalOtherAspects = sum of all other aspects (base + modifications)

Комментарии

Загружаем…