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!

Fixed ItemStack .isSimilar Voraussetzung ?

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


  1. Payno4
    Offline

    Payno4

    Registriert seit:
    12. Februar 2015
    Beiträge:
    117
    Geschlecht:
    männlich
    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
     
    Zuletzt bearbeitet: 10. März 2016
  2. 可愛い
    Offline

    可愛い

    Registriert seit:
    19. Mai 2014
    Beiträge:
    736
    Geschlecht:
    weiblich
    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.
     
    • Gefällt mir Gefällt mir x 1
  3. Payno4
    Offline

    Payno4

    Registriert seit:
    12. Februar 2015
    Beiträge:
    117
    Geschlecht:
    männlich
    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.  
     
  4. GPSforLEGENDS
    Offline

    GPSforLEGENDS

    Registriert seit:
    21. März 2014
    Beiträge:
    289
    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.
     
    • Gefällt mir Gefällt mir x 1
  5. Payno4
    Offline

    Payno4

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

    GPSforLEGENDS

    Registriert seit:
    21. März 2014
    Beiträge:
    289
    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.
     
    • Gefällt mir Gefällt mir x 1
  7. Payno4
    Offline

    Payno4

    Registriert seit:
    12. Februar 2015
    Beiträge:
    117
    Geschlecht:
    männlich
    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. ^^
     
  8. GPSforLEGENDS
    Offline

    GPSforLEGENDS

    Registriert seit:
    21. März 2014
    Beiträge:
    289
    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.
     
    • Gefällt mir Gefällt mir x 1
  9. Payno4
    Offline

    Payno4

    Registriert seit:
    12. Februar 2015
    Beiträge:
    117
    Geschlecht:
    männlich
    @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 ^^