Bukkit, CraftBukkit & Spigot 1.8
两年了。这是我们论坛存在的时间，自Minecraft正式发布版本以来，也有三年了,这可真是一段很长的时间. 显然，今天的重大新闻是1.8版本正式发布，同时我也想借这个机会从不同的方面回顾过往，以及说明这个项目的现况和未来. 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.
回首May 2012的黑暗时期, CraftBukkit的一个扩展版本 CraftBukkit++,由Afforess编写, 有很多很酷的组件、改进的特性和其他精巧的功能。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 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 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.
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. 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. 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>. 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. 32 bit Windows: JAVA_HOME="C:/Program Files (x86)/Java/jdk1.8.0_25/" java -jar BuildTools.jar 64 bit Windows: JAVA_HOME="C:/Program Files/Java/jdk1.8.0_25/" java -jar BuildTools.jar Linux: java -jar BuildTools.jar 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. For Spigot this will be: Spigot/Spigot-Server/target/spigot-1.8-R0.1-snapshot.jar 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. Developers 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: Clone the Bukkit, CraftBukkit and Spigot repositories from Atlassian Stash. Download the required build depends: Maven, SpecialSource, Fernflower, Jacobe, Minecraft Server Jar, etc. Apply the included deobfuscation mappings and access transformations to the Minecraft Server Jar. Decompile and format the decompiled code using fernflower and Jacobe. Apply the included patches to the CraftBukkit source. Compile the whole thing using Maven! 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. Essentials - https://hub.spigotmc.org/jenkins/job/Essentials/ PermissionsEx - https://hub.spigotmc.org/jenkins/job/PermissionsEx/ WorldGuard - https://hub.spigotmc.org/jenkins/job/WorldGuard/ zPermissions - https://hub.spigotmc.org/jenkins/job/zPermissions/ 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.
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!
测试过程差不多结束了。 我们已经关闭了白名单，现在将向大家开放24小时直到周六(2014年11月15日), 进入这个服务器 test.spigotmc.org 然后开心地玩吧！(已过期)
正文 可能你们已经从Twitter或者IRC得知，我们将开始最终的CraftBukkit与Spigot 1.8版本测试。
回顾Spigot 1.8目前的进展，这意味着所有在CraftBukkit、Spigot还有Bukkit API上的代码全部完成了，
IRC频道: #spigot-1.8, http://irc.spi.gt/iris/?nick=&channels=spigot-1.8
GitHub 问题报告: https://github.com/SpigotMC/1.8-testing/issues
需测试内容的列表: http://goo.gl/6VnigE -请在IRC频道写访问到文档
但是如果你把今天的日期，然后加上一个星期的测试时间，再适当额外加几天 ， 那就应该很清楚我们打算在月底之前发布！
<在这里幽默地插入光圈科技作为参考> (叁只番茄:光圈科技的梗来源于传送门这个游戏 详情自行百度吧)
-Spigot 1.8 团队