BetterStructures FAQ
If your question is about first-time Nightbreak linking, package downloads, or manual imports, start with the shared Global pages first. This FAQ only keeps BetterStructures-specific answers.
Why are structures not appearing?
The most common reason is that you are testing in terrain that was already explored before BetterStructures was installed.
BetterStructures is designed to generate into unexplored terrain so it does not retroactively fill in old chunks. If you want to see natural generation quickly:
- fly into fresh chunks
- generate a new test world
- or use the placement and setup commands instead of waiting for natural generation
Why did BetterStructures disable itself after a reload?
/bs reload clears every content registry before a worker thread rebuilds them. If that rebuild throws, continuing would leave a plugin that looks enabled but has partial or empty content, so BetterStructures deliberately fails closed and disables itself instead.
The real error is printed to the console immediately before the disable. Fix the config or schematic it names, then restart the server.
Why is my command being refused while a reload is running?
/bs place, /bs lootify, /bs pregenerate and /bs generateModules all read or mutate the content registries that the reload worker owns, so they are refused for the duration with a "content is reloading" message. Newly generated chunks are also skipped during that window. Wait for the reload to report success and try again.
Running /bs reload again during a reload does not fail - your request is queued, and one more complete reload runs once the first finishes, so file changes you made mid-reload are still picked up.
How do I stop the admin warnings about new structures?
BetterStructures keeps a warnAdminsAboutNewBuildings toggle in config.yml, and /betterstructures silent flips that value for you.
This is useful during pregeneration or other admin-heavy testing where the warnings become noisy.
What does setupDone mean?
setupDone tracks whether the BetterStructures first-time setup flow has been completed.
falsemeans the setup flow is still considered incompletetruemeans the setup flow has already been completed
If you intentionally want to rerun setup, set setupDone: false, reload the plugin, and run /bs initialize again.
Does BetterStructures require WorldEdit?
Yes. WorldEdit is a hard dependency in plugin.yml, so BetterStructures is not expected to run without it.
How does WorldGuard integration work?
If both WorldGuard and EliteMobs are installed, BetterStructures registers and uses the betterstructures-protect flag for its protected areas. Both plugins must be present for WorldGuard protection to activate.
The relevant config toggle is:
protectEliteMobsRegions: true
Set it to false if you do not want BetterStructures-managed WorldGuard protection for supported content.
The message shown to players when they attempt to break or place blocks in a protected area is also configurable:
regionProtectedMessage: "&8[BetterStructures] &cDefeat the zone's bosses to edit blocks!"
Can I add custom items to BetterStructures treasure?
Yes. BetterStructures includes:
/betterstructures lootify <generator> <rarity> <minAmount> <maxAmount> <weight>
Use it while holding the item you want to register. The command writes the held item into the selected treasure generator entry.
Current validation rules from the command implementation:
- the treasure generator must exist
- the rarity must already exist in that treasure config
minAmountmust be at least1maxAmountmust be at most64- the held item cannot be air
Does BetterStructures support MMOItems treasure entries?
Yes. BetterStructures has MMOItems support in the project and the existing treasure workflow supports third-party items. For MMOItems-specific syntax, keep the exact config examples in your treasure files aligned with the current treasure-page documentation instead of relying on older FAQ snippets.
How do EliteMobs and BetterStructures work together?
BetterStructures has soft integration with EliteMobs.
At a high level:
- BetterStructures can place EliteMobs content markers inside generated structures
- BetterStructures can also manage protected areas that matter for EliteMobs-backed content when the integration is enabled
For the shared setup flow, token linking, and official package lifecycle, use the Global docs and the BetterStructures setup/content pages instead of treating this FAQ as the primary source.
Can I pregenerate a world more safely?
Yes. BetterStructures exposes performance-oriented pregeneration settings in config.yml, including:
percentageOfTickUsedForPregeneration(default:0.1) - how much of each server tick is used for chunk pregenerationpregenerationTPSPauseThreshold(default:12.0) - TPS below which pregeneration pausespregenerationTPSResumeThreshold(default:14.0) - TPS above which pregeneration resumes
For normal structure pasting, the main pacing setting is:
percentageOfTickUsedForPasting: 0.2
Lower values reduce per-tick impact but make structure pasting slower.
How are structure locations determined?
BetterStructures keeps per-structure-type spacing and random-offset controls in config.yml. See Configuration for the full reference.
Each structure type is placed on its own seeded diamond grid. The distance and offset values are measured in chunks, not blocks - a distanceSurface of 27 is roughly one surface structure every 27 chunks, or about 432 blocks.
The main distance controls are:
distanceSurface(default:27)distanceShallow(default:22)distanceDeep(default:22)distanceSky(default:90)distanceLiquid(default:60)distanceDungeonV2(default:80)
The related offset controls are:
maxOffsetSurface(default:5)maxOffsetShallow(default:5)maxOffsetDeep(default:5)maxOffsetSky(default:5)maxOffsetLiquid(default:5)maxOffsetDungeonV2(default:18)
Distances must be at least 1. Offsets must be between 0 and 1073741823 (the largest value the placement randomizer can safely use). If a value is outside its valid range, BetterStructures logs a warning, writes that key's default back to config.yml, and continues with the default instead of failing generation.
In practice, this means generation stays seed-driven and config-driven rather than reshuffling randomly on every restart.
What does modularChunkPastingSpeed do?
Nothing, currently. modularChunkPastingSpeed (default: 10) is still written into config.yml, but nothing in the plugin reads it, so changing it has no effect. Pasting is paced by percentageOfTickUsedForPasting instead - use that key if you want to tune how much of each tick BetterStructures spends placing blocks.
What does spawnProtectionRadius do?
spawnProtectionRadius (default: 100) defines the minimum distance in blocks from world coordinates 0, 0 within which no structures will be placed. This applies to all worlds. Set to 0 to disable spawn protection.
How do I disable structures in specific worlds?
BetterStructures maintains a ValidWorlds.yml configuration file that controls which worlds are eligible for structure generation. Each world is listed with a boolean toggle:
New worlds spawn structures: true
Valid worlds:
world: true
world_nether: true
world_the_end: true
Set a world to false to prevent BetterStructures from placing any structures in that world. The New worlds spawn structures setting controls whether newly detected worlds are automatically enabled for structure generation.
Two behaviours are worth knowing about:
- EliteMobs-managed worlds are excluded by default. Worlds owned by EliteMobs - the adventurers guild hub and instanced dungeon copies - are registered as
falseeven whenNew worlds spawn structuresistrue. Their unbuilt void chunks count as new chunks, which previously had BetterStructures decorating dungeon hubs. Existingem_entries were flipped tofalseonce by a one-time migration; theEliteMobs worlds excluded by defaultmarker key in the file records that this already ran, so if you deliberately set anem_world back totrueyour choice survives restarts. - Entries for deleted worlds are pruned. On startup, and about ten seconds after a world unloads, BetterStructures removes any
Valid worldsentry whose world is neither loaded nor present on disk, so the file does not accumulate dead entries.
How do I repair a broken or partially deleted content pack?
Use /bs forcereinstallcontent <package|all>. Normal downloads compare versions and skip anything already up to date, which is exactly the wrong behaviour when the files on disk are damaged. Force reinstall pushes the package back through the same authenticated download, import and reload pipeline regardless of version.
all covers every package BetterStructures currently sees as downloaded, installed or out of date. If a package's files are gone entirely BetterStructures cannot see it any more, so name its slug directly instead - tab completion lists every known slug.