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

Spigot Textausgabe kommt zwei Mal

Spagel

Minecrafter
Registriert
29 Januar 2017
Beiträge
10
Alter
23
Diamanten
301
Minecraft
Spagel
Hallo, ich möchte das wenn ein Spieler Rechtsklick auf einen VIllager macht das dieser einen Text ausgibt.

Allerdiengst bekommt er pro Click den Text 2 Mal..

Code:
        @EventHandler
        public void FAQInteract(PlayerInteractEntityEvent e) {
            Player p = e.getPlayer();
            if(e.getRightClicked() instanceof Villager);
            Villager FAQ = (Villager) e.getRightClicked();
            
            if(FAQ.getCustomName().equalsIgnoreCase("§a§lFAQ")) {

    
                
                e.setCancelled(true);
                
                
            p.sendMessage("§c§lFAQ");

Hat jemand eine Idee was ich dagegen machen kann?

Danke im Vorraus!
 

BloodSKreaper

Vorarbeiter
Registriert
12 Oktober 2014
Beiträge
249
Diamanten
316
Minecraft
BloodSKreaper
Zuletzt bearbeitet:

Spagel

Minecrafter
Registriert
29 Januar 2017
Beiträge
10
Alter
23
Diamanten
301
Minecraft
Spagel
Guten Tag,

ich meine, dass das Event sowohl für die Mainhand als auch Offhand getriggert wird. Das heißt, dass du beispielsweise abfragen kannst, ob getHand() die MainHand ist. Dann sollte die Dopplung verhindert werden.

Freundliche Grüße
BloodSKreaper
Danke für den Tipp, hättest du noch eine idee wie ich das abfragen könnte? Bin gerade total Lost
 

BloodSKreaper

Vorarbeiter
Registriert
12 Oktober 2014
Beiträge
249
Diamanten
316
Minecraft
BloodSKreaper
In deinem Code sind mir gerade noch einige Fehler aufgefallen. Ich habe meine Änderungen mit Kommentaren beschrieben.
Java:
    @EventHandler
    public void FAQInteract(PlayerInteractEntityEvent e) {
        Player p = e.getPlayer();
        if (e.getHand() == EquipmentSlot.HAND) { //Hier wird geprüft, ob die MainHand verwendet wird.
            if (e.getRightClicked() instanceof Villager) { //Hier war ein Semicolon, Abfrage war also sinnlos. Wurde durch eine Klammer ersetzt.
            //Performantere Alternative zur oberen Abfrage, aber Zeitgewinn nahezu vernachlässigbar.
                //if(e.getRightClicked().getType() == EntityType.VILLAGER){
                Villager FAQ = (Villager) e.getRightClicked();
                if (FAQ.getCustomName() != null) { //Null-Abfrage eingefügt um eine NullpointerExeption zu vermeiden, falls der NPC keinen CustomName hat
                    if (FAQ.getCustomName().equalsIgnoreCase("§a§lFAQ")) {
                        e.setCancelled(true);
                        p.sendMessage("§c§lFAQ");
                    }
                }
            }
        }
    }

Freundliche Grüße
BloodSKreaper
 

TrinityX

Redstoneengineer
Registriert
17 Mai 2020
Beiträge
47
Alter
23
Diamanten
337
Minecraft
NichtTrinity
In deinem Code sind mir gerade noch einige Fehler aufgefallen. Ich habe meine Änderungen mit Kommentaren beschrieben.
Java:
    @EventHandler
    public void FAQInteract(PlayerInteractEntityEvent e) {
        Player p = e.getPlayer();
        if (e.getHand() == EquipmentSlot.HAND) { //Hier wird geprüft, ob die MainHand verwendet wird.
            if (e.getRightClicked() instanceof Villager) { //Hier war ein Semicolon, Abfrage war also sinnlos. Wurde durch eine Klammer ersetzt.
            //Performantere Alternative zur oberen Abfrage, aber Zeitgewinn nahezu vernachlässigbar.
                //if(e.getRightClicked().getType() == EntityType.VILLAGER){
                Villager FAQ = (Villager) e.getRightClicked();
                if (FAQ.getCustomName() != null) { //Null-Abfrage eingefügt um eine NullpointerExeption zu vermeiden, falls der NPC keinen CustomName hat
                    if (FAQ.getCustomName().equalsIgnoreCase("§a§lFAQ")) {
                        e.setCancelled(true);
                        p.sendMessage("§c§lFAQ");
                    }
                }
            }
        }
    }

Freundliche Grüße
BloodSKreaper
Es ist zwar nett und bestimmt nur gut gemeint jemanden so helfen zu wollen, aber ich finde, dass es besser wäre mit Worten zu erklären wie es gemacht werden sollte, so dass der jeweils andere noch dazulernen kann indem er den Code dann selbst schreibt und nicht einfach kopieren kann.

Liebe Grüße,
Trinity
 

PaintableToast

Redstoneengineer
Registriert
10 Mai 2019
Beiträge
41
Diamanten
324
Es ist zwar nett und bestimmt nur gut gemeint jemanden so helfen zu wollen, aber ich finde, dass es besser wäre mit Worten zu erklären wie es gemacht werden sollte, so dass der jeweils andere noch dazulernen kann indem er den Code dann selbst schreibt und nicht einfach kopieren kann.
Dies hat er ja aber mit den Hinweisen die er neben seiner Änderung geschrieben hat. Ich finde es teilweise nicht besser in Worten einfach nur zu sagen zum Beispiel du hast etwas Null definiert natürlich wäre es praktisch wenn man etwas in Worten erklärt, jedoch denke ich das man dann auch wirklich alles erklären sollte und nicht einfach nur ein Wort schreiben sollte oder so denn dann ist es wiederum lehrreicher einfach den Code zu bekommen ... Das ist meine Stellung dazu.
 

BloodSKreaper

Vorarbeiter
Registriert
12 Oktober 2014
Beiträge
249
Diamanten
316
Minecraft
BloodSKreaper
Es ist zwar nett und bestimmt nur gut gemeint jemanden so helfen zu wollen, aber ich finde, dass es besser wäre mit Worten zu erklären wie es gemacht werden sollte, so dass der jeweils andere noch dazulernen kann indem er den Code dann selbst schreibt und nicht einfach kopieren kann.

Liebe Grüße,
Trinity
Hab ich das nicht getan? Prizipiell ist die Logik seines Programmes richtig, ich habe nur Flüchtigkeitsfehler markiert und verbessert sowie beschrieben. Das grundlegende Problem der doppelten Ausführung ist nicht auf den ersten Blick ersichtlich, leider auch nicht aus den Javadocs. Die Abfrage mit der Hand ist zwar prinzipiell nicht schwer, aber ich kann verstehen, dass es bei dem System mit den Equipmentslots schnell zur Verwirrung kommt, weshalb ich hier einfach mal aufzeigen wollte, wie es geht. Kurz zur Erinnerung: Das eigentliche Problem wurde mit einer Zeile Code gelöst. Eine ausführliche Beschreibung davon ist an dieser Stelle nicht nötig, da ich dies bereits in einem früheren Post getan habe, aber ohne Code.
Bin gerade total Lost
Wer hatte noch nie einen solchen Moment, wo die Lösung eigentlich offensichtlich ist, aber man einfach nicht darauf kommt?

Freundliche Grüße
BloodSKreaper
 
Zuletzt bearbeitet:

Spagel

Minecrafter
Registriert
29 Januar 2017
Beiträge
10
Alter
23
Diamanten
301
Minecraft
Spagel
In deinem Code sind mir gerade noch einige Fehler aufgefallen. Ich habe meine Änderungen mit Kommentaren beschrieben.
Java:
    @EventHandler
    public void FAQInteract(PlayerInteractEntityEvent e) {
        Player p = e.getPlayer();
        if (e.getHand() == EquipmentSlot.HAND) { //Hier wird geprüft, ob die MainHand verwendet wird.
            if (e.getRightClicked() instanceof Villager) { //Hier war ein Semicolon, Abfrage war also sinnlos. Wurde durch eine Klammer ersetzt.
            //Performantere Alternative zur oberen Abfrage, aber Zeitgewinn nahezu vernachlässigbar.
                //if(e.getRightClicked().getType() == EntityType.VILLAGER){
                Villager FAQ = (Villager) e.getRightClicked();
                if (FAQ.getCustomName() != null) { //Null-Abfrage eingefügt um eine NullpointerExeption zu vermeiden, falls der NPC keinen CustomName hat
                    if (FAQ.getCustomName().equalsIgnoreCase("§a§lFAQ")) {
                        e.setCancelled(true);
                        p.sendMessage("§c§lFAQ");
                    }
                }
            }
        }
    }

Freundliche Grüße
BloodSKreaper
Hallo

BloodSKreaper, Danke für die Anleitung und die Erklärung nebenbei da hat man noch was dazu gelernt!!

MFG


Spagel
 
Oben