Compatibility
Minecraft: Java Edition
Platforms
Links
Tags
Creators
Details
SomeFreeze
A cheat-check (freeze) plugin for Paper 1.16.5. Moderators can summon suspected players for a timed review, communicate in a private check chat, detect AnyDesk IDs, track AFK activity, and record outcomes with optional MySQL storage.
Requirements
- Paper 1.16.5 (or compatible Spigot fork)
- Java 8+
- ProtocolLib (optional, recommended) — improves AFK detection via client look packets. Place
ProtocolLib.jarinlibs/before building, or install it on the server at runtime.
Build
mvn clean package
Output: target/SomeFreeze-1.0.1.jar
Commands
Main command: /freeze
Aliases: /sfreeze, /проверка
| Command | Description | Permission |
|---|---|---|
/freeze <player> |
Start a cheat check on a player | somefreeze.use |
/freeze |
End the active check with status Clean | somefreeze.use |
/freeze <player> (again) |
If you are already checking that player, ends the check as Clean | somefreeze.use |
/freeze checkafk [player] |
Check whether a player is AFK (defaults to your current check target) | somefreeze.checkafk |
/freeze history <player> |
Show the last 15 check records for a player | somefreeze.history |
/freeze finish <reason> |
End the check with a configured reason (runs associated commands) | somefreeze.finish |
/freeze time stop |
Pause the ban countdown (e.g. after AnyDesk is shared) | somefreeze.time |
/freeze time start |
Resume the ban countdown | somefreeze.time |
Permissions
| Permission | Description | Default |
|---|---|---|
somefreeze.use |
Start/end checks | op |
somefreeze.checkafk |
Use /freeze checkafk |
op |
somefreeze.history |
View check history | op |
somefreeze.finish |
Finish checks with a reason | op |
somefreeze.time |
Pause/resume the timer | op |
somefreeze.notify |
Receive check notifications | op |
somefreeze.bypass |
Ignore freeze restrictions (movement, inventory, etc.) | false |
somefreeze.admin |
Grants all permissions above | op |
How a check works
- Start — A moderator runs
/freeze <player>. The suspect is frozen in place, teleported to the configured check location (optional), and linked to that moderator for the session. - Restrictions — While frozen, the player cannot move, open inventories, interact, drop items, take damage, or run most commands (except chat-related commands and
/freeze). Players withsomefreeze.bypassare unaffected. - Timer — A countdown runs (default 7 minutes). The moderator sees a BossBar with time remaining. When it reaches zero, configurable commands run (e.g. ban) via
on-time-expire. - Reminders — On a configurable interval, the suspect receives chat instructions, an optional clickable AnyDesk link, and a title/subtitle overlay.
- AnyDesk — If the suspect posts a 9–10 digit ID in chat (regex-configurable), the moderator is notified and activity is recorded.
- Private chat — Public chat is cancelled during a check; messages between moderator and suspect are routed privately, with an optional copy-to-clipboard button.
- Timer control —
/freeze time stoppauses the countdown (useful after screen sharing);/freeze time startresumes it. - End —
/freezeor/freeze <same player>marks the player Clean, restores their saved location, and saves history./freeze finish <reason>applies a configured outcome and commands. - Disconnect — If the suspect quits during an active check,
reasons.leftcommands run automatically (e.g. ban for leaving).
AFK detection
The plugin tracks player activity globally:
- Inventory clicks, drags, and closes
- Hotbar slot changes
- Camera rotation (movement without position change)
- ProtocolLib look packets (when enabled)
Settings:
settings.afk-threshold-seconds— inactivity time after which/freeze checkafkreports AFK (default 30s)settings.freeze-block-afk-seconds— players inactive longer than this cannot be called for a check (default 180s / 3 min)
During an active check, inactivity is tracked per session as well.
Check history
Every completed check is logged with target, moderator, status, reason, and timestamp.
- YAML (default):
plugins/SomeFreeze/history.yml - MySQL: enable in config; uses HikariCP (shaded into the JAR)
View with /freeze history <player> (last 15 entries).
Configuration
Settings (settings)
| Key | Description | Default |
|---|---|---|
check-duration-seconds |
Time until auto-action on expiry | 420 (7 min) |
reminder-interval-seconds |
Interval for chat/title reminders | 5 |
teleport-on-freeze |
Teleport suspect to check coords | true |
world, x, y, z, yaw, pitch |
Check room location | world @ 0.5, 100, 0.5 |
restore-location |
Return player to pre-check position when done | true |
execute-commands-as-moderator |
Run ban/commands as the moderator (fallback: console) | true |
anydesk-pattern |
Regex to detect AnyDesk ID in chat | \d{9,10} |
afk-threshold-seconds |
AFK threshold for checkafk |
30 |
freeze-block-afk-seconds |
Block /freeze if player is AFK this long |
180 |
afk.track-inventory |
Track inventory activity | true |
afk.track-hotbar |
Track hotbar changes | true |
afk.track-look |
Track camera rotation | true |
afk.look-sensitivity |
Minimum look delta to count as activity | 2.0 |
afk.use-protocollib |
Use ProtocolLib for look packets | true |
Messages (messages)
All plugin messages support placeholders (see below). Notable sections:
freeze-chat— lines sent to the suspect on start and each reminderanydesk-link— clickable link appended after the second chat linefreeze-title/freeze-subtitle— title overlay (supports gradients)moderator-bossbar— BossBar title, color, style, and progress for the moderatorprivate-chat-format-sender/private-chat-format-receiver— private check chatprivate-chat-copy— copy button next to private messages
Finish reasons (reasons)
Each entry under reasons defines:
display— shown in/freeze finishsuccess messagestatus— saved to historycommands— run when that reason is chosen (placeholders supported)
Default keys: cheats, refuse, ignore, left, clean.
Time expiry (on-time-expire)
Commands executed when the timer runs out without being paused (if not already finished).
Message colors
Supported in config strings:
- Legacy:
&a,&c, … - Hex:
&#FF5555or#FF5555 - Gradients:
<gradient:#FF0000:#FFFF00>text</gradient>
Placeholders
{player}, {target}, {moderator}, {time_left}, {time}, {reason}, {status}, {anydesk}, {date}, {prefix}, {message}
MySQL
mysql:
enabled: true
host: localhost
port: 3306
database: minecraft
username: root
password: password
table-prefix: sf_
When enabled: false, history is stored in plugins/SomeFreeze/history.yml.
Example on-time-expire / reason commands
on-time-expire:
commands:
- "ban {target} Failed check within 7 minutes"
reasons:
cheats:
display: "&cCheats"
status: "Banned (cheats)"
commands:
- "ban {target} Cheats during check"
clean:
display: "&aClean"
status: "Clean"
commands: []
Commands can be prefixed with / or not; they are dispatched as the moderator (or console if offline / setting disabled).


