Orbis & Dungeons (RPG class mod)

The Evolution Update introduces a modular Race and Class system, allowing players to combine unique biological traits and combat specializations for permanent stats, weapon bonuses, and elemental resistances.

File Details

Orbis_and_Dungeons-2026.2.22-64709.jar

  • R
  • Feb 22, 2026
  • 135.32 KB
  • 3.6K
  • Early Access

File Name

Orbis_and_Dungeons-2026.2.22-64709.jar

Supported Versions

  • Early Access

Version 2026.2.22 - Class Lookup Persistence Fix

🐛 Bug Fixes

Fixed: getPlayerClass() Returning "none" for Valid Players

Problem: RaceManager.getPlayerClass(player) was returning "none" even when the player had a class correctly set.

Root Cause: The method only consulted RaceStorage (the in-memory/file cache). If the server restarted and the cache was not yet populated (e.g., the player hadn't triggered any class-setting action since the restart), the method returned "none" — even though the class was correctly persisted in the RaceData component.

Compare with getPlayerRace(), which has a full fallback chain:

  1. RaceData component via PlayerRef.getHolder()
  2. In-memory LAST_KNOWN_RACE cache
  3. RaceStorage file cache

getPlayerClass() previously only performed step 3.

Fix applied in RaceManager.getPlayerClass():

// Before (only checked RaceStorage):
String classId = RaceStorage.getPlayerClass(player.getUuid());

// After (mirrors getPlayerRace's fallback logic):
// 1. Check RaceStorage first
// 2. If not found, fallback to RaceData component via PlayerRef.getHolder()
// 3. When found in component, sync to RaceStorage for faster future lookups

When the class is recovered from the component, RaceStorage is automatically updated so subsequent calls resolve from cache.

📝 Files Modified

  • RaceManager.java — Added component fallback to getPlayerClass()

🚀 For Server Admins

No breaking changes. This is a transparent fix — no config wipes or command changes required.

If players were seeing "none" as their class after a server restart, this update resolves the issue automatically on the next call to getPlayerClass().