Mineuniverse
Log in Register
Plugins

PluginCatcher

Developer tool for catching mistakes
by m_baxter
Download Claim this project
10,014 downloads
0 likes
Updated Jun 30, 2026
0 hypes
Developer Tools

Note: This plugin is not a magic solution to problems.

PluginCatcher

PluginCatcher is a development tool for detecting potential plugin-based causes of server crashes. It is a complex plugin which will cause a slight performance hit on your server while it is active, in order to detect risky behavior by plugins. Currently it primarily detects situations that can lead to ConcurrentModificationException. It is important to note that this plugin cannot detect all scenarios leading to such crashes, but can certainly catch a large number.

Server Owners

Unless you know exactly what this does and why you're here, turn around now. Or contact mbaxter with your crash reports and he'll tell you if this will work.

Developers

Hey, you! Want to detect potential causes of CMEs in your plugins? Awesome! Let's get to work

What can cause CMEs?

The Minecraft server handles nearly all functionality on one thread, what we'll call the main thread. As such, most of its methods (and through that, most Bukkit API) are not designed to handle calls from other threads. Asynchronous calls made while the server is iterating or otherwise interacting with internal Collections which are not thread-safe have the potential to cause a CME. A big place where this comes up is plugin developers calling Bukkit API methods from the AsyncPlayerChatEvent.

Commands

There aren't any! Hah!

Permissions

None! Gotcha!

Configuration

There is one important config value, called onlydangerous. By default true, this setting determines what types of issues are reported. The default setting will only report potential server-killing CME causers. If you set it to false, it will do that plus detect other potentially bad async calls that could cause other issues on your own async thread.

The other config value is meow. If true, cat!

Data Output Location

The plugin outputs all of this info to its plugin folder in a file named async.log. It will log one line to console when it detects issues and logs them. If it stays empty, there hasn't been a potential problem yet. Nice work!

What does it output?

PluginCatcher attempts to figure out what plugin made the risky call by checking the stacktrace lines against plugins' loaded classes. If it finds a match (or matches) it records that plugin and version to the log. Otherwise it reports it as unknown source. Plugin guessing is presented purely for convenience. Never assume a listed plugin is the definite source.

Next, it prints the stacktrace, so you can see what plugin made the call, where it was made, etc. This is where you fix your code to not make that call async.

v1.7.9
MC CB 1.7.9-R0.1
Release 2014-05-11 Get
v1.7.5
MC CB 1.7.2-R0.3
Release 2014-04-06 Get
v1.7.1
MC CB 1.7.2-R0.2
Release 2014-01-19 Get
v1.7.0
MC CB 1.7.2-R0.2, CB 1.7.2-R0.1
Release 2013-12-21 Get
v1.6.4
MC CB 1.6.4-R1.0
Release 2013-09-28 Get
v1.6.2
MC 1.6.2
Release 2013-07-09 Get
v1.6.0
MC 1.6.1
Release 2013-07-04 Get
v1.5.2.1
MC CB 1.5.2-R1.0
Release 2013-06-07 Get
v1.5.2
MC CB 1.5.2-R0.1
Release 2013-05-05 Get
v1.5
MC CB 1.5.1-R0.2, CB 1.5.1-R0.1
Release 2013-04-20 Get
v1.4.1
MC CB 1.5.1-R0.1
Release 2013-04-06 Get
v1.4
MC 1.5.0
Release 2013-03-18 Get

More from m_baxter

Vanish No Packet
911,091
Anonymize
701
PlayerFlow
6,613
Annoyer
6,041
TagAPI
487,374
MonsterHunt
48,262

You Might Also Like

WorldGuard Custom Flags
WorldGuard Custom Flags
97,851
HoloAPI
Advanced and powerful holographic displays
93,959
Minequery
Minequery
91,099
SQLibrary
SQLibrary aims to streamline driver wrappers in Java for every database engine
85,675
WolfyUtilities
Utils and APIs: Config, Language and Inventory API, Protection Utils: WorldGuard, LWC, PlotSquared
84,728
DisguiseTester
Experiment with disguises!
9,677