MazePvP
MazePvP
Tired of fighting other players on a dull, easy-to-navigate terrain? With this plugin, you can fight in a maze which is constantly changing shape while you're not looking! Even the players can reshape the maze with the right items. Beware of the mobs that appear and be on a lookout for treasure chests.
The source of this plugin is available in the jar files and also on github.
Features
- Ability to create multiple mazes of any size
- Indestructible bosses that can teleport and kill players instantly (by default)
- Projectile items such as eggs, snowballs and ender pearls behave differently inside mazes
- Mobs and chests randomly appear
Chasms
Holes can appear in the floor either naturally or because of players. They are filled with spikes, and anyone who falls into them instantly dies, so be sure not to fall! These can actually be jumped over if the timing and angle is exactly right.

Items
When a player enters a maze, he will get some items to use. When exiting the maze, the inventory gets cleared, so don't go near the exit if you are still planning to fight inside. You can find more items inside treasure chests, and you can store them in ender chests so that you don't lose them after dying. Some items behave differently inside mazes.
Eggs
Eggs can be used to break the walls and floor. However, they do not break the "pillars" that are marked as mossy stone bricks. The floor will smoke for a few seconds before disappearing, so use that time to find safe footing!
Snowballs
You can use snowballs to restore parts of the floor or walls. Just throw them at a pillar or in a chasm.
Ender pearls
Instead of teleporting to where the pearl landed, you will teleport to a random location inside the maze, and you won't suffer any damage. These can really come in handy if you're falling into a chasm or facing a lot of enemies!
Bosses
Bosses are zombies with black clothes and a wither skeleton mask. By default, one will appear in every maze. He can teleport to any location, so you never know when you'll encounter him! If he falls into a chasm, he will teleport away before hitting the bottom. His HP and strength can be customized in the config file. By default, he cannot be killed and he can kill players with one hit.

How to use/install, quick setup
To install the plugin, just drop the jar in your plugins folder.
Here's a quick example setup:
- Create a two-floored, 4x4 maze named "myMaze" where you are standing by using the command /mpcreate myMaze 4 2 2
- If you'd like your players to enter the maze using join signs instead of the entrances, put three signs next to each other somewhere, look at the first one and type /mpjoinsign myMaze
- Change the minimum amount of players by typing /mpsetplayernum myMaze 1 5
This will allow at most 5 players to join, and 1 player is enough to start the fight. - If you want players to be transported to a waiting area while they are waiting for other players, build your waiting room and inside it, type /mpsetwp myMaze
- Put up a sign somewhere in the waiting area, then look at it and type /mpleavesign myMaze
This will create a sign that allows players to leave the waiting area if they get bored.
Now you're set! To test your maze, click on the join sign to get transported inside it. If you die 3 times or disconnect, you will return back to the join sign with your previous items.
You should only set the minimum players to 1 if you're testing the maze. When it's ready for other players to use, set it to a higher number.
Check the commands section below for details about the commands. You can also change the text of the signs and much more by editing the config.yml. Check the configuration section to see how.
Commands
These commands can be used to manage the mazes:
| /mpcreate <name> <width> [height] <entrancenum> [X] [Y] [Z] | Creates a maze with name <name> at [X] [Y] [Z] (or player's position if not specified). <width> is the number of 5x5 passages the maze should have, (for example, setting it to 5 will generaze a 25 block wide maze). [height] is the number of floors the maze should have (1 if omitted). Note that larger size mazes will take more time to generate (widths above 10 might take several seconds). <entrancenum> is the number of entrances/exits the maze should have. |
| /mpdelete <name> | Removes the maze with the specified name, deleting all its blocks and killing all mobs inside it |
| /mplist | Lists all mazes in the current world and their locations |
| /mpclear <name> | Clears a maze, making it ready for a new fight. It removes all entities in it and fills the chasms |
| /mpjoinsign <name> | Turns the sign in front of the player into a join sign for the specified maze. If the join sign's text is longer than 4 lines, there must be more signs next to each other. (If you use the default text, you need to have 3 signs next to each other) |
| /mpsetplayernum <name> <minplayers> <maxplayers> | Sets the minimum amount of players needed to start a fight and the maximum amount of players that can join. This only applies to mazes with join signs. |
| /mpsetwp <name> [X] [Y] [Z] | Sets the waiting place position for a maze to the specified coordinates, or to the players position if they are left out. When a player joins that maze using join signs, he gets teleported to the waiting place. |
| /mpleavesign <name> | Turns the sign in front of the player into a "leave sign" that can be used to leave the waiting place of the specified maze. This sign should be inside the waiting place of that maze |
| /mpremovewp <name> | Removes the waiting place for a maze. |
| /mpstopfight <name> | Stops the fight in the specified maze. This only applies to mazes with join signs. |
| /mpset [mazename] <property> <value> | Used to set a property for a maze. The properties can be found in the maze's config file. If the maze name is omitted, the default property (that gets copied to newly created mazes) is set instead. You cannot set the item properties (like bosses.bossX.drops or startItems) with this. For that, use /mpadditem or /mpremoveitem instead |
| /mpget [mazename] <property> | Shows the current value of the specified property of a maze. If the maze name is omitted, it shows the default property instead |
| /mpadditem [mazename] <property> [itemID] [amount] [weigh] | Adds an item to an item property, like startitems. If mazename is omitted, the default property is set. If itemID, amount and weigh is omitted, the item in the player's hand is used (this only copies the id and amount of the item, but special data like enchantments aren't copied in the current version of this plugin). If you specify something like startitems.item2 for property, that item will be overwritten instead of a new item getting added |
| /mpremoveitem | There are two ways to use this command: |
- /mpremoveitem [mazename] <property> [itemID] [amount], the property being something like startitems
In this case, the item with the specified id and amount gets removed from the property. If itemID and amount is omitted, the item in the player's hand is used. - /mpremoveitem [mazename] <property>, the property being something like boss.drops.item2
In this case, the item specified by property is removed.
| /mpaddboss [mazename] | Adds a new boss to a maze (or to the default config if mazename is omitted) with default properties |
| /mpremoveboss [mazename] <bossNum> | Removes the boss with number bossNum from the maze |
| /mpcopyboss [mazename] <bossNum> | Adds a new boss to the maze by copying the boss with number bossNum |
| /mprecover <mazename> | If there's saved player data for a maze (can only happen when the server crashed during a fight), this command recovers the items, enderchest content, gamemode and position of the players who were inside the maze |
Permissions
mazepvp: Gives access to all commands in MazePvP. By default, this is given to all ops.
Configuration
This plugin has a config.yml file, in which various settings can be changed. Each maze also has its own config file in the Minecraft world folder with the name <mazename>.yml. When a new maze is created, it gets the configuration values from the main config.yml file.
Some settings can be changed individually for each maze by editing their config file or with the /mpset command. These settings will be marked in italics.
| showHeadsOnSpikes | Whether the heads of fallen players and mobs should appear on the spikes |
| canPlayersSpectate | Whether players can enter the maze as spectators when the fight has already started |
| canSpectatorsSeeEachOther | Whether spectating players can see other spectators |
| replaceMobsWithBoss | Whether a boss should replace another mob when he respawns. This could be useful when there's a limit on how many mobs are allowed per chunk |
| protectMazes | Whether maze blocks should be protected from players breaking them |
| fightStartDelay | The amount of seconds before a fight starts after enough players have joined. You can set this to 0 if you want the fight to start immediately, but then there won't be time for additional players to join at the last moment |
| playerLives | The amount of lives a player has in a fight. If they run out, the player gets thrown out of the maze. |
| bosses.bossCount | The number of bosses in the maze |
| bosses.bossX.name | The name of the boss that should appear in the chat |
| bosses.bossX.hp | The health of the boss, in half-hearts. For a normal zombie, this value would be 20. If this is 0 or less, the boss will have infinite HP |
| bosses.bossX.attack | The strength of the boss. If this is 0 or less, the boss will have infinite attack |
| bosses.bossX.mazeLevel | The maze floor that the boss is bound to (1, 2, 3, etc.) 0 if he's not bound to any floor |
| bosses.bossX.drops.itemX | Items that the boss could drop. An item with higher weigh will have a higher chance of getting dropped |
| bosses.bossX.drops.itemCount | This number indicates how many items there are in bosses.bossX.drops.* For example, if bosses.bossX.drops has item1 and item2 set, this value should be 2 |
| commands.* | These are commands that get executed at certain events. You can use special symbols that get substituted as something else. These symbols are: |
- <player>: The name of the player who triggered the event
- <allPlayers>: If this is in the text, the command will execute for every player and their names will be substituted where this is found
- <otherPlayers>: Same as <allPlayers>, except that it doesn't contain the player who triggers the event.
| commands.fightStarted | The command to execute when the fight starts. <player> takes no value |
| commands.fightRespawn | The command to execute when a player respawns. <player> is the name of the respawning player |
| commands.fightPlayerOut | The command to execute when a fighting player leaves the maze, either by quitting or by losing all lives. <player> is the name of the leaving player |
| commands.fightWin | The command to execute when a player wins. <player> is the name of the winning player |
For example, if you want to teleport all players to the respawning player, you should put the following into commands.fightRespawn:
tp <otherPlayers> <player>
| texts.* | These are the texts that are showed to the players on a sign or during a fight. You can use special symbols that get substituted as something else. These symbols are: |
- <name>: The name of the maze the text is referring to
- <currentP>: The current number of players that joined the maze
- <minP>: The minimum number of players needed to start the fight
- <maxP>: The maximum number of players allowed in the maze
- <remainingP>: The number of players that have to join before the fight can start. This is basically minP − currentP
- <state>: The state of the maze: This shows whether the fight has started or not
- <timeLeft>: The amount of seconds left until the fight starts. This should only appear in the countdown message
- <livesLeft>: The amount of lives the player has left. This should only appear in the respawn message
If you're not sure how to use these, check the default configuration file to see how they are used.
| texts.startedState | The text that should replace <state> when the fight has started |
| texts.waitingState | The text that should replace <state> when the fight hasn't yet started |
| texts.joinSign | The text that appears on a join sign. This can have multiple lines. If it has more than 4 lines, the rest of the text is shown on the next sign |
| texts.leaveSign | Same as texts.joinSign, just for the "leave sign" that is used to leave a waiting area |
| texts.joinBroadcast | The message that gets sent to joined players when another player joins or leaves |
| texts.joinBroadcastWhenFull | Same as texts.joinBroadcast, except that this is sent when the required amount of players have joined already |
| texts.countdown | The message that gets sent to joined players each second during the countdown |
| texts.fightStarted | The message that gets sent to joined players when the fight starts |
| texts.fightRespawn | The message that gets sent to a player when he respawns during a fight |
| texts.fightRespawnLastLife | Same as texts.fightRespawn, except that this is sent when the player has 1 life left |
| texts.fightPlayerOut | The message that gets sent to players still in fight when a player loses all lives |
| texts.fightWin | The message that gets to the last remaining player |
| texts.fightStopped | The message that gets sent when someone uses the /mpstopfight command |
| texts.onJoin | The message that gets sent when a player joins a maze |
| texts.onLeave | The message that gets sent when a player leaves a maze |
| texts.onJoinAfterFightStarted | The message that gets sent when a player tries to join when the fight has already started |
| texts.onJoinWhenMazeFull | The message that gets sent when a player tries to join when the maze is full |
| texts.onJoinWhenAlreadyJoinedOtherMaze | The message that gets sent when a player tries to join a maze while he has joined another one |
| probabilities.groundReappear | The rate at which chasms in the ground will heal. If this is set to a low value, they will disappear slower |
| probabilities.chestAppear | The chance for a chest to appear at certain intervals. |
| probabilities.enderChestAppear | The chance for an ender chest to appear at certain intervals. |
| probabilities.mobAppear | The chance of a mob appearing at certain intervals. |
| chestItems.itemX | Items that can appear inside chests. Items with higher weigh will have a higher chance of appearing in treasure chests. |
| chestItems.itemCount | Like bosses.bossX.drops.itemCount, this number indicates how many items there are in chestItems.* For example, if chestItems has item1 through item10 set, this value should be 10 |
| startItems.itemX | Items that players get when entering a maze |
| startItems.itemCount | Like bosses.bossX.drops.itemCount, this number indicates how many items there are in startItems.* For example, if startItems has item1 through item4 set, this value should be 4 |
| blocks.* | These properties specify what kind of blocks the maze is made of. They store the block id and data of the blocks that make up some part of the maze. For example, if blocks.floor has the following value: |
98:1 98 98 98:1
98 41 41 98
98 41 41 98
98:1 98 98 98:1
That means that the floor has gold blocks in the middle, stone bricks on the sides, and mossy stone bricks at the four edges.
If these values are set using /mpset, then for the value you have to write all the blocks in each row as one line, with the values separated by some character that's not ":" (because that's used to specify the data value for a block). For example, you can change the floor to the above pattern with the following:
/mpset blocks.floor 98:1_98_98_98:1_98_41_41_98_98_41_41_98_98:1_98_98_98:1
| blocks.wall | The blocks for the walls of the maze |
| blocks.higherWall | The blocks for the walls of higher levels |
| blocks.outerWall | The blocks for the outermost walls |
| blocks.pillar | The blocks for the pillars (the ones that are by default covered with mossy cobblestone) |
| blocks.outerPillar | The blocks for the outermost pillars |
| blocks.floor | The blocks for the floor |
| blocks.higherWall | The blocks for the floor of higher levels |
| blocks.lowerFloor | The blocks for the part that's directly under the spikes |
| blocks.spikes | The blocks for the spikes in a chasm |
| blocks.ceiling | The blocks for the ceiling |
Support
If you have any suggestion or encounter a bug, post a comment or send me a PM!
-
View User Profile
-
Send Message
Posted May 1, 2014@catprowler
Thanks, I'm glad you like my plugin :) I checked the plugins you mentioned, and it seems that this is a problem with Essentials overwriting the respawn position. I fixed this, but I'd like to add some other stuff before releasing a new version, so I'll include this fix in the next version.
-
View User Profile
-
Send Message
Posted May 1, 2014@PlutoniumWeddingRing
Hi there, thank you so much for getting back to me. :D I tested it yesterday and it's awesome! I have multiverse on the server and arenas are set up in a different world than the main world. When I played and died, I spawned back at the main world spawn, not back in the game. The only way I got back in to the game was when I warped back into the arena world. This happened for each life until the game ended. I'm not sure if I was supposed to set something up to tell it where players should respawn when they die? I also have bukkit 1.7.9. Any sugguestions? I tried this plugin with only essentials, multiverse, and worldguard, but it still spawned me back to the main world spawn. Thank you :D
-
View User Profile
-
Send Message
Posted May 1, 2014@catprowler
There's only one permission: mazepvp, which should only be given to ops, as that allows them to create and delete mazes and change their settings. Players don't need any permissions, they can use the signs and eggs/snowballs/ender pearls without any permission.
One more thing, the blocks of the maze aren't protected in any way except from explosions, so you might want to use something like WorldGuard to disallow players from breaking through the walls (or have them play in adventure mode) (hmm... maybe I should add protection in the next version)
The join signs can be anywhere, and the players who click it get teleported either inside the maze once the fight starts, or to the waiting area if the maze has one.
I hope that was clear enough, but write if you have any questions.
-
View User Profile
-
Send Message
Posted Apr 30, 2014Hi there, by the way this looks like an amazing plugin. I'm not sure what permissions I am suppose to give the players. It looks like most of these are for op, except the text ones. Do they need any for joining, leaving, the egg, snowball, or ender pearl or for the blocks to break? For the 3 signs that are created to make a join sign for players can that be in a lobby outside of the maze and then they get teleported to a waiting area in the maze if I set one? Thank you.
-
View User Profile
-
Send Message
Posted Apr 24, 2014UPDATE (The new files will be visible once they're approved):
New config properties:
-
View User Profile
-
Send Message
Posted Apr 6, 2014@rnoa
Thanks for the bug report. I've fixed this, but there are still some things I'd like to add before releasing a new version, so I'll upload an unofficial fixed version of the plugin here.
-
View User Profile
-
Send Message
Posted Apr 5, 2014Hi! Got this error on the console lately http://pastebin.com/REdJ9EZR. Running on Spigot for 1.7.5 Please look into it.
-
View User Profile
-
Send Message
Posted Apr 1, 2014@jwkilo
Thanks, I'll see if I can find the cause but I'm not sure if I can reproduce it. Do the server logs have some error message from the time this happened? Those would help a lot in finding out where the problem is.
-
View User Profile
-
Send Message
Posted Mar 31, 2014Also I had an issue a few days ago.. apparently, the maze crashed while there were people in it. The signs cleared and everyone lost their enderchest contents (outside the maze). Not sure what happened but may be something for you to look into.
-
View User Profile
-
Send Message
Posted Mar 31, 2014@jwkilo
Thanks :) I'll see if I can add something like that. The most flexible solution is probably to have a command execute with the name of the winning player substituted, so that items or money or anything else can be given to him.
-
View User Profile
-
Send Message
Posted Mar 24, 2014Dude I love this plugin! Its awesome. I do have one suggestion though. Can you add a system to reward the winner with items or cash? Items would be easier I would think. That way you don't have to hook into vault.
I now use this plug in here \/
-
View User Profile
-
Send Message
Posted Mar 23, 2014UPDATE (The new files will be visible once they're approved):
I couldn't get the boss to despawn even when I limited the amount of mobs per chunk, but maybe the replaceMobsWithBoss option will fix that problem now.
-
View User Profile
-
Send Message
Posted Mar 14, 2014@rnoa
If there's a row of signs, they get cleared if one of them breaks, because they're not valid anymore. So it might be that someone broke a sign and got the row cleared. But if that's not what causes it, let me know, and I'll try to fix it.
-
View User Profile
-
Send Message
Posted Mar 14, 2014I have a little problem - leave sign clears itself every now and then, will check if it happens on every restart or not.
-
View User Profile
-
Send Message
Posted Mar 11, 2014@oraki23
Thanks :) I'll check it out when I have some time.
@everyone: Sorry for not updating for a while, hopefully I will be able to publish a new version of the plugin at the start of next week.
-
View User Profile
-
Send Message
Posted Mar 9, 2014Great plugin! Using it on my server! If you want to come to my server: togolcraft.servegame.com
(PM me if you want a rank on my server :) )
-
View User Profile
-
Send Message
Posted Feb 27, 2014@Droodiz
Hmm, that's weird. Does the console write any errors when you start the server? Also, what version of craftbukkit are you using? It might also be possible that the maze got corrupted somehow, can you try deleting and recreating the maze?
-
View User Profile
-
Send Message
Posted Feb 26, 2014It worked great for a long time but now it doesnt auto start when a player join the game, yea i have set it so the minimum of 1 player has to join for it to start. When I restart the server it works fine but after a while it doesnt auto start.. Really weird and I don't know how to fix it :(
-
View User Profile
-
Send Message
Posted Feb 18, 2014The special items don't work :(
-
View User Profile
-
Send Message
Posted Feb 20, 2014Please answer...