📡 Smithy -- Client for Blacksmith- A Minecraft Server Management Software

:desktop: Website: http://theblacksmith.io coming soon!
:warning: Status: Alpha Planning and Development
:books: Version: 0.9.2-develop
:package: Download: N/A
:orange_book: Sponge API: 5.0.0
:clipboard: Source: github.com/theblacksmiths
:ledger: License: Massachusetts Institute of Technology (MIT)
:tools: Developed and tested on: Ubuntu Server 16.04 LTS / Ubuntu Desktop 16.10
:bookmark_tabs: Documentation: N/A
:oil: Public Dev. Server: coming soon!

This thread is as much of a WIP as is the infrastructure of blacksmith. Please check back as it is worked on regularly.

What’s smithy?

tl;dr - for devs and admins

MIT Licensed blacksmith client and installer built for the Sponge platform written in Java.

tl;dr - laymen’s for devs and admins

smithy is a Sponge plugin that works on any Sponge API implementation (ie: SpongeForge / SpongeVanilla). You can use it to install blacksmith and you can also use it as a client to send commands to blacksmith such as viewing server trees, whitelisting a server, kicking a player, and anything someone wants to extend or we add in the future.

What’s blacksmith?

tl;dr - for devs and admins

MIT Licensed Linux server management software w/sponge client(s), and various tool(s)/suite(s) written in Java/Shell.

tl;dr - laymen’s for devs and admins

It’s an infrastructure built using MySQL for data persistence and transactions. It stores all information on snapshots, server instances, allocations, callers and so forth. Redis for fast instant communication via payloads being plucked from the database. Since this project was built with Sponge in mind, the addition of a working out-of-the-box Sponge plugin blacksmith client is the way we’ll make this project even more useful.

It makes use of various technologies in order to propagate, message, sync, and maintain server information. The idea is to quickly create, configure, run, and manage Minecraft distributed server networks. It may also be used for individual servers, although I would recommend against such uses as it would mean a larger overhead which would be unnecessary in such circumstances.

Example

So ideally, I could use blacksmith to spin up a network and a server like so:

WARNING: THIS IS UNDER CONSTANT REFACTORING AND IS NOT THE RELEASE VERSION.
java -jar blacksmith.jar

blacksmith --create-cluster dev_network
blacksmith --create-server --cluster dev_network --server dev_server_01 <host> <port> [desc] [file]... (various other args that will come to be)
blacksmith --run --cluster dev_network --server dev_server [additional-args, ie: --dev-mode if supported by the server, it would be passed to our message broker and relayed post-startup of the server, or purely by metadata in the back-end table].
blacksmith --whitelist-enable --cluster dev_network --server dev_server_01 true
blacksmith --whitelist --cluster dev_network --server dev_server_01 c0fbf1c17b614fb28d679fa079f0c48e

Essentially above I created a server cluster to hold my server (this is useful for grouping). Created a server in the cluster, then I ran the server, then continued to do blacksmith commands on the server (ie: whitelisting it on our blacksmith software then adding the user c0fbf1c17b614fb28d679fa079f0c48e (aka myself, varrix). I would be able to connect to my server if all is well.

Much easier than connecting to your backend (say `MariaDB`), making `SQL` tables and entries, then sending an operation transaction through your backend (say `MariaDB`), right?

Source?

All software under the blacksmith suite is aimed at being a Free Open Source Software (FOSS) package (licensed under MIT). This means it is 100% free to re-use, hack, re-distribute, and use for absolutely anything you wish. This package contains an API/framework written in Java that can be used to create managed-distributed Minecraft server networks.

More smithy uses

If you do not have the sponge bridge plugin installed, there is no way to communicate between blacksmith and an actual Minecraft server instance. blacksmith may still create, template, and spin up instances. Other operations become a little tricky though.

Now here’s the fun part. With the sponge bridge installed on your Sponge server, you can install Blacksmith from in-game. You must first configure some user information in the smithy.json to allow the software to do some root-related operations. Don’t want to? See manual installation above.

You can also easily manage blacksmith moderation, administration, and development features. You can create new server templates, spin up new instances, link, and tear down instances with `smithy’.

Features

  • Blacksmith installer.
  • Remotely sync, control, manage, and monitor server(s)/network(s) using smithy as a client.
  • Sync network statuses using smithy as a client.

NOTE: The sponge plugin bridge as mentioned a couple times already- is not the server management software. It is purely a bridge. It cannot install blacksmith without root privileges and it will never be bundled with blacksmith.

 /_ /_  _  /_ __ _  ._/_/_
/_///_|/_ /\_\/ / // / / /

Minecraft Server Management Software

Licensed under MIT
Copyright (c) 2016 Logan Speck [email protected]

Project Breakdown

Let’s first break down the current setup of blacksmith.

  1. Blacksmith (java project) – is an API/Framework that one may implement in order to do server management for Minecraft PC multiplayer.
  2. TheBlacksmith (java class) – is simply our framework’s standalone application entry-point.
  3. Whitesmith (java project) – is our in-house implementation of Blacksmith which allows for standalone Minecraft server management.
  4. Integrate (java project) – is a Java software package containing common API and base implementations for creating service hooks and bridges.
  5. Smithy – is our default Minecraft in-game bridge for blacksmith built on the Sponge Platform using our integrate bridging framework.
  6. Packagesmith (java project) – is our package manager that can push and pull from Jarvis and
    maven repos based on the artifacts specified for the server.

The projects were divided up into such for the following reasons:

  1. To prepare for JDK9- specifically Project Jigsaw
  2. Make modularity changes in the future more seamless
  3. Allow for third-party modifications and optimized hot-swappable implementations
  4. Ease external API calls allowing for more robust hooks with various services (ie: sponge)

Infrastructure

Blacksmith currently relies on the following technologies.

Services:

  1. MariaDB
  2. Redis

APIs:

  1. com.google.code.findbugs – jsr305 v3.0.0
  2. org.slf4j – slf4j-api and slf4j-simple v1.7.21
  3. org.apache.commons – commons-lang3 v3.5
  4. org.apache.commons – commons-pool2 v2.4.2
  5. commons-cli – commons-cli v1.3.1 (apache’s).
  6. redis.client – jedis v2.9.0
  7. ninja.leaping.configurate – configurate-core v3.2
  8. ninja.leaping.configurate – configurate-json v3.2
  9. io.reactivex – rxjava v1.2.1

Tools:

  1. rsync

What can run with Blacksmith?

Technically you should be able to run any kind of server that has a compatible implementation of our integrate.

Although for the sake of relevance, I foresee the following server software being managed:

  1. BungeeCord Servers
  2. Minecraft Servers (Vanilla, CraftBukkit, Spigot, SpongeVanilla, SpongeForge)

NOTICE

This software was specifically built with the Sponge Platform in mind and therefore theblacksmiths do not explicitly offer any support to other platforms.

ROADMAP

Once completed, more information and details such as completion date will be added and checked off.

:clipboard: = planning/early development
:biohazard: = alpha
:pick: = beta
:oil: = release
:atom: = developmental

  • :clipboard: Blacksmith Java API
  • :clipboard: Blacksmith MariaDB implementation (databases, tables, etc)
  • :clipboard: Whitesmith Java implementation
  • :clipboard: Smithy, blacksmith hook for Sponge
  • :clipboard: Packagesmith, package manager for both standalone.
  • :clipboard: Packagesmith-s, packagesmith client for sponge.
2 Likes

–reserved–