ServerPlugin Lokalisierung eines Objektes im InventoryClickEvent

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

  1. Payno4
    Offline

    Payno4

    Registriert seit:
    12. Februar 2015
    Beiträge:
    117
    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 :)
     
    #1
  2. Victini151
    Offline

    Victini151

    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! ;)
     
    #2
    Payno4 gefällt das.
  3. Payno4
    Offline

    Payno4

    Registriert seit:
    12. Februar 2015
    Beiträge:
    117
    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.  
     
    #3
  4. Victini151
    Offline

    Victini151

    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)
     
    #4
    Payno4 gefällt das.