Player skull meta changes on reload/restart

Discussion in 'Plugin Development' started by pietermantel, Dec 1, 2018.

Thread Status:
Not open for further replies.
  1. Hello! I have a script that creates a skull with a custom texture. They are created like this:
    Code:
    public static ItemStack createSkull(Head headData, int amount, String name, String lore) {
            ItemStack head = new ItemStack(Material.PLAYER_HEAD);
            if((headData.getPrefix() + headData.getIdTag()).isEmpty()) return head;
          
            SkullMeta headMeta = (SkullMeta) head.getItemMeta();
            GameProfile profile = new GameProfile(UUID.randomUUID(), null);
            profile.getProperties().put("textures", new Property("textures", headData.getPrefix() + headData.getIdTag()));
            try {
                Field profileField = headMeta.getClass().getDeclaredField("profile");
                profileField.setAccessible(true);
                profileField.set(headMeta, profile);
            } catch (NoSuchFieldException | SecurityException | IllegalAccessException e) {
                e.printStackTrace();
            }
            head.setItemMeta(headMeta);
            head.setAmount(amount);
            ItemMeta meta = head.getItemMeta();
            meta.setDisplayName(name);
            ArrayList<String> loreList = new ArrayList<String>();
            loreList.add(lore);
            if (!lore.equals(""))
                meta.setLore(loreList);
            head.setItemMeta(meta);
            return head;
        }
    The Head enum looks like this:
    Code:
    YOUTUBE("DJmNmMwN2EzMjZkZWY5ODRlNzJmNzcyZWQ2NDU0NDlmNWVjOTZjNmNhMjU2NDk5YjVkMmI4NGE4ZGNlIn19fQ=="),
        CONTROLLER("OTI3YzNiOGE1Njk2ZDIwYzYyYjllYWY3ZjQ3YmM0MWE2YWU4ZWU3OWQ3MDAwMzA4YjVhMTU0MmI3M2ExYjVlYiJ9fX0="),
        GRID("Y2MyZGQ2ZTNjOWQzODQzNmExM2U1ZTk1ODYzYzcxNDE4YzU2YWQzZWQ0NjcyOWZlMmQyOTBhZDljODRkY2Y2In19fQ===="),
        CRAFTING_MONITOR("ZmVmYzcyZTQ4MzIxMmE5MTI0OGMwMmU1NzUxZWI4YTMwYTYxNmE4OTE1ZTIyZDlhYjJhMmJiM2Y5YmZjYmEifX19"),
        STORAGE_MONITOR("NTA0MWJiYjkyMjk1MzFhZjU1Nzg5YmNmY2VjZWU4MjgzZmFlZWU2NTgyZjBmNGVlMjBjMzRmMjE4MTc2ZTRiMSJ9fX0="),
        SECURITY_MANAGER("NzlkMzIxZDFlYjdlYTk3Y2RhOGNmYTFlNGQ3NWRmOTZmYjYyNjliM2JhODdjYzY5YTg4YmI4YzQ5ZmVkNTQ0NCJ9fX0="),
        CRAFTER("ZTRlOWNkMGU4NWJiNGNiMWNjMzllYzY3ZTJlOWIzOWRhN2JlNGIxYThjYmY4OTIzNTg0MmUzOTBkYWNiMTQ1NCJ9fX0="),
        DISK_DRIVE("MjNjY2RjNmU2ODQ1YjE2OGE5M2U1YWIwMGMyYjRkOTcwMjY3YWVkYTQ1M2MyNWRhNjQ2YzE4NjQ5MWQyOTFiZCJ9fX0="),
        SOLDERER("ZTQ4MzM3ZjdlZGUxNWMzYjJmOGRjNmE2M2JkOTI4NzRjZGY3NGVjODYyYjQxMThjN2UzNTU1OWNlOGI0ZCJ9fX0="),
        CABLE("M2FiMDI2M2JkZDc2ZjNlNDE4ZGJhNWJmNDgxYjkyMWNlZDM5N2Q4YjhhMzRhNTU2MWZiN2JlYWE0NmVjZTEifX19"),
        IMPORTER("ZTllNjkxN2YyZmI0ZWEwOGU3MTMyZGYzMDk2MWQyYjVjNTIzYWJiYTE5Y2U0M2Y4MzVmYzE0YzU2OGY0In19fQ=="),
        EXPORTER("OTk4YmEyYjM3NGNmYzg5NDU0YzFiOGMzMmRiNDU4YTI3MDY3NTQzOWE0OTU0OTZjOTY3NzFjOTg5MTE2MTYyIn19fQ=="),
        EXTERNAL_STORAGE("NjA4ZjMyMzQ2MmZiNDM0ZTkyOGJkNjcyODYzOGM5NDRlZTNkODEyZTE2MmI5YzZiYTA3MGZjYWM5YmY5In19fQ=="),
        DETECTOR("NTcxZDhhM2I4Njg1Y2EzNzQ1YjkxYmZlODhmZTQxNTU4OTU0NDFmYmMyOGEzOTE0NjljMjc2N2EwNGM5YiJ9fX0="),
        RELAY("ODhlZmFkNzRiMjU0ZTU3Yzc5OTc2M2RjZWVlNDUxMWZhMmY4NWFlOWZhNTU2ZWFhOTdkNDViZjY3ZTBiNmIzIn19fQ=="),
        WIRELESS_TRANSMITTER("MTI2ZTM0NjI4N2EyMWRiZmNhNWI1OGMxNDJkOGQ1NzEyYmRjODRmNWI3NWQ0MzE0ZWQyYTgzYjIyMmVmZmEifX19"),
        DISK_MANIPULATOR("MmYyZWI4MjQ5ZTY3MTA0OGRmOTljMDM2ODExYjEyNjE1ZmNjYWVlNTZmNjY3YTUwMmFkYjQwN2NmOGZlMjYxYiJ9fX0=");
      
        private String prefix = "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUv";
      
        // DON'T CHANGE THIS
        private String idTag;
    
        private Head(String texture) {
            idTag = texture;
        }
    
        public String getPrefix() {
            return prefix;
        }
    
        public void setPrefix(String prefix) {
            this.prefix = prefix;
        }
    
        public String getIdTag() {
            return idTag;
        }
    
        public void setIdTag(String idTag) {
            this.idTag = idTag;
        }
    
    Then it is run like this:
    Code:
    CABLE(BukkitAPI.createSkull(Head.CABLE, 1, ChatColor.RESET + "Cable",
                ChatColor.RESET + "" + ChatColor.DARK_BLUE + "BukkitStorageNetwork")),
    in a different enum, which takes an item stack. When I try to retrieve this item stack, it works perfectly, but when I reload or restart the server, I get the skulls with the right texture, but they don't stack with the skulls I got before reloading / restarting the server. How can I fix this?
     
  2. @pietermantel

    You can try to print as much information about two non-stacking skulls as possible and see if you can find a difference somewhere. Unfortunately, I have never done this kind of stuff before, so I can't give any more tips.
     
Thread Status:
Not open for further replies.

Share This Page