00-Argonath-Wiki

Bundles vs Modules

Understanding when to use pre-built bundles versus individual modules.

Overview

Argonath Systems offers two distribution strategies:

Approach Best For Flexibility Complexity
Bundles End users, quick start Low Low
Modules Developers, custom builds High Medium

Bundles

What Are Bundles?

Pre-configured collections of modules packaged as single JAR files, ready to use.

Available Bundles

1. Quest Bundle (bundle-quest)

Purpose: Complete quest system with all dependencies

Includes:

Use When:

Example:

dependencies {
    implementation 'com.hytale.argonath:bundle-quest:1.0.0'
}

2. Core Bundle (bundle-core)

Purpose: Minimal platform setup for custom systems

Includes:

Use When:

Example:

dependencies {
    implementation 'com.hytale.argonath:bundle-core:1.0.0'
}

Bundle Advantages

Quick Setup - Single dependency, everything works ✅ Tested Together - Pre-validated compatibility ✅ Easy Updates - Update one version number ✅ Beginner Friendly - No dependency management ✅ Smaller Distribution - One JAR vs multiple

Bundle Disadvantages

Larger Size - Includes modules you may not need ❌ Less Control - Can’t exclude specific modules ❌ Version Lock - All modules same version ❌ Update Overhead - Can’t update individual parts

When to Use Bundles

✅ Use Bundles If:

❌ Don’t Use Bundles If:

Individual Modules

What Are Modules?

Separate, independent libraries that can be mixed and matched.

Module Categories

Platform Layer (Required)

implementation 'com.hytale.argonath:platform-core:1.0.0'
implementation 'com.hytale.argonath:platform-sdk:1.0.0'

Always needed for any Argonath mod

Adapters (Pick One or Both)

implementation 'com.hytale.argonath:adapter-hytale:1.0.0'      // Hytale game
implementation 'com.hytale.argonath:adapter-mod-api:1.0.0'     // Mod API

Connects platform to game engine

Core Frameworks (Common)

implementation 'com.hytale.argonath:framework-core:1.0.0'
implementation 'com.hytale.argonath:framework-accessor:1.0.0'
implementation 'com.hytale.argonath:framework-config:1.0.0'
implementation 'com.hytale.argonath:framework-storage:1.0.0'
implementation 'com.hytale.argonath:framework-text-styling:1.0.0'

Foundational utilities used by other frameworks

Feature Frameworks (Optional)

// Quest System
implementation 'com.hytale.argonath:framework-quest:1.0.0'
implementation 'com.hytale.argonath:framework-npc:1.0.0'
implementation 'com.hytale.argonath:framework-objective:1.0.0'
implementation 'com.hytale.argonath:framework-condition:1.0.0'

// UI System
implementation 'com.hytale.argonath:framework-ui:1.0.0'

Add only what you need

Module Advantages

Granular Control - Choose exactly what you need ✅ Smaller Footprint - Only include necessary code ✅ Version Flexibility - Mix versions if needed ✅ Dependency Clarity - Explicit about what you use ✅ Better for Libraries - Don’t force dependencies on users

Module Disadvantages

Complex Setup - Must manage dependencies manually ❌ Version Conflicts - Easy to get incompatible versions ❌ More Configuration - Multiple dependency declarations ❌ Harder Debugging - More places for issues

When to Use Modules

✅ Use Modules If:

❌ Don’t Use Modules If:

Decision Tree

Are you building a quest mod?
├─ YES → Use Quest Bundle
└─ NO
   ├─ Do you need UI framework only?
   │  ├─ YES → Core Bundle + framework-ui module
   │  └─ NO
   │     └─ Building custom framework?
   │        ├─ YES → Use individual modules
   │        └─ NO → Use Core Bundle

Common Scenarios

Scenario 1: Simple Quest Mod

Goal: Add quests to Hytale

Solution: Quest Bundle

dependencies {
    implementation 'com.hytale.argonath:bundle-quest:1.0.0'
}

Why: Everything included, no thinking required.

Scenario 2: Custom Economy System

Goal: Build economy mod, no quests

Solution: Core Bundle + Storage

dependencies {
    implementation 'com.hytale.argonath:bundle-core:1.0.0'
    // Storage already in core bundle
}

Why: Don’t need quest frameworks, just platform.

Scenario 3: NPC Dialog System (No Quests)

Goal: Advanced NPC conversations only

Solution: Individual Modules

dependencies {
    // Platform
    implementation 'com.hytale.argonath:platform-core:1.0.0'
    implementation 'com.hytale.argonath:platform-sdk:1.0.0'
    
    // Adapter
    implementation 'com.hytale.argonath:adapter-hytale:1.0.0'
    
    // Minimal frameworks
    implementation 'com.hytale.argonath:framework-core:1.0.0'
    implementation 'com.hytale.argonath:framework-npc:1.0.0'
}

Why: Only need NPC framework, not entire quest system.

Scenario 4: Building a Library

Goal: Create reusable utilities for other mods

Solution: Individual Platform Modules Only

dependencies {
    compileOnly 'com.hytale.argonath:platform-core:1.0.0'
    compileOnly 'com.hytale.argonath:platform-sdk:1.0.0'
}

Why: compileOnly - don’t force dependencies on users.

Scenario 5: Rapid Prototyping

Goal: Test an idea quickly

Solution: Quest Bundle (even if not using quests)

dependencies {
    implementation 'com.hytale.argonath:bundle-quest:1.0.0'
}

Why: Get everything, figure out what you need later.

Scenario 6: Production Mod

Goal: Published mod with specific requirements

Solution: Carefully Selected Modules

dependencies {
    // Exactly what we need, nothing more
    implementation 'com.hytale.argonath:platform-core:1.0.0'
    implementation 'com.hytale.argonath:platform-sdk:1.0.0'
    implementation 'com.hytale.argonath:adapter-hytale:1.0.0'
    implementation 'com.hytale.argonath:framework-core:1.0.0'
    implementation 'com.hytale.argonath:framework-config:1.0.0'
    implementation 'com.hytale.argonath:framework-ui:1.0.0'
}

Why: Minimal size, clear dependencies, professional.

Mixing Bundles and Modules

Can You Mix Them?

Generally NO - causes duplicate classes and conflicts.

Exception: Add modules NOT in your bundle

dependencies {
    implementation 'com.hytale.argonath:bundle-core:1.0.0'
    // Add UI framework not in core bundle
    implementation 'com.hytale.argonath:framework-ui:1.0.0'  // ✅ OK
}

Never Do:

dependencies {
    implementation 'com.hytale.argonath:bundle-quest:1.0.0'
    implementation 'com.hytale.argonath:framework-quest:1.0.0'  // ❌ DUPLICATE
}

Migration Between Approaches

From Bundle to Modules

  1. Identify what you’re actually using
    // Scan imports
    import com.hytale.argonath.framework.quest.*;  // Using quest
    import com.hytale.argonath.framework.ui.*;     // Using UI
    
  2. Replace bundle with specific modules
    dependencies {
        // Replace this:
        // implementation 'com.hytale.argonath:bundle-quest:1.0.0'
           
        // With these:
        implementation 'com.hytale.argonath:platform-core:1.0.0'
        implementation 'com.hytale.argonath:platform-sdk:1.0.0'
        implementation 'com.hytale.argonath:adapter-hytale:1.0.0'
        implementation 'com.hytale.argonath:framework-core:1.0.0'
        implementation 'com.hytale.argonath:framework-quest:1.0.0'
        implementation 'com.hytale.argonath:framework-ui:1.0.0'
    }
    
  3. Test and verify

From Modules to Bundle

  1. Determine if bundle covers your needs
  2. Replace all individual dependencies with bundle
    dependencies {
        // Replace 10+ lines with:
        implementation 'com.hytale.argonath:bundle-quest:1.0.0'
    }
    
  3. Remove unused imports/code

Best Practices

For Bundles

DO:

DON’T:

For Modules

DO:

DON’T:

Version Management

Bundle Versioning

// All modules in bundle share version
implementation 'com.hytale.argonath:bundle-quest:1.0.0'
// Internally: platform-core:1.0.0, framework-quest:1.0.0, etc.

Module Versioning

// Can use different versions (not recommended)
implementation 'com.hytale.argonath:platform-core:1.0.0'
implementation 'com.hytale.argonath:framework-quest:1.1.0'  // Newer version

Recommendation: Keep all Argonath modules at same version.

Performance Considerations

JAR Size Comparison

Approach Typical Size Load Time
Quest Bundle ~5-8 MB Fast
Core Bundle ~2-3 MB Faster
Minimal Modules ~500 KB - 2 MB Fastest

Runtime Performance

No difference - unused classes not instantiated regardless of approach.

Summary

Factor Bundles Modules
Ease of Use ⭐⭐⭐⭐⭐ ⭐⭐⭐
Flexibility ⭐⭐ ⭐⭐⭐⭐⭐
Size ⭐⭐⭐ ⭐⭐⭐⭐⭐
Beginner Friendly ⭐⭐⭐⭐⭐ ⭐⭐
Library Development ⭐⭐⭐⭐⭐
Maintenance ⭐⭐⭐⭐ ⭐⭐⭐

Quick Recommendations


Still confused? Ask in Discussions!