Configuration defaults: Values shown for operator-configurable settings are the bundled defaults, and can be changed in the module’s configuration or definitions. The server’s active settings take precedence, so costs, speeds, ranges, durations, chances, effects, recipes, limits and enabled features may differ. Command examples illustrate syntax; fixed mechanics and validation bounds are not configuration defaults.
Justice owns arrest/restraint, transport, detention, charges, fines/tickets, bail, wanted records, warrants, emergency entry, K9, contraband, death bodies and forensic work, radar/IR and road spikes. Configure facilities and roles before using intake. Suite installation covers the combined plugin.
First-start checklist
- Confirm
/justice status reports the intended database type. - Create at least one prison facility and one prison cell. Logouts while tased or in holding need a prison destination.
- Create holding facilities and cells if temporary detention will be used.
- Set each facility's release point.
- Review maximum prison and holding times.
- Set the Economy government treasury account through Economy.
- Configure police, judge, forensic, K9, and administrator permissions.
- Review or replace the default charges through
/charges. - Populate the contraband catalog through
/contraband. - Test local chat routing with the configured
/l command. - Test one cuff, holding booking, prison booking, fine, ticket, K9 alert, and body examination before opening the system to players.
Creating facilities with WorldEdit selections
Justice creates and updates its WorldGuard regions directly from the executing administrator's current WorldEdit selection. Both cuboid and polygon selections are supported.
Facility and cell IDs are converted to lowercase. IDs may contain lowercase letters, numbers, underscores, and hyphens and may be at most 64 characters.
Create a holding drop-off
- Use WorldEdit to select the entire holding intake/drop-off area.
- Keep the selection active and remain in the same world.
- Stand at the location that should initially serve as the release point. This does not have to be inside the selected drop-off.
- Run:
/justice facility cityholding holding
Justice creates the WorldGuard region:
justice_dropoff_cityholding
Create a prison drop-off
Repeat the process with a prison intake selection:
/justice facility cityprison prison
This creates:
justice_dropoff_cityprison
Add cells
Cells must be registered one at a time.
- Select the complete cell with WorldEdit.
- Stand inside that selection at the exact safe location and facing direction where inmates should appear.
- Run:
/justice cell cityprison cell1
Justice creates:
justice_cell_cityprison_cell1
Repeat for every cell:
/justice cell cityprison cell2
/justice cell cityprison cell3
A cell cannot be added to an unknown facility. The combined generated WorldGuard region ID must not exceed 128 characters.
Set the final release point
Stand where released players should be sent and run:
/justice releasepoint cityprison
Do the same for each holding facility.
Make a new WorldEdit selection and repeat the same facility or cell command with the same IDs. Justice replaces the region's shape while preserving its existing WorldGuard flags, owners, members, priority, and parent.
Justice does not automatically apply gameplay flags. Configure any desired WorldGuard flags normally after creation.
Arresting, cuffing, and dragging
An officer can begin cuffing either by right-clicking a player with crafted handcuffs in the main hand or by running /cuff <player> while holding them.
The officer and target must remain within the configured movement tolerance of their starting positions for the configured cuff duration. The default tolerance is 0.4 blocks. The attempt is cancelled if:
- Either player changes position
- Either player logs out
- The officer teleports
- The officer changes hotbar slot
- The officer stops holding the handcuffs
- Either player becomes unavailable or out of the active attempt
Looking around does not count as movement and does not cancel the timer. Small positional corrections within the tolerance are also accepted. On completion, a walking target is cuffed and attached to the officer; a seated target remains cuffed in the vehicle.
An officer may drag up to two suspects. Cuffed players cannot move themselves, although they can still turn their camera. On attachment, Justice immediately places a suspect at custody.follow-distance beside the officer if the path is clear. With two suspects, both remain in front with a small left/right separation. The position follows the officer in X, Y, and Z and stays at the configured horizontal holding distance as terrain permits.
Cuffed players cannot fly or begin gliding. On foot, horizontal and upward velocity are removed every tick, including velocity introduced by hits or other plugins. Officer flight never makes a walking suspect fly. A walking suspect stays at the last safe supported position if the officer rises into the air, and the cuffs break when the three-dimensional gap exceeds custody.leash-break-distance. External suspect teleports remain blocked; Justice's marked custody positioning and scoped vehicle-carrier updates are accepted.
Drag movement checks the suspect's actual player-sized bounding box against nearby block collision shapes. It tries the front position first and then shorter legal advances, using supported elevations on stairs and slabs up to custody.step-up-height. It rejects walls, ceilings, unsupported air, and paths that would sweep the body through solid geometry. When blocked, the suspect catches on the obstruction; the restraint breaks if the officer continues far enough to exceed the gap limit. Simple Elevators transfers use the verified elevator event and require a collision-free supported destination beside the officer.
Justice 1.4.16 corrects collision checks at ordinary world coordinates so a cuffed player follows on supported ground after attachment. If a newly cuffed player remains stationary on clear, flat ground, confirm the server loaded MCSkylines-*.jar after a restart.
When Simple Elevators 3.15.0 or newer is installed and integrations.simple-elevators is enabled, its official ElevatorEvent authorizes one otherwise-blocked officer teleport. Justice transfers every actively dragged suspect to the same destination and then resumes front-positioning. The source, destination, world, vertical movement, event lifetime, and final officer position are validated. Other plugin teleports still release the officer's restraints.
Restraint position is server-authoritative. A cancelled movement event sends a correction to the restrained player's client, while a per-tick legal-position anchor repairs unattached cuffed players whose position bypassed the event path. An attached walking suspect is returned toward the legal front position when the path is clear; displacement beyond the configured gap breaks the cuffs. Seating a cuffed suspect detaches the walking tether and preserves cuffs. Unexpected teleports, riptide propulsion, gliding, flight, velocity, interaction, inventory, and command paths fail closed and significant rejected displacement is rate-limited in the audit log.
Use /uncuff for slot one and /uncuff2 for slot two. /uncuff <player> releases a specifically named online suspect.
All suspects owned by an officer are released if that officer dies or teleports. Actively dragged suspects are released if their officer logs out. A suspect is also released from cuffs on death. A cuffed suspect who logs out remains persistently cuffed for reconnect unless another release rule applies.
Staff with justice.staff-bypass cannot be cuffed unless the officer also has justice.staff-bypass.override.
Restrictions and local chat
Cuffed and detected-tased players cannot normally:
- Interact with entities or blocks
- Break or place blocks
- Attack
- Drop or pick up items
- Open or use inventories
- Run non-whitelisted commands
- Teleport out of restraint
- Speak in global chat
Their normal chat is routed directly through Carbon's configured local channel, with its radius, moderation and speech permission rules. The default channel selector is l; a local channel named local is the fallback. Explicit /l message and /local message normalize to the registered local command. No chat command is executed for ordinary speech.
custody.allowed-cuffed-commands is empty by default and applies to every cuffed player, including those in cells. Prison/holding lists apply only when not cuffed. Command entries use root labels without / or arguments.
/modmode is allowed while serving a sentence only when the player is not cuffed. If Core grants justice.staff-bypass in mod mode, cell enforcement and normal command restrictions are bypassed until mod mode is disabled. Custody chat still routes locally.
WeaponMechanics tase bridge
A player is considered tased only while every effect listed in tase.detection-effects is present. The default combination is Weakness, Slowness, and Jump Boost.
While detected as tased:
- Normal cuff-style restrictions apply
- Sprinting is disabled
- Horizontal velocity is capped
- Upward velocity is capped to prevent repeated-hit launching
- Chat is routed through local chat
- Non-whitelisted commands are blocked
WeaponMechanics shooting is blocked whenever the shooter has Weakness if tase.block-guns-with-weakness is enabled. This firearm check needs only Weakness; full tase restriction detection still needs every configured tase effect. The denial text supports MiniMessage.
Logging out while detected as tased removes cuffs and assigns the maximum configured prison sentence with audit reason Tase Log. Configure a prison facility before relying on this rule. Cuffing and uncuffing do not remove potion effects.
Holding and prison intake
Automatic intake
When an officer walks into a configured drop-off while dragging a suspect, Justice begins intake automatically:
- Holding drop-off: opens the narrative-book workflow
- Prison drop-off: opens the charge-selection GUI
Only one pending intake is maintained per suspect.
Holding intake
The officer receives a virtual writable book. Write the holding reason and sign the book.
- Closing or submitting without signing cancels intake
- A blank signed narrative is rejected
- Successful intake uncuffs the suspect
- The holding term is the configured maximum holding time
- The booking and narrative are stored in the database and audit trail
An authorized officer can release a holding detainee with /release <player>.
Logging out while in holding converts the case to the maximum prison sentence with audit reason Holding Log.
Prison intake
The prison GUI shows all configured charges.
- Left-click a charge to increase its count
- Right-click to decrease its count
- Counts cannot exceed the charge's configured maximum
- Use the arrows for pagination
- Click Submit after choosing at least one charge
- Write and sign the narrative book
Justice totals the selected charges, caps prison time at maximum-prison-minutes, applies the automatic charge fine, removes the suspect from the wanted list, logs the booking, and places the suspect in the first available cell.
There is no overall cap on automatic charge fines. Each charge's own maximum count limits its contribution.
If the suspect is transferred directly from holding into prison, time already served in holding is deducted from the prison term. If the credit satisfies the entire term, the suspect is released.
Cell assignment and sentence clocks
- Cells are occupied by one sentence at a time
- Stale cell occupancy is reconciled at startup
- If every cell is occupied, intake is stored in a pending queue
- Pending terms do not count down until a cell becomes available
- A queued suspect is assigned to the first available cell automatically
- Active sentence time counts down only while the player is online
- The configured warning is sent near the end of the term
- A separate absolute real-time deadline releases custody even if the player remains offline
- Prisoner death releases the sentence
- Leaving the configured cell causes the inmate to be returned to its safe teleport point
Bail and external sentence reductions
Bail is available only for prison sentences.
/bail <minutes>
Bail:
- Uses the player's wallet only
- Transfers funds to the Economy government treasury
- Costs
bail.cost-per-minute - Cannot reduce more than
bail.maximum-sentence-percent of the original sentence - Fails without sufficient wallet funds
- Releases the player if the reduction reaches zero remaining time
Other plugins can reduce time without consuming the bail allowance through the public JusticeApi.reduceSentence method. This is intended for future prison work, mining, activities, or similar systems.
Charges
The default seed contains Assault, Murder, and Possession of Contraband.
charges.yml is imported only when the database has no charge records. Once charges exist in the database, editing charges.yml does not replace them. Use /charges for live management.
Add a charge
Open /charges, click Add charge, and answer in chat using:
id | name | description | MATERIAL | prison minutes | fine | max count
Example:
burglary | Burglary | Entering a property to commit a crime | IRON_PICKAXE | 8 | 750.00 | 10
Edit or delete
- Click a charge and enter the replacement fields without the ID
- Shift-right-click a charge to delete it
- Enter
cancel in chat to cancel an edit
Charge IDs use the same lowercase ID rules as facilities. Prison minutes and fines may be zero but not negative. Maximum count must be at least one. The icon must be a valid Bukkit Material name.
Fines, debt, and traffic tickets
Direct fines
/fine <player> <amount> <reason>
The cap is selected from the issuer's permissions:
justice.fine.police: fines.police-capjustice.fine.judge: fines.judge-cap
Amounts must be positive and within the applicable cap. Negative or malformed values are rejected.
Payment is collected in this order:
- Active wallet
- Active checking accounts
- Unpaid remainder becomes Economy fine debt
Transfers and later debt garnishment go to the Economy government treasury. The debt reference prevents Justice from manufacturing funds or treating a negative amount as payment.
An online recipient receives a detailed message naming the issuer and reason, the total fine, the amount collected immediately, and the amount added as debt. Automatic charge fines also report the charged, paid, and debt amounts.
Traffic tickets
/ticket <online-player> <amount> <reason>
The amount must be positive and no greater than fines.traffic-cap. The recipient receives clickable PAY and DENY choices.
/ticketaccept collects the ticket as an automatic fine or registers debt/ticketdeny refuses it without collecting payment- No answer before the timeout auto-denies the ticket
- The issuing officer is notified of acceptance, denial, or timeout while online
- The recipient receives an immediate confirmation after accepting or denying; accepted tickets then report the paid and debt amounts
Wanted list
Add a player with:
/wanted add <player> <charges or reason>
Adding an already wanted player appends a timestamped officer entry and extends the summary rather than replacing history.
Open /wl to view a paginated inventory of player heads. Each entry shows the marking officer, date, summary, and full history in its item tooltip.
Remove a case manually with:
/wanted remove <player> [reason]
Justice also removes wanted status when:
- The player is successfully booked into prison
- The player dies from a cause not classified as suicide or an uncredited fall
An explicit suicide or ordinary fall without an attributed killer preserves wanted status. A player-attributed pushed fall is treated according to Bukkit's killer attribution.
Contraband and frisking
Contraband uses exact Bukkit item identity, not material alone. One registered custom pistol does not automatically make every item with the same base material illegal. Persistent data, components, custom models, enchantments, names, and custom-item metadata remain part of the comparison.
Manage the catalog
- Hold or carry the exact item to register.
- Open
/contraband with justice.contraband.manage. - Click the item in your lower player inventory while the GUI is open.
- Click a registered item in the top catalog to remove it.
Users with only justice.contraband.view receive a read-only paginated catalog.
Frisk a suspect
The target must be cuffed and online:
/frisk <player>
The GUI displays the target's storage, armor, and offhand slots. Registered contraband is marked. Clicking marked content confiscates only registered illegal items and transfers them to the officer.
Search and extraction recurse through bundles and block-state containers, including nested shulker boxes, to a maximum depth of eight. Scans are also bounded to prevent pathological item trees. The officer needs enough empty inventory slots for confiscated stacks.
Ender Chests
Players cannot deposit direct or nested registered contraband into an Ender Chest through clicks, hotbar swaps, shift-clicks, or inventory drags. Removing existing content is not blocked.
K9 operations
Spawn one K9 with /k9 or /k9 spawn. Spawning a new dog despawns the officer's previous dog.
The K9:
- Is a normal, damageable tamed wolf
- Never deals damage through Justice
- Scans nearby player inventories on the configured interval
- Recursively detects registered contraband
- Skips its owner and staff with
justice.staff-bypass - Enters an interested alert stance, stands, looks at, and physically paths toward the nearest carrier
- Stops at
k9.approach-distance, barks at k9.bark-interval-seconds, and continues sending the officer an action-bar summary - Clears combat targets and cannot deal damage, so tracking never becomes an attack
- Applies a ten-second alert cooldown per dog and suspect
Shift-right-click your dog to open its management GUI. The GUI can rename it, leash or unleash it, make it sit or stand, and despawn it. Renaming consumes the officer's next chat message as the name; enter cancel to stop.
Property scan
Stand inside the WorldGuard property and run:
/k9 scan
The scan checks containers that are inside at least one WorldGuard region applicable at the officer's location. It inspects only already loaded chunks near the officer, never force-loads chunks, stops at k9.property-container-limit, and recursively scans portable containers inside those inventories.
The command reports the number of contraband matches, not the number of unique containers or item stacks.
Bodies, forensics, and autopsies
Every player death creates a temporary body using native server entities:
- A native Paper mannequin uses the victim's complete player profile and skin in a fixed horizontal sleeping pose, centered at the death location and aligned to the victim's horizontal facing
- Three low Interaction entities cover the visible body from head to feet, including diagonal headings and deaths while looking straight up or down
- Each right-click gesture triggers one corpse action or message, including wallet handling, even when Paper sends both at-entity and base interaction callbacks
- The body displays visual copies of the victim's armor, main-hand item, and off-hand item
- Corpse interaction is always intercepted, all displayed equipment has a zero drop chance, and the corpse cannot be damaged, so players cannot take the skin head or displayed items
- Normal death drops are not removed or stored by the body
- No ProtocolLib packet NPC is used
Bodies naturally disappear after bodies.despawn-seconds and do not survive a server restart.
Forensics
Hold a forensics kit, target or right-click the body, and use /forensics if needed. The examiner receives approximate time, cause, weapon, an obscured assailant clue when attributable, and suicide classification. One use is deducted.
Autopsy
Hold an autopsy kit with justice.autopsy. The report includes the victim, exact recorded time, cause, attributable killer, weapon, ammunition, hit location, distance, and suicide classification. The one-use kit is consumed.
WeaponMechanics evidence records the most recent relevant firearm hit for up to 30 seconds before death, including weapon title, ammunition when available, hit point, and distance. Without that integration, Justice falls back to Bukkit damage and killer information.
Body disposal
Hold a body dissolver and right-click or target the body with /forensics.
- The dissolver is consumed at the start
- The player must remain near both the body and the starting location
- Disposal lasts
bodies.dissolve-seconds - Entity-caused damage, logout, moving out of range, body despawn, or body removal interrupts the action
- An interrupted action does not refund the dissolver
- Successful disposal removes the body but forensic and autopsy examinations do not
Warrants, emergency entry, and firearm warnings
Police with justice.ram can right-click a door with the crafted battering ram to force it open, including a locked door. The ram does not require a warrant or a managed Property parcel. It spends stamina and durability on each strike, can require multiple attempts, and persists a forced-open breach until the door is mined and replaced. Every strike and completion is audited.
An officer can request a warrant for a managed Property parcel with /warrant request <property> <probable-cause>. A judge reviews pending requests through /warrants. Once approved, a warrant lets its requester with justice.warrant.execute use locks on the covered property through normal interaction until expiry. No battering ram is needed. The bypass covers lock USE only; it does not grant lock management, breaking, or removal.
Justice displays a visible WeaponMechanics firearm label just above the carrier's head and warns nearby viewers through the action bar. It enforces the configured long-gun and pistol inventory limits. A WeaponMechanics title containing taser is excluded from both warning displays and both firearm limits.
Vehicle custody and persistent breaches
Cuffing also works on seated vehicle occupants. Aim at the occupied seat with handcuffs; the ordinary range, permission, movement tolerance and cuff timer still apply. A vehicle must remain stopped during that timer. Seating ends the walking tether while keeping the restraint; driving and internal passenger-carrier updates do not release it. Normal escape teleports remain blocked.
Cuffed players can use local speech commands; other commands, including /sit and /modmode, are blocked by default. custody.allowed-cuffed-commands is an explicit configurable whitelist, empty in new defaults; remove unwanted entries from existing configurations. Cuffs take precedence over prison/holding command lists and staff bypass. Restrained chat uses Carbon's local channel directly. custody.local-chat-command identifies its channel command or alias (normally l); this no longer executes /l. Use a channel with a positive radius and cross-server chat disabled. Local speech permissions, moderation, ignores, formatting and one cooldown check still apply. Existing cancellations are respected. Without Carbon, native Paper chat is limited to players within 40 blocks in the same world. Command denials now explicitly say that commands are blocked; normal chat is not a command and needs no cuffed-command whitelist entry.
Ramming has no cooldown. Each valid strike costs warrants.ram-stamina-cost (50 by default) and one of warrants.ram-durability uses (50 by default). Average capacity 100 makes this half a bar; maximum-fit capacity 200 makes it one quarter. Health must be available to authorize stamina spending; its disabled/creative/bypass rules still apply. Insufficient stamina rejects the strike before durability is spent. A door's required number of strikes is chosen once and progress persists: wood defaults to 1–3 and iron to 3–6, configurable through ram-wood-min-attempts, ram-wood-max-attempts, ram-iron-min-attempts, and ram-iron-max-attempts. The old cooldown setting is ignored.
Successful breaches force both door halves open until the door is mined and replaced. Ordinary clicks and redstone cannot close it; trying to ram an already breached door spends nothing. rammed-doors.yml records progress, officer identity and time across restarts. Staff with justice.ram.inspect can sneak-right-click a breached door to inspect it. Online staff with justice.ram.notify receive every strike and result; the alert permission is configurable with warrants.ram-staff-permission. Audit records retain the attempts and completion. Both new staff permissions default to operators. Keep the breach file with the rest of the data folder during upgrades.
The matching complete pack now includes the concealed-carry holster artwork. Issue genuine items through Core to retain their functional metadata.
Unconscious restraints
When Health knocks a person unconscious, Justice immediately detaches their walking escort but keeps their persisted cuffs. An unconscious officer also stops escorting suspects without uncuffing them. /drag and vehicle ejection cannot restart an escort while either participant is downed. Health controls the patient's supported pose; Justice updates its restraint anchor during unconsciousness so revival does not snap the patient back to the old escort position. Loaded downed states and repeated escort ticks receive the same protection. Manual uncuffing still works.
Traffic radar, helicopter IR and road spikes
These tools require the Vehicles module and justice.police. Restrained, incapacitated or dead operators cannot use them. Issue registered items through /skylines give justice:radar_gun [player] [amount] and /skylines give justice:spike_strip [player] [amount], with skylines.give and the corresponding granular issuance permission.
On foot, hold the genuine handheld radar in your main hand and aim at a vehicle. Scanning starts automatically at the five-tick HUD cadence (about 0.25 seconds at 20 TPS); no command or click is required. The boss bar shows the target’s plate and absolute speed in m/s, or No target. The nearest rendered hull wins, walls block the ray, and the observer’s own vehicle is excluded. Put the radar away to stop. Off-hand-only possession does not activate it. Selecting another item, entering a seat, death, restraint/incapacitation, lost police permission, disconnect or Vehicles becoming unavailable stops the handheld display. Holding it again on foot resumes scanning. Right-clicking or using /radar while holding it does not toggle it off.
Moving radar
From an eligible police ground vehicle’s driver seat, with no handheld selected, use /radar to toggle moving radar. Eligible police CAR definitions include cars, SUVs, vans, prison buses and custom definitions with police equipment; motorcycles are excluded by both definition and model ID. The scanner follows the vehicle’s heading, independently of where the driver looks.
It checks forward and rear horizontal sectors, each with a fixed 30-degree half-angle, within the configured radar range (default 96 blocks, bounded to 8–128). Targets must be loaded road vehicles (CAR-type definitions, including motorcycles) in the same world; the observer’s own vehicle and contacts blocked by solid line of sight are excluded. One boss bar reports the fastest absolute-speed eligible vehicle across both sectors, its plate, and FRONT or BEHIND. Equal speeds choose the closest contact, then a stable vehicle ID. It reports absolute m/s, not closing speed; no eligible contact displays No target.
The HUD refreshes every five ticks. Leaving the eligible driver seat, losing permission/ability to act, changing worlds or Vehicles becoming unavailable stops moving radar. It needs no extra hotbar slot. Put the handheld radar away before using this driver mode.
Helicopter infrared scanner
From a seat in a police helicopter, /ir toggles its infrared scanner. Aim at the search area to see up to six nearest heat contacts, with name, distance and compass bearing. Only that operator sees thermal particles/HUD. IR resolves crouching players through vegetation/leaves, but solid buildings block it. Spectators, invisible and hidden/vanished players are excluded. IR does not change global glow/potion state and stops when the operator leaves the eligible helicopter.
Road spikes
A strip cannot be placed beneath any part of a parked or moving vehicle, including an NPC bus or articulated rear section. Its complete four-block placement span is checked before the item is consumed, so placement cannot instantly puncture a vehicle already over it. A vehicle on a separate bridge level does not block the road below.
On foot, right-click the top of a road with a spike strip to extend it forward from the clicked road edge, parallel to your facing direction. The entire four-block strip needs clear, supported terrain; placement follows the actual block surface, including slabs. One strip per officer is allowed. It consumes one carried strip and appears as visible road equipment. /spikes remove retrieves your strip within five blocks if an inventory slot is free. It expires after five minutes and is removed on owner quit, lost eligibility, Vehicles unavailability or module shutdown. Expiry does not refund the item. Strips are temporary, do not persist over restart, and never replace road blocks.
Spike contact checks each wheel's swept path every server tick so fast vehicles do not skip the strip. Only ground vehicles are affected. Vehicles applies its damage region protection before committing each puncture; rejected/protected contacts do not change tire state. Gun hits accumulate capped damage on the particular wheel before puncturing it; shotgun pellets contribute independently. Partial damage and flats persist in Vehicles and alter handling as described in the vehicle tire guide. Mechanics clear flats and partial tire damage with one iron ingot through Repair when stationary and empty.
traffic-equipment.radar-range-blocks and ir-range-blocks default to 96 and clamp to 8-128 and 16-128 respectively. spike-lifetime-seconds defaults to 300 and clamps to 30-3600. /justice reload refreshes these settings. Moving radar and IR sessions are runtime-only and restart off. Handheld radar automatically starts again whenever a returning player is eligible and holds the item in the main hand. Vehicles fleet features.police-equipment controls which vehicles have police sensors (defaults police IDs/prison bus); type and seat rules still apply. Air/sea hotbars are not replaced by this ground action-menu update.
Install the matching complete resource pack for the radar/strip models, control icons, lamps and all tire combinations. Install the matching combined MCSkylines-1.0.29.jar and restart; preserve the existing module data. The complete pack includes the approved Yelp/Phaser audio.
Justice items and recipes
Justice items contain persistent identity data and have a maximum stack size of one. Renaming an ordinary item does not turn it into a Justice item.
Handcuffs
I
ICI
I
I: Iron IngotC: Iron Bars
Forensics kit
CP
SB
C
C: Copper IngotP: PaperS: StringB: Brush
A forensics kit begins with 10 uses and is consumed after the tenth examination.
Autopsy kit
GI
SG
I G
G: Glass PaneI: Iron IngotS: Shears
An autopsy kit has one use.
Body dissolver
FBF
BSB
FBF
F: Fermented Spider EyeB: Blaze PowderS: Slime Ball
The dissolver is consumed immediately when disposal begins, even if disposal is interrupted.
Configuration reference
Every value in a Default column is a bundled, operator-configurable setting in config.yml, not a guarantee of the live server’s policy. Explicit clamp ranges are fixed validation bounds; operators choose values within them.
Database
| Setting | Default | Meaning |
|---|
database.type | SQLITE | SQLITE or MYSQL |
database.sqlite-file | data.db | Relative path inside plugins/MCSkylines-Justice/ |
database.busy-timeout-ms | 10000 | SQLite lock wait timeout |
database.backup-on-startup | true | Copies an existing SQLite database before opening it |
database.backup-retention | 14 | Number of newest startup backups retained |
database.mysql.host | localhost | MySQL hostname |
database.mysql.port | 3306 | MySQL port |
database.mysql.database | justice | Database/schema name |
database.mysql.username | minecraft | Database user |
database.mysql.password | change-me | Database password |
database.mysql.use-ssl | true | Uses MySQL VERIFY_IDENTITY; requires valid TLS hostname trust |
database.mysql.pool-size | 6 | Connection pool size, clamped from 2 to 32 |
Switching database types does not migrate existing Justice data.
Currency and custody
| Setting | Default | Meaning |
|---|
currency.symbol | $ | Display symbol |
currency.decimal-places | 2 | Currency scale used for parsing and display |
custody.cuff-seconds | 3 | Stationary cuff time, clamped from 1 to 30 seconds |
custody.reach | 4.5 | Maximum initial cuff distance |
custody.cuff-movement-tolerance | 0.4 | Maximum distance either participant may move from the cuff attempt's starting point |
custody.max-dragged | 2 | Drag slots, clamped from 1 to 2 |
custody.follow-distance | 1.25 | Distance at which suspects are held beside the officer; effective values are clamped from 0.75 to 1.35 blocks |
custody.leash-break-distance | 5.0 | Three-dimensional separation at which restraints break, clamped from 2 to 32 blocks |
custody.step-up-height | 1.05 | Maximum collision-checked stair/slab rise, clamped from 0.5 to 1.25 blocks |
custody.handcuffs-material | IRON_NUGGET | Base material for crafted handcuffs |
custody.handcuffs-custom-model-data | 0 | Modern custom-model float; zero disables it |
custody.local-chat-command | l | Root local-chat command without / |
custody.allowed-cuffed-commands | [] | Root commands allowed while cuffed or tased |
Changing the handcuff material or model does not convert existing items. Give or craft new handcuffs after changing identity-related presentation.
The former custody.leash-break-horizontal and custody.leash-break-vertical keys are ignored. Set custody.leash-break-distance on updated installations.
Warrants and firearm visibility
| Setting | Default | Meaning |
|---|
warrants.active-minutes | 30 | Approved warrant lifetime |
warrants.ram-stamina-cost | 50 | Fixed stamina spent per strike; no cooldown |
warrants.ram-durability | 50 | Strikes per ram |
gun-visibility.enabled | true | Display visible firearm warnings |
gun-visibility.overhead-offset | 0.2 | Height above the carrier's head for the overhead label |
gun-visibility.carry-limits-enabled | true | Enforce inventory carry limits |
gun-visibility.maximum-long-guns | 1 | Maximum long guns, excluding tasers |
gun-visibility.maximum-pistols | 2 | Maximum pistols, excluding tasers |
Tase
| Setting | Default | Meaning |
|---|
tase.bridge-enabled | true | Enables effect-combination tase detection |
tase.detection-effects | WEAKNESS, SLOWNESS, JUMP_BOOST | Every listed effect must be active |
tase.block-guns-with-weakness | true | Cancels WeaponMechanics shooting with Weakness |
tase.blocked-gun-message | Configured MiniMessage | Firearm denial message |
tase.velocity-cap-horizontal | 0.35 | Maximum horizontal velocity while tased |
tase.velocity-cap-upward | 0.08 | Maximum upward velocity while tased |
Sentences and bail
| Setting | Default | Meaning |
|---|
sentences.maximum-prison-minutes | 60 | Maximum prison term, clamped from 1 to 525,600 |
sentences.maximum-holding-minutes | 15 | Holding term and abuse cap, clamped from 1 to 1,440 |
sentences.absolute-offline-release-hours | 24 | Real-time safety release, clamped from 1 to 8,760 hours |
sentences.warning-minutes | 1 | Remaining-time warning threshold, clamped from 1 to 60 |
sentences.prison-command-whitelist | l, msg, r, help | Allowed root commands in prison |
sentences.holding-command-whitelist | l | Allowed root commands in holding |
bail.enabled | true | Enables personal bail |
bail.cost-per-minute | 100.00 | Wallet cost per minute; must be positive |
bail.maximum-sentence-percent | 50 | Maximum original sentence percentage removable through bail |
Fines, bodies, and K9
| Setting | Default | Meaning |
|---|
fines.police-cap | 10000.00 | Maximum direct police fine |
fines.judge-cap | 100000.00 | Maximum direct judge fine |
fines.traffic-cap | 500.00 | Maximum traffic ticket |
fines.ticket-timeout-seconds | 60 | Response window, clamped from 10 to 600 seconds |
bodies.despawn-seconds | 300 | Natural body lifetime, clamped from 10 to 86,400 seconds |
bodies.dissolve-seconds | 60 | Required disposal time, clamped from 1 to 3,600 seconds |
bodies.dissolve-range | 3.0 | Maximum distance from body and starting location |
k9.scan-range | 12 | Nearby player scan radius, clamped from 2 to 64 blocks |
k9.scan-seconds | 1 | Scan interval, clamped from 1 to 60 seconds |
k9.property-container-limit | 256 | Maximum property containers per scan, clamped from 1 to 4,096 |
k9.bark-interval-seconds | 2 | Bark interval while tracking contraband, clamped from 1 to 30 seconds |
k9.approach-distance | 2.0 | Distance at which the K9 stops approaching, clamped from 1.25 to 6 blocks |
k9.tracking-speed | 1.15 | K9 pathfinding speed while approaching, clamped from 0.5 to 2.0 |
Integrations and logging
| Setting | Default | Meaning |
|---|
integrations.weapon-mechanics | true | Enables WeaponMechanics listeners when the plugin is present |
integrations.simple-elevators | true | Enables the official Simple Elevators 3.15+ event bridge when Elevator is installed |
integrations.custom-items | ORAXEN, EXECUTABLE_ITEMS | Declares expected custom-item providers; exact item matching uses serialized Bukkit identity |
logging.human-readable-file | true | Enables dated text audit files |
logging.file | audit.log | Relative base filename used to generate dated files |
logging.retention-days | 90 | Human-readable audit retention, clamped from 1 to 3,650 days |
logging.discord-webhook | Blank | Optional HTTPS Discord-compatible webhook |
Configured file paths must remain inside plugins/MCSkylines-Justice/. Absolute paths and traversal outside the data folder are rejected.
Messages and MiniMessage
messages.yml supports MiniMessage formatting. <prefix> is replaced with the configured prefix. Runtime placeholders include:
{target}{officer}{reason}{amount}{result}
The traffic prompt uses clickable MiniMessage actions for /ticketaccept and /ticketdeny. Run /justice reload after editing messages.
Persistence and audit logging
Justice persists:
- Cuffs and responsible officers
- Sentences and remaining time
- Facilities, cells, and occupancy
- Charges
- Wanted cases and appended history
- Exact contraband items
- Booking narratives and selected charges
- Audit events
Bodies, active K9 entities, pending tickets, GUI sessions, active cuff attempts, and body-disposal timers are intentionally not restored after restart.
Every significant action is written to the database and server console. When enabled, Justice also writes a dated human-readable file. The optional webhook receives a shortened action summary and must use HTTPS with a valid host.
SQLite uses WAL mode, foreign-key enforcement, a single database worker, and startup backups. MySQL uses HikariCP and a bounded worker pool. On shutdown, Justice waits up to five seconds for queued database work.
Public API for other plugins
Justice registers dev.serverplugins.justice.api.JusticeApi through Bukkit's ServicesManager.
JusticeApi justice = Bukkit.getServicesManager().load(JusticeApi.class);
boolean cuffed = justice.isRestrained(playerUuid);
boolean servingTime = justice.isInCustody(playerUuid);
justice.reduceSentence(playerUuid, 300, "Prison mining reward", staffUuid)
.thenAccept(secondsRemoved -> {
// Reduction completed.
});
isRestrained reports persistent handcuffs, not potion-effect tase state. reduceSentence accepts positive seconds and safely schedules sentence mutation on the server thread when called asynchronously. Vehicle plugins can query restraint/custody state before placing or removing a suspect and should leave physical vehicle behavior to their own implementation.
Troubleshooting
Justice does not load
- Confirm Java 21 and Paper 1.21.11
- Confirm WorldEdit, WorldGuard, and Economy load first
- Check for a stale JAR under
plugins/update/ - Validate
config-version: 1 - Review database credentials and MySQL TLS settings
- Read the earliest
Justice could not start safely exception, not only the final disable message
Facility or cell setup says the selection is incomplete
- Make both WorldEdit selection points
- Use a cuboid or polygon selection
- Execute the command in the same world as the selection
- For a cell, stand inside the selection at the safe teleport point
A region has the wrong shape
Make the correct selection and repeat the same setup command with the same IDs. Existing WorldGuard settings are preserved.
A suspect is queued instead of teleported
Every registered cell is occupied or unavailable. Add another cell or release an existing inmate. Queued time begins counting only after assignment.
Tase restrictions do not activate
- Confirm
tase.bridge-enabled: true - Confirm every configured potion effect is present simultaneously
- Use Bukkit potion-effect names
- Confirm
/justice reload succeeded
Weapon blocking has its own test: when enabled, any Weakness effect should block WeaponMechanics shooting.
Local chat says it is unavailable
Confirm the local-chat plugin exposes the configured root command and allows players to execute it in their current state. Store only the root label, such as l, not /l or /l message.
Changes to charges.yml do not appear
The database already contains charges. Manage them with /charges; charges.yml is seed data for an empty charge table only.
A fine is rejected
- Amount must be positive
- Issuer must have
justice.fine.police or justice.fine.judge - Amount must be within that role's cap
- Economy and its government treasury account must be available
A K9 property scan reports zero
- Stand inside the intended WorldGuard property
- Ensure relevant chunks are already loaded
- Confirm the containers lie in a region also applicable at the officer's position
- Register the exact item variant as contraband
- Check the container scan limit
A forensic kit does not work
- Hold the correct Justice item in the main hand
- Confirm the matching permission
- Target the body within five blocks or right-click its hitbox
- Bodies disappear naturally and on plugin shutdown
/justice reload succeeds but the database did not change
Reload updates configuration values, messages, and recipes. The active database connection and backend are established at startup, so database changes require a full restart.
The strip extends four blocks from the clicked road surface in the horizontal facing direction. Stand beside the road facing across it and click its near edge. The visible model, terrain clearance and swept tire-contact area share this orientation and width; diagonal placement is supported. Its existing permission, ownership, lifetime, retrieval and vehicle damage-region checks still apply.
Criminal restraints, nonlethal equipment and tackling
Issue equipment with /skylines give justice:zipties, justice:police_baton, justice:pepper_spray and justice:radar_gun. They have distinct item models in the matching complete pack. Keep the curated pack; installing only these model definitions discards earlier vehicle, weapon and sight assets.
Zipties and criminal search
Hold zipties and right-click a player, or use /ziptie <player>. Deployment takes five seconds (custody.ziptie-seconds), while handcuffs remain three seconds. Both people must stay within the configured movement tolerance, with the same item selected and an unobstructed view. Completing an attempt consumes one ziptie item. Cancelling it consumes nothing. Existing staff protection still applies; police can be tied. Criminal equipment does not grant police permissions.
Ties share restraint movement, interaction, firearm and inventory restrictions. Their type and captor persist in the database across logout and restart. The captor can escort a conscious captive with /drag <player> and right-click to place/remove them from a nearby passenger seat. Police can handle either kind of restraint. As with handcuffs, death releases the restraint and the current escort rules apply when its owner dies, teleports or logs out.
Use /robsearch <player> or sneak-right-click your own ziptied captive to open the criminal search and seizure menu. Click any inventory, armor or off-hand item to take the entire stack, including weapons, police gear and items inside a container item. This does not debit money accounts or open an ender chest. The target must remain online, restrained by your own ties, visible and within 4.5 blocks. Permission, ownership and distance are rechecked for every seizure; a full inventory prevents transfer. Menu icons are snapshots: transfers always read the current target inventory. Every seizure is audited and both players receive feedback. Police /frisk still extracts registered contraband rather than granting the criminal menu to any cuffed target.
Hold shears and use /unziptie <player> within 4.5 blocks and line of sight to cut ties. Any permitted, conscious, unrestrained rescuer can cut them; ownership is not required. This command cannot remove police handcuffs. Officers retain their existing /uncuff access.
Baton, pepper spray and tackle
- Police baton: left-click a player in melee range. It replaces ordinary
weapon damage with four seconds of incapacitation; it deals no health damage. Its cooldown is five seconds.
- Pepper spray: right-click a player, or aim and right-click within four
blocks. It causes seven seconds of blindness and incapacitation with no health damage. Its cooldown is ten seconds.
- Tackle: right-click the same player three times within two seconds,
with your main hand empty and within three blocks. Success incapacitates for seven seconds and subtracts one health point (half a heart). Damage is capped to leave at least one heart, and does not heal a target who was already below that floor. A failed contest sends escape feedback. Every eligible attempt costs 40 Health stamina before the contest, including failures. Insufficient stamina prevents the attempt. A successfully tackled defender loses 25 stamina, clamped at zero, even while recovering from exhaustion. Protection-cancelled impacts do not penalize the defender. Stamina recovery supplies the default cooldown: with 100 stamina, two attempts leave 20, too little to try again until stamina recovers. No fixed timer applies by default.
The tackle contest starts at 65% success for equally rested players facing each other. Faster movement than the defender adds up to 15 percentage points; looking away adds up to another 15. Relative remaining stamina adds/subtracts up to ten points. The final probability stays between 55% and 95%, so the tackler retains an advantage without guaranteed success. Without Health, stamina is treated as equal and no debit is made. Unconscious, already restrained or already incapacitated defenders cannot be tackled. Vehicles, walls and protected staff cannot be used to bypass normal eligibility checks. Disabled world PvP, friendly-fire restrictions, invulnerability and region/PvP cancellation vetoes nonlethal impacts. Tackle's capped health loss does not generate a bullet wound or trigger medical execution rules.
Disconnecting during any of these incapacitation effects invokes the existing Tase Log custody penalty.
All three actions block movement bursts, fighting, firearms, item use and other restrained actions for their duration. They leave local speech available. An unconscious actor cannot use them; creative/spectator targets are excluded.
| Permission | Default | Purpose |
|---|
justice.ziptie | Everyone | Apply ties with the item; cut ties with shears |
justice.ziptie.search | Everyone | Search/seize from your own ziptied captive |
justice.tackle | Everyone | Attempt the three-click tackle |
justice.baton | Police parent | Use the police baton |
justice.pepper-spray | Police parent | Use pepper spray |
Defaults are configurable under nonlethal: baton-seconds: 4, baton-cooldown-seconds: 5, pepper-seconds: 7, pepper-cooldown-seconds: 10, pepper-range: 4.0, tackle-window-millis: 2000, tackle-seconds: 7, tackle-cooldown-seconds: 0, tackle-reach: 3.0, tackle-stamina-cost: 40.0, and tackle-target-stamina-penalty: 25.0. Reload Justice to apply configuration changes. Missing keys and message templates are added on upgrade without overwriting customization.
Crafting shapes are SS / S / S for zipties (string), I / I / S for a baton (iron ingots and a stick), and B /PGP/ I for spray (stone button, blaze powder, glass bottle, iron ingot). Each recipe produces one item. Usage remains governed by its permission even when someone else crafts or supplies the item.
Local chat, unconscious transport and radar aiming
Ordinary chat while cuffed, tied or incapacitated goes directly through the resolved Carbon local channel. custody.local-chat-command matches its command or alias; if the configured l is not registered, Justice falls back to a local channel actually named local. The channel must have positive radius and cross-server delivery disabled. /l message and /local message are normalized to that channel's registered command and allowed during restraint/incapacitation without requiring duplicate whitelist entries. Other command roots retain the configured restrictions. Carbon speech permission, mute, filter, ignore, cooldown and radius rules remain active; Core mute cancellation runs before the Justice routing stage. Without Carbon, normal chat keeps Paper rendering and is limited to players within 40 blocks in the same world. Health's configured unconscious-player chat block remains active: tasing is distinct from being downed.
An unconscious but restrained person can be placed in a vehicle. Health suspends its old floor anchor only during authorized transport and while seated; it keeps unconscious state, bleed-out and the restraint. Upon removal, it creates a fresh supported anchor at the exit. Walking escorts still stop on unconsciousness.
On foot, hold the radar in your main hand and hold right-click for native spyglass zoom; release to stop zooming. It works when aimed at air or a block, and radar use takes priority over boarding an entity being measured. Scanning remains automatic while held. Newly issued radar uses a spyglass, and existing genuine radar items convert while held without changing their identity or model. Old custom aiming modifiers are removed. The matching resource pack keeps the gun upright with its handle in the hand, and its third-person aiming pose has the same visible scale. Both dominant-hand settings have a matching aiming model; install the radar model, inherited left-hand model and item binding together from the complete pack. Minecraft's native spyglass view hides the first-person held item while zoomed, so the gun remains visible to other players during aiming but does not appear inside the telescope view. Restart after installing the combined JAR and rebuild/resend the matching pack.
Beanbag shotgun integration choice
A beanbag shotgun is feasible in WeaponMechanics. Keep projectile flight, ammo, reload, sound and the shotgun model there; Justice should own the impact incapacitation and nonlethal health cap. WeaponMechanics supports base damage and hit mechanics, but low base damage alone can still kill, and Health's generic gun hook can otherwise generate wounds or headshot deaths. A future beanbag implementation should identify the weapon explicitly in both integrations, exclude it from lethal injury/evidence paths, cap final health loss and apply the Justice incapacitation timer. This update does not create a beanbag weapon or change the existing shotgun ammunition.
Install the combined MCSkylines-1.0.29.jar and matching asset bundle. Preserve all existing module data and databases. Back up Justice's database before the upgrade; the additive ziptie_restraints table records type without altering the existing restraints table. Test vehicle placement, local chat and client model rendering on the server before deployment to players.
Tackle stamina
Existing configurations retain customized settings. To replace the earlier 10-stamina/10-second defaults with stamina-based recovery, merge these values into plugins/Justice/config.yml, then reload Justice:
nonlethal:
tackle-stamina-cost: 40.0
tackle-target-stamina-penalty: 25.0
tackle-cooldown-seconds: 0
Costs are absolute Health stamina points, so fitter players with greater capacity can sustain more attempts. Failed contests and region-cancelled attempts still spend the tackler's exertion; only an accepted successful impact drains the target. Clicks before the third click, ineligible targets, cooldown rejection and insufficient stamina do not spend anything. The Health stamina bypass and disabled stamina settings are respected. With Health unavailable, Justice still works and no stamina debits apply; operators can set a positive fixed cooldown in that case.
Web citation evidence
The City desktop displays a player's citations through the existing Justice API. Its trusted gateway may resolve a citation by ID with JusticeApi.citation; that lookup is an integration contract, not public authorization. Technology's bridge requires a server secret and the Node backend rechecks the cited player, issuing officer, explicit technology.panel.evidence.city officials and participants in linked court cases before disclosing attachments. Public case readership alone does not grant evidence access. A case can link only its client's citation.
The issuing officer and authorized prosecution can append evidence supplements; accepted native photos cannot be edited or replaced. Evidence uses a private R2 bucket rather than Justice's database, with source/stored hashes, three non-expired native photos per bundle and external image-host/YouTube links. Retention protects active cases and preservation holds. Ticket photos become eligible only after PAID/VOID has been observed for the retention period and every linked case is closed, old enough and unheld. Keep appeals open or held. Ticket payment and live enforcement still use the in-game interfaces. See the panel backend guide for deployment and recovery.
Reading command syntax
Configuration defaults: Values shown for operator-configurable settings are the bundled defaults, and can be changed in the module’s configuration or definitions. The server’s active settings take precedence, so costs, speeds, ranges, durations, chances, effects, recipes, limits and enabled features may differ. Command examples illustrate syntax; fixed mechanics and validation bounds are not configuration defaults.
<argument> is required; [argument] is optional. Replace the placeholder, including its brackets, with your value. Choices separated by a vertical bar mean choose one. ... accepts the remaining words. Do not type quotation marks around multiword names unless the command specifically requires them. A bare command has no required arguments. Examples use sample players/IDs: substitute entries from your server and use Tab for configured IDs.
player means a username; operational actions usually require that player online. amount and price are currency values such as 25.00, unless the row specifies items, levels, or units. reason, memo, message, name, and statement accept text where supported. duration uses the module's duration format (for example 10m, 2h, or 7d); it is not a bare number of minutes unless stated. id is the exact identifier displayed by that system, not its friendly name. Permissions and ownership/state/location checks both apply.
6. Command reference
| Command | Permission | Description |
|---|
/justice reload | justice.reload | Reloads config.yml, messages.yml, and recipes |
/justice status | justice.status | Shows database type and facility, cell, charge, and contraband counts |
/justice facility <id> <holding|prison> | justice.setup | Creates or updates a drop-off from the current WorldEdit selection |
/justice cell <facility> <cell-id> | justice.setup | Creates or updates a cell from the current selection and standing location |
/justice releasepoint <facility> | justice.setup | Sets the facility's release location |
/skylines give justice:<item> [player] [amount] | skylines.give plus the granular item node | Issues a registered Justice item |
/justice audit [count] | justice.audit | Displays recent audit rows; defaults to 10 and is capped at 100 |
/cuff <player> | justice.cuff | Starts the stationary cuff timer |
/uncuff [player] | justice.cuff | Releases the named player or dragged slot one |
/uncuff2 | justice.cuff | Releases dragged slot two |
/drag <player> | justice.drag | Attaches an already cuffed player to the officer |
/frisk <player> | justice.frisk | Opens the frisk GUI for a cuffed online player |
/jail <player> | justice.book | Manually opens prison intake while standing in a prison drop-off |
/release <player> | justice.release.holding | Releases a player from holding |
/charges | justice.charge.manage | Opens the paginated charge-management GUI |
/fine <player> <amount> <reason> | Police or judge fine permission | Issues a direct fine; the target may be offline |
/ticket <player> <amount> <reason> | justice.ticket | Offers an online player a traffic ticket |
/ticketaccept | None | Accepts the player's pending ticket |
/ticketdeny | None | Refuses the player's pending ticket |
/wanted add <player> <charges/reason> | justice.wanted | Adds or appends a wanted entry |
/wanted remove <player> [reason] | justice.wanted | Removes a wanted entry |
/wl | justice.wanted | Opens the paginated wanted-list GUI |
/contraband | justice.contraband.view | Opens the paginated contraband catalog |
/k9 [spawn] | justice.k9 | Spawns a new K9 and removes the officer's previous K9 |
/k9 despawn | justice.k9 | Removes the officer's K9 |
/k9 scan | justice.k9 and justice.k9.property-scan | Scans loaded containers in the current WorldGuard property |
/forensics | Kit-specific permission | Examines the targeted body or starts disposal, depending on the held item |
/bail <minutes> | justice.bail | Pays from the prisoner's wallet to reduce a prison sentence |
Most operational commands are player-only. /justice reload, /justice status, and /justice audit can be used from the console. Item issuance is centralized under /skylines give.
Warrant, breach, and traffic commands
| Syntax | Arguments / action | Access |
|---|
/warrant request <property> <reason> | Request property-scoped search authority; property reference from Property and remaining reason | justice.warrant.request |
/warrants | Review pending warrants in GUI | justice.warrant.review |
/justice corpses clear | Remove all managed death bodies; no extra arguments | justice.body.purge; player or console |
/radar | Toggle eligible police driver’s front/rear fastest-target radar; no arguments. Handheld works automatically while held | justice.police; eligible ground driver; motorcycles excluded |
/ir | Toggle eligible police helicopter thermal scanner | justice.police; eligible helicopter seat |
/spikes remove | Retrieve own deployed strip within five blocks into a free slot | justice.police; on-foot eligibility |
facility and cell-id in setup are stable IDs; select a complete WorldEdit cuboid before facility/cell commands. Amount in fine/ticket is currency; bail takes an integer number of sentence minutes. Player targets for operational custody must be online; fine supports saved offline players. Charge, contraband, wanted, warrant review and intake choices are menu workflows, not undocumented text commands. Kit items determine forensic/autopsy/disposal action. Example: /justice facility central holding, then /justice cell central cell_a at the selected cell's spawn.
Battering rams are item interactions, not a /ram command. Hold the genuine ram and strike the eligible door with justice.ram; inspection is sneak-right-click with justice.ram.inspect. A warrant request accepts a current-world property ID or world:property and required remaining probable-cause text.
Root commands and aliases
These are the registered command entry points. The subcommand tables above describe their complete operations. Alias names use the same arguments as their root.
| Syntax | Purpose | Permission / aliases |
|---|
/radar | Toggle heading-aligned front/rear moving radar; handheld scans automatically while held. | Checked by operation |
/ir | Toggle the police helicopter infrared scanner. | Checked by operation |
/spikes remove | Retrieve a nearby deployed road spike strip. | Checked by operation |
/justice <help|reload|status|facility|cell|releasepoint|audit> | Justice administration and setup | Checked by operation |
/cuff <player> | Begin cuffing a player | Checked by operation |
/uncuff [player] | Release a restrained player | Checked by operation |
/uncuff2 | Release the second dragged suspect | Checked by operation |
/drag <player> | Attach a cuffed player to your custody | Checked by operation |
/frisk <player> | Search a cuffed player | Checked by operation |
/jail <player> | Book a cuffed player | Checked by operation |
/release <player> | Release a holding detainee | Checked by operation |
/charges | View or manage criminal charges | Checked by operation |
/fine <player> <amount> <reason> | Impose an official fine | Checked by operation |
/ticket <player> <amount> <reason> | Offer a traffic ticket | Checked by operation |
/wanted <add|remove> <player> [reason] | Add or remove wanted cases | Checked by operation |
/wl | Open the wanted list | Checked by operation |
/warrant request <world:property|property> <probable-cause> | Request a property search warrant | Checked by operation |
/warrants | Review pending warrant requests | Checked by operation |
/contraband | View or manage contraband | Checked by operation |
/k9 [spawn|despawn|scan] | Spawn or manage your K9 | Checked by operation |
/forensics | Examine the targeted body | Checked by operation |
/bail <minutes> | Pay to reduce your prison sentence | Checked by operation |
/ticketaccept | Accept a pending traffic ticket | Checked by operation |
/ticketdeny | Refuse a pending traffic ticket | Checked by operation |