VillagerControl is a performance-focused plugin that reduces server load caused by villagers repeatedly performing expensive searches for beds, job sites, and meeting points. It achieves this by controlling when and which villagers are allowed to perform these memory searches, significantly reducing unnecessary POI lookups while preserving normal villager behavior.
With simple yet flexible configuration options, VillagerControl allows you to fine-tune the balance between performance and gameplay on a per-world basis.
How It Works (Internal Behavior)
When a villager is missing a required memory (home, job site, or meeting point), the plugin inserts a temporary placeholder memory using a configurable negative Y-level. This prevents the villager from continuously searching for the missing point of interest.
At fixed intervals (ticks-per-allow-search), the plugin:
- Removes placeholder memories, allowing villagers to search for missing POIs.
- After allow-search-window-ticks, re-applies placeholder memories for villagers that still lack required memories.
This cycle strictly limits how often expensive villager searches are allowed to occur.
A join lockdown can also be enabled to prevent mass searches when the first player joins the server.
Features
- Controls and limits villager memory searches:
- Home (bed)
- Job site
- Meeting point
- Per-world configuration with enable/disable support
- Ignore specific villagers:
- Named villagers
- Baby villagers
- Villagers currently trading
- Filtering options:
- By profession
- By player proximity
- Control how often and how many villagers may search:
- Tick-based intervals
- Chance percentage
- Maximum searches per cycle
- Placeholder memories using a configurable negative Y-level
- Join lockdown to prevent expensive searches on first player join
- Compatibility adjustments for older Minecraft versions (e.g. 1.16)
- Optional runtime scoreboard for monitoring villager processing
- PlaceholderAPI support
Commands
Main command: /villagercontrol
Alias: /vc
- /vc reload
Reloads config.yml and restarts internal schedulers.
- /vc status
Toggles a runtime scoreboard displaying villager processing statistics.
Permissions
- villagercontrol.admin
Required for all commands.
(Default: OP)
PlaceholderAPI Integration
If PlaceholderAPI is installed, the following placeholders are available:
- %villagercontrol_enabled%
- %villagercontrol_ticks_per_allow_search%
- %villagercontrol_allow_search_window_ticks%
- %villagercontrol_last_cycle_ms%
- %villagercontrol_last_villagers_processed%
Configuration
All settings are defined in config.yml.
Global Options
- ticks-per-allow-search
Interval between allowed villager search windows.
- allow-search-window-ticks
Duration of each search window.
- allow-search-chance-percent
Chance for a villager to be allowed to search during a cycle.
- allow-search-max-per-cycle
Maximum number of villagers allowed to search per cycle.
- allow-search-only-when-player-within-blocks
- join-lockdown-seconds
- manage-memories
- placeholder-y
Y-level used for placeholder memory locations.
Per-World Configuration
Defined under worlds.<world_name>:
- enabled
Enables or disables VillagerControl in the world.
- ignore-named-villagers
- ignore-baby-villagers
- ignore-trading-villagers
- ignore-professions
- ignore-when-player-within-blocks
- manage-memories.home
- manage-memories.job-site
- manage-memories.meeting-point
Installation & Usage
- Copy the plugin JAR file into your server’s plugins folder.
- Restart or reload the server.
- Configure config.yml to your needs.
- Reload the plugin using /vc reload if necessary.