
The best add-on for protectionstones
The most advanced, interactive, and fully customizable GUI menu for ProtectionStones.

xPsMenu takes the classic ProtectionStones experience and transforms it into a modern, visual, and premium system for your players.
gui.yml, flags.yml, selector.yml, config.yml).&#FFFFFF) to make your menus pop out.


Do you want to acquire the best ES/EN configuration?
xPsMenu-v1.0.0.jar and place it in your /plugins/ folder./plugins/xPsMenu/ and type /psmenu reload.Shift + Right Click (on a protection block) - Opens the main management GUI for that specific region./psmenu - Opens the dynamic Region Selector (Shows all your active regions)./psmenu help - Shows the help menu./psmenu reload - Reloads all configuration files seamlessly.psmenu.admin/psmenu clearall confirm - ⚠️ DANGER! Wipes every single ProtectionStones region from the server database.psmenu.adminpsmenu.bypass - Bypasses the 3-second teleportation delay. Instant teleport!Use these exclusively inside your gui.yml and flags.yml to display dynamic data:
%region% - Displays the ID of the region currently being edited.%hidden_status% - Displays the current state of the block (e.g., Hidden ✘ or Visible ✔ - editable in config).%player_name%).You can use these variables anywhere on your server (Scoreboards, Holograms, Chat, etc.):
%xpsmenu_version% - Displays the current plugin version.%xpsmenu_player% - Displays the player's name.Building a custom core or an NPC script? You can easily hook into xPsMenu to open interfaces for your players using our static API.
dependencies {
compileOnly fileTree(dir: 'libs', include: 'xPsMenu-v1.0.0.jar')
}
Example Usage:
Java
import jn.willfrydev.xPsMenuAPI;
import org.bukkit.entity.Player;
public class MyCustomPlugin {
public void openMenuForPlayer(Player player, String regionId) {
// Opens the main Editor GUI for a specific region
xPsMenuAPI.openMainMenu(player, "ps10x64y5z");
}
public void openListForPlayer(Player player) {
// Opens the Dynamic Region Selector GUI for the player
xPsMenuAPI.openSelector(player);
}
}