Enderperle entfernen

  • Sollte so passen. Bin aber nur am Handy also keine Garantie

  • Sollte so passen. Bin aber nur am Handy also keine Garantie

    Wieso iterierst du den gesamten Inhalt des Inventars und dekrementierst die Anzahl der Enderperlen. Das ist doch viel zu aufwendig. Dafür gibt es die Methode PlayerInventory#removeItem.

  • _Klaro , ich würde dir in Zukunft empfehlen, deine Fragen/Probleme genauer zu beschreiben. Auch ein Quellcode wäre es schön, damit man dein Problem besser verstehen kann.

    Welches Event verwendest du den aktuell?


    Ich würde das EntityDismountEvent verwenden. In diesem Event gibt es die Methode getDismounted. Dieses Entity prüfst du, ob es sich dabei um eine Enderperle handelt. Wenn dies der Fall ist, entfernst du es mit Entity#remove.

  • Hier der SourceCode und ich weiß nicht wie ich beim VehicleExitEvent die Enderperle Entferne

  • Code
    1. p.getInventory().setItem(5, ItemAPI.createItem(Material.ENDER_PEARL, 0, "§7Enderperle"));

    Es kann Errors / Fehler geben wenn du eine Enderperle auf 0 Setzen willst und dieser dann einen Namen gibst.


    Code
    1. p.getInventory().setItem(5, new ItemStack(Material.ENDER_PEARL, 1);



    Wenn du aber haben möchtest, das immer 1 Enderperle weggenommen wird und ein neuer ItemStack entsteht:


    Code
    1. ItemStack newItemStack = new ItemStack(Material.ENDER_PEARL);
    2. int z = e.getItem().getAmount()-1;
    3. newItemStack.setAmount(z);
    4. ItemMeta m = e.getItem().getItemMeta();
    5. newItemStack.setItemMeta(m);
    6. p.getInventory().setItem(5, newItemStack);
  • Ihr versteht mich falsch :) ich möschte, dass die enderperle auf der man sitzt entfernt wird, wenn man diese verläasst

    Das wiederspricht sich aber, denn du selber sagst ja das die Enderperle von dem Spieler im Inventar neugesetzt werden soll.


    Ich würde dich bitten, alles konkret aufzuschreiben, sodass man dir besser Helfen kann.



    MFG


    Rasza

  • Manchmal frage ich mich echt, was in den Köpfen anderen ab geht...

    _Klaro , ich habe dir doch bereits einen Lösungsansatz gegeben.

    Ich würde das EntityDismountEvent verwenden. In diesem Event gibt es die Methode getDismounted. Dieses Entity prüfst du, ob es sich dabei um eine Enderperle handelt. Wenn dies der Fall ist, entfernst du es mit Entity#remove.

    Und jetzt nochmals ausführlicher. Du verwendest das VehicleExitEvent. Dieses Event wird jedoch nicht aufgerufen, wenn ein Spieler durch Ducken die Enderperle verlassen möchte. Das Event wird nur bei zum Beispiel Booten aufgerufen. Hättest du einmal einen Debug durchgeführt, hätte dir dies auffallen müssen. Allgemein empfehle ich, wenn man bei einem Problem nicht weiter kommt, erst einmal alles debuggen. Es gibt da noch das EntityDismountEvent, welches immer aufgerufen wird, sobald ein Entity von einem anderen Entity absteigt. Dieses Event wird also auch aufgerufen, wenn der Spieler die Enderperle verlassen möchte. Um dann die Enderperle von der Welt zu entfernen, verwendet man einfach Entity#remove.


    Die Lösung sollte nun in etwa so aussehen:

    Code
    1. @EventHandler
    2. public void onEntityDismount(EntityDismountEvent event) {
    3. if (event.getDismounted() instanceof EnderPearl) {
    4. event.getDismounted().remove();
    5. }
    6. }

    Des Weiteren ist mir aufgefallen, dass die HashMap, welche die Enderperlen speichert, überhaupt keinen Zweck erfüllt und somit völlig sinnlos ist.