There's a lot of demand for arena plugins out there. And the ones released, have a lot of downloads. People try to make these, and then quite when they can't figure out how to do it. Weeelll, here goes! I'm going to make a few classes based off my new Minecraft Brawl plugin, and put them here. Alright, start reading! So first things first, you need an arena object to start off with. So things we'll need: Name: We have to be able to tell arenas apart (for most arenas) Two points defining the boundaries: This is to check if a player leaves, and do stuff like not allowing breaking in the arena. A spot to go to when it starts A spot to go to when it finishes To see what our arena object looks like, check out thisgist. So you have a basic arena object that holds a few variables. But we'll need to add/remove players. I'm going to add a new class called PlayerManager, and each arena has their own PlayerManager. What is everything a player manager would need? Add/Remove Players Separate Inventories Teleporting I'll add a subclass to the PlayerManager to hold the player's inventory and such things. Here is our now arena class, with the PlayerManager. And here is our new PlayerManager. So now we can add & remove players, restore inventory, and teleport them to where they need to go (without taking fall damage!). Pretty simple right? Now we want an easy way to keep track of arenas. We'll create a Arena Manager class, to add, remove, and check if the said arena exists. We will also have the arena add itself when it's defined. Here is the ArenaManager. Here is the new Arena. Alright so we'll want to be able to save these arenas to file, then load them again. There's a few difficult things, such as saving locations. I typed up a modified version of my LocationUtils class from MCBrawl. All it does, is convert Locations to and from a single string (taking use of Java's .split() method). You can find the util LocationUtils here. So now I'll need a way to take use of this. I am going to make a method inside of the arena object for this called save. So while we have a way to save it, we need to load it. If you haven't made a main class yet, I suggest you make one now. So we'll want to load all the arenas from inside the config when the plugin starts. Let's loop through a Arenas section will which exist in the config once we save our arenas. You can find an example class here. You're done! If you want to save an arena, here's a example: Code:java arena.save(getConfig(), "Arenas"); While the config can be anything, make sure to make it Arenas. Either that, or change what section we loop through in the onEnable. You can find the new LocationUtils here. You can find the new ArenaTutorial (Main Class) here. You can find the modified Arena here. So we can save/load arenas from the config. What next? As per-request, I decided to all rollbacking. Here goes! We're going to be using a runnable for this. To make this easier and for the sake of the tutorial, I modified the ArenaTutorial (main plugin class) to have a public static instance of itself. Alright, on to the real stuff. So first thing that we need to do, is get the minimum and maximum points of the arena. I'm going to check in the Arena constructor which point is which, and then set them again. After that, we'll need a list of blocks in the arena. Because we have these two points, we can loop through them easily. We can loop through them all (3 for loops) and add each state to a list. Why would we add the state to the list? The BlockState of a block contains all the information about it. It contains direction, skull type, chest items, etc. With this, we can reset all the data later. So now that we have our original blocks, we're going to add a rollback method. This will create a new instance of a new class called RollbackRunnable which will roll back our blocks. If you want to see how that works, you can check out the code. It's pretty well commented. Modified ArenaTutorial class here. Modified Arena class here. New RollbackRunnable class here. Next tutorials: Starting/Stopping the arena (including rollback!) Adding teams & Multiple Spawns NOTE!: If you want to see my status on Minecraft Brawl / how I made a more advanced arena (like restoring things like gamemode on join/leave, lives, IconMenu for classes, removing a life when they leave they arena, etc) you can find it all on github here. Thanks for reading! Later on I'll update this with some more advanced stuff. I just wanted to show you guys the basics of arena making.