Beiträge von TASSIA710

    Wenn man deine Fehlermeldung analysiert, sagt diese nur, dass du unzulässige Zeichen verwendest.

    Nachdem der Fehler aber in der 1. Zeile auftritt, also der Paket-Deklaration, macht dies recht wenig Sinn.


    Ich würde mal sagen, dass (nachdem die Zeichen u.a. 2-Bytes lang sind) du ein ungültige Datei-Kodierung verwendest.

    Versuch mal in deinem Editor, deine Datei-Kodierung auf UTF-8 zu ändern.

    Benutz Escape-Sequenzen:

    '\u00c4' ==> 'Ä'


    Erklärung:

    \uXXXX ist eine Escape-Sequenz in Java, d.h. eine "Zeichenumschreibung", wobei XXXX für den Hex-Wert des Zeichens stehen.

    Die Hex-Werte von Zeichen kannst du u.a. hier abfragen.

    Wichtig dabei ist, dass XXXX immer 4 Zeichen lang ist!

    Ist der Hex-Zahl nur 2 Zeichen lang (z.B. C4) musst du dies zu \u00c4 ändern.

    Ebenfalls wichtig ist, dass du nicht \XXXX schreibst, sondern \uXXXX!


    Beispiel (Schreibt Grüß Gott!):

    Code
    1. System.out.println("Gr\u00fc\u00df Gott!");

    Versuch mal, die obere Zeile so zu ändern:

    Java
    1. static List<String> seite2head;
    2. static {
    3. seite2head = new ArrayList<>();
    4.     seite2head.add("§8zu Seite 2");
    5.     seite2head.add(" ");
    6. }

    Oder du initialisierst die Liste im onEnable()

    Ist der Server lokal gehostet?

    In diesem Fall würde einmal ein Java Update durchführen und schauen, ob die richtige Version (32 Bit / 64 Bit) installiert ist.


    Alternativ natürlich beim Hoster nachfragen, ob die richtige Java Version für einen Hexxit Server installiert ist. ;)

    Einen Server-Verbindung kannst du so aufbauen:

    Gist Version


    Der Code dürfte eigentlich verständlich sein.

    1) Der Constructor Socket(String, int) stellt automatisch eine Verbindung zum Server auf.

    2) Wenn die Verbindung glückt, wird die Verbindung automatisch wieder geschlossen.

    3) Wenn die Verbindung nicht glückt, wird entweder eine UnknownHostException oder ConnectException geworfen.

    4) Letztendlich wird nochmal überprüft, ob irgendwie eine Verbindung vorhanden ist und diese ggf. geschlossen.


    Hier findet jedoch kein Datenaustausch statt.

    Das heißt, die einzige Information, die man bekommt, ist ob der Server erreichbar ist.


    Mit freundlichen Grüßen

    Tassilo

    Das wird schwer, da es sich dabei um verschiedene Programm Instanzen handelt.


    1) Du öffnest eine Konsole, nimmst die PID von der und überprüfst dann, ob das Programm noch läuft.

    Du müsstest dies halt regelmäßig prüfen.


    2) Du erstellst ein Plugin für den Server, das beim Start bspw. eine Datei erstellt und diese beim Stopp wieder löscht.

    Auch dies müsstest du regelmäßig überprüfen. Der Vorteil wäre hier, dass der Server auch als heruntergefahren angezeigt

    wird, wenn das, und vielleicht auch weitere, zum Teil wichtige Plugins, aufgrund von Server-Überlastung abstürzen.


    3.1) Socket-Verbindung. Erstelle ein Plugin, dass eine Verbindung zum GUI aufbaut. Darüber könnten dann auch weitere Informationen

    wie bspw. Join/Leave Events übertragen werden.


    3.2) RCON-Verbindung. Quasi wie 3.1, nur mit eingeschränkteren Möglichkeiten.


    4) Pinge den Server einfach an, und schaue ob er antwortet :)


    5) Gib deiner Start-Datei einen speziellen Fenster Titel und überprüfe regelmäßig ob dieses Fenster noch offen ist (ähnlich wie 1).



    Mehr Möglichkeiten fallen mir jetzt nicht wirklich ein.

    Ich weiß jetzt nicht, welche RemoteDesktopAPI du benutzt (falls du eine benutzt),

    und ob diese Events fürs Programm beenden hat oder Optionen wie 1/5 unterstützt.



    P.S. Eine Konsole kannst du folgendermaßen öffnen:

    Java
    1. Runtime.getRuntime().exec("cmd.exe /c start");

    oder die neuere Variante:

    Java
    1. ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/c", "start");
    2. Process p = pb.start();



    EDIT:


    Nach ca. 2 Stunden rumprobieren, bin ich zu einem halbwegs funktionierendem Ergebnis gekommen.

    Hier ist eine halbwegs funktionierende Version, von dem was ich glaube, dass du meinst:

    Gist Version


    Mit freundlichen Grüßen

    Tassilo

    Also, Commands via Command Prompt kannst du so ausführen:

    Java
    1. Process p = Runtime.getRuntime().exec("java -Xms512M -Xmx1G -XX:+UseConcMarkSweepGC -jar craftbukkit.jar");

    Beim Process kannst du dann via getInputStream() und getOutputStream() lesen und schreiben (bsp. "stop").


    Und ja, obige Version erlaubt eine Datei (über das altbekannte Datei auswählen Fenster) auszuwählen und diese dann zu benutzen.


    Wenn du beim RootServer keinen Bildschirm verbunden hast, wird ein JFrame (wenn du das benutzt) eine HeadlessException ergeben.

    Dateien kannst du über einen JFileChooser öffnen.


    Wenn du einen JButton hast, füg einen ActionListener hinzu:

    Gist Version


    Die ausgewählte Datei kannst du dann eben auslesen oder schreiben oder sonstiges.


    P.S.: Solltest du es noch nicht wissen. Solche Fenster können nicht von einem Spieler via Befehl geöffnet werden.

    Das Fenster würde sich in dem Fall in der VM des Servers öffnen. Sollte dies dein Ziel sein, musst du es wohl

    als Client Application machen und diese dann mit dem direkt über Sockets verbinden oder eine Verbindung zum

    FTP Server (falls vorhanden) deines Minecraft Servers aufbauen. Der JFileChooser würde in dem Fall vermutlich

    auch nicht mehr ganz funktionieren.

    Kurz gesagt: Wenn Server bei externer Host, dann dass nichts bringen.


    Ich hoffe ich konnte dir helfen.

    Für Rückfragen bin ich jederzeit offen :)


    Mit freundlichen Grüßen

    Tassilo