CoordinateOffset
A Minecraft Paper plugin that configurably obfuscates players' coordinates.
Minecraft offers a useful debug menu (F3) that allows anyone to easily see their coordinates in the world. This makes it easy to save points of interest and share locations with friends (or enemies).
However, not all multiplayer servers want coordinates to be so easily accessible. /gamerule reducedDebugInfo can
administratively hide coordinates from the F3 menu, but it is trivial for a player to add a client-side mod that
shows them.

CoordinateOffset is a plugin for Paper-based Minecraft servers that modifies every coordinate in packets between the server and client. The player still sees the exact same world they would normally see. But no matter which mods they install, they cannot see their real coordinates.
Why?
This plugin isn't intended for all servers. Here are a few ideas that might make CoordinateOffset useful:
- Prevent metagaming: If you consider coordinate usage and sharing to be metagaming, this prevents it.
- Amplify in-game items: Coordinates no longer outclass compasses, lodestones, recovery compasses, and maps when those coordinates are inconsistent.
- Prevent coordinate leaks: If everyone sees different coordinates, players cannot derive each other's coordinates from an accidental leak in a screenshot.
- Guard the world seed: Any unknown offset makes seed-cracking tactics harder.
- Center the origin: Put the (0, 0) coordinate anywhere you'd like.
Features
- Fully-configurable, flexible methods of determining how to apply offsets
- Generate offsets randomly for each player, or use fixed offsets for multiple players
- Match offsets to the player's position, so they see themselves near the world's origin
- Optionally regenerate offsets based on various player actions, including death, world change, teleport, and server join
- Regenerate and set offsets immediately with commands
- Configure different offsets per-player, per-world, and with permissions
- Automatic scaling for offsets to ensure coordinates still align when using a nether portal
- Extensible API to flexibly get and set offsets
- Compatible with Distant Horizons, ViaVersion, and Velocity (must be installed on Paper, not Velocity itself)
Requirements and Installation
- An understanding of the implications of installing and incompatible plugins — this plugin WILL break things.
- Paper or a fork
- PacketEvents (latest release or dev build for Spigot)
Some known incompatible plugins are: Most anticheats, Geyser.
After ensuring that you meet the requirements, just grab the latest
release and drop it in your server's plugins
folder. Then follow the steps below to configure how coordinates are shifted for each player.
Configuration
Main article: Configuration Guide
The main configuration file is automatically generated after the first run at plugins/CoordinateOffset/config.yml.
defaultOffsetProvider: random
The default configuration contains five predefined "offset providers". An "offset" refers to the amount that the player's coordinates should appear to be shifted from their real location. Get started by picking a strategy that matches the type of offsetting you're trying to achieve:
constant- Specify the exact offset you want players to have.disabled- Players will see their real coordinates.random- Individually randomize each player's offset. Optionally re-roll offsets upon player actions.zeroAtLocation- Use an offset based on the player's starting location, so they see themselves near (0, 0). Optionally re-center offsets upon player actions.permission- Assign permissions to players, likecoordinateoffset.offset.160.-240, to control their offset.
You can customize these providers further, use different providers for different players/worlds/groups, and define your own providers. See the complete Configuration Guide.
Commands and Permissions
See the Commands and Permissions Guide for details.
API
You can use or extend CoordinateOffset in your own plugin by using the API. Please see the API Guide.
Support
- Open an issue on GitHub to report a bug or request a feature.
- Join the Chips's Mods Discord for help.
Credits
Special thanks to Cavallium for developing CoordinatesObfuscator, which CoordinateOffset is a fork of. CoordinateOffset's packet translation logic was heavily modeled after the work done by CoordinatesObfuscator.
Libraries used:
All Versions
+ Add Version| Name | Game version | Platforms | Published | Downloads | Actions |
|---|---|---|---|---|---|
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 |
- Supported Minecraft servers: Paper 26.1.2-26.3*
- Support 26.3
- Increase minimum Minecraft version to 26.1.2
- Supported Minecraft servers: Paper 1.21.4-26.2*
- Fix Distant Horizons Support plugin compatibility for DH 3.1+/DHS 0.15 dev build/Minecraft 26.2
- Supported Minecraft servers: Paper 1.21.4-26.2*
- Support 26.2
- Add sulfur spikes to blocks affected by
fixCollision.dripstone
- Supported Minecraft servers: Paper 1.21.4-26.1.2*
- Fix Distant Horizons Support plugin compatibility for DH 3.0+/DHS 0.13.0+/Minecraft 26.1+
- Supported Minecraft servers: Paper 1.21.4-26.1.2*
- Support 26.1.2
- Supported Minecraft servers: Paper 1.21.4-1.21.11*
- Fix world border being placed incorrectly in the nether in 1.21.9 and later (causing blocks to become unplaceable and unbreakable)
- Fix world border not appearing until a player moves when joining the game
- Supported Minecraft servers: Paper 1.21.4-1.21.11*
- Fix offsets not regenerating when players enter an end portal from the overworld to the end
- Supported Minecraft servers: Paper 1.21.4-1.21.11*
- Support 1.21.11
- Add
offsetsAreMultiplesOfBlocksconfiguration setting - Controls how the plugin rounds offsets (e.g. to the nearest chunk or to the nearest N chunks)
- Default is
auto, which detects the optimal rounding behavior based on other installed plugins - Add **Experimental** Distant Horizons Support plugin compatibility
- Level-of-detail (LOD) data generated by the [DHS](https://modrinth.com/plugin/distant-horizons-support) plugin is now properly adjusted for the player's offset
- Read the warnings listed in [Implications and Limitations](https://github.com/joshuaprince/CoordinateOffset/wiki/Implications-and-Limitations) under "Distant Horizons Support" if you plan on installing CoordinateOffset alongside DHS
- Add WorldEditCUI mod compatibility
- Players with the WorldEditCUI mod installed will now see correctly-placed WorldEdit selections when they have an offset applied
- Supported Minecraft servers: Paper 1.21.4-1.21.10*
This is a patch following v6.0.0 with minor fixes. Please see the full [v6.0.0 changelog](https://github.com/joshuaprince/CoordinateOffset/releases/tag/v6.0.0) and [v6 Upgrade Guide](https://github.com/joshuaprince/CoordinateOffset/wiki/v6-Upgrade-Guide) if upgrading from before v6.0.0.
- Fix version string in paper-plugin.yml being formatted incorrectly
- Fix config.yml parsing of floating-point numbers with no decimal point
- Allow zero values for
worldCoordinateScaleOverrides - Fix metrics reporting wrong statistic for
worldCoordinateScaleOverrides - API: Add
Offset#applymethod to allOffsettypes
- Supported Minecraft servers: Paper 1.21.4-1.21.10*
CoordinateOffset [5.0.0](https://github.com/joshuaprince/CoordinateOffset/releases/tag/v5.0.0) just came out last month,
but thanks to a breakthrough I made in **immediate offset changes**, it's already time for another major release.
"Immediate offset changes" means that the plugin no longer has to wait for the next opportune event to change a player's
offset. By simulating a teleport, the plugin can change a player's offset at any time. This allows for commands like
/offset regenerate and /offset set. It also allows safe offset changes when the player teleports any distance.If you like reading, check out the fully documented list of changes in the
- [v6 Upgrade Guide](https://github.com/joshuaprince/CoordinateOffset/wiki/v6-Upgrade-Guide)**. You should especially
summary of everything new:
- Regular backups are still mandatory.**
- Add
/offset regenerateand/offset setcommands. - Add
PermissionOffsetProvider. - Add option to specify
offsetProviderOverridesrules based on player name, world key, and world UUID. (Previously
- Add
regenerateOnTeleportandminimumTeleportDistanceoptions to RandomOffsetProvider and
resetOnDistantTeleport and allowUnsafeResetOnDistantTeleport settings)- Rename
resetOn*offset provider options toregenerateOn*to match the new command. (Configuration will
- Rename
persistentRandomOffsetProvider option toregenerateOnJoin. (Configuration will automatically migrate
false and true are swapped automatically.)- Remove
persistenceKeyRandom offset provider option in favor of using provider name. - Add
regenerateOnJoinoption toZeroAtLocationOffsetProvider, allowing zero-at-location offsets to persist across
- Default all
regenerateOn*options to false. (Thepersistentoption previously defaulted to false; newly generated
- Redesign internal handling for scaling offsets between worlds.
- Offsets now scale automatically based on world coordinate scale (e.g. nether scales down by 8).
- Move
worldScalingandworldAlignmentoptions out of offset provider settings and into optional
worldCoordinateScaleOverrides global configuration. (Not automatically migrated from the previous version)- Add a default
offsetProviderOverridesrule that disables offsets in the end. (Only for newly generated configs;
- Automatically disable offsets for Bedrock players with no extra permissions/config required.
- Add
messages.ymlto allow customization/translation of most plugin messages. - API Changes
- Offsets returned from custom offset providers are now split into
ScalableOffsetandFixedOffsetto give explicit
- Add new API endpoints to
regenerateOffsetandsetOffsetfor immediate offset changes. - Add
onOffsetSetByCommandinterface to offset providers.
- Supported Minecraft servers: Paper 1.21.4-1.21.10*
I'm proud to announce CoordinateOffset's latest major release, **5.0.0**. This release overhauls lots of internal code and restructures the entire project. This will facilitate some new features and platform support that I've been wanting to add for a while. **Please report bugs on the [issue tracker](https://github.com/joshuaprince/CoordinateOffset/issues) or in [Discord](https://discord.gg/V3xYtqU9JU).**
## Upgrading from CoordinateOffset 4.0
If you just want to upgrade, be aware of the following:
- Regular backups are mandatory.**
- Minecraft versions **1.21.3 and below** and **all Spigot servers** are no longer supported. (Read below for more info)
- [PacketEvents](https://ci.codemc.io/job/retrooper/job/packetevents/) is now required** as a dependent plugin. Please install the latest development build (for now, PE's latest release does not support MC 1.21.10).
- Your CoordinateOffset
config.ymlwill be stripped of all comments and reorganized on upgrade. Your existing configuration will be backed up toconfig.v4.old.ymlin the plugin's data folder before it is migrated. All saved configuration should work the same as it did before the upgrade. /offsetreloadis now/offset reload./offset <player>is now/offset query <player>.
## Dropping support for <1.21.4 and Spigot
Minecraft versions below **1.21.4** and **all Spigot servers** are no longer supported. Paper [hard-forked from Spigot](https://forums.papermc.io/threads/the-future-of-paper-hard-fork.1451/) almost a year ago, and 1.21.9 was the first version where Paper's decisions split away from Spigot in a way that affects CoordinateOffset. Dropping support let me delete a lot of legacy code, rewrite the command system in Brigadier, and spend less time testing new releases.
Based on [bStats data](https://bstats.org/plugin/bukkit/CoordinateOffset/19988), at the time of writing, only 2 of 41 servers running CoordinateOffset are using Spigot. 4 of 41 servers are running a Minecraft version below 1.21.4. It doesn't make sense to accommodate these servers with new plugin development. My apologies if you are affected, but please stay on [v4.0.16](https://github.com/joshuaprince/CoordinateOffset/releases/tag/v4.0.16) if you need it.
## Full Changelog
- Support 1.21.9 and 1.21.10
- Convert plugin to a Paper plugin and increase API version to 1.21.4
- Stop shading PacketEvents; require PacketEvents as a dependency
- Replace configuration system with ConfigLib
- Configuration is now automatically formatted and new options are added during plugin load
- Comments and unexpected configuration will be deleted when the plugin loads
- Add new
obfuscateDebugPropertySubscriptionsconfig.yml setting - Minecraft 1.21.9+ has ["debug" properties](https://minecraft.wiki/w/Debug_property) that clients can enable. These properties show real coordinates inside entity brain data (such as bees and villagers).
- The new setting disables debug properties for all clients with an offset applied.
- This setting is enabled by default. Disabling it makes these debug flags work but reveals offsets to players.
- Rewrite
/offsetcommand - The output of all subcommands is now formatted more nicely
- The command gives proper suggestions based on permissions
/offsetreloadis now/offset reload/offset <player>is now/offset query <player>- All permissions are unchanged
- Add a proper API published on Maven Central
- See [API wiki page](https://github.com/joshuaprince/CoordinateOffset/wiki/API) for details
- Remove
debugconfig.yml setting - This setting was not intended for production use and caused plugin errors when enabled.
- Various internal changes
- Restructure code to be in
api,core, andpapersubprojects for increased modularization - Redesign offset change logic during join/respawn/world change to more accurately map to the game's protocol
- Redesign offset storage logic to be more efficient with concurrency
- Fix console errors on player login for versions up to 1.21.4
- Rate-limit console spam during packet error conditions
- Support 1.21.8
- Support 1.21.7
- Support 1.21.6
- Fix ghost items appearing on the cursor when moving items with data components in an inventory with an offset applied in 1.21.5
- Fix underground rain and missing beacon beams in 1.21.5 caused by missing heightmaps
- Support 1.21.5
- Fix structure blocks being unusable when an offset is applied
- Fix chat validation error when plugin is installed in certain Geyser/offline-mode setups
- Update packetevents dependency
- Fix compatibility with GrimAC
- Update packetevents dependency
- Support 1.21.4
- Fix packet decoding error and kick caused by potions in inventory or in a container
- Update packetevents dependency
- Support 1.21.2 and 1.21.3
- Update packetevents dependency
- Make "version not found" joke in the changelog
- Support 1.21.1
- Fix "Unknown player of Offset lookup" errors related to logging in from another location
- Fix "Unknown player for Offset lookup" errors printed occasionally when players disconnect
- Fix Random offsets occasionally resetting when changing worlds or dying even when the option is disabled
- Update packetevents dependency
- Fix NBT errors causing world to sometimes not load when joining
- Support 1.21
- Fix movement near bamboo and dripstone when an offset is applied
- NOTE**: Servers migrating from v3 should add the [
fixCollision](https://github.com/joshuaprince/CoordinateOffset/commit/226586c8412c142bc1b6c0a254013533526fc4f7#diff-58cdd3d308ccba6c594e040ff9c065bb11eeb6e30f35ba87694ea45d5ae6096c) section to their CoordinateOffset config.yml. However, this fix is enabled by default even if these lines are omitted. - Remove separate PacketEvents dependency
- PacketEvents is now shaded into CoordinateOffset, so it is not necessary to install as a separate plugin.
- Several fixes to 1.20.6 bugs present in PacketEvents v2.3.0
- Fix players being kicked while near a horse or wolf that is wearing armor ([packetevents#827](https://github.com/retrooper/packetevents/pull/827))
- Fix players respawning instantly after dying ([packetevents#816](https://github.com/retrooper/packetevents/issues/816))
- Fix treasure maps with icons kicking players ([packetevents#811](https://github.com/retrooper/packetevents/issues/810))
- Fix banners with patterns kicking players ([packetevents#772](https://github.com/retrooper/packetevents/issues/772))
- Fix decorated pots in an inventory kicking players ([packetevents#768](https://github.com/retrooper/packetevents/issues/768))
- Support 1.20.6 (**requires PacketEvents [dev build](https://ci.codemc.io/job/retrooper/job/packetevents/) #397+ or release 2.2.2+**)
- Improve exception handling and debuggability
- Drop CommandAPI dependency; rewrite commands in standard Bukkit API
- Fixes for lodestone compasses
- Fix Creative players seeing lodestone compasses pointing the wrong direction
- Fix lodestone compasses on the ground or in other players' hands pointing the wrong direction