diff --git a/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java b/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java index 0117fa33b..b513f4d0b 100644 --- a/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java +++ b/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java @@ -1980,7 +1980,7 @@ public class NPCCommands { @Command( aliases = { "npc" }, - usage = "shop (name) (edit|show)", + usage = "shop (edit|show) (name)", desc = "NPC shop edit/show", modifiers = { "shop" }, min = 1, @@ -1988,17 +1988,25 @@ public class NPCCommands { permission = "citizens.npc.shop") public void shop(CommandContext args, Player sender, NPC npc) throws CommandException { ShopTrait trait = npc.getOrAddTrait(ShopTrait.class); + NPCShop shop = trait.getDefaultShop(); if (args.argsLength() > 1) { - NPCShop shop = trait.getShop(args.getString(1)); - if (args.getString(2).equalsIgnoreCase("edit")) { + if (args.argsLength() == 3) { + if (args.getString(1).equalsIgnoreCase("edit") + && !sender.hasPermission("citizens.npc.shop.edit." + args.getString(2).toLowerCase())) + throw new NoPermissionsException(); + shop = trait.getShop(args.getString(2).toLowerCase()); + } + if (args.getString(1).equalsIgnoreCase("edit")) { + if (!sender.hasPermission("citizens.npc.shop.edit")) + throw new NoPermissionsException(); shop.displayEditor(sender); - } else if (args.getString(2).equalsIgnoreCase("show") && args.argsLength() == 3) { + } else if (args.getString(1).equalsIgnoreCase("show")) { shop.display(sender); } else { throw new CommandUsageException(); } } else { - trait.getDefaultShop().display(sender); + shop.display(sender); } } diff --git a/main/src/main/java/net/citizensnpcs/npc/CitizensNPC.java b/main/src/main/java/net/citizensnpcs/npc/CitizensNPC.java index 0e06757d3..b90f0a946 100644 --- a/main/src/main/java/net/citizensnpcs/npc/CitizensNPC.java +++ b/main/src/main/java/net/citizensnpcs/npc/CitizensNPC.java @@ -427,8 +427,7 @@ public class CitizensNPC extends AbstractNPC { private void updateCustomName() { boolean nameVisibility = false; if (!getEntity().isCustomNameVisible() - && !data(). get(NPC.Metadata.NAMEPLATE_VISIBLE, true).toString().equals("hover")) { - getEntity().setCustomName(""); + && !data(). get(NPC.Metadata.NAMEPLATE_VISIBLE, true).toString().equals("hover")) { } else if (!requiresNameHologram()) { nameVisibility = true; getEntity().setCustomName(getFullName()); diff --git a/main/src/main/java/net/citizensnpcs/trait/ShopTrait.java b/main/src/main/java/net/citizensnpcs/trait/ShopTrait.java index c87d6e32a..0f9cd4de7 100644 --- a/main/src/main/java/net/citizensnpcs/trait/ShopTrait.java +++ b/main/src/main/java/net/citizensnpcs/trait/ShopTrait.java @@ -1,9 +1,12 @@ package net.citizensnpcs.trait; +import java.util.List; import java.util.Map; import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import com.google.common.collect.Lists; import com.google.common.collect.Maps; import net.citizensnpcs.api.persistence.Persist; @@ -20,16 +23,20 @@ public class ShopTrait extends Trait { } public NPCShop getDefaultShop() { - return NPC_SHOPS.get(npc.getUniqueId().toString()); + return NPC_SHOPS.computeIfAbsent(npc.getUniqueId().toString(), NPCShop::new); } public NPCShop getShop(String name) { - return SHOPS.get(name); + return SHOPS.computeIfAbsent(name, NPCShop::new); } public static class NPCShop { @Persist - String name; + private final String name; + @Persist(reify = true) + private final List pages = Lists.newArrayList(); + @Persist + private String title; private NPCShop(String name) { this.name = name; @@ -40,6 +47,26 @@ public class ShopTrait extends Trait { public void displayEditor(Player sender) { } + + public String getName() { + return name; + } + } + + public static class NPCShopItem { + @Persist + private int cost; + @Persist + private ItemStack display; + } + + public static class NPCShopPage { + @Persist("") + private int index; + @Persist(reify = true) + private final Map items = Maps.newHashMap(); + @Persist + private String title; } @Persist(value = "npcShops", namespace = "shopstrait")