A comprehensive RPG extension mod for Hytale servers that adds player leveling, mob scaling, and experience systems.
- Level System: Players can level up from 1 to 50
- Experience Points: Gain experience by defeating mobs
- Dynamic Experience Requirements: Experience needed per level scales with progression (100 + (level - 1) × 50)
- Experience Bar UI: Visual experience bar displayed in the HUD
- Dynamic Mob Levels: Mobs spawn with randomized levels based on their type
- Configurable Level Ranges: Customize level ranges for each mob type via JSON configuration
- Level-Based Experience: Higher level mobs grant more experience when defeated
- Level Display: Mob levels are automatically displayed in nameplates above entities in the format
[level], appearing near health bars
- Mob Level System: Automatically assigns levels to mobs on spawn
- Experience System: Calculates and awards experience based on mob level
- Mob Level Nameplate System: Automatically updates entity nameplates to display mob levels
- Component-Based Architecture: Built on Hytale's Entity Component System (ECS)
- Hytale Server: Compatible with Hytale server versions
- Java: Java 25 or higher
- Maven: For building the project
-
Clone this repository:
git clone <repository-url> cd HyRPGMod
-
Build the project:
maven package
-
The compiled JAR will be automatically copied to your Hytale mods directory (configured in
pom.xml) -
Start your Hytale server - the mod will load automatically
Edit src/main/resources/mob_levels.json to configure level ranges for different mob types:
{
"Frog": { "minLevel": 1, "maxLevel": 5 },
"Bear_Grizzly": { "minLevel": 10, "maxLevel": 25 },
"Dragon_Fire": { "minLevel": 30, "maxLevel": 50 }
}Each mob type can have a custom minLevel and maxLevel. When a mob spawns, it will be assigned a random level within this range.
The experience awarded for killing a mob is calculated as:
Experience = 20 + (Mob Level × 5)
HyRPGMod/
├── src/main/java/dev/crazzymods/
│ ├── components/
│ │ ├── LevelComponent.java # Player level and experience tracking
│ │ └── MobLevelComponent.java # Mob level component
│ ├── config/
│ │ ├── MobLevelRange.java # Level range data class
│ │ └── MobTypeConfig.java # Mob level configuration loader
│ ├── events/
│ │ ├── EnsurePlayerDataEvent.java # Player data initialization
│ │ └── InitGUIEvent.java # UI initialization
│ ├── systems/
│ │ ├── MobLevelSystem.java # Assigns levels to mobs on spawn
│ │ ├── MobKillExperienceSystem.java # Awards experience on mob kills
│ │ └── MobLevelNameplateSystem.java # Updates nameplates to display mob levels
│ ├── ui/
│ │ ├── ExperienceBar.java # Experience bar UI component
│ │ └── ExperienceHudService.java # HUD service for experience display
│ └── HyRPG.java # Main plugin class
├── src/main/resources/
│ ├── Common/UI/Custom/ # UI assets
│ ├── manifest.json # Mod manifest
│ └── mob_levels.json # Mob level configuration
└── pom.xml # Maven configuration
- Ensure you have Maven installed
- Run
mvn clean packageto build the project - The JAR file will be generated in
target/directory
Edit the constants in MobKillExperienceSystem.java:
BASE_EXPERIENCE: Base experience awarded (default: 20)EXPERIENCE_PER_LEVEL: Additional experience per mob level (default: 5)
Edit MAX_LEVEL in:
LevelComponent.java(player level cap)MobLevelComponent.java(mob level cap)
LevelComponent levelComponent = commandBuffer.getComponent(
playerRef,
LevelComponent.getComponentType()
);
int level = levelComponent.getLevel();
int currentExp = levelComponent.getCurrentExperience();
int neededExp = levelComponent.getNeededExperience();levelComponent.addExperience(amount);MobLevelComponent mobLevel = commandBuffer.getComponent(
mobRef,
MobLevelComponent.getComponentType()
);
int mobLevelValue = mobLevel.getLevel();Mob levels are automatically displayed in nameplates above entities. The level appears in the format [level] and is appended to any existing nameplate text. For example:
- A mob with no existing nameplate will show:
[5] - A mob named "Bear" with level 15 will show:
Bear [15]
The nameplate system automatically:
- Updates when mobs spawn with levels
- Preserves existing nameplate text
- Removes level information if the level component is removed
Current version: 0.1-alpha
Contributions are welcome! Please feel free to submit a Pull Request.
CraZzyShaDoW
For issues, questions, or feature requests, please open an issue on the repository.