EverGrims WerksTHE CROSSPLAY WERKSHOP

Public release 0.3.2 · Admin guide · Paper 26.3

Fast travel

Choose a chapter

Admin Guide

Everything a server owner or plugin developer needs: the install, the commands, the permissions, every setting, the shared menu service, and what detection can and cannot tell you.

Grims Client Checker is a small shared utility for Paper servers using Geyser and Floodgate. It identifies the client information available for each connected player and answers one question for other EGW plugins: should this player get a standard inventory menu or a touch-friendly menu? Players choose their menus once with /gcc menu, for every Grims plugin or one at a time, and the choice is saved.

Upgrading from 0.3.0. Upgrade if your phone players have to pick mobile menus by hand. 0.3.1 fixes that: phones and tablets get touch menus in AUTO. Saved choices and plugin integrations carry over unchanged.

01

Admin wiki

Installation

Requirements

  • Paper 26.3
  • Java 25
  • Floodgate on the Paper server
  • A working Geyser connection using auth-type: floodgate

Steps

  1. Place GrimsClientChecker-0.3.2.jar in the server's plugins folder.
  2. Remove any older GrimsClientChecker plugin JAR so only one version remains.
  3. Do not install the -api or -sources JARs on the server.
  4. Restart the server normally, join, and run /gcc check.

If Geyser runs on a proxy, configure Floodgate backend data forwarding so the Paper server receives Bedrock player details.

02

Admin wiki

Commands

The full command is /grimsclientchecker, alias /gcc.

CommandPurpose
/gcc check <player>Detect an online player and privately show the result
/gcc inspect <player>Show an online player's cached detection
/gcc refresh [player]Detect again immediately; defaults to the sender
/gcc statsShow cache size and retention settings
/gcc reloadReload settings, clear old cache entries, and detect online players again

All command output is private to the sender. Regular players cannot inspect another player or change anyone else's preference. Console may use /gcc check <player>.

The player commands, /gcc check and /gcc menu, are covered on the player wiki.

03

Admin wiki

Permissions

PermissionDefaultPurpose
grimsclientchecker.checkEveryoneView your own detected details
grimsclientchecker.menuEveryoneChoose AUTO, CLASSIC, or MOBILE for every plugin or one plugin
grimsclientchecker.adminOperatorsInspection, refresh, statistics, and reload commands, and /gcc check <player>
04

Admin wiki

Configuration

The generated configuration is stored at plugins/GrimsClientChecker/config.yml.

SettingDefaultBehavior
cache.online-seconds300Maximum age of an online snapshot before the next lookup detects again
cache.offline-seconds60How long a valid snapshot may remain after logout; 0 deletes immediately
cache.retain-only-touch-offlinetrueRetain only touch profiles after logout
cache.cleanup-seconds30How often unused expired entries are cleared
logging.touch-joinsfalseOptionally log touch joins to the console

Restarting clears the detection cache. Expired information is never returned, and cache reads do not extend its lifetime. The plugin has no player-history database, packet listener, or repeating task per player.

Saved preferences

Players' /gcc menu choices are the only thing the plugin saves. They live in:

plugins/GrimsClientChecker/preferences.yml

Back this file up with the rest of your plugin data.

05

Admin wiki

Plugin Integration

Grims Client Checker publishes one shared service through Bukkit. An integrated plugin can ask for the current player's profile or simply ask whether that player should get a touch menu.

Integrated EGW plugins, such as Grims Player Shops, Grims Donation Center, and Grims Crops, do not detect clients themselves and follow the shared choice. A plugin must be integrated before its menus respond to /gcc menu.

  • One shared service
  • Per-plugin choices
  • No detection in consumers
  • Saved in one place
06

Admin wiki

Developer API

Setup

  • Compile against GrimsClientChecker-0.3.0-api.jar using compileOnly. The API did not change in 0.3.1, so the API JAR keeps its 0.3.0 name.
  • Do not shade or copy the API classes into the consuming plugin.
  • Add depend: [GrimsClientChecker] when integration is required, or softdepend when your plugin works without it and keeps API references in a class that only loads when Client Checker is installed.
  • Ask for the menu decision when opening a menu, using the current online Player.
  • Use the live player UUID rather than a separate ownership UUID, including for linked Floodgate accounts.
GrimsClientApi clients = getServer()
    .getServicesManager()
    .load(GrimsClientApi.class);

if (clients != null) {
    boolean touch = clients.usesTouchMenu(player);
    // touch: open the touch menu
    // false: open the standard menu
}

Per-plugin choices

The answer already includes the player's saved choice for your plugin. Client Checker identifies the calling plugin, so profile(Player), menuLayout(Player), usesTouchMenu(Player), and cachedProfile(UUID) apply /gcc menu <plugin> before the all-plugins choice with no extra arguments.

savedMenuPreference(UUID) and saveMenuPreference(UUID, MenuPreference) read and save your plugin's own choice on the main thread. Use them once to move an older plugin-specific setting, as Grims Player Shops does for its former /gs ui choices. Do not store the returned layout against an account yourself.

Threading. Online detection calls belong on the main server thread. cachedProfile(UUID) is available for asynchronous read-only checks and returns empty when a snapshot is missing or expired.

07

Admin wiki

Detection Limits

Bedrock details are client-reported values supplied through Floodgate, not proof of physical hardware. Floodgate's input field is wrong on phones (Floodgate issue #430): Android reports keyboard and mouse, and iOS reports unknown. That is why AUTO trusts the reported device for phones and tablets and the reported input for everything else. /gcc check still shows the input Floodgate reported, with the line Phones and tablets get touch menus in AUTO; Floodgate often misreports their input.

Changing controls during one connection may not update the reported data. Reconnect before testing a different device or input method. Every join replaces the previous profile.

Java connections use Paper's protocol information and standard menus. Paper does not expose an exact Java release name, physical operating system, or input device through this lookup.

Client brand and mod hints

The checker can display reported brands such as Fabric, Forge, or NeoForge and any advertised network channels. These are hints, not a verified mod list. Clients may omit or spoof them, Geyser may report its own brand, and mods without advertised channels stay invisible.

An empty channel report means "unknown or none reported." It is never proof that the player has no mods installed.

↑