From d27b9dfd2e20103baa742db85417b87418fa20ac Mon Sep 17 00:00:00 2001 From: Charles Date: Mon, 7 Jan 2019 03:43:44 +0800 Subject: [PATCH] 1.0.0-SNAPSHOT-U176 + Connected and Completed the AutoSpawnsPanel --- plugin-modules/Core/resources-json/items.json | 4 + plugin-modules/Core/resources-yml/config.yml | 16 +++- .../settings/AutoSpawnSettings.java | 6 +- .../epicbosses/managers/BossPanelManager.java | 5 +- .../epicbosses/panel/AutoSpawnsPanel.java | 83 ++++++++++++++++--- .../autospawns/MainAutoSpawnEditorPanel.java | 35 ++++++++ pom.xml | 2 +- 7 files changed, 134 insertions(+), 17 deletions(-) create mode 100644 plugin-modules/Core/src/com/songoda/epicbosses/panel/autospawns/MainAutoSpawnEditorPanel.java diff --git a/plugin-modules/Core/resources-json/items.json b/plugin-modules/Core/resources-json/items.json index 10cf49a..0f0a553 100644 --- a/plugin-modules/Core/resources-json/items.json +++ b/plugin-modules/Core/resources-json/items.json @@ -1,4 +1,8 @@ { + "DefaultAutoSpawnListItem": { + "type": "GRASS_BLOCK", + "name": "&c&lDefault AutoSpawn List Item" + }, "DefaultDropTableRewardItem": { "type": "DIAMOND", "name": "&c&lDefault DropTable Reward Item" diff --git a/plugin-modules/Core/resources-yml/config.yml b/plugin-modules/Core/resources-yml/config.yml index 732a2ef..cf264df 100644 --- a/plugin-modules/Core/resources-yml/config.yml +++ b/plugin-modules/Core/resources-yml/config.yml @@ -88,7 +88,21 @@ Display: - '&7Click to add/remove the skill to' - '&7or from the boss skill list.' AutoSpawns: - menuName: '&b&lEpicBosses &3&lAutoSpawns' + Main: + menuName: '&b&lEpicBosses &3&lAutoSpawns' + name: '&bAuto Spawn: &f{name}' + lore: + - '&3Editing: &f{enabled}' + - '&7' + - '&3Spawn Type: &f{type}' + - '&3Entities: &f{entities}' + - '&7' + - '&3Max Alive: &f{maxAlive}' + - '&3Amount per Spawn: &f{amountPerSpawn}' + - '&3When Chunk Isnt Loaded: &f{chunkIsntLoaded}' + - '&3Override Spawn Messages: &f{overrideSpawnMessages}' + - '&3Shuffle Entities: &f{shuffleEntities}' + - '&3Custom Spawn Message: &f{customSpawnMessage}' Bosses: menuName: '&b&lEpicBosses &3&lBosses' name: '&b&l{name}' diff --git a/plugin-modules/Core/src/com/songoda/epicbosses/autospawns/settings/AutoSpawnSettings.java b/plugin-modules/Core/src/com/songoda/epicbosses/autospawns/settings/AutoSpawnSettings.java index 66802df..df2ee7e 100644 --- a/plugin-modules/Core/src/com/songoda/epicbosses/autospawns/settings/AutoSpawnSettings.java +++ b/plugin-modules/Core/src/com/songoda/epicbosses/autospawns/settings/AutoSpawnSettings.java @@ -12,13 +12,13 @@ import lombok.Setter; public class AutoSpawnSettings { @Expose @Getter @Setter private Integer maxAliveAtOnce, amountPerSpawn; - @Expose @Getter @Setter private Boolean spawnWhenCheckIsntLoaded, overrideDefaultSpawnMessage, shuffleEntitiesList; + @Expose @Getter @Setter private Boolean spawnWhenChunkIsntLoaded, overrideDefaultSpawnMessage, shuffleEntitiesList; @Expose @Getter @Setter private String spawnMessage; - public AutoSpawnSettings(int maxAliveAtOnce, int amountPerSpawn, boolean spawnWhenCheckIsntLoaded, boolean shuffleEntitiesList) { + public AutoSpawnSettings(int maxAliveAtOnce, int amountPerSpawn, boolean spawnWhenChunkIsntLoaded, boolean shuffleEntitiesList) { this.maxAliveAtOnce = maxAliveAtOnce; this.amountPerSpawn = amountPerSpawn; - this.spawnWhenCheckIsntLoaded = spawnWhenCheckIsntLoaded; + this.spawnWhenChunkIsntLoaded = spawnWhenChunkIsntLoaded; this.shuffleEntitiesList = shuffleEntitiesList; } 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 3155024..a0534b3 100644 --- a/plugin-modules/Core/src/com/songoda/epicbosses/managers/BossPanelManager.java +++ b/plugin-modules/Core/src/com/songoda/epicbosses/managers/BossPanelManager.java @@ -1,6 +1,7 @@ package com.songoda.epicbosses.managers; import com.songoda.epicbosses.api.BossAPI; +import com.songoda.epicbosses.autospawns.AutoSpawn; import com.songoda.epicbosses.droptable.DropTable; import com.songoda.epicbosses.droptable.elements.DropTableElement; import com.songoda.epicbosses.droptable.elements.GiveTableElement; @@ -127,6 +128,8 @@ public class BossPanelManager implements ILoadable, IReloadable { @Getter private DropTableNewRewardEditorPanel dropDropNewRewardEditPanel; @Getter private DropTableRewardsListEditorPanel dropDropRewardListPanel; + @Getter private IVariablePanelHandler mainAutoSpawnEditPanel; + private final CustomBosses customBosses; public BossPanelManager(CustomBosses customBosses) { @@ -794,7 +797,7 @@ public class BossPanelManager implements ILoadable, IReloadable { //--------------------------------------------- private void loadAutoSpawnsMenu() { - this.autoSpawns = new AutoSpawnsPanel(this, getListMenu("AutoSpawns")); + this.autoSpawns = new AutoSpawnsPanel(this, getListMenu("AutoSpawns.Main"), this.customBosses); } private void reloadAutoSpawnsMenu() { diff --git a/plugin-modules/Core/src/com/songoda/epicbosses/panel/AutoSpawnsPanel.java b/plugin-modules/Core/src/com/songoda/epicbosses/panel/AutoSpawnsPanel.java index 33a16d7..d649258 100644 --- a/plugin-modules/Core/src/com/songoda/epicbosses/panel/AutoSpawnsPanel.java +++ b/plugin-modules/Core/src/com/songoda/epicbosses/panel/AutoSpawnsPanel.java @@ -1,37 +1,98 @@ package com.songoda.epicbosses.panel; +import com.songoda.epicbosses.CustomBosses; +import com.songoda.epicbosses.autospawns.AutoSpawn; +import com.songoda.epicbosses.autospawns.settings.AutoSpawnSettings; import com.songoda.epicbosses.managers.BossPanelManager; +import com.songoda.epicbosses.managers.files.AutoSpawnFileManager; +import com.songoda.epicbosses.managers.files.ItemsFileManager; +import com.songoda.epicbosses.panel.handlers.MainListPanelHandler; +import com.songoda.epicbosses.utils.ObjectUtils; +import com.songoda.epicbosses.utils.StringUtils; +import com.songoda.epicbosses.utils.itemstack.ItemStackUtils; import com.songoda.epicbosses.utils.panel.Panel; -import com.songoda.epicbosses.utils.panel.base.PanelHandler; 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.*; /** * @author Charles Cullen * @version 1.0.0 * @since 10-Oct-18 - * - * TODO */ -public class AutoSpawnsPanel extends PanelHandler { +public class AutoSpawnsPanel extends MainListPanelHandler { - public AutoSpawnsPanel(BossPanelManager bossPanelManager, PanelBuilder panelBuilder) { + private AutoSpawnFileManager autoSpawnFileManager; + private ItemsFileManager itemsFileManager; + private CustomBosses plugin; + + public AutoSpawnsPanel(BossPanelManager bossPanelManager, PanelBuilder panelBuilder, CustomBosses plugin) { super(bossPanelManager, panelBuilder); - } - - @Override - public void initializePanel(PanelBuilder panelBuilder) { + this.autoSpawnFileManager = plugin.getAutoSpawnFileManager(); + this.itemsFileManager = plugin.getItemStackManager(); + this.plugin = plugin; } @Override public void fillPanel(Panel panel) { + Map autoSpawnMap = this.autoSpawnFileManager.getAutoSpawnMap(); + List entryList = new ArrayList<>(); + int maxPage = panel.getMaxPage(entryList); + panel.setOnPageChange(((player, currentPage, requestedPage) -> { + if(requestedPage < 0 || requestedPage > maxPage) return false; + + loadPage(panel, requestedPage, autoSpawnMap, entryList); + return true; + })); + + loadPage(panel, 0, autoSpawnMap, entryList); } - @Override - public void openFor(Player player) { + private void loadPage(Panel panel, int requestedPage, Map autoSpawnMap, List entryList) { + panel.loadPage(requestedPage, (slot, realisticSlot) -> { + if(slot >= entryList.size()) { + panel.setItem(realisticSlot, new ItemStack(Material.AIR), e -> {}); + } else { + String name = entryList.get(slot); + AutoSpawn autoSpawn = autoSpawnMap.get(name); + ItemStack itemStack = this.itemsFileManager.getItemStackConverter().from(this.itemsFileManager.getItemStackHolder("DefaultAutoSpawnListItem")); + if(itemStack == null) { + itemStack = new ItemStack(Material.BARRIER); + } + + Map replaceMap = new HashMap<>(); + List entities = ObjectUtils.getValue(autoSpawn.getEntities(), new ArrayList<>()); + AutoSpawnSettings settings = autoSpawn.getAutoSpawnSettings(); + String entitiesSize = entities.size()+""; + String maxAlive = ""+ObjectUtils.getValue(settings.getMaxAliveAtOnce(), 1); + String amountToSpawn = ""+ObjectUtils.getValue(settings.getAmountPerSpawn(), 1); + String chunkIsntLoaded = ""+ObjectUtils.getValue(settings.getSpawnWhenChunkIsntLoaded(), false); + String overrideMessage = ""+ObjectUtils.getValue(settings.getOverrideDefaultSpawnMessage(), true); + String shuffleEntities = ""+ObjectUtils.getValue(settings.getShuffleEntitiesList(), false); + String spawnMessage = ObjectUtils.getValue(settings.getSpawnMessage(), ""); + + replaceMap.put("{name}", name); + replaceMap.put("{type}", StringUtils.get().formatString(autoSpawn.getType())); + replaceMap.put("{enabled}", (!autoSpawn.isLocked())+""); + replaceMap.put("{entities}", entitiesSize); + replaceMap.put("{maxAlive}", maxAlive); + replaceMap.put("{amountPerSpawn}", amountToSpawn); + replaceMap.put("{chunkIsntLoaded}", chunkIsntLoaded); + replaceMap.put("{overrideSpawnMessages}", overrideMessage); + replaceMap.put("{shuffleEntities}", shuffleEntities); + replaceMap.put("{customSpawnMessage}", spawnMessage); + + ItemStackUtils.applyDisplayName(itemStack, this.plugin.getConfig().getString("Display.AutoSpawns.Main.name"), replaceMap); + ItemStackUtils.applyDisplayLore(itemStack, this.plugin.getConfig().getStringList("Display.AutoSpawns.Main.lore"), replaceMap); + + panel.setItem(realisticSlot, itemStack.clone(), e -> this.bossPanelManager.getMainAutoSpawnEditPanel().openFor((Player) e.getWhoClicked(), autoSpawn)); + } + }); } } diff --git a/plugin-modules/Core/src/com/songoda/epicbosses/panel/autospawns/MainAutoSpawnEditorPanel.java b/plugin-modules/Core/src/com/songoda/epicbosses/panel/autospawns/MainAutoSpawnEditorPanel.java new file mode 100644 index 0000000..eeb89f3 --- /dev/null +++ b/plugin-modules/Core/src/com/songoda/epicbosses/panel/autospawns/MainAutoSpawnEditorPanel.java @@ -0,0 +1,35 @@ +package com.songoda.epicbosses.panel.autospawns; + +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 MainAutoSpawnEditorPanel extends VariablePanelHandler { + + public MainAutoSpawnEditorPanel(BossPanelManager bossPanelManager, PanelBuilder panelBuilder) { + 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 ccb8c97..7ee6a40 100644 --- a/pom.xml +++ b/pom.xml @@ -19,7 +19,7 @@ - 1.0.0-U175 + 1.0.0-U176 EpicBosses com.songoda.epicbosses.CustomBosses AMinecraftDev