- Tested Minecraft Versions:
- Source Code:
- AxelDios (Original), Vik1395 (2015-2016), Dragoboss (2016-2017), Jerzean (2018), EspiDev (2018+)
Get support for this plugin on the M.O.S.S. Discord! https://discord.gg/TQXWtf8
Warning: ProtectionStones does not officially support negative y values yet (for those using datapacks). You may choose to get early access builds for native 1.17 support here: https://ci.espi.dev/job/ProtectionStones/374/
Ever needed an easy, yet powerful way to prevent grief, and protect a certain area?
This plugin allows players to protect land using a block that they place down. It creates a WorldGuard region at a set radius (configurable) around where the block is placed. The plugin also allows players to add and remove people to the region, as well as set flags (defined in the config).
Appreciate my work?
- WorldGuard 7+
- WorldEdit 7+
- Vault (Optional)
- PlaceholderAPI (Optional)
- Spigot 1.13.2+
Donations are appreciated!
1.8 - 1.12 (NOT MAINTAINED):
I did port one version of ProtectionStones backwards, but I do not provide support or updates for this version:
Make sure you first have the requirements listed above.
Simply add the plugin to the plugins folder, and it will generate the default configuration.
By default, no permissions are given to players, so you have to add them explicitly.
Adding new blocks:
To add new protection blocks, go into plugins/ProtectionStones/blocks, and copy and paste the default block1.toml file and rename it (ex. block2.toml). Then, you have to change the "type" and "alias" fields in the new block config, since there cannot be duplicates.
Flags allow for customization of region behaviour. ProtectionStones uses WorldGuard flags, meaning that WorldGuard is actually doing the protecting, not ProtectionStones. You can view the list of WorldGuard flags here.
It is also possible to use other plugins that add flags to WorldGuard, such as WorldGuard Extra Flags and use them in ProtectionStones.
WorldGuard by default prevents hoppers from going between regions. I recommend setting "ignore-hopper-item-move-events" in WorldGuard's config to false to fix this.
If you want to protect against water and lava flow into regions, you can set "high-frequency-flags" and "protect-against-liquid-flow" to true in WorldGuard's config.
View the WorldGuard config here.
Default Config Files:
View the default configuration here.
View user contributed translations here.
Contact me on the Discord, or file a GitHub issue if you would like to contribute your translation to the page! Thank you!
Get a protection block with the /ps get command. Simply placing it down will create a protection region centered around the block. Breaking the block will remove the region.
View the permission list here.
View the recommended permissions to give for commands here.
View the list of commands here.
ProtectionStones has support for PlaceholderAPI! View them here.
When I add a new block config, an error occurs!
Read the error. Most likely you made a configuration mistake, you can read the TOML spec here, or ask me. Another known issue is that configs made in Notepad (Windows) cause issues with the plugin. Please use a better text editor (ex. Notepad++) for the time being, while I investigate ways to mitigate this.
When I get the protection block from the creative inventory, it doesn't work (nothing happens when I place it)!
Since v2.0.0, the config options "restrict-obtaining" is enabled by default. This restricts obtaining the protectionstones to just /ps get and /ps give (and plugins that use the API), since they attach NBT data to the block. That means that when the block is obtained through natural means, it won't work as a protection block. You can set "restrict-obtaining to false to negate this behaviour.
How can I add protection blocks in a kit?
Since v2.0.0, the config options "restrict-obtaining" is enabled by default. This restricts obtaining the protectionstones to just /ps get and /ps give (and plugins that use the API), since they attach NBT data to the block. You need to add a command (/ps give) to give the block to the player in the kit. For EssentialsX, check the kit section here.
How can I sell protection blocks in a shop?
There are many ways to sell protection blocks, with the easiest being setting a price on /ps get (requires Vault, configured in the block config). You can also use external plugins to sell the protection block, either through running a command (/ps give) or giving an item that was obtained through /ps get or /ps give. Known plugins to work are: ShopChest, ChestCommands.
Why don't players see the region merge menu?
Be sure to give players the protectionstones.merge permission.
Why do some flags apply to members of the region as well? (ex. block-break deny)
By default flags apply to everyone, including members of the region. You have to use region groups (using -g) to change this (ex. set the group to apply to only nonmembers). You can read about this here.
How do I change the block type of a region after players have already created regions with it?
You can use the command /ps admin changeblock [world] [fromblock] [toblock] to do this. Create a new config (block.toml file) in the blocks folder with the changed block type, while keeping the old one still loaded. Do /ps reload, and run the command to do the conversion. After it completes, you can remove the block config with the old type.
Why does [x] flag not work?
Flags are handled by WorldGuard, and some of their behaviours may not be what you expect. You can read more about WorldGuard flags here: https://worldguard.enginehub.org/en/latest/regions/flags/
How can I allow PS regions to overlap or be created inside manually created WorldGuard regions?
You can use the concept of priorities in WorldGuard, and set the manually created WG region to a lower priority than the ProtectionStones regions.
I found a bug! How do I get it fixed?
Please file this issue on either GitHub, or post it on the discussion page.
I want a new feature!
Please file this issue on either GitHub, or post it on the discussion page. The feature may not be aligned with the goals of the plugin, so it might also be worth making another plugin that uses the developer API instead.
Is there a developer API?
Yes there is! It still is in a beta stage though right now, so methods are bound to change. You can see the wiki page here.
Usage Statistics: https://bstats.org/plugin/bukkit/ProtectionStones/4071
This plugin is based off of the original ProtectionStones.
Migrating from older versions of ProtectionStones (<2.x.x)
The transition from older versions should be seamless, so just drag the plugin in to the plugins folder and enjoy! The plugin will automatically update your configs and regions.
You can find the original plugin here:
Graphics were made by Seshpenguin, thank you!
ProtectionStones [Updated for 1.13 - 1.17 + WG7] 2.8.5
The easiest grief prevention method that players will enjoy!
[00:11:44 INFO]: adriangmns issued server command: /ps reload
[00:11:44 INFO]: [ProtectionStones] Protection Stone Blocks:
[00:11:44 INFO]: [ProtectionStones] - IRON_ORE (Hierro)
[00:11:44 INFO]: [ProtectionStones] - EMERALD_ORE (64)
[00:11:44 ERROR]: null
org.bukkit.command.CommandException: Unhandled exception executing 'ps reload' in dev.espi.protectionstones.PSCommand(ps)
at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:155) ~[patched.jar:git-PaperSpigot-"4c7641d"]
at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchCommand(CraftServer.java:666) ~[patched.jar:git-PaperSpigot-"4c7641d"]
at net.minecraft.server.v1_8_R3.PlayerConnection.handleCommand(PlayerConnection.java:1189) [patched.jar:git-PaperSpigot-"4c7641d"]
at net.minecraft.server.v1_8_R3.PlayerConnection.a(PlayerConnection.java:1001) [patched.jar:git-PaperSpigot-"4c7641d"]
at net.minecraft.server.v1_8_R3.PacketPlayInChat.a(PacketPlayInChat.java:45) [patched.jar:git-PaperSpigot-"4c7641d"]
at net.minecraft.server.v1_8_R3.PacketPlayInChat.a(PacketPlayInChat.java:1) [patched.jar:git-PaperSpigot-"4c7641d"]
at net.minecraft.server.v1_8_R3.PlayerConnectionUtils$1.run(SourceFile:13) [patched.jar:git-PaperSpigot-"4c7641d"]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_282]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_282]
at net.minecraft.server.v1_8_R3.SystemUtils.a(SourceFile:44) [patched.jar:git-PaperSpigot-"4c7641d"]
at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:774) [patched.jar:git-PaperSpigot-"4c7641d"]
at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:378) [patched.jar:git-PaperSpigot-"4c7641d"]
at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:713) [patched.jar:git-PaperSpigot-"4c7641d"]
at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:616) [patched.jar:git-PaperSpigot-"4c7641d"]
at java.lang.Thread.run(Thread.java:748) [?:1.8.0_282]
Caused by: org.bukkit.plugin.IllegalPluginAccessException: Plugin attempted to register task while disabled
at org.bukkit.craftbukkit.v1_8_R3.scheduler.CraftScheduler.validate(CraftScheduler.java:407) ~[patched.jar:git-PaperSpigot-"4c7641d"]
at org.bukkit.craftbukkit.v1_8_R3.scheduler.CraftScheduler.runTaskTimerAsynchronously(CraftScheduler.java:144) ~[patched.jar:git-PaperSpigot-"4c7641d"]
at dev.espi.protectionstones.PSEconomy.<init>(PSEconomy.java:48) ~[?:?]
at dev.espi.protectionstones.ProtectionStones.loadConfig(ProtectionStones.java:394) ~[?:?]
at dev.espi.protectionstones.commands.ArgReload.executeArgument(ArgReload.java:58) ~[?:?]
at dev.espi.protectionstones.PSCommand.execute(PSCommand.java:127) ~[?:?]
at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:146) ~[patched.jar:git-PaperSpigot-"4c7641d"]
... 14 more