ServiceManager

400 Downloads

ServiceManager

The Bukkit Networking API

Run "Services" on the same port as Minecraft


WARNING: MAKE BACKUPS! I cannot warn you enough about this. Mainly, make a backup of your .jar file, in case you want to undo the changes made by the plugin.
THE BUKKIT STAFF WILL NOT BE PROVIDING SUPPORT FOR MODIFIED VERSIONS OF CRAFTBUKKIT GENERATED BY THIS PLUGIN - YOU USE THIS AT YOUR OWN RISK. IF YOU NEED SUPPORT, YOU COME HERE.
This will modify your craftbukkit .jar file. Though the changes we make are minimal (searching for the plugin via the Bukkit PluginManager, and either calling my method inside the ServiceManager class, or if it isn't found, continuing vanilla behaviour), these changes still exist, and therefore, you should be careful. This is a EXPERIMENT, not a fully-featured plugin. You should treat it as such.
ServiceManager will most likely NOT work behind BungeeCord or other proxy solution due to them not supporting these custom "Services", as they only support the Minecraft protocol themselves.
MAKE BACKUPS!


And thats it for the disclaimers...


What is it?

ServiceManager is a simple API to allow people to register custom "Services" with the networking component of Minecraft. What does this mean? You can run many cool things (such as a website, or some sort of administration panel), from the same port as Minecraft. This is ideal for shared hosting, as you have to pay to gain access to additional ports or the entire IP address (which is fair, room in the IPv4 stack is gradually becoming more expensive as we "run out of room" on the internet, and server hosters have to compensate).

What does it do currently?

It provides a fairly simple API to register any service you like, with a few restrictions (see below). We have provided 2 examples within the plugin, a simple HTTP (via GET requests) responser (however, it isn't enabled by default), for gathering player count etc., and a legacy Minecraft kicker, which kicks players connecting with 1.6.4 or below with a message telling them to update (generally, servers don't actually respond to outdated clients connections).

Are there any restrictions?

Of course, this isn't perfect. Don't get too excited about this.

  • The client must send 2 bytes upon initial connection (or what we like to call a "Signature"), and the server cannot send a initial message before the client says something (i.e, SSH doesn't seem to work, nor does FTP because of these requirements)
  • Because my code gets invoked upon most Netty receive events, speed decreases are almost certain, though it seemed stable enough in my (short) testing.
Source code?

Source code for the people who love living on the edge can be found at GitHub.