SwiftApi
What is SwiftApi?
SwiftApi is an Apache Thrift based API for CraftBukkit Minecraft servers. This API allows simple calls to Bukkit methods over the internet using your favorite programming language. This plugin acts as the server component, allowing you to write client programs/websites/apps that can talk to your CraftBukkit server in almost any programming language!
SwiftApi 2.0
SwiftApi-2.0-alpha is now available for download together with SwiftApiVault-1.0-alpha. Check out the wiki for more information.
What can you do with it?
Basically, SwiftApi allows you write awesome code and apps that can talk to and control your Minecraft server.
An example of such an app is MineCenter. Check it out at http://minecenter.org
Configuration Options
Edit the plugins/SwiftApi/config.yml file to your liking.
The most important options are:
# Authentication Information (CHANGE THESE) username: admin password: password salt: saltines
Leaving these at default would make it easy for an attacker to use this API on your server.
Creating a Client App
Once you have downloaded the Apache Thrift compiler, you can create a client app in a few lines of code.
Check out the example PHP project here: https://github.com/phybros/swiftapi-example-php
Try the C#.NET/VB.NET tutorial here: http://dev.bukkit.org/server-mods/swiftapi/pages/examples/c-net-vb-net/
Generate the Client Library
You can generate the client library (example is in C#) by typing
thrift -r --gen csharp SwiftApi.thrift
The -r option tells the compiler to generate code for all files (including ones that are referenced in SwiftApi.thrift with the include directive. The gen csharp option tells the compiler to generate C# code. This command will leave you with a gen-csharp directory with all the code you need to connect to a server running the SwiftApi plugin.
Include the Code in your App
If you're using C#, you can just drag all the source files right into your client app to use them, or alternatively you could create a new project with the generated files to keep your code and the generated code seperate.
Examples
Visit the Examples page for examples of how to use the code.
Here's an example in C#:
//open a connection to a server running SwiftApi TSocket socket = new TSocket("your.bukkitserver.org", 21111); socket.Open(); //create a new SwiftApi client object TBinaryProtocol protocol = new TBinaryProtocol(new TFramedTransport(socket)); SwiftApi.Client client = new SwiftApi.Client(protocol); //get the server version and output it Console.WriteLine("Server Version: " + client.getServerVersion(authString)); //close the connection socket.Close();
Because the code is based on Apache thrift, you have access to many of the complex types in the CraftBukkit API, such as the Player object.
This example is in C#, but the thrift compiler is able to create libraries for almost ANY programming language.
Visit the Examples page for examples in some other languages
Available Programming Languages
As of version 0.9.0 of Apache Thrift, the following languages are available:
- Actionscript 3 (AS3)
- C (using GLib)
- C
- C#
- Cocoa (Objective-C on Mac OS and iOS)
- Delphi
- Erlang
- Go
- Haskell
- Java
- Javascript
- OCaml
- Perl
- PHP
- Python (including Twisted async support)
- Ruby
- Smalltalk
Code
Think you can improve SwiftApi? Fork the repo on Bitbucket and submit a pull request!
Repo URL: https://bitbucket.org/phybros/swiftapi
Notes
This plugin sends anonymous usage statistics to http://mcstats.org/
To opt out, set opt-out to true in plugins/PluginMetrics/config.yml
@Linrox
It is active yes. It works fine on 1.4.6, but I will build a version that "officially" works with 1.4.6 if you like
Is this still an active plugin? I would love to see a 1.4.6 version before Minecraft updates again
@CaptainJohnnyBlu
Thanks for the kind words
This plugin is awesome.
@TheMCHacker
Why would you want to?
And it can't be used with MS-DOS ?
@XeonG8
Fair enough.
FYI: If you're looking to get specific user data, then use getPlayer(authString, playerName)
really? doesn't it open 100/1000's of files to get information for getServer every-time its requested, and sending that all back to remote webserver. That couldn't be more efficient, it didn't look like it slowed the server down when I did it (once), but the shear amount of data when I'm only wanting specific user info ... well I can only imagine that if this was built into any website that yes it would just not be efficient at all
"it's not worth it to have many different methods instead of one big one"
So yeah I beg to differ but whatever
@XeonG8
The kind of performance gain you are talking about is so minimal that it's not worth it to have many different methods instead of one big one. Unless it's noticeably slowing your server down (which I doubt) then don't worry about it.
yeh ok I get that, but it still not what I was asking.. like that would still require server to collect everything it normal does for getServer, and then send it all back to webserver... that can be a lot of useless information that isn't even wanted...
is there no way for getserver to have sub commands to get specific stuff instead, so its more efficient..?
@XeonG8
getServer returns a Server type object. Once you have that object, you can get the information you want from it.
@phybros
I want specific information from that array that getServer returns.. without it sending back a massive array..
how to call for just particular stuff from that instead? ...
@Relicum
Yes. On each server set the port to a unique one in the config.yml file. This will allow you to connect to each one individually even though they're hosted on the same server.
HI
Glad I found this as just creating a custom control panel and looking for different options that allow me to use PHP to connect. The only issue I have is that run a cloud based MC environment and have 6 instances of MC running on one server. Will it be possible for me to connect to all 6 instances if I just changed the connection port that swift uses to connect ???
Thanks
@XeonG8
I'm not sure that I understand your issue.
If you just want players, just use getPlayers, if you want plugins, use getPlugins.
What information do you want?
@phybros
Looking for a more specific way of just getting certain information from what this array would return... $serverInfo = $client->getServer(getAuthString("getServer"));
instead of everything that returns.. which seems to include offline players aswel..
@XeonG8
What are you looking for in particular?
Edit: All the properties of the Server object can be found here: http://willwarren.com/docs/swiftapi/latest/SwiftApi.html#Struct_Server
Could you do some more php examples?
How to just get ask for specific stuff to be sent back from server, instead that example that returns TONS of stuff like offlineplayers...
@xxCoderforLife
Apache Thrift can generate C plus plus code, yes. They have examples on their Wiki: http://wiki.apache.org/thrift/ThriftUsageC%2B%2B
Can you make it do C as well?