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

Aus Rising World Wiki
(Die Seite wurde neu angelegt: „{{DISPLAYTITLE:{{SUBPAGENAME}}}} {{SUBPAGENAME}} 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. <br/> Die Klasse '''Server''' enthält ausschließlich statische Methoden und muss daher nicht instanziiert werden. == Wichtige Methoden in diesem Beispiel == ... == Siehe auch == * :Kategorie…“)
 
 
(14 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
{{DISPLAYTITLE:{{SUBPAGENAME}}}}
{{DISPLAYTITLE:{{SUBPAGENAME}}}}
{{SUBPAGENAME}}


Server Klasse
'''{{SUBPAGENAME}}'''
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.
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.
<br/>
<br/>
Die Klasse '''Server''' enthält ausschließlich statische Methoden und muss daher nicht instanziiert werden.
Die Klasse '''Server''' enthält ausschließlich statische Methoden und muss daher nicht instanziiert werden.


== Dokumentation ==
Die Klasse '''Server''' ist unter [https://javadoc.rising-world.net/latest/net/risingworld/api/Server.html JavaDoc: Class Server] zu finden.


== Wichtige Methoden in diesem Beispiel ==
=== 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 ==
Liefert die aktuelle Ingame-Zeit.
Über die [[Plugin-Erstellung/Java/Time.Unit|Time.Unit]]-Enumeration kann gewählt werden, ob Stunden, Minuten, Tage usw. zurückgegeben werden sollen. <br/>
Beispiel: Aktuelle Ingame-Minuten (0-59) und Ingame-Stunden (0-23) abfragen.
<syntaxhighlight lang="java">
//Aktuelle Minuten abfragen (0-59)
int minuten = Server.getGameTime(Time.Minutes);
//Aktuelle Stunden abfragen (0-23)
int stunden = Server.getGameTime(Time.Hours);
</syntaxhighlight>
Die Methode '''getGameTime()''' mit Codeschnipsel ist unter [https://javadoc.rising-world.net/latest/net/risingworld/api/Server.html#getGameTime(net.risingworld.api.objects.Time.Unit) 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 <code>60</code>, dass eine Ingame-Minute 60 Echtzeit-Sekunden dauert). <br/>
Beispiel: Setzt die Spielzeit auf Echtzeit-Geschwindigkeit (1 Ingame-Minute == 60 Echtzeit-Sekunden).
<syntaxhighlight lang="java" line start="1">
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()
    {
        //...
    }
}
</syntaxhighlight>
Die Methode '''setGameTimeSpeed()''' mit Codeschnipsel ist unter [https://javadoc.rising-world.net/latest/net/risingworld/api/Server.html#setGameTimeSpeed(float) 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. <br>
Beispiel: Prüft, ob das Plugin auf einem dedizierten Server läuft.
<syntaxhighlight lang="java">
if (Server.getType() == Type.Dedicated)
{
//Dies ist ein dedizierter Server
}
</syntaxhighlight>
Die Methode '''getType()''' mit Codeschnipsel ist unter [https://javadoc.rising-world.net/latest/net/risingworld/api/Server.html#getType() javadoc RW: Class Server - getType()] zu finden.
== Beispiel shutdown ==
Fährt den Server herunter, sobald er länger als 24 Stunden läuft. <br/>
Die Klasse '''MyPlugin''' erbt von  '''[https://javadoc.rising-world.net/latest/net/risingworld/api/Plugin.html Plugin]'''.
<syntaxhighlight lang="java" line start="1">
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()
    {
        //...
    }
}
</syntaxhighlight>
Die Klasse '''Server''' mit Codeschnipsel ist unter [https://javadoc.rising-world.net/latest/net/risingworld/api/Server.html javadoc RW: Class Server] zu finden.
=== Methoden der Oberklasse ===
Unsere Klasse erbt von der '''[https://javadoc.rising-world.net/latest/net/risingworld/api/Plugin.html Plugin]''' Oberklasse die zur API gehört. <br/>
Die Methode <code>onEnable() </code> wird aufgerufen, wenn das Plugin aktiviert wird. Zu diesem Zeitpunkt sind alle anderen Plugins bereits geladen.
Die Methode <code>onDisable() </code> wird aufgerufen, wenn das Plugin deaktiviert und entladen wird.
=== Wichtige Methoden in diesem Beispiel ===
* <code>[https://javadoc.rising-world.net/latest/net/risingworld/api/Server.html#getRunningTime() Server.getRunningTime()]</code> – liefert die Anzahl der Sekunden, die seit dem Start des Servers vergangen sind. 24 Stunden entsprechen 86400 Sekunden.
* <code>[https://javadoc.rising-world.net/latest/net/risingworld/api/Server.html#broadcastTextMessage(java.lang.String) Server.broadcastTextMessage()]</code> – sendet eine Chat-Nachricht an alle verbundenen Spieler. HTML- bzw. Wiki-Farbtags wie <code>&lt;color=red&gt;...&lt;/color&gt;</code> werden unterstützt.
* <code>[https://javadoc.rising-world.net/latest/net/risingworld/api/Server.html#broadcastYellMessage(java.lang.String,float,boolean) Server.broadcastYellMessage()]</code> – 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.
* <code>[https://javadoc.rising-world.net/latest/net/risingworld/api/Server.html#saveAll() Server.saveAll()]</code> – erzwingt das Speichern aller ausstehenden Änderungen (Welt, Spieler, NPCs, Truhen usw.). Empfehlenswert vor einem geplanten Shutdown.
* <code>[https://javadoc.rising-world.net/latest/net/risingworld/api/Server.html#shutdown() Server.shutdown()]</code> – fährt den Server geordnet herunter (dauert ca. 10 Sekunden). Für einen sofortigen Abbruch kann alternativ <code>System.exit(0);</code> verwendet werden.
* <code>[https://javadoc.rising-world.net/latest/net/risingworld/api/Timer.html Timer]</code> – 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 <code> @Override </code> Annotation können wir dem Compiler mitteilen das wir absichtlich die Methode der '''[https://javadoc.rising-world.net/latest/net/risingworld/api/Plugin.html Plugin]''' Oberklasse überschreiben wollen.


== Siehe auch ==
== Siehe auch ==
Zeile 17: Zeile 140:


=== Forum ===
=== Forum ===
...  
* [https://forum.rising-world.net/thread/12493-getting-started/ Rising World Forum: Getting started]
 
* [https://forum.rising-world.net/thread/4757-create-a-plugin/ Rising World Forum: Create a Plugin]
* [https://forum.rising-world.net/thread/12581-code-schnipsel/ Rising World Forum: Code Schnipsel]


=== Kategorien ===
=== Kategorien ===
Zeile 30: Zeile 154:




[[Kategorie:Plugin-API|Server]]
[[Kategorie:Plugin-API|Server Class]]
[[Kategorie:Java-Codeschnipsel|Server]]
[[Kategorie:Java-Codeschnipsel|Server]]

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)