DevBlog: Über Plugins, mehr Plugins und Strukturen

Geschenke auf Origo können nun wieder vom Absender abgeholt werden, wenn diese noch nicht geöffnet worden sind.
Der Server wurde erfolgreich auf die Version 1.20.4 aktualisiert und nun wieder erreichbar.

18 Monate für ein simples Update auf die 1.19 hören sich viel an. Sind es auch, wenn es sich um ein einfaches Update handeln würde. Doch nachdem Terraconia seit 2013 ohne größere Unterbrechungen läuft, kommt solangsam die Zeit, sich von einigen Altlasten zu trennen. Insgesamt über 100 Plugins werden auf Terraconia benutzt, teilweise externe Plugins, viele aber auch selbst geschrieben.


In diesem Blogpost möchte ich einmal einen kleinen Überblick geben, warum eine Neustrukturierung unserer Plugins nach all dieser Zeit überfällig ist.

Zu viele Plugins - na und?

Viele Plugins bedeuten nicht direkt schlechte Performance. Der Server lädt zwar beim Starten jedes Plugin, aber solange mit dem Plugin nichts gemacht wird, verbraucht es auch keine nennenswerten Ressourcen. Als ein Beispiel kann unser Plugin ChestShopInfo dienen: Es stellt den Befehl /shopinfo bereit, mit dem man Informationen über den gerade angeschauten Shop erhalten kann.


Viele Plugins sind also nicht direkt ein Performance-Problem, sondern ein Managment-Problem. So haben wir zwar ChestShopInfo als Plugin, was diese Informationen bereitstellt, aber thematisch verwandt sind auch ExlllShopExtension, was den Shopverlauf (aufrufbar mit /shopverlauf) bereitstellt, und Shopverbot, was Spielern Shopverbote erteilt. Schon sind 3 Plugins vorhanden, die für das externe Plugin ChestShop Erweiterungen anbieten.


In diesem Fall sind die Aufgabenbereiche noch relativ klar abgesteckt. Wenn also in einen dieser Bereiche ein Bug auftritt, weiß man auch relativ direkt, in welchem Projekt man suchen muss. Doch das ist nicht überall so, was man beispielsweise an dem System für Awards sehen kann: Sowohl Awards, AwardShop als auch TerraconiaAwards sind Plugins, die für Awards zuständig sind und sich gegenseitig (meistens) ergänzen, damit am Ende Awards korrekt Spielern hinzugefügt werden. Bugs möchte man hier aber gar nicht mehr suchen.

Graphische Aufarbeitung - 1.15.2

Mit etwas Python und dem Tool GraphViz kann das ganze sogar graphisch aufbearbeitet werden, hier am Beispiel von Origo:

Ihr seid herzlich eingeladen, in den Abhängigkeiten von Terraconia zu stöbern. Wer den ganzen Graph auswendig gelernt hat, kann sich am Ende 10 Kekse abholen.


Gründliches Aufräumen

Und nicht nur die vielen Plugins führen zu einem Problem. Nachdem 10 Jahre eine lange Zeit ist, hat sich auch die Programmiersprache weiter entwickelt. Gleichzeitig gibt es auch Neuigkeiten im Hintergrund, sodass einfachere Schnittstellen zu anderen Plugins und Minecraft-Internes vorhanden sind. Und nicht zuletzt lernen wir Entwickler dazu und werden in unserem Gebiet immer besser. Somit kann man die gleichen Funktionen mit wesentlich weniger Code erreichen.


Und nun kann man viele Plugins zusammenfassen, duplizierten Code aufräumen und neue Methoden nutzen. Und das dauert ein bisschen.

Neue Plugins

Nachfolgend sind ein paar neue Plugins aufgeführt, die alte Plugins zusammen fassen und Neuigkeiten einführen. Die nachfolgenden Plugins sind bereits größtenteils auf unserem Testserver enthalten und in der finalen Fertigstellung.


Die nachfolgende Liste ist lang und schnell unübersichtlich. Gerade mit den alten Plugins, die immernoch auf dem Hauptsystem auf der 1.15.2 im Einsatz sind, komme auch ich nach all diesen Jahren durcheinander. Dennoch möchte ich ein möglichst vollständiges Bild der Arbeiten geben. Das erklärt ganz gut die lange Zeit, die das Update nun braucht, zeigt aber auch die Notwendigkeit, warum eine Überarbeitung gemacht werden musste.

CoreModule - Bibliotheken

Als Herzstück von Terraconia werden einige Bibliotheken benötigt. Plugins greifen darauf zu, um nicht alle notwendigen Methoden selbst zu implementieren. Sowohl auf unserem Proxy, der Spieler auf die einzelnen Server verteilt, als auch auf den eigentlichen Minecraft-Servern sind dann diese Methoden vorhanden.


Unter anderen folgende Vereinfachungen und Module sind hier enthalten:

  • einfaches Lesen und Speichern von Konfigurationen
  • Zugriff auf interne Spieler-Daten (Spieler-IDs, Spielzeit, AFK-Status)
  • Spieler, die aktuell online sind (so weiß das Städte-Plugin, welcher Statthalter gerade da ist)
  • Kommunikationsschnittstelle unter den Servern
  • Zugriffe auf unsere Datenbank (Wrapper für HikariCP / MariaDB)
  • einfaches Erstellen von Befehlen und konfigurierte Texte
  • Teleportationen von Spielern (Serverübergreifend, Übelkeitseffekt etc.)
  • Tools zum Aktualisieren von Configs und Skripte aus unserem Versionierungssystem ("Git aus Minecraft")
  • Eine neue Schnittstelle für Geld-Transaktionen (Speichern des Grundes, ausgelöstes Plugin etc.)

Das ganze war vorher in einigen unterschiedlichen Plugins verteilt:

  • Baba43Lib
  • BabaPlayerAPI
  • BabaPlayerList
  • BabaServerAPI
  • BridgeAPIv2
  • BungeeServerBridgeV2
  • CommandLogger
  • DatabaseLib
  • ItemManagment
  • NpcScriptDownloader ("Git aus Minecraft")
  • TeleportAPI
  • TerraconiaCommandFramework
  • TpsLogger
  • MoneyOverTime

Natürlich wird auch bei dem Zusammenlegen einige Methoden überarbeitet und aufgeräumt, Duplikate entfernt und alles vereinheitlicht.

InformationSystem

Kosmetische Informationen, die auf jedem Server zu Verfügung stehen. Das Plugin selbst ist auf unserem Proxy installiert und zeigt wichtige Informationen an und stellt Tools bereit:

  • JOObroadcast: Plugin für 20-minütige Broadcasts mit den Nervigen [Info]-Texten
  • Faq: Plugin für /faq
  • Wiki: Plugin für Verbindung zum Terraconia-Wiki /wiki
  • PlayerListV2: Plugin für /who
  • SimpleCommands: Befehle für Kurztexte wie z.B. /eta
  • Tablist: Farbige Namen in der Tabliste von Spielern, neu auch mit Footer und Header
  • TeamspeakBridge: Verbindung zu unserem Teamspeak-Server, Registrieren von Teamspeak-Nutzer
  • Terraconia (ja, das hieß wirklich so): Verbindung mit dem Forum, Informationen bei neuen Blog-Posts, Konversationen, /neuespw und mehr.
  • Alert (extern): Möglichkeiten für /alert für die Ankündigung von Events
  • Ping (neu): Befehl /ping für Informationen zum aktuellen Spieler-Ping

Navigator

Plugin zum Teleportieren von Spielern. Egal ob mit /home, /origo oder /tpto <name>, dieses Plugin verwaltet die Teleportationen.

Bisherige Plugins:

  • ExlllHomes
  • Navigator
  • TerraWarp

WorldEditTools

Wir nutzen natürlich auch externe Plugins. So haben wir WorldEdit im Einsatz, erweitern das Plugin aber mit ein paar zusätzlichen Tools und Befehlen.

Diese sind zwar meistens intern und können nicht direkt gesehen werden, aber trotzdem gehören sie irgendwie mit dazu. Das Plugin beinhaltet:

  • Backups: Tools zum Sichern und Wiederherstellen von Regionen (Restaurationserweiterung für Apartments und Städte)
  • TreePlant / EasyTreePlant: Tools zum Setzen eigener Bäume
  • WorldRepair: Tool zum Reset von Städten und Gebieten

WorldGuardFlags

Wir fügen auch noch einige Optionen zu unserem Sicherungsplugin für Regionen hinzu, womit wir mehr Stadterweiterungen anbieten können:

  • ElytraFlag: für Erweiterung Elytren-Schutz
  • FlyFlag: Damit man /fly flexibel in Städten oder der /mall nutzen kann.
  • LWCInteractFlag: Für die Erweiterung Zugriffskontrolle
  • TerraHologram: Anzeigen von holgraphischen Anzeigen in Regionen, z.B. für die dynamischen Wegweiser auf Origo
  • RegionToBlock: Tool um eine Region zu einem anderen Block zu setzen, z.B. zum Entfernen von Barriereblöcken beim Adventskalender 2021

SignTools

Schilder sind toll. Wir haben davon auch einige, aber auch einige Tools, die Sachen machen:

  • BlackBoard: Schilder für Städte bei /origo, Schilder für Mallshops bei /mall
  • SignEdit: Schilder nachträglich editieren
  • SignLink: Links auf Schilder legen

ShopExtension

Damit erweitern wir unser Shop-Plugin ChestShop:

  • ExlllShopExtension: Shopverlauf mit Historie von Einkäufen
  • ShopVerbot: blockierte Nutzer in eigenen Shops
  • ChestShopInfo: Befehl /shopinfo
  • neu: Speichern der Geld-Transaktionen in einem Bankverlauf

CityPlugin

Das aktuelle Städte-Plugin heißt intern SurvivalPlugin. Wer kann schon ahnen, dass hier das aufwendigste Plugin hintersteckt? Neben einer großzügigen Überarbeitung mit neuen Features wie besseren Beschreibungen für Stadterweiterungen, einfacheres Hinzufügen von neuen Erweiterungen, Historie von Mietern und Apartmentsbesitzer und neuen Marker-Typen für Städte wurde hier auch etwas zusammengelegt:

  • SurvivalPlugin: Das alte Städte-Plugin
  • SurvivalPlugin-Light: Ein Plugin, was /stadt tp <name> auf anderen Servern tabbar macht.
  • Apartments: Plugin für Apartments

Und trotz der Zusammenlegung und mehr Features kommt das neue Plugin mit weniger Code aus als das SurvivalPlugin.

Chat

Das aktuelle Chat-System bleibt vorerst so wie es ist. Doch auch dieses System war aus mehreren Plugins zusammen gesetzt:

  • Chat: Chat auf dem Hauptsystem
  • BabaChat: Chat auf dem Fun-Server
  • ChatlogAPI: Schnittstelle zum Loggen (=Schreiben in die Datenbank)
  • PrefixManager: Tool zum Setzen des Prefix mittels /prefix

Punishments

Hast du den Jail-NPC im /swarp jail genervt? Dann wird es wohl Zeit, dass du mal die Lampen putzt. Oder wenn du selbst einmal deine Straftaten mit /warns anschauen tust, wirst du auch ein Plugin dafür nutzen. Intern werden dafür die unterschiedlichsten Plugins genutzt, mit eigenartigen Grenzen:

  • Jail-Plugin: Jail-Befehle, Simulieren der Lampen und Zählen von geklickten Lampen
  • Jail-NPC-Plugin: der Jail-NPC
  • Penalties: Erstellen von Verwarnungen/Hinweisen, Verwalten und Löschen dieser
  • WarnAPI: Bereitstellung von /warns
  • SuppHelper: Interne Tools für das Team, z.B. ein Kurzlink für Namensänderungen
  • BanManager (extern): Plugin für Spieler-Bans. Wurde nun selbst implementiert

Sowohl für /warns als auch für das Jail-Plugin wurden unterschiedliche Klassen für ein Jail-Aufenthalt benutzt. Das ist dann natürlich viel duplizierter Code, der nun aufgeräumt wurde.

Awards

Errungenschaften in 3 Plugins, alles ist etwas historisch gewachsen. Die Anzahl der Plugins wurde auch hier verringert:

  • Awards: interne Schnittstelle für Errungenschaften für andere Plugins
  • TerrraconiaAwards: Interpretieren von Statistiken und Zuweisen von Statistiken
  • AwardShop: Shop für Errungenschaftspunkte (/awardshop)
  • Stats: Plugin für Statistiken, wie z.B. abgebaute Blöcke

Abilities

Dies könnte auch das "Plugin, was Kleinigkeiten an den Minecraft-Mechaniken ändert, aber in kein anderes Plugin passt" lauten. Aber eine Schublade mit allen möglichen Krempel hat wohl jeder irgendwo rumliegen. Und so finden sich auch hier einige Sachen, die man sonst nur schwer einordnen kann:

  • Änderungen für die Diamanthärte aus dem /spendenshop
  • Befehl /workbench (öffnet mobile Werkbank)
  • mobiles Öffnen von Shulkerboxen
  • BottlesOfWisdom
  • NoobProtection (Schutz von Neulingen. Namensfindung by Exlll )

Sonstige Plugins

Einige Plugins werden nicht zusammengelegt. Dies kann mehrere Gründe haben:

  • Das Plugin ist so spezifisch, dass eine Zusammenlegung nicht viel Sinn macht.
  • Das Plugin wird langfristig von Terraconia entfernt.
  • Eine Überarbeitung von einem Plugin ist sinnvoll, allerdings würde es das Update zu sehr verzögern.

Dennoch werden die Plugins an unsere neuen Schnittstellen angepasst, allerdings nicht so sehr überarbeitet. Um die 20 interne Plugins werden nicht zusammengelegt.

Gelöschte Plugins

Ein paar andere Plugins konnten entfernt werden, weil wir dafür sinnvolle Alternativen gefunden haben und diese nicht mehr benötigen. Neben technischen Gründen kann es hier auch durch die Überarbeitung anderer Plugins dazu gekommen sein, dass wir die bereitgestellten Features nicht mehr benötigen:

  • CommandFramework: Framework (Bereitstellung von Methoden) für Befehle, wurde nun durch eine einheitliche Lösung ersetzt.
  • ConfigLib: Das Auslesen von Konfigurationen wird nun über eine andere API ermöglicht.
  • FlyPlugin: Das "alte" Fly-Plugin wird schon jetzt nicht mehr wirklich benutzt. Das Plugin wurde durch die FlyFlag ersetzt.
  • GlobalPayment: Das Plugin zeigte serverübergreifende Geldsendungen (mittels /money pay an. Durch ein neues Economy-System auf Proxy-Ebene ist das nicht mehr notwendig.
  • SubdomainBlocker: Auf Terraconia kann man aktuell nur mit der IP terraconia.de joinen. Aufgrund von technischen Problemen geht das aktuell nicht, aber durch einen neuen Proxy umgehen wir diese Limitierung.

Namensfindung von Plugins

Ich habe in dieser Liste die wirklichen Namen von den Plugins genutzt, wie sie auch auf unserem Server installiert sind. Somit gibt es auch einige Plugin-Namen die sich eigenartig anhören. Eine "Baba43Lib" ist die Bibliothek von baba43 , wie er sie vor einigen Jahren genutzt und verwaltet hat. Das Plugin ExlllShopExtension ist von Exlll programmiert worden und hat dementsprechend auch seinen Namen erhalten. Solche Namen werden auch beim Update vollständig ersetzt.


Einige Plugins sind im Laufe der Zeit gewachsen und haben mehrmals ihren eigentlichen Inhalt verloren. Und auch ein neuer eingesetzter Proxy hat einen anderen Namen, weswegen Plugins mit dem Namen "Bungee" nicht mehr passend sind. Dadurch sind auch einige Namen nicht mehr wirklich sinnvoll und wurden nun ebenfalls angepasst.

Externe Software/Plugins

Terraconia ist nicht zu 100% selbst programmiert. Und definitiv auch nicht zu 90%. Wir nutzen externe Software und passen diese gegebenenfalls an. Dabei versuche ich stets, meine Änderungen an dem Plugin auch an den eigentlichen Programmierer zurück zu geben. Leider können wir nicht immer unsere notwendigen Änderungen in das Original-Plugin bringen, daher müssen wir auch einige Plugins selbst verwalten.


Dennoch wäre es ohne die Verwalter und Programmierer dieser Abhängigkeiten nicht möglich, Terraconia zu betreiben. Im Laufe des 1.19-Updates wurden einige externe Plugins geändert:

  • WorldGuard: Updatearbeiten, Implementierung von neuen Features für die Verwaltung von Städte-Baurechten
  • NuVotifier (Plugin für das Empfangen für Votes): Ist nun kompatibel mit unserem neuen Proxy Velocity
  • Dynmap: Modifizierungen für anklickbare Marker
  • acf (Annotated Command Framework): Schnittstelle für das einfache erstellen von Befehlen, wurde für den Einsatz auf Terraconia modifiziert.
  • TerraPaper: unser eigener Fork vom Minecraft-Server: Einige Änderungen sind nichts für andere Server, daher modifizieren wir hier Paper.

Ausblick

Die Liste an überarbeiteten Plugins wird stetig länger. Aktuell sind noch 16 Plugins nicht überarbeitet worden, viele davon sind kleinere Plugins. Danach stehen noch einige Tests auf dem Testserver an. Aber trotzdem gibt es schon jetzt ein halbwegs spielbares System mit einigen Plugins:

Hier fehlen wirklich noch einige Plugins, daher ist das Bild noch nicht vollständig. Aber trotzdem ist die Struktur bereits deutlich aufgeräumt.


Für mich ist also nach dem großen Start der Überarbeitung am 03. Juni 2021 Licht am Ende des Tunnels. Die Überarbeitungen vereinfachen das Arbeiten und die Freude auf die 1.19 steigt. Immerhin hat das Update auch jede Menge neue Features, die wohl ganz interessant sein sollten. Für eine genaue Auflistung ist es noch zu früh, aber vielleicht ist dafür der nächste Blogpost ganz gut geeignet.


Gleichzeitig finde ich es spannend, wie die eingesetzten Tools, die Programmierfähigkeiten von Entwicklern und das eigene Empfinden über "sauberes Arbeiten" sich mit der Zeit geändert haben. Wir entwickeln uns stetig weiter.

Kommentare 1

  • Das ist unglaublich spannend! Vielen herzlichen Dank für diesen Einblick und auch die Mühe, das alles aufzuschreiben und so für normale Spieler verständlich zu machen. Ich finde es mega wertvoll einen Einblick hinter die Oberfläche von Terraconia zu erhalten und werde einmal mehr dankbarer für die Arbeit des Teams von Terraconia.

    Gefällt mir 1