• 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!

Player Chat

HardSoul

Ehemaliges Teammitglied
Ehem. Teammitglied
Registriert
2 August 2012
Beiträge
759
Diamanten
251
Minecraft
HardS0ul
Hi Leute,
ich habe noch eine Frage zu Java.
Ich sitze grade an einem Plugin, bei dem ich verschiedenen Commandos erstelle, die über ein Inventory ausgeführt werden.
Nun aber zum Problem:
Ich wollte einen Teleport-Button in das Inventory legen, doch um jemanden teleportieren zu können benötigt es eine Location, indiesem Fall wollte ich die Location eines anderen Players nutzen. Deshalb sollte man nach dem Drücken des Knopfes einfach den anderen Spielernamen in den Chat schreiben und dieser soll dann als Location genutzt werden. Wie mach ich das, dass ich Texte aus dem Chat ziehe, ich schaff es einfach nicht.

Ich hoffe mir kann jemand helfen.

MfG,
Basti07711
 

HardSoul

Ehemaliges Teammitglied
Ehem. Teammitglied
Registriert
2 August 2012
Beiträge
759
Diamanten
251
Minecraft
HardS0ul
Gut habe ich gemacht, doch nun wird mir das onChat Rot angestrichen :(

Hier mal mein Code:
Code:
    @EventHandler
    public void Inventory(InventoryClickEvent event){
        Player p = (Player) event.getWhoClicked();
    
        if(event.getInventory().getName().equalsIgnoreCase("User-Befehelsliste")){
            event.setCancelled(true);
            if(event.getCurrentItem().getType() == (Material.ENDER_PEARL)){
                
                p.sendMessage("Bitte gebe den Usernamen in den Chat ein, zu dem du Teleportiert werden willst. Achte auf groß und kleinschreibung!");    
                
                public void onChat(AsyncPlayerChatEvent e){
                    
                    String msg = e.getMessage();
                    Player target = Bukkit.getServer().getPlayer(msg);
                    double x = target.getLocation().getX();
                    double y = target.getLocation().getY();
                    double z = target.getLocation().getZ();
                    World world = target.getWorld();
                    Location taretlocation = new Location(world, x, y, z);
                    
                    p.teleport(taretlocation);        
                }
                event.getView().close();
            }
        }        
    }
}
Weisst du wo der Fehler liegt?
 

FelixKlauke

Erzengel
Ehem. Teammitglied
Registriert
5 Januar 2014
Beiträge
1.038
Diamanten
299
Minecraft
FelixKlauke
Du darfst nicht einfach so einen EventHandler in einen anderen machen, das musst du schon getrennt machen :)

Und bei dem Player musst du den suchen, und darfst nicht einfach sagen: "Das eingegebene ist aufjedenfall ein richtiger Spielername", das haut dir schnell eine Exception rein.
 
G

games6471

Guest
Ich finde die Conversation API von Bukkit sehr praktisch. Ich persönlich habe sie schon einige male verwendet. Sieht zwar anfangs nach viel Arbeit aus, ist aber ein richtiges gutes Feature für einfach und Bug freien Code. Meiner Meinung nach viel besser als dies über Events zu handhaben, da du bei dieser Funktion eine besser Übersicht hast. Es muss hier nicht wirklich überprüft werden, in welche Frage der Spieler steckt oder ob er überhaupt in einer Frage ist. Zudem gibt es auch vordefinierte Conversation, die nach einer gewissen Zeit oder einer bestimmten Antwort abbrechen (z. B. /cancel oder der Spieler beantwortet die Frage nicht und spielt wie gewohnt weiter).

Schau dir einfach mal diesen Thread. Für den Einstieg fand ich diesen und JavaDoc Dokumentation ziemlich hilfreich.
Link
 
Zuletzt bearbeitet von einem Moderator:

HardSoul

Ehemaliges Teammitglied
Ehem. Teammitglied
Registriert
2 August 2012
Beiträge
759
Diamanten
251
Minecraft
HardS0ul
Auf das bin ich auch schon gestoßen, doch da ich erst 4 tage lang java aktiv lerne und übe, habe ich mich noch nicht damit auseinander gesetzt. Werde es mal versuchen. Deshalb versuche ich es auch über die ganzen Events. Doof ist dabei wie gesagt nur, dass ich keinen Schimmer hab, wie ich eine Online-Abfrage erstelle.
 

HardSoul

Ehemaliges Teammitglied
Ehem. Teammitglied
Registriert
2 August 2012
Beiträge
759
Diamanten
251
Minecraft
HardS0ul
Es geht jetzt zwar, doch mir ist grade ein fataler Fehler meinerseits aufgefallen. Das Event bricht nicht ab, also der Chat wird immer überprüft und spuckt sofort eine Exception aus.
Weiss jemand wie ich es stoppe?
Hier noch einmal mein vollständiger Code:
Code:
package ItemCommands;

import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.player.AsyncPlayerChatEvent;

public class Commands implements Listener {
    
    @EventHandler
    public void onClick(InventoryClickEvent e){
        
        Player p = (Player) e.getWhoClicked();
    
        if(e.getInventory().getName().equalsIgnoreCase("User-Befehelsliste")){
            e.setCancelled(true);
            if(e.getCurrentItem().getType() == (Material.ENDER_PEARL)){
                
                p.sendMessage("Bitte gebe den Usernamen in den Chat ein, zu dem du Teleportiert werden willst. Achte auf groß und kleinschreibung!");
                }
                e.getView().close();
        }
    }
        
    @EventHandler
    public void onChat(AsyncPlayerChatEvent chat, String [] args){
        Player p = (Player) chat.getPlayer();
        if(p.isOnline()){
            if(args.length == 1){
                chat.setCancelled(true);
                String msg = chat.getMessage();
                Player target = Bukkit.getPlayerExact(msg);
                double x = target.getLocation().getX();
                double y = target.getLocation().getY();
                double z = target.getLocation().getZ();
                World world = target.getWorld();
                Location targetlocation = new Location(world, x, y, z);
                
                p.teleport(targetlocation);
            }
        }
    }
}
 
Oben