• Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

SignSystem

LinuxServer

Kuhfänger
Registriert
17 September 2016
Beiträge
50
Diamanten
0
Minecraft
LinuxServer
Guten Tag,

ich versuche mich gerade das erste Mal an einem SignSystem für Spigot.

Das Problem ist, dass man nicht connected wird.

code:
Code:
package de.Wolf.SignSystem.listener;

import de.Wolf.SignSystem.Main;
import de.Wolf.SignSystem.utils.Data;
import org.bukkit.block.Sign;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;

import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;

public class PlayerInteractListener implements Listener {

    @EventHandler
    private void onPlayerInteract(PlayerInteractEvent e) {
        if(e.getAction() == Action.RIGHT_CLICK_BLOCK) {
            if(e.getClickedBlock().getState() instanceof Sign) {
                Player p = e.getPlayer();
                Sign sign = (Sign) e.getClickedBlock().getState();
                if(sign.getLine(0).equalsIgnoreCase("§0§lSERVER")) {
                    p.sendMessage(Data.prefix + "§aVerbinde zum Server...");
                    ByteArrayOutputStream b = new ByteArrayOutputStream();
                    DataOutputStream o = new DataOutputStream(b);
                    try {
                        o.writeUTF("Connect");
                        o.writeUTF(sign.getLine(1));
                    } catch (Exception ex) {
                        p.sendMessage(Data.prefix + "§cDie Verbindung zum Server konnte nicht hergestellt werden.");
                        ex.printStackTrace();
                    }
                    p.sendPluginMessage(Main.getInstance(), "BungeeCord", b.toByteArray());
                } else if(sign.getLine(0).equalsIgnoreCase("§c§lOFFLINE")) {
                    p.sendMessage(Data.prefix + "§cDieser Server ist offline.");
                }
            }
        }
    }
}


Ich hoffe ihr könnt mir helfen, weil es auch keine Fehlermeldung gibt.

Mit freundlichen Grüßen
 

UnityGaming

Workaholic
Registriert
25 Oktober 2015
Beiträge
527
Alter
26
Diamanten
312
Minecraft
FastFelix771
Du solltest die Streams auch wieder schließen irgendwo.
Abgesehen davon, kann ich mir vorstellen, dass die Daten noch gar nicht oder nicht gänzlich übertragen wurden.
  • o.writeUTF("Connect");
  • o.writeUTF(sign.getLine(1));
o.flush(); - dadurch werden noch gepufferten Daten rausgeschickt.

Wird denn der catch-Block getriggert, oder passiert einfach nichts?
Das Problem könnte ja auch ganz woanders liegen.
 

LinuxServer

Kuhfänger
Registriert
17 September 2016
Beiträge
50
Diamanten
0
Minecraft
LinuxServer
Ja, habe ich
Code:
package de.Wolf.SignSystem;

import de.Wolf.SignSystem.listener.PlayerInteractListener;
import de.Wolf.SignSystem.listener.SignChangeListener;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin {

    private static Main instance;

    @Override
    public void onEnable() {
        instance = this;
        getServer().getMessenger().registerOutgoingPluginChannel(getInstance(), "BungeeCord");
        try {
            register();
            System.out.println("§aDas Plugin wurde erfolgreich gestartet.");
        } catch (Exception ex) {
            System.out.println("§c[ERROR] Das Plugin konnte nicht gestartet werden.");
        }
    }

    @Override
    public void onDisable() {
        instance = null;
    }

    private void register() {
        PluginManager pm = getServer().getPluginManager();
        pm.registerEvents(new PlayerInteractListener(), getInstance());
        pm.registerEvents(new SignChangeListener(), getInstance());
    }

    public static Main getInstance() {
        return instance;
    }
}
 

LinuxServer

Kuhfänger
Registriert
17 September 2016
Beiträge
50
Diamanten
0
Minecraft
LinuxServer
Ich hatte gestern noch ein wenig nachgeschaut und probiert und habe es mal so versucht.
Code:
package de.Wolf.SignSystem.listener;

import com.google.common.io.ByteArrayDataOutput;
import com.google.common.io.ByteStreams;
import de.Wolf.SignSystem.Main;
import de.Wolf.SignSystem.utils.Data;
import org.bukkit.block.Sign;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;

public class PlayerInteractListener implements Listener {

    @EventHandler
    private void onPlayerInteract(PlayerInteractEvent e) {
        if(e.getAction() == Action.RIGHT_CLICK_BLOCK) {
            if(e.getClickedBlock().getState() instanceof Sign) {
                Player p = e.getPlayer();
                Sign sign = (Sign) e.getClickedBlock().getState();
                if(sign.getLine(0).equalsIgnoreCase("§0§lSERVER")) {
                    p.sendMessage(Data.prefix + "§aVerbinde zum Server...");
                    ByteArrayDataOutput out = ByteStreams.newDataOutput();
                    try {
                        out.writeUTF("Connect");
                        out.writeUTF(sign.getLine(1));
                    } catch (Exception ex) {
                        p.sendMessage(Data.prefix + "§cDie Verbindung zum Server konnte nicht hergestellt werden.");
                        ex.printStackTrace();
                    }
                    p.sendPluginMessage(Main.getInstance(), "BungeeCord", out.toByteArray());
                } else if(sign.getLine(0).equalsIgnoreCase("§c§lOFFLINE")) {
                    p.sendMessage(Data.prefix + "§cDieser Server ist offline.");
                }
            }
        }
    }
}
 

BlackHole

Workaholic
Registriert
1 Juli 2012
Beiträge
752
Diamanten
0
Minecraft
BlackHole
Was mir noch so spontan erfällt: Ich weiß nicht, ob die Zeilen des Schildes mit Farbcodes zurückgegeben werden, intern werden die ja als Compound Text gespeichert.
Teste deinen Code auch mal völlig ohne andere Plugins (auf Spigot und auf BungeeCord).
 
Oben