diff --git a/plugin-modules/Core/resources-yml/config.yml b/plugin-modules/Core/resources-yml/config.yml index cf264df..89e466b 100644 --- a/plugin-modules/Core/resources-yml/config.yml +++ b/plugin-modules/Core/resources-yml/config.yml @@ -103,6 +103,15 @@ Display: - '&3Override Spawn Messages: &f{overrideSpawnMessages}' - '&3Shuffle Entities: &f{shuffleEntities}' - '&3Custom Spawn Message: &f{customSpawnMessage}' + Entities: + selectedName: '&bBoss: &f{name} &a*** Selected ***' + name: '&bBoss: &f{name}' + lore: + - '&3Editing: &f{editing}' + - '&3Targeting: &f{targeting}' + - '&3Drop Table: &f{dropTable}' + - '&7' + - '&7Click to select or deselect this boss.' Bosses: menuName: '&b&lEpicBosses &3&lBosses' name: '&b&l{name}' diff --git a/plugin-modules/Core/resources-yml/editor.yml b/plugin-modules/Core/resources-yml/editor.yml index 5f0ca12..810ce26 100644 --- a/plugin-modules/Core/resources-yml/editor.yml +++ b/plugin-modules/Core/resources-yml/editor.yml @@ -2590,4 +2590,50 @@ MainAutoSpawnEditMenu: - '&7Click here to edit any custom settings that' - '&7are also included in this auto spawn type. If' - '&7there is none then the GUI up next will be empty.' - Button: CustomSettings \ No newline at end of file + Button: CustomSettings +AutoSpawnEntitiesEditMenu: + name: '&b&l{name} AutoSpawn' + slots: 54 + Settings: + backButton: true + fillTo: 45 + Buttons: + backButton: 50 + Items: + '46': + type: GLASS_PANE + name: '&7' + '47': + type: GLASS_PANE + name: '&7' + '48': + type: GLASS_PANE + name: '&7' + '49': + type: ARROW + name: '&e&l&m<-&e&l Previous Page' + lore: + - '&7Click here to go to the previous' + - '&7page.' + PreviousPage: true + '50': + type: REDSTONE + name: '&cClick here to go back' + lore: + - '&7Click this button to go back.' + '51': + type: ARROW + name: '&e&lNext Page &e&l&m->' + lore: + - '&7Click here to go to the next' + - '&7page.' + NextPage: true + '52': + type: GLASS_PANE + name: '&7' + '53': + type: GLASS_PANE + name: '&7' + '54': + type: GLASS_PANE + name: '&7' \ 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 2808601..564df97 100644 --- a/plugin-modules/Core/src/com/songoda/epicbosses/managers/BossPanelManager.java +++ b/plugin-modules/Core/src/com/songoda/epicbosses/managers/BossPanelManager.java @@ -10,6 +10,7 @@ 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.panel.autospawns.AutoSpawnEntitiesEditorPanel; import com.songoda.epicbosses.panel.autospawns.MainAutoSpawnEditorPanel; import com.songoda.epicbosses.panel.bosses.*; import com.songoda.epicbosses.panel.bosses.commands.OnDeathCommandEditor; @@ -245,15 +246,19 @@ public class BossPanelManager implements ILoadable, IReloadable { private void loadAutoSpawnEditMenus() { FileConfiguration editor = this.customBosses.getEditor(); PanelBuilder panelBuilder = new PanelBuilder(editor.getConfigurationSection("MainAutoSpawnEditMenu")); + PanelBuilder panelBuilder1 = new PanelBuilder(editor.getConfigurationSection("AutoSpawnEntitiesEditMenu")); this.mainAutoSpawnEditPanel = new MainAutoSpawnEditorPanel(this, panelBuilder, this.customBosses); + this.autoSpawnEntitiesEditPanel = new AutoSpawnEntitiesEditorPanel(this, panelBuilder1, this.customBosses); } private void reloadAutoSpawnEditMenus() { FileConfiguration editor = this.customBosses.getEditor(); PanelBuilder panelBuilder = new PanelBuilder(editor.getConfigurationSection("MainAutoSpawnEditMenu")); + PanelBuilder panelBuilder1 = new PanelBuilder(editor.getConfigurationSection("AutoSpawnEntitiesEditMenu")); this.mainAutoSpawnEditPanel.initializePanel(panelBuilder); + this.autoSpawnEntitiesEditPanel.initializePanel(panelBuilder1); } //--------------------------------------------- diff --git a/plugin-modules/Core/src/com/songoda/epicbosses/panel/autospawns/AutoSpawnEntitiesEditorPanel.java b/plugin-modules/Core/src/com/songoda/epicbosses/panel/autospawns/AutoSpawnEntitiesEditorPanel.java index 178261f..c40d73a 100644 --- a/plugin-modules/Core/src/com/songoda/epicbosses/panel/autospawns/AutoSpawnEntitiesEditorPanel.java +++ b/plugin-modules/Core/src/com/songoda/epicbosses/panel/autospawns/AutoSpawnEntitiesEditorPanel.java @@ -1,9 +1,122 @@ package com.songoda.epicbosses.panel.autospawns; +import com.google.gson.JsonObject; +import com.songoda.epicbosses.CustomBosses; +import com.songoda.epicbosses.api.BossAPI; +import com.songoda.epicbosses.autospawns.AutoSpawn; +import com.songoda.epicbosses.entity.BossEntity; +import com.songoda.epicbosses.entity.MinionEntity; +import com.songoda.epicbosses.managers.BossPanelManager; +import com.songoda.epicbosses.managers.files.AutoSpawnFileManager; +import com.songoda.epicbosses.managers.files.BossesFileManager; +import com.songoda.epicbosses.managers.files.ItemsFileManager; +import com.songoda.epicbosses.skills.Skill; +import com.songoda.epicbosses.skills.types.CustomSkillElement; +import com.songoda.epicbosses.utils.ObjectUtils; +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.handlers.VariablePanelHandler; +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 07-Jan-19 */ -public class AutoSpawnEntitiesEditorPanel { +public class AutoSpawnEntitiesEditorPanel extends VariablePanelHandler { + + private AutoSpawnFileManager autoSpawnFileManager; + private BossesFileManager bossesFileManager; + private ItemsFileManager itemsFileManager; + private CustomBosses plugin; + + public AutoSpawnEntitiesEditorPanel(BossPanelManager bossPanelManager, PanelBuilder panelBuilder, CustomBosses plugin) { + super(bossPanelManager, panelBuilder); + + this.plugin = plugin; + this.itemsFileManager = plugin.getItemStackManager(); + this.bossesFileManager = plugin.getBossesFileManager(); + this.autoSpawnFileManager = plugin.getAutoSpawnFileManager(); + } + + @Override + public void fillPanel(Panel panel, AutoSpawn autoSpawn) { + Map currentEntities = this.bossesFileManager.getBossEntitiesMap(); + List entryList = new ArrayList<>(currentEntities.keySet()); + int maxPage = panel.getMaxPage(entryList); + + panel.setOnPageChange(((player, currentPage, requestedPage) -> { + if(requestedPage < 0 || requestedPage > maxPage) return false; + + loadPage(panel, requestedPage, currentEntities, entryList, autoSpawn); + return true; + })); + + loadPage(panel, 0, currentEntities, entryList, autoSpawn); + } + + @Override + public void openFor(Player player, AutoSpawn autoSpawn) { + Panel panel = getPanelBuilder().getPanel() + .setParentPanelHandler(this.bossPanelManager.getMainAutoSpawnEditPanel(), autoSpawn); + + fillPanel(panel, autoSpawn); + panel.openFor(player); + } + + @Override + public void initializePanel(PanelBuilder panelBuilder) { + + } + + private void loadPage(Panel panel, int page, Map currentEntities, List entryList, AutoSpawn autoSpawn) { + List current = ObjectUtils.getValue(autoSpawn.getEntities(), new ArrayList<>()); + + panel.loadPage(page, (slot, realisticSlot) -> { + if(slot >= entryList.size()) { + panel.setItem(realisticSlot, new ItemStack(Material.AIR), e->{}); + } else { + String name = entryList.get(slot); + BossEntity bossEntity = currentEntities.get(name); + ItemStackHolder itemStackHolder = this.itemsFileManager.getItemStackHolder("DefaultMinionMenuSpawnItem"); + ItemStack itemStack = this.itemsFileManager.getItemStackConverter().from(itemStackHolder); + Map replaceMap = new HashMap<>(); + + replaceMap.put("{name}", name); + replaceMap.put("{editing}", ""+bossEntity.isEditing()); + replaceMap.put("{targeting}", bossEntity.getTargeting()); + replaceMap.put("{dropTable}", bossEntity.getDrops().getDropTable()); + + if(current.contains(name)) { + ItemStackUtils.applyDisplayName(itemStack, this.plugin.getConfig().getString("Display.AutoSpawns.Entities.selectedName"), replaceMap); + } else { + ItemStackUtils.applyDisplayName(itemStack, this.plugin.getConfig().getString("Display.AutoSpawns.Entities.name"), replaceMap); + } + + ItemStackUtils.applyDisplayLore(itemStack, this.plugin.getConfig().getStringList("Display.AutoSpawns.Entities.lore"), replaceMap); + + panel.setItem(realisticSlot, itemStack, event -> { + if(current.contains(name)) { + current.remove(name); + } else { + current.add(name); + } + + autoSpawn.setEntities(current); + this.autoSpawnFileManager.save(); + + loadPage(panel, page, currentEntities, entryList, autoSpawn); + }); + } + }); + } } diff --git a/plugin-modules/Core/src/com/songoda/epicbosses/panel/autospawns/AutoSpawnTypeEditorPanel.java b/plugin-modules/Core/src/com/songoda/epicbosses/panel/autospawns/AutoSpawnTypeEditorPanel.java index 073d408..afeed06 100644 --- a/plugin-modules/Core/src/com/songoda/epicbosses/panel/autospawns/AutoSpawnTypeEditorPanel.java +++ b/plugin-modules/Core/src/com/songoda/epicbosses/panel/autospawns/AutoSpawnTypeEditorPanel.java @@ -1,9 +1,36 @@ package com.songoda.epicbosses.panel.autospawns; +import com.songoda.epicbosses.CustomBosses; +import com.songoda.epicbosses.autospawns.AutoSpawn; +import com.songoda.epicbosses.managers.BossPanelManager; +import com.songoda.epicbosses.utils.panel.Panel; +import com.songoda.epicbosses.utils.panel.base.handlers.VariablePanelHandler; +import com.songoda.epicbosses.utils.panel.builder.PanelBuilder; +import org.bukkit.entity.Player; + /** * @author Charles Cullen * @version 1.0.0 * @since 07-Jan-19 */ -public class AutoSpawnTypeEditorPanel { +public class AutoSpawnTypeEditorPanel extends VariablePanelHandler { + + public AutoSpawnTypeEditorPanel(BossPanelManager bossPanelManager, PanelBuilder panelBuilder, CustomBosses plugin) { + super(bossPanelManager, panelBuilder); + } + + @Override + public void fillPanel(Panel panel, AutoSpawn autoSpawn) { + + } + + @Override + public void openFor(Player player, AutoSpawn autoSpawn) { + + } + + @Override + public void initializePanel(PanelBuilder panelBuilder) { + + } } diff --git a/pom.xml b/pom.xml index 6bd1715..70bcd30 100644 --- a/pom.xml +++ b/pom.xml @@ -19,7 +19,7 @@ - 1.0.0-U178 + 1.0.0-U179 EpicBosses com.songoda.epicbosses.CustomBosses AMinecraftDev