Firstly, a Happy New Year to everyone!

It’s been almost four months since we started on this journey, and in that time we’ve been able to achieve a great deal of progress. In that time, we’ve set up our staff, development and leadership teams and have been hard at work laying the foundations for our future community through building both Sponge itself, as well as the services around it.

Progress Update

Towards Release

Before we can make a usable release:

The API part needs to be in a usable state. Writing an API has been a huge undertaking, but we feel that we have gotten to a point where the Sponge API is usable, though there’s still (and will always be) work to be done.

The implementation (which is the code that makes the API work) needs to be in a usable state. Our implementation lags somewhat behind progress on the API, primarily because the implementation team has had to wait for the API to be completed first to write for it. Our implementation team is also, admittedly, smaller than the API team at the moment.

(Note: We are not waiting for the API to be complete before making a release. The API has simply been moving a bit faster than the implementation.)

If you are a Java developer, there are ways to help with both the API and the implementation, and more details can be found later in this announcement. If you’re not… well, there are other ways to help too!

Sponge Documentation

@Inscrutable has been hard at work on the documentation. He’s done a fantastic job but now needs you, the community, to step in and help fill the blanks and correct any mistakes that you may find. You can engage with the Docs Team in the Sponge Documentation: One Stop Shoppe thread.

Whenever you want to make an addition or correction, you’ll find that you can use the “Edit” button in the top right of any page. In addition, you can submit new pages by visit the main GitHub Repository. (If you need assistance with this, feel free to ask in the #spongedocs IRC channel.)

In addition, we’re currently accepting translations of the documentation into multiple languages. If you’re multi-lingual and wish to help, you can contribute to the effort on Transifex. If you find that your preferred language is not yet listed, feel free to request it.

We’ve been very thankful for and humbled by our current translation team who have been working on translating the documentation into French, Polish, German, Spanish, and other popular languages, and we welcome new members to the team.

Website/Plugin Repo

@gratimax has been hard at work building the Sponge package repository. The project is now under development in the Ore Repository. It is currently being built using Django and python, and we welcome any and all contributions. If you wish to help, please join us in #spongeweb or make a PR to the repository.

For Developers

There are two parts to Sponge: the API (that consists of interfaces and some concrete code) and the implementation (which builds on top of Forge and Minecraft and implements the API).

You can contribute to either the API or the implementation, or even both.

Working on the API

A large of the API is done, but we’re still seeking both discussion and code contributions on some API sections.

To contribute with the API, browse our open issues. In particular,

Please comment on issues marked “input wanted” .

Consider writing code for issues marked “help wanted” (although we recommend that you state your intention on the issue first).

Create new issues for parts of the API that do not yet exist and that you think should exist.

If you are an existing plugin developer, you can help by reviewing the API written so far to identify portions missing that you will need for your own plugins. Even if one of your proposed APIs was rejected for inclusion for Bukkit, we may consider its inclusion into Sponge if you create a new ticket for it.

Working on the Implementation

One of the necessary tasks in implementing the Sponge API is to modify Minecraft classes so that they also implement Sponge interfaces. For example, we may need to change Minecraft’s “SkeletonEntity” class to add “implements org.spongepowered.api.entity.Skeleton” to it, as well as to add the necessary methods of Skeleton to the Minecraft class.

Another task is to fire Sponge events in the proper places. For example, the code handling “block break packet received” needs to be changed to also throw a Sponge PlayerBreakBlockEvent so that a plugin can deal with it.

As you may know, you can’t simply modify existing classes in Java easily. One way is to decompile the existing code, edit it, and then recompile it. We are not doing this; rather, we are writing entirely separate classes that get “mixed into” Minecraft classes.

For example, one of our “mixin” classes would look like:

@Mixin(SkeletonEntity.class) public abstract class MixinSkeleton implements Skeleton { @Overwrite private void look(int time) { // code here } }

Through some black magic, our own look() code completely replaces Mojang’s version in SkeletonEntity (@Overwrite marks the method). This basically allows us to rewrite any class the way we want, without needing to bother with patching decompiled Java classes. (In addition to overwriting methods, we can also modify them in other ways.) You can see an example of this technique in practice for entities.

Lastly, another part of writing the implementation is simply to write Sponge-specific parts: for example, while this is already complete, at one point we needed to write the plugin loading code.

Currently, we are looking for assistance with:

Writing mixins that make Minecraft classes implement our interfaces.

Writing mixins that throw the necessary events in the right places.

Implementing Sponge parts.

Writing mixins that throw the necessary events in the right places

Implementing Sponge parts

If you would like to help, check out the Sponge GitHub repository and find instructions on setting up your development environment in the README. If you need help, please visit IRC and ask in the #spongedev channel.

For mixin work, please talk to blood. For implement Sponge parts, please ask the person that wrote that particular API in the main API project.

(In addition, the “black magic” mentioned isn’t truly black magic; we simply rewrite the bytecode for the Java classes using the ASM library. If you are interested, be sure to check out our code, the ASM library, and learn a little about Java bytecode.)

The Year Ahead

Live Q&A Session (State of Sponge)

Due to the amount of questions that we’ve been getting, the Sponge team has decided to hold a session dedicated to informing the community about Sponge, our ethos, our goals and our progress. The sessions will be held through a combination of a live stream (likely through Google Hangouts) and IRC. There will also be a dedicated Q&A session for the community to ask the staff and developers about important issues. We will be holding this event on Saturday, January 24th, 2015 at 9 PM GMT (or …in your timezone), and we expect it to run for two hours.

As the date approaches, we will be able to provide you with more information. If all goes well, we will try to make this a monthly event.

The Community

While most of our community know and participate in all the niches of the Sponge Community, we’re aware that many newer users don’t know how to get involved. To that end, we’ve summarised all of our community hangouts below:

IRC

Here at Sponge, we hang out on the EsperNet IRC Network. We host several official channels, each dedicated to a specific topic and focus:

**#sponge**: This is our main channel. If you have general questions relating to Sponge, need help setting things up, or just want to hang out and have fun, you should join here.

**#spongedev**: For those interested in the development of Sponge and Sponge plugins.

**#spongedocs**: Home of the documentation team! Hang out here if you’d like to help us write the guide to everything Sponge.

**#spongeweb**: Home of discussion pertaining to Sponge-related web development and the Sponge web team.

You can join us through Webchat.

Or use one of our favourite desktop or web app IRC clients:

Hexchat - Freeware

Quassel - Freeware

Irssi - Freeware

LimeChat - Freeware

IRCCloud - Free to use, also offers a subscription

Twitter

Subscribe to our Twitter account, @SpongePowered, to find links to our announcements and topics of interest to the community. Following us on Twitter is great if you’re someone who doesn’t have time to read the forums and yet want to keep up-to-date with our progress.

Reddit

Sponge is on Reddit and has been since the very start! Hop on over to our subreddit. Over time, we plan to make the subreddit more community focused with events that the community can partake in.

Here’s to 2015!

We plan on it being an awesome year, and with the help of everyone in this amazing community, we have little doubt that we can make it so!