On Discontinuing Pore

Well, we're officially killing Pore. We had fun developing it over the past year and a half(!), but unfortunately we believe it's no longer worth the effort to continue work on it. I'll highlight our main reasons for this conclusion below.

There Are Only Two of Us

Since its inception, Pore has been developed almost exclusively by myself and Minecrell. It's a fairly large project, and building it with a two-person team is very difficult and requires a great deal of effort. Additionally, we have lives and academics/other projects that prevent us from dedicating a sufficient amount of time to Pore. Subsequently, we believe that we won't be able to finish the implementation before the API bridge or even Sponge itself is long obsolete.

Sponge Has Become Increasingly Different from Bukkit

We started Pore right at the inception of Sponge, a bit before the first API commit had even been made. During its infancy, Sponge was based more or less off of Bukkit, and this made bridging the two APIs relatively easy. However, as time went on, it diverged more and more, with very breaking API updates occurring frequently. This made bridging increasingly difficult. At this point in time, it's sufficiently different from Bukkit that Pore would be (and for that matter already has been) required to include some very complex implementations to match completely different designs for services like events or data, often more complex than we're able to reasonably manage.

Many Plugins Probably Won't Work

Many plugins use NMS. Pore doesn't inherently support NMS. So why can't we add support?

Technical Explanation

The primary issue with this is that Bukkit's mappings are different from MCP's. Okay, no problem, just use ASM to remap the references to NMS members, right? Unfortunately, it's not that simple. Bukkit introduced a system a while back designed to safeguard against use of NMS. Because of this, many plugins now use reflection to access these members, which makes it much more difficult to provide support.

Compounding this is the fact that plugins tend to construct the qualified names dynamically for the sake of backwards- and forwards-compatibility, which makes it all but impossible to provide any support.

Non-Technical Explanation

NMS is essentially what we call it when a plugin wants to do something not supported by Bukkit, so it directly accesses Minecraft code instead. Unfortunately, Bukkit added a safeguard a while back to prevent NMS-using plugins from potentially breaking things when used with different CraftBukkit versions than the one they were built for. This caused developers to start using a system called reflection. The details of how it works aren't important, but use of reflection makes it all but impossible to support NMS.

Even Plugins That Work Probably Wouldn't Work with Many Sponge Mods

Sponge adds the ability for mods to add features such as custom blocks, items, biomes, you name it. However, it's basically impossible for Pore to support this, since Bukkit only has a fixed set of these things. For instance, when plugins request the type of a block, they expect a particular answer which is contained by a predefined list of block types (AIR, STONE, DIRT, etc.). If Pore can't translate a custom type to one on the list, it doesn't know how to respond and throws an error.

Why can't we just pretend it's a normal block type? Because plugins might behave erratically if we trick them into thinking a block is a certain type when it really isn't. This concept extends to all custom things Sponge allows for.

Sponge Is about New Beginnings

Sponge was founded on the notion of creating a brand new plugin API from scratch, without the burden of continuing an old and potentially outdated project like Bukkit. Pore directly contradicts this philosophy by allowing servers to run plugins built for the old platform on the new one. We'd much rather users seek native Sponge plugins for what they want to accomplish, and in discontinuing Pore we believe we're encouraging them to do so.


I've had fun developing Pore. It's the largest project I've maintained to date, and I've met a lot of great friends doing so. But, Minecrell and I truly believe it's time to say goodbye to it. So long, and thanks for all the fish.

Posted by Max Roncace on