promotional bannermobile promotional banner

MMO Skill Tree & Abilities

(Multiple Languages) MMO Skill Tree adds an RPG-style progression system where every action you take helps you grow stronger.

File Details

MMOSkillTree-0.2.2.jar

  • R
  • Jan 18, 2026
  • 146.78 KB
  • 883
  • Early Access

File Name

MMOSkillTree-0.2.2.jar

Supported Versions

  • Early Access

Changelog

v0.2.2

Bugfixes

  • Fixed double drops not working - Double drops now actually add bonus items to inventory
    • Moved double drop logic from BreakBlockEventSystem to PickupItemEventSystem
    • When items are picked up, checks DOUBLE_DROP reward chance for the relevant skill
    • Bonus items are added directly to inventory (hotbar prioritized) via getCombinedHotbarFirst().addItemStack()
    • Notification now shows item count: "Double Drop! (+3)"

v0.2.1

Bugfixes

  • Fixed duplicate component error - Resolved IllegalArgumentException: Entity contains component type crash when multiple XP events fired in the same tick (e.g., breaking multiple blocks rapidly or combat with multiple hits)
    • Added pending component cache to prevent duplicate addComponent calls before CommandBuffer consumption

v0.2.0

New Features

  • Reward Effect Framework - Pluggable system for reward effects with handler registry

    • RewardEffectHandler interface for all effect types
    • RewardEffectRegistry singleton maps RewardType to handlers
    • RewardEffectContext provides store, ref, playerRef, skills to handlers
  • 9 Implemented Reward Types - Beyond XP bonuses:

    • STAT_HEALTH - Increases max health via Hytale's EntityStatMap
    • STAT_STAMINA - Increases max stamina via EntityStatMap
    • STAT_DAMAGE - Multiplies outgoing damage
    • STAT_DEFENSE - Reduces incoming damage (capped at 90%)
    • CRITICAL_CHANCE - Chance for 1.5x damage on attacks
    • LIFESTEAL - Heals attacker for percentage of damage dealt
    • DOUBLE_DROP - Chance for bonus resources when gathering
    • FALL_DAMAGE_REDUCTION - Reduces fall damage (capped at 90%)
    • BONUS_XP - Multiplies XP gain (existing)
  • Combat Effect Notifications - New settings toggle for lifesteal/crit feedback

    • Toggle via Settings > Combat Effect Notifications
    • Lifesteal shows green "+X.X" heal notification
    • Saved per-player in SkillComponent
  • Hytale EntityStatMap Integration - Direct stat modification

    • StatModifierUtil helper class for health/stamina modifiers
    • Uses DefaultEntityStatTypes.getHealth() and getStamina()
    • StaticModifier with Modifier.ModifierTarget.MAX for permanent bonuses
    • healEntity() for lifesteal healing
  • Expanded Skill Tree Defaults - 10 tiers with varied reward types

    • Gathering skills: BONUS_XP, DOUBLE_DROP, STAT_STAMINA, STAT_DEFENSE, STAT_HEALTH
    • Combat skills: BONUS_XP, STAT_DAMAGE, CRITICAL_CHANCE, LIFESTEAL, STAT_HEALTH
    • Defense: STAT_DEFENSE, STAT_HEALTH, FALL_DAMAGE_REDUCTION
    • Acrobatics: FALL_DAMAGE_REDUCTION (10%→40%), STAT_STAMINA, STAT_DEFENSE
  • Debug Starting Level - Config option for testing high-level gameplay

    • Set debugStartingLevel in config.json to initialize new players at that level
    • Set to 0 (default) for production

Technical

  • New reward/ package:

    • RewardEffectHandler.java - Interface for effect handlers
    • RewardEffectRegistry.java - Singleton registry
    • RewardEffectContext.java - Context holder
    • StatModifierUtil.java - Hytale stat integration
    • effects/PassiveEffect.java - Base for passive effects
    • effects/StatHealthEffect.java - STAT_HEALTH handler
    • effects/StatStaminaEffect.java - STAT_STAMINA handler
    • effects/NoOpEffect.java - Placeholder for deferred types
  • CombatDamageEventSystem enhancements:

    • Uses DamageModule.get().getFilterDamageGroup() to modify damage before health loss
    • applyAttackerEffects() - Damage bonus + critical chance
    • applyDefenseReduction() - Defense damage reduction
    • applyFallDamageReduction() - Fall damage reduction
    • applyLifesteal() - Heal on damage with optional notification
  • BreakBlockEventSystem enhancements:

    • checkDoubleDrops() - Random check for double drops
    • Notification when double drop triggers
  • SkillComponent additions:

    • showCombatEffects boolean for combat notification preference
    • Codec entry for persistence
  • SkillTreeService additions:

    • getTotalLifesteal(), getTotalHealthBonus(), getTotalStaminaBonus()
    • Effect application on claim/reset

Upgrade Notes

Run /mmoconfig reloaddefaults after upgrading to load the new 10-tier skill trees with varied reward types.


v0.1.1

New Features

  • Settings Page - New in-game settings UI accessible via the Settings tab on ViewXpPage

    • Toggle XP notifications on/off with a single click
    • Choose XP gain threshold from preset values (1, 5, 10, 25, 50, 100)
    • Visual feedback for current settings state
    • Back button to return to skill overview
  • Expanded Skill Tree Defaults - All 12 implemented skills now have 6 tiers of rewards

    • Previously some skills had only 2-4 tiers
    • Consistent progression across Mining, Woodcutting, Excavation, Harvesting, Swords, Axes, Archery, Unarmed, Defense, Acrobatics, Crafting, and Building
    • Updated skill pairings for meaningful choices (Harvesting now pairs with Excavation/Crafting instead of unimplemented Cooking/Alchemy)
  • Dynamic Skill Tree UI - Skill tree page now uses template-based dynamic rendering

    • Automatically scales to display any number of tiers
    • Improved visual styling with larger fonts and clearer status indicators

Upgrade Notes

Important: After upgrading to v0.1.1, run /mmoconfig reloaddefaults to load the new 6-tier defaults for all skills. This will reset your skill tree configuration to the new defaults.


v0.1.0

New Features

  • Skill Tree System - Unlock XP bonus rewards at level milestones

    • 6 tiers per skill, unlocked at levels 5, 10, 15, 20, 30, 40
    • Each tier offers a choice between XP bonus for the main skill OR a related skill
    • Example: Mining tier lets you choose +5% Mining XP OR +5% Excavation XP
    • Rewards persist across sessions via ECS component
  • Meaningful Reward Choices - Each skill pairs with thematically related skills: (TEMPORARY UNTIL MORE COMPLEX IMPLEMENTATION)

    • Mining ↔ Excavation, Smithing
    • Woodcutting ↔ Building, Crafting
    • Excavation ↔ Mining, Harvesting
    • Harvesting ↔ Cooking, Alchemy
    • Swords ↔ Defense, Axes
    • Axes ↔ Swords, Woodcutting
    • Archery ↔ Crafting, Acrobatics
    • Unarmed ↔ Acrobatics, Defense
    • Defense ↔ Acrobatics, Swords
    • Acrobatics ↔ Defense, Unarmed
    • Crafting ↔ Mining, Smithing
    • Building ↔ Woodcutting, Crafting
  • Skill Tree UI (SkillTreePage)

    • Navigate between skills with arrow buttons
    • Shows tier status: LOCKED (gray), AVAILABLE (white), or CLAIMED (green)
    • Color-coded buttons show selection state
    • Reset button to clear all selections for current skill
    • Opens via /skilltree command or Tree button on ViewXpPage
  • ViewXpPage Enhancement - Added "Tree" button next to each skill to jump directly to its skill tree

  • Bonus XP System - Claimed BONUS_XP rewards apply multiplicatively to XP gains

    • Stack bonuses from multiple tiers for compounding effect
  • Milestone Notifications - Players notified when new tiers unlock

    • Automatic detection when leveling up
    • Prompts players to use /skilltree to claim

New Commands

  • /skilltree [skill] - Open the skill tree UI
    • Aliases: /st, /rewards
    • Optional skill argument to jump to specific skill

Configuration

  • New config file: config/mmoskilltree/skilltree.json
    • Configurable level thresholds per tier
    • Per-skill reward choices with custom values
    • Currently supports BONUS_XP reward type (other types defined but not yet implemented)

Technical

  • New data classes:

    • RewardType.java - Enum of reward types (BONUS_XP implemented, others placeholder)
    • SkillReward.java - Configurable reward with id, type, value, display name
    • SkillTreeNode.java - Milestone with level threshold and reward choices
  • New config classes:

    • SkillTreeConfig.java - Singleton config for skill trees with JSON persistence
    • SkillTreeDefaults.java - Default rewards with meaningful skill pairings
  • New service:

    • SkillTreeService.java - Milestone checking, reward claiming, XP multiplier calculations
  • New UI:

    • SkillTreePage.java - Interactive page with claim/reset/navigate actions
    • SkillTreePage.ui - Layout with 6 tiers, 2 choices each, navigation and reset buttons
  • Extended SkillComponent:

    • claimedRewards - Map of skill → claimed reward IDs per tier
    • pendingRewards - Map of skill → pending milestone notifications
    • resetRewards(skill) / resetAllRewards() - Clear claimed rewards
    • String serialization for codec compatibility
  • Extended MMOSkillTreeAPI:

    • updateSkillComponent(PlayerRef, SkillComponent) - Explicit update hook
  • Modified SkillService:

    • Integrated milestone checks on XP gain
    • Applies bonus XP multiplier from claimed rewards

v0.0.11

New Features

  • Combat XP System - Full implementation of combat skills via CombatDamageEventSystem

    • SWORDS - XP for melee damage with longswords, daggers, spears, claws, staves
    • AXES - XP for melee damage with axes, clubs, maces, battleaxes
    • ARCHERY - XP for ranged damage with bows, crossbows, wands, spellbooks, guns, bombs
    • UNARMED - XP for dealing damage without weapons
    • DEFENSE - XP for taking damage from any source
    • ACROBATICS - XP for surviving fall damage
  • Material-Tiered XP Values - Rare weapons give more XP than common ones

    • Common (Crude, Copper, Tribal): 5-6 XP
    • Uncommon (Iron, Bronze, Scrap): 7-9 XP
    • Rare (Cobalt, Adamantite, Thorium): 20-32 XP
    • Epic (Mithril, Onyxium): 45-55 XP
    • Legendary (Flame, Void, Spectral): 55-70 XP
  • New Skills (in SkillType enum, not yet implemented)

    • FISHING, TAMING, REPAIR, ALCHEMY, ENCHANTING, COOKING, SMITHING

Technical

  • Separate defaults files for maintainability:
    • SwordsDefaults.java - Longswords, daggers, spears, staves (melee)
    • AxesDefaults.java - Axes, clubs, maces (blunt weapons)
    • ArcheryDefaults.java - Bows, crossbows, wands, spellbooks, guns, bombs
  • SkillDefaults.java now delegates to per-skill defaults files
  • New TriggerTypes: DEAL_DAMAGE_PHYSICAL, DEAL_DAMAGE_PROJECTILE (replaced DEAL_DAMAGE)
  • Weapon detection uses inventory.getActiveHotbarItem().getItemId() for pattern matching
  • Patterns match actual item IDs (e.g., Weapon_Longsword_Mithril, Weapon_Axe_Iron)

v0.0.10

New Features

  • Crafting XP - New CraftRecipeEventSystem awards XP when crafting items
  • Building XP - New PlaceBlockEventSystem awards XP when placing blocks
  • CRAFTING skill - New general crafting skill type (15 XP per craft by default)
  • BUILDING skill defaults - Placing blocks now awards XP at 50% of the breaking value (e.g., placing stone = 2 XP vs mining stone = 3 XP)

Technical

  • New event/CraftRecipeEventSystem.java - Handles CraftRecipeEvent for crafting XP
  • New event/PlaceBlockEventSystem.java - Handles PlaceBlockEvent for building XP
  • SkillDefaults.getBuildingDefaults() dynamically computes values from mining/woodcutting/excavation at 50%

v0.0.9

New Features

  • Quick threshold commands - Set XP display threshold with /xpd 10, /xpd 20, /xpd 0, etc.

Bugfixes

  • Progress bar display - Fixed progress bar rendering in skill UI

v0.0.8

Bugfixes

  • /mmoconfig reloaddefaults - Now properly saves config after reloading defaults (previously only applied in-memory)

Changes

  • Enhanced notifications - XP gain and level up messages now use the notification system instead of chat messages for better visibility

v0.0.7

New Features

  • ViewXpPage - New custom UI page for viewing skill stats
    • Shows total level, total XP, and number of active skills
    • Displays individual skill progress for all configured skills
    • Only shows skills with XP configuration data (unconfigured skills hidden)
    • Open via player.getPageManager().setPage(ref, store, new ViewXpPage(playerRef))

Technical

  • New pages/ package for custom UI pages
  • UI files in src/main/resources/Common/UI/Custom/Pages/
  • Updated CLAUDE.md with UI page documentation and naming conventions

v0.0.6

New Features

  • /mmoconfig reloaddefaults - New admin command to reset all XP values to built-in defaults from SkillDefaults.java

v0.0.5

New Features

  • Comprehensive default XP values for all Hytale blocks based on official item database
    • Mining: 10+ rock types, 9 ore tiers (Copper→Onyxium), 7 gem types
    • Woodcutting: 30+ tree types across 5 tiers (Common→Special)
    • Excavation: All soil types including grass, sand, mud, snow, ash
    • Harvesting: Grass, ferns, bushes, flowers, crops, fruits, coral, vines
  • PickupItemEventSystem - Awards XP when picking up items

Changes

  • Professional package structure - Reorganized codebase:
    • api/ - Public API for other plugins
    • command/ - Command handlers
    • config/ - Configuration and defaults
    • data/ - Data models (SkillComponent, SkillType)
    • event/ - Event system handlers
    • service/ - Business logic
    • util/ - Utility classes
  • SkillDefaults.java - Centralized default XP values (separated from config)
  • Updated import paths: com.ziggfreed.mmoskilltree.api.MMOSkillTreeAPI, com.ziggfreed.mmoskilltree.data.SkillType

v0.0.4

Bugfixes

  • Fixed issue with "harvesting" blocks not rewarding xp

v0.0.3

New Skills

New skills added for developers to access via API

New Features

  • Public API (MMOSkillTreeAPI) for other plugins to access player skill data
    • getSkillComponent(PlayerRef) - Get full skill data
    • getXp(PlayerRef, SkillType) / getLevel(PlayerRef, SkillType) - Get specific skill data
    • getTotalXp(PlayerRef) / getTotalLevel(PlayerRef) - Get combined stats
    • getAllXp(PlayerRef) / getAllLevels(PlayerRef) - Get all skills as maps
    • addXp(PlayerRef, SkillType, long) - Add XP (silent)
    • removeXp(PlayerRef, SkillType, long) / setXp(PlayerRef, SkillType, long) - Modify XP
    • getLevelProgress(PlayerRef, SkillType) - Get progress to next level (0.0-1.0)
    • calculateLevelFromXp(long) / getXpRequiredForLevel(int) - Utility methods
    • hasSkillData(PlayerRef) / getSkillTypes() - Helper methods
  • New skill category: Misc (for Building and future utility skills)
  • New trigger types: PLACE_BLOCK, FALL_DAMAGE, TAME_ENTITY, CATCH_FISH

Changes

  • /mmoxp now only shows skills with XP > 0 (cleaner display)
  • Plugin instance now accessed via MMOSkillTreePlugin.getInstance() (singleton pattern)
  • Commands now extend AbstractPlayerCommand with PlayerRef parameter
  • Internal services use API for cache access (DRY principle)
  • Consistent cache keying via PlayerRef.hashCode()

v0.0.2

Changes

  • Changed default XP gain threshold for message display from 0 to 10
  • Fixed permission issue with /xpdisplay command

v0.0.1 - Initial Release

Skills

  • Mining - Gain XP from breaking stone and ores
  • Woodcutting - Gain XP from chopping trees and logs
  • Excavation - Gain XP from digging soil and dirt
  • Harvesting - Gain XP from harvesting plants and crops

Features

  • Quadratic XP scaling formula for balanced progression
  • Per-player XP display preferences (toggle on/off, set minimum threshold)
  • Persistent player data via ECS component codec
  • JSON config file with hot-reload support
  • Pattern-based block matching for flexible XP configuration

Commands

  • /mmoxp - View your skill levels and XP progress
  • /xpdisplay - Configure personal XP notification settings
    • on / off - Toggle XP gain messages
    • threshold --value=<n> - Only show gains >= n XP
    • status - View current settings
  • /mmoconfig (OP only) - Server configuration
    • list --args=<skill|all> - View XP configurations
    • <skill> --args=<pattern|xp> - Set XP for block pattern
    • basexp --args=<value> - Set base XP per level
    • scale --args=<multiplier> - Set leveling speed
    • remove --args=<skill|pattern> - Remove block pattern
    • reload - Reload config from file

Technical

  • Dynamic skill system - adding new skills only requires enum entry + defaults
  • TriggerType system for future event handlers (combat, crafting, etc.)
  • Thread-safe skill caching for command access
  • Auto-generates config on first launch