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

Probleme beim PlayerInteractEvent

RB_Redstone

Minecrafter
Registriert
11 März 2014
Beiträge
11
Diamanten
300
Minecraft
RB_Redstone
Hi Leute!

Ich habe ein Problem mit dem PlayerInteractEvent. Diese Methode, die ich euch gleich zeige, hat schon immer funktioniert. Nur jetzt nicht mehr. Ich weiß nicht warum. Kann mir einer sagen, wo das Problem liegt?

Es wird mir als Spieler "Fehler!" in roter Farbe ausgegeben, wenn ich ein Item mit dem Namen "Stein" in roter Farbe rechtsklicke.

Mein Code:
package de.rbredstone.listener;

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 ItemClickEvent implements Listener {

    @EventHandler
    public void onClick(PlayerInteractEvent e) {
        Player p = e.getPlayer();

        if (e.getAction().equals(Action.RIGHT_CLICK_AIR) || e.getAction().equals(Action.RIGHT_CLICK_BLOCK)) {
            if (e.getItem() != null) {
                if (e.getItem().getItemMeta().getDisplayName().equals("§cStein")) {
                    p.sendMessage("§cHallo");

                } else {
                    p.sendMessage("§cFehler!");
                }
            }
        }
    }
 

Malfrador

Threadripper
Registriert
16 Juni 2013
Beiträge
1.473
Diamanten
396
Minecraft
Malfrador
Ganz grundsätzlich sollte man immer ChatColor.* nutzen, nicht §. Das hat was mit dem Encoding der Nachricht zu tun. § geht, ist aber nicht empfohlen.

Was genau gibt getDisplayName denn zurück? Gib das doch einfach Mal statt "Fehler" aus. Meine Theorie wäre, das getDisplayName den Namen ohne Farbcodes zurückgibt oder den Namen & die Formatierung (als EnumChatFormat) und nicht genau den String.

Wenn du generell vorhast, das bestimmte Items spezielle Effekte haben gibt es aber einen sinnvolleren Weg als den Namen:
(1.13), ich glaube es wurde irgendwann durch PersistentDataHolder ersetzt:
 
Zuletzt bearbeitet:

RB_Redstone

Minecrafter
Registriert
11 März 2014
Beiträge
11
Diamanten
300
Minecraft
RB_Redstone
Ganz grundsätzlich sollte man immer ChatColor.* nutzen, nicht §. Das hat was mit dem Encoding der Nachricht zu tun. § geht, ist aber nicht empfohlen.

Was genau gibt getDisplayName denn zurück? Gib das doch einfach Mal statt "Fehler" aus. Meine Theorie wäre, das getDisplayName den Namen ohne Farbcodes zurückgibt oder den Namen & die Formatierung (als EnumChatFormat) und nicht genau den String.

Wenn du generell vorhast, das bestimmte Items spezielle Effekte haben gibt es aber einen sinnvolleren Weg als den Namen:
(1.13), ich glaube es wurde irgendwann durch PersistentDataHolder ersetzt:

Hallo!

Danke für die Antwort!

Es gibt mir eine leere Zeile aus, wenn ich den DisplayName versuche auszugeben.
Woran kann das liegen? Ich meine, das hat immer funktioniert. Vielleicht die Version? Aber trotzdem ist das merkwürdig.

Wenn ich den Stein "§cStein" benenne, dann gibt er auch das aus.
 

RB_Redstone

Minecrafter
Registriert
11 März 2014
Beiträge
11
Diamanten
300
Minecraft
RB_Redstone
Da gebe ich jetzt DisplayName aus. Wenn ich jetzt mit irgendeinem Item rechtsklicke (ist auch klar, ich habe ja nix definiert), dann gibt er den DisplayName des Items aus, sofern er einen hat. Ich habe es jetzt mal mit ChatColor.* versucht, aber trotzdem will er nicht.

Jetzt habe ich es etwas umgeändert. Ich gebe DisplayName aus.:
package de.rbredstone.listener;

import org.bukkit.ChatColor;
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 ItemClickEvent implements Listener {

    @EventHandler
    public void onClick(PlayerInteractEvent e) {
        Player p = e.getPlayer();

        if (e.getAction().equals(Action.RIGHT_CLICK_AIR) || e.getAction().equals(Action.RIGHT_CLICK_BLOCK)) {
            if (e.getItem() != null) {
                if (e.getItem().getItemMeta().getDisplayName().equals(ChatColor.RED + "Stein")) {
                    p.sendMessage("§cHallo");

                } else {
                    p.sendMessage(e.getItem().getItemMeta().getDisplayName());
                }
            }
        }
    }
}
 

RB_Redstone

Minecrafter
Registriert
11 März 2014
Beiträge
11
Diamanten
300
Minecraft
RB_Redstone
An alle!

Das Problem wurde gelöst!

Für alle die es noch wissen wollen:
Der Stein hat das deshalb nicht ausgelöst, weil die Data hinter dem Namen nicht geändert wurde. Nur der Name selbst wurde geändert. Damit hat das System das nicht erkannt.

Ich habe einfach das Item mit meinem Plugin erstellt und es geht. Es gibt auch andere Plugins, die die Daten mit umändern.
Zum Beispiel dieses hier: https://www.spigotmc.org/resources/itemizer.14733/

Danke an alle, die mir hier mit geholfen haben! Besonders an @Malfrador !

MfG,
Das Redstone
 
Oben