UniverseJobs | Ultimate Customized Jobs Plugin |1.20-1.21.8 | Folia support icon

UniverseJobs | Ultimate Customized Jobs Plugin |1.20-1.21.8 | Folia support -----

19 different action types, advanced conditions, boost systems, and full integration with plugins




Examples files and rewards rework
New Features
  • {max_jobs} Placeholder: Shows maximum jobs allowed in main menu and job menus
  • Back Button: Added navigation back button in reward GUIs to return to job menu
  • Player Head Support: Custom Base64 skull textures support in GUI configurations
  • Reward Templates: Status-specific display names and lore (retrievable/blocked/retrieved)
  • Page-Specific Slots: reward-slots-by-page for custom layouts per reward page
# Page-specific reward slots (optional)
# If not defined, uses default reward-slots for all pages

Code (YAML):
reward-slots-by-page:
  0
: # Page 1 (0-indexed) - farming pattern
   - 11
   - 20
  1
: # Page 2 - grid pattern
   - 11
   - 20
    ...
  2
: # Page 3 - compact layout
   - 11
   - 20
    ...
  • Complete Job Setup: Added 4 fully configured default jobs (Miner, Farmer, Hunter, Lumberjack)
  • Complete Reward GUIs: Added dedicated reward GUI files for all 4 default jobs
  • GUI Default Settings: All GUI items now inherit from gui-default-settings in config.yml
Major Changes
  • Reward System: Complete refactoring to use YAML configurations without hardcoding
  • Job System: Updated from placeholder example jobs to 4 complete, production-ready jobs
  • Update Checker: Switched from GitHub API to Spiget API for plugin updates
  • Menu Navigation: Fixed page 2+ interactions and improved click detection
  • Material Grouping: Actions with identical display-material are now properly grouped
  • Hunter Job: Added spawn eggs for all mobs with proper display materials
  • Farmer Job: Enhanced with crop harvesting and seed planting actions
  • Auto-Restore: Disabled by default in miner.yml for better action limit control
Removals
  • Example Files: Removed example.yml job and example_rewards.yml files
  • Example GUI: Removed example_rewards_gui.yml in favor of job-specific GUIs
  • Debug Spam: Reduced startup and shutdown console messages
  • Unused Code: Cleaned up imports and unused variables across multiple classes
Bug Fixes
  • NPE Crashes: Fixed NullPointerException when display-material returns null
  • Reward Pages: Fixed reward menus not working on pages 2, 3, 4+
  • Fill Items: Fixed background items not loading at server startup
  • Placeholder Loading: Fixed {max_jobs} not displaying in main menu
  • Item Grouping: Fixed duplicate actions not being grouped in action menus
  • Menu Updates: Fixed menus not refreshing properly after changes
  • Default Settings: Fixed GUI items not using gui-default-settings fallback
  • Hide Attributes: Fixed custom GUI items not hiding item attributes and enchants

  • Add CraftEngine support
  • Fix all oraxen implementation
  • Fix various internal problems
  • Add "display-material" option

Code (YAML):
break_cobblestone:
     target
: "COBBLESTONE"
     display-name
: "Cobblestone"
     display-material
: "COBBLESTONE:1001"   # Custom diamond with model data 1001 for the action menu
     lore
:
    - "<gray>Mine cobblestone blocks"
     xp
: 0.8
     money
: 0.3
----------, Sep 10, 2025

- Fix "/jobs admin give custom" command
- New option "silent" for "give custom" command
- Fix "age" settings
- Add blacklist protection block
Code (YAML):
block-protection:
  enabled
: true
  # List of block materials that are exempt from protection (always give XP)
  blacklist
:
   - "WHEAT"
- "Fix executed command in GUI ([console] [player])
- Fix "confirm message" when repeating command
- Remove "/jobs admin debug" command
- Add others missing message
----------, Sep 10, 2025

[+] Oraxen item/block support (oraxen:id)
[+] Important fix because it fixes a gain duplication with IgnoreCancelled
[+] Add "age" settings for crops
Code (YAML):
 BREAK:
    simple_wheat
:
      target
: "WHEAT"                       # Block to break
      age
: 7 #5-7 or 7 etc..
      display-name
: "harvest a wheat"
      lore
: [ ]
      xp
: 2.0
      money
: 3.0
[+] Improve performance
----------, Sep 10, 2025

[+] Oraxen item/block support (oraxen:id)
[+] Important fix because it fixes a gain duplication with IgnoreCancelled
[+] Add "age" settings for crops
Code (YAML):
 BREAK:
    simple_wheat
:
      target
: "WHEAT"                       # Block to break
      age
: 7 #5-7 or 7 etc..
      display-name
: "harvest a wheat"
      lore
: [ ]
      xp
: 2.0
      money
: 3.0
[+] Improve performance
----------, Sep 9, 2025

- Fix ItemsAdder/Nexo NoClassDefFoundError
- Fix error Cannot save player data when shutdown
----------, Sep 8, 2025

Improve Performance & UX
Multi-line Job Descriptions
  • Jobs now support beautiful multi-line descriptions that automatically expand in menus
  • Enhanced readability with proper line breaks in job lore
Configuration Example:
Code (YAML):

# Single line (old method)
description
: "Mine valuable ores and materials"

# Multi-line (new method)
description
:
 - "Extract valuable resources from"
  - "the depths of the earth!"
  - "Discover rare minerals and gems"
Configurable Job Status System
  • Complete customization of job status display in config.yml
  • Personalize colors, icons, and text for "Active" vs "Available" states
Configuration Example:

Code (YAML):
placeholders :
  # Action placeholders - customize how action information is displayed
  action_type
:
  # Default format for all action types
   default
: "<white>{value}"
    # Specific formats per action type
   EAT
: "<red><bold>EAT"
   BREAK
: "<#b5b5b5><bold>BREAK"
   KILL
: "<dark_red><bold>KILL"
   PLACE
: "<#cbe8a5><bold>PLACE"
   ENCHANT
: "<purple><bold>ENCHANT"
   BREW
: "<yellow><bold>BREW"
   CRAFT
: "<blue><bold>CRAFT"
   SMELT
: "<orange><bold>SMELT"
   BLOCK_INTERACT
: "<cyan><bold>INTERACT"
   ENTITY_INTERACT
: "<pink><bold>INTERACT"
   HARVEST
: "<pink><bold>HARVEST"
  action_target
: "<white>{value}"
  action_name
: "<white>{value}"
  action_display_name
: "<white>{value}"
  action_lore
: "<gray>{value}"
  action_xp_base
: "<#abffb3>{value}"
  action_xp
: "<#abffb3>{value}"
  action_xp_multiplier
: "<gray>(<white>x{value}<gray>)"
  action_money_base
: "<#FFD700>{value}"
  action_money
: "<#FFD700>{value}"
  action_money_multiplier
: "<gray>(<white>x{value}<gray>)"
  action_cooldown
: "<gray>Cooldown: {value}s"
  # Job status placeholders - customize how job status is displayed in menus
  job_status
:
   joined
: "<#abffb3>Active"
   not_joined
: "<#ff6b6b>Not Joined"
Persistent Player Statistics
  • Stat persistence - players can see progress even after leaving jobs
Example: A player leaves the "Miner" job at level 25 with 50,000 XP. When viewing the jobs menu, they still see:

Code (YAML):
Level : 25/100 (75.5 %)
XP
: 50,000
Status
: Not Joined
Batched Reward Processing
  • New BatchedRewardManager for ultra-efficient reward distribution
  • Configurable batching intervals for optimal performance
  • Massive performance boost for high-activity servers
Configuration Example:

Code (YAML):
performance:
  batching-xp
: 40       # XP batched every 40 ticks (2 seconds)
  batching-money
: 60   # Money batched every 60 ticks (3 seconds)
  batching-others
: 40   # Commands every 40 ticks (2 seconds)
User Experience Overhaul
Intuitive Controls
  • Left-click: Open detailed job menu
  • Right-click: Quick join/leave (goodbye Shift+click!)
  • Accessible and natural for all players
Before vs After:

Code (YAML):
Old : Shift+Left-click to join/leave jobs
New
: Right-click to join/leave jobs
Modern Menu Design
  • Stunning hex color scheme with mint, gold, and emerald tones
  • Professional Unicode symbols for better visual hierarchy
  • Clean else: syntax for menu configurations
Menu Configuration Example:

Code (YAML):
job-item-format:
  display-name
: "<bold>{job_name}</bold>"
  lore
:
  - "<gray>{job_description}"
   - "<gray>├ Level
: < #abffb3>{player_level}<gray>/<#abffb3>{job_max_level}"
   - "<gray>├ XP
: < #62de6e>{player_xp}"
   - "<gray>└ {progress_bar}"
 
  # Configuration for players without the job
  else
:
   lore
:
    - "<gray>{job_description}"
     - "<gray>Status
: {job_status } "
     - "
< #FFD700>▶ Right-click to join"
   glow
: true
Performance Revolution
Message System Optimization
  • 60-80% reduction in color conversion processing time
  • Ultra-fast pre-compiled pattern matching for common XP messages
  • Advanced multi-level caching system for components, colors, and legacy conversions
Technical Details:

Code (YAML):
Before : Every message converted from scratch (slow )
After
: Common patterns pre-compiled + 3-tier cache system (ultra-fast )
BossBar Engine Rewrite
  • Eliminated all CancellationException logging spam
  • Smooth timestamp-based cleanup system
  • Zero-overhead XP progress notifications
Configuration System Enhancement
  • Fixed critical reload issues with block protection settings
  • All configuration changes apply instantly with /jobs admin reload
  • No more server restarts required for config updates

Critical Fixes
Stability Improvements
  • Fixed: Missing reload-failed language messages causing errors
  • Enhanced: BossBar management with proper synchronization
Menu System Fixes
  • Improved: Job placeholder system with {job_description_lines}` support
  • Optimized: Menu configuration loading and validation
  • Streamlined: Reward GUI and command processing
  • Simplified: Navigation slots configuration
Technical Architecture
Code Quality Improvements
  • Optimized action processing and caching mechanisms
Performance Metrics
  • Message Processing: 60-80% faster color conversion
  • Memory Usage: Reduced with efficient caching strategies and object pooling
  • Server Load: Significantly decreased during high XP activity
  • Error Rate: Nearly eliminated configuration-related errors
  • Cache Hit Rate: Improved with multi-level caching system
Migration Guide
Optional Upgrades
  • Update menu configs to use new else: syntax for cleaner organization
  • Customize job status messages in config.yml
  • Enable multi-line descriptions for better job presentation
----------, Sep 6, 2025

✨ Major Features
GUI System for Boost Management
  • Interactive GUI for /jobs admin boost info replacing text display
  • Auto-refresh functionality
  • Right-click to remove boosts directly from GUI
  • Automatic sorting by boost launch order
  • 100% configurable via menus/boost-manager.yml
Bonus Calculation Mode System
Three calculation modes available in config.yml:

  1. ADDITIVE: 2.5x + 2.5x = 5.0x (addition)
  2. MULTIPLICATIVE: 2.5x × 2.5x = 6.25x (multiplication - default)
  3. HIGHEST: 3.0x, 2.5x = 3.0x (only the best boost)
Complete Reward System Overhaul
  • 100% customizable reward GUIs via YAML configuration
  • PlaceholderAPI integration throughout reward system
  • Nexo/ItemsAdder integration for custom items
  • Advanced reward conditions with feedback messages and sounds
  • GUI positioning system with configurable slots
️ Database Storage System
  • MySQL and SQLite support with HikariCP connection pooling
  • Database migration system with admin commands
Auto-Update System
  • GitHub integration for automatic update checking
  • Version comparison with semantic versioning support
Enhanced Menu System
  • Customizable job menus with menus/ configuration
  • Display name and lore support for job actions
  • Menu configuration reload via admin commands
Reward GUI System
⚙️ Configuration
Code (YAML):
# gui/example_rewards_gui.yml
title
: "<#FFD700><bold>{job} Rewards</bold>"
size
: 54

reward-item
:
  materials
:
    retrievable
: LIME_SHULKER_BOX
    blocked
: RED_SHULKER_BOX
    retrieved
: GRAY_SHULKER_BOX
 
  status-indicators
:
    retrievable
: "<#32CD32>✓"
    blocked
: "<#FF6B6B>✗"
    retrieved
: "<#808080>✓"
 
  lore-format
:
   - "{description}"
    - "<gray>Required Level
: < #FFD700>{level}"
    - "{reward_items}"
    - "{economy_reward}"
    - "{click_instruction}"
Available Placeholders
  • {name}, {description}, {level}, {status_description}
  • {repeatable_info}, {cooldown}, {reward_items}, {economy_reward}
  • {commands}, {click_instruction}
Boost Manager GUI
User Interface
  • Experience bottles for XP boosts
  • Gold ingots for Money boosts
  • Navigation items: close, refresh, information
  • Configurable sound effects
⚙️ Configuration
Code (YAML):
# menus/boost-manager.yml
title
: "<gold><b>Boost Manager</b></gold>"
size
: 54

xp-boosts
:
  slots
: [10, 11, 12, 13, 14, 15, 16 ]
  item
:
    material
: EXPERIENCE_BOTTLE
    display-name
: "<white>XP Boost <gold>{boost_id}</gold></white>"

money-boosts
:
  slots
: [28, 29, 30, 31, 32, 33, 34 ]
  item
:
    material
: GOLD_INGOT
    display-name
: "<white>Money Boost <gold>{boost_id}</gold></white>"

sounds
:
  open
:
    sound
: ENTITY_EXPERIENCE_ORB_PICKUP
    volume
: 0.5
  remove-boost
:
    sound
: ENTITY_EXPERIENCE_ORB_PICKUP
    volume
: 0.7
Available Variables
  • {boost_id}, {player_name}, {job_info}, {action_info}
  • {multiplier}, {remaining_time}, {xp_count}, {money_count}, {total_count}
Enhanced Reward Configuration
Code (YAML):
# rewards/example_rewards.yml
rewards
:
  milestone_100
:
    name
: "<gradient:#FFD700:#FFA500>Century Milestone</gradient>"
    required-level
: 100
    gui-slot
: 4
 
    requirements
:
      logic
: "AND"
      level_check
:
        placeholder
: "%universejobs_player_level%"
        operator
: "greater_equal"
        value
: "100"
      deny
:
        message
: "<#FF6B6B>❌ Requirements not met"
        sound
: "BLOCK_ANVIL_LAND"
      accept
:
        message
: "<gradient:#32CD32:#FFD700> ACHIEVED! </gradient>"
        sound
: "UI_TOAST_CHALLENGE_COMPLETE"
 
    items
:
      nexo_item
:
        nexo-id
: "custom_hammer"
      itemsadder_item
:
        itemsadder-id
: "magic_sword"
 
    economy-reward
: 10000
    commands
:
     - "lp user %player_name% permission set jobs.master true"
️ Boost Calculation Configuration
In config.yml
Code (YAML):
jobs :
  # Boost Calculation Mode
  # ADDITIVE: Multipliers are added together (2.5x + 2.5x = 5.0x)
  # MULTIPLICATIVE: Multipliers are multiplied (2.5x * 2.5x = 6.25x)
  # HIGHEST: Only the highest multiplier is used (3.0x, 2.5x = 3.0x)
  boost-calculation-mode
: MULTIPLICATIVE
Calculation Examples
ADDITIVE Mode
Code (YAML):
Boost 1 : 1.5x (+0.5 )
Boost 2
: 2.0x (+1.0 )
Total
: 1.0 + 0.5 + 1.0 = 2.5x
MULTIPLICATIVE Mode (default)
Code (YAML):
Boost 1 : 1.5x
Boost 2
: 2.0x
Total
: 1.5 × 2.0 = 3.0x
HIGHEST Mode
Code (YAML):
Boost 1 : 1.5x
Boost 2
: 2.0x ← Used
Total
: 2.0x (highest )
Permission-based Bonus Multipliers
  • Hierarchical permission system for bonus multipliers
  • Automatic calculation based on player permissions
  • Configurable multiplier values per permission level
Database Configuration
Code (YAML):
# config.yml
database
:
  enabled
: true
  type
: "mysql"   # or "sqlite"
 
  mysql
:
   host
: "localhost"
   database
: "universejobs"
   username
: "user"
   password
: "password"
 
  connection-pool
:
   maximum-pool-size
: 10
   connection-timeout
: 30000
Bug Fixes
Security Fixes
  • Eliminated all regex DoS vulnerabilities
  • Enhanced input sanitization for commands
  • NBT-based tracking for improved data integrity
Technical Fixes
  • Fixed shutdown race conditions preventing data saving
  • Resolved BossBar duplication and freezing problems
  • Fixed placeholder processing in reward commands
  • Corrected GUI navigation and status display
  • Missing messages
⚡ Performance Improvements
  • Optimized BossBar management with synchronization
  • Enhanced connection pooling for database operations
Language Files
Added missing reward messages in languages/en_US.yml:

  • rewards.claim.success/failed/already-claimed/requirements-not-met/cooldown
  • rewards.gui.job-not-found/no-rewards/no-available-rewards
️ New Files
  • gui/example_rewards_gui.yml - Customizable reward GUI template
  • rewards/example_rewards.yml - Comprehensive reward examples
  • Enhanced database configuration in config.yml
Usage
For Players
Code (YAML):
# View rewards GUI
/jobs rewards [job_name ]

# Check job info
/jobs info
For Administrators
Boost Management
Code (YAML):
# Open boost management GUI
/jobs admin boost info

# Give boosts
/jobs admin boost give xp * * * 2.0 3600
/jobs admin boost give money Player123 miner * 1.5 1800

# Remove boosts via command
/jobs admin boost remove boost_id_001
# Or right-click in GUI to remove
Database Management
Code (YAML):
# Migrate to database
/jobs admin database migrate
/jobs admin database status
Configuration
Code (YAML):
# Reload configurations
/jobs admin reload
/jobs admin reload menus
Job Configuration
Code (YAML):
# jobs/example.yml
rewards
: "example_rewards"
gui-reward
: "example_rewards_gui"
Code (YAML):
# config.yml
jobs
:
  boost-calculation-mode
: MULTIPLICATIVE
Permissions
Permission Description
universejobs.admin.boost Full access to boost system (GUI + commands)
universejobs.admin.boost.* Access to all admin boost features
universejobs.admin.reload Reload configurations
universejobs.multiplier.<exp/money/others>.<number> Bonus multiplier permissions (hierarchical)
Thank you for using UniverseJobs!
----------, Sep 5, 2025

Block Protection System
- Added `block-protection.enabled` in config.yml to prevent XP farming from player-placed blocks
Language Files
- Added missing reward messages in fr_FR.yml and en_US.yml:
- `rewards.claim.already-claimed`
- `rewards.claim.no-job`
- `rewards.claim.level-requirement`
- `rewards.claim.no-permission`
- `rewards.claim.requirements-not-met`
- `rewards.claim.cooldown`
- `rewards.gui.job-not-found`
- `rewards.gui.no-rewards`
- `rewards.gui.no-available-rewards`
Placeholders
- Added BoostPlaceholder for PlaceholderAPI
- Standardized placeholder identifier to "universejobs"
Bug Fixes
- Removed unused furnace blacklist check in JobActionListener
----------, Sep 3, 2025


Resource Information
Author:
----------
Total Downloads: 89
First Release: Sep 3, 2025
Last Update: Yesterday at 10:59 PM
Category: ---------------
All-Time Rating:
3 ratings
Version -----
Released: --------------------
Downloads: ------
Version Rating:
----------------------
-- ratings