Bukkit, CraftBukkit & Spigot 1.8

Discussion in 'News and Announcements' started by md_5, Nov 28, 2014.

Thread Status:
Not open for further replies.
  1. md_5

    Administrator Developer

    Two years. That’s how long we have had these forums for, and for a game that has only been officially released for three years, that is an awfully long time. Whilst the big news for today is obviously the 1.8 release, I would like to use this opportunity to cover the many different aspects regarding the past, present and indeed future of this wonderful project. What follows is an, abridged, account of the major milestones which we have experienced together. I hope that this little section provides a small insight into the history and creation of Spigot, and just how far we have come in what feels like such a short time.

    Back in the dark ages of May 2012, there existed a modified version of CraftBukkit named CraftBukkit++, written by Afforess, which had lots of cool performance enhancing features and other fancy stuff. Unfortunately over its relatively short lifespan it managed to get quite bloated with unnecessary features, and lagged behind the then rapid Bukkit development pace. As such I was tasked by @andrewkm, owner of EcoCityCraft, to create a lightweight version with similar functionality and, of course, performance enhancements. Eventually word of this modified “super-server” got around, and I was asked to post it publicly, which I did on the Spout forums under the [satirical] name “CraftBukkit--”. Humbly hosted out of my Dropbox at first, and then later on various Jenkins servers hosted by NyanCraft and subsequently EcoCityCraft (whom still hosts Jenkins to this day), CraftBukkit-- became a hit and amassed a small but dedicated following of server owners. Eventually CraftBukkit++ was discontinued and CraftBukkit-- became the Spigot we know and love today. Several of Afforess’ original features, or features inspired by him, still exist in Spigot today, and for that we are thankful. Once our thread on the Spout forums reached a massive 100 pages, we decided it was time to look for our own home and spot on the internet. BungeeCord had been released several months earlier (thus changing Minecraft servers forever, although that is a different story), and as a result I was offered sponsorship by Staminus Communications. Although they are now known here under the name Intreppid, Staminus (and in particular Bryant), have provided hosting for these forums for the entire two years, and also helped pioneer various other aspects of Minecraft server ownership such as making DDoS protection much more affordable than it was, and launching a range of overclocked servers specifically for high player count Minecraft instances. We are grateful for their partnership and hope that it will continue for the next two years and beyond! Over the next year, SpigotMC grew immensely and many milestones were hit. We started adding forward compatibility to later Minecraft versions, which was a huge hit and popularity booster; we added a resources and wiki section where the community could contribute plugins and documentation respectively, and of course we managed to have a booth at Minecon along with Intreppid, which was an amazing experience for all, and certainly helped to spread the word about Spigot. Later in the year we also began the irc.spi.gt IRC network, which is approaching its 1 year anniversary next week. Needless to say we haven’t messed around this year either, implementing a new custom designed forum theme and adding premium resources, thus allowing developers to make some money from their hard work. But of course, another thing has come along this year as well, something which finally allows SpigotMC to make the transition from “fork of CraftBukkit”, to Bukkit, CraftBukkit, Spigot, and every server in between: 1.8.

    Today I am proud to announce the immediate availability of Bukkit, CraftBukkit, Spigot-API and Spigot server, all updated and ready for use with Minecraft 1.8! The decision to perform this update ourselves was one made early October, about 7 weeks ago and a goal which we have been working tirelessly towards ever since. Obviously things are going to be a little bit different than in the past, but hopefully they won’t be any more complicated (we have tried our best to make it as simple as possible, but fixes and improvements are welcome).

    As of today, all Bukkit / Spigot development will be centered around the “SpigotMC Development Hub”, as opposed to GitHub. This special purpose dev hub contains all the applications and tools needed for both the Bukkit and Spigot projects including source code, continuous integration, issue tracking and Maven repositories. It can be found here: https://hub.spigotmc.org/. All logins are managed via JIRA, but although account creation is unrestricted, login access to Stash (for developers), will be restricted to those who have submitted their copy of our contributor licensing agreement (more on this later).

    Obviously the most interesting part to everyone reading is how to compile / install CraftBukkit or Spigot, so this is the thing which I will be covering first. Please note that as we do not currently have any Macintosh developers, and as some programs do not work on this platform, only Linux and Windows are supported for compilation, although the completed jar will run just fine anywhere Java is supported (Mac OSX, FreeBSD, Solaris, you name it!).

    Please install the following prerequisites on your system of choice before continuing:

    Windows Prerequisites
    1. Java Development Kit. In order to compile any Java code you will require the Java Development Kit, or JDK. This is different from normal Java, so even if you have Java you may still need to install the JDK. If you have ever made a plugin, then there is no need to worry as you already have the JDK installed. You can grab it from here: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
    2. As of BuildTools #22, JDK is not required!
    3. You also need Git for Windows, or msysgit as it is known. This is very easy to install, simply download and run the installer: http://msysgit.github.io/.
    Linux Prerequsites
    Installing the requirements on Linux is really simple. For Debian / Ubuntu based servers simply run the command: sudo apt-get install git openjdk-7-jdk, or for CentOS based servers: sudo yum install git java-1.7.0-openjdk-devel.

    Server Instructions

    Now that you have the necessary requirements installed, it is simply a matter of grabbing the build tools and using them to compile the servers of your choice. Please note that Linux is recommended as it is much faster and well tested. OS X is not supported at this time.
    1. Open a terminal. If you are using a Linux desktop you probably know how to do this, if you are using a Linux server, simply open an SSH terminal like you normally would. For those using Windows, simply double click the Git Bash icon which appeared on your desktop or from the start menu. Alternatively you may be able to right click -> open terminal here.
    2. Download the BuildTools jar from https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar. You can do this either with your browser, or alternatively the curl / wget command: curl -o BuildTools.jar <url> or wget -O BuildTools.jar <url>.
    3. Execute the BuildTools jar as follows: If you have a different JDK version, please change it to the version you have installed. Check the program files folder to see which versions you have installed. If you want to automate this, you can copy the commands into a file ending with “.sh” and then double click it. Please run this from within an EMPTY directory.
      1. 32 bit Windows: JAVA_HOME="C:\Program Files (x86)\Java\jdk1.8.0_25" java -jar BuildTools.jar
      2. 64 bit Windows: JAVA_HOME="C:\Program Files\Java\jdk1.8.0_25" java -jar BuildTools.jar
      3. As of BuildTools #20, java -jar BuildTools.jar should be sufficient for all platforms.
      4. Linux: java -jar BuildTools.jar
    4. If all goes well, about 10 minutes later you will have Bukkit, CraftBukkit and Spigot jars. These can be found in $server/target/XXXX.jar.
      1. For Spigot this will be: Spigot/Spigot-Server/target/spigot-1.8-R0.1-snapshot.jar
    5. To update, simply download and run BuildTools.jar again. The process should be much quicker this time, about 2 minutes for most users! Be sure to check for BuildTools updates on a regular basis.
    Whilst the scripts are nice and easy to use, as a developer you may want a better insight into how they operate so that you can make your own changes, or do it by hand in case they don’t work as intended. Roughly put, the following steps are performed by the install scripts:
    1. Clone the Bukkit, CraftBukkit and Spigot repositories from Atlassian Stash.
    2. Download the required build depends: Maven, SpecialSource, Fernflower, Jacobe, Minecraft Server Jar, etc.
    3. Apply the included deobfuscation mappings and access transformations to the Minecraft Server Jar.
    4. Decompile and format the decompiled code using fernflower and Jacobe.
    5. Apply the included patches to the CraftBukkit source.
    6. Compile the whole thing using Maven!
    7. If installing Spigot, run ./applyPatches and Maven as per usual.
    If you require help making changes to Spigot or CraftBukkit, please stop by our development IRC channel on irc.spi.gt, #spigot-dev. In particular to regenerate the NMS patches, you need to use the ./makePatches.sh script in the CraftBukkit source. The argument to this script should be the clean decompiled directory which BuildTools generated, ie: ../work/decompile-bb26c12b

    We are also very eager for enhancements and improvements to the build scripts, in particular there is not much support for custom forks, although once the deobfuscated jar has been installed the server can be compiled with Maven as per usual.

    As a developer you are probably also interested in getting access to the Stash server so that you can make pull requests with all your awesome new features and enhancements. As mentioned earlier, in order to get this access you will first need to create an account on JIRA, and then submit our CLA. Why a big scary CLA you might ask? Well first of all its not scary at all, it is substantially shorter and easier to read than many of the agreements you submit on a daily basis (think Apple, iTunes, and all those other terms and conditions). The reason for this document is to protect you, and to protect us. What the CLA does, is instead of licensing your code under [L]GPL, BSD, or whatever other licenses our projects may use, it licenses your code to us instead. This is a good thing, and in implementing it, we hope you will see the benefits behind our key reasons:
    • It is easy to understand: Previously when contributing to a LGPL license project you had to agree to both the GPL and LGPL licenses, which when combined represent nearly 6500 words of legal speak so complex that it requires in depth study by even experienced legal professionals. Our CLA on the other hand clocks in at around 1800 words, or four times less, and is written in language which we hope is easy to understand even for those whom English is not their first language.
    • It protects you as a developer: The CLA makes it completely clear, in writing, what rights you give us, and what rights you don’t. In particular, the right we are most concerned about is the right to use, and relicense your code. It also makes it abundantly clear that you give irrevocable consent to your contributions being used in Spigot / Bukkit.
    • It protects us as a project: By having a signed document stating that you give us the ability to license and use your code, it 1) prevents the idea that past contributions can be rescinded in any way, shape or form, and 2) enables us to relicense your code to better serve and preserve the long term goals of the project should that need arise in the future.
    • It eliminates ambiguities and hopefully encourages contributions from those who would not normally contribute. One of the biggest reasons (excuses) I have heard from developers not contributing to Spigot is “I don’t think I’m allowed to because of my NDA”. This document is hopefully the solution to all of those troubles, and by getting it cosigned by your employer there should be no issues and you can contribute to your heart's content! We can’t expect to advance further if the best developers don’t contribute as they are tied up elsewhere.
    It may seem strange that I’ve dedicated an entire bullet point to developers who develop exclusively for other large servers, however I am including it because I feel that it is a big issue affecting us as Spigot developers, and something which we want to see addressed. We provide Spigot, and now CraftBukkit as free and open source software which is free of charge. Almost all of you make a profit off your servers, and some of you make hundreds of thousands a year; we don’t. That’s ok, because we’re not focused on that. What we feel isn’t ok however is not contributing changes you make to our software back to us, especially changes which fix exploits and other critical bugs. It may seem far fetched, but this is the exact situation our team has had to deal with more than once in the last year. So this is our plea to you larger server owners, if you have a developer, or a team of developers working on modified versions of our software, please do so in a public manner which we can work with. Doing so will only lead to a better software, with more API features and less bugs. We are able to provide any assistance you require in doing this, including providing dedicated organisations on our Stash instance. In particular I would like to draw upon the example of SportBukkit, which has been maintained as an open source project by the @MonsieurApple and oc.tc servers for many year(s) now - in fact several Spigot API features are based on their work, kudos to them!

    Finally with regards to the CLA, if you are interested in any of the included content you should note that it has largely been based on the well known Harmony CLA, with a few minor alterations made by our lawyers. If you have any specific concerns about any of the wording within, please don’t hesitate to contact us and we will do our best to help.

    Please note that the "real name" field on JIRA is public to all users. If you are not comfortable with this please set it to your username. All details in the CLA however must be correct.
    Submit the CLA here: https://docs.google.com/forms/d/1jWCM0_fXg2-ub0t7-zHRaeuD9ZZKSoTHnKStZ3totWo/viewform

    Continuing on the theme of developers, it may interest you to know that we are also currently looking for junior developers to assist us in the development of Spigot and Bukkit. A junior developer will have most the responsibilities of a normal developer, however they will not be involved in updates or have direct commit access to master branch. They will also assist in the development of plugins which are maintained by us. As such I would like to welcome @dmulloy2 as our first junior developer, and lead maintainer of the ProtocolLib plugin. This plugin has become a staple in many servers, however has since been discontinued by its original author. Dmulloy will be updating it to 1.8 as soon as he can and ensuring that it works swimmingly with future versions of Spigot.

    API and Plugin Changes
    You will be very pleased to note that there have been practically no API breakages in the transition to 1.8, and most (non NMS) plugins should work completely fine. There is however one exception to this: the included Guava version has been changed from 10.0 to 17.0, the same version included with Minecraft. This is quite a major change, and breaks a few popular plugins, however we believe it is a worthwhile thing to do now with this 1.8 update, as the old version included with Bukkit has been deprecated for some time, and by taking advantage of this release we can ensure that developers can take advantage of the new features Guava 17 has to offer. In particular, Guava features are deprecated for two years before removal so it is unlikely this will ever be an issue again (Guava 10 is over 3 years old). That being said, a number of popular plugins have been broken by this change, most of them fixed by a simple recompile. Most changes center around the “Cache” class.

    In particular, you can find the plugins updated by us here: Please ensure that if you run these versions, don’t complain to the developers about any breakages. We will be opening pull requests to the listed plugins as soon as possible.
    As for any other plugins broken by this change, a Spigot developer will update them and add it to the list for you if required, however please note that this is only for plugins broken by this change and not NMS changes. Overall we think very few plugins should be affected.

    We have also included a preliminary selection of new APIs, focusing on the new creature types, armor stands and banners, however pull requests for other new features are extremely welcome. In particular we would love to see API additions which prevent the need for common use of NMS.

    For the NMS developers out there we have made a change which may affect a few plugins. In previous CraftBukkit versions Minecraft's dependencies were relocated into net.minecraft.util allowing them to not conflict with Bukkit/CraftBukkit dependencies. As of this build we have removed that and changed all conflicting dependencies (Guava) to use the same version as Minecraft. This provides two benefits: guava isn't included twice in the final jar and Bukkit is no longer using a two year old version of Guava. As always NMS is not guaranteed to be stable and may change at any time.

    Final Notes & Thanks
    Anyway I’m starting to ramble on here, and best shut up so that you can begin updating your servers. I would like to say thanks to all those who have been involved in Spigot over the years, and in particular this update. Thanks to you guys, the community, who have provided us with the support to get this done. Thanks to our lawyers, in particular Hansen and Jason who have provided us with great advice over the last few months. Thanks to the forums and IRC staff who have provided support, advice, and assisted in moderating the community. Thanks to @cindy_k who has been in charge of testing and @GunfighterJ who is behind the scripts which you will see (and hopefully work correctly).

    And finally, a massive thanks to @Thinkofdeath who has been the guy behind most of the code you see today, without him, this update simply wouldn’t be possible.

    All in all, I hope these programs work, and I hope that they work well for you. Together we can help usher in a new golden age of Minecraft server ownership.

    Long Live Spigot!
    ~Spigot Team

    PS: Whilst the server software itself is very stable, these build tools are very new. As such we ask for your patience in using them, and improvements are certainly most welcome!
    #1 md_5, Nov 28, 2014
    Last edited: Aug 26, 2015
    • Like x 268
    • Winner x 70
    • Friendly x 18
    • Agree x 11
    • Useful x 7
    • Creative x 5
    • Informative x 4
    • Funny x 3
    • Optimistic x 3
  2. Awesome! Thank you!

    Can't wait to start utilizing 1.8 features.
    #2 ledship, Nov 28, 2014
    Last edited: Nov 28, 2014
    • Agree x 12
    • Optimistic x 3
    • Winner x 2
    • Like x 1
    • Informative x 1
  3. harry5573


    • Optimistic Optimistic x 2
    • Like Like x 1
    • Agree Agree x 1
    • Informative Informative x 1
  4. Woo! 1.8's out finally! Thank you everyone involved for making Spigot 1.8 a reality, this is a milestone in Minecraft server development after the Bukkit-ening.
    #4 DSPhat, Nov 28, 2014
    Last edited: Nov 29, 2014
    • Agree Agree x 7
    • Like Like x 1
    • Winner Winner x 1
    • Optimistic Optimistic x 1
  5. SpaZMonKeY777

    Wiki Team

    Thanks for everything, you guys have done an amazing job!

    On a side note, it'll be interesting to see how many small servers stop updating because they won't understand how to compile their own jar files, or are just too lazy and give up.
    #5 SpaZMonKeY777, Nov 28, 2014
    Last edited: Nov 28, 2014
    • Funny x 17
    • Agree x 13
    • Winner x 2
    • Like x 1
    • Optimistic x 1
    • Creative x 1
  6. Great!
    • Agree Agree x 2
    • Like Like x 1
  7. Puremin0rez


    And we're finally here. Good luck updating everyone!
    • Friendly Friendly x 3
    • Agree Agree x 1
    • Useful Useful x 1
    • Optimistic Optimistic x 1
  8. YEs <3
    • Funny Funny x 1
    • Friendly Friendly x 1
  9. Thank you all! <3
  10. joehot200


    Ah, i'm glad your internet was good enough for you to post this ;).

    BTW, has anyone commenting above me actually read the entire post yet?
    • Funny Funny x 13
  11. Maximvdw


    • Like x 18
    • Funny x 12
    • Friendly x 6
    • Winner x 2
    • Creative x 2
    • Agree x 1
    • Informative x 1
  12. Yaj thank you so much!
  13. MostFunGuy


    <3 you MD_5
    • Winner Winner x 1
  14. i9hdkill

    i9hdkill Retired Moderator
    Retired Supporter

    Nice! great work!
    • Agree Agree x 1
    • Funny Funny x 1
  15. jeff142


    I need to go change my pants, then do this.
    • Funny Funny x 5
    • Agree Agree x 3
    • Like Like x 2
  16. Awesome work spigot!
    • Agree Agree x 6
    • Creative Creative x 1
  17. Thanks for all!!!!
Thread Status:
Not open for further replies.