
Secure Plots
Territory protection mod with menus, roles, upgrades, rank-based permissions, ambient effects, and a fully configurable visual border system.
About this Mod
🛡 Secure Plots
Minecraft 1.21.1 — Fabric
Territory protection mod with menus, roles, upgrades, rank-based permissions, ambient effects, and a fully configurable visual border system.
Requirements
- Minecraft 1.21.1
- Fabric Loader ≥ 0.15.0
- Fabric API
- Java 21+
Installation
- Drop the
.jarinto yourmods/folder on both server and client. - Start the server once to generate config files in
config/. - Edit
secure_plots.json(server behaviour) andsecure_plots_client.json(visual settings).
How it works
Place a Plot Block to claim that area. The block's tier determines how large the protected zone is. Right-click the block or use the Plot Blueprint item to open the management menu.
Plot tiers (all configurable)
| Tier | Name | Default radius |
|---|---|---|
| 0 | Bronze | 15 × 15 |
| 1 | Gold | 30 × 30 |
| 2 | Emerald | 50 × 50 |
| 3 | Diamond | 75 × 75 |
| 4 | Netherite | 100 × 100 |
Commands
All commands are available as /sp or /secureplots.
Player commands
| Command | Description |
|---|---|
/sp help |
Show all commands |
/sp list |
List your plots |
/sp info [plot] |
Show info for the plot you're in, or a named/numbered plot |
/sp view |
Show the border of your nearest plot |
/sp rename <name> |
Rename the plot you're standing in |
/sp add <player> <plot|all> |
Add a member to one or all of your plots |
/sp remove <player> <plot|all> |
Remove a member from one or all of your plots |
/sp role <player> <member|admin> |
Change a member's role in the plot you're standing in |
/sp tp [plot] |
Teleport to a plot by name or number |
/sp upgrade |
Upgrade the plot you're standing in (consumes materials) |
/sp myrank |
Show your current rank perks |
/sp flag |
List available global flags |
/sp flag <flag> <true|false> [plot] |
Set a global flag |
/sp perm |
List available individual permissions |
/sp perm <player> <perm> <true|false> [plot] |
Set a permission for a member |
/sp fly [true|false] [plot] |
Toggle fly for the plot you're standing in |
/sp group |
List permission groups of the current plot |
/sp group create <name> |
Create a permission group |
/sp group delete <name> |
Delete a permission group |
/sp group addmember <group> <player> |
Add a member to a group |
/sp group removemember <group> <player> |
Remove a member from a group |
/sp group setperm <group> <perm> <true|false> |
Set a permission for a group |
/sp plot particle <type|clear> |
Set ambient particles on plot entry |
/sp plot weather <clear|rain|thunder|none> |
Override weather inside the plot |
/sp plot time <day|noon|sunset|night|midnight|sunrise|<ticks>|reset> |
Override time inside the plot |
/sp plot music <sound_id|clear> |
Play music on plot entry |
/sp plot enter <message|clear> |
Set the entry title message |
/sp plot exit <message|clear> |
Set the exit title message |
Plot argument: most commands that accept
[plot]accept a plot name, its number from/sp list, orall.
Admin commands
All /sp admin commands require OP level ≥ adminOpLevel (default: 2).
| Command | Description |
|---|---|
/sp admin listall [page] |
List every plot on the server, paginated (10 per page) |
/sp admin search <player> [page] |
List all plots owned by a specific player |
/sp admin nearby [count] [x y z] |
Show the N nearest plots to your position or given coordinates |
/sp admin list <player> |
Quick list of a player's plots |
/sp admin info <player> <plot> |
Show full info for another player's plot |
/sp admin tp <player> <plot> |
Teleport to another player's plot |
/sp admin delete <player> <plot|all> |
Delete one or all plots of a player |
/sp admin rename <player> <plot> <name> |
Rename another player's plot |
/sp admin setowner <newowner> |
Transfer ownership of the plot you're standing in |
/sp admin upgrade <player> <plot> |
Force-upgrade a plot (no materials consumed) |
/sp admin rank <player> <plot> <true|false> |
Toggle rank protection (immune to inactivity expiry) |
/sp admin particle <player> <plot> <type> |
Set particles on any plot |
/sp admin music <player> <plot> <sound> |
Set music on any plot |
/sp admin weather <player> <plot> <type> |
Set weather on any plot |
/sp admin time <player> <plot> <value> |
Set time on any plot |
/sp admin enter <player> <plot> <message> |
Set entry message on any plot |
/sp admin exit <player> <plot> <message> |
Set exit message on any plot |
/sp admin setrank <player> <tag> |
Add a rank tag to a player (shortcut for /tag <player> add <tag>) |
/sp admin removerank <player> <tag> |
Remove a rank tag from a player |
/sp admin reload |
Reload both config files and re-sync all clients (no restart needed) |
Roles & permissions
Roles
| Role | Description |
|---|---|
OWNER |
Full control — can break the block, upgrade, rename |
ADMIN |
Can manage members, permissions, and flags |
MEMBER |
Default trusted player |
VISITOR |
Anyone not explicitly added |
Global flags (/sp flag)
Global flags affect everyone inside the plot, including visitors.
| Flag | Default | Description |
|---|---|---|
ALLOW_VISITOR_BUILD |
off | Anyone can place and break blocks |
ALLOW_VISITOR_INTERACT |
off | Anyone can use doors, levers, buttons |
ALLOW_VISITOR_CONTAINERS |
off | Anyone can open chests |
ALLOW_PVP |
off | PvP enabled for all players |
ALLOW_FLY |
off | Everyone can fly |
ALLOW_TP |
on | Anyone can /sp tp to this plot |
GREETINGS |
on | Show enter/exit title messages |
Individual permissions (/sp perm)
Assignable per member or per permission group.
Construction: BUILD BREAK PLACE
Interaction: INTERACT CONTAINERS USE_BEDS USE_CRAFTING USE_ENCHANTING USE_ANVIL USE_FURNACE USE_BREWING
Entities: ATTACK_MOBS ATTACK_ANIMALS PVP RIDE_ENTITIES INTERACT_MOBS LEASH_MOBS SHEAR_MOBS MILK_MOBS
Nature: CROP_TRAMPLING PICKUP_ITEMS DROP_ITEMS BREAK_CROPS PLANT_SEEDS USE_BONEMEAL BREAK_DECOR
Explosives: DETONATE_TNT GRIEFING
Misc: TP FLY ENTER CHAT COMMAND_USE
Management: MANAGE_MEMBERS MANAGE_PERMS MANAGE_FLAGS MANAGE_GROUPS
Rank-based permissions
Ranks let you give different players different plot feature limits — without touching individual permissions per player. Ranks use vanilla command tags, assigned with /tag <player> add <tag>.
How it works
- Define ranks in
secure_plots.jsonunderrankPerks. - Assign tags to players with
/tag <player> add <tag>or the shortcut/sp admin setrank <player> <tag>. - Players with no rank tag use the global defaults.
- If a player has multiple rank tags, the most permissive value of each field wins.
- The
adminTagalways bypasses all rank restrictions.
Rank fields
| Field | Default | Description |
|---|---|---|
tag |
— | The command tag to match |
maxPlots |
0 |
Max plots this rank can own (0 = use global maxPlotsPerPlayer) |
maxTier |
4 |
Highest plot tier (0–4) this rank can place |
canRename |
true |
Can rename their plot |
canSetMusic |
true |
Can set plot music |
canSetParticles |
true |
Can set plot particles |
canSetWeather |
true |
Can set a weather override |
canSetTime |
true |
Can set a time override |
canSetEnterExit |
true |
Can set enter/exit messages |
canTp |
true |
Can use /sp tp to their own plot |
canFly |
true |
Can enable fly on their plot |
canUpgrade |
true |
Can upgrade their plot tier |
canGroups |
true |
Can create permission groups |
hasRankProtection |
false |
Plot is immune to inactivity expiry |
Example rank config
"rankPerks": [
{
"tag": "basic",
"maxPlots": 1,
"maxTier": 0,
"canSetMusic": false,
"canSetParticles": false,
"canSetWeather": false,
"canSetTime": false,
"canFly": false,
"canUpgrade": false,
"canGroups": false
},
{
"tag": "vip",
"maxPlots": 5,
"maxTier": 3,
"canSetMusic": true,
"canSetParticles": true,
"canFly": true,
"canUpgrade": true
},
{
"tag": "mvp",
"maxPlots": 10,
"maxTier": 4,
"hasRankProtection": true
}
]
Server config — secure_plots.json
Feature toggles
| Field | Default | Description |
|---|---|---|
enableProtection |
true |
Master switch for all block/interact protection |
enableFlyInPlots |
true |
Allow fly grants via the FLY permission |
enableEnterHud |
true |
Show plot name in action bar on entry |
enableGreetingMessages |
true |
Show enter/exit title messages |
enablePlotParticles |
true |
Ambient particles on plot entry |
enablePlotMusic |
true |
Music playback on plot entry |
enablePlotWeather |
true |
Per-plot weather override |
enablePlotTime |
true |
Per-plot time override |
enablePlotTeleport |
true |
Allow /sp tp |
enableHologram |
true |
Floating info display above plot blocks |
enablePvpControl |
true |
Block PvP in plots without ALLOW_PVP flag |
enableUpgrades |
true |
Allow tier upgrades |
enablePermissionGroups |
true |
Allow creating permission groups |
plotBlocksUnbreakable |
true |
Non-owners cannot break plot blocks |
allowNestedPlots |
false |
Allow placing plots inside other plots |
General
| Field | Default | Description |
|---|---|---|
maxPlotsPerPlayer |
3 |
Default max plots per player (0 = unlimited; overridden by rankPerks) |
plotBuffer |
15 |
Minimum block gap between plots |
adminOpLevel |
2 |
OP level required for /sp admin commands (0–4) |
adminTag |
"plot_admin" |
Command tag granting full admin override |
blockedStructurePrefixes |
["legendarymonuments:"] |
Structure ID prefixes that block plot placement |
Ambient settings
| Field | Default | Description |
|---|---|---|
particleCount |
3 |
Burst particle count on plot entry (1–5) |
ambientParticleCount |
2 |
Continuous particles per interval (1–5) |
ambientInterval |
20 |
Ticks between ambient particle spawns |
checkInterval |
10 |
Ticks between enter/exit detection checks |
musicVolume |
4.0 |
Music volume (0.1–4.0) |
Inactivity expiry
"inactivityExpiry": {
"enabled": false,
"baseDays": 45,
"daysPerTier": 5
}
When enabled, a plot expires if the owner hasn't logged in for baseDays + (tier × daysPerTier) days. Plots with hasRankProtection are immune.
Tier configuration
"tiers": [
{ "tier": 0, "displayName": "Bronze", "radius": 15, "luminance": 4, "hardness": 50, "blastResistance": 1200 },
{ "tier": 1, "displayName": "Gold", "radius": 30, "luminance": 5, "hardness": 50, "blastResistance": 1200 },
{ "tier": 2, "displayName": "Emerald", "radius": 50, "luminance": 6, "hardness": 50, "blastResistance": 1200 },
{ "tier": 3, "displayName": "Diamond", "radius": 75, "luminance": 7, "hardness": 50, "blastResistance": 1200 },
{ "tier": 4, "displayName": "Netherite", "radius": 100, "luminance": 8, "hardness": 50, "blastResistance": 1200 }
]
Upgrade costs
Each upgrade can require any number of items from any mod.
"upgradeCosts": [
{ "fromTier": 0, "toTier": 1, "items": [{ "itemId": "minecraft:gold_block", "amount": 15 }] },
{ "fromTier": 1, "toTier": 2, "items": [{ "itemId": "minecraft:emerald_block", "amount": 10 }] },
{ "fromTier": 2, "toTier": 3, "items": [{ "itemId": "minecraft:diamond", "amount": 64 }] },
{ "fromTier": 3, "toTier": 4, "items": [{ "itemId": "minecraft:netherite_block", "amount": 1 }] }
]
Default role permissions
Permissions automatically granted when a member is added by role.
"roleDefaults": {
"admin": ["BUILD", "INTERACT", "CONTAINERS", "PVP", "MANAGE_MEMBERS", "MANAGE_PERMS", "TP", "ENTER"],
"member": ["BUILD", "INTERACT", "CONTAINERS", "TP", "ENTER"],
"visitor": ["INTERACT", "ENTER"]
}
Default flags for new plots
"defaultFlags": ["ALLOW_TP", "GREETINGS"]
Crafting recipes
Recipes for plot blocks and the blueprint item. Each can be disabled individually ("disabled": true) so the item is only obtainable in creative mode or via /sp admin.
"craftingRecipes": [
{
"result": "secure-plots:bronze_plot_block",
"pattern": ["CBC", "BHB", "CBC"],
"key": {
"C": "minecraft:copper_block",
"B": "minecraft:redstone_block",
"H": "minecraft:heart_of_the_sea"
}
},
{
"result": "secure-plots:plot_blueprint",
"pattern": ["SPS", "PCP", "SPS"],
"key": {
"S": "minecraft:amethyst_shard",
"P": "minecraft:paper",
"C": "minecraft:compass"
}
}
]
Client visual config — secure_plots_client.json
This file lives on the server and is automatically synced to every client on join. Edit it server-side — changes propagate instantly on the next /sp admin reload.
Plot border — thickness
| Field | Default | Description |
|---|---|---|
edgeThickness |
0.06 |
Core edge line width |
glowThickness |
0.13 |
Outer glow halo width |
scanlineThickness |
0.025 |
Vertical scanline width |
scanlineSpacing |
1.5 |
Blocks between scanlines |
borderHeight |
25.0 |
Height of the border wall in blocks |
Plot border — animation
| Field | Default | Description |
|---|---|---|
pulseCycleMs |
2000 |
Duration of one brightness pulse cycle (ms) |
pulseMin |
0.6 |
Minimum brightness (0.0–1.0) |
pulseRange |
0.4 |
Brightness variation range (pulseMin + pulseRange ≤ 1.0) |
boltFlickerMs |
120 |
How often corner lightning bolts regenerate (ms) |
Plot border — tier colors
Each tier has 9 color channels (values 0.0–1.0):
"tierColors": [
{
"tier": 0,
"coreR": 1.0, "coreG": 0.55, "coreB": 0.05,
"glowR": 0.7, "glowG": 0.28, "glowB": 0.0,
"whiteR": 1.0, "whiteG": 0.88, "whiteB": 0.55
}
]
| Channel group | Effect |
|---|---|
coreR/G/B |
Main edge color |
glowR/G/B |
Outer halo color |
whiteR/G/B |
Inner bright core |
Hologram
The floating info panel displayed above plot blocks.
| Field | Default | Description |
|---|---|---|
hologramEnabled |
true |
Show/hide the hologram |
hologramHeight |
3.0 |
Blocks above the plot block |
hologramMaxDistance |
24.0 |
Max render distance in blocks |
hologramScale |
0.025 |
Text scale |
hologramBackgroundOpacity |
0.75 |
Panel background opacity (0.0–1.0) |
hologramPaddingX |
8 |
Horizontal padding in font pixels |
hologramPaddingY |
6 |
Vertical padding in font pixels |
hologramLineSpacing |
1 |
Extra pixels between lines |
hologramFadeInMs |
400 |
Fade-in duration (ms) |
hologramFadeOutMs |
600 |
Fade-out duration before expiry (ms) |
hologramFloat |
true |
Enable floating up/down animation |
hologramFloatAmplitude |
0.1 |
Float range in blocks |
hologramFloatCycleMs |
3000 |
Duration of one float cycle (ms) |
Hologram text labels (all customizable)
| Field | Default |
|---|---|
hologramDefaultName |
"PROTECTED PLOT" |
hologramLabelOwner |
"Owner: " |
hologramLabelTier |
"Tier: " |
hologramLabelSize |
"Size: " |
hologramLabelMembers |
"Members: " |
hologramLabelNext |
"Next: " |
hologramLabelMaxLevel |
"§6§l★ Max Level ★" |
Plot management screen
| Field | Default | Description |
|---|---|---|
screenPanelWidth |
320 |
Panel width in pixels |
screenPanelHeight |
240 |
Panel height in pixels |
screenRowSpacing |
16 |
Pixels between info rows |
screenMaxNameLength |
32 |
Maximum plot name length |
Screen panel colors (ARGB hex)
| Field | Default |
|---|---|
screenColorBorderOuter |
0xFF373737 |
screenColorBackground |
0xFFC6C6C6 |
screenColorTitleBar |
0xFF555555 |
screenColorTitleBarTop |
0xFF666666 |
screenColorShadowDark |
0xFF8B8B8B |
screenColorShadowLight |
0xFFFFFFFF |
Localisation
Two languages are bundled: en_us (English) and es_es (Rioplatense Spanish). All 260+ translation keys cover commands, UI, tooltips, HUD messages, permission names, and every player-facing string.
To add another language, create assets/secure-plots/lang/<locale>.json in a resource pack using the existing files as a template.
Server admin quick reference
| Task | Command |
|---|---|
| Grant admin override | /tag <player> add plot_admin |
| Assign a rank | /sp admin setrank <player> <tag> or /tag <player> add <tag> |
| Remove a rank | /sp admin removerank <player> <tag> |
| See all server plots | /sp admin listall |
| Find plots by player | /sp admin search <player> |
| Find nearby plots | /sp admin nearby 10 or /sp admin nearby 10 100 64 -200 |
| Delete a player's plots | /sp admin delete <player> all |
| Transfer plot ownership | Stand in the plot, /sp admin setowner <newowner> |
| Reload config in-game | /sp admin reload |
| Give Creative plot block | Stand in plot menu → Creative tab (OPs only) |
Support
If Secure Plots is useful for your server, consider supporting development:
| Method | Link |
|---|---|
| ☕ Ko-fi | ko-fi.com/zhilius |
| 💙 Mercado Pago | link.mercadopago.com.ar/zhilius |
| 🅿️ PayPal | paypal.com/ncp/payment/TWGPKWLKEJNCG |
License
GPL-3.0 — Copyright (C) 2025 TupacGodoy
Available Versions
How to Install Secure Plots on Your Server
Order Server
Order a Minecraft Java server with at least 3 GB RAM (4 GB recommended).
Set fabric Loader
In the panel under "Egg", select the fabric loader and matching Minecraft version (1.21.11).
Install Mod
Open the mod browser in the dashboard and search for "Secure Plots". Click "Install" – done! Alternatively, upload the .jar via SFTP to the /mods folder.
Compatibility
Mod Loaders
Minecraft Versions
1.21.11, 1.21.10, 1.21.9 (+8 more)
Server-side
✓ RequiredRecommended RAM
4 GB(min. 3 GB)Frequently Asked Questions
Secure Plots server crashes on startup – what to do?
Most common cause: wrong fabric version or insufficient RAM. Check the server log (latest.log) for "OutOfMemoryError" or "Mixin" errors. With Mado Hosting: ensure at least 3 GB RAM is allocated and the loader matches the mod version (1.21.11). You can switch loaders with one click in the panel.
Is Secure Plots compatible with fabric?
Secure Plots officially supports fabric for Minecraft 1.21.11, 1.21.10, 1.21.9. The Mado dashboard automatically detects incompatible loader combinations.
Server lagging with Secure Plots – how to optimize performance?
Recommended RAM: 4 GB (per 8 players). Use /spark profiler to check if Secure Plots consumes the most tick time. Common fixes: reduce server view-distance to 8-10, install "performant" or "starlight" as supplementary mods on Forge. With Mado Hosting, your server runs on NVMe SSDs with dedicated CPU cores for minimal latency.
Similar Mods
Rent Modded Server
Install Secure Plots with just one click on your server.