Remove Fog Plugin

Remove Fog Plugin

Remove the pesky server side fog for clearer terrain views without using client mod or resource pack while keeping control of your server's real view distance.

8 downloads 0 followers

Remove Fog Plugin

Clearer terrain views while keeping control of your server's real view distance.

RemoveFog is a server plugin rewritten as a hard fork of ClearFog. It adjusts the terrain fog distance advertised to players, with a server default, world settings, and individual player preferences. Players do not need to install a client mod or use resource pack just to remove server side fog.

Sliding comparison without RemoveFog and with RemoveFog

GIF Animation of comparison using or not using the plugin. Server view-distance is 5, client render distance is 16.

Why use RemoveFog?

Servers often keep their real view distance modest to manage the amount of terrain they send to players. Nearby terrain can then fade into fog, making landscapes, coastlines, and large builds feel more enclosed. RemoveFog lets you move that terrain fog farther away while keeping your chosen chunk-loading and simulation settings.

It is useful when you want:

  • A clearer view of terrain already available to the client.
  • A consistent fog setting for everyone, with optional exceptions for particular worlds.
  • Player-controlled fog preferences without giving players server administration permissions.
  • A visual change without increasing the server's actual view distance just to change the fog.

RemoveFog is optional. Use it when this visual change suits your server. It does not create or reveal terrain the server has never sent, extend the client's own rendering limit, or directly remove environmental effects such as lava fog, blindness, or darkness. Client mods and shaders may also change the result.

RemoveFog does not automatically reduce server resource use or guarantee higher FPS/TPS. Its benefit is separating the advertised terrain fog distance from your actual server distance settings. Increasing real server view distance loads/sends more terrain; increasing a RemoveFog value does not instruct the server to do that.

Requirements and compatibility

Requirement Details
Server software Spigot, Paper, Leaf, or Folia
Minecraft releases 1.20–1.20.6; 1.21–1.21.11; 26.1, 26.1.1, 26.1.2, 26.2, 26.3
Required dependency PacketEvents 2.14.0, installed as a separate plugin
Java Use the Java runtime required by your chosen server build.
Client installation None required for the plugin's standard packet-based behavior

Installation

  1. Stop your server.
  2. Put the PacketEvents Spigot/Paper JAR and RemoveFog-x.x.x.jar in your server's plugins/ folder.
  3. Remove the old ClearFog JAR if installed. Avoid running multiple plugins that change the same advertised distance.
  4. Start the server normally. RemoveFog creates plugins/RemoveFog/config.yml and plugins/RemoveFog/messages.yml.
  5. Join and check the result. By default, the global advertised distance is 32 chunks, and world/individual overrides are disabled.

Restart the server after installing or replacing either plugin JAR. /fog reload reloads RemoveFog settings and messages; it is not a plugin installer or hot-reload command.

If migrating from ClearFog, read Migration from ClearFog before the first start.

Quick setup

The default configuration already enables the global adjustment. To change the default and apply future changes to connected players immediately, run these commands as an operator or from console:

/fog directupdates enable
/fog default set 48

Wait for the success reply after each settings command. Changes are saved automatically; no extra save or reload command is needed.

To give one world its own setting:

/fog world enable
/worldfog set 40 world

To let players use their own preferences, an administrator enables the feature:

/fog individual enable

Then grant players removefog.individual.values through your permissions plugin. Each player can use:

/myfog set 48
/myfog get
/myfog unset

unset removes that player's preference so the applicable world/default setting takes over. It does not disable RemoveFog for that player.

How settings are chosen

RemoveFog uses the first matching enabled setting:

  1. An individual override for the player's UUID.
  2. A world override, checking the server's world name first and its namespaced world key second.
  3. The global default.
  4. The original server-advertised distance if none of the above applies.

For example, with default 32, a world override of 40, and a player override of 48, that player receives 48. Removing their override falls back to 40 in that world. Disabling world overrides then falls back to 32.

Each feature's enabled flag controls whether its stored settings take effect. You can prepare overrides while the feature is disabled; enabling it later activates them. Disabling a feature preserves its stored values. A get command shows the stored value for that scope, not a calculation of the player's final effective distance.

When do changes appear?

Immediate updates What happens
Disabled — the default Settings are saved, then used when the server next advertises distance, on a later join, or on a world change. An already connected player may not see a change immediately.
Enabled Changes queue updates for affected tracked players. Enabling the option also reconciles connected players with the current settings. Unchanged distances are skipped.

Use /fog directupdates enable for convenient live adjustments. Updates are deferred when a tracked connection is temporarily outside the play protocol state. A client may show a visual transition when its advertised distance changes.

To fall back to the server's own distance everywhere, disable all three adjustment scopes:

/fog individual disable
/fog world disable
/fog default disable

With immediate updates enabled, affected connected players are updated. With it disabled, the ordinary update rules above apply. Disabling only the default does not disable higher-priority world or individual overrides.

Commands

<argument> is required; [argument] is optional. Do not type the brackets. Enter commands without the leading / in server console or RCON. Command blocks and other sender types are not supported.

Distances are whole numbers in chunks, from 1 to limits.max-distance (64 by default). This is an advertised distance, not a request to load that many chunks. For set, the distance comes before the target.

Command names and aliases

Name Equivalent
/removefog ... Full root command
/fog ... Short root command
/worldfog ... /fog world ...
/myfog ... /fog individual ...

If another plugin owns /fog, try /removefog.

General administration

Command What it does Permission
/fog Show usage help No additional permission check for help
/fog reload Reload config.yml and messages.yml removefog.reload
/fog diagnostics Show connection, refresh, settings, and admission counters removefog.diagnostics
/fog directupdates status Show whether immediate updates are enabled removefog.directupdates
/fog directupdates enable Enable immediate updates removefog.directupdates
/fog directupdates disable Disable immediate updates removefog.directupdates

Global default

Command What it does Permission
/fog default status Show whether the global default is enabled removefog.default.status
/fog default enable Enable the global default removefog.default.status
/fog default disable Disable the global default removefog.default.status
/fog default get Show its stored advertised distance removefog.default.values
/fog default set <distance> Save its advertised distance removefog.default.values

There is no default unset or default list command.

World overrides

The following commands also work with /worldfog in place of /fog world.

Command What it does Permission
/fog world status Show whether world overrides are enabled removefog.world.status
/fog world enable Enable world overrides globally removefog.world.status
/fog world disable Disable world overrides globally removefog.world.status
/fog world get [world] Show the named world's stored override removefog.world.values
/fog world set <distance> [world] Create or replace a world override removefog.world.values
/fog world unset [world] Remove a world override removefog.world.values
/fog world list [page] List stored overrides; page defaults to 1 removefog.world.list

Players may omit [world] to target their current world. Console/RCON must supply it for get, set, and unset. Match the server's world name/key exactly; world targets are case-sensitive. You can configure an unloaded world in advance. Literal periods in names are supported. For names containing spaces, use the YAML configuration instead of a command target.

Example: /worldfog set 48 world_nether. Use the actual world name from your server.

Individual preferences

The following commands also work with /myfog in place of /fog individual.

Command What it does Permission
/fog individual status Show whether individual overrides are enabled removefog.individual.status
/fog individual enable Enable individual overrides for the server removefog.individual.status
/fog individual disable Disable individual overrides for the server removefog.individual.status
/fog individual get [player] Show a stored player preference removefog.individual.values
/fog individual set <distance> [player] Create or replace a player preference removefog.individual.values
/fog individual unset [player] Remove a player preference removefog.individual.values
/fog individual list [page] List stored UUID overrides; page defaults to 1 removefog.individual.list

Players may omit [player] to target themselves. To target another UUID, they additionally need removefog.individual.values.others. Console/RCON must supply a target and needs the same applicable permissions.

Targets accept a tracked online player's name or a complete UUID. Offline targets require the full UUID; RemoveFog does not fetch player profiles from the network. Lists show UUIDs, including saved offline preferences.

Examples:

/myfog set 48
/fog individual set 40 Alex
/fog individual get e14ea732-c8df-4d18-a361-6844e42dd917
/fog individual list 2

/myfog enable and /myfog disable control the server-wide individual feature. They are not personal on/off switches. Ordinary players should receive the values permission, without the status permission.

Permissions

All declared permissions default to operators. Non-operator players need explicit grants through your permissions plugin. Permission grants and feature enablement are separate: giving a player the values permission does not turn on individual overrides.

Permission Access granted
removefog.reload Reload settings and messages
removefog.diagnostics View diagnostics
removefog.directupdates Read and change immediate updates
removefog.default.status Read, enable, and disable the global default
removefog.default.values Read and change the global default distance
removefog.world.status Read, enable, and disable world overrides globally
removefog.world.values Read, set, and remove overrides for any world
removefog.world.list List world overrides
removefog.individual.status Read, enable, and disable individual overrides globally
removefog.individual.values Read, set, and remove one's own preference
removefog.individual.values.others Also manage other UUIDs; includes removefog.individual.values
removefog.individual.list List all stored individual overrides

Permission bundles

Bundle Included permissions
removefog.* All permissions above
removefog.default.* Default status and values
removefog.world.* World status, values, and list
removefog.individual.* Individual status, values, others, and list

For a server administrator, grant removefog.*. For ordinary players who should only change their own distance, grant only removefog.individual.values and have an administrator run /fog individual enable once.

The individual wildcard includes control over other players and the global feature toggle. The world values permission applies to every world, even when the player omits the target. There are no separate read-only, per-world, per-rank distance, or personal enable/disable permissions in this release.

Configuration

Settings live in plugins/RemoveFog/config.yml. This is the shipped default:

config-version: 1
direct-view-distance-updates: false
default:
  enabled: true
  view-distance: 32
individual:
  enabled: false
  players: {}
world:
  enabled: false
  worlds: {}
limits:
  max-distance: 64
  max-overrides: 10000
  tracked-players: 1024
  pending-commands: 32
  pending-per-player: 1
  packet-warning-seconds: 60
  list-page-size: 10
  tab-completions: 80
  config-file-bytes: 1048576
  shutdown-seconds: 3

For example, replace the corresponding sections with these to enable world and individual overrides:

world:
  enabled: true
  worlds:
    world: 40
    world_nether: 48
    'world.with.dots': 32
individual:
  enabled: true
  players:
    'e14ea732-c8df-4d18-a361-6844e42dd917': 48

Use your own world names and player UUIDs. Replace existing sections instead of appending duplicate world: or individual: keys. World overrides can also use the actual namespaced world key reported by your server.

After a manual edit, run /fog reload and wait for success. Invalid settings keep the previous working configuration active; correct the file and reload again. Settings created through commands save automatically. Avoid editing the file while submitting settings commands, because a command saves the loaded configuration snapshot.

Resource limits

Most owners can leave these at their defaults.

Key under limits Default Meaning
max-distance 64 Maximum accepted advertised distance; configurable from 1 to 256
max-overrides 10000 Combined stored world and individual override limit
tracked-players 1024 Maximum tracked concurrent connections; additional connections retain their real server distance
pending-commands 32 Shared budget for outstanding settings requests and replies
pending-per-player 1 Outstanding settings request/reply limit per player
packet-warning-seconds 60 Minimum interval between recurring packet-error warnings
list-page-size 10 Override entries displayed per page
tab-completions 80 Maximum suggestions returned
config-file-bytes 1048576 Per-file configuration/message size limit in bytes
shutdown-seconds 3 Maximum configured wait for settings work to drain during shutdown

Changes to tracked-players, pending-commands, or pending-per-player require a server restart. Reload rejects changes to those capacities. Lowering max-distance below a stored distance rejects the configuration, even if that override's feature is disabled.

Messages

Customize plugins/RemoveFog/messages.yml to change command replies, help, and the prefix. Messages support MiniMessage formatting, such as <green>Saved.</green>. Keep dynamic placeholders such as <target>, <value>, and <reason> in templates that need them. Player-provided values are inserted as plain text.

Reload with /fog reload. Missing message keys fall back to the bundled defaults; invalid message values reject the reload.

Troubleshooting

Problem What to check
RemoveFog does not enable Read startup errors. Confirm PacketEvents is installed/enabled, the server version is accepted, and the configuration is valid.
A command succeeds but the view stays the same Enable immediate updates, check whether the relevant scope is enabled, and check for a higher-priority override. Client rendering settings, shaders, and the amount of terrain already sent also affect the view.
/myfog set works but has no effect An administrator must enable individual overrides. Their default state is disabled.
A player cannot use /myfog set Grant removefog.individual.values; permissions default to operators.
Unsetting a preference does not restore the original fog The world/default setting may now apply. Check the precedence rules.
An offline player name is rejected Supply the complete UUID, or use the name while that player is online and tracked.
A world command fails for a name with spaces Configure that world in YAML, then reload.
A busy response appears Wait for the previous success/failure reply and retry. The per-player or shared outstanding-request limit may be reached.
Reload rejects a capacity change Restore the old admission/session limits for a live reload, or stop the server, edit the file, and start normally.
Fog returns or behaves inconsistently Check for another plugin changing view-distance packets and for client-side fog overrides. Avoid running ClearFog alongside RemoveFog.
/fog opens another plugin's command Use /removefog.

Reading diagnostics

Run /fog diagnostics as an administrator. It reports:

  • Tracked: current connection sessions.
  • Refreshes / sent: queued refresh attempts and refresh packets sent locally.
  • Duplicates / deferred: unchanged refreshes skipped and refresh attempts delayed outside play state.
  • Failures: caught packet-handling failures since startup.
  • Queued / running: settings worker activity.
  • Writes / no-ops: successful file replacements and unchanged edits that avoided a write.
  • Pending / rejected: outstanding replies and admission rejections; settings submission rejections are reported separately.

Counters are cumulative and may change while you read them. A deferred/duplicate count alone is not an error, and a local send count does not prove remote receipt. If packet failures increase, retain the accompanying server log and check the PacketEvents/server combination.

When reporting an issue, include your exact Minecraft/server build, Java version, RemoveFog and PacketEvents versions, the command or event that triggered it, diagnostics, and relevant startup/error logs. Include a sanitized configuration when it helps explain override behavior.

Performance and operation

RemoveFog does not run an every-tick fog task or increase chunk tracking. Configuration writes run off the player/server tick path, pending work is bounded, and unchanged edits avoid writes. Immediate updates skip unchanged distances. Large override lists are indexed before command execution.

Actual changed settings still rewrite the configuration file, and override index rebuilding takes worker time. Avoid treating preference commands as a high-frequency animation API. PacketEvents also has its own processing cost, especially on servers that did not already use it.

Choose real view/simulation distances for your workload and monitor your own server. RemoveFog changes terrain fog presentation; player capacity and overall performance depend on your hardware, world activity, and other plugins.

Migration from ClearFog

  1. Stop the server and back up the ClearFog data folder.
  2. Remove the ClearFog JAR, leaving plugins/ClearFog/config.yml in place if you want to import it.
  3. Install PacketEvents and RemoveFog, then start normally.
  4. If plugins/RemoveFog/config.yml does not already exist, RemoveFog copies the sibling ClearFog config into its own folder. The original file is preserved.
  5. Review startup validation. Older distances above 64 require a suitable limits.max-distance value, up to 256, or smaller configured distances before retrying startup.
  6. Replace old permission grants with the appropriate removefog.* permissions and customize the new message file.

An existing RemoveFog config is not overwritten by automatic import. ClearFog's old message layout is not imported. Old update-check settings may remain in an imported file as unused data.

Version Minecraft Loader Download

Remove Fog Plugin 1.0.0

1.0.0

1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4, 1.20.5, 1.20.6, 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2, 26.2, 26.3
bukkit, folia, paper, purpur, spigot
Download