This commit changes how MASpawnThread is started. Instead of simply scheduling a task and letting it run whenever, we now explicitly tell it to stop when the arena ends. This matters, because if the scheduled task does not get cancelled, it will run at the scheduled time. MASpawnThread's run() method has an early return to stop whenever the arena isn't running, but with unlucky timing, it's possible to start a new arena session before the task runs again, meaning the same MASpawnThread keeps scheduling itself on the previous scheduling loop. Instead of this whacky approach, we now specifically have MASpawnThread track its own BukkitTask. Upon arena start, we instantiate a new MASpawnThread and call its start() method, which in turn schedules itself and stores a reference to the associated BukkitTask. Upon arena end, we call the MASpawnThread's stop() method, which explicitly calls the BukkitTask's cancel() method, effectively stopping/unscheduling the task. This fixes the (very) long-standing "double wave spawner" bug that we haven't been able to reproduce for so long. Hooray!
MobArena

MobArena is an arena-style minigame for Spigot-based Minecraft servers
Getting Started
If you don't want to compile the plugin yourself, grab a release artifact from one of these two sites:
The wiki here on Github should have all the information you need to get started using the plugin.
Getting Help
If you run into problems or need help with something, feel free to hop on the MobArena Discord server or IRC channel to have a chat:
- Discord: Instant Invite
- IRC (#mobarena @ EsperNet): KiwiIRC Web Client
Remember, though, that these communication channels are idle chat, which means you likely won't get a response immediately. It could take anything from a couple of seconds to a day, but your message will be seen.
Contributing
Found a bug, got a suggestion, or want to dig into the code base? There are many ways to contribute to the project!
Get started here: Contributing