Coding mit Java | Java-basierten APIs

  • Ersteller Ersteller ij9F_i0FaF-d9lrDSDDpDbfo
  • Erstellt am Erstellt am
Status
Für weitere Antworten geschlossen.
hallo ich bin dabei ein party plugin zu machen
mein problem ist dass ich nicht weiß wie man den befehl /party accept name macht. an sich ist der befehl einfach aber wie holt man alle spieler raus die den jeweiligen Spieler eingeladen haben? also wenn mehrere spieler mich in party einladen sodass ich selbst entscheiden kann in welcher party gehen will.
mit einer hashmap geht das nicht da ich immer neu zu dem neusten Spieler der einläd putte..
weiß einer wie das geht bitte :(

Code:
private Map<String, List<String>> partyInvites = new HashMap<>();

private List<String> getInvites( String invited ) {
    return partyInvites.computeIfAbsent( invited, new Function<String, List<String>>() {
        @Override
        public List<String> apply( String argInvited ) {
           return new ArrayList<String>();
        }
    });
}

public void addInvite( String inviter, String invited ) {
    List<String> openInvites = getInvites( invited );
    openInvites.add( inviter );
}

public boolean hasInvite( String invited, String inviter ) {
    List<String> openInvites = getInvites( invited );
    return openInvites.contains( inviter );
}

public void removeInvite( String invited, String inviter ) {
    partyInvites.remove( invited );
}

Einfach wenn ein /party add <name> kommt addInvite(commandsender, name). Bei accept ebenso. Du musst einfach mit hasInvite prüfen und beim accepten des Invites removeInvite aufrufen.
 
Ich habe ein 45 min dieses Plugin gecodet, deshalb ist alles in der Main Klasse.
Das öffnen des Inventars funktioniert, jedoch schließt sich beim Klicken der Antworten das Inventar nicht. Zudem kann ich die Items rausnehmen. Wie kann ich das unterbinden?

Die Results habe ich noch nicht getestet, aber wenn ein Fehler drin ist: Bitte sagen.

Hier der Code: http://hastebin.com/iluzodiner.avrasm
 
Ich habe ein 45 min dieses Plugin gecodet, deshalb ist alles in der Main Klasse.
Das öffnen des Inventars funktioniert, jedoch schließt sich beim Klicken der Antworten das Inventar nicht. Zudem kann ich die Items rausnehmen. Wie kann ich das unterbinden?

Die Results habe ich noch nicht getestet, aber wenn ein Fehler drin ist: Bitte sagen.

Hier der Code: http://hastebin.com/iluzodiner.avrasm
Hey!

Um das herausnehmen der Items zu verhindern musst du das Event Canceln mit e.setCancelled(true); :
Code:
@EventHandler
    public void onInvClick(InventoryClickEvent e) {
        Player p = (Player) e.getWhoClicked();
      
        e.setCancelled(true);
        if(e.getInventory().getName().equalsIgnoreCase("§4Umfrage")) {
            if(e.getCurrentItem().getType() == Material.MAP) {
                p.closeInventory();
                p.sendMessage("§3Die Antwort war richtig!");
                richtig.add(p.getName());
              
            }
            if(e.getCurrentItem().getType() == Material.PAPER) {
                p.closeInventory();
                p.sendMessage("§4Die Antwort war falsch... Schade!");
                falsch.add(p.getName());
            }
//Event Canceln     
e.setCancelled(true);
}
    }

Das Inventar schließt du mit:
Code:
p.closeInventory();

Ich hoffe ich konnte helfen :)

MfG
PlayerForceHD
 
Hey!
Code:
@EventHandler
    public void onInvClick(InventoryClickEvent e) {
        Player p = (Player) e.getWhoClicked();
      
        e.setCancelled(true);
        if(e.getInventory().getName().equalsIgnoreCase("§4Umfrage")) {
            if(e.getCurrentItem().getType() == Material.MAP) {
                p.closeInventory();
                p.sendMessage("§3Die Antwort war richtig!");
                richtig.add(p.getName());
              
            }
            if(e.getCurrentItem().getType() == Material.PAPER) {
                p.closeInventory();
                p.sendMessage("§4Die Antwort war falsch... Schade!");
                falsch.add(p.getName());
            }
        }
    }

Um das herausnehmen der Items zu verhindern musst du das Event Canceln mit e.setCancelled(true); :
Das habe ich schon oben gemacht!

Das Inventar schließt du mit:
Habe ich auch schon gemacht:
Code:
@EventHandler
    public void onInvClick(InventoryClickEvent e) {
        Player p = (Player) e.getWhoClicked();
       
        e.setCancelled(true);
        if(e.getInventory().getName().equalsIgnoreCase("§4Umfrage")) {
            if(e.getCurrentItem().getType() == Material.MAP) {
                p.closeInventory();
                p.sendMessage("§3Die Antwort war richtig!");
                richtig.add(p.getName());
               
            }
            if(e.getCurrentItem().getType() == Material.PAPER) {
                p.closeInventory();
                p.sendMessage("§4Die Antwort war falsch... Schade!");
                falsch.add(p.getName());
            }
        }
    }
 
Bitte schaue dir den Code an, bevor du etwas schreibst!
Habe ich, habe es jedoch übersehen :D
Sollte aber so funktionieren?
PS: Setze das e.setCancelled(true); in die If-abfrage von dem Inventory Namen, ansonsten kann keiner mehr Items bewegen, auch nicht im eigenen Inventory
 
Das war gemeint wegen dem Canceling, das war unpraktisch gesetzt.
Also der Code sollte so gehen, ansonsten versuche mal ne verzögerung oder so.
 
Wenn schon sollte er sich eine Methode machen, die - wenn der Befehl aufgerufen wird - ausgeführt wird und diese in beiden Kommandos aufrufen. Aber den Code einfach kopieren und einfügen ist eher eine blöde Idee.



Warum schreibst du dafür extra eine Antwort? Wenn du den Leuten hier helfen willst ist das ja ok und gut, aber wozu musst du dich hier "vorstellen".

Übrigens: "Nivou" -> "Niveau"


Wie stellst du dir diese Methode vor?
 
Ok. Danke für eure Antworten, doch es funktioniert immer noch nicht :(

Ich habe noch eine zweite Frage.
Wie kann ich bei BungeeCord mehrere Aliases für einen Command erstellen?

Ich habe es so gemacht in der Plugin.yml gemacht:
PHP:
hub:
    aliases: [l, leave, lobby]
    description: Teleportiert dich auf die Lobby
    usage: /hub

Doch geht es nicht...
Ich hab gesehen dass du plugin.yml groß geschrieben hast du musst es
klein schreiben
 
Code:
e.getPlayer().getVelocity().setY(2D);
Warum geht das in der 1.8 nicht mehr O.o?
 
Kann mir jemand helfen? Problem immer noch nicht gelöst!
Du hast den Listener nicht registriert.
Code:
Bukkit.getPluginManager().registerEvents(this, this);
( Ich rede von: http://hastebin.com/iluzodiner.avrasm )

Außerdem würde ich dir empfehlen, dass du e.setCancelled(true); nach der
Code:
if(e.getInventory().getName().equalsIgnoreCase("§4Umfrage")) {
Abfrage machst, da du sonst nicht dein Inventar bewegen kannst.
 
  • Like
Reaktionen: RedstoneRaudi
Du hast den Listener nicht registriert.
Code:
Bukkit.getPluginManager().registerEvents(this, this);
( Ich rede von: http://hastebin.com/iluzodiner.avrasm )

Außerdem würde ich dir empfehlen, dass du e.setCancelled(true); nach der
Code:
if(e.getInventory().getName().equalsIgnoreCase("§4Umfrage")) {
Abfrage machst, da du sonst nicht dein Inventar bewegen kannst.
Habe ich ja auch schon empfolen xD
 
Status
Für weitere Antworten geschlossen.

Soziale Medien

  • X
  • TikTok

Über uns

  • GommeHD.net ist einer der größten Minecraft-Server der Welt. Dir gefällt unser Server? Dann unterstütze uns durch einen Kauf im Shop!
  • Shop