Documentation

MoonPillars Documentation

Last updated: 2/28/2025

MoonPillars DocumentationGetting Started

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!

Installation
  1. Download the latest version of MoonPillars
  2. Place the .jar file in your server's plugins folder
  3. Restart your server
  4. The plugin will generate default configuration files
Configuration

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:

  1. Book

    • Click with this item to open a GUI where you can edit all game settings
    • Configure everything from game rules to team settings
  2. Stick

    • Use this to select and set player spawn locations
    • Perfect for configuring team spawns and individual starting positions
  3. 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!

Important: Preloading Games

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:

  1. Performance Optimization

    • Prevents lag spikes during game starts
    • Ensures smooth player transitions between games
    • Optimizes memory usage during gameplay
  2. Data Integrity

    • Validates all game configurations before they're needed
    • Prevents potential conflicts between different game instances
    • Ensures all required resources are available
  3. Technical Stability

    • Creates clean game instances for each session
    • Prevents memory leaks from previous games
    • Maintains consistent game state management
PlaceHolders

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
Custom Commands

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:

  1. Each command must have a unique ID number
  2. Arguments are processed in order (level1 ā†’ level2 ā†’ level3)
  3. Use empty Commands: [""] when you only want to use argument-based commands
  4. Variables like ${ClickedPlayer} can be used in any command action
  5. Multiple actions can be executed in sequence
  6. 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
Cosmetics System

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

  1. Adding a New Cage:
Cages:
  4:                                   # New unique ID number
    Cage: "cage_4.schem"              # Path to your schematic file
  1. 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
Custom GUIs

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

  1. Navigate to ./MoonPillars/Menus/
  2. Create a new .yml file (e.g., cosmetics-menu.yml)
  3. 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

  1. 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]"
  1. 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:

  1. Use meaningful file names
  2. Organize GUIs logically
  3. Test all buttons and commands
  4. Keep consistent styling
  5. Use clear descriptions
  6. Include helpful lore text
  7. Consider permission hierarchy
  8. 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
Permissions

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:

  1. Basic Player Setup
permissions:
  - mpa.joingame.*      # Allow game access
  - mpa.party.*         # Allow party features
  1. 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
Support

If you need help or want to report a bug, please visit our discord server.