Hilfe beim kleinen Wetter Plugin. | Anfänger

A status update and another preview video of the new version are now available!
  • So, nachdem ich seit Oktober 2016 die Flinte ins Korn geworfen habe versuche ich es heute noch mal. :S
    Als erstes möchte ich anmerken das ich keinen Plan habe was ich hier eigentlich mache, deswegen versucht bei einer Antwort so einfach wie möglich zu schreiben. :/


    Ich möchte ein kleines Plugin machen, nix besonderes, ist ja nur zum üben.
    Und zwar soll ein "normaler" Spieler, also kein Admin, per einfachen Chatbefehl /wetter das Wetter auf clear stellen können,
    Grund dafür ist das es manchmal so neblig ist das man selbst im Haus nix mehr sieht und ein Admin nicht immer da ist. :D


    Dies habe ich bis jetzt:

    Und ich denke mal ich muss HIER auf setNextWeather(Weather weather) zugreifen.
    Aber wie mache ich das?



    Danke für die Hilfe.


    Gruß TutMeistensNix

  • Das WeatherChangeEvent ist hierfür leider nicht ganz geeignet, denn Events sind generell nur "Ereignisse", die aktuell stattfinden, unabhängig von deinem Plugin. D.h. dieses Event wird dann aufgerufen, wenn das Wetter geändert wird (entweder via Command, oder zufällig). Du kannst dann zwar das Event abfangen und hier ein neues Wetter festlegen, aber dann müsstest du solange warten, bis sich überhaupt mal das Wetter ändert (damit das Event entsprechend aufgerufen wird).


    Wenn du "aktiv" ins Geschehen eingreifen möchtest, sind die Server und World Klassen von Relevanz. Diese bieten alle möglichen Funktionen, um irgendwas in der Welt oder an den Servereinstellungen zu ändern. Um zB das Wetter zu ändern, gibt es in der Server-Klasse die Funktion setWeather(). Um Zugriff auf den "Server" zu bekommen (wovon es nur 1 Instanz gibt), musst du in deinem Plugin die Funktion getServer() aufrufen (du kannst den Rückgabewert entweder irgendwo in einer Variable speichern und dann immer wieder verwenden, oder du rufst jedes Mal getServer() auf). Um also das Wetter zu ändern, könnte der Code so aussehen:


    Java
    Server server = getServer();
    server.setWeather(Weather.Rain, false);
  • Kann mal bitte jemand über meinen Code schauen?
    Es läuft, gibt, so weit ich das sehe, keine Fehler aus.


    Habe ich das so weit richtig gemacht oder würdet ihr sagen mach es lieber so oder so?
    Mir geht es jetzt hier um die Sache mit dem Wetter.
    Über Sinn oder Unsinn brauchen wir nicht sprechen, es geht nur um Übungsaufgaben für mich. :whistling:



    Vielen Dank fürs anschauen.


    TutMeistensNix

  • Ich würde sagen, dass es als Übung so passt, aber wenn du mal größere Plugins schreibst, würde ich den Aufbau etwas ändern. z.B. Eigene Classe für Events; Server, Wetter, Essen und Gesundheit zu einer globalen Variable machen und in der onEnable initialisieren, damit sie überall erreichbar sind und es 1. Weniger Schreibarbeit und 2. weniger Null-Fehler kommen.


    Aber für diese Übung sollte es reichen. :thumbup:


    Wichtig: Prüfe in der Praxis immer alles durch, damit du Leichtsinnsfehler findest. ;)

  • Danke für deine Antwort, ich habe ja schon Wetter, Essen und Gesundheit in je eine extra Klasse gepackt.
    Um es übersichtlicher, für mich, zu machen.



    Vielmehr kann ich doch nicht auseinander nehmen da die Sachen doch in die onCommand() müssen, oder habe ich da einfach ein Denkfehler?
    zb meine Gesundheit Klasse.

  • Mit deiner Gesundheit ist alles ok.
    Ich meine Folgendes:



    Das Event würde dann hier laufen:


  • Ich lerne ja noch, durch lesen oder Videos gucken.
    Nun hätte dich da mal eine Frage zu deinem Code.



    Lerne ich nicht die ganze Zeit das bei Java immer der Typ einer Variable angegeben werden muss damit Java weiß was da auf ihn zu kommt?


    Muss man das hier nicht machen?
    Ich frage nur um es zu verstehen, habe ja keine Ahnung. :huh:

  • Hat er doch, das hier ist die deklaration:


    Code
    // TYP variabelName
    Wetter wetter;
    Server server;
    Essen essen;
    Gesundheit gesundheit;


    Und dann hier die Zuweisungen:



    Code
    server = getServer();
    gesundheit = new Gesundheit(); // Initalisieren der Variablen!
    wetter = new Wetter(); // Muss nicht mehr neu initalisiert werden!
    essen = new Essen();
  • Hat er doch, das hier ist die deklaration:


    Code
    // TYP variabelName
    Wetter wetter;
    Server server;
    Essen essen;
    Gesundheit gesundheit;

    Und dann hier die Zuweisungen:



    Code
    server = getServer();
    gesundheit = new Gesundheit(); // Initalisieren der Variablen!
    wetter = new Wetter(); // Muss nicht mehr neu initalisiert werden!
    essen = new Essen();

    :thumbup:

  • String Int etc. sind Basistypen. Wenn du selber Klassen definierst also



    Java
    public class Wetter {
    ...
    }

    dann kannst du ja Wetter meinWetter = new Wetter(); machen. hier ist der Typ dann Wetter weil du ein Objekt der Klasse Wetter erzeugst indem du den Konstruktor aufrufst.

  • je länger der Server läuft desto mehr plugins verursachen Fehler, Ist mir aufgefallen, daher starte ich meinen 2 mal pro tag neu aktuell. hängt auch davon ab wie viele Spieler so aktiv sind über tag. Ggf. muss man auch öfter neu starten.


    Ich glaube das ist so eine generelle Krankheit von Sandbox games. 7 Days to Die zum Beispiel wird auch empfohlen täglich min ein mal neu zu starten - und ja ich habs selbst getestet ohne neustart spackt der auch rum. Und da gilt auch mehr spieler => öfter neustart.

Participate now!

Don’t have an account yet? Create a new account now and be part of our community!