Complete Configuration Reference

Configuration Reference

Every current CoreCaseX config file, default, reload boundary, permission rule, and troubleshooting note for the Paper MVP.

0. Before You Configure

CoreCaseX is a Paper-only case management plugin. The current MVP expects Java 21, Paper 1.21.11 or newer, the CoreCaseX jar installed on a Paper server, and local SQLite storage bundled through the plugin jar.

The plugin does not currently ship a proxy module, MySQL or MariaDB backend, web dashboard, Discord bot commands, Discord ticket channels, or Discord threads. Discord support is webhook-only and optional.

Core terminology:

  • case means one structured support or report record.
  • reporter means the player who opened the case.
  • staff means a player with staff permissions.
  • Dialog UI means the native Paper Dialog menus and forms opened by /case.
  • reply means player-visible conversation text.
  • internal note means staff-only case text.
  • evidence means structured context attached to a case.
  • timeline means the audit history of case changes.

Trust model:

  • server-controlled config strings can use MiniMessage.
  • player-provided text is escaped before placeholder insertion.
  • Discord webhook delivery is best-effort and must never block case workflows.

1. Folder Layout

Runtime folder:

plugins/CoreCaseX/

Bundled admin config files:

config.yml
case-types.yml
discord.yml
messages.yml
storage.yml

Runtime data created by the plugin:

data/corecasex.db

If a bundled admin config file is deleted from plugins/CoreCaseX/, CoreCaseX recreates the bundled default on the next server start with inline comments restored.

Do not commit runtime or build artifacts from a development checkout:

target/
plugin.zip
*.jar
*.zip
*.log
*.db
local Paper server folders

2. Reload vs Restart

Safe with /case reload:

  • config.yml
  • case-types.yml
  • discord.yml
  • messages.yml
  • storage.yml values are reloaded into config memory

Requires restart or careful operational handling:

  • changing the SQLite file path after storage has already opened
  • changing server version or Paper runtime
  • replacing the plugin jar
  • regenerating deleted config files from defaults

/case reload reloads config and logs validation warnings. It does not migrate or move an already-open SQLite database connection to a new file path during the same runtime.

3. Runtime Guard

CoreCaseX requires Paper 1.21.11 or newer because the plugin uses modern Paper Dialog APIs.

Startup behavior:

  • on a supported Paper runtime, the plugin continues normal startup.
  • on an unsupported runtime, the plugin logs a clear error and disables itself gracefully.

This protects the server from missing Dialog API failures such as runtime method or class errors.

4. config.yml

Purpose:

  • global language/config identity
  • displayed case ID format
  • per-player open case limit
  • case submission cooldown
  • staff notification switches

Current bundled default:

# Language tag reserved for future locale support. The current MVP reads visible text from messages.yml.
language: en

# Display format for case IDs in messages. Supported placeholder: {id}.
case-id-format: "#{id}"

# Maximum number of non-closed cases one player can have at the same time.
max-open-cases-per-player: 5

# Seconds a player must wait between creating new cases. Use 0 to disable.
submission-cooldown-seconds: 60

# In-game staff notification settings.
staff-notifications:
  # Notify online staff with corecasex.staff.view when a new case is created.
  new-case: true

  # Notify staff when a reporter replies to a case.
  player-replied: true

  # Notify an online staff member when another staff member assigns them a case.
  assigned-to-you: true

  # Recipient policy for player replies. Accepted: assigned-only, assigned-and-staff, all-staff.
  player-replied-scope: assigned-only

language

Reserved for future locale support. The current MVP reads active visible text from messages.yml.

case-id-format

Controls how case IDs are shown in configured messages. Supported placeholder: {id}. Example: CASE-{id}.

max-open-cases-per-player

Limits how many non-closed cases one reporter can have at the same time. Closed statuses are RESOLVED, REJECTED, and ARCHIVED. Values lower than 1 are clamped and warned about.

submission-cooldown-seconds

Controls the delay between new case submissions. Set to 0 to effectively disable the cooldown. Negative values are clamped and warned about.

staff-notifications

Controls in-game notifications for new cases, player replies, and assignment events. player-replied-scope accepts assigned-only, assigned-and-staff, and all-staff.

  • assigned-only: notify the assigned online staff member when possible; otherwise notify online case-view staff.
  • assigned-and-staff: include the assigned staff member and staff viewers.
  • all-staff: notify all online staff with corecasex.staff.view.

5. case-types.yml

Purpose:

  • enable or disable each built-in case type
  • set default priority per case type
  • control location collection defaults
  • configure player report reasons
  • configure bug report categories

Supported case type keys:

  • support-request
  • player-report
  • bug-report
  • lost-items
  • grief-theft

Supported priorities: LOW, NORMAL, HIGH, URGENT. Invalid priority values fall back to the built-in default for that case type and produce a validation warning.

Current bundled default:

# General support request flow for help that does not fit another case type.
support-request:
  # If false, this case type is hidden from the Dialog creation menu.
  enabled: true
  # Priority assigned to new support requests. Accepted: LOW, NORMAL, HIGH, URGENT.
  default-priority: LOW
  # Default location collection behavior for this case type.
  collect-location: true

# Structured report flow for reporting another player.
player-report:
  enabled: true
  default-priority: NORMAL
  collect-location: true
  # Reason options shown in the Paper Dialog option control.
  reasons:
    - Insults
    - Spam
    - Harassment
    - Threats
    - Scam
    - Cheating
    - Exploit abuse
    - Other

# Structured flow for technical or gameplay bugs.
bug-report:
  enabled: true
  default-priority: NORMAL
  collect-location: true
  # Category options shown in the Paper Dialog option control.
  categories:
    - Command
    - GUI / Menu
    - Item
    - Portal
    - Reward
    - Gameplay
    - Other

# Flow for missing items, death-related issues, and recovery requests.
lost-items:
  enabled: true
  default-priority: NORMAL
  collect-location: true

# Flow for griefing, theft, suspicious edits, and location-based incidents.
grief-theft:
  enabled: true
  default-priority: HIGH
  collect-location: true

Support Request

General help when no other case type fits. Dialog fields: description and attach current location. Evidence can include reporter snapshot and current location when attached.

Player Report

Structured report against another player. Dialog fields: target player name, configured reason option, and description. Evidence can include reporter snapshot, current location, target snapshot when the target is online, and selected reason. If reasons is empty, CoreCaseX warns and falls back to Other.

Bug Report

Technical or gameplay issue flow. Dialog fields: configured category option and description. Evidence can include reporter snapshot, current location when collected, and selected category. If categories is empty, CoreCaseX warns and falls back to Other.

Lost Items / Death Issue

Missing items, death issues, or recovery requests. Dialog fields: description, claimed lost items, and attach latest death. Evidence can include reporter snapshot, claimed item text, last death location, last death cause, and last death time. Last-death evidence is tracked while the server is running.

Grief / Theft

Griefing, theft, suspicious edits, or location-based incidents. Dialog fields: description, manual location text, and attach current location behavior. Evidence can include reporter snapshot, current location, and manual location text.

6. discord.yml

Purpose:

  • enable or disable Discord webhook output
  • configure default, type-specific, and priority-specific webhooks
  • control which case events send Discord embeds
  • configure embed colors

Current bundled default:

# Master switch for Discord webhook notifications.
enabled: false

# Legacy fallback webhook URL. Prefer webhooks.default for new configs.
webhook-url: ""

# Discord webhook routing. Priority routes win over type routes; type routes win over default.
webhooks:
  default: ""
  types:
    support-request: ""
    player-report: ""
    bug-report: ""
    lost-items: ""
    grief-theft: ""
  priorities:
    low: ""
    normal: ""
    high: ""
    urgent: ""

# Server name included in webhook username text.
server-name: "Minecraft Server"

# Per-event Discord notification switches.
events:
  case-created: true
  urgent-created: true
  case-claimed: true
  case-assigned: true
  status-changed: true
  priority-changed: true
  player-replied: true
  info-requested: true
  staff-replied: true
  case-resolved: true
  case-rejected: true

# Decimal RGB embed colors for each Discord event family.
embed-colors:
  created: 5814783
  urgent: 15548997
  claimed: 16753920
  assigned: 16753920
  status: 5793266
  priority: 16753920
  reply: 3447003
  info: 5793266
  staff-reply: 5793266
  resolved: 5763719
  rejected: 15548997

Enabling Discord

enabled: true
webhooks:
  default: "https://discord.com/api/webhooks/..."

webhooks.default wins over legacy webhook-url when both are set.

Webhook Routing

Routing priority is:

  1. priority webhook
  2. case type webhook
  3. default webhook
  4. legacy webhook-url

Use priority routes for urgent escalation and type routes when reports, bugs, or grief cases should go to different Discord channels.

Webhook Safety

  • blank webhook URLs are disabled
  • malformed URLs are skipped
  • non-HTTP(S) URLs are skipped
  • request creation failures are logged
  • send failures are logged
  • non-2xx HTTP responses are logged
  • case workflows continue even if Discord fails
  • embeds disable allowed mentions with {"allowed_mentions":{"parse":[]}}

7. storage.yml

Purpose: configure the SQLite database path. SQLite is the active storage backend for the current MVP.

Current bundled default:

# SQLite storage settings. SQLite is the active storage backend for the MVP.
sqlite:
  # Database path relative to plugins/CoreCaseX/. Changing this after startup requires a restart.
  path: "data/corecasex.db"

The path is resolved relative to the plugin data folder. Default full runtime path:

plugins/CoreCaseX/data/corecasex.db

Stored data includes cases, timeline events, replies, internal notes, resolutions, evidence, and schema migration markers. CoreCaseX creates tables and indexes automatically, and existing SQLite files are migrated idempotently.

Changing this path after startup requires restart to open the new file cleanly. Unsafe or blank paths fall back to data/corecasex.db and produce a validation warning.

8. messages.yml

Purpose:

  • command feedback
  • validation text
  • player notifications
  • staff notifications
  • Dialog titles
  • Dialog body lines
  • Dialog input labels and defaults
  • detail lines
  • button labels and hover text

The bundled messages.yml is heavily commented. It controls almost every visible line in the current command and Dialog experience.

Top-Level Message Keys

prefix
only-players
no-permission
case-created
case-claimed
case-not-found
case-updated
case-closed
case-archived
invalid-case-id
invalid-priority
invalid-status
assignee-online-required
reload-complete
usage-case-root
usage-case-view
usage-case-open
usage-case-claim
usage-case-assign
usage-case-priority
usage-case-status
usage-case-archive
staff-new-case
staff-player-replied
staff-assigned-to-you
player-reply-added
staff-reply-received
info-requested
resolved-notice
rejected-notice
dialogs

Common Placeholders

  • {id} and {case_id}: case ID
  • {staff}: staff player name
  • {reporter}: reporter player name
  • {type}, {status}, and {priority}: case metadata
  • {assigned}: assigned staff name or fallback text
  • {updated}, {created}, and {closed}: formatted times
  • {location}, {description}, {reply_count}, {note_count}, and {evidence_count}: detail data
  • {resolution_outcome} and {resolution_message}: closure data

MiniMessage is supported in server-controlled messages. Player-provided placeholder values are escaped before rendering.

Command Usage Messages

usage-case-root: "<yellow>Usage: /case [list|view|board|open|claim|assign|priority|status|archive|reload|debug]</yellow>"
usage-case-view: "<yellow>Usage: /case view <id></yellow>"
usage-case-open: "<yellow>Usage: /case open <id></yellow>"
usage-case-claim: "<yellow>Usage: /case claim <id></yellow>"
usage-case-assign: "<yellow>Usage: /case assign <id> <online-staff></yellow>"
usage-case-priority: "<yellow>Usage: /case priority <id> <LOW|NORMAL|HIGH|URGENT> [reason]</yellow>"
usage-case-status: "<yellow>Usage: /case status <id> <OPEN|CLAIMED|WAITING_PLAYER|WAITING_STAFF> [reason]</yellow>"
usage-case-archive: "<yellow>Usage: /case archive <id></yellow>"

Staff and Player Notification Messages

staff-new-case: "<gold>New Case #{id}</gold> <gray>-</gray> <white>{type}</white> by <white>{reporter}</white>"
staff-player-replied: "<gold>Case #{id}</gold> <gray>-</gray> <yellow>{reporter}</yellow> replied."
staff-assigned-to-you: "<gold>Case #{id}</gold> <gray>-</gray> assigned to you."
player-reply-added: "<green>Your reply was added to Case #{id}.</green>"
staff-reply-received: "<yellow>Staff replied to Case #{id}.</yellow>"
info-requested: "<yellow>Staff requested more information for Case #{id}.</yellow>"
resolved-notice: "<green>Your Case #{id} has been resolved.</green>"
rejected-notice: "<red>Your Case #{id} has been rejected.</red>"

Dialog Text Structure

dialogs:
  titles: {}
  body: {}
  inputs: {}
  detail-lines: {}
  validation: {}
  buttons: {}

dialogs.titles controls window titles such as main menu, case type menu, case forms, player cases, staff board, staff details, action dialogs, reply forms, resolve/reject dialogs, and case info sections.

dialogs.body controls short helper lines for the main menu, case type menu, staff tools, case forms, empty lists, and board filters.

dialogs.inputs controls labels and defaults for description, attach-location, attach-death, boolean yes/no, target player, reason, category, manual location, claimed lost items, priority, status, outcome, close reason, final message, reply, staff player name, question, and note inputs.

dialogs.detail-lines controls submit confirmation rows, player summaries, staff summaries, action summaries, overview rows, description rows, evidence rows, conversation rows, internal note rows, and resolution rows.

dialogs.validation controls required-field errors, invalid priority/status text, missing location/world text, expired Dialog action text, wrong-player action text, and online-assignee errors.

dialogs.buttons controls every clickable row label and hover text, including main actions, case type rows, staff tools, review/submit buttons, back buttons, board filters, case list rows, section openers, player replies, staff replies, claim, assign/reassign, priority, status, teleport, resolve, reject, and archive.

Complete Dialog Key Map

This map mirrors the current bundled messages.yml key structure without duplicating every value on the page.

dialogs.titles:
  corecasex
  open-a-case
  staff-tools
  support-request
  report-a-player
  bug-report
  lost-items-death-issue
  grief-theft
  confirm-case-submission
  your-cases
  case-detail
  staff-case-board
  staff-board-filter
  staff-case-detail
  staff-case-actions
  assign-case
  change-priority
  change-status
  reply-to-case-case
  reply-to-player
  request-info
  internal-note
  resolve-case
  reject-case
  case-info-section

dialogs.body:
  main
  case-type-menu
  staff-tools
  support-request
  player-report-reasons
  bug-report-categories
  lost-items-death-summary
  grief-theft
  your-cases-empty
  your-cases-select
  staff-board-filter-select
  staff-board-empty
  staff-board-select-case

dialogs.inputs:
  description
  attach-location
  attach-death
  bool-yes
  bool-no
  target-player
  reason
  category
  manual-location
  claimed-lost-items
  priority
  status
  outcome
  close-reason
  final-message
  reply
  staff-player-name
  question
  note

dialogs.detail-lines:
  confirm-type
  confirm-target
  confirm-reason
  confirm-category
  confirm-description
  confirm-location
  confirm-items
  confirm-last-death
  confirm-manual-location
  player-summary-status
  player-summary-type
  player-summary-updated
  player-summary-description
  player-summary-help
  staff-summary-status
  staff-summary-reporter
  staff-summary-assigned
  staff-summary-updated
  staff-summary-counts
  action-status
  action-priority
  action-assigned
  overview-type
  overview-status
  overview-priority
  overview-reporter
  overview-assigned
  overview-created
  overview-updated
  overview-location
  description-text
  description-location
  evidence-empty
  evidence-category
  evidence-entry
  conversation-empty
  conversation-header
  conversation-reply-meta
  conversation-message
  conversation-note-count
  conversation-note-meta
  conversation-note-message
  resolution-empty
  resolution-outcome
  resolution-message
  resolution-closed

dialogs.validation:
  open-by-id-help
  description-required
  target-required
  reason-required
  category-required
  items-required
  invalid-priority
  closed-status-command
  invalid-status
  no-location
  world-not-loaded
  text-required
  expired-action
  wrong-player-action
  assignee-online-required

dialogs.buttons:
  open-a-case
  your-cases
  staff-tools
  report-a-player
  report-a-bug
  lost-items
  grief-theft
  support-request
  case-board
  open-by-id
  review
  submit-case
  submit
  change
  add-reply
  back
  go-back
  case-types
  open-support-request
  player-case-list-item
  staff-board-filter
  staff-board-case-item
  overview
  description
  evidence
  conversation
  resolution
  actions
  player-reply
  staff-reply
  request-info
  internal-note
  claim
  assign
  priority
  status
  teleport
  resolve
  reject
  archive

Button Entry Shape

dialogs:
  buttons:
    example:
      label: "<yellow>Example</yellow>"
      hover: "<gray>Hover text.</gray>"

Hover text may include \n line breaks.

9. Workflow Rules

Statuses

Supported statuses are OPEN, CLAIMED, WAITING_PLAYER, WAITING_STAFF, RESOLVED, REJECTED, and ARCHIVED. Direct /case status accepts only non-closed workflow statuses: OPEN, CLAIMED, WAITING_PLAYER, and WAITING_STAFF.

Priorities

Supported priorities are LOW, NORMAL, HIGH, and URGENT. Priority affects staff board ordering, high/urgent board filters, Discord priority routing, and the urgent-created Discord notification.

Board Filters

Staff board filters include all open cases, unassigned, assigned to me, high and urgent, waiting player, waiting staff, recent closed, and archive.

Archive Rules

Archive is allowed only when a case is RESOLVED or REJECTED. Archive is rejected for OPEN, CLAIMED, WAITING_PLAYER, and WAITING_STAFF.

Claim and Assignment Rules

Claim assigns the case to the clicking staff member, fails if the case is already assigned, fails if the case is closed, and uses a conflict-safe database update.

/case assign is the MVP assign/reassign command. It requires the target staff member to be online, sets or replaces the assignee, records previous and new assignee names in the timeline, moves OPEN cases to CLAIMED, and rejects RESOLVED, REJECTED, or ARCHIVED cases.

10. Evidence Visibility

Evidence levels are PLAYER_VISIBLE, STAFF_ONLY, and SENSITIVE.

  • players can see PLAYER_VISIBLE evidence.
  • staff with corecasex.staff.view-evidence can see STAFF_ONLY evidence.
  • staff with corecasex.staff.view-sensitive-evidence can see SENSITIVE evidence.

Evidence can include reporter snapshot data, reporter location, online target player snapshot data, report reason, bug category, claimed lost items, last death context, and manual location text.

11. Dialog UI Configuration

Normal player entrypoint:

/case

Dialog menus include:

  • main menu
  • case type menu
  • guided case creation forms
  • review-before-submit screens
  • player case list
  • player case detail view
  • staff tools menu
  • staff board filters
  • staff case detail view
  • staff action menu
  • staff Open by ID input

Dialog input types include free text for descriptions, notes, replies, outcomes, final messages, target players, and manual locations; option controls for reasons, categories, priority, and status; and boolean controls for attach-location and attach-death choices.

Safe Dialog Actions

Clickable rows use short internal commands:

/case ui <token>
  • tokens are owner-bound
  • tokens are permission-checked at click time
  • successful callbacks are one-use
  • expired tokens are rejected
  • wrong-player token use is rejected

12. Commands

Player Commands

/case
/case list
/case view <id>

Staff Commands

/case board
/case open <id>
/case claim <id>
/case assign <id> <staff>
/case priority <id> <LOW|NORMAL|HIGH|URGENT> [reason]
/case status <id> <OPEN|CLAIMED|WAITING_PLAYER|WAITING_STAFF> [reason]
/case archive <id>

Admin Commands

/case reload
/case debug

Internal Dialog Command

/case ui <token>

The internal command is generated by clickable Dialog rows. Players should not need to type it manually.

13. plugin.yml

Complete bundled plugin descriptor. Maven resolves ${project.version} when the release jar is built.

name: CoreCaseX
version: ${project.version}
main: com.corecasex.CoreCaseXPlugin
api-version: '1.21'
description: Structured case management for Paper servers.
author: CoreCaseX
commands:
  case:
    description: Open and manage CoreCaseX cases.
    usage: /case [list|view|board|open|claim|assign|priority|status|archive|reload|debug]
permissions:
  corecasex.use:
    default: true
  corecasex.case.create:
    default: true
  corecasex.case.list:
    default: true
  corecasex.case.view-own:
    default: true
  corecasex.staff.board:
    default: op
  corecasex.staff.view:
    default: op
  corecasex.staff.claim:
    default: op
  corecasex.staff.assign:
    default: op
  corecasex.staff.note:
    default: op
  corecasex.staff.reply:
    default: op
  corecasex.staff.request-info:
    default: op
  corecasex.staff.priority:
    default: op
  corecasex.staff.status:
    default: op
  corecasex.staff.resolve:
    default: op
  corecasex.staff.reject:
    default: op
  corecasex.staff.archive:
    default: op
  corecasex.staff.teleport:
    default: op
  corecasex.staff.view-evidence:
    default: op
  corecasex.staff.view-sensitive-evidence:
    default: op
  corecasex.admin.reload:
    default: op
  corecasex.admin.debug:
    default: op

14. Permissions

Player Permissions

corecasex.use
corecasex.case.create
corecasex.case.list
corecasex.case.view-own

Staff Permissions

corecasex.staff.board
corecasex.staff.view
corecasex.staff.claim
corecasex.staff.assign
corecasex.staff.note
corecasex.staff.reply
corecasex.staff.request-info
corecasex.staff.priority
corecasex.staff.status
corecasex.staff.resolve
corecasex.staff.reject
corecasex.staff.archive
corecasex.staff.teleport
corecasex.staff.view-evidence
corecasex.staff.view-sensitive-evidence

Admin Permissions

corecasex.admin.reload
corecasex.admin.debug

Player permissions default to true. Staff and admin permissions default to op. A practical LuckPerms setup gives normal players use/create/list/view-own, helpers board/view/reply/request-info, moderators claim/note/priority/status/resolve/reject/teleport as appropriate, and senior staff archive plus sensitive evidence access only when needed.

15. Config Validation

CoreCaseX logs warnings on startup and /case reload for:

  • invalid Discord webhook URLs
  • invalid case type default priorities
  • empty player-report.reasons
  • empty bug-report.categories
  • invalid staff-notifications.player-replied-scope
  • max-open-cases-per-player < 1
  • submission-cooldown-seconds < 0
  • unsafe or blank storage.yml -> sqlite.path

These warnings do not normally disable the plugin. They identify settings that were ignored, defaulted, or degraded. Numeric values are clamped safely, and unsafe SQLite paths fall back to data/corecasex.db. Hard-fail behavior is reserved for unsafe runtime conditions such as unsupported Paper version.

16. Regenerating Defaults

  1. Stop the server.
  2. Back up plugins/CoreCaseX/.
  3. Delete the config file you want to regenerate.
  4. Start the server.
  5. Reapply only the settings you still need.

Common files to regenerate:

config.yml
case-types.yml
discord.yml
messages.yml
storage.yml

Do not delete data/corecasex.db unless you intentionally want to remove all cases and history.

17. Troubleshooting Quick Reference

Plugin disables itself on startup

Check the server version. CoreCaseX requires Paper 1.21.11+.

/case does not open

  • check corecasex.use
  • confirm the server is Paper, not Spigot
  • confirm the plugin enabled successfully
  • confirm the server version supports Paper Dialog APIs

A player cannot create cases

  • check corecasex.case.create
  • check that the case type is enabled in case-types.yml
  • check max-open-cases-per-player
  • check submission-cooldown-seconds

A staff member cannot see staff tools

  • check corecasex.staff.board
  • check corecasex.staff.view
  • confirm the staff member is online as a player

Assignment fails

Assignment and reassignment require the assignee to be online and fail for resolved, rejected, or archived cases. Use the exact online player name.

Claim fails

Claim fails when the case is already assigned or when the case is resolved, rejected, or archived.

Archive fails

Archive only works after a case is resolved or rejected.

Discord does not send

  • check discord.yml -> enabled: true
  • check for a valid https:// webhook URL
  • check the event key under events
  • check route order: priority, then type, then default
  • check server console warnings for invalid URL, send failure, or non-2xx response

Discord pings roles or users

CoreCaseX disables allowed mentions in webhook payloads. If Discord still pings, check external automations or manually edited webhook content outside CoreCaseX.

Evidence is missing in staff view

  • check corecasex.staff.view-evidence for staff-only evidence
  • check corecasex.staff.view-sensitive-evidence for sensitive evidence
  • confirm the evidence was actually collected for that case type

Config changes do not appear

Run /case reload. If the change is the SQLite path or plugin jar, restart the server instead.

18. Production Validation Checklist

  • boot on Paper 1.21.11+
  • confirm CoreCaseX enables without runtime guard errors
  • run /case
  • create one support request
  • create one player report
  • create one bug report
  • create one lost items case
  • create one grief/theft case
  • inspect player case list and details
  • inspect staff board filters
  • test staff Open by ID Dialog input
  • claim a case
  • assign and reassign a case to an online staff member
  • change priority
  • change status
  • add an internal note
  • send a staff reply
  • request more info
  • reply as the reporter
  • resolve a case
  • reject a case
  • archive a resolved or rejected case
  • test teleport on a case with location evidence
  • test Discord with a valid webhook
  • test Discord with a malformed webhook and confirm case workflows still succeed
  • run /case reload after a harmless wording change

For source builds, useful checks are:

.\mvnw.cmd clean test
.\mvnw.cmd clean package
git diff --check

19. Quick Setup Examples

Small Survival Server

  • keep all five case types enabled.
  • keep grief/theft default priority as HIGH.
  • enable a Discord default webhook for staff visibility if Discord mirroring is wanted.
  • keep player-replied-scope: assigned-only.
  • grant sensitive evidence only to senior staff.

Minigame Server

  • keep bug reports and support requests enabled.
  • optionally disable grief/theft when it does not apply.
  • route urgent priority cases to a separate Discord webhook.
  • use bug categories that match your game modes.

Strict Staff Workflow

  • give helpers view, reply, and request-info permissions only.
  • give moderators claim, status, and priority permissions.
  • give senior staff resolve, reject, archive, and sensitive evidence permissions where appropriate.
  • keep archive restricted to resolved or rejected cases.
  • use internal notes for staff handoff.

20. Summary

CoreCaseX configuration controls player case creation, five built-in case types, case priorities, reason and category options, location and death evidence behavior, staff board workflow notifications, Discord webhook routing and events, SQLite file location, command and Dialog text, validation messages, and permissions through plugin.yml.

The intended operating model is straightforward: players use /case, staff use the Dialog board and actions, SQLite stores the full history, Discord mirrors important events when configured, and validation warnings guide admins without breaking normal case workflows.