Item per Location ?

Dieses Thema im Forum "Programmierung" wurde erstellt von Major_Sauce, 14. Oktober 2013.

  1. Major_Sauce
    Offline

    Major_Sauce

    Registriert seit:
    18. September 2013
    Beiträge:
    27
    Minecraft:
    Major_Sauce
    Hallo,

    ich habe mit meinem Plugin ein Item gespawnt und diesem per ItemMeta einen Namen("testItem") gegeben.
    Das funktioniert auch wunderbar. Dieses Item kann nun nich mehr aufgehoben werden, habe ich durch das PlayerPickupItemEvent gemacht.
    Jetzt habe ich aber das Problem dass dieses Item durch einen Befehl wieder despawnen soll.
    Ich habe die Location des Items und möchte gerne an anderer Stelle durch die Location das Item wieder löschen können.
    Leider habe ich keine Ahnung wie ich die Items an einer Location auslesen kann, dann zu einem ItemStack umwandeln kann(um auszulesen ob es wirklich das testItem ist) und dann löschen kann.

    Hat da vielleicht jemand ne Ahnung ?

    mfg Major_Sauce
     
    #1
  2. ChunkNorris
    Offline

    ChunkNorris

    Am einfachsten wäre das über die Entity-ID, oder halt durch die Liste der Entities iterieren und gucken ob die Location übereinstimmt (da brauchst du aber auch einen workaround wenn mehrere auf einer Stelle liegen).
     
    #2
  3. Major_Sauce
    Offline

    Major_Sauce

    Registriert seit:
    18. September 2013
    Beiträge:
    27
    Minecraft:
    Major_Sauce
    Entity id ?

    Vielen Dank für deine schnelle Antwort, aber richtig versteh ich das jetzt nicht.

    Wie meinst über die EntityId ?
    Ich weiß zwar was ne entityId ist, aber kenne keine möglichkeit die EntityIds einer Location zu bekommen.

    Ach ja, bin auch noch nicht der besste im Programmieren, desswegen wären die Ansätze des Codes ganz hilfreich, den Rest könnte ich ja dann fertigschreiben(Ich denke so lerne ich es am schnellsten.)

    mfg Major
     
    #3
  4. Benutzer
    Offline

    Benutzer

    Registriert seit:
    1. November 2012
    Beiträge:
    56
    Hey

    und zwar würd ich das ganze in etwa so lösen:

    Code (Text):
    1. List<Entity> entities = location.getWorld().getEntities();
    2. for(Entity e : entities) {
    3.     if(e.getLocation().distance(location) <= 2)  {
    4.         if(e instanceof Item(oder so was)) {
    5.            //TODO e überprüfen
    6.            //TODO e.remove();
    7.         }
    8.     }
    9. }
     
    #4
  5. Major_Sauce
    Offline

    Major_Sauce

    Registriert seit:
    18. September 2013
    Beiträge:
    27
    Minecraft:
    Major_Sauce
    Hmm, wäre möglich, aber ich kann nicht angeben was es für ein item ist, es soll mit jedem Item funktionieren.
    Da ich also kein eindeutiges Item angeben kann würde es so auch nicht funktionieren oder ?

    mfg Major
     
    #5
  6. Major_Sauce
    Offline

    Major_Sauce

    Registriert seit:
    18. September 2013
    Beiträge:
    27
    Minecraft:
    Major_Sauce
    Lösung

    So, habe es jetzt hinbekommen :)

    hier der code :

    Code (Text):
    1.                         List<Entity> entities = Location.getWorld().getEntities();
    2.                     for(Entity e : entities) {
    3.                         if(e.getLocation().distance(Location) <= 2)  {
    4.                                 if(e instanceof Item){
    5.                                 org.bukkit.inventory.ItemStack ItemStack = ((Item) e).getItemStack();                  
    6.                                 if(ItemStack.getItemMeta().getDisplayName().startsWith("testItem-")){
    7.                                     Item Item = (Item) e;
    8.                                     Item.remove();
    9.                                 } else {
    10.                                     p.sendMessage("Kein Item");
    11.                                 }
    12.                             }
    13.                                         }  
    14.                         }
     
    #6