diff --git a/main/src/main/java/net/citizensnpcs/Citizens.java b/main/src/main/java/net/citizensnpcs/Citizens.java index 1beb0f264..c05a51473 100644 --- a/main/src/main/java/net/citizensnpcs/Citizens.java +++ b/main/src/main/java/net/citizensnpcs/Citizens.java @@ -109,6 +109,8 @@ public class Citizens extends JavaPlugin implements CitizensPlugin { private NPCSelector selector; private StoredShops shops; private final SkullMetaProvider skullMetaProvider = new SkullMetaProvider() { + private boolean SUPPORT_OWNER_PROFILE = true; + @Override public String getTexture(SkullMeta meta) { GameProfile profile = NMS.getProfile(meta); @@ -118,8 +120,22 @@ public class Citizens extends JavaPlugin implements CitizensPlugin { @Override public void setTexture(String string, SkullMeta meta) { - UUID uuid = meta.getOwningPlayer() == null ? UUID.randomUUID() : meta.getOwningPlayer().getUniqueId(); - NMS.setProfile(meta, new GameProfile(uuid, string)); + GameProfile profile = NMS.getProfile(meta); + if (profile == null) { + if (SUPPORT_OWNER_PROFILE) { + try { + profile = new GameProfile(meta.getOwnerProfile().getUniqueId(), + meta.getOwnerProfile().getName()); + } catch (Exception e) { + SUPPORT_OWNER_PROFILE = false; + } + } + if (profile == null) { + profile = new GameProfile(UUID.randomUUID(), null); + } + } + profile.getProperties().put("textures", new Property("textures", string)); + NMS.setProfile(meta, profile); } }; private CitizensSpeechFactory speechFactory; diff --git a/main/src/main/java/net/citizensnpcs/trait/ShopTrait.java b/main/src/main/java/net/citizensnpcs/trait/ShopTrait.java index d67189ea8..3280d8234 100644 --- a/main/src/main/java/net/citizensnpcs/trait/ShopTrait.java +++ b/main/src/main/java/net/citizensnpcs/trait/ShopTrait.java @@ -189,7 +189,7 @@ public class ShopTrait extends Trait { NPCShopItem item = shopPage.getItem(i); if (item != null) { - slot.setItemStack(item.display); + slot.setItemStack(item.getDisplayItem(null)); } final int idx = i; @@ -405,7 +405,7 @@ public class ShopTrait extends Trait { public void initialise(MenuContext ctx) { this.ctx = ctx; if (modified.display != null) { - ctx.getSlot(9 * 4 + 4).setItemStack(modified.display); + ctx.getSlot(9 * 4 + 4).setItemStack(modified.getDisplayItem(null)); } ctx.getSlot(9 * 3 + 3).setItemStack(new ItemStack(Util.getFallbackMaterial("OAK_SIGN", "SIGN")), "Set message to send on click, currently:",