1.0.1
Compatibility
Changes
SomeFreeze v1.0.1
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.
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).
Optional dependencies
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:yD4kqwGW:pDkPmBXj"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:yD4kqwGW:pDkPmBXj"
}

