game-server GUI erstellen

Chloroplast

Bekanntes Mitglied
ich habe vor eine GUI für ein game-server (Minecraft, kennt vielleicht jemand :) ) zu erstellen. ich habe nur keine Ahnung wie ein applet, oder frame mit dem programm kommuniezieren soll. bitte um möglichst unkompliezierte Lösung. (hab bei google und co schon geguckt. entweder da gibts nichts, oder ich bin einfach zu blöd :rtfm:)
 

Kr0e

Gesperrter Benutzer
Was genau meisnt du mit GUI ? Minecraft - Server hat ja bereits ne GUI, bzw ein Fenster wo Konsole drin und mit Speicherverbracuh etc...

Willste dann quasi eine GUI machen, mit Buttons und allem drum und dran ?
 

ARadauer

Top Contributor
mit der Runtime Klasse kannst du Przesse starten, davon lesen und kommandos hinschicken. schau dir das mal an... ist aber nicht einfach...
 
Zuletzt bearbeitet:
G

GladstoneGander

Gast
Ich habe soetwas für Minecraft auch mal gemacht. Bin dabei den von ARadauer beschriebenen Weg gegangen: Einen Prozess aus meiner Java-Anwendung gestartet (sozusagen den Minecraft Serverstart gewrapt), per Inputstream Befehle gesendet und den Outputstream ausgewertet.

Ich wollte damals eine Chatfunktion per Website mit Minecraft entwickeln. Aufgefallen war mir, dass nicht alles auf dem Outputstream ankommt was ich haben wollte, sondern viel Output auch auf dem Errorstream landet (nur als Hinweis). Im Endeffekt habe ich die Entwicklung eingestellt, weil die Möglichkeiten nur über Konsole bezüglich Serversteuerung halt sehr begrenzt sind.

Was für dich interessant sein könnte ist Craftbukkit. Einfach mal googlen. Damit kannst du Plugins in Java für Minecraft schreiben.
 
T

Tomate_Salat

Gast
Wenn du Befehle per InputStream gesendet hast, wundert es mich nicht, dass das ganze nicht funktioniert hat ;-).
 

TheDarkRose

Gesperrter Benutzer
Du musst dich als eigene Gegenstelle sehen. Input ist das was bei dir rein kommt, und output ist das was bei dir raus geht
Befehle output, input auswerten...

Ja, wenn man sich als gegenstelle sieht. Aber wenn man sich die Stream vom Process holt, dann bleibt der InputStream der Input in den man die Befehle schiebt und der OutputStream und ErrorStream sind die Ausgaben vom Process :oops:
 
T

Tomate_Salat

Gast
Zeig mir mal, wie du Befehle in einen InputStream schreibst. Und ein Konstrukt wie:
Java:
public class MyInputStream extends OutputStream {
zählt nicht ;-).
 
G

GladstoneGander

Gast
leute leute, ich habe da oben etwas durcheinander gebracht. befehle werden natürlich an den outputstream geschrieben. der errorstream ist ja auch ein inputstream...

für den thread-ersteller mal meine damaligen experimente. läuft auch mit dem aktuellen mc-server (1.7.3). vielleicht hilft das ja weiter:

Java:
package de.meijr.minecraftservletwrapper;

import com.sun.net.httpserver.HttpServer;
import java.io.IOException;
import java.net.InetSocketAddress;

public class Main {

    public static void main(final String[] args) {
        MinecraftWrapper wrapper = null;
        try {
            wrapper = new MinecraftWrapper();
            final HttpServer server = HttpServer.create(
                    new InetSocketAddress(8080), 10);
            server.createContext("/info", wrapper);
            server.setExecutor(null); // creates a default executor
            server.start();
        } catch (final IOException ex) {
            ex.printStackTrace();
            wrapper.shutdown();
        }
    }
}
Java:
package de.meijr.minecraftservletwrapper;

import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;

public class MinecraftWrapper implements HttpHandler {

    private final String sep = File.separator;
    private final String cmd = "java -jar %s nogui -Xms256M -Xmx512M";
    private final String serverDir = "e:" + sep + "minecraft" + sep;
    private final String serverJar = "minecraft_server.jar";
    private Process process = null;
    private volatile boolean receivePlayerList = false;
    private final List<String> dataList = new ArrayList<String>();

    public MinecraftWrapper() throws IOException {
        startServer();
    }

    public void startServer() throws IOException {
        process = Runtime.getRuntime().exec(
                String.format(cmd, serverJar));
        new StreamReaderThread(process.getErrorStream(),
                new ReaderListener() {

                    @Override
                    public void dataAvailable(final String data) {
                        System.out.println("ERR: " + data);
                        if (receivePlayerList) {
                            dataList.add(data);
                        }
                    }
                }).start();
        new StreamReaderThread(process.getInputStream(),
                new ReaderListener() {

                    @Override
                    public void dataAvailable(final String data) {
                        System.out.println("INP: " + data);
                        if (receivePlayerList) {
                            dataList.add(data);
                        }
                    }
                }).start();
    }

    public List<String> getPlayerList() {
        final List<String> playerList = new ArrayList<String>();
        if (process != null) {
            receivePlayerList = true;
            final BufferedOutputStream out =
                    (BufferedOutputStream) process.getOutputStream();
            try {
                final String command = "list\n";
                out.write(command.getBytes());
                out.flush();
            } catch (final IOException ex) {
                ex.printStackTrace();
            }

            // wait some time
            try {
                Thread.sleep(250);
            } catch (final InterruptedException ex) {
            }
            receivePlayerList = false;
            playerList.addAll(dataList);
            dataList.clear();
        }
        return playerList;
    }

    @Override
    public void handle(final HttpExchange t) throws IOException {
        final List<String> playerList = getPlayerList();
        final StringBuilder sb = new StringBuilder();
        sb.append("<html><title>Spielerliste</title>");
        if (playerList.isEmpty()) {
            sb.append("<body><center>Keine Spieler verbunden</center></body>");
        } else {
            sb.append("<body><lu>");
            for (final String player : playerList) {
                sb.append("<li>");
                sb.append(player);
            }
            sb.append("</lu></body>");
        }
        sb.append("</html>");

        t.sendResponseHeaders(200, sb.toString().length());
        OutputStream os = t.getResponseBody();
        os.write(sb.toString().getBytes());
        os.close();
    }

    public void shutdown() {
        process.destroy();
    }
}

Java:
package de.meijr.minecraftservletwrapper;

public interface ReaderListener {

    public void dataAvailable(final String data);
}

Java:
package de.meijr.minecraftservletwrapper;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class StreamReaderThread extends Thread {

    private final ReaderListener listener;
    private final BufferedReader reader;

    public StreamReaderThread(final InputStream inputStream,
            final ReaderListener listener) {
        this.listener = listener;
        reader = new BufferedReader(new InputStreamReader(inputStream));
    }

    @Override
    public void run() {
        try {
            while (true) {
                try {
                    if (reader.ready()) {
                        String line = null;
                        while ((line = reader.readLine()) != null) {
                            listener.dataAvailable(line);
                        }
                    }
                } catch (final IOException ex) {
                    ex.printStackTrace();
                }
                sleep(250);
            }
        } catch (final InterruptedException ex) {
            closeStream();
        }
    }

    private void closeStream() {
        if (reader != null) {
            closeStream(reader);
        }
    }

    public static void closeStream(final BufferedReader reader) {
//        try {
//            reader.close();
//        } catch (final IOException ex) {
//            ex.printStackTrace();
//        }
    }
}

du musst natürlich in der MinecraftWrapper die "serverJar" mit pfad zum mc-server versehen. wenn der wrapper gestartet wurde, kannst du mit einem browser auf http://localhst:8080/info das ergebnis sehen (eine auflistung der gerade angemeldeten spieler).

sollte als anfang ja reichen. aber wie bereits im vorherigen post erwähnt: google mal nach craftbukkit.
 

Chloroplast

Bekanntes Mitglied
ok, ich seh jetzt (viel später) das hier dochnoch was gepostet wurde :D

ok, ich präzisiere, es ist ein bukkitserver, und dieser hat nicht wie der normale, keine GUI. ich wollte diese (mit buttons etc) selber schreiben
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Kirby.exe Framework für Game Design Allgemeine Java-Themen 8
J Game of Life Randproblematik Allgemeine Java-Themen 9
S Conway's Game of Life Logarithmiusfehler Allgemeine Java-Themen 16
B Game Of Live Allgemeine Java-Themen 4
B Game of life Ein und Ausgabe Configurations Datei Allgemeine Java-Themen 17
Q Game of Life "unendlichkeits" Problem Allgemeine Java-Themen 4
T Java Game Development Buch Allgemeine Java-Themen 10
B Threads Game of Life - Threads Allgemeine Java-Themen 49
T Game of Life Aktualität? Allgemeine Java-Themen 4
J Erste Schritte Mehrere Mauszeiger für Ping Pong Game Allgemeine Java-Themen 7
T Tile Game Performance Allgemeine Java-Themen 32
B Starthilfe 2D Game Allgemeine Java-Themen 5
B Java Discord bot auf ein Root Server? Allgemeine Java-Themen 1
javaBoon86 Email Server Connection Problem Allgemeine Java-Themen 1
E Server Client Audio Allgemeine Java-Themen 6
E Server Client Audio Allgemeine Java-Themen 0
Jose05 Speicherung auf einem Server Allgemeine Java-Themen 1
D Live-Scripting im Server Allgemeine Java-Themen 6
Monokuma Threadproblem mit Sockets und Server Allgemeine Java-Themen 7
T imagej-server NullPointerException Allgemeine Java-Themen 1
TonioTec Api für Datenaustausch zwischen Client und Server Allgemeine Java-Themen 0
W Server-Thread schreibt nicht alle Dateien Allgemeine Java-Themen 6
C Java RMI Client - Server Allgemeine Java-Themen 0
B Datei/Ordner auf Server zugreifen/erstellen Allgemeine Java-Themen 2
M TomEE auf Windows Server 2016 installieren Allgemeine Java-Themen 4
bueseb84 Git : Mehrere Server verwenden Allgemeine Java-Themen 3
P Am Application Server - Selbe files aber trotzdem CNF Allgemeine Java-Themen 2
KeexZDeveoper Zugriff auf Methoden vom Server Allgemeine Java-Themen 7
J Java - hoher Ramverbraucht auf WTS Server Allgemeine Java-Themen 8
C TCP Server und BufferedReader Leerstring im Stream? Allgemeine Java-Themen 5
C Logfile upload zu einem externen filezilla sftp server Allgemeine Java-Themen 6
S Simples Client Server Setup in Java Allgemeine Java-Themen 4
K Server mieten, Berechnungen darauf ausführen Allgemeine Java-Themen 14
Anfänger2011 Java Server oder lieber was anderes Allgemeine Java-Themen 16
F Best Practice Server und Clients Allgemeine Java-Themen 10
E JavaFX RMI extrem langsam wenn Server nicht läuft Allgemeine Java-Themen 5
D Best Practice Java Application Server , Docker oder was? Allgemeine Java-Themen 15
L Suche nach CalDav Server API Allgemeine Java-Themen 0
C Hang Man Server Client Allgemeine Java-Themen 3
C Hang man mit Server/Client Allgemeine Java-Themen 2
K Classpath JDBC Driver auf Server Allgemeine Java-Themen 4
J Programm meldet "Keine Rückmeldung" nach Verbindung zum Server Allgemeine Java-Themen 4
I Installer, der JAVA EE Server und DB installiert Allgemeine Java-Themen 10
M Kapselung JasperReports Server und Java Allgemeine Java-Themen 5
P Java Fehler auf Win2008 Server java.io.FilePermission IE8 Version JRE 1.7.0_51 Allgemeine Java-Themen 7
M Dateien aus einem Verzeichnis auf einem Server auflisten Allgemeine Java-Themen 5
M Checksummenprüfung bei Client Server kommunikation Allgemeine Java-Themen 3
C Mit Pc Awendungen auf Server starten Allgemeine Java-Themen 8
B Input/Output Server Startet, Jedoch Kein Output. Allgemeine Java-Themen 1
T Daten über port abfangen mit proxy server Allgemeine Java-Themen 12
E Socket Client-Server-Programmierung Allgemeine Java-Themen 44
T Java Streaming-Server & Streaming-Client Allgemeine Java-Themen 4
R Fragen zu Server + UI Allgemeine Java-Themen 2
0 Lösungsweg Client Server Kommunikation Fehlermeldung ausgeben Allgemeine Java-Themen 12
D Client / Server Allgemeine Java-Themen 23
D Player Objekt - Frame über Server anzeigen lassen. Allgemeine Java-Themen 3
U AWT simulierter Tastendruck auf Virtual Server Allgemeine Java-Themen 7
Z Socket [Chatprogramm] Nachrichten vom Server anzeigen lassen Allgemeine Java-Themen 6
E Methoden Server Benutzer abfrage Allgemeine Java-Themen 2
N COM Server ansteuern / KISSsoft Allgemeine Java-Themen 3
N URLConnection - Server abgeschaltet Allgemeine Java-Themen 2
A Parser verursacht Speicherprobleme auf Server Allgemeine Java-Themen 2
T Mit Java auf Dateien zugreifen die auf einem Server liegen Allgemeine Java-Themen 5
J Problem beim Auslesen einer Datei vom Server Allgemeine Java-Themen 4
T jar Archiv auf Server ausführen Allgemeine Java-Themen 3
J Application Server Allgemeine Java-Themen 2
A Input/Output Applet-Zugriff auf PHP-Schnittstelle (externer Server) Allgemeine Java-Themen 22
Developer_X Java FTP - Ordner auf Server erstellen Allgemeine Java-Themen 7
C Java Server Pages Problem Allgemeine Java-Themen 6
T Gleichzeitige Zugriffe auf Daten auf dem Server Allgemeine Java-Themen 11
M Server-Responds testen, Code-Redundanz Allgemeine Java-Themen 3
T JPA Entity im Client-Server-Umfeld Allgemeine Java-Themen 19
C Primzahlen Server Allgemeine Java-Themen 3
K Server Daten Visualisieren Allgemeine Java-Themen 3
S FTP Gezippte Datei von FTP Server downloaden Allgemeine Java-Themen 24
T Zeit von einem Server/Webseite auslesen und in eigener GUI anzeigen Allgemeine Java-Themen 6
B verbindung mit exchange server Allgemeine Java-Themen 3
AlexSpritze Alle Domains oder FQDN von einem Server erfragen? Allgemeine Java-Themen 2
H SwingWorker statt Thread für einen Server Allgemeine Java-Themen 2
D Versuch Server - Client anwendung Allgemeine Java-Themen 9
M Frage zum Auslesen einer Datei auf nem Server Allgemeine Java-Themen 4
ruutaiokwu MS Exchange Server 2003 Daten auslesen Allgemeine Java-Themen 2
T Welcher Server? JSP und Client-Anwendung Allgemeine Java-Themen 4
Final_Striker Datei vom Server bekommen Allgemeine Java-Themen 2
H Server Threaded machen. Port-Problem Frage Allgemeine Java-Themen 2
W programm auf server Allgemeine Java-Themen 5
C Java Polling, Server Prozedur oder doch Datenbank? Allgemeine Java-Themen 4
MQue Server- Thread Client Allgemeine Java-Themen 2
N Daten auf Server kopieren Allgemeine Java-Themen 6
S Datei auf Server mit lokaler Datei vergleichen Allgemeine Java-Themen 4
J J2EE Server für EJB Container Allgemeine Java-Themen 8
D design client server Allgemeine Java-Themen 10
I Persistenz ohne App-Server? Allgemeine Java-Themen 6
O binärer Suchbaum mit client server., objekte speichern. Allgemeine Java-Themen 2
0 kein Java unter Server 2008 ? Allgemeine Java-Themen 3
G Proxy- Server setzen Allgemeine Java-Themen 2
G Preise am Server verändern Allgemeine Java-Themen 4
M Applet Servlet Kommunikation ein Problem bei externem Server Allgemeine Java-Themen 3
J Java zugriff auf Exchange Server Allgemeine Java-Themen 10
MQue FTP Server/ Datei ablegen Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben