From ccf471b16d5992117fd5da24421c6b9f955ff445 Mon Sep 17 00:00:00 2001 From: Charles Date: Mon, 19 Nov 2018 23:51:33 +0800 Subject: [PATCH] 1.0.0-SNAPSHOT-U72 + Added BossList Panel + Updated Equipment Panel --- backup.yml | 77 +---------- plugin-modules/Core/resources-json/items.json | 4 + plugin-modules/Core/resources-yml/config.yml | 12 ++ plugin-modules/Core/resources-yml/editor.yml | 99 +++++++++++++- .../epicbosses/managers/BossPanelManager.java | 49 ++++++- .../bosses/BossListEquipmentEditorPanel.java | 124 ++++++++++++++++++ .../panel/bosses/EquipmentEditorPanel.java | 13 +- .../panel/bosses/MainBossEditPanel.java | 2 +- .../bosses/equipment/HelmetEditorPanel.java | 95 ++++++++++++++ .../utils/itemstack/ItemStackUtils.java | 10 ++ .../songoda/epicbosses/utils/panel/Panel.java | 4 - .../panel/base/ISubVariablePanelHandler.java | 17 +++ .../panel/base/SubVariablePanelHandler.java | 16 +++ pom.xml | 2 +- 14 files changed, 437 insertions(+), 87 deletions(-) create mode 100644 plugin-modules/Core/src/com/songoda/epicbosses/panel/bosses/BossListEquipmentEditorPanel.java create mode 100644 plugin-modules/Core/src/com/songoda/epicbosses/panel/bosses/equipment/HelmetEditorPanel.java create mode 100644 plugin-modules/Core/src/com/songoda/epicbosses/utils/panel/base/ISubVariablePanelHandler.java create mode 100644 plugin-modules/Core/src/com/songoda/epicbosses/utils/panel/base/SubVariablePanelHandler.java diff --git a/backup.yml b/backup.yml index 92c9653..f467596 100644 --- a/backup.yml +++ b/backup.yml @@ -1,68 +1,5 @@ -EquipmentPanel: - name: '&b&l{boss} Editor' - slots: 9 - Settings: - backButton: true - emptySpaceFiller: true - EmptySpaceFiller: - type: '160:0' - name: '&7' - Buttons: - BackButton: 9 - Items: - '2': - type: DIAMOND_HELMET - name: '&c&lHelmet' - lore: - - '&7Click here to change the' - - '&7helmet for the &f{boss}' - - '&7or add one from your' - - '&7inventory.' - Button: Helmet - '3': - type: DIAMOND_CHESTPLATE - name: '&c&lChestplate' - lore: - - '&7Click here to change the' - - '&7chestplate for the &f{boss}' - - '&7or add one from your' - - '&7inventory.' - Button: Chestplate - '4': - type: DIAMOND_LEGGINGS - name: '&c&lLeggings' - lore: - - '&7Click here to change the' - - '&7leggings for the &f{boss}' - - '&7or add one from your' - - '&7inventory.' - Button: Leggings - '5': - type: DIAMOND_BOOTS - name: '&c&lBoots' - lore: - - '&7Click here to change the' - - '&7boots for the &f{boss}' - - '&7or add one from your' - - '&7inventory.' - Button: Boots - '8': - type: PAPER - name: '&e&lGo Back' - lore: - - '&7Click here to go back.' - '9': - type: BOOK - name: '&c&lEquipment Guide' - lore: - - '&7here you can choose what equipment' - - '&7this boss has. To choose simply click' - - '&7the desired piece, then click one of' - - '&7the preset pieces or click the diamond' - - '&7block to add a new piece from your' - - '&7inventory.' HelmetPanel: - name: '&b&l{boss} Editor' + name: '&b&l{name} Editor' slots: 54 Settings: fillTo: 45 @@ -78,10 +15,10 @@ HelmetPanel: - '&7currently equipped helmet.' Button: Remove '47': - type: STAINED_GLASS_PANE + type: WHITE_STAINED_GLASS_PANE name: '&7' '48': - type: STAINED_GLASS_PANE + type: WHITE_STAINED_GLASS_PANE name: '&7' '49': type: ARROW @@ -89,8 +26,6 @@ HelmetPanel: lore: - '&7Click here to go to the previous' - '&7page of helmets.' - - '&7' - - '&7Currently viewing page &e{currentPage}/{maxPages}&7.' PreviousPage: true '50': type: DIAMOND_BLOCK @@ -106,14 +41,12 @@ HelmetPanel: lore: - '&7Click here to go to the next' - '&7page of helmets.' - - '&7' - - '&7Currently viewing page &e{currentPage}/{maxPages}&7.' NextPage: true '52': - type: STAINED_GLASS_PANE + type: WHITE_STAINED_GLASS_PANE name: '&7' '53': - type: STAINED_GLASS_PANE + type: WHITE_STAINED_GLASS_PANE name: '&7' '54': type: PAPER diff --git a/plugin-modules/Core/resources-json/items.json b/plugin-modules/Core/resources-json/items.json index 9a35f51..3bfcd32 100644 --- a/plugin-modules/Core/resources-json/items.json +++ b/plugin-modules/Core/resources-json/items.json @@ -15,6 +15,10 @@ "type": "BLAZE_POWDER", "name": "&c&lDefault Skill Menu Item" }, + "DefaultBossListEditorMenuItem": { + "type": "ZOMBIE_SPAWN_EGG", + "name": "&c&lDefault Boss List Editor Menu Item" + }, "SKSpawnItem": { "type": "SKELETON_SPAWN_EGG", "name": "&6&lSkeleton King Boss Spawn Egg", diff --git a/plugin-modules/Core/resources-yml/config.yml b/plugin-modules/Core/resources-yml/config.yml index 77344c0..8449884 100644 --- a/plugin-modules/Core/resources-yml/config.yml +++ b/plugin-modules/Core/resources-yml/config.yml @@ -33,6 +33,18 @@ Hooks: - 'blocked_region1' - 'blocked_region2' Display: + BossListEditor: + name: '&3{position} Entity' + lore: + - '&3Left Click &8»' + - '&7Edit the {targetType} for this' + - '&7entity in the section.' + - '&7' + - '&3Right Click &8»' + - '&7Remove this section, can be done' + - '&7to anything above the first one.' + EquipmentEditor: + name: '{name} &a&l** Selected **' EditDrops: lore: - '&3Type: &7{type}' diff --git a/plugin-modules/Core/resources-yml/editor.yml b/plugin-modules/Core/resources-yml/editor.yml index 62c6f5d..c97955e 100644 --- a/plugin-modules/Core/resources-yml/editor.yml +++ b/plugin-modules/Core/resources-yml/editor.yml @@ -309,6 +309,48 @@ DropsEditorPanel: - '&7 with an emerald which states so.' - '&c&l* &7Every drop table from every boss will be listed' - '&7 here as an available drop table.' +BossListEditorPanel: + name: '&b&l{name} Editor' + slots: 54 + Settings: + backButton: true + fillTo: 45 + Buttons: + backButton: 54 + Items: + '46': + type: WHITE_STAINED_GLASS_PANE + name: '&7' + '47': + type: WHITE_STAINED_GLASS_PANE + name: '&7' + '48': + type: WHITE_STAINED_GLASS_PANE + name: '&7' + '49': + type: WHITE_STAINED_GLASS_PANE + name: '&7' + '50': + type: DIAMOND_BLOCK + name: '&a&lCreate a new Entity' + lore: + - '&7Click here to create a new entity' + - '&7within this boss.' + Button: CreateEntity + '51': + type: WHITE_STAINED_GLASS_PANE + name: '&7' + '52': + type: WHITE_STAINED_GLASS_PANE + name: '&7' + '53': + type: WHITE_STAINED_GLASS_PANE + name: '&7' + '54': + type: PAPER + name: '&e&lGo Back' + lore: + - '&7Click here to go back.' EquipmentEditorPanel: name: '&b&l{name} Editor' slots: 9 @@ -371,4 +413,59 @@ EquipmentEditorPanel: - '&7the desired piece, then click one of' - '&7the preset pieces or click the diamond' - '&7block to add a new piece from your' - - '&7inventory.' \ No newline at end of file + - '&7inventory.' +HelmetEditorPanel: + name: '&b&l{name} Editor' + slots: 54 + Settings: + fillTo: 45 + backButton: true + Buttons: + BackButton: 54 + Items: + '46': + type: DIAMOND + name: '&c&lRemove' + lore: + - '&7click here to remove the' + - '&7currently equipped helmet.' + Button: Remove + '47': + type: WHITE_STAINED_GLASS_PANE + name: '&7' + '48': + type: WHITE_STAINED_GLASS_PANE + name: '&7' + '49': + type: ARROW + name: '&e&l&m<-&e&l Previous Page' + lore: + - '&7Click here to go to the previous' + - '&7page of helmets.' + PreviousPage: true + '50': + type: DIAMOND_BLOCK + name: '&a&lAdd New Helmet' + lore: + - '&7Click here to add a new' + - '&7helmet which you have in your' + - '&7inventory.' + Button: AddNew + '51': + type: ARROW + name: '&e&lNext Page &e&l&m->' + lore: + - '&7Click here to go to the next' + - '&7page of helmets.' + NextPage: true + '52': + type: WHITE_STAINED_GLASS_PANE + name: '&7' + '53': + type: WHITE_STAINED_GLASS_PANE + name: '&7' + '54': + type: PAPER + name: '&e&lGo Back' + lore: + - '&7Click here to go back.' \ No newline at end of file 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 15d16d4..337563f 100644 --- a/plugin-modules/Core/src/com/songoda/epicbosses/managers/BossPanelManager.java +++ b/plugin-modules/Core/src/com/songoda/epicbosses/managers/BossPanelManager.java @@ -4,9 +4,13 @@ import com.songoda.epicbosses.entity.BossEntity; import com.songoda.epicbosses.entity.elements.EntityStatsElement; import com.songoda.epicbosses.entity.elements.EquipmentElement; import com.songoda.epicbosses.entity.elements.HandsElement; +import com.songoda.epicbosses.entity.elements.MainStatsElement; +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.HelmetEditorPanel; +import com.songoda.epicbosses.utils.panel.base.ISubVariablePanelHandler; import com.songoda.epicbosses.utils.panel.base.IVariablePanelHandler; import lombok.Getter; import com.songoda.epicbosses.CustomBosses; @@ -32,7 +36,8 @@ public class BossPanelManager implements ILoadable, IReloadable { @Getter private IPanelHandler mainMenu, customItems, bosses, autoSpawns, dropTables, customSkills, shopPanel; @Getter private IPanelHandler addItemsMenu; - @Getter private IVariablePanelHandler mainBossEditMenu, dropsEditMenu, equipmentEditMenu; + @Getter private IVariablePanelHandler mainBossEditMenu, dropsEditMenu, equipmentListEditMenu; + @Getter private ISubVariablePanelHandler equipmentEditMenu, helmetEditorMenu; private final CustomBosses customBosses; @@ -54,7 +59,10 @@ public class BossPanelManager implements ILoadable, IReloadable { loadAddItemsMenu(); loadMainEditMenu(); loadDropsEditMenu(); + loadEquipmentListEditMenu(); + loadEquipmentEditMenu(); + loadHelmetEditMenu(); } @Override @@ -71,7 +79,10 @@ public class BossPanelManager implements ILoadable, IReloadable { reloadAddItemsMenu(); reloadMainEditMenu(); reloadDropsEditMenu(); + reloadEquipmentListEditMenu(); + reloadEquipmentEditMenu(); + reloadHelmetEditMenu(); } public int isItemStackUsed(String name) { @@ -99,6 +110,42 @@ public class BossPanelManager implements ILoadable, IReloadable { return timesUsed; } + //--------------------------------------------- + // + // H E L ME T E D I T P A N E L + // + //--------------------------------------------- + + private void loadHelmetEditMenu() { + PanelBuilder panelBuilder = new PanelBuilder(this.customBosses.getEditor().getConfigurationSection("HelmetEditorPanel")); + + this.helmetEditorMenu = new HelmetEditorPanel(this, panelBuilder, this.customBosses); + } + + private void reloadHelmetEditMenu() { + PanelBuilder panelBuilder = new PanelBuilder(this.customBosses.getEditor().getConfigurationSection("HelmetEditorPanel")); + + this.helmetEditorMenu.initializePanel(panelBuilder); + } + + //--------------------------------------------- + // + // E Q U I P M E N T L I S T E D I T P A N E L + // + //--------------------------------------------- + + private void loadEquipmentListEditMenu() { + PanelBuilder panelBuilder = new PanelBuilder(this.customBosses.getEditor().getConfigurationSection("BossListEditorPanel")); + + this.equipmentListEditMenu = new BossListEquipmentEditorPanel(this, panelBuilder, this.customBosses); + } + + private void reloadEquipmentListEditMenu() { + PanelBuilder panelBuilder = new PanelBuilder(this.customBosses.getEditor().getConfigurationSection("BossListEditorPanel")); + + this.equipmentListEditMenu.initializePanel(panelBuilder); + } + //--------------------------------------------- // // E Q U I P M E N T E D I T P A N E L diff --git a/plugin-modules/Core/src/com/songoda/epicbosses/panel/bosses/BossListEquipmentEditorPanel.java b/plugin-modules/Core/src/com/songoda/epicbosses/panel/bosses/BossListEquipmentEditorPanel.java new file mode 100644 index 0000000..3d2d3e1 --- /dev/null +++ b/plugin-modules/Core/src/com/songoda/epicbosses/panel/bosses/BossListEquipmentEditorPanel.java @@ -0,0 +1,124 @@ +package com.songoda.epicbosses.panel.bosses; + +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.entity.elements.EquipmentElement; +import com.songoda.epicbosses.entity.elements.HandsElement; +import com.songoda.epicbosses.entity.elements.MainStatsElement; +import com.songoda.epicbosses.managers.BossPanelManager; +import com.songoda.epicbosses.managers.files.BossesFileManager; +import com.songoda.epicbosses.utils.StringUtils; +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.VariablePanelHandler; +import com.songoda.epicbosses.utils.panel.builder.PanelBuilder; +import com.songoda.epicbosses.utils.panel.builder.PanelBuilderCounter; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryAction; +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 BossListEquipmentEditorPanel extends VariablePanelHandler { + + private ItemStackConverter itemStackConverter; + private BossesFileManager bossesFileManager; + private CustomBosses plugin; + + public BossListEquipmentEditorPanel(BossPanelManager bossPanelManager, PanelBuilder panelBuilder, CustomBosses plugin) { + super(bossPanelManager, panelBuilder); + + this.itemStackConverter = new ItemStackConverter(); + this.bossesFileManager = plugin.getBossesFileManager(); + this.plugin = plugin; + } + + @Override + public void fillPanel(Panel panel, BossEntity bossEntity) { + List entityStatsElements = new ArrayList<>(bossEntity.getEntityStats()); + int slot = 0; + + for(EntityStatsElement entityStatsElement : entityStatsElements) { + ItemStackHolder itemStackHolder = BossAPI.getStoredItemStack("DefaultBossListEditorMenuItem"); + ItemStack itemStack = this.itemStackConverter.from(itemStackHolder); + + Map replaceMap = new HashMap<>(); + + replaceMap.put("{position}", ""+entityStatsElement.getMainStats().getPosition()); + replaceMap.put("{targetType}", "Equipment"); + + ItemStackUtils.applyDisplayName(itemStack, this.plugin.getConfig().getString("Display.BossListEditor.name"), replaceMap); + ItemStackUtils.applyDisplayLore(itemStack, this.plugin.getConfig().getStringList("Display.BossListEditor.lore"), replaceMap); + + panel.setItem(slot, itemStack, event -> { + if(event.getClick() == ClickType.LEFT || event.getClick() == ClickType.SHIFT_LEFT) { + this.bossPanelManager.getEquipmentEditMenu().openFor((Player) event.getWhoClicked(), bossEntity, entityStatsElement); + } else { + if(entityStatsElement.getMainStats().getPosition() > 1) { + bossEntity.getEntityStats().remove(entityStatsElement); + this.bossesFileManager.save(); + + openFor((Player) event.getWhoClicked(), bossEntity); + } + } + }); + + slot++; + } + } + + @Override + public void openFor(Player player, BossEntity bossEntity) { + Map replaceMap = new HashMap<>(); + + replaceMap.put("{name}", BossAPI.getBossEntityName(bossEntity)); + + PanelBuilder panelBuilder = getPanelBuilder().cloneBuilder(); + + panelBuilder.addReplaceData(replaceMap); + + int nextNumber = bossEntity.getEntityStats().size()+1; + Panel panel = panelBuilder.getPanel() + .setDestroyWhenDone(true) + .setCancelClick(true) + .setCancelLowerClick(true) + .setParentPanelHandler(this.bossPanelManager.getMainBossEditMenu(), bossEntity); + + fillPanel(panel, bossEntity); + + panel.getPanelBuilderCounter().getSlotsWith("CreateEntity").forEach(slot -> panel.setOnClick(slot, event -> { + MainStatsElement mainStatsElement = new MainStatsElement(nextNumber, "", 50.0, ""); + EquipmentElement equipmentElement = new EquipmentElement("", "", "", ""); + HandsElement handsElement = new HandsElement("", ""); + + EntityStatsElement entityStatsElement = new EntityStatsElement(mainStatsElement, equipmentElement, handsElement, new ArrayList<>()); + + bossEntity.getEntityStats().add(entityStatsElement); + this.bossesFileManager.save(); + + openFor((Player) event.getWhoClicked(), bossEntity); + })); + + panel.openFor(player); + } + + @Override + public void initializePanel(PanelBuilder panelBuilder) { + PanelBuilderCounter panelBuilderCounter = panelBuilder.getPanelBuilderCounter(); + + panelBuilderCounter.addSlotCounter("CreateEntity"); + } +} 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 e288b3b..9beb219 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 @@ -1,12 +1,11 @@ package com.songoda.epicbosses.panel.bosses; -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.ItemsFileManager; import com.songoda.epicbosses.utils.panel.Panel; -import com.songoda.epicbosses.utils.panel.base.VariablePanelHandler; +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.entity.Player; @@ -19,7 +18,7 @@ import java.util.Map; * @version 1.0.0 * @since 19-Nov-18 */ -public class EquipmentEditorPanel extends VariablePanelHandler { +public class EquipmentEditorPanel extends SubVariablePanelHandler { public EquipmentEditorPanel(BossPanelManager bossPanelManager, PanelBuilder panelBuilder) { super(bossPanelManager, panelBuilder); @@ -37,12 +36,12 @@ public class EquipmentEditorPanel extends VariablePanelHandler { } @Override - public void fillPanel(Panel panel, BossEntity bossEntity) { + public void fillPanel(Panel panel, BossEntity bossEntity, EntityStatsElement entityStatsElement) { } @Override - public void openFor(Player player, BossEntity bossEntity) { + public void openFor(Player player, BossEntity bossEntity, EntityStatsElement entityStatsElement) { Map replaceMap = new HashMap<>(); replaceMap.put("{name}", BossAPI.getBossEntityName(bossEntity)); @@ -55,7 +54,7 @@ public class EquipmentEditorPanel extends VariablePanelHandler { .setDestroyWhenDone(true) .setCancelLowerClick(true) .setCancelClick(true) - .setParentPanelHandler(this.bossPanelManager.getMainBossEditMenu(), bossEntity); + .setParentPanelHandler(this.bossPanelManager.getEquipmentListEditMenu(), bossEntity); diff --git a/plugin-modules/Core/src/com/songoda/epicbosses/panel/bosses/MainBossEditPanel.java b/plugin-modules/Core/src/com/songoda/epicbosses/panel/bosses/MainBossEditPanel.java index 5438b72..b219858 100644 --- a/plugin-modules/Core/src/com/songoda/epicbosses/panel/bosses/MainBossEditPanel.java +++ b/plugin-modules/Core/src/com/songoda/epicbosses/panel/bosses/MainBossEditPanel.java @@ -77,7 +77,7 @@ public class MainBossEditPanel extends VariablePanelHandler { counter.getSlotsWith("Editing").forEach(slot -> panel.setOnClick(slot, getEditingAction(bossEntity))); counter.getSlotsWith("Drops").forEach(slot -> panel.setOnClick(slot, e -> this.bossPanelManager.getDropsEditMenu().openFor((Player) e.getWhoClicked(), bossEntity))); - counter.getSlotsWith("Equipment").forEach(slot -> panel.setOnClick(slot, e -> this.bossPanelManager.getEquipmentEditMenu().openFor((Player) e.getWhoClicked(), bossEntity))); + counter.getSlotsWith("Equipment").forEach(slot -> panel.setOnClick(slot, e -> this.bossPanelManager.getEquipmentListEditMenu().openFor((Player) e.getWhoClicked(), bossEntity))); panel.openFor(player); } 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 new file mode 100644 index 0000000..3d587fd --- /dev/null +++ b/plugin-modules/Core/src/com/songoda/epicbosses/panel/bosses/equipment/HelmetEditorPanel.java @@ -0,0 +1,95 @@ +package com.songoda.epicbosses.panel.bosses.equipment; + +import com.songoda.epicbosses.CustomBosses; +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.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 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 HelmetEditorPanel extends SubVariablePanelHandler { + + private ItemStackConverter itemStackConverter; + private ItemsFileManager itemsFileManager; + private CustomBosses plugin; + + public HelmetEditorPanel(BossPanelManager bossPanelManager, PanelBuilder panelBuilder, CustomBosses plugin) { + super(bossPanelManager, panelBuilder); + + this.plugin = plugin; + this.itemStackConverter = new ItemStackConverter(); + this.itemsFileManager = plugin.getItemStackManager(); + } + + @Override + public void fillPanel(Panel panel, BossEntity bossEntity, EntityStatsElement entityStatsElement) { + Map itemStackHolderMap = this.itemsFileManager.getItemStackHolders(); + List entryList = new ArrayList<>(itemStackHolderMap.keySet()); + int maxPage = panel.getMaxPage(entryList); + + panel.setOnPageChange(((player, currentPage, requestedPage) -> { + if(requestedPage < 0 || requestedPage > maxPage) return false; + + loadPage(panel, requestedPage, itemStackHolderMap, entryList, entityStatsElement); + return true; + })); + + loadPage(panel, 0, itemStackHolderMap, entryList, entityStatsElement); + } + + @Override + public void openFor(Player player, BossEntity bossEntity, EntityStatsElement entityStatsElement) { + + } + + @Override + public void initializePanel(PanelBuilder panelBuilder) { + + } + + private void loadPage(Panel panel, int requestedPage, Map itemStackHolderMap, List entryList, 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); + } + + 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 -> { + + }); + } + }); + } +} diff --git a/plugin-modules/Core/src/com/songoda/epicbosses/utils/itemstack/ItemStackUtils.java b/plugin-modules/Core/src/com/songoda/epicbosses/utils/itemstack/ItemStackUtils.java index bc59797..aeb89fa 100644 --- a/plugin-modules/Core/src/com/songoda/epicbosses/utils/itemstack/ItemStackUtils.java +++ b/plugin-modules/Core/src/com/songoda/epicbosses/utils/itemstack/ItemStackUtils.java @@ -220,6 +220,16 @@ public class ItemStackUtils { itemStack.setItemMeta(itemMeta); } + public static String getName(ItemStack itemStack) { + if(!itemStack.hasItemMeta() || !itemStack.getItemMeta().hasDisplayName()) { + return StringUtils.get().formatString(itemStack.getType().name()); + } + + ItemMeta itemMeta = itemStack.getItemMeta(); + + return itemMeta.getDisplayName(); + } + public static Material getType(String string) { Material material = Material.getMaterial(string); 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 1aa1d8c..6bfb984 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 @@ -401,14 +401,10 @@ public class Panel implements Listener, ICloneable { } public Panel setParentPanelHandler(IVariablePanelHandler variablePanelHandler, T variable) { - System.out.println(this.panelBuilderSettings.isBackButton()); - if(!this.panelBuilderSettings.isBackButton()) return this; int slot = this.panelBuilderSettings.getBackButtonSlot() - 1; - System.out.println(slot); - setOnClick(slot, event -> variablePanelHandler.openFor((Player) event.getWhoClicked(), variable)); return this; } diff --git a/plugin-modules/Core/src/com/songoda/epicbosses/utils/panel/base/ISubVariablePanelHandler.java b/plugin-modules/Core/src/com/songoda/epicbosses/utils/panel/base/ISubVariablePanelHandler.java new file mode 100644 index 0000000..1d63807 --- /dev/null +++ b/plugin-modules/Core/src/com/songoda/epicbosses/utils/panel/base/ISubVariablePanelHandler.java @@ -0,0 +1,17 @@ +package com.songoda.epicbosses.utils.panel.base; + +import com.songoda.epicbosses.utils.panel.Panel; +import org.bukkit.entity.Player; + +/** + * @author Charles Cullen + * @version 1.0.0 + * @since 19-Nov-18 + */ +public interface ISubVariablePanelHandler extends IBasicPanelHandler { + + void fillPanel(Panel panel, Variable variable, SubVariable subVariable); + + void openFor(Player player, Variable variable, SubVariable subVariable); + +} diff --git a/plugin-modules/Core/src/com/songoda/epicbosses/utils/panel/base/SubVariablePanelHandler.java b/plugin-modules/Core/src/com/songoda/epicbosses/utils/panel/base/SubVariablePanelHandler.java new file mode 100644 index 0000000..f6a574e --- /dev/null +++ b/plugin-modules/Core/src/com/songoda/epicbosses/utils/panel/base/SubVariablePanelHandler.java @@ -0,0 +1,16 @@ +package com.songoda.epicbosses.utils.panel.base; + +import com.songoda.epicbosses.managers.BossPanelManager; +import com.songoda.epicbosses.utils.panel.builder.PanelBuilder; + +/** + * @author Charles Cullen + * @version 1.0.0 + * @since 19-Nov-18 + */ +public abstract class SubVariablePanelHandler extends BasePanelHandler implements ISubVariablePanelHandler { + + public SubVariablePanelHandler(BossPanelManager bossPanelManager, PanelBuilder panelBuilder) { + super(bossPanelManager, panelBuilder); + } +} diff --git a/pom.xml b/pom.xml index 198a81e..cc1d0d9 100644 --- a/pom.xml +++ b/pom.xml @@ -19,7 +19,7 @@ - maven-version-number-SNAPSHOT-U71 + maven-version-number-SNAPSHOT-U72 EpicBosses com.songoda.epicbosses.CustomBosses AMinecraftDev