Minecraft Server Manager

  • Hallo Leute.

    Wie der Titel schon beschreibt, wollte ich einen Minecraft Server Manager schreiben.
    Der Serverdateien von Bukkit, lassen sich bisher nur per .jar ausführen.

    Dies ist für Windows Server mehr als störend, da einem nicht angezeigt wird, ob der Server läuft oder nicht.
    Zudem wird auch keine Konsole oder desweiteren angezeigt, außer man verwendet eine .bat.

    Ich wollte mit meinem Server Manager Abhilfe schaffen.

    Doch es stellen sich einige Probleme in den Weg.

    Erstmal mein Code:

    Spoiler anzeigen
    [autoit]

    #NoTrayIcon

    [/autoit] [autoit][/autoit] [autoit]

    ; ================================;
    ; Bukkit Server Manager
    ; Made by Kazu
    ; © 2011 Kazu Mikura
    ; ================================;

    [/autoit] [autoit][/autoit] [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=d:\autoit\bukkit server manager\gui.kxf
    $GUI = GUICreate("Bukkit Server Manager", 684, 405, 192, 124)
    $OVERVIEW= GUICtrlCreateEdit("", 8, 48, 665, 305)
    $START = GUICtrlCreateButton("Start", 8, 8, 81, 25, $WS_GROUP)
    $STOP = GUICtrlCreateButton("Stop", 104, 8, 81, 25, $WS_GROUP)
    $RESTART = GUICtrlCreateButton("Restart", 200, 8, 81, 25, $WS_GROUP)
    $SAVEALL = GUICtrlCreateButton("Save-All", 296, 8, 81, 25, $WS_GROUP)
    $RELOAD = GUICtrlCreateButton("Reload", 392, 8, 81, 25, $WS_GROUP)
    $INPUT = GUICtrlCreateInput("", 8, 368, 665, 21)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $START
    ShellExecute("craftbukkit-0.0.1-SNAPSHOT.jar", "", "")
    Case $STOP

    [/autoit] [autoit][/autoit] [autoit]

    Case $RESTART

    [/autoit] [autoit][/autoit] [autoit]

    Case $SAVEALL

    [/autoit] [autoit][/autoit] [autoit]

    Case $RELOAD

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    EndSwitch
    WEnd

    [/autoit]

    Wie ihr sehen könnt, soll dieser lediglich einige Funktionen beinhalten.

    $START soll dafür sorgen, dass der Server erfolgreich läuft. [Blockierte Grafik: http://forumandersreisen.de/images/haken_gruen.gif]
    $STOP soll dafür sorgen, dass der Server beendet wird. (In der Konsole ist dies der Befehl "stop")
    $RESTART soll dafür sorgen, dass der Server beendet, danach aber wieder gestartet wird. (Dafür gibt es keinen Konsolen Befehl.)
    $SAVEALL soll dafür sorgen, dass der Server alle momentanen Veränderungen speichert. (In der Konsole der Befehl "save-all")
    $RELOAD soll dafür sorgen, dass alle Plugins und Einstellungen erneut geladen werden. (In der Konsole der Befehl "reload")
    $OVERVIEW soll dafür sorgen, dass dort alle Informationen angezeigt werden, wie in der Konsole.
    $INPUT soll die eingegeben Befehle an den Server weiterleiten, wie als wenn man sie in die Konsole eingibt.


    Mir fällt momentan kein Weg ein, diese Funktionen umzusetzten.

    Ich hoffe, ihr könnt mir helfen.

    Mit freundlichem Gruß
    Daisuke

  • Ich bin mir nicht sicher, da ich selbst keienn Minecraft server habe, aber du könntest es mal statt mit SHell Execute mit Run versuchen und dann mit

    [autoit]

    StdoutRead

    [/autoit]

    und

    [autoit]

    Stdinwrite

    [/autoit]

    versuchen. Ich bin mir aber nicht sicher ob es so klappt

  • Ich habe mir die Beispiele in der Hilfe durchgelesen, dennoch verstehe ich diese Funktionen nicht ganz.

    Ich weiß nicht, wie ich diese Funktionen in meinen Script implementieren soll.

  • Spoiler anzeigen
    [autoit]

    #NoTrayIcon

    [/autoit] [autoit][/autoit] [autoit]

    ; ================================;
    ; Bukkit Server Manager
    ; Made by Kazu
    ; © 2011 Kazu Mikura
    ; ================================;

    [/autoit] [autoit][/autoit] [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>
    $hFile = FileOpen ("C:\Test.txt", 1)
    #Region ### START Koda GUI section ### Form=d:\autoit\bukkit server manager\gui.kxf
    $GUI = GUICreate("Bukkit Server Manager", 684, 405, 192, 124)
    $OVERVIEW= GUICtrlCreateEdit("", 8, 48, 665, 305)
    $START = GUICtrlCreateButton("Start", 8, 8, 81, 25, $WS_GROUP)
    $STOP = GUICtrlCreateButton("Stop", 104, 8, 81, 25, $WS_GROUP)
    $RESTART = GUICtrlCreateButton("Restart", 200, 8, 81, 25, $WS_GROUP)
    $SAVEALL = GUICtrlCreateButton("Save-All", 296, 8, 81, 25, $WS_GROUP)
    $RELOAD = GUICtrlCreateButton("Reload", 392, 8, 81, 25, $WS_GROUP)
    $INPUT = GUICtrlCreateInput("", 8, 368, 665, 21)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $START
    $Process = Run("craftbukkit-0.0.1-SNAPSHOT.jar", "", default,0x3 )
    Case $STOP
    StdinWrite ( $Process, "stop" )
    Case $RESTART

    [/autoit] [autoit][/autoit] [autoit]

    Case $SAVEALL
    StdinWrite ( $Process, "save-all" )
    Case $RELOAD
    StdinWrite ( $Process, "reload" )

    [/autoit] [autoit][/autoit] [autoit]

    EndSwitch
    Do
    FileWrite($hFile, StdoutRead($Process)&@CRLF)
    Until @error <> 0
    WEnd

    [/autoit]

    Probiers mal so, in der Test.txt sollte, wenn es klappt, das stehen, was du in Overview haben willst

  • Run(@ProgramFilesDir&'\Java\jre6\bin\java.exe -Xms1024M -Xmx1024M -jar craftbukkit-0.0.1-SNAPSHOT.jar',Workingdir, '', 0x3)

    Workindfir muss das Verzeichnis sein, indem die Jar datei liegt, grade mit nem anderen Programm getestet

  • Ich habe es grademal mit TCPSend versucht, nunja connecten kann ich schonmal nur der Server kickt mich dann, weil ich dann doch nicht eingeloggt bin.
    Werde morgen mal weitere Sachen ausprobieren :)

  • So ich hab mir mal die MInecraft-server.jar runtergeladen und es mal hiermit getestet:

    Spoiler anzeigen
    [autoit]

    #NoTrayIcon

    [/autoit] [autoit][/autoit] [autoit]

    ; ================================;
    ; Bukkit Server Manager
    ; Made by Kazu
    ; © 2011 Kazu Mikura
    ; ================================;

    [/autoit] [autoit][/autoit] [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>
    $hFile = FileOpen ("C:\Test.txt", 1)
    $Process = 0
    #Region ### START Koda GUI section ### Form=d:\autoit\bukkit server manager\gui.kxf
    $GUI = GUICreate("Bukkit Server Manager", 684, 405, 192, 124)
    $OVERVIEW= GUICtrlCreateEdit("", 8, 48, 665, 305)
    $START = GUICtrlCreateButton("Start", 8, 8, 81, 25, $WS_GROUP)
    $STOP = GUICtrlCreateButton("Stop", 104, 8, 81, 25, $WS_GROUP)
    $RESTART = GUICtrlCreateButton("Restart", 200, 8, 81, 25, $WS_GROUP)
    $SAVEALL = GUICtrlCreateButton("Save-All", 296, 8, 81, 25, $WS_GROUP)
    $RELOAD = GUICtrlCreateButton("Reload", 392, 8, 81, 25, $WS_GROUP)
    $INPUT = GUICtrlCreateInput("", 8, 368, 665, 21)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $START
    ;~ $Process = Run("craftbukkit-0.0.1-SNAPSHOT.jar", "", default,0x3 )
    $Process = Run(@ProgramFilesDir&'\Java\jre6\bin\java.exe -Xms1024M -Xmx1024M -jar C:\Freigegeben\minecraft_server.jar ', '', '', 0x9)
    Case $STOP
    StdinWrite ( $Process, "stop" )
    Case $RESTART

    [/autoit] [autoit][/autoit] [autoit]

    Case $SAVEALL
    StdinWrite ( $Process, "save-all" )
    Case $RELOAD
    StdinWrite ( $Process, "reload" )
    EndSwitch
    If ProcessExists( $Process) Then
    Do
    $data = StdoutRead($Process)
    If $data <> "" Then
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $data = ' & $data & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    FileWrite($hFile, $data&@CRLF)
    EndIf
    Until @error <> 0
    EndIf
    WEnd

    [/autoit]

    Habe dabei das hier rausgebekommen: (Aus der Test.txt)

    Spoiler anzeigen

    Also soweit sogut, lesen geht :D

  • TheLuBu, ich habe deinen Code getestet.
    Jedoch wird bei mir wieder nur Java gestartet.

    Habe auch den Pfad richtig eingestellt bzw. den Pfad nachgeahmt.

    ~EDIT~
    Es existiert bereits ein Textdokument, welches server.log heißt und vom Server automatisch erstellt und gefüllt wird.
    Dort stehen alle Informationen drin, wie bei deiner Test.txt.

    2 Mal editiert, zuletzt von Kazuto (10. März 2011 um 23:24)

  • Teste mal, ob du, während der server läuft,

    [autoit]

    $hFile = FileOpen("server.log")
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $hFile = ' & $hFile & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console

    [/autoit]

    nutzen kannst, oder ob du dabei einen error erhälst.
    Wenn du den error erhälst, nutzt der server das Filehandle und es wird schwierig die Datei auszulesen

  • Das Problem hierbei ist, dass der Server nicht startet, aus welchem Grund auch immer.

    ~EDIT~

    Er startet den Server doch, der Prozess im Taskmanager heißt nur anders.

    Einmal editiert, zuletzt von Kazuto (11. März 2011 um 07:11)

  • Spoiler anzeigen
    [autoit]

    #NoTrayIcon

    [/autoit] [autoit][/autoit] [autoit]

    ; ================================;
    ; Bukkit Server Manager
    ; Made by Kazu
    ; © 2011 Kazu Mikura
    ; ================================;

    [/autoit] [autoit][/autoit] [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>
    $hFile = FileOpen("server.log")
    $Process = 0
    #Region ### START Koda GUI section ### Form=d:\autoit\bukkit server manager\gui.kxf
    $GUI = GUICreate("Bukkit Server Manager", 684, 405, 192, 124)
    $OVERVIEW= GUICtrlCreateEdit("", 8, 48, 665, 305)
    $START = GUICtrlCreateButton("Start", 8, 8, 81, 25, $WS_GROUP)
    $STOP = GUICtrlCreateButton("Stop", 104, 8, 81, 25, $WS_GROUP)
    $RESTART = GUICtrlCreateButton("Restart", 200, 8, 81, 25, $WS_GROUP)
    $SAVEALL = GUICtrlCreateButton("Save-All", 296, 8, 81, 25, $WS_GROUP)
    $RELOAD = GUICtrlCreateButton("Reload", 392, 8, 81, 25, $WS_GROUP)
    $INPUT = GUICtrlCreateInput("", 8, 368, 665, 21)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $START
    ;~ $Process = Run("craftbukkit-0.0.1-SNAPSHOT.jar", "", default,0x3 )
    $Process = Run(@ProgramFilesDir&'\Java\jre6\bin\java.exe -Xms1024M -Xmx1024M -jar craftbukkit-0.0.1-SNAPSHOT.jar ', '', '', 0x9)
    Case $STOP
    StdinWrite ( $Process, "stop" )
    Case $RESTART

    [/autoit] [autoit][/autoit] [autoit]

    Case $SAVEALL
    StdinWrite ( $Process, "save-all" )
    Case $RELOAD
    StdinWrite ( $Process, "reload" )
    EndSwitch
    If ProcessExists( $Process) Then
    Do
    $data = StdoutRead($Process)
    If $data <> "" Then
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $data = ' & $data & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    FileWrite($hFile, $data&@CRLF)
    EndIf
    Until @error <> 0
    EndIf
    WEnd

    [/autoit]

    Einen Error erhalte ich nicht, zumindest keinen sichtbaren.
    Jedoch kann ich den Servermanager erst beenden, wenn ich den Prozess beendet habe.
    Die Funktionen für stop, reload und save-all funktionieren jedoch nicht.

  • Spoiler anzeigen
    [autoit]

    #NoTrayIcon

    [/autoit] [autoit][/autoit] [autoit]

    ; ================================;
    ; Bukkit Server Manager
    ; Made by Kazu
    ; © 2011 Kazu Mikura
    ; ================================;

    [/autoit] [autoit][/autoit] [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>
    ;~ $hFile = FileOpen("server.log")
    #Region ### START Koda GUI section ### Form=d:\autoit\bukkit server manager\gui.kxf
    $GUI = GUICreate("Bukkit Server Manager", 684, 405, 192, 124)
    $OVERVIEW= GUICtrlCreateEdit("", 8, 48, 665, 305)
    $START = GUICtrlCreateButton("Start", 8, 8, 81, 25, $WS_GROUP)
    $STOP = GUICtrlCreateButton("Stop", 104, 8, 81, 25, $WS_GROUP)
    $RESTART = GUICtrlCreateButton("Restart", 200, 8, 81, 25, $WS_GROUP)
    $SAVEALL = GUICtrlCreateButton("Save-All", 296, 8, 81, 25, $WS_GROUP)
    $RELOAD = GUICtrlCreateButton("Reload", 392, 8, 81, 25, $WS_GROUP)
    $INPUT = GUICtrlCreateInput("", 8, 368, 665, 21)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $START
    ;~ $Process = Run("craftbukkit-0.0.1-SNAPSHOT.jar", "", default,0x3 )
    $Process = Run(@ProgramFilesDir&'\Java\jre6\bin\java.exe -Xms1024M -Xmx1024M -jar craftbukkit-0.0.1-SNAPSHOT.jar ', '', '', 0x9)
    AdlibRegister(Getdata())
    Case $STOP
    StdinWrite ( $Process, "stop" )
    Case $RESTART

    [/autoit] [autoit][/autoit] [autoit]

    Case $SAVEALL
    StdinWrite ( $Process, "save-all" )
    Case $RELOAD
    StdinWrite ( $Process, "reload" )
    EndSwitch

    [/autoit] [autoit][/autoit] [autoit]

    ;~ If ProcessExists( $Process) Then
    ;~ Do
    ;~ $data = StdoutRead($Process)
    ;~ If $data <> "" Then
    ;~ ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $data = ' & $data & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    ;~ FileWrite($hFile, $data&@CRLF)
    ;~ EndIf
    ;~ Until @error <> 0
    ;~ EndIf
    WEnd

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func Getdata()
    Local $avArray
    _FileReadToArray("server.log", $avArray)
    For $i = 1 To $avArray[0]
    $data = GUICtrlRead($OVERVIEW)
    GUICtrlSetData($OVERVIEW $data & @CRLF & $avArray[$i])
    EndIf
    EndFunc

    [/autoit]
  • Ich erhalte folgende Fehlermeldungen beim Ausführen des Scriptes.

    Spoiler anzeigen

    ~EDIT~

    Habe die Fehler behoben.

    Spoiler anzeigen
    [autoit]

    Func Getdata()
    Local $avArray
    _FileReadToArray("server.log", $avArray)
    For $i = 1 To $avArray[0]
    $data = GUICtrlRead($OVERVIEW)
    GUICtrlSetData($OVERVIEW, $data & @CRLF & $avArray[$i])
    Next
    EndFunc

    [/autoit]

    ~EDIT2~

    Ich erhalte nun folgende Fehlermeldung beim starten des Servers.
    [Blockierte Grafik: http://img36.imageshack.us/img36/7500/1299825302987.jpg]

    Einmal editiert, zuletzt von Kazuto (11. März 2011 um 07:35)

  • siehste, ein komma vergesen ;)

    die 2te Fehlermeldung ist ja ausm compilierten Zustand, was sagt der denn wenn du das über Scite laufen lässt?

    -EDIT- Probiers mal mit der Funktion

    [autoit]

    Func Getdata()
    Local $avArray
    _FileReadToArray("server.log", $avArray)
    If IsArray( $avArray) Then
    For $i = 1 To $avArray[0]
    $data = GUICtrlRead($OVERVIEW)
    GUICtrlSetData($OVERVIEW $data & @CRLF & $avArray[$i])
    EndIf
    EndFunc

    [/autoit]