Plugin-Erstellung/Java/Server Klasse: Unterschied zwischen den Versionen

Aus Rising World Wiki
Keine Bearbeitungszusammenfassung
 
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt)
Zeile 8: Zeile 8:


== Dokumentation ==  
== Dokumentation ==  
Die Klasse '''Server''' ist unter [https://javadoc.rising-world.net/latest/net/risingworld/api/Server.html JavaDoc: Class Server] zu finden.  
Die Klasse '''Server''' ist unter [https://javadoc.rising-world.net/latest/net/risingworld/api/Server.html JavaDoc: Class Server] zu finden.
 
=== Java Paket ===
In der Java Plugin-API bezeichnet der Begriff [[Plugin-Erstellung/Java/Plugin-API_Paket|"Package" (Paket)]] eine Gruppierung von zusammengehörigen Klassen, Interfaces und anderen Paketen.
Die '''Server''' Klasse befindet sich im Package [https://javadoc.rising-world.net/latest/net/risingworld/api/package-summary.html net.risingworld.api].


== Beispiel getGameTime ==
== Beispiel getGameTime ==

Aktuelle Version vom 18. Juni 2026, 10:37 Uhr


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.


Dokumentation

Die Klasse Server ist unter JavaDoc: Class Server zu finden.

Java Paket

In der Java Plugin-API bezeichnet der Begriff "Package" (Paket) eine Gruppierung von zusammengehörigen Klassen, Interfaces und anderen Paketen. Die Server Klasse befindet sich im Package net.risingworld.api.

Beispiel getGameTime

Liefert die aktuelle Ingame-Zeit. Über die Time.Unit-Enumeration kann gewählt werden, ob Stunden, Minuten, Tage usw. zurückgegeben werden sollen.
Beispiel: Aktuelle Ingame-Minuten (0-59) und Ingame-Stunden (0-23) abfragen.

//Aktuelle Minuten abfragen (0-59)
int minuten = Server.getGameTime(Time.Minutes);

//Aktuelle Stunden abfragen (0-23)
int stunden = Server.getGameTime(Time.Hours);

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

Beispiel setGameTimeSpeed

Ändert die Spielzeit-Geschwindigkeit. Der Wert gibt an, wie viele Echtzeit-Sekunden eine Ingame-Minute dauern soll (beispielweise bedeutet der Wert 60, dass eine Ingame-Minute 60 Echtzeit-Sekunden dauert).
Beispiel: Setzt die Spielzeit auf Echtzeit-Geschwindigkeit (1 Ingame-Minute == 60 Echtzeit-Sekunden).

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

public class ExamplePlugin extends Plugin
{
    @Override
    public void onEnable()
    {
        //Spielzeit auf Echtzeit-Geschwindigkeit setzen
        Server.setGameTimeSpeed(60);
    }

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

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

Beispiel 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)