Gelöst ServerPlugin ItemStack .isSimilar Voraussetzung ?

Dieses Thema im Forum "Programmierung" wurde erstellt von Payno4, 10. März 2016.

  1. Payno4
    Offline

    Payno4

    Registriert seit:
    12. Februar 2015
    Beiträge:
    117
    Hei Community,

    ich versuche mit .isSimilar(ItemStack i) ein Item mit einem anderen zu vergleichen, doch leider funktioniert das bei mir nicht. Ich hab schon etwas rumgetestet und wenn ich alles einzeln abfrage , versagt er ab der ItemMeta. Das Item was ich vergleichen will ist unten aufgeführt.
    Hat jemand vielleicht eine Idee warum genau das nicht funktioniert und auch dazu ein Lösung ? :)

    Item
    Code (Text):
    1.  
    2.     public static ItemStack BackItem = new ItemStack(Material.SKULL_ITEM);
    3.  
    4.  
    5.  
    6.     static{
    7.  
    8.    
    9.  
    10.         BackItem.setDurability((short)3);
    11.  
    12.         SkullMeta meta =(SkullMeta) BackItem.getItemMeta();
    13.  
    14.         meta.setOwner("MHF_ArrowLeft");
    15.  
    16.         meta.setDisplayName(ChatColor.RED + "Zurück");
    17.  
    18.    
    19.  
    20.         BackItem.setItemMeta(meta);
    21.  
    22.     }
    23.  

    Stelle an der die Methode aufgerufen wird.
    Code (Text):
    1.  
    2. //Hier wird das Item aufgerufen (InventoryClickEvent)
    3.             elseif(e.getCurrentItem().isSimilar(Invs.Items.BackItem)){
    4.  
    5.                     e.getWhoClicked().closeInventory();
    6.  
    7.                     e.getWhoClicked().openInventory(Invs.StoreInventory.StoreInv);
    8.  
    9.             }
    10.  

    Mit freundlichen Grüßen
    payno4
     
    #1
  2. 可愛い
    Offline

    可愛い

    Registriert seit:
    19. Mai 2014
    Beiträge:
    657
    Ich weiß nicht ob das so eine gute Idee ist eine statische Membervariable außerhalb eines static Blocks zu initialisieren der sie verwendet. Ich würde die Initialisierung in den static Block ziehen und zwar ganz unabhängig vom Problem. Denn wenn das nicht Teil der Java Spec ist, dann kann das auf anderen Systemen plötzlich nicht mehr funktionieren, außerdem sind das Randfälle, die man einfach vermeiden sollte.

    Ich seh in dem Code übrigens nicht wo du deinen Vergleich machst, vielleicht wärs besser, wenn du beide Teile posten würdest.
     
    #2
    Payno4 gefällt das.
  3. Payno4
    Offline

    Payno4

    Registriert seit:
    12. Februar 2015
    Beiträge:
    117
    Ich hab den Code jetzt nochmal mit reingenommen. :)
    Aber wenn ich den ItemStack in ein Inventory reinsetze , dann erkennt er den static teil ja auch an und bei .isSimilar wird ja nichts anders gemacht oder irre ich mich da ?

    Bsp. :
    Code (Text):
    1.  
    2.  
    3.     public static Inventory DressInv =Bukkit.createInventory(null,54,"Kleidung");
    4.  
    5.     static{      
    6.  
    7.         DressInv.setItem(53, Invs.Items.BackItem);
    8.  
    9.     }
    10.  
     
    #3
  4. GPSforLEGENDS
    Offline

    GPSforLEGENDS

    Registriert seit:
    21. März 2014
    Beiträge:
    295
    Ort:
    Bürostuhl
    Minecraft:
    GPSforLEGENDS
    Was genau funktioniert nicht? Wird immer false zurückgegeben oder was?
    Wir bräuchten auch noch das 2 Item um zu wissen warum false zurückgegeben wird.
     
    #4
    Payno4 gefällt das.
  5. Payno4
    Offline

    Payno4

    Registriert seit:
    12. Februar 2015
    Beiträge:
    117
    Ja , es wird immer false zurückgegeben.
    Das zweite Item ist wie oben schon im Code erwähnt e.getCurrentItem.
     
    #5
  6. GPSforLEGENDS
    Offline

    GPSforLEGENDS

    Registriert seit:
    21. März 2014
    Beiträge:
    295
    Ort:
    Bürostuhl
    Minecraft:
    GPSforLEGENDS
    Wenn du nicht mehr Informationen geben kannst, dann ist alles was ich sagen kann: die beiden items sind einfach nicht gleich ^^
    Achte darauf das wirklich alles komplett gleich sein muss ausser die Menge der beiden itemstacks.
     
    #6
    Payno4 gefällt das.
  7. Payno4
    Offline

    Payno4

    Registriert seit:
    12. Februar 2015
    Beiträge:
    117
    Ich kann noch sagen , dass das item was man anklickt genau das gleiche ist wie das , das verglichen werden soll , da beide von der gleichen Variable (Invs.Items.BackItem) abhängen. ^^
     
    #7
  8. GPSforLEGENDS
    Offline

    GPSforLEGENDS

    Registriert seit:
    21. März 2014
    Beiträge:
    295
    Ort:
    Bürostuhl
    Minecraft:
    GPSforLEGENDS
    Sicher das du nicht das falsche anklickst? xD
    Ok entschuldige bitte den schlechten Scherz ^^
    Gib einfach mal vor der Überprüfung alle Attribute der beiden items aus (vorher überprüfen ob eine itemmeta vorhanden ist) und dann müsstest du ja den Unterschied finden können.
     
    #8
    Payno4 gefällt das.
  9. Payno4
    Offline

    Payno4

    Registriert seit:
    12. Februar 2015
    Beiträge:
    117
    @GPSforLEGENDS
    Ich hab jetzt mal die Item Meta ausgegeben und da kam tatsächlich ein Unterschied raus (siehe Code Anhang). :)

    Code (Text):
    1.  
    2. [16:09:54 INFO]: SKULL_META:{meta-type=SKULL, display-name=§bPayno4's Skin, internal=H4sIAAAAAAAAAONiYOBi4AnOLs3JCSjKT8vMSeVgYPFLzE1lYCtIrMzLN2FgAADyktnPIwAAAA==, skull-owner=payno4}
    3.  
    4. [16:09:54 INFO]: UNSPECIFIC_META:{meta-type=UNSPECIFIC, display-name=§3Kleidung}
    5.  
    6. [16:09:55 INFO]: SKULL_META:{meta-type=SKULL, display-name=§bPayno4's Skin, internal=H4sIAAAAAAAAAONiYOBi4AnOLs3JCSjKT8vMSeVgYPFLzE1lYCtIrMzLN2FgAADyktnPIwAAAA==, skull-owner=payno4}
    7.  
    8. [16:09:55 INFO]: SKULL_META:{meta-type=SKULL, display-name=§cZurück, internal=H4sIAAAAAAAAAEWQR47jVgBEOQMbaDfsW3gnNPQZRS5mQUnMYhQzDBiMYvrMEsOZfEhrvPG2qh5QVZ8I8on8fq+fTWOMXV422QfyXUqRPyOKzkFMEV90ihJfBADgK2LI/IuImThCiZxOc+YT+XxDfTbOZTb9hnzM2To/x2z6RBDk2wfy2718tNFP5fs/Z44OLoplcteLBYebkZeP3jkGJrc2WZ0MjA42FfB4u2pmE6HK4E2yVi7asNPqQhre/cBTgD5ip45WfZJJ1sgcLMiyZhw4Rs22A+r6TwOrlxOa5j3fAbRmS/f+YKfrzvBLJBkodeilTYC4wptXas+WBWXYonArU+0Ua4qUFdfbwarls2hI/BOYr6m3MzpUL3T7EjS8KuFqmE/xjD/xwMz8dKWfIU7RaiYPba+sWV0P1GjuKka0B9tyOFMh2VczS0IF8SALjl24XPfDmV5sNbej8qKiZNyKg/HoX6JIpAcNzg/A23S3tpEvENTB81kcZJ4IRb4n9y2XXwqU+ZVeweALm+ij82YEVOm7j2gfw12YRW5KMCGocOKlXcYimDQgOrNDAmYHvMDVKt1lhQy6GH3gIpAEvAJyRk0DYx0CVHa4sXseTlQ334VI5VLsxPdoeImiWhMdVDqSvchBCNDHOEkpdlueh7Y6KLJyhFNoDL2q2noTz3bLEXWCnVlNnAu90m9zMhB1zVlhR5BUXVr1SeRK1q/KBsZ+34vjDdej6bDVosCg6wWlylPdC3F3Ju4Lc8yPkuTaPlXfIe5qC3egMFp7mURn2g5a1IKhM8DYFaYaEx97rEo7sl7f6XdabmlnZN53N1jHwAjFw8XfMI91XkGyKRQgdqPO3G5pBn56bRpWrHthZrfk/OB+fCC/ulHzzL79lW0yiDy0SXCriH221CsOaHaCq9cHqdsOUHdzktrzFmNhHwuuHF4kSoIcpgvBElQB0AVz1a7mol7PhW67UBMkMoDcqgkBEQoBKZVLmYjyK4TNFDpkEXtOqZeydufC3PTlLcZTNfRC8F8Oa9oY8iD15caB7pp6zRZ6Zqm31pZ6zruH1WSihSbQ3aWqP0mNdrs7xNufyjczSVVXRqIFkmv3uuH/Z28Q7WPoVgnkYXohn6FvvlLBJVLR3cI7vYeeDHWbxbVrDQK73jXPITXbLUOoFaHAl/qVL0OPh0FVLyH8uc8Buqe+P5Kw91ZSw0xct4ta84I1sKVdalEmN3/8QJAP5Bctghnyhyryf7Pj2C23LJ8R5F+qVbrqlAQAAA==, skull-owner=MHF_ArrowLeft}
    9.  
    Leider habe ich keine Ahnung für was das internal steht und wie man das gleichsetzt bzw. ändert xD

    Ich hab mir jetzt einfach eine eigene Methode geschrieben , die meines Erachtens ausreicht :)

    Code (Text):
    1.  
    2. publicclassMethodes{
    3.  
    4.  
    5.  
    6.     /**
    7.  
    8.     * Vergleicht zwei Inventorys auf ihre Slotanzahl, Type und Title.
    9.  
    10.     * @param Inv
    11.  
    12.     * @param InvContains
    13.  
    14.     * @return Boolean
    15.  
    16.     */
    17.  
    18.     publicstaticBooleancontainsInv(InventoryInv,InventoryInvContains){
    19.  
    20.      
    21.  
    22.         if(Inv.getTitle()==InvContains.getTitle()){
    23.  
    24.             if(Inv.getSize()==InvContains.getSize()){
    25.  
    26.                 if(Inv.getName()==InvContains.getName()){
    27.  
    28.                     returntrue;
    29.  
    30.                 }
    31.  
    32.                 returnfalse;
    33.  
    34.             }
    35.  
    36.             returnfalse;
    37.  
    38.         }
    39.  
    40.         returnfalse;
    41.  
    42.     }
    43.  
    44.  
    45.  
    46.     /**
    47.  
    48.     * Verglaicht zwei Items auf Type, Name, Lore und Enchants. Am sichersten , wenn beide Items gewiss von der gleichen Quelle stammen.
    49.  
    50.     * ( Lösung zu Problem : .isSimilar(ItemStack i) does not work.
    51.  
    52.     * @param i1
    53.  
    54.     * @param i2
    55.  
    56.     * @return Boolean
    57.  
    58.     */
    59.  
    60.     publicstaticBooleanisSimilarItem(ItemStacki1,ItemStacki2){
    61.  
    62.         if(i1.getType()==i2.getType()){
    63.  
    64.             if(i1.getItemMeta().getDisplayName()==i2.getItemMeta().getDisplayName()){
    65.  
    66.                 if(i1.getItemMeta().getLore()==i2.getItemMeta().getLore()){
    67.  
    68.                     if(i1.getItemMeta().getEnchants()==i2.getItemMeta().getEnchants()){
    69.  
    70.                         returntrue;
    71.  
    72.                     }
    73.  
    74.                     returnfalse;
    75.  
    76.                 }
    77.  
    78.                 returnfalse;
    79.  
    80.             }
    81.  
    82.             returnfalse;
    83.  
    84.         }
    85.  
    86.         returnfalse;
    87.  
    88.     }
    89.  
    90. }
    91.  

    Trotzdem danke für deine Hilfe ^^
     
    #9