Crops & Blocks boosts crops inside the natural ticking area — no chunk loading, TPS‑friendly. All changes apply server‑wide (all players, all worlds): per‑crop growth control, precise spawner rates (
true 200–800 at 1.0×), and per‑player placement limits — all managed in a clean GUI
(/cnb).
CROPS — WHAT CAN YOU DO
Growth Enabled — global switch for crop control. When off, vanilla growth is fully blocked for supported crops (Wheat, Carrots, Beetroots, Sugar Cane).
Per‑crop multipliers — individual multipliers per crop:
1.0 — pure vanilla (no change).
> 1.0 — speed up: the booster adds smooth extra growth only inside the natural ticking area (player simulation‑distance). No chunk loading.
< 1.0 — slow down: vanilla growth is probabilistically throttled (via BlockGrowEvent) to avoid spikes.
≤ 0.0 — fully block this crop (usually better to use the per‑crop Enabled switch instead).
Per‑crop Enabled — hard ON/OFF per crop, independent of the multiplier. Great if you want to completely disable, e.g., sugar cane.
TPS‑friendly by design — the booster operates only where the server already runs ticks (the natural player simulation‑distance). No chunk tickets, no forced loading.
How it works (under the hood)
Column‑based scan near the surface targets real crops (or farmland with a crop above), so the hit rate is high and results are visible.
Sugar cane has dedicated logic and respects the vanilla height limit (up to 3 blocks).
The booster never touches unloaded areas — it acts only in chunks that are already loaded and ticking.
Player Crop Caps (optional)
Per‑player crop caps (Wheat, Carrots, Beetroots, Sugar Cane) via Player Settings → Crop Caps.
Use for rank perks or to limit farm scale per player — values act as per‑player overrides you can manage from the GUI or commands.
Quick tips
For small servers: start at 1.0; when you want a visible effect, set 2.0–3.0 only on the crops you care about.
If crops sit under a roof and hits seem low, raise column-scan.depth or surface-offset slightly.
For testing, run /cnb boosterdebug on → show to see Crop hits / Eligible / Age‑ups.
Introduction to CROPS GUI
15s Timelapse with 5.0 multiplier boost.
CROPS per-type disable function
SPAWNERS — WHAT CAN YOU DO
Global enable — one switch to allow or block all spawners server‑wide (all players, all worlds).
Global rate — set the overall spawn rate multiplier. 1.0× = true vanilla timing (200–800 ticks). Higher = faster cycles, lower = slower.
Per‑entity rates — override the global rate for specific mobs (inherit or custom).
Per‑entity enable — enable/disable individual spawner types (inherit or custom).
Burst protection — a small inter‑tick cooldown ensures spawns don’t “burst” across ticks while still allowing same‑tick batches from one cycle.
GUI‑first — manage everything in the Spawners page via /cnb; debug tools included.
How it works (under the hood)
At 1.0× global rate, spawners are aligned to the true vanilla baseline: 200–800 tick delay range (with vanilla core params set consistently).
When you change the rate, min/max delays are recalculated from a stable baseline — if the current delay falls outside the new range, it’s reset to a random value inside it (no weird spikes).
A minimal between‑tick cooldown prevents cross‑tick bursty behavior but does not cap the normal same‑tick batch from a single spawner cycle.
Settings are applied to spawners in currently loaded chunks; on chunk load, all spawners inside the chunk are automatically re‑applied. No chunk loading is performed.
When a type or global spawners are disabled, the plugin does not mutate spawner fields — the listener simply cancels those spawn attempts.
Debugging
/cnb spawnerdebug on → show — displays the nearest spawner’s min/max delay, effective rate, vanilla params, and attempt counts (proves the 1.0× = 200–800 baseline).
/cnb spawnerdebug reset — resets the local window counter for the nearest spawner.
Introduction to SPAWNER GUI
15s Timelapse with SKELETON spawner with value 5.0
PLACEMENT LIMITS — WHAT CAN YOU DO
Global limits switch — turn the system ON/OFF server‑wide (all players, all worlds).
Per‑block caps (server defaults) — set per‑player limits for spawner, hopper, slime_block, redstone.
Per‑block enable — fully allow/deny placement of each block type (independent of limits).
Per‑player overrides — give or remove custom caps for specific players (via GUI or commands) — perfect for rank perks and rewards.
GUI‑first — manage everything in the Limits page via /cnb, or automate with commands.
How it works (under the hood)
On place, the plugin checks the player’s effective cap for that block type; if the count would exceed the cap, placement is denied with a clear message.
Counts are maintained per player and type, and decrease on valid block break.
Ownership moves/cleans up correctly in common edge cases:
Pistons moving slime_block — ownership is transferred.
Explosions breaking controlled blocks — counts are decremented.
Data is saved to disk and restored on startup; all limits apply across all worlds.
Server‑wide scope
Global enable and default caps affect everyone on the server, across all worlds. Per‑player overrides supersede the defaults for that player only.
Introduction to PLACEMENT LIMITS and PLAYER SET LIMITS GUI
Player SET LIMITS GUI
Example of GLOBAL LIMIT
Example of GLOBAL LIMIT + PLAYER SET LIMIT
Compatibility
Spigot/Paper 1.21.x • Java 21
No NMS, no chunk tickets; plays well with performance plugins.
Installation
Drop the jar into /plugins, restart.
Use /cnb to configure; edit config.yml for advanced options; /cnb reload to apply.
FAQ
What is the “natural ticking area”? — The player’s simulation‑distance where the server already runs ticks.
Does it load chunks? — No. It only scans chunks that are already loaded.
How to make crops faster? — Set per‑crop multiplier > 1.0 (e.g., 2.0).
How to slow crops? — Set multiplier < 1.0 — we safely throttle vanilla growth.
Is it TPS‑friendly? — Yes. It never expands ticking beyond the natural area, and defaults are conservative.
Support
Free to use. If this helps your server, consider supporting via PayPal
(click here). Feedback and ideas are welcome — I actively maintain and improve the plugin.
Ready? Drop the jar, run /cnb, and you’re done.
General / GUI
/cnb — open the main GUI Permission: cnb.use
/cnb reload — reload config and messages Permission: cnb.admin
/cnb set — open Player Settings GUI for the target player Permission: cnb.admin
CROPS (per-player crop caps + booster debug)
/cnb setcropcap — set a per‑player crop cap Permission: cnb. admin
/cnb clearcropcap — clear the per‑player crop cap (inherit or no cap) Permission: cnb. admin
/cnb spawnerdebug <on|off|show|reset> — spawner diagnostics for the nearest spawner (verifies true 200–800 at 1.0x, effective rate, etc.) Permission: cnb.admin
PLACEMENT LIMITS (per-player block caps)
/cnb setlimit — set a per‑player block placement limit override Permission: cnb. admin
/cnb clearlimit — clear the per‑player override (inherit server default) Permission: cnb. admin
Permissions (summary)
cnb.use — open the main GUI (/cnb)
cnb.admin — configure via GUI, run admin commands (reload, set, setlimit, clearlimit, setcropcap, clearcropcap, spawnerdebug, boosterdebug)
Notes
Tab-completion is available for subcommands, player names, block types, and crop keys.
Code (YAML):
# CropsAndBlocks - complete configuration file with inline docs # Scope: all settings apply server-wide (all players, all worlds) unless stated otherwise. # Performance: the growth booster works only in the natural ticking area (player simulation-distance). # It never force-loads chunks and is TPS-friendly. growth:
enabled: true
# Global crops control: true = crops system active; false = fully block vanilla growth for supported crops (wheat/carrots/beetroots/sugar_cane) and the booster.
# Per-crop speed multipliers (1.0 = vanilla). # How it works: # - > 1.0: speeds up by adding smooth extra growth ONLY in the natural ticking area (no chunk loading). # - < 1.0 and > 0.0: slowly throttles vanilla growth probabilistically (no spikes). # - 0.0: effectively disables growth for that crop (recommended alternative: use crops-enabled.<crop>: false). crops:
wheat: 1.0
# Wheat multiplier. Examples: 2.0 = ~2x faster near players; 0.5 = ~half speed; 0.0 = disabled. carrots: 1.0
# Carrots multiplier. Same rules as wheat. beetroots: 1.0
# Beetroots multiplier. Same rules as wheat. sugar_cane: 1.0
# Sugar cane multiplier. Extra growth respects vanilla height (max 3). >1.0 grows tops if space; <1.0 throttles; 0.0 disables.
# Hard ON/OFF per crop (independent of multipliers). # Use this when you want to completely forbid growth of a specific crop. crops-enabled:
wheat: true
# true = allow wheat growth logic above; false = fully block wheat growth. carrots: true
# true = allow carrots; false = block. beetroots: true
# true = allow beetroots; false = block. sugar_cane: true
# true = allow sugar cane; false = block. booster:
enabled: true
# Master toggle for the booster (the extra growth part for multipliers > 1.0). If false, only throttling (<1.0) can apply via vanilla events. interval-ticks: 20
# How often the booster runs. 20 = ~1s. Increase to reduce CPU, decrease to intensify updates.
# Scan mode: # - PLAYER_CHUNKS: scan chunks inside each player's simulation-distance (recommended, TPS-friendly). # - LOADED_CHUNKS: scan all currently loaded chunks in all worlds (use only if you know why). mode: PLAYER_CHUNKS
attempts-per-chunk: 60
# Manual sample count per chunk (performance knob). 0 = auto (based on world height and base-random-ticks-per-section).
# For PLAYER_CHUNKS mode: # -1 = automatically use simulation-distance; >=0 = fixed radius in chunks (overrides auto). player-chunk-radius: -1
# Auto attempts (used when attempts-per-chunk = 0) base-random-ticks-per-section: 3
# Baseline samples per 16x16x16 section (vanilla-like base). Increase for denser worlds; decrease for large heights. intensity: 1.0
# Multiplier applied to the auto calculation. 1.0 = baseline; 1.5 ~ +50% intensity; 0.7 = lighter.
# Column scan tuning (surface-oriented targeting to find actual crops quickly). column-scan:
depth: 16
# How far below the surface to scan (increase if farms are deeper under roofs/platforms). surface-offset: 2
# How many blocks ABOVE surface to start (helps catch cane tops/roofed spots).
# Backward-compatibility keys (kept for legacy configs; ignored in PLAYER_CHUNKS mode) scan-mode: "players"# DEPRECATED attempts-per-player: 30
# DEPRECATED scan-radius: 8
# DEPRECATED spawner:
enabled: true
# Global spawner control. true = allow (with rates below); false = cancel spawns from all spawners (fields left untouched). global-rate: 1.0
# 1.0x = true vanilla 200–800 tick delay. >1.0 = faster cycles; <1.0 = slower. Use per-entity overrides for fine control.
# Minimal cooldown between different ticks (per spawner). Prevents cross-tick "bursts" while allowing normal same-tick batches. # 0 = off; 20 = ~1s minimal spacing between ticks for a given spawner cycle. min-cooldown-ticks: 20
# Per-entity type rate overrides. If a mob is not listed, it inherits global-rate. # Add entries as lowercase Bukkit EntityType names (examples commented below). rates: # zombie: 1.0 # Inherit-like override (explicit 1.0). Example: 2.0 to make zombies ~2x faster than global. # skeleton: 1.0 # creeper: 1.0 # spider: 1.0 # blaze: 1.0 # magma_cube: 1.0 # iron_golem: 1.0 # witch: 1.0
# Per-entity enable/disable. If a key is absent, it inherits from spawner.enabled. # true = allow spawns (subject to rates/cooldown); false = cancel spawns for that entity type. enabled-types: # zombie: true # blaze: true # witch: true
# Global allow/deny for placing certain block types (independent of per-player caps below). # false = completely forbid placement; true = placement allowed (caps may still restrict per player if enabled). blocks:
enabled:
spawner: true
# Allow placing spawners at all (use placement-limits to cap per player if needed). slime_block: true
# Allow placing slime blocks (ownership moves with pistons if limits are enabled). hopper: true
# Allow placing hoppers (common to cap to reduce laggy spam). redstone: true
# Allow placing redstone wire (cap if you want to limit massive contraptions).
# Per-player placement limits (caps). When enabled, each player has a maximum allowed count per type across all worlds. # Use server defaults here and override specific players via GUI (/cnb → Player Settings → Block Limits) or commands. placement-limits:
enabled: true
# Master switch for caps. true = enforce per-player caps below; false = ignore caps (but blocks.enabled still applies). per-player: # Keys: spawner | hopper | slime_block | redstone # Example defaults (choose values that fit your server size/design): # spawner: 10 # Each player can place up to 10 spawners total across all worlds (unless overridden). # hopper: 256 # Hoppers can be heavy; consider capping per player. # slime_block: 512 # Useful if piston/slime builds get excessive. # redstone: 4096 # Cap pure wire count to discourage extreme lag machines.
# Tips: # - Start with safe defaults: growth multipliers at 1.0, booster interval 10–20, spawner global-rate 1.0, min-cooldown 20. # - To speed up a crop: set its multiplier > 1.0 (booster handles extra growth near players only). # - To slow a crop: set < 1.0 (probabilistic vanilla throttling). To fully ban it: set crops-enabled.<crop> = false. # - For spawners, keep 1.0 = true 200–800 baseline; change per-entity only if needed. # - If you want to outright forbid a block globally, set blocks.enabled.<type> = false (this bypasses per-player caps).