Sponge Status Update - 3rd January 2015

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:

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!

22 Likes

Yay a new blog post! :slight_smile: The plugin repo looks great so far, good job @gratimax!

1 Like

Thanks as always for a progress report! Will the contents of this Q&A be posted on the forums afterwards?

Edit: @Owexz, YOU WILL BE UPGRADED. :scream:

1 Like

Yes, we will be posting the IRC Logs and Livestream Footage on the forums for people who can’t make the actual event. On top of this, we will summarise all the key notes of the State of Sponge, including the Q&A.

1 Like

On the note of Docs localization: The Norwegian bokmål version of the docs is now the first one to be 100 % translated. :slight_smile:

I would like to add, however, that I am not intimate with Norwegian programming lingo. Since I am the only Norwegian translator, those parts may not be correctly translated. I would be very grateful if other Norwegians could cross-check all my translations to verify that they are correct, or change them if they are not (this goes for all of them, not just /plugins and /dev)!

4 Likes

I’m very happy how the project is turning out. It’s obvious that the initial interest and hype around sponge has disappeared for a big part. Don’t let yourself get turned down by that. Once the initial build of the mod is released the interest will spike once again :).

Just bumped German to 100% too. Hope i didn’t screw the “dev” section up while translating… :smiley:

1 Like

That section is particularly complicated to translate… Congrats to both of you @Tzk and @Lemonous :slight_smile:

1 Like

It wasn’t me alone ofc. I just bumped it from 96% to finish.
Next up: spellchecking of the other translations :slight_smile:

I’m not a coder myself, so this is the only possibility for me to give something back for the hard work devs are doing over here.

4 Likes

Very excited now, good work sponge team :smiley:

API New Year 2015 !

2 Likes

Great job guys, hope to see a public release of the server soon!

1 Like

You guys are taking way too long to release this… :frowning:

Patience, young padawan. Much to learn you have.

4 Likes

Slow to release but stable > Fast to release but very broken

I would prefer they take their time and make sure we don’t end up like bukkit where things get changed at the last minute and break stuff for no real reason. :wink:

1 Like

Quick question:
The dutch translation seems to be 50% reviewed but all other languages are not (exept greek).
-How are translations reviewed? Can anyone review them?
( I’m not very familiar with transifex… :smiley: )

And:
-Is there any ETA for language support of the docs?
-When will the frontpage of sponge.org updated with proper links to docs/faq and the docs itself?

:slight_smile:

That is a good question. Here’s what I know:
To Review text with Transifex, you need to be appointed as a Reviewer (or higher rank).
Reviewed text is supposed to be protected from changes, except by other Reviewers.
As yet, we have not appointed many Reviewers to the task. It is a little hard to judge who would be suited to the task. This is an issue we’re trying to work out.

Our Transifex feature is still a WIP, so I have no ETA on when the translated pages will be made available.
There are a few other minor hiccups that need to be sorted out before we get that far.

Rather than bog this thread down with further discussion of this, I’ll make a new one sometime soon. SpongeDocs needs a pow-wow to get some wrinkles smoothed out, and maybe get the translation teams to pick some good Reviewers.

EDIT: New Docs thread here SpongeDocs Review and Planning