Plugin-Erstellung/Java/Server Klasse

Aus Rising World Wiki


Server Klasse stellt das Server-Objekt dar. Über diese Klasse lässt sich der Spielkontext steuern, also alles was mit dem Server, den Spielern, der Spielzeit, dem Wetter und der Weltverwaltung zusammenhängt.
Die Klasse Server enthält ausschließlich statische Methoden und muss daher nicht instanziiert werden.

getType

Manchmal ist es nützlich herauszufinden, ob es sich bei dem Server aktuell um einen Einzelspieler-Server oder einen Dedicated Server handelt.
Beispiel: Prüft, ob das Plugin auf einem dedizierten Server läuft.

if (Server.getType() == Type.Dedicated) 
{
	//Dies ist ein dedizierter Server 
}

Die Methode getType() mit Codeschnipsel ist unter javadoc RW: Class Server - getType() zu finden.

Beispiel shutdown

Fährt den Server herunter, sobald er länger als 24 Stunden läuft.
Die Klasse MyPlugin erbt von Plugin.

import net.risingworld.api.Plugin;
import net.risingworld.api.Server;
import net.risingworld.api.Timer;

public class MyPlugin extends Plugin implements Listener
{
    //Global flag somewhere in order to make sure that the shutdown
    //procedure is only triggered once
    public boolean shuttingdown = false;

    @Override
    public void onEnable()
    {
        //Check the server running time every second
        registerTimer(new Timer(1f, 0, 0, () -> {
            //24 hours == 86400 seconds
            float runningtime = Server.getRunningTime();

            //Make sure "shuttingdown" hasn't been set yet
            if(!shuttingdown && runningtime > 86400){
                shuttingdown = true;

                //Send a shutdown text and yell notification to all players
                Server.broadcastTextMessage("<color=red>WARNING: Server will shutdown in 1 minute!</color>");
                Server.broadcastYellMessage("WARNING\nServer will shutdown in 1 minute", 5f, true);

                //Create a timer which only triggers once after 1 minute (60 seconds)
                Timer timer = new Timer(0, 60f, 0, () -> {
                    //Save all
                    Server.saveAll();

                    //Shutdown server (this does not restart the server!)
                    Server.shutdown();
                });

                //Start the timer (simply creating a timer does not start it automatically)
                timer.start();
            }
        }).start());
    }

    @Override
    public void onDisable()
    {
        //...
    }
}

Die Klasse Server mit Codeschnipsel ist unter javadoc RW: Class Server zu finden.

Methoden der Oberklasse

Unsere Klasse erbt von der Plugin Oberklasse die zur API gehört.
Die Methode onEnable() wird aufgerufen, wenn das Plugin aktiviert wird. Zu diesem Zeitpunkt sind alle anderen Plugins bereits geladen. Die Methode onDisable() wird aufgerufen, wenn das Plugin deaktiviert und entladen wird.

Wichtige Methoden in diesem Beispiel

  • Server.getRunningTime() – liefert die Anzahl der Sekunden, die seit dem Start des Servers vergangen sind. 24 Stunden entsprechen 86400 Sekunden.
  • Server.broadcastTextMessage() – sendet eine Chat-Nachricht an alle verbundenen Spieler. HTML- bzw. Wiki-Farbtags wie <color=red>...</color> werden unterstützt.
  • Server.broadcastYellMessage() – blendet eine große Statusmeldung in der Bildschirmmitte aller Spieler ein. Die Parameter sind die Nachricht, die Anzeigedauer in Sekunden sowie ein Flag, ob die Meldung pulsieren soll.
  • Server.saveAll() – erzwingt das Speichern aller ausstehenden Änderungen (Welt, Spieler, NPCs, Truhen usw.). Empfehlenswert vor einem geplanten Shutdown.
  • Server.shutdown() – fährt den Server geordnet herunter (dauert ca. 10 Sekunden). Für einen sofortigen Abbruch kann alternativ System.exit(0); verwendet werden.
  • Timer – Klasse zum periodischen oder einmaligen Ausführen von Aufgaben. In diesem Beispiel wird sie genutzt, um den Shutdown 60 Sekunden nach der Warnung tatsächlich auszulösen.


Java Override Annotation

Mit der Java @Override Annotation können wir dem Compiler mitteilen das wir absichtlich die Methode der Plugin Oberklasse überschreiben wollen.

Siehe auch

Forum

Kategorien

Tutorial Kategorien
Plugin-API(1 K, 6 S)
Tutorial(2 S)
Plugin-Erstellung
Java(2 K, 6 S)
Unity(3 S)