From 31af7734264dbf63f48499edebf5c2c95484da85 Mon Sep 17 00:00:00 2001 From: Charles Date: Tue, 20 Nov 2018 00:31:09 +0800 Subject: [PATCH] 1.0.0-SNAPSHOT-U73 + Added Leggings, Chestplate and Boots Editor Panels + Completed the Helmet Editor Panel --- plugin-modules/Core/resources-yml/editor.yml | 2 +- .../epicbosses/managers/BossPanelManager.java | 49 +++++- .../panel/bosses/EquipmentEditorPanel.java | 3 +- .../bosses/equipment/BootsEditorPanel.java | 149 ++++++++++++++++++ .../equipment/ChestplateEditorPanel.java | 149 ++++++++++++++++++ .../bosses/equipment/HelmetEditorPanel.java | 68 +++++++- .../bosses/equipment/LeggingsEditorPanel.java | 149 ++++++++++++++++++ .../songoda/epicbosses/utils/panel/Panel.java | 9 ++ pom.xml | 2 +- 9 files changed, 568 insertions(+), 12 deletions(-) create mode 100644 plugin-modules/Core/src/com/songoda/epicbosses/panel/bosses/equipment/BootsEditorPanel.java create mode 100644 plugin-modules/Core/src/com/songoda/epicbosses/panel/bosses/equipment/ChestplateEditorPanel.java create mode 100644 plugin-modules/Core/src/com/songoda/epicbosses/panel/bosses/equipment/LeggingsEditorPanel.java diff --git a/plugin-modules/Core/resources-yml/editor.yml b/plugin-modules/Core/resources-yml/editor.yml index c97955e..f8c6418 100644 --- a/plugin-modules/Core/resources-yml/editor.yml +++ b/plugin-modules/Core/resources-yml/editor.yml @@ -421,7 +421,7 @@ HelmetEditorPanel: fillTo: 45 backButton: true Buttons: - BackButton: 54 + backButton: 54 Items: '46': type: DIAMOND diff --git a/plugin-modules/Core/src/com/songoda/epicbosses/managers/BossPanelManager.java b/plugin-modules/Core/src/com/songoda/epicbosses/managers/BossPanelManager.java index 337563f..3ec4986 100644 --- a/plugin-modules/Core/src/com/songoda/epicbosses/managers/BossPanelManager.java +++ b/plugin-modules/Core/src/com/songoda/epicbosses/managers/BossPanelManager.java @@ -9,7 +9,10 @@ import com.songoda.epicbosses.panel.bosses.BossListEquipmentEditorPanel; import com.songoda.epicbosses.panel.bosses.DropsEditorPanel; import com.songoda.epicbosses.panel.bosses.EquipmentEditorPanel; import com.songoda.epicbosses.panel.bosses.MainBossEditPanel; +import com.songoda.epicbosses.panel.bosses.equipment.BootsEditorPanel; +import com.songoda.epicbosses.panel.bosses.equipment.ChestplateEditorPanel; import com.songoda.epicbosses.panel.bosses.equipment.HelmetEditorPanel; +import com.songoda.epicbosses.panel.bosses.equipment.LeggingsEditorPanel; import com.songoda.epicbosses.utils.panel.base.ISubVariablePanelHandler; import com.songoda.epicbosses.utils.panel.base.IVariablePanelHandler; import lombok.Getter; @@ -37,7 +40,7 @@ public class BossPanelManager implements ILoadable, IReloadable { @Getter private IPanelHandler addItemsMenu; @Getter private IVariablePanelHandler mainBossEditMenu, dropsEditMenu, equipmentListEditMenu; - @Getter private ISubVariablePanelHandler equipmentEditMenu, helmetEditorMenu; + @Getter private ISubVariablePanelHandler equipmentEditMenu, helmetEditorMenu, chestplateEditorMenu, leggingsEditorMenu, bootsEditorMenu; private final CustomBosses customBosses; @@ -63,6 +66,9 @@ public class BossPanelManager implements ILoadable, IReloadable { loadEquipmentEditMenu(); loadHelmetEditMenu(); + loadChestplateEditMenu(); + loadLeggingsEditMenu(); + loadBootsEditMenu(); } @Override @@ -83,6 +89,9 @@ public class BossPanelManager implements ILoadable, IReloadable { reloadEquipmentEditMenu(); reloadHelmetEditMenu(); + reloadChestplateEditMenu(); + reloadLeggingsEditMenu(); + reloadBootsEditMenu(); } public int isItemStackUsed(String name) { @@ -112,7 +121,7 @@ public class BossPanelManager implements ILoadable, IReloadable { //--------------------------------------------- // - // H E L ME T E D I T P A N E L + // E Q U I P M E N T E D I T P A N E L S // //--------------------------------------------- @@ -128,6 +137,42 @@ public class BossPanelManager implements ILoadable, IReloadable { this.helmetEditorMenu.initializePanel(panelBuilder); } + private void loadChestplateEditMenu() { + PanelBuilder panelBuilder = new PanelBuilder(this.customBosses.getEditor().getConfigurationSection("ChestplateEditorPanel")); + + this.chestplateEditorMenu = new ChestplateEditorPanel(this, panelBuilder, this.customBosses); + } + + private void reloadChestplateEditMenu() { + PanelBuilder panelBuilder = new PanelBuilder(this.customBosses.getEditor().getConfigurationSection("ChestplateEditorPanel")); + + this.chestplateEditorMenu.initializePanel(panelBuilder); + } + + private void loadLeggingsEditMenu() { + PanelBuilder panelBuilder = new PanelBuilder(this.customBosses.getEditor().getConfigurationSection("LeggingsEditorPanel")); + + this.leggingsEditorMenu = new LeggingsEditorPanel(this, panelBuilder, this.customBosses); + } + + private void reloadLeggingsEditMenu() { + PanelBuilder panelBuilder = new PanelBuilder(this.customBosses.getEditor().getConfigurationSection("LeggingsEditorPanel")); + + this.leggingsEditorMenu.initializePanel(panelBuilder); + } + + private void loadBootsEditMenu() { + PanelBuilder panelBuilder = new PanelBuilder(this.customBosses.getEditor().getConfigurationSection("BootsEditorPanel")); + + this.bootsEditorMenu = new BootsEditorPanel(this, panelBuilder, this.customBosses); + } + + private void reloadBootsEditMenu() { + PanelBuilder panelBuilder = new PanelBuilder(this.customBosses.getEditor().getConfigurationSection("BootsEditorPanel")); + + this.bootsEditorMenu.initializePanel(panelBuilder); + } + //--------------------------------------------- // // E Q U I P M E N T L I S T E D I T P A N E L diff --git a/plugin-modules/Core/src/com/songoda/epicbosses/panel/bosses/EquipmentEditorPanel.java b/plugin-modules/Core/src/com/songoda/epicbosses/panel/bosses/EquipmentEditorPanel.java index 9beb219..3cadc87 100644 --- a/plugin-modules/Core/src/com/songoda/epicbosses/panel/bosses/EquipmentEditorPanel.java +++ b/plugin-modules/Core/src/com/songoda/epicbosses/panel/bosses/EquipmentEditorPanel.java @@ -55,8 +55,9 @@ public class EquipmentEditorPanel extends SubVariablePanelHandler panel.setOnClick(slot, event -> this.bossPanelManager.getHelmetEditorMenu().openFor(player, bossEntity, entityStatsElement))); panel.openFor(player); } diff --git a/plugin-modules/Core/src/com/songoda/epicbosses/panel/bosses/equipment/BootsEditorPanel.java b/plugin-modules/Core/src/com/songoda/epicbosses/panel/bosses/equipment/BootsEditorPanel.java new file mode 100644 index 0000000..f7eb8fc --- /dev/null +++ b/plugin-modules/Core/src/com/songoda/epicbosses/panel/bosses/equipment/BootsEditorPanel.java @@ -0,0 +1,149 @@ +package com.songoda.epicbosses.panel.bosses.equipment; + +import com.songoda.epicbosses.CustomBosses; +import com.songoda.epicbosses.api.BossAPI; +import com.songoda.epicbosses.entity.BossEntity; +import com.songoda.epicbosses.entity.elements.EntityStatsElement; +import com.songoda.epicbosses.managers.BossPanelManager; +import com.songoda.epicbosses.managers.files.BossesFileManager; +import com.songoda.epicbosses.managers.files.ItemsFileManager; +import com.songoda.epicbosses.utils.itemstack.ItemStackConverter; +import com.songoda.epicbosses.utils.itemstack.ItemStackUtils; +import com.songoda.epicbosses.utils.itemstack.holder.ItemStackHolder; +import com.songoda.epicbosses.utils.panel.Panel; +import com.songoda.epicbosses.utils.panel.base.SubVariablePanelHandler; +import com.songoda.epicbosses.utils.panel.builder.PanelBuilder; +import com.songoda.epicbosses.utils.panel.builder.PanelBuilderCounter; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author Charles Cullen + * @version 1.0.0 + * @since 19-Nov-18 + */ +public class BootsEditorPanel extends SubVariablePanelHandler { + + private ItemStackConverter itemStackConverter; + private BossesFileManager bossesFileManager; + private ItemsFileManager itemsFileManager; + private CustomBosses plugin; + + public BootsEditorPanel(BossPanelManager bossPanelManager, PanelBuilder panelBuilder, CustomBosses plugin) { + super(bossPanelManager, panelBuilder); + + this.plugin = plugin; + this.itemStackConverter = new ItemStackConverter(); + this.itemsFileManager = plugin.getItemStackManager(); + this.bossesFileManager = plugin.getBossesFileManager(); + } + + @Override + public void fillPanel(Panel panel, BossEntity bossEntity, EntityStatsElement entityStatsElement) { + Map itemStackHolderMap = this.itemsFileManager.getItemStackHolders(); + Map filteredMap = filterMap(itemStackHolderMap); + List entryList = new ArrayList<>(filteredMap.keySet()); + int maxPage = panel.getMaxPage(entryList); + + panel.setOnPageChange(((player, currentPage, requestedPage) -> { + if(requestedPage < 0 || requestedPage > maxPage) return false; + + loadPage(panel, requestedPage, filteredMap, entryList, bossEntity, entityStatsElement); + return true; + })); + + loadPage(panel, 0, filteredMap, entryList, bossEntity, entityStatsElement); + } + + @Override + public void openFor(Player player, BossEntity bossEntity, EntityStatsElement entityStatsElement) { + Map replaceMap = new HashMap<>(); + + replaceMap.put("{name}", BossAPI.getBossEntityName(bossEntity)); + + PanelBuilder panelBuilder = getPanelBuilder().cloneBuilder(); + + panelBuilder.addReplaceData(replaceMap); + + Panel panel = panelBuilder.getPanel() + .setDestroyWhenDone(true) + .setCancelLowerClick(true) + .setCancelClick(true) + .setParentPanelHandler(this.bossPanelManager.getEquipmentEditMenu(), bossEntity, entityStatsElement); + PanelBuilderCounter panelBuilderCounter = panel.getPanelBuilderCounter(); + + panelBuilderCounter.getSlotsWith("AddNew").forEach(slot -> panel.setOnClick(slot, event -> this.bossPanelManager.getAddItemsMenu().openFor(player))); + panelBuilderCounter.getSlotsWith("Remove").forEach(slot -> panel.setOnClick(slot, event -> { + entityStatsElement.getEquipment().setHelmet(""); + this.bossesFileManager.save(); + + openFor((Player) event.getWhoClicked(), bossEntity, entityStatsElement); + })); + + fillPanel(panel, bossEntity, entityStatsElement); + + panel.openFor(player); + } + + @Override + public void initializePanel(PanelBuilder panelBuilder) { + PanelBuilderCounter panelBuilderCounter = panelBuilder.getPanelBuilderCounter(); + + panelBuilderCounter + .addSlotCounter("Remove") + .addSlotCounter("AddNew"); + } + + private void loadPage(Panel panel, int requestedPage, Map itemStackHolderMap, List entryList, BossEntity bossEntity, EntityStatsElement entityStatsElement) { + String helmet = entityStatsElement.getEquipment().getHelmet(); + + panel.loadPage(requestedPage, (slot, realisticSlot) -> { + if(slot >= itemStackHolderMap.size()) { + panel.setItem(realisticSlot, new ItemStack(Material.AIR), e -> {}); + } else { + String name = entryList.get(slot); + ItemStackHolder itemStackHolder = itemStackHolderMap.get(name); + ItemStack itemStack = this.itemStackConverter.from(itemStackHolder); + + if(itemStack == null) { + itemStack = new ItemStack(Material.BARRIER); + } + + if(name.equalsIgnoreCase(helmet)) { + Map replaceMap = new HashMap<>(); + + replaceMap.put("{name}", ItemStackUtils.getName(itemStack)); + + ItemStackUtils.applyDisplayName(itemStack, this.plugin.getConfig().getString("Display.EquipmentEditor.name"), replaceMap); + } + + panel.setItem(realisticSlot, itemStack, e -> { + entityStatsElement.getEquipment().setHelmet(name); + this.bossesFileManager.save(); + + openFor((Player) e.getWhoClicked(), bossEntity, entityStatsElement); + }); + } + }); + } + + private Map filterMap(Map itemStackHolderMap) { + Map newMap = new HashMap<>(); + + itemStackHolderMap.forEach((string, holder) -> { + ItemStack itemStack = this.itemStackConverter.from(holder); + + if(itemStack.getType().name().contains("BOOTS")) { + newMap.put(string, holder); + } + }); + + return newMap; + } +} diff --git a/plugin-modules/Core/src/com/songoda/epicbosses/panel/bosses/equipment/ChestplateEditorPanel.java b/plugin-modules/Core/src/com/songoda/epicbosses/panel/bosses/equipment/ChestplateEditorPanel.java new file mode 100644 index 0000000..ab71a58 --- /dev/null +++ b/plugin-modules/Core/src/com/songoda/epicbosses/panel/bosses/equipment/ChestplateEditorPanel.java @@ -0,0 +1,149 @@ +package com.songoda.epicbosses.panel.bosses.equipment; + +import com.songoda.epicbosses.CustomBosses; +import com.songoda.epicbosses.api.BossAPI; +import com.songoda.epicbosses.entity.BossEntity; +import com.songoda.epicbosses.entity.elements.EntityStatsElement; +import com.songoda.epicbosses.managers.BossPanelManager; +import com.songoda.epicbosses.managers.files.BossesFileManager; +import com.songoda.epicbosses.managers.files.ItemsFileManager; +import com.songoda.epicbosses.utils.itemstack.ItemStackConverter; +import com.songoda.epicbosses.utils.itemstack.ItemStackUtils; +import com.songoda.epicbosses.utils.itemstack.holder.ItemStackHolder; +import com.songoda.epicbosses.utils.panel.Panel; +import com.songoda.epicbosses.utils.panel.base.SubVariablePanelHandler; +import com.songoda.epicbosses.utils.panel.builder.PanelBuilder; +import com.songoda.epicbosses.utils.panel.builder.PanelBuilderCounter; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author Charles Cullen + * @version 1.0.0 + * @since 19-Nov-18 + */ +public class ChestplateEditorPanel extends SubVariablePanelHandler { + + private ItemStackConverter itemStackConverter; + private BossesFileManager bossesFileManager; + private ItemsFileManager itemsFileManager; + private CustomBosses plugin; + + public ChestplateEditorPanel(BossPanelManager bossPanelManager, PanelBuilder panelBuilder, CustomBosses plugin) { + super(bossPanelManager, panelBuilder); + + this.plugin = plugin; + this.itemStackConverter = new ItemStackConverter(); + this.itemsFileManager = plugin.getItemStackManager(); + this.bossesFileManager = plugin.getBossesFileManager(); + } + + @Override + public void fillPanel(Panel panel, BossEntity bossEntity, EntityStatsElement entityStatsElement) { + Map itemStackHolderMap = this.itemsFileManager.getItemStackHolders(); + Map filteredMap = filterMap(itemStackHolderMap); + List entryList = new ArrayList<>(filteredMap.keySet()); + int maxPage = panel.getMaxPage(entryList); + + panel.setOnPageChange(((player, currentPage, requestedPage) -> { + if(requestedPage < 0 || requestedPage > maxPage) return false; + + loadPage(panel, requestedPage, filteredMap, entryList, bossEntity, entityStatsElement); + return true; + })); + + loadPage(panel, 0, filteredMap, entryList, bossEntity, entityStatsElement); + } + + @Override + public void openFor(Player player, BossEntity bossEntity, EntityStatsElement entityStatsElement) { + Map replaceMap = new HashMap<>(); + + replaceMap.put("{name}", BossAPI.getBossEntityName(bossEntity)); + + PanelBuilder panelBuilder = getPanelBuilder().cloneBuilder(); + + panelBuilder.addReplaceData(replaceMap); + + Panel panel = panelBuilder.getPanel() + .setDestroyWhenDone(true) + .setCancelLowerClick(true) + .setCancelClick(true) + .setParentPanelHandler(this.bossPanelManager.getEquipmentEditMenu(), bossEntity, entityStatsElement); + PanelBuilderCounter panelBuilderCounter = panel.getPanelBuilderCounter(); + + panelBuilderCounter.getSlotsWith("AddNew").forEach(slot -> panel.setOnClick(slot, event -> this.bossPanelManager.getAddItemsMenu().openFor(player))); + panelBuilderCounter.getSlotsWith("Remove").forEach(slot -> panel.setOnClick(slot, event -> { + entityStatsElement.getEquipment().setHelmet(""); + this.bossesFileManager.save(); + + openFor((Player) event.getWhoClicked(), bossEntity, entityStatsElement); + })); + + fillPanel(panel, bossEntity, entityStatsElement); + + panel.openFor(player); + } + + @Override + public void initializePanel(PanelBuilder panelBuilder) { + PanelBuilderCounter panelBuilderCounter = panelBuilder.getPanelBuilderCounter(); + + panelBuilderCounter + .addSlotCounter("Remove") + .addSlotCounter("AddNew"); + } + + private void loadPage(Panel panel, int requestedPage, Map itemStackHolderMap, List entryList, BossEntity bossEntity, EntityStatsElement entityStatsElement) { + String helmet = entityStatsElement.getEquipment().getHelmet(); + + panel.loadPage(requestedPage, (slot, realisticSlot) -> { + if(slot >= itemStackHolderMap.size()) { + panel.setItem(realisticSlot, new ItemStack(Material.AIR), e -> {}); + } else { + String name = entryList.get(slot); + ItemStackHolder itemStackHolder = itemStackHolderMap.get(name); + ItemStack itemStack = this.itemStackConverter.from(itemStackHolder); + + if(itemStack == null) { + itemStack = new ItemStack(Material.BARRIER); + } + + if(name.equalsIgnoreCase(helmet)) { + Map replaceMap = new HashMap<>(); + + replaceMap.put("{name}", ItemStackUtils.getName(itemStack)); + + ItemStackUtils.applyDisplayName(itemStack, this.plugin.getConfig().getString("Display.EquipmentEditor.name"), replaceMap); + } + + panel.setItem(realisticSlot, itemStack, e -> { + entityStatsElement.getEquipment().setHelmet(name); + this.bossesFileManager.save(); + + openFor((Player) e.getWhoClicked(), bossEntity, entityStatsElement); + }); + } + }); + } + + private Map filterMap(Map itemStackHolderMap) { + Map newMap = new HashMap<>(); + + itemStackHolderMap.forEach((string, holder) -> { + ItemStack itemStack = this.itemStackConverter.from(holder); + + if(itemStack.getType().name().contains("CHESTPLATE")) { + newMap.put(string, holder); + } + }); + + return newMap; + } +} diff --git a/plugin-modules/Core/src/com/songoda/epicbosses/panel/bosses/equipment/HelmetEditorPanel.java b/plugin-modules/Core/src/com/songoda/epicbosses/panel/bosses/equipment/HelmetEditorPanel.java index 3d587fd..9759402 100644 --- a/plugin-modules/Core/src/com/songoda/epicbosses/panel/bosses/equipment/HelmetEditorPanel.java +++ b/plugin-modules/Core/src/com/songoda/epicbosses/panel/bosses/equipment/HelmetEditorPanel.java @@ -1,9 +1,11 @@ package com.songoda.epicbosses.panel.bosses.equipment; import com.songoda.epicbosses.CustomBosses; +import com.songoda.epicbosses.api.BossAPI; import com.songoda.epicbosses.entity.BossEntity; import com.songoda.epicbosses.entity.elements.EntityStatsElement; import com.songoda.epicbosses.managers.BossPanelManager; +import com.songoda.epicbosses.managers.files.BossesFileManager; import com.songoda.epicbosses.managers.files.ItemsFileManager; import com.songoda.epicbosses.utils.itemstack.ItemStackConverter; import com.songoda.epicbosses.utils.itemstack.ItemStackUtils; @@ -11,6 +13,7 @@ import com.songoda.epicbosses.utils.itemstack.holder.ItemStackHolder; import com.songoda.epicbosses.utils.panel.Panel; import com.songoda.epicbosses.utils.panel.base.SubVariablePanelHandler; import com.songoda.epicbosses.utils.panel.builder.PanelBuilder; +import com.songoda.epicbosses.utils.panel.builder.PanelBuilderCounter; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; @@ -28,6 +31,7 @@ import java.util.Map; public class HelmetEditorPanel extends SubVariablePanelHandler { private ItemStackConverter itemStackConverter; + private BossesFileManager bossesFileManager; private ItemsFileManager itemsFileManager; private CustomBosses plugin; @@ -37,35 +41,66 @@ public class HelmetEditorPanel extends SubVariablePanelHandler itemStackHolderMap = this.itemsFileManager.getItemStackHolders(); - List entryList = new ArrayList<>(itemStackHolderMap.keySet()); + Map filteredMap = filterMap(itemStackHolderMap); + List entryList = new ArrayList<>(filteredMap.keySet()); int maxPage = panel.getMaxPage(entryList); panel.setOnPageChange(((player, currentPage, requestedPage) -> { if(requestedPage < 0 || requestedPage > maxPage) return false; - loadPage(panel, requestedPage, itemStackHolderMap, entryList, entityStatsElement); + loadPage(panel, requestedPage, filteredMap, entryList, bossEntity, entityStatsElement); return true; })); - loadPage(panel, 0, itemStackHolderMap, entryList, entityStatsElement); + loadPage(panel, 0, filteredMap, entryList, bossEntity, entityStatsElement); } @Override public void openFor(Player player, BossEntity bossEntity, EntityStatsElement entityStatsElement) { + Map replaceMap = new HashMap<>(); + replaceMap.put("{name}", BossAPI.getBossEntityName(bossEntity)); + + PanelBuilder panelBuilder = getPanelBuilder().cloneBuilder(); + + panelBuilder.addReplaceData(replaceMap); + + Panel panel = panelBuilder.getPanel() + .setDestroyWhenDone(true) + .setCancelLowerClick(true) + .setCancelClick(true) + .setParentPanelHandler(this.bossPanelManager.getEquipmentEditMenu(), bossEntity, entityStatsElement); + PanelBuilderCounter panelBuilderCounter = panel.getPanelBuilderCounter(); + + panelBuilderCounter.getSlotsWith("AddNew").forEach(slot -> panel.setOnClick(slot, event -> this.bossPanelManager.getAddItemsMenu().openFor(player))); + panelBuilderCounter.getSlotsWith("Remove").forEach(slot -> panel.setOnClick(slot, event -> { + entityStatsElement.getEquipment().setHelmet(""); + this.bossesFileManager.save(); + + openFor((Player) event.getWhoClicked(), bossEntity, entityStatsElement); + })); + + fillPanel(panel, bossEntity, entityStatsElement); + + panel.openFor(player); } @Override public void initializePanel(PanelBuilder panelBuilder) { + PanelBuilderCounter panelBuilderCounter = panelBuilder.getPanelBuilderCounter(); + panelBuilderCounter + .addSlotCounter("Remove") + .addSlotCounter("AddNew"); } - private void loadPage(Panel panel, int requestedPage, Map itemStackHolderMap, List entryList, EntityStatsElement entityStatsElement) { + private void loadPage(Panel panel, int requestedPage, Map itemStackHolderMap, List entryList, BossEntity bossEntity, EntityStatsElement entityStatsElement) { String helmet = entityStatsElement.getEquipment().getHelmet(); panel.loadPage(requestedPage, (slot, realisticSlot) -> { @@ -80,16 +115,35 @@ public class HelmetEditorPanel extends SubVariablePanelHandler replaceMap = new HashMap<>(); + if(name.equalsIgnoreCase(helmet)) { + Map replaceMap = new HashMap<>(); - replaceMap.put("{name}", ItemStackUtils.getName(itemStack)); + replaceMap.put("{name}", ItemStackUtils.getName(itemStack)); - ItemStackUtils.applyDisplayName(itemStack, this.plugin.getConfig().getString("Display.EquipmentEditor.name"), replaceMap); + ItemStackUtils.applyDisplayName(itemStack, this.plugin.getConfig().getString("Display.EquipmentEditor.name"), replaceMap); + } panel.setItem(realisticSlot, itemStack, e -> { + entityStatsElement.getEquipment().setHelmet(name); + this.bossesFileManager.save(); + openFor((Player) e.getWhoClicked(), bossEntity, entityStatsElement); }); } }); } + + private Map filterMap(Map itemStackHolderMap) { + Map newMap = new HashMap<>(); + + itemStackHolderMap.forEach((string, holder) -> { + ItemStack itemStack = this.itemStackConverter.from(holder); + + if(itemStack.getType().name().contains("HELMET") || itemStack.getType().isBlock()) { + newMap.put(string, holder); + } + }); + + return newMap; + } } diff --git a/plugin-modules/Core/src/com/songoda/epicbosses/panel/bosses/equipment/LeggingsEditorPanel.java b/plugin-modules/Core/src/com/songoda/epicbosses/panel/bosses/equipment/LeggingsEditorPanel.java new file mode 100644 index 0000000..3e63ab8 --- /dev/null +++ b/plugin-modules/Core/src/com/songoda/epicbosses/panel/bosses/equipment/LeggingsEditorPanel.java @@ -0,0 +1,149 @@ +package com.songoda.epicbosses.panel.bosses.equipment; + +import com.songoda.epicbosses.CustomBosses; +import com.songoda.epicbosses.api.BossAPI; +import com.songoda.epicbosses.entity.BossEntity; +import com.songoda.epicbosses.entity.elements.EntityStatsElement; +import com.songoda.epicbosses.managers.BossPanelManager; +import com.songoda.epicbosses.managers.files.BossesFileManager; +import com.songoda.epicbosses.managers.files.ItemsFileManager; +import com.songoda.epicbosses.utils.itemstack.ItemStackConverter; +import com.songoda.epicbosses.utils.itemstack.ItemStackUtils; +import com.songoda.epicbosses.utils.itemstack.holder.ItemStackHolder; +import com.songoda.epicbosses.utils.panel.Panel; +import com.songoda.epicbosses.utils.panel.base.SubVariablePanelHandler; +import com.songoda.epicbosses.utils.panel.builder.PanelBuilder; +import com.songoda.epicbosses.utils.panel.builder.PanelBuilderCounter; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author Charles Cullen + * @version 1.0.0 + * @since 19-Nov-18 + */ +public class LeggingsEditorPanel extends SubVariablePanelHandler { + + private ItemStackConverter itemStackConverter; + private BossesFileManager bossesFileManager; + private ItemsFileManager itemsFileManager; + private CustomBosses plugin; + + public LeggingsEditorPanel(BossPanelManager bossPanelManager, PanelBuilder panelBuilder, CustomBosses plugin) { + super(bossPanelManager, panelBuilder); + + this.plugin = plugin; + this.itemStackConverter = new ItemStackConverter(); + this.itemsFileManager = plugin.getItemStackManager(); + this.bossesFileManager = plugin.getBossesFileManager(); + } + + @Override + public void fillPanel(Panel panel, BossEntity bossEntity, EntityStatsElement entityStatsElement) { + Map itemStackHolderMap = this.itemsFileManager.getItemStackHolders(); + Map filteredMap = filterMap(itemStackHolderMap); + List entryList = new ArrayList<>(filteredMap.keySet()); + int maxPage = panel.getMaxPage(entryList); + + panel.setOnPageChange(((player, currentPage, requestedPage) -> { + if(requestedPage < 0 || requestedPage > maxPage) return false; + + loadPage(panel, requestedPage, filteredMap, entryList, bossEntity, entityStatsElement); + return true; + })); + + loadPage(panel, 0, filteredMap, entryList, bossEntity, entityStatsElement); + } + + @Override + public void openFor(Player player, BossEntity bossEntity, EntityStatsElement entityStatsElement) { + Map replaceMap = new HashMap<>(); + + replaceMap.put("{name}", BossAPI.getBossEntityName(bossEntity)); + + PanelBuilder panelBuilder = getPanelBuilder().cloneBuilder(); + + panelBuilder.addReplaceData(replaceMap); + + Panel panel = panelBuilder.getPanel() + .setDestroyWhenDone(true) + .setCancelLowerClick(true) + .setCancelClick(true) + .setParentPanelHandler(this.bossPanelManager.getEquipmentEditMenu(), bossEntity, entityStatsElement); + PanelBuilderCounter panelBuilderCounter = panel.getPanelBuilderCounter(); + + panelBuilderCounter.getSlotsWith("AddNew").forEach(slot -> panel.setOnClick(slot, event -> this.bossPanelManager.getAddItemsMenu().openFor(player))); + panelBuilderCounter.getSlotsWith("Remove").forEach(slot -> panel.setOnClick(slot, event -> { + entityStatsElement.getEquipment().setHelmet(""); + this.bossesFileManager.save(); + + openFor((Player) event.getWhoClicked(), bossEntity, entityStatsElement); + })); + + fillPanel(panel, bossEntity, entityStatsElement); + + panel.openFor(player); + } + + @Override + public void initializePanel(PanelBuilder panelBuilder) { + PanelBuilderCounter panelBuilderCounter = panelBuilder.getPanelBuilderCounter(); + + panelBuilderCounter + .addSlotCounter("Remove") + .addSlotCounter("AddNew"); + } + + private void loadPage(Panel panel, int requestedPage, Map itemStackHolderMap, List entryList, BossEntity bossEntity, EntityStatsElement entityStatsElement) { + String helmet = entityStatsElement.getEquipment().getHelmet(); + + panel.loadPage(requestedPage, (slot, realisticSlot) -> { + if(slot >= itemStackHolderMap.size()) { + panel.setItem(realisticSlot, new ItemStack(Material.AIR), e -> {}); + } else { + String name = entryList.get(slot); + ItemStackHolder itemStackHolder = itemStackHolderMap.get(name); + ItemStack itemStack = this.itemStackConverter.from(itemStackHolder); + + if(itemStack == null) { + itemStack = new ItemStack(Material.BARRIER); + } + + if(name.equalsIgnoreCase(helmet)) { + Map replaceMap = new HashMap<>(); + + replaceMap.put("{name}", ItemStackUtils.getName(itemStack)); + + ItemStackUtils.applyDisplayName(itemStack, this.plugin.getConfig().getString("Display.EquipmentEditor.name"), replaceMap); + } + + panel.setItem(realisticSlot, itemStack, e -> { + entityStatsElement.getEquipment().setHelmet(name); + this.bossesFileManager.save(); + + openFor((Player) e.getWhoClicked(), bossEntity, entityStatsElement); + }); + } + }); + } + + private Map filterMap(Map itemStackHolderMap) { + Map newMap = new HashMap<>(); + + itemStackHolderMap.forEach((string, holder) -> { + ItemStack itemStack = this.itemStackConverter.from(holder); + + if(itemStack.getType().name().contains("LEGGINGS")) { + newMap.put(string, holder); + } + }); + + return newMap; + } +} diff --git a/plugin-modules/Core/src/com/songoda/epicbosses/utils/panel/Panel.java b/plugin-modules/Core/src/com/songoda/epicbosses/utils/panel/Panel.java index 6bfb984..f3a963b 100644 --- a/plugin-modules/Core/src/com/songoda/epicbosses/utils/panel/Panel.java +++ b/plugin-modules/Core/src/com/songoda/epicbosses/utils/panel/Panel.java @@ -409,6 +409,15 @@ public class Panel implements Listener, ICloneable { return this; } + public Panel setParentPanelHandler(ISubVariablePanelHandler variablePanelHandler, T variable, Y subVariable) { + if(!this.panelBuilderSettings.isBackButton()) return this; + + int slot = this.panelBuilderSettings.getBackButtonSlot() - 1; + + setOnClick(slot, event -> variablePanelHandler.openFor((Player) event.getWhoClicked(), variable, subVariable)); + return this; + } + public Panel setExitButton() { if(!this.panelBuilderSettings.isExitButton()) return this; diff --git a/pom.xml b/pom.xml index cc1d0d9..29650c1 100644 --- a/pom.xml +++ b/pom.xml @@ -19,7 +19,7 @@ - maven-version-number-SNAPSHOT-U72 + maven-version-number-SNAPSHOT-U73 EpicBosses com.songoda.epicbosses.CustomBosses AMinecraftDev