All pluginsMC Skylines

Police & courts

MCSkylines-Justice

Version 1.7.5 · Documentation refreshed October 15, 2026

Persistent policing, custody, courts, corrections, warrants, contraband, K9 work, and forensic investigation.

Required plugins: WorldGuard, MCSkylines-Economy. Optional integrations: MCSkylines-Core, MCSkylines-Health, MCSkylines-Property, MCSkylines-Lock, Elevator, WeaponMechanics, CarbonChat, Oraxen, ExecutableItems.

01

Feature reference

What it handles

Feature overview

Custody

Timed cuffing, two-suspect dragging, searches, booking, holding, prison sentences, release, and staff safeguards.

Charges & fines

Recorded criminal charges, official fines, traffic tickets, court referral, and Economy-backed debt collection.

Wanted cases

Add, remove, and review wanted records through a dedicated police workflow.

Warrants

Request, judicial review, approval, execution, and property-scoped lock bypass for valid searches.

Contraband

Exact serialized item identities and recursive container searches preserve custom item integrity.

K9 units

Spawn, manage, and scan with non-combat alert behavior and bounded loaded-chunk property searches.

Forensics

Temporary native bodies, equipment presentation, examination, autopsy permissions, and audited disposal.

Cross-plugin custody

Vehicles, elevators, Economy, Property, Lock, WeaponMechanics, and custom items participate through guarded bridges.

02

Mechanics, workflows & reference

Encyclopedia

Contents · jump to a topic

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

  1. Use WorldEdit to select the entire holding intake/drop-off area.
  2. Keep the selection active and remain in the same world.
  3. Stand at the location that should initially serve as the release point. This does not have to be inside the selected drop-off.
  4. 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.

  1. Select the complete cell with WorldEdit.
  2. Stand inside that selection at the exact safe location and facing direction where inmates should appear.
  3. 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.

Resizing a configured region

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-cap
  • justice.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:

  1. Active wallet
  2. Active checking accounts
  3. 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

  1. Hold or carry the exact item to register.
  2. Open /contraband with justice.contraband.manage.
  3. Click the item in your lower player inventory while the GUI is open.
  4. 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.

Handheld radar on foot

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 Ingot
  • C: Iron Bars

Forensics kit

 CP
 SB
C
  • C: Copper Ingot
  • P: Paper
  • S: String
  • B: Brush

A forensics kit begins with 10 uses and is consumed after the tenth examination.

Autopsy kit

 GI
 SG
I G
  • G: Glass Pane
  • I: Iron Ingot
  • S: Shears

An autopsy kit has one use.

Body dissolver

FBF
BSB
FBF
  • F: Fermented Spider Eye
  • B: Blaze Powder
  • S: 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

SettingDefaultMeaning
database.typeSQLITESQLITE or MYSQL
database.sqlite-filedata.dbRelative path inside plugins/MCSkylines-Justice/
database.busy-timeout-ms10000SQLite lock wait timeout
database.backup-on-startuptrueCopies an existing SQLite database before opening it
database.backup-retention14Number of newest startup backups retained
database.mysql.hostlocalhostMySQL hostname
database.mysql.port3306MySQL port
database.mysql.databasejusticeDatabase/schema name
database.mysql.usernameminecraftDatabase user
database.mysql.passwordchange-meDatabase password
database.mysql.use-ssltrueUses MySQL VERIFY_IDENTITY; requires valid TLS hostname trust
database.mysql.pool-size6Connection pool size, clamped from 2 to 32

Switching database types does not migrate existing Justice data.

Currency and custody

SettingDefaultMeaning
currency.symbol$Display symbol
currency.decimal-places2Currency scale used for parsing and display
custody.cuff-seconds3Stationary cuff time, clamped from 1 to 30 seconds
custody.reach4.5Maximum initial cuff distance
custody.cuff-movement-tolerance0.4Maximum distance either participant may move from the cuff attempt's starting point
custody.max-dragged2Drag slots, clamped from 1 to 2
custody.follow-distance1.25Distance at which suspects are held beside the officer; effective values are clamped from 0.75 to 1.35 blocks
custody.leash-break-distance5.0Three-dimensional separation at which restraints break, clamped from 2 to 32 blocks
custody.step-up-height1.05Maximum collision-checked stair/slab rise, clamped from 0.5 to 1.25 blocks
custody.handcuffs-materialIRON_NUGGETBase material for crafted handcuffs
custody.handcuffs-custom-model-data0Modern custom-model float; zero disables it
custody.local-chat-commandlRoot 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

SettingDefaultMeaning
warrants.active-minutes30Approved warrant lifetime
warrants.ram-stamina-cost50Fixed stamina spent per strike; no cooldown
warrants.ram-durability50Strikes per ram
gun-visibility.enabledtrueDisplay visible firearm warnings
gun-visibility.overhead-offset0.2Height above the carrier's head for the overhead label
gun-visibility.carry-limits-enabledtrueEnforce inventory carry limits
gun-visibility.maximum-long-guns1Maximum long guns, excluding tasers
gun-visibility.maximum-pistols2Maximum pistols, excluding tasers

Tase

SettingDefaultMeaning
tase.bridge-enabledtrueEnables effect-combination tase detection
tase.detection-effectsWEAKNESS, SLOWNESS, JUMP_BOOSTEvery listed effect must be active
tase.block-guns-with-weaknesstrueCancels WeaponMechanics shooting with Weakness
tase.blocked-gun-messageConfigured MiniMessageFirearm denial message
tase.velocity-cap-horizontal0.35Maximum horizontal velocity while tased
tase.velocity-cap-upward0.08Maximum upward velocity while tased

Sentences and bail

SettingDefaultMeaning
sentences.maximum-prison-minutes60Maximum prison term, clamped from 1 to 525,600
sentences.maximum-holding-minutes15Holding term and abuse cap, clamped from 1 to 1,440
sentences.absolute-offline-release-hours24Real-time safety release, clamped from 1 to 8,760 hours
sentences.warning-minutes1Remaining-time warning threshold, clamped from 1 to 60
sentences.prison-command-whitelistl, msg, r, helpAllowed root commands in prison
sentences.holding-command-whitelistlAllowed root commands in holding
bail.enabledtrueEnables personal bail
bail.cost-per-minute100.00Wallet cost per minute; must be positive
bail.maximum-sentence-percent50Maximum original sentence percentage removable through bail

Fines, bodies, and K9

SettingDefaultMeaning
fines.police-cap10000.00Maximum direct police fine
fines.judge-cap100000.00Maximum direct judge fine
fines.traffic-cap500.00Maximum traffic ticket
fines.ticket-timeout-seconds60Response window, clamped from 10 to 600 seconds
bodies.despawn-seconds300Natural body lifetime, clamped from 10 to 86,400 seconds
bodies.dissolve-seconds60Required disposal time, clamped from 1 to 3,600 seconds
bodies.dissolve-range3.0Maximum distance from body and starting location
k9.scan-range12Nearby player scan radius, clamped from 2 to 64 blocks
k9.scan-seconds1Scan interval, clamped from 1 to 60 seconds
k9.property-container-limit256Maximum property containers per scan, clamped from 1 to 4,096
k9.bark-interval-seconds2Bark interval while tracking contraband, clamped from 1 to 30 seconds
k9.approach-distance2.0Distance at which the K9 stops approaching, clamped from 1.25 to 6 blocks
k9.tracking-speed1.15K9 pathfinding speed while approaching, clamped from 0.5 to 2.0

Integrations and logging

SettingDefaultMeaning
integrations.weapon-mechanicstrueEnables WeaponMechanics listeners when the plugin is present
integrations.simple-elevatorstrueEnables the official Simple Elevators 3.15+ event bridge when Elevator is installed
integrations.custom-itemsORAXEN, EXECUTABLE_ITEMSDeclares expected custom-item providers; exact item matching uses serialized Bukkit identity
logging.human-readable-filetrueEnables dated text audit files
logging.fileaudit.logRelative base filename used to generate dated files
logging.retention-days90Human-readable audit retention, clamped from 1 to 3,650 days
logging.discord-webhookBlankOptional 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.

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.

PermissionDefaultPurpose
justice.ziptieEveryoneApply ties with the item; cut ties with shears
justice.ziptie.searchEveryoneSearch/seize from your own ziptied captive
justice.tackleEveryoneAttempt the three-click tackle
justice.batonPolice parentUse the police baton
justice.pepper-sprayPolice parentUse 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

CommandPermissionDescription
/justice reloadjustice.reloadReloads config.yml, messages.yml, and recipes
/justice statusjustice.statusShows database type and facility, cell, charge, and contraband counts
/justice facility <id> <holding|prison>justice.setupCreates or updates a drop-off from the current WorldEdit selection
/justice cell <facility> <cell-id>justice.setupCreates or updates a cell from the current selection and standing location
/justice releasepoint <facility>justice.setupSets the facility's release location
/skylines give justice:<item> [player] [amount]skylines.give plus the granular item nodeIssues a registered Justice item
/justice audit [count]justice.auditDisplays recent audit rows; defaults to 10 and is capped at 100
/cuff <player>justice.cuffStarts the stationary cuff timer
/uncuff [player]justice.cuffReleases the named player or dragged slot one
/uncuff2justice.cuffReleases dragged slot two
/drag <player>justice.dragAttaches an already cuffed player to the officer
/frisk <player>justice.friskOpens the frisk GUI for a cuffed online player
/jail <player>justice.bookManually opens prison intake while standing in a prison drop-off
/release <player>justice.release.holdingReleases a player from holding
/chargesjustice.charge.manageOpens the paginated charge-management GUI
/fine <player> <amount> <reason>Police or judge fine permissionIssues a direct fine; the target may be offline
/ticket <player> <amount> <reason>justice.ticketOffers an online player a traffic ticket
/ticketacceptNoneAccepts the player's pending ticket
/ticketdenyNoneRefuses the player's pending ticket
/wanted add <player> <charges/reason>justice.wantedAdds or appends a wanted entry
/wanted remove <player> [reason]justice.wantedRemoves a wanted entry
/wljustice.wantedOpens the paginated wanted-list GUI
/contrabandjustice.contraband.viewOpens the paginated contraband catalog
/k9 [spawn]justice.k9Spawns a new K9 and removes the officer's previous K9
/k9 despawnjustice.k9Removes the officer's K9
/k9 scanjustice.k9 and justice.k9.property-scanScans loaded containers in the current WorldGuard property
/forensicsKit-specific permissionExamines the targeted body or starts disposal, depending on the held item
/bail <minutes>justice.bailPays 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

SyntaxArguments / actionAccess
/warrant request <property> <reason>Request property-scoped search authority; property reference from Property and remaining reasonjustice.warrant.request
/warrantsReview pending warrants in GUIjustice.warrant.review
/justice corpses clearRemove all managed death bodies; no extra argumentsjustice.body.purge; player or console
/radarToggle eligible police driver’s front/rear fastest-target radar; no arguments. Handheld works automatically while heldjustice.police; eligible ground driver; motorcycles excluded
/irToggle eligible police helicopter thermal scannerjustice.police; eligible helicopter seat
/spikes removeRetrieve own deployed strip within five blocks into a free slotjustice.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.

SyntaxPurposePermission / aliases
/radarToggle heading-aligned front/rear moving radar; handheld scans automatically while held.Checked by operation
/irToggle the police helicopter infrared scanner.Checked by operation
/spikes removeRetrieve a nearby deployed road spike strip.Checked by operation
/justice <help|reload|status|facility|cell|releasepoint|audit>Justice administration and setupChecked by operation
/cuff <player>Begin cuffing a playerChecked by operation
/uncuff [player]Release a restrained playerChecked by operation
/uncuff2Release the second dragged suspectChecked by operation
/drag <player>Attach a cuffed player to your custodyChecked by operation
/frisk <player>Search a cuffed playerChecked by operation
/jail <player>Book a cuffed playerChecked by operation
/release <player>Release a holding detaineeChecked by operation
/chargesView or manage criminal chargesChecked by operation
/fine <player> <amount> <reason>Impose an official fineChecked by operation
/ticket <player> <amount> <reason>Offer a traffic ticketChecked by operation
/wanted <add|remove> <player> [reason]Add or remove wanted casesChecked by operation
/wlOpen the wanted listChecked by operation
/warrant request <world:property|property> <probable-cause>Request a property search warrantChecked by operation
/warrantsReview pending warrant requestsChecked by operation
/contrabandView or manage contrabandChecked by operation
/k9 [spawn|despawn|scan]Spawn or manage your K9Checked by operation
/forensicsExamine the targeted bodyChecked by operation
/bail <minutes>Pay to reduce your prison sentenceChecked by operation
/ticketacceptAccept a pending traffic ticketChecked by operation
/ticketdenyRefuse a pending traffic ticketChecked by operation

03

Registered entry points

Command roots

Use the command syntax sections above for every required argument and subcommand. The short usage below is the plugin’s registered help text.

CommandUsageDescriptionPermission
/radar/radarToggle moving police radar; handheld radar activates while held.Subcommand-based
/ir/irToggle the police helicopter infrared scanner.Subcommand-based
/spikes/spikes removeRetrieve a nearby deployed road spike strip.Subcommand-based
/justice/justice <help|reload|status|facility|cell|releasepoint|audit>Justice administration and setupSubcommand-based
/cuff/cuff <player>Begin cuffing a playerSubcommand-based
/uncuff/uncuff [player]Release a restrained playerSubcommand-based
/uncuff2/uncuff2Release the second dragged suspectSubcommand-based
/drag/drag <player>Attach a cuffed player to your custodySubcommand-based
/frisk/frisk <player>Search a cuffed playerSubcommand-based
/ziptie/ziptie <player>Restrain a player with criminal zipties.Subcommand-based
/unziptie/unziptie <player>Cut nearby zipties while holding shears.Subcommand-based
/robsearch/robsearch <player>Search and take items from a player you ziptied.Subcommand-based
/jail/jail <player>Book a cuffed playerSubcommand-based
/release/release <player>Release a holding detaineeSubcommand-based
/charges/chargesView or manage criminal chargesSubcommand-based
/fine/fine <player> <amount> <reason>Impose an official fineSubcommand-based
/ticket/ticket <player> <amount> <reason>Offer a traffic ticketSubcommand-based
/wanted/wanted <add|remove> <player> [reason]Add or remove wanted casesSubcommand-based
/wl/wlOpen the wanted listSubcommand-based
/warrant/warrant request <world:property|property> <probable-cause>Request a property search warrantSubcommand-based
/warrants/warrantsReview pending warrant requestsSubcommand-based
/contraband/contrabandView or manage contrabandSubcommand-based
/k9/k9 [spawn|despawn|scan]Spawn or manage your K9Subcommand-based
/forensics/forensicsExamine the targeted bodySubcommand-based
/bail/bail <minutes>Pay to reduce your prison sentenceSubcommand-based
/ticketaccept/ticketacceptAccept a pending traffic ticketSubcommand-based
/ticketdeny/ticketdenyRefuse a pending traffic ticketSubcommand-based

04

LuckPerms reference

Permissions

NodeDefaultDescription / children
justice.ram.notifyopReceive staff notifications for every valid ram strike.
justice.ram.inspectopSneak-right-click a breached door to inspect its officer and timestamp.
justice.adminopFull Justice access. Operators receive this parent automatically.Includes justice.reload, justice.status, justice.setup, justice.audit, justice.charge.manage, justice.contraband.manage, justice.police, justice.fine.police, justice.fine.judge, justice.contraband.view, justice.k9, justice.k9.property-scan, justice.forensics, justice.autopsy, justice.body.dispose, justice.body.purge, justice.bail, justice.staff-bypass, justice.staff-bypass.override, justice.warrant.request, justice.warrant.review, justice.warrant.execute, justice.ram
justice.policefalseNo additional description.Includes justice.cuff, justice.baton, justice.pepper-spray, justice.drag, justice.frisk, justice.book, justice.release.holding, justice.wanted, justice.ticket, justice.ticket.refer, justice.contraband.view, justice.warrant.request, justice.warrant.execute, justice.ram
justice.reloadfalseNo additional description.
justice.statusfalseNo additional description.
justice.setupfalseNo additional description.
justice.auditfalseNo additional description.
justice.cufffalseNo additional description.
justice.dragfalseNo additional description.
justice.friskfalseNo additional description.
justice.bookfalseNo additional description.
justice.release.holdingfalseNo additional description.
justice.wantedfalseNo additional description.
justice.ticketfalseNo additional description.
justice.ticket.referfalseRefer expired tickets to the courts.
justice.fine.policefalseNo additional description.
justice.fine.judgefalseNo additional description.
justice.charge.managefalseNo additional description.
justice.contraband.viewfalseNo additional description.
justice.contraband.managefalseNo additional description.
justice.k9falseNo additional description.
justice.k9.property-scanfalseNo additional description.
justice.forensicsfalseNo additional description.
justice.autopsyfalseNo additional description.
justice.body.disposefalseNo additional description.
justice.body.purgefalseNo additional description.
justice.bailtrueNo additional description.
justice.staff-bypassfalseNo additional description.
justice.staff-bypass.overridefalseAllows authorized staff to act on targets protected by justice.staff-bypass.
justice.warrant.requestfalseRequest a warrant for a managed Property parcel.
justice.warrant.reviewfalseReview and approve or deny warrant requests in the judge GUI.
justice.warrant.executefalseUse an approved warrant to bypass locks on the covered property.
justice.ramfalseForce open a door with a police battering ram without a warrant.
justice.ziptietrueApply or cut criminal zipties with the required item.
justice.ziptie.searchtrueSearch and seize live items from your own ziptied captive.
justice.tackletrueAttempt a tackle with three empty-hand clicks within two seconds.
justice.batonfalseDebilitate a player with a police baton.
justice.pepper-sprayfalseDebilitate a player with pepper spray.
Next pluginMCSkylines-Vehicles

Command and permission references reflect the current plugin.yml manifests in this workspace.