From bf6f24313b217205d896cb8b4fc1a3cb3457f20b Mon Sep 17 00:00:00 2001 From: Eric Date: Sun, 16 Apr 2017 18:31:50 +0200 Subject: [PATCH] Added book generation to shop info message --- .../de/epiceric/shopchest/config/Regex.java | 3 +- .../language/BookGenerationName.java | 28 +++++ .../shopchest/language/LanguageUtils.java | 24 ++++ .../shopchest/language/LocalizedMessage.java | 1 + .../listeners/ShopInteractListener.java | 103 +++++++++++++----- src/main/resources/lang/de_DE.lang | 6 + src/main/resources/lang/en_US.lang | 10 ++ 7 files changed, 149 insertions(+), 26 deletions(-) create mode 100644 src/main/java/de/epiceric/shopchest/language/BookGenerationName.java diff --git a/src/main/java/de/epiceric/shopchest/config/Regex.java b/src/main/java/de/epiceric/shopchest/config/Regex.java index 63f7d0a..6af7539 100644 --- a/src/main/java/de/epiceric/shopchest/config/Regex.java +++ b/src/main/java/de/epiceric/shopchest/config/Regex.java @@ -20,7 +20,8 @@ public enum Regex { PROPERTY("%PROPERTY%"), VALUE("%VALUE%"), EXTENDED("%EXTENDED%"), - REVENUE("%REVENUE%"); + REVENUE("%REVENUE%"), + GENERATION("%GENERATION%"); private String name; diff --git a/src/main/java/de/epiceric/shopchest/language/BookGenerationName.java b/src/main/java/de/epiceric/shopchest/language/BookGenerationName.java new file mode 100644 index 0000000..b0bc651 --- /dev/null +++ b/src/main/java/de/epiceric/shopchest/language/BookGenerationName.java @@ -0,0 +1,28 @@ +package de.epiceric.shopchest.language; + +import de.epiceric.shopchest.nms.CustomBookMeta; + +public class BookGenerationName { + + private String localizedName; + private CustomBookMeta.Generation generation; + + public BookGenerationName(CustomBookMeta.Generation generation, String localizedName) { + this.generation = generation; + this.localizedName = localizedName; + } + + /** + * @return Generation linked to the name + */ + public CustomBookMeta.Generation getGeneration() { + return generation; + } + + /** + * @return Name linked to the book generation + */ + public String getLocalizedName() { + return localizedName; + } +} diff --git a/src/main/java/de/epiceric/shopchest/language/LanguageUtils.java b/src/main/java/de/epiceric/shopchest/language/LanguageUtils.java index 6c97829..f250082 100644 --- a/src/main/java/de/epiceric/shopchest/language/LanguageUtils.java +++ b/src/main/java/de/epiceric/shopchest/language/LanguageUtils.java @@ -3,6 +3,7 @@ package de.epiceric.shopchest.language; import de.epiceric.shopchest.ShopChest; import de.epiceric.shopchest.config.LanguageConfiguration; import de.epiceric.shopchest.config.Regex; +import de.epiceric.shopchest.nms.CustomBookMeta; import de.epiceric.shopchest.nms.SpawnEggMeta; import de.epiceric.shopchest.utils.Utils; import org.bukkit.ChatColor; @@ -31,6 +32,7 @@ public class LanguageUtils { private static ArrayList entityNames = new ArrayList<>(); private static ArrayList potionNames = new ArrayList<>(); private static ArrayList musicDiscNames = new ArrayList<>(); + private static ArrayList generationNames = new ArrayList<>(); private static ArrayList messages = new ArrayList<>(); @@ -44,6 +46,7 @@ public class LanguageUtils { entityNames.clear(); potionNames.clear(); musicDiscNames.clear(); + generationNames.clear(); messages.clear(); // Add Block Names @@ -906,6 +909,12 @@ public class LanguageUtils { musicDiscNames.add(new MusicDiscName(Material.RECORD_11, langConfig.getString("item.record.11.desc", "C418 - 11"))); musicDiscNames.add(new MusicDiscName(Material.RECORD_12, langConfig.getString("item.record.wait.desc", "C418 - wait"))); + // Add Book Generation Names + generationNames.add(new BookGenerationName(CustomBookMeta.Generation.ORIGINAL, langConfig.getString("book.generation.0", "Original"))); + generationNames.add(new BookGenerationName(CustomBookMeta.Generation.COPY_OF_ORIGINAL, langConfig.getString("book.generation.1", "Copy of original"))); + generationNames.add(new BookGenerationName(CustomBookMeta.Generation.COPY_OF_COPY, langConfig.getString("book.generation.2", "Copy of a copy"))); + generationNames.add(new BookGenerationName(CustomBookMeta.Generation.TATTERED, langConfig.getString("book.generation.3", "Tattered"))); + // Add ShopChest Messages messages.add(new LocalizedMessage(LocalizedMessage.Message.SHOP_CREATED, langConfig.getString("message.shop-created", "&6Shop created."))); messages.add(new LocalizedMessage(LocalizedMessage.Message.CHEST_ALREADY_SHOP, langConfig.getString("message.chest-already-shop", "&cChest already shop."))); @@ -920,6 +929,7 @@ public class LanguageUtils { messages.add(new LocalizedMessage(LocalizedMessage.Message.SHOP_INFO_ENCHANTMENTS, langConfig.getString("message.shopInfo.enchantments", "&6Enchantments: &e%ENCHANTMENT%"), Regex.ENCHANTMENT)); messages.add(new LocalizedMessage(LocalizedMessage.Message.SHOP_INFO_POTION_EFFECT, langConfig.getString("message.shopInfo.potion-effect", "&6Potion Effect: &e%POTION-EFFECT% %EXTENDED%"), Regex.POTION_EFFECT, Regex.EXTENDED)); messages.add(new LocalizedMessage(LocalizedMessage.Message.SHOP_INFO_MUSIC_TITLE, langConfig.getString("message.shopInfo.music-disc-title", "&6Music Disc Title: &e%MUSIC-TITLE%"), Regex.MUSIC_TITLE)); + messages.add(new LocalizedMessage(LocalizedMessage.Message.SHOP_INFO_BOOK_GENERATION, langConfig.getString("message.shopInfo.book-generation", "&6Generation: &e%GENERATION%"), Regex.GENERATION)); messages.add(new LocalizedMessage(LocalizedMessage.Message.SHOP_INFO_NONE, langConfig.getString("message.shopInfo.none", "&7None"))); messages.add(new LocalizedMessage(LocalizedMessage.Message.SHOP_INFO_PRICE, langConfig.getString("message.shopInfo.price", "&6Price: Buy: &e%BUY-PRICE%&6 Sell: &e%SELL-PRICE%"), Regex.BUY_PRICE, Regex.SELL_PRICE)); messages.add(new LocalizedMessage(LocalizedMessage.Message.SHOP_INFO_DISABLED, langConfig.getString("message.shopInfo.disabled", "&7Disabled"))); @@ -1161,6 +1171,20 @@ public class LanguageUtils { return ""; } + /** + * @param generation Generation of the book + * @return Localized title of the generation + */ + public static String getBookGenerationName(CustomBookMeta.Generation generation) { + for (BookGenerationName generationName : generationNames) { + if (generation == generationName.getGeneration()) { + return generationName.getLocalizedName(); + } + } + + return formatDefaultString(generation.toString()); + } + /** * @param message Message which should be translated * @param replacedRegexes Regexes which might be required to be replaced in the message diff --git a/src/main/java/de/epiceric/shopchest/language/LocalizedMessage.java b/src/main/java/de/epiceric/shopchest/language/LocalizedMessage.java index 9270051..b32503d 100644 --- a/src/main/java/de/epiceric/shopchest/language/LocalizedMessage.java +++ b/src/main/java/de/epiceric/shopchest/language/LocalizedMessage.java @@ -55,6 +55,7 @@ public class LocalizedMessage { SHOP_INFO_ENCHANTMENTS, SHOP_INFO_POTION_EFFECT, SHOP_INFO_MUSIC_TITLE, + SHOP_INFO_BOOK_GENERATION, SHOP_INFO_NONE, SHOP_INFO_PRICE, SHOP_INFO_DISABLED, diff --git a/src/main/java/de/epiceric/shopchest/listeners/ShopInteractListener.java b/src/main/java/de/epiceric/shopchest/listeners/ShopInteractListener.java index 78ceb5c..d5dd8a5 100644 --- a/src/main/java/de/epiceric/shopchest/listeners/ShopInteractListener.java +++ b/src/main/java/de/epiceric/shopchest/listeners/ShopInteractListener.java @@ -17,6 +17,7 @@ import de.epiceric.shopchest.external.PlotSquaredShopFlag; import de.epiceric.shopchest.external.WorldGuardShopFlag; import de.epiceric.shopchest.language.LanguageUtils; import de.epiceric.shopchest.language.LocalizedMessage; +import de.epiceric.shopchest.nms.CustomBookMeta; import de.epiceric.shopchest.nms.Hologram; import de.epiceric.shopchest.shop.Shop; import de.epiceric.shopchest.shop.Shop.ShopType; @@ -48,6 +49,7 @@ import org.bukkit.event.player.PlayerArmorStandManipulateEvent; import org.bukkit.event.player.PlayerInteractAtEntityEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.*; +import org.bukkit.inventory.meta.BookMeta; import org.bukkit.inventory.meta.EnchantmentStorageMeta; import org.bukkit.inventory.meta.PotionMeta; import org.bukkit.potion.Potion; @@ -582,45 +584,62 @@ public class ShopInteractListener implements Listener { plugin.debug(executor.getName() + " is retrieving shop info (#" + shop.getID() + ")"); ShopInfoEvent event = new ShopInfoEvent(executor, shop); Bukkit.getPluginManager().callEvent(event); + if (event.isCancelled()) { plugin.debug("Info event cancelled (#" + shop.getID() + ")"); return; } + Chest c = (Chest) shop.getLocation().getBlock().getState(); int amount = Utils.getAmount(c.getInventory(), shop.getProduct()); Material type = shop.getProduct().getType(); - String vendorName = (shop.getVendor().getName() == null ? shop.getVendor().getUniqueId().toString() : shop.getVendor().getName()); - String vendor = LanguageUtils.getMessage(LocalizedMessage.Message.SHOP_INFO_VENDOR, new LocalizedMessage.ReplacedRegex(Regex.VENDOR, vendorName)); - String product = LanguageUtils.getMessage(LocalizedMessage.Message.SHOP_INFO_PRODUCT, new LocalizedMessage.ReplacedRegex(Regex.AMOUNT, String.valueOf(shop.getProduct().getAmount())), + String vendorName = (shop.getVendor().getName() == null ? + shop.getVendor().getUniqueId().toString() : shop.getVendor().getName()); + + String vendorString = LanguageUtils.getMessage(LocalizedMessage.Message.SHOP_INFO_VENDOR, + new LocalizedMessage.ReplacedRegex(Regex.VENDOR, vendorName)); + + String productString = LanguageUtils.getMessage(LocalizedMessage.Message.SHOP_INFO_PRODUCT, + new LocalizedMessage.ReplacedRegex(Regex.AMOUNT, String.valueOf(shop.getProduct().getAmount())), new LocalizedMessage.ReplacedRegex(Regex.ITEM_NAME, LanguageUtils.getItemName(shop.getProduct()))); + String enchantmentString = ""; String potionEffectString = ""; - String musicDiscName = LanguageUtils.getMusicDiscName(type); + String bookGenerationString = ""; + String musicDiscTitleString = ""; + String disabled = LanguageUtils.getMessage(LocalizedMessage.Message.SHOP_INFO_DISABLED); - String price = LanguageUtils.getMessage(LocalizedMessage.Message.SHOP_INFO_PRICE, new LocalizedMessage.ReplacedRegex(Regex.BUY_PRICE, (shop.getBuyPrice() > 0 ? String.valueOf(shop.getBuyPrice()) : disabled)), + + String priceString = LanguageUtils.getMessage(LocalizedMessage.Message.SHOP_INFO_PRICE, + new LocalizedMessage.ReplacedRegex(Regex.BUY_PRICE, (shop.getBuyPrice() > 0 ? String.valueOf(shop.getBuyPrice()) : disabled)), new LocalizedMessage.ReplacedRegex(Regex.SELL_PRICE, (shop.getSellPrice() > 0 ? String.valueOf(shop.getSellPrice()) : disabled))); - String shopType = LanguageUtils.getMessage(shop.getShopType() == ShopType.NORMAL ? LocalizedMessage.Message.SHOP_INFO_NORMAL : LocalizedMessage.Message.SHOP_INFO_ADMIN); - String stock = LanguageUtils.getMessage(LocalizedMessage.Message.SHOP_INFO_STOCK, new LocalizedMessage.ReplacedRegex(Regex.AMOUNT, String.valueOf(amount))); + + String shopType = LanguageUtils.getMessage(shop.getShopType() == ShopType.NORMAL ? + LocalizedMessage.Message.SHOP_INFO_NORMAL : LocalizedMessage.Message.SHOP_INFO_ADMIN); + + String stock = LanguageUtils.getMessage(LocalizedMessage.Message.SHOP_INFO_STOCK, + new LocalizedMessage.ReplacedRegex(Regex.AMOUNT, String.valueOf(amount))); boolean potionExtended = false; Map enchantmentMap; + String potionEffectName = ""; if (Utils.getMajorVersion() >= 9) { if (type == Material.TIPPED_ARROW || type == Material.LINGERING_POTION || type == Material.SPLASH_POTION) { - potionEffectString = LanguageUtils.getPotionEffectName(shop.getProduct()); + potionEffectName = LanguageUtils.getPotionEffectName(shop.getProduct()); PotionMeta potionMeta = (PotionMeta) shop.getProduct().getItemMeta(); potionExtended = potionMeta.getBasePotionData().isExtended(); - if (potionEffectString == null) - potionEffectString = LanguageUtils.getMessage(LocalizedMessage.Message.SHOP_INFO_NONE); + if (potionEffectName.trim().isEmpty()) + potionEffectName = LanguageUtils.getMessage(LocalizedMessage.Message.SHOP_INFO_NONE); } } if (type == Material.POTION) { - potionEffectString = LanguageUtils.getPotionEffectName(shop.getProduct()); + potionEffectName = LanguageUtils.getPotionEffectName(shop.getProduct()); if (Utils.getMajorVersion() < 9) { Potion potion = Potion.fromItemStack(shop.getProduct()); potionExtended = potion.hasExtendedDuration(); @@ -629,11 +648,43 @@ public class ShopInteractListener implements Listener { potionExtended = potionMeta.getBasePotionData().isExtended(); } - if (potionEffectString == null) - potionEffectString = LanguageUtils.getMessage(LocalizedMessage.Message.SHOP_INFO_NONE); + if (potionEffectName.trim().isEmpty()) + potionEffectName = LanguageUtils.getMessage(LocalizedMessage.Message.SHOP_INFO_NONE); } + if (potionEffectName.length() > 0) { + String extended = potionExtended ? LanguageUtils.getMessage(LocalizedMessage.Message.SHOP_INFO_EXTENDED) : ""; + potionEffectString = LanguageUtils.getMessage(LocalizedMessage.Message.SHOP_INFO_POTION_EFFECT, + new LocalizedMessage.ReplacedRegex(Regex.POTION_EFFECT, potionEffectName), + new LocalizedMessage.ReplacedRegex(Regex.EXTENDED, extended)); + } + if (type == Material.WRITTEN_BOOK) { + BookMeta meta = (BookMeta) shop.getProduct().getItemMeta(); + CustomBookMeta.Generation generation = CustomBookMeta.Generation.TATTERED; + + if ((Utils.getMajorVersion() == 9 && Utils.getRevision() == 1) || Utils.getMajorVersion() == 8) { + CustomBookMeta.Generation gen = CustomBookMeta.getGeneration(shop.getProduct()); + generation = (gen == null ? CustomBookMeta.Generation.ORIGINAL : gen); + } else if (Utils.getMajorVersion() >= 10) { + if (meta.hasGeneration()) { + generation = CustomBookMeta.Generation.valueOf(meta.getGeneration().toString()); + } else { + generation = CustomBookMeta.Generation.ORIGINAL; + } + } + + bookGenerationString = LanguageUtils.getMessage(LocalizedMessage.Message.SHOP_INFO_BOOK_GENERATION, + new LocalizedMessage.ReplacedRegex(Regex.GENERATION, LanguageUtils.getBookGenerationName(generation))); + } + + String musicDiscName = LanguageUtils.getMusicDiscName(type); + if (musicDiscName.length() > 0) { + musicDiscTitleString = LanguageUtils.getMessage(LocalizedMessage.Message.SHOP_INFO_MUSIC_TITLE, + new LocalizedMessage.ReplacedRegex(Regex.MUSIC_TITLE, musicDiscName)); + } + + String enchantmentList = ""; if (shop.getProduct().getItemMeta() instanceof EnchantmentStorageMeta) { EnchantmentStorageMeta esm = (EnchantmentStorageMeta) shop.getProduct().getItemMeta(); enchantmentMap = esm.getStoredEnchants(); @@ -647,24 +698,26 @@ public class ShopInteractListener implements Listener { Enchantment enchantment = enchantments[i]; if (i == enchantments.length - 1) { - enchantmentString += LanguageUtils.getEnchantmentName(enchantment, enchantmentMap.get(enchantment)); + enchantmentList += LanguageUtils.getEnchantmentName(enchantment, enchantmentMap.get(enchantment)); } else { - enchantmentString += LanguageUtils.getEnchantmentName(enchantment, enchantmentMap.get(enchantment)) + ", "; + enchantmentList += LanguageUtils.getEnchantmentName(enchantment, enchantmentMap.get(enchantment)) + ", "; } } + if (enchantmentList.length() > 0) { + enchantmentString = LanguageUtils.getMessage(LocalizedMessage.Message.SHOP_INFO_ENCHANTMENTS, + new LocalizedMessage.ReplacedRegex(Regex.ENCHANTMENT, enchantmentList)); + } + executor.sendMessage(" "); - if (shop.getShopType() != ShopType.ADMIN) executor.sendMessage(vendor); - executor.sendMessage(product); + if (shop.getShopType() != ShopType.ADMIN) executor.sendMessage(vendorString); + executor.sendMessage(productString); if (shop.getShopType() != ShopType.ADMIN) executor.sendMessage(stock); - if (enchantmentString.length() > 0) - executor.sendMessage(LanguageUtils.getMessage(LocalizedMessage.Message.SHOP_INFO_ENCHANTMENTS, new LocalizedMessage.ReplacedRegex(Regex.ENCHANTMENT, enchantmentString))); - if (potionEffectString.length() > 0) - executor.sendMessage(LanguageUtils.getMessage(LocalizedMessage.Message.SHOP_INFO_POTION_EFFECT, new LocalizedMessage.ReplacedRegex(Regex.POTION_EFFECT, potionEffectString), - new LocalizedMessage.ReplacedRegex(Regex.EXTENDED, (potionExtended ? LanguageUtils.getMessage(LocalizedMessage.Message.SHOP_INFO_EXTENDED) : "")))); - if (musicDiscName.length() > 0) - executor.sendMessage(LanguageUtils.getMessage(LocalizedMessage.Message.SHOP_INFO_MUSIC_TITLE, new LocalizedMessage.ReplacedRegex(Regex.MUSIC_TITLE, musicDiscName))); - executor.sendMessage(price); + if (enchantmentString.length() > 0) executor.sendMessage(enchantmentString); + if (potionEffectString.length() > 0) executor.sendMessage(potionEffectString); + if (musicDiscTitleString.length() > 0) executor.sendMessage(musicDiscTitleString); + if (bookGenerationString.length() > 0) executor.sendMessage(bookGenerationString); + executor.sendMessage(priceString); executor.sendMessage(shopType); executor.sendMessage(" "); } diff --git a/src/main/resources/lang/de_DE.lang b/src/main/resources/lang/de_DE.lang index 55706c7..dcf805a 100644 --- a/src/main/resources/lang/de_DE.lang +++ b/src/main/resources/lang/de_DE.lang @@ -11,6 +11,7 @@ message.shopInfo.stock=&6Auf Lager: &e%AMOUNT% message.shopInfo.enchantments=&6Verzauberungen: &e%ENCHANTMENT% message.shopInfo.potion-effect=&6Trank-Effekte: &e%POTION-EFFECT% %EXTENDED% message.shopInfo.music-disc-title=&6Schallplattentitel: &e%MUSIC-TITLE% +message.shopInfo.book-generation=&6Generation: &e%GENERATION% message.shopInfo.none=&7Keine message.shopInfo.price=&6Preis: Kauf: &e%BUY-PRICE%&6 Verkauf: &e%SELL-PRICE% message.shopInfo.disabled=&7Deaktiviert @@ -90,6 +91,11 @@ message.config.set=&6Eigenschaft &a%PROPERTY% &6wurde auf &a%VALUE% &6gesetzt. message.config.added=&6Wert &a%VALUE% &6wurde zu &a%PROPERTY% &6hinzugefügt. message.config.removed=&6Wert &a%VALUE% &6wurde aus &a%PROPERTY% &6entfernt. +book.generation.0=Original +book.generation.1=Kopie des Originals +book.generation.2=Kopie einer Kopie +book.generation.3=Zerrissen + effect.absorption=Absorption effect.blindness=Blindheit effect.confusion=Übelkeit diff --git a/src/main/resources/lang/en_US.lang b/src/main/resources/lang/en_US.lang index 44d8f10..b1b1d2f 100644 --- a/src/main/resources/lang/en_US.lang +++ b/src/main/resources/lang/en_US.lang @@ -45,6 +45,10 @@ message.shopInfo.potion-effect=&6Potion Effect: &e%POTION-EFFECT% %EXTENDED% # Usable regex: %MUSIC-TITLE% message.shopInfo.music-disc-title=&6Music Disc Title: &e%MUSIC-TITLE% +# Set the generation message the player gets after entering '/shop info' if the product is a written book +# Usable regex: %GENERATION% +message.shopInfo.book-generation=&6Generation: &e%GENERATION% + # If the product is a tipped arrow but it doesn't have an effect, this gets displayed instead of the arrow effect message.shopInfo.none=&7None @@ -469,6 +473,12 @@ enchantment.level.8=VIII enchantment.level.9=IX enchantment.level.10=X +# If the product is a written book, this will be displayed instead of %GENERATION% +book.generation.0=Original +book.generation.1=Copy of original +book.generation.2=Copy of a copy +book.generation.3=Tattered + # If the product is a spawn egg, this will be displayed after 'item.monsterPlacer.name' entity.Creeper.name=Creeper entity.Skeleton.name=Skeleton