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

Lokalisierung eines Objektes im InventoryClickEvent

Payno4

Schafhirte
Registriert
12 Februar 2015
Beiträge
127
Diamanten
300
Hei Community ,

und mal wieder steh ich vor einem Problem , was ich einfach nicht schaff zu lösen . Kurz voraus mal der Ablauf :
Klick auf eine Kiste -> ein Inventar öffnet sich -> man klickt auf ein Item -> eine zweite Kiste erscheint 2 Blöcke weiter weg

Nun das Problem :
Immer wenn die Kiste spawnt , geht er von der Position des Spielers aus , aber er sollte von der Position der angeklickten Kiste ausgehen .

Ansatz :
Code:
    @EventHandler

    public void inv(InventoryClickEvente){

        Player p =(Player)e.getWhoClicked();

        ItemStack clicked =e.getCurrentItem();

        Inventory inv =invs.Inv;
//Hier solllt die Variable stehen 
        Location l =;

        Location l1 = l.add(1, 0, 2);

       

        if(e.getInventory().getTitle()== inv.getTitle()){

            if(clicked.getType() == Material.DIAMOND){

                e.setCancelled(true);

                p.getWorld().getBlockAt(l1).setType(Material.CHEST);

               

            }

            if(clicked.getType() == Material.ANVIL){

                e.setCancelled(true);

                p.closeInventory();       

        }

      }

    }

Java : 1.8
Spigot : 1.8.3
Danke schon mal im Voraus für eure Hilfe :)
 
V

Victini151

Guest
e.getInventory().getHolder() verweist auf den BlockState der zuerst angeklickten Kiste.
Vom BlockState aus gelangst du ganz schnell zur Location der Kiste ;)

So kommst du vom Kisteninventar zum Kistenblock:
http://hastebin.com/onopeloqok.js

Edit: Ich gehe hier davon aus, dass du beim Erstellen des Inventars den BlockState der Kiste übergibst. Dies ist notwendig, sofern es nicht das originale Kisteninventar ist! ;)
 
Zuletzt bearbeitet von einem Moderator:

Payno4

Schafhirte
Registriert
12 Februar 2015
Beiträge
127
Diamanten
300
Edit: Ich gehe hier davon aus, dass du beim Erstellen des Inventars den BlockState der Kiste übergibst. Dies ist notwendig, sofern es nicht das originale Kisteninventar ist! ;)

Erst mal danke für deine Antwort :D Aber jetzt muss ich leider fragen , wie ich ein BlockState übergebe ? ^^

Bin noch etwas neu ^^

Mein Inv :
Code:
package invs;


import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;

public class invs {
   
   
    public static Inventory Inv = Bukkit.createInventory(null, 9, "MyInv");
   
    static {
        Inv.setItem(0, new ItemStack(Material.ANVIL));
        Inv.setItem(8, new ItemStack(Material.DIAMOND));
        }
}
 
Oben