1. 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!

PlugIn Lokalisierung eines Objektes im InventoryClickEvent

Dieses Thema im Forum "Programmierung" wurde erstellt von Payno4, 9. Juli 2015.


  1. Payno4
    Offline

    Payno4 Schafhirte

    Registriert seit:
    12. Februar 2015
    Beiträge:
    117
    Geschlecht:
    männlich
    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 (Text):
    1.  
    2.     @EventHandler
    3.  
    4.     public void inv(InventoryClickEvente){
    5.  
    6.         Player p =(Player)e.getWhoClicked();
    7.  
    8.         ItemStack clicked =e.getCurrentItem();
    9.  
    10.         Inventory inv =invs.Inv;
    11. //Hier solllt die Variable stehen
    12.         Location l =;
    13.  
    14.         Location l1 = l.add(1, 0, 2);
    15.  
    16.        
    17.  
    18.         if(e.getInventory().getTitle()== inv.getTitle()){
    19.  
    20.             if(clicked.getType() == Material.DIAMOND){
    21.  
    22.                 e.setCancelled(true);
    23.  
    24.                 p.getWorld().getBlockAt(l1).setType(Material.CHEST);
    25.  
    26.                
    27.  
    28.             }
    29.  
    30.             if(clicked.getType() == Material.ANVIL){
    31.  
    32.                 e.setCancelled(true);
    33.  
    34.                 p.closeInventory();      
    35.  
    36.         }
    37.  
    38.       }
    39.  
    40.     }
    41.  

    Java : 1.8
    Spigot : 1.8.3
    Danke schon mal im Voraus für eure Hilfe :)
     
  2. Victini151
    Online

    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 von einem Moderator bearbeitet: 9. Juli 2015
    • Gefällt mir Gefällt mir x 1
  3. Payno4
    Offline

    Payno4 Schafhirte

    Registriert seit:
    12. Februar 2015
    Beiträge:
    117
    Geschlecht:
    männlich
    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 (Text):
    1.  
    2. package invs;
    3.  
    4.  
    5. import org.bukkit.Bukkit;
    6. import org.bukkit.Material;
    7. import org.bukkit.inventory.Inventory;
    8. import org.bukkit.inventory.ItemStack;
    9.  
    10. public class invs {
    11.    
    12.    
    13.     public static Inventory Inv = Bukkit.createInventory(null, 9, "MyInv");
    14.    
    15.     static {
    16.         Inv.setItem(0, new ItemStack(Material.ANVIL));
    17.         Inv.setItem(8, new ItemStack(Material.DIAMOND));
    18.         }
    19. }
    20.  
     
  4. Victini151
    Online

    Victini151 Guest

    Wenn es jedesmal die gleiche Kiste ist, kannst du beim Aufruf von Bukkit#createInventory() statt "null" als erstem Parameter folgendes nehmen:
    http://hastebin.com/toferitupi.avrasm

    Das impliziert natürlich, dass du Zugriff auf den Block haben musst, ich denke aber, das ist kein Problem! :) (World#getBlockAt() zB)
     
    • Gefällt mir Gefällt mir x 1