EdenCorrections Wiki

Here's everything you need to know about our custom guard system. I've been working on this for a while and it's finally ready for production. Let me walk you through how it all works.

What This System Does v2.0.0

Alright, so I've built this guard system to be as customizable as possible. With that comes a lot of information so be sure to read ALL of this!

🛡️ Duty Management

Guards can only go on duty if they're in the right area and have the proper rank.

⚖️ Wanted & Jail System

Wanted levels, chase mechanics, and that arrest minigame we've been wanting. Players actually have to work to escape now.

💰 Economy Integration

Guards earn time while on duty, can convert it to tokens, and there's a penalty system for people who abuse off-duty time.

🔧 Easy to Manage

I've made it super configurable so we can tweak things as we go. Plus it hooks into most of our existing plugins.

What you need: We're already running LuckPerms, WorldGuard, and PlaceholderAPI, so this should drop right in.

Getting This Running

1. Drop It In
  1. I've already got the dependencies covered (LuckPerms, WorldGuard, PlaceholderAPI)
  2. Just drop the EdenCorrections.jar into /plugins
  3. Restart the server and it'll generate the config files
2. Configure the Basics

You'll need to edit plugins/EdenCorrections/config.yml to match the desired setup:

# This should match our guard spawn area
guard-system:
  duty-region: "guard_spawn"
  
# These need to match our LuckPerms groups exactly
  rank-mappings:
    trainee: "trainee"
    private: "private" 
    officer: "officer"
    sergeant: "sergeant"
    captain: "captain"
    warden: "warden"
3. Set Up Permissions

Run these commands to give our guard ranks access:

/lp group officer permission set edencorrections.guard true
/lp group warden permission set edencorrections.admin true
4. Test It Out
/corrections reload
Heads up: Make sure the guard_spawn WorldGuard region exists before testing. Guards can only go on duty if they're standing in that area.

Dependencies

Required
  • LuckPerms (strict rank enforcement)
  • WorldGuard (duty region/safe/restricted zones)
  • PlaceholderAPI (placeholders)
Optional
  • Vault + Economy (penalty deductions)
  • CoinsEngine (token commands for banking)
  • CMI (kit and jail integration)
  • ChatControl (enhanced tags/channel)
  • MySQL (production database)

Duty System

This is the heart of the whole system - how guards actually go on and off duty.

How It Works
  • Rank Check: Only players with the right LuckPerms group can go on duty
  • Location Check: They have to be standing in our guard spawn area
  • Countdown: 5-second immobilization/chat warning gives players a sight heads up a guard will be patrolling soon
  • Kit Assignment: Automatically gives them the right CMI kit based on their rank
  • Inventory Backup: Saves their civilian inventory and restores it when they go off duty
The Configuration
guard-system:
  duty-region: "guard_spawn"  # Our guard spawn area
  immobilization-time: 5      # 5 second countdown
  strict-rank-enforcement: true
  
  rank-mappings:
    trainee: "trainee"
    officer: "officer"
    captain: "captain"
    warden: "warden"
    
  kit-mappings:
    trainee: "guard_trainee"
    officer: "guard_officer" 
    captain: "guard_captain"
    warden: "guard_warden"
Quick note: Guards use /duty to toggle on/off. While on duty, they earn off-duty time that can be converted to tokens later or simply used to spend time off duty.

Penalty Escalation

Overrun off-duty time triggers staged penalties with slowness and recurring economy deductions. Boss bar shows stage and overrun minutes.

  • Grace: guard-system.penalty-escalation.grace-period
  • Stage 1/2: slowness + optional warnings
  • Recurring: interval slowness + $$$ deduction
  • Admin: clear/set/simulate via /corrections duty

Wanted System

Levels 0–5 with decay, reason tracking, boss bar, + more

Duration
times.wanted-duration
Max Level
jail-system.max-wanted-level
Immunity
security.guard-immunity.wanted-protection

Chase System

Distance-capped, safe/restricted zones aware, dual boss bars (guard/target), warnings, and capture integration to jail.

Max Distance
chase-system.max-distance
Warning Distance
chase-system.warning-distance
Restricted Areas
chase-system.restrictions.restricted-areas
Combat Block
chase-system.restrictions.prevent-chase-during-combat

Jail & Arrest Minigame

Countdown-based arrest with optional pointer minigame, configurable jail time by wanted level, offline jailing, and guard alerts.

  • Countdown: jail-system.countdown within countdown-radius
  • Minigame: jail-system.minigame.* (length, speeds, colors, messages)
  • Time: base-time + level * level-multiplier

Contraband

Request item drop by type (sword/bow/armor/drugs/potion) with timed compliance boss bar, detection messages, and auto-violation handling.

  • Types: contraband-system.types.*
  • Drug test: contraband-system.drug-test.*
  • Compliance: times.contraband-compliance

Duty Banking

Convert total duty time to tokens via a console command template. Auto-conversion support and status displays.

Enabled
banking-system.enabled
Rate
banking-system.conversion-rate (seconds → token)
Command
banking-system.currency-command (e.g. et give {player} {amount})

Guard Loot

On-duty guard deaths drop from rank-based weighted pools in loot.yml, with enchants, potions, names. Supports XP, announcements, and inventory retrieval.

  • Pools: guard-loot.default/officer/sergeant/captain
  • Settings: announce, experience, retrieval (cost/time/ranks), spread

Progression

Namespaced commands for status and promotions. Works with LuckPerms tracks and configurable arrest/time/cost requirements.

  • Commands: /ecprogress, /ecpromote, /ecrankup
  • Config: progression.rankup.* (track, economy-mode, requirements)

Commands You'll Need

Guard Commands

These are the commands the guards will be using daily.

/duty

Go on or off duty. They need to be in the guard spawn area and have the right rank.

/jail <player> [reason]
/jailoffline <player> [reason]

Arrest someone (works even if they're offline). You can add a reason if you want. Will automatically calculate their jail time based on their wanted level. No wanted level? Jails them for the configured default time.

/sword | /bow | /armor
/potiontest

Request contraband drops or test for drugs/potions.

/dutybank convert
/dutybank status

Convert duty time to tokens or check how much time you have banked.

Admin Commands

These are for us to manage the system.

/corrections wanted <player> <level> [reason]

Set someone's wanted level (0-5). Useful for testing or manual adjustments.

/corrections duty <player> <add|remove|set> <seconds>

Give or take away off-duty time from someone. Good for rewards or fixing issues.

/corrections penalty <player> <clear|simulate>

Clear someone's penalties or test the penalty system.

/corrections reload

Reload the config after making changes.

/loot test <rank>
/loot reload

Test what loot drops for different ranks or reload the loot config.

Pro tip: Most commands have tab completion. If you're stuck, try /corrections help for the full command list.

Permissions

Base
  • edencorrections.guard
  • edencorrections.admin
Guard Suite
  • edencorrections.guard.*
  • edencorrections.guard.duty, .chase, .jail, .contraband, .banking, .retrieve
  • edencorrections.progression.use
Admin Suite
  • edencorrections.admin.*, edencorrections.admin
  • edencorrections.admin.area, .loot, .penalty
  • edencorrections.admin.bypass.guard-rank, edencorrections.admin.bypass.cooldown

Configuration Examples

Here are the key config sections you'll probably want to adjust for our server.

Database Setup
# We're using SQLite for now (simpler)
database:
  type: "sqlite"
  file: "edencorrections.db"

# If we want to switch to MySQL later:
# database:
#   type: "mysql"
#   host: "localhost"
#   port: 3306
#   database: "prison_server"
#   username: "corrections_user"
#   password: "secure_password"
Our Region Setup
regions:
  safe-areas: ["spawn", "shops", "visitor_area"]  # No chases here
  restricted-areas: ["armory", "admin_zone"]      # No chases here either
  
security:
  strict-rank-enforcement: true
  guard-immunity:
    wanted-protection: true      # Guards can't get wanted
    contraband-exemption: true   # Guards don't get contraband tested
Economy Settings
banking-system:
  enabled: true
  conversion-rate: 3600  # 1 hour of duty = 1 token
  currency-command: "et give {player} {amount}"  # Our token command
  auto-conversion: false

# Penalty system (requires Vault)
guard-system:
  penalty-escalation:
    economy-deduction: 50.0      # $50 per penalty stage
    deduction-interval: 300      # Every 5 minutes
UI Settings
user-interface:
  boss-bars:
    enabled: true
    update-interval: 20  # Update every second
    colors:
      duty: "GREEN"      # On duty
      wanted: "RED"      # Wanted level
      chase: "YELLOW"    # Being chased
      penalty: "PURPLE"  # Penalty stages
Performance note: I've enabled spam control by default to prevent command flooding. You can adjust the settings in the performance section if needed.

PlaceholderAPI Integration

Use these placeholders in other plugins, scoreboards, and chat formatting.

Duty System Placeholders
%edencorrections_duty_status%          # On/Off duty status
%edencorrections_duty_time_formatted%   # Formatted duty time (1h 30m)
%edencorrections_duty_rank%             # Current guard rank
%edencorrections_off_duty_time%         # Available off-duty time
Justice System Placeholders
%edencorrections_wanted_level%          # Wanted level (0-5)
%edencorrections_wanted_stars%          # Visual stars (★★★☆☆)
%edencorrections_wanted_time_left%      # Time until wanted expires
%edencorrections_chase_status%          # Being chased/chasing
%edencorrections_chase_target%          # Chase target name
Economy & Stats Placeholders
%edencorrections_banking_tokens%       # Available banking tokens
%edencorrections_total_arrests%         # Lifetime arrest count
%edencorrections_progression_rank%      # Progression system rank
%edencorrections_penalty_stage%         # Current penalty stage
Usage Example: In your scoreboard plugin, use %edencorrections_duty_status% to show if a player is on duty.

Troubleshooting

If something goes wrong, here's how to figure out what's happening.

Diagnostic Commands
/corrections system stats

Shows you how many players are using the system, database performance, and other useful stats.

/corrections system debug

Turns on detailed logging so we can see exactly what's happening when issues occur.

Common Problems

Guards Can't Go On Duty

  • Make sure they have the right LuckPerms group (trainee, officer, etc.)
  • Check that the guard_spawn WorldGuard region exists
  • Verify they're actually standing in the guard spawn area
  • Look at the config to make sure rank mappings match our LuckPerms groups

Database Issues

  • If using MySQL, check that the database server is running
  • For SQLite, make sure the plugin folder has write permissions
  • Check the server logs for any database connection errors

Performance Problems

  • Spam control should already be enabled, but check the config
  • Boss bars update every second by default - you can slow this down if needed
  • Use /corrections system stats to see if there are any obvious bottlenecks
Where to Look

If you need to dig deeper, check these files:

  • logs/latest.log - General server logs
  • plugins/EdenCorrections/debug.log - Detailed plugin logs (when debug is on)
If you need help: DM me.