• 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 Leftclick in Adventure auf Kopf triggert event nicht

Xenoshi

Kuhfänger
Registriert
22 November 2015
Beiträge
77
Diamanten
300
Minecraft
godlessFloof
Das nächste Problem c:

und zwar habe ich bei meinem cookieclicker jetzt im lobbysystem Adventuremode aber irgendwie funktionieren dort die Events beim clicken nicht mehr?
Mir wurde gesagt das es daran liegt das es ein Bugg in mc ist aber wie kann ich das machen das es funkt?!
 

Xenoshi

Kuhfänger
Registriert
22 November 2015
Beiträge
77
Diamanten
300
Minecraft
godlessFloof
Hast du denn schon sichergestellt, dass das PlayerInteractEvent (ich denke, darum geht es) nicht aufgerufen wird? Zum Debuggen ist oft eine kurze Nachricht in der Konsole hilfreich, damit man weiß, ob das Event ausgelöst wird bzw. was genau nicht funktioniert, zum Beispiel:
Java:
@EventHandler
public void onClick(PlayerInteractEvent event) {
    Bukkit.getLogger().info("PlayerInteractEvent ausgelöst");
    if(event.getAction() == Action.RIGHT_CLICK_BLOCK) {
        Bukkit.getLogger().info("Rechtsklick ausgelöst");
        //...
    }
}
Die Bukkit-API sollte auf jeden Fall auch für Spieler im Adventure-Modus ein PlayerInteractEvent auslösen, soweit ich weiß.
Ansonsten wäre natürlich auch noch wichtig, wie dein Event-Handler überhaupt aussieht und wie du überprüfst, ob es der betreffende Kopf ist.

Also jeder kopf wird genommen! Dazu funktioniert der RIGHT_CLICK_BLOCK aber der LEFT_CLICK_BLOCK nicht aber wieso?
 

Xenoshi

Kuhfänger
Registriert
22 November 2015
Beiträge
77
Diamanten
300
Minecraft
godlessFloof
@Yasuo Krieger
Linksklick geht natürlich auch, aber dann musst du die Action-Überprüfung darum erweitern:
Java:
//...
if(event.getAction() == Action.LEFT_CLICK_BLOCK || event.getAction() == Action.RIGHT_CLICK_BLOCK) {
    //...
}
In beiden Fällen kannst du dir den angeklickten Block mit event.getClickedBlock() holen.
Code:
        if(p.isSneaking()) {
            if(e.getClickedBlock().getType() == Material.SKULL){
                if(e.getAction() == Action.LEFT_CLICK_BLOCK) {
                    Inventory cookie = Bukkit.createInventory(null, InventoryType.HOPPER, "§6Cookie-Shop");
                    cookie.setItem(0, Main.createHead("QuadratCookie", 1, "§7Meine Cookies: §6" + getCookie(p)));
                    cookie.setItem(2, Main.createItem(Material.PAPER, 1, 0, "§6Buy Upgrade"));
                    cookie.setItem(4, Main.createItem(Material.BARRIER, 1, 0, "§4Reset-All"));
                    
                    p.openInventory(cookie);
                }
            }
        }
hier der Code aber das problem ist das ich im Adventuremode keine Packets sende. Also kann man das irgendwie überbrücken
 

Xenoshi

Kuhfänger
Registriert
22 November 2015
Beiträge
77
Diamanten
300
Minecraft
godlessFloof
Code:
    @EventHandler
    public void onAni(PlayerAnimationEvent e) {
        Player p = e.getPlayer();
        
        if(e.getAnimationType() == PlayerAnimationType.ARM_SWING && p.isSneaking()) {
            
            Block mat = e.getPlayer().getTargetBlock((Set<Material>) null, 5);
            
            if(mat.getType() == Material.SKULL){
                Inventory cookie = Bukkit.createInventory(null, InventoryType.HOPPER, "§6Cookie-Shop");
                cookie.setItem(0, Main.createHead("QuadratCookie", 1, "§7Meine Cookies: §6" + getCookie(p)));
                cookie.setItem(2, Main.createItem(Material.PAPER, 1, 0, "§6Buy Upgrade"));
                cookie.setItem(4, Main.createItem(Material.BARRIER, 1, 0, "§4Reset-All"));
                
                p.openInventory(cookie);
            }
        }
    }

GUT das ist die lösung c:
 
Oben