• 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!

ItemStack .isSimilar Voraussetzung ?

Payno4

Schafhirte
Registriert
12 Februar 2015
Beiträge
127
Diamanten
300
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:
    public static ItemStack BackItem = new ItemStack(Material.SKULL_ITEM);



    static{

    

        BackItem.setDurability((short)3);

        SkullMeta meta =(SkullMeta) BackItem.getItemMeta();

        meta.setOwner("MHF_ArrowLeft");

        meta.setDisplayName(ChatColor.RED + "Zurück");

    

        BackItem.setItemMeta(meta);

    }

Stelle an der die Methode aufgerufen wird.
Code:
//Hier wird das Item aufgerufen (InventoryClickEvent)
            elseif(e.getCurrentItem().isSimilar(Invs.Items.BackItem)){

                    e.getWhoClicked().closeInventory();

                    e.getWhoClicked().openInventory(Invs.StoreInventory.StoreInv); 

            }

Mit freundlichen Grüßen
payno4
 
Zuletzt bearbeitet:

Chrisliebär❤️

nur echt mit ❤️
Moderator
Registriert
19 Mai 2014
Beiträge
1.675
Diamanten
830
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.
 

Payno4

Schafhirte
Registriert
12 Februar 2015
Beiträge
127
Diamanten
300
Ich weiß nicht ob das so eine gute Idee ist eine statische Membervariable außerhalb eines static Blocks zu initialisieren der sie verwendet. [...]

Ich seh in dem Code übrigens nicht wo du deinen Vergleich machst, vielleicht wärs besser, wenn du beide Teile posten würdest.

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:
    public static Inventory DressInv =Bukkit.createInventory(null,54,"Kleidung");

    static{      

        DressInv.setItem(53, Invs.Items.BackItem);

    }
 

GPSforLEGENDS

Vorarbeiter
Registriert
21 März 2014
Beiträge
289
Alter
85
Diamanten
300
Minecraft
GPSforLEGENDS

GPSforLEGENDS

Vorarbeiter
Registriert
21 März 2014
Beiträge
289
Alter
85
Diamanten
300
Minecraft
GPSforLEGENDS
Ja , es wird immer false zurückgegeben.
Das zweite Item ist wie oben schon im Code erwähnt e.getCurrentItem.
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.
 

Payno4

Schafhirte
Registriert
12 Februar 2015
Beiträge
127
Diamanten
300
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.

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. ^^
 

GPSforLEGENDS

Vorarbeiter
Registriert
21 März 2014
Beiträge
289
Alter
85
Diamanten
300
Minecraft
GPSforLEGENDS
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. ^^
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.
 

Payno4

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

Code:
[16:09:54 INFO]: SKULL_META:{meta-type=SKULL, display-name=§bPayno4's Skin, internal=H4sIAAAAAAAAAONiYOBi4AnOLs3JCSjKT8vMSeVgYPFLzE1lYCtIrMzLN2FgAADyktnPIwAAAA==, skull-owner=payno4}

[16:09:54 INFO]: UNSPECIFIC_META:{meta-type=UNSPECIFIC, display-name=§3Kleidung}

[16:09:55 INFO]: SKULL_META:{meta-type=SKULL, display-name=§bPayno4's Skin, internal=H4sIAAAAAAAAAONiYOBi4AnOLs3JCSjKT8vMSeVgYPFLzE1lYCtIrMzLN2FgAADyktnPIwAAAA==, skull-owner=payno4}

[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}

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:
publicclassMethodes{

 

    /**

    * Vergleicht zwei Inventorys auf ihre Slotanzahl, Type und Title.

    * @param Inv

    * @param InvContains

    * @return Boolean

    */

    publicstaticBooleancontainsInv(InventoryInv,InventoryInvContains){

     

        if(Inv.getTitle()==InvContains.getTitle()){

            if(Inv.getSize()==InvContains.getSize()){

                if(Inv.getName()==InvContains.getName()){

                    returntrue;

                }

                returnfalse;

            }

            returnfalse;

        }

        returnfalse;

    }

 

    /**

    * Verglaicht zwei Items auf Type, Name, Lore und Enchants. Am sichersten , wenn beide Items gewiss von der gleichen Quelle stammen.

    * ( Lösung zu Problem : .isSimilar(ItemStack i) does not work.

    * @param i1

    * @param i2

    * @return Boolean

    */

    publicstaticBooleanisSimilarItem(ItemStacki1,ItemStacki2){

        if(i1.getType()==i2.getType()){

            if(i1.getItemMeta().getDisplayName()==i2.getItemMeta().getDisplayName()){

                if(i1.getItemMeta().getLore()==i2.getItemMeta().getLore()){

                    if(i1.getItemMeta().getEnchants()==i2.getItemMeta().getEnchants()){

                        returntrue;

                    }

                    returnfalse;

                }

                returnfalse;

            }

            returnfalse;

        }

        returnfalse;

    }

}

Trotzdem danke für deine Hilfe ^^
 
Oben