SomeFreeze
ModrinthA 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.
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).
Versions
No version history available. Use the Download button to get the latest from the source.

Comments 0
No comments yet. Be the first to share your thoughts.