MuseumWorld makes selected worlds read-only for safe museum/showcase exploration with protected blocks, entities, chests.
MuseumWorld is a lightweight Paper plugin that turns selected worlds into read-only “museum / showcase” worlds.
Players can explore freely, while destructive actions, inventory modification, entity damage, and common interaction exploits are blocked.
It is designed for:
You choose which worlds are protected through config.yml.
In protected worlds, MuseumWorld can block:
MuseumWorld allows players to open selected containers and look inside, while blocking item movement.
For example, players can open:
But they cannot:
MuseumWorld is designed to be predictable and controlled through config.yml.
Read-only blocks and read-only entities are protected only if they are explicitly listed in:
readonly-blocks:
readonly-entities:
There is no automatic read-only block/entity detection.
This means navigation blocks such as doors, trapdoors and fence gates are not blocked unless the server owner explicitly adds them to readonly-blocks.
For example, if players should be able to open doors in a museum world, simply do not add those doors to readonly-blocks.
If a specific door should be locked, add it manually:
readonly-blocks:
- OAK_DOOR
- IRON_DOOR
This keeps the plugin fully configurable and avoids unexpected protection behavior.
MuseumWorld includes additional protection options for common grief-prevention and museum-world use cases.
Example:
block-item-drop: true
block-item-pickup: true
block-bucket-use: true
block-fire-use: true
block-natural-growth: false
block-bone-meal-use: true
block-portal-creation: true
block-item-frame-rotation: true
block-armor-stand-manipulation: true
block-tnt-ignite: true
block-player-bed-use: true
block-hanging-break: true
block-vehicle-place-break: true
block-projectile-use: true
block-lead-use: true
block-name-tag-use: true
These options allow server owners to decide exactly how strict each protected world should be.
Projectile blocking can be enabled while still allowing Elytra firework boosting.
block-projectile-use: true
allow-elytra-firework-boost: true
When enabled, players can still use firework rockets while gliding with Elytra.
This allows Elytra flight in protected worlds while still blocking other projectile-style interactions such as eggs, ender pearls, splash potions and similar actions.
MuseumWorld can validate selected config lists on startup.
The validator checks:
readonly-blocks
view-only-containers
readonly-entities
blocked-entity-types
If invalid Material or EntityType names are found, MuseumWorld can automatically remove them when enabled:
auto-clean-invalid-config-values: true
Before cleanup, the plugin can create a backup of config.yml.
Validation reports are saved under:
plugins/MuseumWorld/logs/
Config backups are saved under:
plugins/MuseumWorld/backups/
The validator does not modify:
locked-worlds
language
MuseumWorld can automatically add missing config keys when a new plugin version introduces new options.
Existing values are preserved.
Protected config keys, such as:
protected-config-keys:
- locked-worlds
- language
are not overwritten during config updates.
MuseumWorld can also update missing list values when this option is enabled:
update-lists-on-next-reload: true
After the list update is completed, the option automatically returns to:
update-lists-on-next-reload: false
Before automatic config updates, the plugin can create a backup if enabled:
backup-config-before-auto-update: true
Backups are stored in:
plugins/MuseumWorld/backups/
MuseumWorld rewrites config.yml using the bundled default configuration as a template.
This means automatic config updates preserve:
The bundled default config.yml acts as the reference layout.
The active server config.yml keeps user values, while missing keys and comments are restored from the default template.
config-version is always kept as the final key at the bottom of the file.
MuseumWorld uses anonymous bStats metrics.
bStats helps track how many servers use the plugin and which server/software versions are common. It does not collect private player data, chat, world names or config values.
MuseumWorld can check GitHub Releases for new plugin versions on startup.
update-checker-enabled: true
notify-admins-about-updates: true
The update checker only notifies server owners/admins. It never downloads or installs updates automatically.
Main command:
/museum
Available subcommands:
/museum version
/museum list
/museum add <world>
/museum remove <world>
/museum reload
/museum status
/museum debug <on|off|status>
/museum lockcurrentworld
/museum unlockcurrentworld
/museum version
Shows public plugin information. This command is available to all players and does not require museumworld.admin.
Example output:
MuseumWorld
Version: 1.1.0
Channel: STABLE
Target API: Paper 26.1.2
Author: Tantrum90MK
/museum list
Shows all locked/protected worlds.
/museum add <world>
Adds a world to the protected worlds list.
/museum remove <world>
Removes a world from the protected worlds list.
/museum reload
Reloads config and message files.
/museum status
Shows plugin status, current world protection status, player permissions, gamemode diagnostics, config counts and protection toggle states.
/museum debug on
Enables debug mode.
/museum debug off
Disables debug mode.
/museum debug status
Shows whether debug mode is enabled.
/museum lockcurrentworld
Adds the world where the player is currently standing to the protected worlds list.
/museum unlockcurrentworld
Removes the world where the player is currently standing from the protected worlds list.
museumworld.admin
Allows use of administrative /museum commands. The /museum version subcommand is public and does not require this permission.
museumworld.bypass
Allows bypassing MuseumWorld protection checks.
By default, museumworld.admin is assigned to OP users through paper-plugin.yml.
Debug mode helps identify why actions are blocked or allowed.
Enable it with:
/museum debug on
Example debug output:
[MuseumWorld] [DEBUG] DENIED block-break | player=PlayerName | world=WorldName | locked=true | bypass=false | reason=locked world protection
Example allowed output:
[MuseumWorld] [DEBUG] ALLOWED block-break | player=PlayerName | world=WorldName | locked=true | bypass=true | reason=player has bypass/admin permission
Debug mode is useful when testing:
MuseumWorld status and debug output include gamemode-related information.
This is useful because Minecraft gamemodes affect whether block breaking is possible.
For example:
SURVIVAL and CREATIVE normally allow block breaking.ADVENTURE prevents normal block breaking.SPECTATOR prevents normal block interaction.If a player is in ADVENTURE mode, BlockBreakEvent may not fire because Minecraft itself prevents normal block breaking.
Use:
/museum status
to check:
museumworld.admin permissionmuseumworld.bypass permissionMuseumWorld supports English and Macedonian message files.
Included files:
messages_en.ymlmessages_mk.ymlSelect language in config.yml:
language: en # for English
# language: mk # for Macedonian
Only one language key should be active.
For museum/showcase worlds, it is recommended to use multiple protection layers:
ADVENTURERecommended Multiverse-style settings for museum worlds:
gamemode: ADVENTURE
hunger: false
This allows players to explore without breaking blocks or losing hunger.
MuseumWorld can then provide additional protection against interactions that Adventure mode does not fully cover, such as:
MuseumWorld does not automatically block doors, trapdoors or fence gates.
They are normal navigation blocks in many museum/showcase worlds.
If you want to lock a specific door, trapdoor or fence gate type, add it manually to:
readonly-blocks:
Example:
readonly-blocks:
- OAK_DOOR
- IRON_DOOR
- OAK_TRAPDOOR
- OAK_FENCE_GATE
If they are not listed, players can use them normally.
This project is licensed under the GNU General Public License v3.0.
See the LICENSE file for details.
MuseumWorld allows players to open selected containers and look inside, while blocking item movement.
For example, players can open:
But they cannot:
Most important behavior is controlled in config.yml, including:
MuseumWorld can automatically add missing config keys when a new plugin version introduces new options.
Existing values are preserved.
Protected config keys, such as:
protected-config-keys:
- locked-worlds
- language
are not overwritten during config updates.
MuseumWorld can also update missing list values when this option is enabled:
update-lists-on-next-reload: true
After the list update is completed, the option automatically returns to:
update-lists-on-next-reload: false
Before automatic config updates, the plugin can create a backup if enabled:
backup-config-before-auto-update: true
Backups are stored in:
plugins/MuseumWorld/backups/
Main command:
/museum
Available subcommands:
/museum list
/museum add <world>
/museum remove <world>
/museum reload
/museum status
/museum debug <on|off|status>
/museum lockcurrentworld
/museum unlockcurrentworld
/museum list
Shows all locked/protected worlds.
/museum add <world>
Adds a world to the protected worlds list.
/museum remove <world>
Removes a world from the protected worlds list.
/museum reload
Reloads config and message files.
/museum status
Shows plugin status, current world protection status, player permissions, gamemode diagnostics, and config counts.
/museum debug on
Enables debug mode.
/museum debug off
Disables debug mode.
/museum debug status
Shows whether debug mode is enabled.
/museum lockcurrentworld
Adds the world where the player is currently standing to the protected worlds list.
/museum unlockcurrentworld
Removes the world where the player is currently standing from the protected worlds list.
museumworld.admin
Allows use of /museum commands.
museumworld.bypass
Allows bypassing MuseumWorld protection checks.
By default, museumworld.admin is assigned to OP users through paper-plugin.yml.
Debug mode helps identify why actions are blocked or allowed.
Enable it with:
/museum debug on
Example debug output:
[MuseumWorld] [DEBUG] DENIED block-break | player=PlayerName | world=WorldName | locked=true | bypass=false | reason=locked world protection
Example allowed output:
[MuseumWorld] [DEBUG] ALLOWED block-break | player=PlayerName | world=WorldName | locked=true | bypass=true | reason=player has bypass/admin permission
MuseumWorld status and debug output include gamemode-related information.
This is useful because Minecraft gamemodes affect whether block breaking is possible.
For example:
SURVIVAL and CREATIVE normally allow block breaking.ADVENTURE prevents normal block breaking.SPECTATOR prevents normal block interaction.If a player is in ADVENTURE mode, BlockBreakEvent may not fire because Minecraft itself prevents normal block breaking.
Use:
/museum status
to check:
museumworld.admin permissionmuseumworld.bypass permissionMuseumWorld supports English and Macedonian message files.
Included files:
messages_en.ymlmessages_mk.ymlSelect language in config.yml:
language: en # for English
# language: mk # for Macedonian
Only one language key should be active.
For museum/showcase worlds, it is recommended to use multiple protection layers:
ADVENTURERecommended Multiverse-style settings for museum worlds:
gamemode: ADVENTURE
hunger: false
This allows players to explore without breaking blocks or losing hunger. You can still kill un-friendly mobs.
This project is licensed under the GNU General Public License v3.0.
See the LICENSE file for details.