MoonPillars is inspired by the orginal Pillars of the Fortune gamemode made by @CubeCraft.net & @CheapPickle (YT). MoonStar Studios made this into a free to use plugin!
- Download the latest version of MoonPillars
- Place the .jar file in your server's
plugins
folder - Restart your server
- The plugin will generate default configuration files
MoonPillars is easy to configure! With its built-in admin menus and many more features, setting up your games has never been easier. To start creating your own games, use the following command:
/mpa setup <Name>
Upon execution, you will be teleported to an empty world with three special items in your inventory:
Book
- Click with this item to open a GUI where you can edit all game settings
- Configure everything from game rules to team settings
Stick
- Use this to select and set player spawn locations
- Perfect for configuring team spawns and individual starting positions
Feather
- Click to select the main spawn lobby location
- This lobby is used as the waiting area for your games
- Shift-click to set the teleport spawn location where players will be sent after the game
All these tools make it simple to set up your games without needing to edit configuration files manually!
Once you've finished editing the map, you'll need to restart the server. This is because MoonPillars preloads all games during startup for several important reasons:
Performance Optimization
- Prevents lag spikes during game starts
- Ensures smooth player transitions between games
- Optimizes memory usage during gameplay
Data Integrity
- Validates all game configurations before they're needed
- Prevents potential conflicts between different game instances
- Ensures all required resources are available
Technical Stability
- Creates clean game instances for each session
- Prevents memory leaks from previous games
- Maintains consistent game state management
MoonPillars supports an extensive collection of placeholders that can be used in various contexts such as scoreboards, chat messages, and GUIs. Below is a comprehensive list of all available placeholders.
Player Statistics
%mpa_wins% - Total wins
%mpa_level% - Current player level
%mpa_level_xp% - Current XP points
%mpa_level_xp_needed% - XP needed for next level
%mpa_shards% - Total shards collected
%mpa_winstreak_current% - Current win streak
%mpa_winstreak_highscore% - Highest achieved win streak
%mpa_games_played% - Total games played
%mpa_game_ratio% - Win/loss ratio (percentage)
%mpa_games_losses% - Total games lost
Game Information
%mpa_games_max_players% - Maximum players allowed
%mpa_games_min_players% - Minimum players required
%mpa_games_current_players% - Current players in game
%mpa_games_players_started_count% - Players at game start
Game Status
%mpa_game_info_{gamename}_active% - Number of ongoing games
%mpa_game_info_{gamename}_total% - Number of preloaded games
%mpa_game_players_left% - Remaining players
%mpa_game_teams_left% - Remaining teams
%mpa_game_id% - Current game ID
%mpa_game_spectators_total% - Current spectator count
%mpa_game_displayname% - Game display name
Team Information
%mpa_game_team_player% - Player's team
%mpa_game_team_player_name% - Player's team name
%mpa_game_team_{gamename}_{team}_color% - Team color (e.g., BLUE | &B)
%mpa_game_team_${player}_{team}_color% - Player's team color in current game
Timer Information
%mpa_game_timer% - Remaining game time
%mpa_item_timer% - Time until next random item
%mpa_lava_timer% - Time until next lava rise (/vote event)
Leaderboard Information
%mpa_leaderboard_{stats}_{place}_value% - Value for specific leaderboard position
%mpa_leaderboard_{stats}_{place}_name% - Player name for specific position
Important Notes:
{gamename}
refers to the full game world name (e.g., Mini-Clouds1v1v1v1-1)- Team names are case-sensitive (e.g., Team1, Team2, Team3)
- Available leaderboard stats: Shards, Level, XP, and Wins
Overview
MoonPillars features a powerful custom command system that allows you to create complex command structures with infinite argument depths. All commands can be configured in the commands.yml
file.
Available Command Actions
[COMMAND:PLAYER] <command> - Executes command as player
[COMMAND:CONSOLE] <command> - Executes command as console
[MESSAGE:PLAYER] <message> - Sends message to player
[MESSAGE:CONSOLE] <message> - Sends message to console
[INVENTORY:CLOSE] - Closes current inventory
[INVENTORY:OPEN:${GUI}] - Opens specified GUI menu
[JOINGAME:CUSTOM:${map}] - Joins specific game map
[JOINGAME:RANDOM] - Joins random game
[COSMETIC:BUY:${SECTION}:${ID}:${PRICE}] - Purchase cosmetic item
[COSMETIC:SELECT:${SECTION}:${ID}] - Select cosmetic item
[MOONGAME:FORCESTART] - Force starts current game
[MOONGAME:VOTE] - Opens vote menu
[MOONGAME:LEAVEGAME] - Leaves current game
[LANGUAGE:${LANGUAGE-ID}] - Changes player language
Variables
${ClickedPlayer} - Returns the player who executed the command
${arg-level1} - First argument value
${arg-level2} - Second argument value
${arg-level3} - Third argument value
Creating Custom Commands Let's walk through how to create custom commands in MoonPillars. We'll explore this with practical examples and step-by-step instructions.
Basic Command Structure
Commands:
1: # Unique command ID
Command: "commandname" # The command without /
Permission: "permission.node" # Permission required (or "none")
Aliases: ["cmd", "cmdname"] # Optional command aliases
Commands: # Actions to execute
- "[ACTION:TYPE] arguments"
Step-by-Step Example
Let's create a custom /hub
command with multiple actions:
Commands:
1:
Command: hub
Permission: "none"
Aliases: ["lobby", "leave"]
Commands:
- "[MESSAGE:PLAYER] &aTransporting you to the hub..."
- "[MOONGAME:LEAVEGAME]"
- "[COMMAND:CONSOLE] spawn ${ClickedPlayer}"
Creating Commands with Arguments Here's how to create a command with multiple argument levels:
Commands:
1:
Command: game
Permission: "mp.game"
Commands:
- ""
Args:
1:
Arg: "join" # First argument (/game join)
Commands:
- "[JOINGAME:RANDOM]"
2:
Arg: "play" # First argument (/game play)
Args:
1:
Arg: "solo" # Second argument (/game play solo)
Commands:
- "[JOINGAME:CUSTOM:Solo]"
2:
Arg: "duos" # Second argument (/game play duos)
Commands:
- "[JOINGAME:CUSTOM:Duos]"
Advanced Example: Shop Command Here's a more complex example showing multiple features:
Commands:
1:
Command: shop
Permission: "none"
Aliases: ["store"]
Commands:
- "[INVENTORY:OPEN:shop.yml]" # Default shop command opens GUI
Args:
1:
Arg: "buy" # /shop buy
Args:
1:
Arg: "cage" # /shop buy cage
Args:
1:
Arg: "1" # /shop buy cage 1
Commands:
- "[COSMETIC:BUY:CAGES:1:75]"
2:
Arg: "2" # /shop buy cage 2
Commands:
- "[COSMETIC:BUY:CAGES:2:100]"
2:
Arg: "preview" # /shop preview
Commands:
- "[INVENTORY:OPEN:preview.yml]"
Important Tips:
- Each command must have a unique ID number
- Arguments are processed in order (level1 ā level2 ā level3)
- Use empty Commands: [""] when you only want to use argument-based commands
- Variables like ${ClickedPlayer} can be used in any command action
- Multiple actions can be executed in sequence
- Permission "none" makes the command available to everyone
Best Practices:
- Keep your command structure organized and logical
- Use meaningful argument names
- Include helpful messages for users
- Consider adding aliases for common misspellings
- Test all argument paths before deploying
Overview
MoonPillars features a comprehensive cosmetics system that allows you to create custom cages, particles, and more. The system is configured through two main files: cosmetics.yml
and custom GUI files.
Cosmetics Configuration
Configure your cosmetics in cosmetics.yml
:
Settings:
Default-Settings:
Cages: "Default1.schem" # Default cage schematic
Bow_Particle: FLAME # Default bow particle effect
Kill_Particle: FLAME # Default kill particle effect
Win_Particle: FLAME # Default win particle effect
# Custom Cage Configuration
Cages:
1:
Cage: "cage_1.schem"
2:
Cage: "cage_2.schem"
3:
Cage: "cage_3.schem"
4: # Adding a new cage is simple
Cage: "cage_4.schem" # Just increment the ID and specify the schematic
# Particle Effects Configuration
Particles:
Bow:
1:
Particle: FLAME
2:
Particle: HEART
3: # Adding a new particle effect
Particle: SOUL_FIRE_FLAME # Just add a new ID with the particle type
Kill:
1:
Particle: EXPLOSION_LARGE
2:
Particle: TOTEM
Win:
1:
Particle: CUSTOM_ANVILRAIN
2:
Particle: CUSTOM_PIGS
How to Add New Cosmetics
- Adding a New Cage:
Cages:
4: # New unique ID number
Cage: "cage_4.schem" # Path to your schematic file
- Adding a New Particle Effect:
Particles:
Bow: # Particle category (Bow/Kill/Win)
3: # New unique ID number
Particle: SOUL_FIRE_FLAME # Particle effect name
Important Notes:
- Always use unique ID numbers for each cosmetic
- Keep schematic files in the correct directory
- Follow the existing naming convention
- Restart the server after adding new cosmetics
- Test new cosmetics before deploying
- Back up your configuration before making changes
Overview
Create custom GUI menus easily by creating YAML files in the ./MoonPillars/Menus/
directory. Each GUI can have its own unique configuration, commands, and appearance.
Creating a New GUI
- Navigate to
./MoonPillars/Menus/
- Create a new
.yml
file (e.g.,cosmetics-menu.yml
) - Copy this template and customize it:
Settings:
Gui-Title: "&aCustom Menu" # Menu title with color codes
Gui-Size: 45 # Sizes: 9,18,27,36,45,54
Command: /custom-menu # Command to open this GUI
aliases: # Alternative commands
- custommenu
- cmenu
Permissions:
Required-Permission: true
Permission: "MoonPillars.CustomMenu"
Permissions-Denied: "&cNo permission!"
Gui:
# Border Items (Decoration)
1:
DisplayName: "&f"
Lores:
Slot: [0, 1, 9, 7, 8, 17, 27, 35, 36, 37, 43, 44]
Item: BLUE_STAINED_GLASS_PANE
Glowing: false
Commands:
# Functional Item Example
2:
DisplayName: "&eCage Shop"
Lores:
- "&7Click to open the cage shop!"
- "&7Buy awesome cages here!"
Slot: 22
Item: CHEST
Glowing: true
Commands:
- "[INVENTORY:OPEN:cages-shop.yml]"
Example GUIs
- Cosmetics Shop GUI (
cosmetics-shop.yml
):
Settings:
Gui-Title: "&b&lCosmetics Shop"
Gui-Size: 54
Command: /cosmetics
aliases:
- shop
- cosm
Permissions:
Required-Permission: true
Permission: "MoonPillars.Shop"
Permissions-Denied: "&cNo shop access!"
Gui:
1:
DisplayName: "&aCages"
Lores:
- "&7Browse all available cages"
Slot: 20
Item: IRON_BARS
Glowing: true
Commands:
- "[INVENTORY:OPEN:cages-menu.yml]"
2:
DisplayName: "&aParticles"
Lores:
- "&7Browse all particles"
Slot: 22
Item: BLAZE_POWDER
Glowing: true
Commands:
- "[INVENTORY:OPEN:particles-menu.yml]"
- Settings Menu (
settings-menu.yml
):
Settings:
Gui-Title: "&eā Settings"
Gui-Size: 27
Command: /settings
aliases:
- options
Permissions:
Required-Permission: false
Gui:
1:
DisplayName: "&aLanguage Settings"
Lores:
- "&7Change your language"
- "&7Current: &eEnglish"
Slot: 11
Item: BOOK
Glowing: false
Commands:
- "[INVENTORY:OPEN:language-menu.yml]"
2:
DisplayName: "&aGame Settings"
Lores:
- "&7Modify your game preferences"
Slot: 15
Item: REPEATER
Glowing: false
Commands:
- "[INVENTORY:OPEN:game-settings.yml]"
GUI Item Properties
DisplayName: "&aItem Name" # Item display name
Lores: # Item description
- "&7Line 1"
- "&7Line 2"
Slot: 0 # Single slot or [multiple, slots]
Item: DIAMOND # Material type
Glowing: true/false # Enchant effect
Commands: # Actions when clicked
- "[ACTION:TYPE] arguments"
Available GUI Actions
[COMMAND:PLAYER] <command> - Executes command as player
[COMMAND:CONSOLE] <command> - Executes command as console
[MESSAGE:PLAYER] <message> - Sends message to player
[MESSAGE:CONSOLE] <message> - Sends message to console
[INVENTORY:CLOSE] - Closes current inventory
[INVENTORY:OPEN:${GUI}] - Opens specified GUI menu
[JOINGAME:CUSTOM:${map}] - Joins specific game map
[JOINGAME:RANDOM] - Joins random game
[COSMETIC:BUY:${SECTION}:${ID}:${PRICE}] - Purchase cosmetic item
[COSMETIC:SELECT:${SECTION}:${ID}] - Select cosmetic item
[MOONGAME:FORCESTART] - Force starts current game
[MOONGAME:VOTE] - Opens vote menu
[MOONGAME:LEAVEGAME] - Leaves current game
[LANGUAGE:${LANGUAGE-ID}] - Changes player language
Best Practices:
- Use meaningful file names
- Organize GUIs logically
- Test all buttons and commands
- Keep consistent styling
- Use clear descriptions
- Include helpful lore text
- Consider permission hierarchy
- Make intuitive layouts
Tips:
- Copy existing GUIs as templates
- Test GUIs before deploying
- Use color codes for better visibility
- Keep menus simple and intuitive
- Add borders for better appearance
- Include back buttons in sub-menus
- Use appropriate inventory sizes
- Consider mobile/console players when designing
MoonPillars uses a straightforward permission system to manage access to different features. Here's a comprehensive list of all available permissions:
Basic Permissions
mpa.joingame.* - Allows player to join games
mpa.party.* - Access to all party commands and features
Admin Permissions
mpa.admin - Full administrative access (includes map editor)
Common Usage Examples:
- Basic Player Setup
permissions:
- mpa.joingame.* # Allow game access
- mpa.party.* # Allow party features
- Admin Setup
permissions:
- mpa.admin # Full administrative access
Important Notes:
- Permissions are case-sensitive
- Wildcard (*) permissions automatically grant all sub-permissions
- Always use the most specific permission needed
- Admin permission automatically includes all basic permissions
Future Updates: More permissions will be added in future updates to provide finer control over:
- Cosmetics access
- GUI menus
- Special features
- Game modes
- Party sizes
- Admin commands
If you need help or want to report a bug, please visit our discord server.