OreoEssentials — Server Modules

Everything in plugins/OreoEssentials/server/ — explained for beginners, step by step

Maintenance ClearLag JumpPads TempFly Warnings ModGUI Help & Rules MOTD CraftActions Shards

What Are Server Modules?

The server folder (plugins/OreoEssentials/server/) contains configuration files for eleven distinct server-management features. Each feature has its own YAML file. Together they let you control everything from lag management to custom crafting rewards.

Folder Structure

plugins/
  OreoEssentials/
    server/
      maintenance.yml     ← lock server from new players
      clearlag.yml        ← auto-remove entities & fight lag
      jumpads.yml         ← launch-pad blocks
      tempfly.yml         ← temporary flight by rank
      warnings.yml        ← player warning system
      modgui.yml          ← moderation GUI worlds filter
      help.yml            ← /help command content
      rules.yml           ← /rules command content
      motd.yml            ← join message of the day
      craft-actions.yml   ← rewards when crafting items
      shards.yml          ← cross-server world sharding

🔒

Maintenance Mode

Lock the server so only whitelisted players can join, with custom MOTD and optional countdown timer.

What Does It Do?

Maintenance mode lets you temporarily close the server to regular players while you do updates, fix bugs, or prepare an event. When enabled:

Quick Start

Enable maintenance: /maintenance on

Add yourself to the whitelist: /maintenance whitelist add Steve

Set a timer (optional): /maintenance clock set 2h

When done, disable: /maintenance off

Config File: server/maintenance.yml

maintenance:
  enabled: false               # true = maintenance ON, no one can join except whitelist

  motd:
    line1: "&c&l⚠ MAINTENANCE ⚠"       # first line of server list description
    line2: "&7Server is under maintenance" # second line

  kick-message: "&c&l⚠ MAINTENANCE ⚠\n&7Please try again later."
  join-denied-message: "&cServer is under maintenance."
  # ↑ These messages are shown when a non-whitelisted player tries to connect

  whitelist: []
  # Add player UUIDs or names here. These players CAN join during maintenance.
  # Example:  whitelist: ["Steve", "Alex"]

  timer:
    end-time: 0                  # Unix timestamp (ms) when maintenance ends (set via /maintenance clock)
    show-in-motd: true           # Show countdown timer in server list MOTD
    format: "&eTime remaining: &f{TIME}"  # {TIME} is replaced with e.g. "1h 23m 45s"

  server-list:
    show-as-full: true           # Show max players = current players (looks full → hides join)
    hide-player-count: false      # Hide the player count entirely

Commands

CommandWhat It Does
/maintenance onEnable maintenance mode — non-whitelisted players can't join
/maintenance offDisable maintenance — everyone can join again
/maintenance toggleSwitch on/off
/maintenance statusSee current state, whitelist size, timer info
/maintenance whitelist add <name>Add player to whitelist (can join during maintenance)
/maintenance whitelist remove <name>Remove from whitelist
/maintenance whitelist listView the full whitelist
/maintenance whitelist clearClear the entire whitelist
/maintenance clock set <time>Set a countdown timer (e.g. 2h30m)
/maintenance clock add <time>Add time to existing timer
/maintenance clock remove <time>Remove time from timer
/maintenance clock clearDelete the timer
/maintenance motd set line1 <text>Update MOTD line 1 live
/maintenance serverlist full <true/false>Toggle show-as-full
/maintenance reloadReload maintenance.yml

Player Examples

🧱 Steve (Admin)

Steve is installing a new update. He enables maintenance, adds himself to the whitelist, and sets a 1-hour timer so players know when to come back.

/maintenance on
/maintenance whitelist add Steve
/maintenance clock set 1h
🎀 Alex (Regular Player)

Alex tries to connect but sees: "⚠ MAINTENANCE ⚠ — Please try again later." and in the server list: "Time remaining: 59m 12s". She'll come back later.

🎩 Notch (VIP)

Notch was added to the whitelist by Steve. He connects normally and helps test the new update while maintenance is active.

👾 Herobrine (Staff)

Herobrine has oreo.maintenance.admin permission and uses /maintenance status to check how many minutes remain, without needing to be on the whitelist (staff bypass).


🧹

ClearLag (OreoLag)

Automatically remove ground items, mobs, and other entities to keep TPS healthy.

What Does It Do?

When hundreds of item stacks pile up on the ground, or thousands of mobs accumulate, your server's TPS (Ticks Per Second) drops below 20 — causing lag. OreoLag automatically cleans up:

Config File: server/clearlag.yml

enable: true                         # Master switch — false disables ALL clearlag features

global-broadcasts:
  enabled: true
  use-permission-for-broadcasts: false  # true = only players with the perm see warnings
  permission: "bukkit.broadcast"

area-filter: []                        # Entity types NEVER removed (e.g. ["ITEM"] to never clear items)

kill-mobs:                             # Manual /olagg killmobs command settings
  enabled: true
  remove-named: false                  # false = never kill mobs with custom names (e.g. named pets)
  mob-filter: []                        # Entity types to NEVER kill (whitelist): ["VILLAGER","WOLF"]

auto-kill-mobs:                        # Auto-kill mobs on a timer
  enabled: false
  interval: 600                         # Seconds between auto-kills (600 = every 10 minutes)
  broadcast-removal: true
  broadcast-message: "&6[OreoLag] &aRemoved +RemoveAmount mobs!"
  warnings:                             # Warn players before kill happens
    - "time:60 msg:&6[OreoLag] &eMobs will be killed in 60s!"
    - "time:10 msg:&6[OreoLag] &cMobs killed in 10s!"

auto-removal:                          # Auto-clear ground items and entities
  enabled: true
  autoremoval-interval: 480             # Seconds between clears (480 = every 8 minutes)
  broadcast-removal: true
  broadcast-message: "&6[OreoLag] &aRemoved +RemoveAmount entities!"
  flags:
    item: true                          # Remove ground items
    experience-orb: true               # Remove XP orbs
    falling-block: true                # Remove falling sand/gravel
    primed-tnt: true                   # Remove lit TNT
    projectile: false                  # Remove arrows etc.
    boat: false                         # Remove boats
    minecart: false                     # Remove minecarts
    itemframe: false                    # Remove item frames
  item-filter: []                       # Items NEVER removed: ["DIAMOND","NETHERITE_INGOT"]
  warnings:
    - "time:60 msg:&6[OreoLag] &eEntities cleared in 60s!"
    - "time:10 msg:&6[OreoLag] &cClearing in 10s!"

command-remove:                        # What /olagg clear removes (can be different from auto)
  enabled: true
  broadcast-removal: true
  # same flags/filter as auto-removal above

tps-meter:                             # Run commands when TPS is low
  enabled: false
  interval: 15                          # Check TPS every 15 seconds
  tps-trigger: 14.0                    # Run commands when TPS drops BELOW this
  tps-recover: 19.0                    # Run recover-commands when TPS rises ABOVE this
  broadcast-enabled: true
  commands: []                          # Console commands on low TPS (e.g. ["olagg clear"])
  recover-commands: []

Warning Format

Warnings use a special inline format: time:<seconds> msg:<message>

warnings:
  - "time:300 msg:&6[OreoLag] &eItems will be cleared in 5 minutes!"
  - "time:60  msg:&6[OreoLag] &eItems cleared in 60 seconds!"
  - "time:10  msg:&6[OreoLag] &cClearing in 10s! Pick up your items!"

Commands

CommandWhat It DoesPermission
/olagg helpShow command list—
/olagg clearManually clear entities noworeo.lag.clear
/olagg killmobsManually kill all mobs noworeo.lag.killmobs
/olagg reloadReload clearlag.ymloreo.lag.reload

Player Examples

🧱 Steve (Farmer)

Steve has 200 cows in his farm. He added "COW" to auto-kill-mobs.mob-filter so clearlag never kills them.

🎀 Alex (Builder)

Alex is mining. She added "DIAMOND" to item-filter so her diamonds are never auto-cleared.

🎩 Notch (Admin)

Notch has oreo.lag.clear. He sees TPS drop to 12 and runs /olagg clear to instantly remove thousands of items. TPS climbs back to 19.

👾 Herobrine (Player)

Herobrine hears "Items cleared in 10s!" and quickly picks up his dropped netherite gear (netherite is in item-filter, so it's safe anyway).


🚀

JumpPads

Turn any block into a launch pad that flings players into the air when they step on it.

What Does It Do?

A Jump Pad is an invisible trigger attached to any specific block coordinate. When a player walks over that block, they get launched with a configurable velocity — great for parkour, arenas, hubs, or just having fun.

How it works: Jump pads detect the block under the player's feet (one block below their position). Stand on top of the block, and you're launched.

Creating a Jump Pad

Stand on (or next to) the block you want to be the jump pad.

Run: /jumpad create <name> [power] [upward] [useLookDir]
The pad is placed at the block directly under your feet.

Test it by walking over the block — you should be launched!

To remove: /jumpad remove <name>

Config File: server/jumpads.yml

This file stores the pad data — you don't edit it manually. Use the command to create pads.

jumpads:
  launch_1:                    # pad name (lowercased)
    name: launch_1
    world: world               # Minecraft world name
    x: 100                     # Block X coordinate
    y: 64                      # Block Y coordinate
    z: 200                     # Block Z coordinate
    power: 1.2                 # Horizontal launch force (higher = farther)
    upward: 1.0                # Vertical launch force (higher = higher)
    useLookDir: true           # true = launches in the direction you're looking

Understanding Power Values

power

Horizontal speed. 1.0 is a gentle push. 2.5 is a strong fling. Use 0 for a pure vertical jump.

upward

Vertical speed. 0.5 is a small hop. 1.5 is a big leap. 2.0 sends you very high.

useLookDir

true: launched where you're looking. false: always launched straight up.

Commands

CommandWhat It Does
/jumpadShow help & list all pads
/jumpad create <name> [power] [upward] [useLookDir]Create a pad at block under you
/jumpad remove <name>Delete a pad
/jumpad listList all pads
/jumpad info <name>View location & settings of a pad

Player Examples

🧱 Steve (Hub Admin)

Steve places a gold block in the hub lobby and creates a jump pad on it:

/jumpad create lobby_launch 1.5 2.0 false

Now any player stepping on that gold block flies straight up, landing on a platform above.

🎀 Alex (Parkour Builder)

Alex creates a directional pad for her parkour course. Players must be facing the right direction to land correctly:

/jumpad create parkour_jump1 2.0 1.2 true
🎩 Notch (Player)

Notch wants to know what's at each pad. He uses:

/jumpad info lobby_launch

He sees: World: world | XYZ: 100 64 200 | Power: 1.5 | Upward: 2.0


✈️

TempFly

Grant players temporary flight based on their rank or permissions — it expires automatically.

What Does It Do?

TempFly gives players the ability to fly for a limited time. When the time runs out, flight is automatically disabled. Different ranks can get different durations. This is perfect for reward systems, donor perks, or event prizes.

Note: TempFly respects game modes — switching to Creative or Spectator cancels the timer. Reminder messages are sent at 60s, 30s, 10s, and 5s remaining.

Config File: server/tempfly.yml

use-permission-groups: true
# Check these permissions to decide how long to give
permission-groups:
  vip: 300            # "oe.tempfly.vip" → 300 seconds (5 min)
  premium: 600        # "oe.tempfly.premium" → 600 seconds (10 min)
  elite: 1800         # "oe.tempfly.elite" → 1800 seconds (30 min)

use-luckperms-groups: true
# Or use LuckPerms primary group name directly
luckperms-groups:
  default: 180        # "default" group → 180 seconds (3 min)
  vip: 300
  premium: 600

How Duration Resolution Works

Permission groups checked first (if use-permission-groups: true). Plugin checks if the player has oe.tempfly.<group>.

LuckPerms primary group checked second (if use-luckperms-groups: true). The player's main LP group name is matched.

If neither matches, no duration — player gets message: "You don't have permission to use temporary fly."

Special permission: Players with oe.tempfly.infinite have flight enabled permanently on join.

Commands

CommandWhat It Does
/tempfly or /tempfly onStart temporary flight (uses your rank's duration)
/tempfly offCancel flight early
/tempfly timeCheck how much time remains
Alias: /tflySame as /tempfly

Player Examples

🎀 Alex (VIP Rank)

Alex has the "vip" LuckPerms group. She types:

/tempfly

She gets: "Temporary fly enabled for 5m." After 5 minutes, flight is removed and she gets a warning at 60s, 30s, 10s, 5s.

🎩 Notch (Elite Rank)

Notch has the "elite" LuckPerms group — he gets 30 minutes of flight. He uses:

/tfly time

He sees: "Time remaining: 27m 45s"

🧱 Steve (Default)

Steve is in the default group (180 seconds = 3 min). He activates fly, builds quickly, then cancels early to save time:

/tempfly off

Flight cancelled. His session time is gone — he'll need to use /tempfly again to start fresh.

👾 Herobrine (Owner)

Herobrine has oe.tempfly.infinite. Every time he joins, flight is enabled automatically with no timer.


⚠️

Warnings System

Warn players for rule violations, with automatic punishment when they hit the limit.

What Does It Do?

Staff can give players formal warnings. The system tracks how many warnings each player has and automatically applies a punishment (kick, temp ban, or ban) when the limit is reached. Warnings can expire after a set time. All data is saved to warnings.yml.

Config File: server/warnings.yml

warnings:
  max-warnings: 3          # Number of warnings before punishment triggers

  max-action: tempban      # What happens at max warnings:
  #   none    = just notify, no punishment
  #   kick    = kick from server
  #   tempban = temporary ban (uses max-action-duration)
  #   ban     = permanent ban

  max-action-duration: 7d  # Duration for tempban: supports d/h/m/s (e.g. "3d12h")

  broadcast-on-warn: false # Broadcast to all staff when someone is warned
  # Requires oreo.warn.see-broadcasts permission to receive the broadcast

  expire-after: ""          # How long until warnings expire (e.g. "30d")
  # Leave blank ("") for warnings that never expire

Commands

CommandWhat It DoesPermission
/warn <player> <reason...>Add a warning to a player (online or offline)oreo.warn
/warnings [player]View your own warnings (or another player's)oreo.warnings
/unwarn <player> <warn-id|all>Remove a specific warning or all warningsoreo.unwarn
Tip: When using /unwarn, tab-complete the player name first, then tab-complete to see all their active warning IDs (short 8-char codes like a1b2c3d4). Use /unwarn Steve all to clear everything.
Viewing others' warnings: To check another player's warnings, you need oreo.warnings.others permission. Without it, /warnings only shows your own.

How It Works Step by Step

Staff member types /warn Alex Spamming in chat

Alex receives a message: "You have been warned by Notch: Spamming in chat. Total warnings: 1/3"

Staff sees: "Warned Alex: Spamming in chat (1/3 warnings)"

If broadcast-on-warn: true, all staff see the warning in chat

On the 3rd warning, the punishment fires automatically — in this case, a 7-day tempban

Player Examples

🎀 Alex (Gets Warned)

Alex was spamming chat. Notch warns her twice this week.

/warn Alex Spamming
/warn Alex Advertising another server

Alex now has 2/3 warnings. One more and she's tempbanned for 7 days.

🎩 Notch (Moderator)

Notch wants to check Alex's warning history:

/warnings Alex

He sees both warnings with their IDs, dates, and reasons.

🧱 Steve (Admin)

Steve decides one warning was unfair and removes it:

/unwarn Alex a1b2c3d4

That specific warning is removed. Alex is back to 1/3.

👾 Herobrine (Bad Player)

Herobrine gets his 3rd warning. The system automatically applies the configured action: tempban for 7 days. His warning count is then cleared.


🛡️

ModGUI — Moderation Panel

An in-game GUI that puts all moderation tools in one easy-to-use menu.

What Does It Do?

ModGUI provides a visual, clickable GUI panel for staff members. Instead of memorizing dozens of commands, moderators can open one menu and access everything: player inspection, inventory viewing, banning, kicking, freezing, notes, IP lookup, chat moderation, world management, and performance tools.

How to Open

Make sure you have the oreo.modgui.open permission

Run /modgui — a 6-row GUI opens

Click items to navigate to sub-menus

Config File: server/modgui.yml

worlds: {}
# World-specific configurations for ModGUI world management features.
# Leave empty to use defaults. Example:
# worlds:
#   world:
#     pvp: true
#     mob-spawning: true

Available Sub-Menus

Player Menu

Search for a player by name. Opens their personal actions panel.

Player Actions

Ban, kick, mute, freeze, teleport, view inventory, check IP, add notes.

Inspect Menu

Full player profile: playtime, warnings, ban status, alt accounts, location.

InvSee

View and optionally modify another player's inventory in real-time.

EcSee

View another player's ender chest contents.

IP / Alts Menu

See all accounts that have logged in from the same IP address.

Player Notes

Add/view private staff notes about a player. Notes persist across sessions.

Chat Moderation

Mute chat globally, set slowmode, toggle staff chat mode.

Server Menu

Server-wide controls: broadcast, emergency clear, server info.

World Actions

Toggle PvP, mob spawning, gamerules per-world, world whitelist.

TPS Dashboard

Real-time performance panel: TPS graph, entity counts, chunk info.

Perf Tools

Performance utilities: clearlag trigger, chunk analysis, memory info.

Freeze Feature

Moderators can freeze a player (from the Player Actions menu or by command). A frozen player cannot move, chat, or interact. This is useful for mid-investigation holds.

Player Examples

🎩 Notch (Moderator)

Notch suspects a player is hacking. He opens /modgui, navigates to Player Menu, searches "Herobrine", then clicks Inspect to see his movement stats and recent activity.

👾 Herobrine (Under Investigation)

Herobrine is frozen by Notch. He cannot move. He receives a message: "You have been frozen by a moderator."

🧱 Steve (Admin)

Steve uses the World Actions menu to quickly toggle PvP off in the mining world without remembering any gamerule commands.


📖

Help & Rules

Configurable /help command with paginated or simple mode, and a /rules command for server rules.

Config: server/help.yml

help:
  mode: paginated   # "paginated" (pages with navigation) or "simple" (just print lines)

  # --- Simple mode only ---
  simple-text:
    - "&6=== SERVER HELP ==="
    - "&e/home &7- Teleport to your home"
    - "&e/warp &7- List server warps"

  # --- Paginated mode ---
  header: "&8&m------&r &6&lServer Help &7(Page {page}/{total}) &8&m------"
  footer: "&8&m------&r &7Use &e/help <page> &7to navigate &8&m------"
  entries-per-page: 8    # How many commands show per page

  entries:               # List of commands to display
    - command: "&e/home"
      description: "Teleport to your home"
      # no permission = visible to everyone

    - command: "&e/ban"
      description: "Ban a player (staff only)"
      permission: "oreo.ban"
      # ↑ Only shown to players who have this permission
Permission-gated entries: If an entry has a permission field, only players with that permission will see it in /help. This lets you show different commands to staff vs players.

Config: server/rules.yml

rules:
  lines:
    - "&6=== SERVER RULES ==="
    - "&e1. &7No hacking or using unfair advantages"
    - "&e2. &7Be respectful to all players"
    - "&e3. &7No griefing or stealing"
    - "&e4. &7No spamming or advertising other servers"
    - "&e5. &7Follow staff instructions"
    - "&7Breaking rules may result in a ban."

Commands

CommandWhat It DoesPermission
/help [page]Show help page (default: page 1)oreo.help
/help reloadReload help.ymloreo.help.admin
/rulesShow the server rulesoreo.rules
/rules reloadReload rules.ymloreo.rules.admin

Player Examples

🧱 Steve (New Player)

Steve just joined and wants to know what commands are available. He types /help and sees page 1 of the help list. He types /help 2 for page 2.

🎩 Notch (Moderator)

Notch types /help and sees additional entries in the list — like /ban and /kick — that regular players don't see because they require oreo.ban.

🎀 Alex (Player)

Alex was arguing about a rule with another player. She types /rules to show the official rules in chat, ending the argument.


📢

MOTD (Message of the Day)

Send players a custom welcome message when they join, with different messages per rank.

What Does It Do?

When a player joins the server, they receive a customizable join message after a short delay. You can configure:

Config File: server/motd.yml

motd:
  enabled: true
  delay-ticks: 20        # Ticks before sending (20 ticks = 1 second). Lets the world load first.

  default:               # Default MOTD for everyone
    - "&6Welcome back, &e%player%&6!"
    - "&7There are &a%online% &7players online."
    - "&7Type &e/help &7for commands."

  first-join:           # Shown only on the VERY FIRST join ever
    enabled: true
    lines:
      - "&a&lWELCOME TO THE SERVER, &e&l%player%&a&l!"
      - "&7This is your first time here. Type &e/rules &7to read the server rules."
      - "&7Need help? Type &e/help &7for all commands."

  groups:               # Rank-specific overrides — checked top to bottom
    - permission: "group.admin"
      lines:
        - "&c[ADMIN] &7Welcome back, &c%player%&7!"
        - "&7Staff channel: /staffchat"

    - permission: "group.vip"
      lines:
        - "&6[VIP] &7Welcome, &6%player%&7!"
        - "&7Your VIP perks: /fly, /nick, /kit vip"

Placeholders

PlaceholderReplaced With
%player%The joining player's username
%online%Number of currently online players
Group priority: Groups are checked top to bottom. The first matching group wins. Put more specific ranks (admin, owner) before general ones (vip, default).

Commands

CommandWhat It Does
/motdShow the MOTD again (your rank's version)
/motd reloadReload motd.yml (requires oreo.motd.admin)

Player Examples

🧱 Steve (First Join)

Steve joins for the first time. He sees:
"WELCOME TO THE SERVER, STEVE!"
"This is your first time here. Type /rules to read the rules."

🎀 Alex (VIP)

Alex has the "vip" LuckPerms group, which gives group.vip. She sees the VIP MOTD: "[VIP] Welcome, Alex! Your VIP perks: /fly, /nick, /kit vip"

🎩 Notch (Admin)

Notch sees the admin MOTD — he's checked first because admin group is listed before VIP in config. He also sees: "Staff channel: /staffchat"

👾 Herobrine (Default)

Herobrine has no special rank. He sees the default MOTD. After closing his screen he types /motd to read it again.


⚒️

Craft Actions

Run commands and show messages when specific items are crafted in a crafting table.

What Does It Do?

Craft Actions let you reward players for crafting specific items. When someone crafts a configured item, the server can:

Works for both vanilla items (like DIAMOND_SWORD) and custom-named recipes from the CustomCraft system.

Config File: server/craft-actions.yml

actions:

  # --- Vanilla item: use the Material name (all caps) ---
  DIAMOND_PICKAXE:
    commands:
      - "eco give %player% 50"        # Give $50 via Vault economy
      - "broadcast &e%player% crafted a Diamond Pickaxe!"
    message: "<green>You earned <gold>$50</gold> for crafting this pickaxe!</green>"

  DIAMOND_SWORD:
    commands:
      - "effect give %player% strength 60 1"
    message: "<aqua>You feel powerful wielding this sword!</aqua>"

  # --- Custom recipe: use the recipe name (lowercase) ---
  my_magic_staff:
    commands:
      - "give %player% blaze_rod 1"
    message: "<yellow>You crafted a magical staff!</yellow>"

Available Placeholders

PlaceholderReplaced With
%player%Crafting player's username
%player_uuid%Player's UUID
%world%World the player is in
%item%Material name of the crafted item
%amount%How many were crafted
Commands run as console. You don't need to prefix with /. Just write the command as you would in console: eco give %player% 100

Player Examples

🧱 Steve (Miner)

Steve crafts his first Diamond Pickaxe. He immediately sees:
"You earned $50 for crafting this pickaxe!"
And the whole server sees a broadcast that he crafted it.

🎀 Alex (Fighter)

Alex crafts a Diamond Sword and instantly gets a Strength 1 effect for 60 seconds. The action fired silently — no broadcast, just a personal message.

🎩 Notch (Admin, Reloading)

Notch added a new craft action for NETHERITE_SWORD. He runs /oecraft reload to apply the change without restarting the server.


🌍

World Sharding

Split a massive world across multiple servers — players seamlessly cross borders without noticing.

Advanced Feature: Sharding requires multiple Minecraft servers connected by BungeeCord/Velocity and a Redis server. This is for large networks (Donut SMP style). If you have one server, you don't need this.

What Does It Do?

Imagine a world so large it can't run on one server. Sharding splits the world into a grid of zones, each hosted on its own server. When a player walks from one zone to the next, they're silently transferred to the correct server — the world feels endless and seamless.

Config File: server/shards.yml

sharding:
  enabled: false             # Must set to true to activate sharding
  proxy: VELOCITY          # VELOCITY or BUNGEECORD
  transfer-cooldown-ms: 3000 # Milliseconds between transfers (prevents exploit loops)

  redis:
    host: localhost
    port: 6379
    password: ""            # Leave blank if no auth

  worlds:
    world:                  # Minecraft world name
      enabled: true
      mode: GRID             # GRID (rectangular zones) or RADIAL (ring zones)
      shard-size: 10000      # Size of each zone in blocks
      transfer-buffer: 12    # Blocks from border that trigger transfer
      safe-zone: 16          # Block radius around border that prevents combat
      dimension-servers:
        overworld: "shard-%shard%"  # Server name pattern. %shard% = "0-0", "1-0", etc.

How It Works

Each server is started with a system property: -DshardId=shard-0-0 (sets which grid cell this server owns)

Player walks toward the edge of shard-0-0 (within 12 blocks of border)

Plugin calculates the target shard: shard-1-0

Player state (health, inventory, velocity, potion effects) is saved to Redis with a 5-second TTL

Player is silently transferred to shard-1-0 server via BungeeCord/Velocity

On the new server, the ShardJoinListener reads the Redis handoff data and restores the player's exact state

GRID vs RADIAL Mode

GRID Mode

World is divided into a rectangular grid. Shard IDs use X,Z coordinates: shard-0-0, shard-1-0, shard-0-1, etc. Best for square/rectangular worlds.

RADIAL Mode

World is divided into concentric rings from the center. Shard IDs: shard-ring-0, shard-ring-1, etc. Best for circular/island worlds.

Safe Zone

The safe-zone setting creates a combat-free border buffer. Players within safe-zone blocks of a shard boundary cannot be attacked. This prevents players from exploiting border transfers during combat.

Commands

CommandWhat It DoesPermission
/shard statusShow current shard info and Redis connection statusoreo.shard.admin
/shard create <world>Create a new world shard configurationoreo.shard.admin
/shard listList all configured shard worldsoreo.shard.admin
/shard transfer <player> <shard>Manually transfer a player to a shardoreo.shard.admin

All Permissions

Maintenance

PermissionWhat It Allows
oreo.maintenance.adminAll maintenance commands (enable, disable, whitelist, clock, etc.)
oreo.maintenance.bypassJoin during maintenance without being on the whitelist

ClearLag

PermissionWhat It Allows
oreo.lag.clear/olagg clear — manually clear entities
oreo.lag.killmobs/olagg killmobs — manually kill mobs
oreo.lag.reload/olagg reload — reload clearlag config

JumpPads

PermissionWhat It Allows
oreo.jumpadCreate, remove, and manage jump pads

TempFly

PermissionWhat It Allows
oe.tempfly.useUse /tempfly command
oe.tempfly.infinitePermanent flight (enabled on every join)
oe.tempfly.<group>Duration from permission-groups config (e.g. oe.tempfly.vip)

Warnings

PermissionWhat It Allows
oreo.warnIssue warnings with /warn
oreo.warningsView own warnings with /warnings
oreo.warnings.othersView another player's warnings
oreo.unwarnRemove warnings with /unwarn
oreo.warn.see-broadcastsReceive warning broadcast messages

ModGUI

PermissionWhat It Allows
oreo.modgui.openOpen /modgui panel

Help & Rules

PermissionWhat It Allows
oreo.helpUse /help
oreo.help.admin/help reload
oreo.rulesUse /rules
oreo.rules.admin/rules reload

MOTD

PermissionWhat It Allows
oreo.motdReceive MOTD on join and use /motd
oreo.motd.admin/motd reload

Shards

PermissionWhat It Allows
oreo.shard.adminAll /shard commands

Frequently Asked Questions

How do I put the server in maintenance but still let my staff join?

Enable maintenance: /maintenance on

Then add each staff member: /maintenance whitelist add Steve

Alternatively, if you give staff the oreo.maintenance.bypass permission in LuckPerms, they can join without being on the whitelist at all.

ClearLag removed my items! How do I protect specific items?

In server/clearlag.yml, add items to auto-removal.item-filter:

item-filter:
  - DIAMOND
  - NETHERITE_INGOT
  - NETHERITE_SCRAP
  - ELYTRA

These items will never be cleared, even during auto-removal. Reload with /olagg reload.

ClearLag killed my named pet! How do I protect it?

In server/clearlag.yml, set auto-kill-mobs.remove-named: false. This tells ClearLag to never kill mobs that have a custom name (including pets named with a name tag).

You can also add specific entity types to mob-filter to never kill them:

auto-kill-mobs:
  mob-filter:
    - WOLF
    - CAT
    - HORSE
Can TempFly sessions survive a server restart?

No. TempFly sessions are stored in memory only. If the server restarts, all active sessions are lost. Players will need to use /tempfly again when they reconnect.

If you need persistent fly time (survives restarts), consider using a permission plugin to grant oe.tempfly.infinite for a limited time using a timed permission plugin.

A player reached max warnings but nothing happened — why?

Check the max-action setting in server/warnings.yml. If it's set to none, the system records the warnings but takes no automated action. Change it to kick, tempban, or ban.

Also ensure max-warnings is set to a reasonable number (e.g. 3).

My /help shows too many entries on one page. How do I change it?

In server/help.yml, change entries-per-page:

entries-per-page: 5   # Show 5 commands per page instead of 8

Then run /help reload to apply the change.

Can I show different /motd to VIPs vs default players?

Yes! Use the groups section in server/motd.yml. Add a group entry for each rank:

groups:
  - permission: "group.vip"
    lines:
      - "&6Welcome back, VIP %player%!"
      - "&7Your exclusive /kit vip is ready!"

The first matching group wins, so put higher-priority groups (admin, owner) at the top of the list.

How do craft actions interact with custom recipes from /oecraft?

Craft actions work for both vanilla and custom recipes.

  • For vanilla items, use the uppercase Material name as the key: DIAMOND_SWORD
  • For custom recipes created with /oecraft, use the recipe name (lowercase): my_special_sword

The system automatically detects which type the key is — if Material.valueOf(key) fails, it treats it as a custom recipe name.

JumpPads aren't making sounds or particles. Why?

The sound and particle names must match Minecraft's registry keys (all lowercase with underscores).

For sounds, use the Minecraft sound name format: entity_firework_rocket_launch, block_note_block_pling

For particles, use: cloud, flame, end_rod, fireworks_spark

You can look up valid names in the Minecraft wiki or by using tab-complete in-game with the /particle command.

Is sharding suitable for a single-server setup?

No. Sharding is designed for networks with multiple Minecraft servers behind BungeeCord or Velocity, plus a Redis server for state handoff. If you only have one server, leave sharding.enabled: false and ignore the shards.yml file.

Sharding is useful when your world is so large that one server can't handle all the chunks efficiently — typically for creative/exploration servers with very active populations.

How do I reload all server module configs at once?

Most modules have their own reload subcommand. Currently there's no single "reload all" command for server modules. You need to reload each module individually:

  • /maintenance reload
  • /olagg reload
  • /help reload
  • /rules reload
  • /motd reload
  • /oecraft reload

Or use the global /oe reload if OreoEssentials supports a full plugin reload.