Compatibility
Minecraft: Java Edition
Platforms
Tags
Creators
Details

Need a server?
Click the banner below and use code FLEOX for 30% off your first 2 billing cycles with Alyrix Cloud:

Alyrix Cloud
FPAntiFreeCam stops players from finding bases, caves and ores with FreeCam, X-Ray and Block ESP mods.
It works on the packets the server sends, so nothing in your world is changed. The client simply never gets the blocks it isn't supposed to see:
- On the surface, everything deep underground is hidden. A FreeCam user who flies down finds empty void, or with Smart Fill, plain rock that looks like normal terrain.
- Underground, players see the caves around them as normal, but caves further away stay filled in until they actually get there.
- Ores are sent as stone, deepslate or netherrack until the player has a clear line of sight to them. An X-Ray pack shows nothing but rock.
Requirements
- PacketEvents 2.11.0 or newer
- Spigot, Paper, Purpur or Folia, 1.19 – 26.3
- Java 17 or newer
Features
- Anti-FreeCam: hides everything below a set Y level while players are on the surface.
- Smart Fill: fills hidden areas with rock copied from the surrounding terrain instead of air, so it's hard to tell anything is hidden at all.
- Anti-Xray: ores stay hidden until you can actually see them, including from the F5 camera. Ore lists and height ranges can be set per world.
- Entity hiding: mobs and item frames inside hidden areas are hidden too (
chunkmode, default).raycastmode also hides entities behind walls everywhere, like an ESP blocker, and can include players. The tab list is untouched. - Hides more than blocks: chests, signs, spawners, mobs, item frames, particles and sounds in hidden areas are hidden too, so the F3 pie chart and ESP mods can't find a base.
- Freecam mod detection: checks on join whether the client has the Freecam mod installed, and runs the commands you choose (kick, ban, alert staff).
- Bedrock support: works with Geyser and Floodgate.
- Folia support: every check runs on the region thread that owns the area.
- Light on the network: chunk refreshes are spread over ticks, and ore reveals are sent as small block updates, never whole chunks.
- Update checker: tells admins in game and in the console when a new version is out.
Commands
| Command | Description |
|---|---|
/fpac reload |
Reload the config |
/fpac stats |
Show live plugin stats |
/fpac debug |
Toggle debug logging |
/fpac world <add|remove> <world> |
Add or remove a protected world |
/fpac bypass <player> |
Toggle bypass for a player until they leave |
/fpac help |
Show command help |
/fpreload |
Short for /fpac reload |
/fpdebug |
Short for /fpac debug |
All commands need fpantifreecam.admin.
Aliases: /fpafc, /antifreecam, /fpacreload, /fpacdebug
Permissions
| Permission | Description | Default |
|---|---|---|
fpantifreecam.admin |
All commands (no bypass included) | OP |
fpantifreecam.reload |
Reload the config | OP |
fpantifreecam.debug |
Toggle debug mode | OP |
fpantifreecam.world |
Manage protected worlds | OP |
fpantifreecam.alerts |
Get Freecam detection alerts in chat | OP |
fpantifreecam.bypass |
Skip FreeCam protection, Anti-Xray and entity hiding | No one |
fpantifreecam.bypass.freecam |
Skip FreeCam protection only | No one |
fpantifreecam.bypass.xray |
Skip Anti-Xray only | No one |
fpantifreecam.bypass.entities |
Skip line-of-sight entity hiding only | No one |
OPs are protected like everyone else. Give a bypass permission to staff or builders who need to see everything.
bypass.freecam, bypass.xray and bypass.entities override bypass when set, so bypass: true with bypass.xray: false keeps Anti-Xray on for that player.
Config
Click to expand config.yml
# ─────────────────────────────────────────────────────────────────────
# FPAntiFreeCam configuration
# Spigot, Paper and Folia (1.19 - 26.3). Apply changes with /fpac reload.
# ─────────────────────────────────────────────────────────────────────
# Do not change this manually.
config-version: 5.8
# ── General ──────────────────────────────────────────────────────────
settings:
# Check for updates on startup and tell admins on join.
update-checker: true
# File from plugins/FPAntiFreeCam/lang/<language>.yml
language: "en"
# Debug output in console. Keep false on a live server.
debug-mode: false
# Min seconds between chunk refreshes for one player.
refresh-cooldown-seconds: 3
# ── Worlds ───────────────────────────────────────────────────────────
# Worlds where underground hiding is on. The Nether and End can glitch.
# (Anti-Xray and entity hiding have their own world settings below.)
worlds:
list:
- "world"
# - "survival"
# ── Protection ───────────────────────────────────────────────────────
# Rule: void-y < deep-deactivation-y < protection-y
# Feet at or above protection-y: protection is on.
# Between deep-deactivation-y and protection-y: on only while the player
# looks up or has an open path to the surface.
# Below deep-deactivation-y: off.
protection:
# The Y where protection turns on (player's feet). Set it to about your
# surface height (sea level is 63). While on, everything at or below
# void-y is hidden from that player. Also the default ceiling-y.
# Custom map and not sure of the surface height? Set this a bit too low
# rather than too high, and turn on replacement.smart-fill.follow-terrain
# so caves in higher terrain get hidden too.
protection-y: 64.0
# Blocks below protection-y before it turns off again (stops flicker).
hysteresis-y: 2.0
# Blocks at or below this Y are hidden. ~5 above your highest base.
void-y: 15
# void-y per world. Unlisted worlds use void-y.
# per-world-void-y:
# resource_world: 20
# Below this Y, protection is always off.
deep-deactivation-y: 20.0
# Also hide chests, signs, spawners, mobs, items, particles and sounds
# in hidden areas (F3 pie chart, ESP). Keep this on.
pie-chart-protection: true
# How much real cave is shown around a player (needs Smart Fill).
smart-fill:
# Caves the player can walk or see into within this range are real.
reveal-radius: 28
# Everything this close is always real, even through rock.
near-radius: 6
# Chunks this far ahead of the view get refreshed.
look-distance: 48
# Seconds an area stays real after leaving it. 0 = instant.
# High values make it easier to scout a base and come back with freecam.
recently-revealed-ttl-seconds: 20
# Show caves as far as the player can see across them. Walls still block.
reveal-line-of-sight: true
# Cap that distance at the player's render distance.
reveal-follow-render-distance: true
# Max line-of-sight distance in blocks (32-256).
reveal-max-distance-cap: 128
# Blocks checked per player per second. Lower = less server time.
reveal-sight-budget: 60000
# ── What hidden blocks look like ─────────────────────────────────────
replacement:
# Shown instead of hidden blocks when Smart Fill is off.
block-type: "air"
# Fill hidden areas with rock and ores copied from nearby terrain
# instead of air.
smart-fill:
enabled: true
# Also hide distant caves while underground, not only near the surface.
always-on: true
# Bedrock (Geyser) shows Smart Fill refreshes as chunk reloads, so
# Bedrock players get plain hiding. Needs Geyser or Floodgate.
disable-for-bedrock: true
# Caves up to this Y get hidden. Same number as protection-y unless
# you set it, but a different job: protection-y checks the player's
# height, ceiling-y is how high the hidden caves go.
# ceiling-y: 64
# 16-block layers above and below to copy blocks from (0-4).
sample-radius-sections: 1
# Max block types in the fill (2-16).
max-palette-size: 6
# Used when there's no nearby terrain to copy.
fallback-block: "stone"
# Small closed rooms near the surface (PvP arenas, crystal holes) are
# left as they are. A small hidden room there would be too.
surface-structures:
# Roof at or above this Y.
min-y: 30
# At most this many blocks tall (1-32).
max-pocket-height: 10
# Also hide caves and bases inside hills and mountains above
# ceiling-y. Only natural blocks count as cover, so builds and trees
# aren't touched. Overworld only. Costs a bit more CPU near mountains.
follow-terrain:
enabled: false
# Natural blocks needed above a spot before it's hidden (3-32).
min-cover: 6
# ── Anti-Xray ────────────────────────────────────────────────────────
# Hidden blocks are sent as the rock around them until the player can
# actually see them. Not tied to worlds.list.
# Bypass: fpantifreecam.bypass.xray (or fpantifreecam.bypass).
# Turns itself off (and sets enabled: false) if Paper's anti-xray is on.
anti-xray:
enabled: true
# Tell admins on join when Paper's anti-xray turned this off.
# Set to false if you're keeping Paper's.
paper-anti-xray-warning: true
# Blocks this close are always shown.
always-reveal-radius: 3
# Max reveal distance (also capped by view distance).
max-ray-distance: 64
# Ray steps per player per check. Lower = less server time.
ray-budget: 20000
# Also check from the F5 camera positions.
f5-aware: true
# A revealed block is hidden again once the player is this far away.
forget-distance: 96
# "default" is for Overworlds, "nether" and "the_end" for every world of
# that type. Missing keys come from "default". To set one world on its
# own, add it by name (e.g. world_nether:).
worlds:
default:
enabled: true
min-y: -64
# 320 covers mountain ores.
max-y: 320
hidden-blocks: [coal_ore, deepslate_coal_ore, copper_ore, deepslate_copper_ore,
iron_ore, deepslate_iron_ore, gold_ore, deepslate_gold_ore, redstone_ore,
deepslate_redstone_ore, lapis_ore, deepslate_lapis_ore, diamond_ore,
deepslate_diamond_ore, emerald_ore, deepslate_emerald_ore, raw_iron_block, raw_copper_block]
nether:
min-y: 0
max-y: 128
hidden-blocks: [nether_gold_ore, nether_quartz_ore, ancient_debris, gilded_blackstone]
the_end:
enabled: false
min-y: 0
max-y: 256
hidden-blocks: [shulker_box, white_shulker_box, orange_shulker_box, magenta_shulker_box,
light_blue_shulker_box, yellow_shulker_box, lime_shulker_box, pink_shulker_box,
gray_shulker_box, light_gray_shulker_box, cyan_shulker_box, purple_shulker_box,
blue_shulker_box, brown_shulker_box, green_shulker_box, red_shulker_box, black_shulker_box]
# ── Entities ─────────────────────────────────────────────────────────
entities:
# Hide mobs, item frames, minecarts etc. in hidden areas.
hide-entities: true
# How entities are hidden:
# chunk - only in areas Smart Fill hides (caves you can't see). Light on CPU.
# raycast - also behind walls, checked by line of sight. Stops ESP, costs more CPU.
hide-mode: chunk
# Settings for hide-mode: raycast.
line-of-sight:
# Also hide players behind walls (stops player ESP). Tab list unchanged.
# Off by default: on an SMP, players expect to see each other.
# While the locator bar gamerule is on, players are never hidden,
# since the bar shows where they are anyway.
include-players: false
# Entities this close are always shown.
always-show-radius: 8
# Milliseconds an entity stays shown after going out of sight.
hide-delay-ms: 1500
# Ray steps per player per check. Lower = less server time.
ray-budget: 15000
# Also check from the F5 camera positions.
f5-aware: true
# Worlds where this is off.
disabled-worlds: []
# Entity types that are never hidden.
never-hide:
- ender_dragon
- wither
- lightning_bolt
- arrow
- spectral_arrow
- trident
- fireball
- small_fireball
- dragon_fireball
- wither_skull
- firework_rocket
- fishing_bobber
- ender_pearl
- snowball
- egg
- potion
- experience_bottle
- llama_spit
- shulker_bullet
- wind_charge
# ── Notifications ────────────────────────────────────────────────────
notifications:
action-bar:
# Action bar message while a player is protected.
enabled: false
message-active: "&c☠ FreeCam Protected"
# ── Anti-cheat ───────────────────────────────────────────────────────
anti-cheat:
freeze-detection:
# Console warning when a protected player hasn't moved for this many
# seconds (can mean a position-spoofing freecam).
enabled: false
seconds: 30
# ── Performance ──────────────────────────────────────────────────────
performance:
# Paper/Spigot: max chunks refreshed per tick (1-500).
max-chunks-per-tick: 40
# Folia: max chunks re-sent to one player per tick (1-64).
max-chunks-per-player-per-tick: 8
# Near protection-y, refresh a big radius at once so real blocks never flash.
instant-protection:
enabled: true
force-immediate-refresh: true
# Chunk radius.
instant-load-radius: 14
# Starts this many blocks above protection-y.
pre-load-distance: 10
# Only refresh chunks within this radius when protection changes.
# Chunks further out can show real blocks until they reload.
limited-area:
enabled: false
chunk-radius: 4
# ── Freecam mod detection ────────────────────────────────────────────
# On join, a hidden sign editor opens and closes for a moment to check for the Freecam mod. Once per join.
freecam-detection:
enabled: true
# Ticks to wait for the answer, plus the player's ping (20 = 1 second). At least 60.
probe-timeout-ticks: 60
# Debug info about each check in console.
debug: false
# Console commands run on detection, in order.
# Placeholders: %player%, %uuid%, %key%
detected-commands:
- "kick %player% &cFreecam detected"
# - "ban %player% Freecam detected"
# Alert staff (fpantifreecam.alerts) and the console.
alerts-enabled: true
alert-message: "&8[&cFPAntiFreecam&8] &e%player% &7was flagged for &cFreecam &7(&8%key%&7)"
Statistics
Support
Found a bug or have a question? Ask on Discord or open an issue on GitHub.
Secure what players shouldn't see.


