diff --git a/src/main/java/fr/hashtek/spigot/breakffa/shop/ShopManager.java b/src/main/java/fr/hashtek/spigot/breakffa/shop/ShopManager.java index 4df64fc..3535bc3 100644 --- a/src/main/java/fr/hashtek/spigot/breakffa/shop/ShopManager.java +++ b/src/main/java/fr/hashtek/spigot/breakffa/shop/ShopManager.java @@ -21,32 +21,31 @@ import java.text.NumberFormat; import java.util.Arrays; -public class ShopManager -{ +public class ShopManager { private static final BreakFFA MAIN = BreakFFA.getInstance(); private static final HashGuiManager GUI_MANAGER = MAIN.getGuiManager(); - private HashGui gui; - /** * Creates a new instance of ShopManager */ - public ShopManager() - { + public ShopManager() { this.createGui(); } - /** * Creates the base shop GUIs. - * TODO: Put all static items in static enum */ - private void createGui() - { - this.gui = new HashGui(Component.text("" + ChatColor.AQUA + ChatColor.BOLD + "Marché ● CATÉGORIES"), 3); + private void createGui() { + this.gui = new HashGui(Component.text("" + ChatColor.AQUA + ChatColor.BOLD + "Shop ● CATEGORIES"), 3); + initializeCategories(); + } + /** + * Initializes shop categories and adds them to the GUI. + */ + private void initializeCategories() { final HashItem darkBlueGlass = HashItem.separator(Material.BLUE_STAINED_GLASS_PANE, GUI_MANAGER); final HashItem blueGlass = HashItem.separator(Material.LIGHT_BLUE_STAINED_GLASS_PANE, GUI_MANAGER); final HashItem orangeGlass = HashItem.separator(Material.ORANGE_STAINED_GLASS_PANE, GUI_MANAGER); @@ -54,115 +53,84 @@ private void createGui() final HashItem greenGlass = HashItem.separator(Material.LIME_STAINED_GLASS_PANE, GUI_MANAGER); final HashItem darkGreenGlass = HashItem.separator(Material.GREEN_STAINED_GLASS_PANE, GUI_MANAGER); - final HashItem defensiveCategory = new ShopCategoryItem( + addCategoryToGui(new ShopCategoryItem( Material.CHAINMAIL_CHESTPLATE, - Component.text(ChatColor.BLUE + "Catégorie Défensive"), + Component.text(ChatColor.BLUE + "Defensive Category"), Arrays.asList( Component.text(""), - Component.text(ChatColor.GRAY + "Cette catégorie contient l'ensemble des objets"), - Component.text(ChatColor.GRAY + "visant à vous " + ChatColor.BLUE + "protéger" + ChatColor.GRAY + ", que cela soit"), - Component.text(ChatColor.GRAY + "des types d'" + ChatColor.YELLOW + "armures" + ChatColor.GRAY + ", des " + ChatColor.YELLOW + "structures" + ChatColor.GRAY + ", ou autre."), + Component.text(ChatColor.GRAY + "This category contains items to protect you."), Component.text(""), - Component.text("" + ChatColor.BLUE + ChatColor.BOLD + "CLIC GAUCHE POUR OUVRIR") + Component.text("" + ChatColor.BLUE + ChatColor.BOLD + "LEFT CLICK TO OPEN") ), - (Player p, HashGui gui, ItemStack item, int slot) -> - new ShopCategoryDefensive(p).open() - ).build(GUI_MANAGER); + (Player p, HashGui gui, ItemStack item, int slot) -> new ShopCategoryDefensive(p).open() + ), darkBlueGlass); - final HashItem offensiveCategory = new ShopCategoryItem( + addCategoryToGui(new ShopCategoryItem( Material.IRON_SWORD, - Component.text(ChatColor.RED + "Catégorie Offensive"), + Component.text(ChatColor.RED + "Offensive Category"), Arrays.asList( Component.text(""), - Component.text(ChatColor.GRAY + "Cette catégorie contient l'ensemble des " + ChatColor.RED + "armes" + ChatColor.GRAY + ","), - Component.text(ChatColor.YELLOW + "blanches" + ChatColor.GRAY + " ou à " + ChatColor.YELLOW + "distance" + ChatColor.GRAY + ", et autres objets ayant"), - Component.text(ChatColor.GRAY + "pour but de " + ChatColor.RED + "blesser" + ChatColor.GRAY + " votre " + ChatColor.WHITE + "cible" + ChatColor.GRAY + "."), + Component.text(ChatColor.GRAY + "This category contains weapons to attack."), Component.text(""), - Component.text("" + ChatColor.RED + ChatColor.BOLD + "CLIC GAUCHE POUR OUVRIR") + Component.text("" + ChatColor.RED + ChatColor.BOLD + "LEFT CLICK TO OPEN") ), - (Player p, HashGui gui, ItemStack item, int slot) -> - new ShopCategoryOffensive(p).open() - ).build(GUI_MANAGER); + (Player p, HashGui gui, ItemStack item, int slot) -> new ShopCategoryOffensive(p).open() + ), redGlass); - final HashItem supportCategory = new ShopCategoryItem( + addCategoryToGui(new ShopCategoryItem( Material.GOLDEN_APPLE, - Component.text(ChatColor.GREEN + "Catégorie Supportive"), + Component.text(ChatColor.GREEN + "Supportive Category"), Arrays.asList( Component.text(""), - Component.text(ChatColor.GRAY + "Cette catégorie représente les objets"), - Component.text(ChatColor.GRAY + "impliqués dans le " + ChatColor.GREEN + "support" + ChatColor.GRAY + ", permettant donc"), - Component.text(ChatColor.GRAY + "de vous aider " + ChatColor.DARK_GREEN + "vous ou vos alliés" + ChatColor.GRAY + "."), + Component.text(ChatColor.GRAY + "This category contains supportive items."), Component.text(""), - Component.text(ChatColor.GRAY + "On y retrouve également le " + ChatColor.BLUE + "reste" + ChatColor.GRAY + " des"), - Component.text(ChatColor.GRAY + "objets " + ChatColor.YELLOW + "divers" + ChatColor.GRAY + " et " + ChatColor.YELLOW + "variés" + ChatColor.GRAY + "."), - Component.text(""), - Component.text("" + ChatColor.GREEN + ChatColor.BOLD + "CLIC GAUCHE POUR OUVRIR") + Component.text("" + ChatColor.GREEN + ChatColor.BOLD + "LEFT CLICK TO OPEN") ), - (Player p, HashGui gui, ItemStack item, int slot) -> - new ShopCategorySupport(p).open() - ).build(GUI_MANAGER); + (Player p, HashGui gui, ItemStack item, int slot) -> new ShopCategorySupport(p).open() + ), greenGlass); + } + /** + * Adds a category item to the GUI. + * + * @param categoryItem The category item to add + * @param separator The separator item to use + */ + private void addCategoryToGui(ShopCategoryItem categoryItem, HashItem separator) { final Mask mask = new Mask(this.gui); + mask.setItem('c', separator) + .setItem('i', categoryItem.build(GUI_MANAGER)); - mask.setItem('B', darkBlueGlass) - .setItem('b', blueGlass) - .setItem('O', orangeGlass) - .setItem('r', redGlass) - .setItem('g', greenGlass) - .setItem('G', darkGreenGlass) - .setItem('d', defensiveCategory) - .setItem('o', offensiveCategory) - .setItem('s', supportCategory); - - mask.pattern("BbBbOrOgG") - .pattern("bBdOoOsGg") - .pattern("BbOrOgGgG"); - + mask.pattern("cic"); mask.apply(); } /** * Builds the shop item. * - * @param playerData Player's data - * @param close Should item close the shop or open it (only visual, in the item's lore) - * @return Built item. + * @param playerData Player's data + * @param close Should item close the shop or open it + * @return Built item. */ - public HashItem createShopItem(PlayerData playerData, boolean close) - { + public HashItem createShopItem(PlayerData playerData, boolean close) { return new HashItem(Material.NETHER_STAR) - .setName(Component.text(ChatColor.AQUA + "Marché Nexus" + ChatColor.GRAY + " (clic gauche)")) + .setName(Component.text(ChatColor.AQUA + "Shop Nexus" + ChatColor.GRAY + " (left click)")) .setLore(Arrays.asList( Component.text(""), - Component.text(ChatColor.GRAY + "Vous possédez actuellement " + ChatColor.AQUA + NumberFormat.getInstance().format(playerData.getShards()) + " shard" + (playerData.getShards() == 1 ? "" : "s") + ChatColor.GRAY + "."), - Component.text(ChatColor.GRAY + "Vos " + ChatColor.AQUA + "shards" + ChatColor.GRAY + " ne sont pas conservables."), - Component.text(""), - Component.text(ChatColor.GRAY + "Vous pouvez acheter des " + ChatColor.BLUE + "objets divers"), - Component.text(ChatColor.GRAY + "grâce aux " + ChatColor.AQUA + "shards" + ChatColor.GRAY + " que vos obtenez"), - Component.text(ChatColor.GRAY + "durant votre session."), - Component.text(""), - Component.text(ChatColor.GRAY + "Les objets procurent des " + ChatColor.YELLOW + "avantages" + ChatColor.GRAY + " et"), - Component.text(ChatColor.GRAY + "sont " + ChatColor.YELLOW + "non-permanents" + ChatColor.GRAY + "."), - Component.text(ChatColor.GRAY + "Leur " + ChatColor.DARK_GREEN + "prix" + ChatColor.GRAY + " ne représente " + ChatColor.RED + "pas" + ChatColor.GRAY + " leur efficacité"), - Component.text(ChatColor.GRAY + "et/ou leur utilité en " + ChatColor.WHITE + "jeu" + ChatColor.GRAY + "."), + Component.text(ChatColor.GRAY + "You currently have " + ChatColor.AQUA + NumberFormat.getInstance().format(playerData.getShards()) + " shard" + (playerData.getShards() == 1 ? "" : "s") + ChatColor.GRAY + "."), Component.text(""), - Component.text("" + ChatColor.AQUA + ChatColor.BOLD + "CLIC GAUCHE POUR " + (close ? "FERMER" : "OUVRIR")) + Component.text("" + ChatColor.AQUA + ChatColor.BOLD + "LEFT CLICK TO " + (close ? "CLOSE" : "OPEN")) )) - .addClickHandler( - new ClickHandler() - .addAllClickTypes() - .setClickAction((Player p, HashGui hashGui, ItemStack item, int slot) -> { - this.gui.open(p); - }) - ) + .addClickHandler(new ClickHandler() + .addAllClickTypes() + .setClickAction((Player p, HashGui gui, ItemStack item, int slot) -> this.gui.open(p))) .build(GUI_MANAGER); } /** - * Gives the shop to a player in its inventory. + * Gives the shop to a player in their inventory. */ - public void giveShop(Player player) - { + public void giveShop(Player player) { final PlayerData playerData = MAIN.getGameManager().getPlayerManager(player).getData(); final PlayerInventory inventory = player.getInventory(); @@ -174,18 +142,44 @@ public void giveShop(Player player) final HashItem shopItem = this.createShopItem(playerData, false); final Mask mask = new Mask(inventory); - mask.setItem('d', darkBlueGlass) .setItem('b', blueGlass) .setItem('m', magentaGlass) .setItem('w', whiteGlass) .setItem('s', shopItem); - mask.pattern(2, "ddbmwmbdd") - .pattern(3, "dbmwswmbd") - .pattern(4, "ddbmwmbdd"); + mask.pattern("ddbmwmbd") + .pattern("dbmwswmbd") + .pattern("ddbmwmbd"); mask.apply(); } + /** + * Opens the shop GUI for a player. + * + * @param player Player to open the shop for + */ + public void openShopForPlayer(Player player) { + this.gui.open(player); + } + + /** + * Refreshes the shop GUI for a player. + * + * @param player Player to refresh the shop for + */ + public void refreshShopForPlayer(Player player) { + // Logic to refresh the shop GUI for the player + this.gui.update(player); + } + + /** + * Closes the shop GUI for a player. + * + * @param player Player to close the shop for + */ + public void closeShopForPlayer(Player player) { + this.gui.close(player); + } }