diff --git a/plugin-modules/Core/resources-yml/editor.yml b/plugin-modules/Core/resources-yml/editor.yml index 346dc65..244f383 100644 --- a/plugin-modules/Core/resources-yml/editor.yml +++ b/plugin-modules/Core/resources-yml/editor.yml @@ -2656,11 +2656,11 @@ GiveRewardMainEditMenu: - '&75% then you need to do 5% damage to the boss to' - '&7get the rewards in this drop section.' - '&7' - - '&bLeft Click &8» &f+1' - - '&bShift Left-Click &8» &f+10' + - '&bLeft Click &8» &f+1%' + - '&bShift Left-Click &8» &f+10%' - '&7' - - '&bRight Click &8» &f-1' - - '&bShift Right-Click &8» &f-10' + - '&bRight Click &8» &f-1%' + - '&bShift Right-Click &8» &f-10%' Button: RequiredPercentage '15': type: CHEST diff --git a/plugin-modules/Core/src/com/songoda/epicbosses/panel/droptables/types/give/GiveRewardMainEditPanel.java b/plugin-modules/Core/src/com/songoda/epicbosses/panel/droptables/types/give/GiveRewardMainEditPanel.java index 4a57042..0954ced 100644 --- a/plugin-modules/Core/src/com/songoda/epicbosses/panel/droptables/types/give/GiveRewardMainEditPanel.java +++ b/plugin-modules/Core/src/com/songoda/epicbosses/panel/droptables/types/give/GiveRewardMainEditPanel.java @@ -3,16 +3,23 @@ package com.songoda.epicbosses.panel.droptables.types.give; import com.songoda.epicbosses.CustomBosses; import com.songoda.epicbosses.api.BossAPI; import com.songoda.epicbosses.droptable.DropTable; +import com.songoda.epicbosses.droptable.elements.GiveTableElement; import com.songoda.epicbosses.droptable.elements.GiveTableSubElement; +import com.songoda.epicbosses.droptable.elements.SprayTableElement; import com.songoda.epicbosses.managers.BossPanelManager; import com.songoda.epicbosses.panel.droptables.types.give.handlers.GiveRewardEditHandler; +import com.songoda.epicbosses.utils.Message; import com.songoda.epicbosses.utils.NumberUtils; import com.songoda.epicbosses.utils.ObjectUtils; import com.songoda.epicbosses.utils.panel.Panel; +import com.songoda.epicbosses.utils.panel.base.ClickAction; import com.songoda.epicbosses.utils.panel.base.handlers.SubVariablePanelHandler; 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.InventoryClickEvent; +import org.bukkit.event.player.PlayerEvent; import java.util.HashMap; import java.util.Map; @@ -24,8 +31,12 @@ import java.util.Map; */ public class GiveRewardMainEditPanel extends SubVariablePanelHandler { + private CustomBosses plugin; + public GiveRewardMainEditPanel(BossPanelManager bossPanelManager, PanelBuilder panelBuilder, CustomBosses plugin) { super(bossPanelManager, panelBuilder); + + this.plugin = plugin; } @Override @@ -41,7 +52,6 @@ public class GiveRewardMainEditPanel extends SubVariablePanelHandler panel.setOnClick(slot, getRandomDropsAction(dropTable, giveRewardEditHandler))); + counter.getSlotsWith("MaxDrops").forEach(slot -> panel.setOnClick(slot, getMaxDropsAction(dropTable, giveRewardEditHandler))); + counter.getSlotsWith("ItemDrops").forEach(slot -> {}); + counter.getSlotsWith("RequiredPercentage").forEach(slot -> panel.setOnClick(slot, getRequiredPercentageAction(dropTable, giveRewardEditHandler))); + counter.getSlotsWith("CommandDrops").forEach(slot -> {}); + counter.getSlotsWith("MaxCommands").forEach(slot -> panel.setOnClick(slot, getMaxCommandsAction(dropTable, giveRewardEditHandler))); + counter.getSlotsWith("RandomDrops").forEach(slot -> panel.setOnClick(slot, getRandomCommandsAction(dropTable, giveRewardEditHandler))); panel.openFor(player); } @@ -71,4 +87,147 @@ public class GiveRewardMainEditPanel extends SubVariablePanelHandler { + GiveTableSubElement giveTableSubElement = giveRewardEditHandler.getGiveTableSubElement(); + ClickType clickType = event.getClick(); + double amountToModifyBy; + + if(clickType == ClickType.SHIFT_LEFT) { + amountToModifyBy = 10; + } else if(clickType == ClickType.RIGHT) { + amountToModifyBy = -1; + } else if(clickType == ClickType.SHIFT_RIGHT) { + amountToModifyBy = -10; + } else { + amountToModifyBy = 1; + } + + String modifyValue = amountToModifyBy > 0? "increased" : "decreased"; + double currentAmount = ObjectUtils.getValue(giveTableSubElement.getRequiredPercentage(), 0.0); + + double newAmount = currentAmount + amountToModifyBy; + + if(newAmount < 0) { + newAmount = 0; + } + + if(newAmount > 100) { + newAmount = 100; + } + + giveTableSubElement.setRequiredPercentage(newAmount); + saveDropTable(dropTable, giveRewardEditHandler, event); + + Message.Boss_DropTable_GiveMaxCommands.msg(event.getWhoClicked(), modifyValue, BossAPI.getDropTableName(dropTable), NumberUtils.get().formatDouble(newAmount)); + }; + } + + private ClickAction getMaxCommandsAction(DropTable dropTable, GiveRewardEditHandler giveRewardEditHandler) { + return event -> { + GiveTableSubElement giveTableSubElement = giveRewardEditHandler.getGiveTableSubElement(); + ClickType clickType = event.getClick(); + int amountToModifyBy; + + if(clickType == ClickType.SHIFT_LEFT) { + amountToModifyBy = 10; + } else if(clickType == ClickType.RIGHT) { + amountToModifyBy = -1; + } else if(clickType == ClickType.SHIFT_RIGHT) { + amountToModifyBy = -10; + } else { + amountToModifyBy = 1; + } + + String modifyValue = amountToModifyBy > 0? "increased" : "decreased"; + int currentAmount = ObjectUtils.getValue(giveTableSubElement.getMaxCommands(), 3); + + int newAmount = currentAmount + amountToModifyBy; + + if(newAmount < -1) { + newAmount = -1; + } + + giveTableSubElement.setMaxCommands(newAmount); + saveDropTable(dropTable, giveRewardEditHandler, event); + + Message.Boss_DropTable_GiveMaxCommands.msg(event.getWhoClicked(), modifyValue, BossAPI.getDropTableName(dropTable), NumberUtils.get().formatDouble(newAmount)); + }; + } + + private ClickAction getMaxDropsAction(DropTable dropTable, GiveRewardEditHandler giveRewardEditHandler) { + return event -> { + GiveTableSubElement giveTableSubElement = giveRewardEditHandler.getGiveTableSubElement(); + ClickType clickType = event.getClick(); + int amountToModifyBy; + + if(clickType == ClickType.SHIFT_LEFT) { + amountToModifyBy = 10; + } else if(clickType == ClickType.RIGHT) { + amountToModifyBy = -1; + } else if(clickType == ClickType.SHIFT_RIGHT) { + amountToModifyBy = -10; + } else { + amountToModifyBy = 1; + } + + String modifyValue = amountToModifyBy > 0? "increased" : "decreased"; + int currentAmount = ObjectUtils.getValue(giveTableSubElement.getMaxDrops(), 3); + + int newAmount = currentAmount + amountToModifyBy; + + if(newAmount < -1) { + newAmount = -1; + } + + giveTableSubElement.setMaxDrops(newAmount); + saveDropTable(dropTable, giveRewardEditHandler, event); + + Message.Boss_DropTable_GiveMaxDrops.msg(event.getWhoClicked(), modifyValue, BossAPI.getDropTableName(dropTable), NumberUtils.get().formatDouble(newAmount)); + }; + } + + private ClickAction getRandomDropsAction(DropTable dropTable, GiveRewardEditHandler giveRewardEditHandler) { + return event -> { + GiveTableSubElement giveTableSubElement = giveRewardEditHandler.getGiveTableSubElement(); + boolean randomValue = ObjectUtils.getValue(giveTableSubElement.getRandomDrops(), false); + boolean newValue = !randomValue; + + giveTableSubElement.setRandomDrops(newValue); + saveDropTable(dropTable, giveRewardEditHandler, event); + + Message.Boss_DropTable_GiveRandomDrops.msg(event.getWhoClicked(), BossAPI.getDropTableName(dropTable), newValue); + }; + } + + private ClickAction getRandomCommandsAction(DropTable dropTable, GiveRewardEditHandler giveRewardEditHandler) { + return event -> { + GiveTableSubElement giveTableSubElement = giveRewardEditHandler.getGiveTableSubElement(); + boolean randomValue = ObjectUtils.getValue(giveTableSubElement.getRandomCommands(), false); + boolean newValue = !randomValue; + + giveTableSubElement.setRandomCommands(newValue); + saveDropTable(dropTable, giveRewardEditHandler, event); + + Message.Boss_DropTable_GiveRandomDrops.msg(event.getWhoClicked(), BossAPI.getDropTableName(dropTable), newValue); + }; + } + + private void saveDropTable(DropTable dropTable, GiveRewardEditHandler giveRewardEditHandler, InventoryClickEvent event) { + GiveTableElement giveTableElement = giveRewardEditHandler.getGiveTableElement(); + GiveTableSubElement giveTableSubElement = giveRewardEditHandler.getGiveTableSubElement(); + Map> rewardMap = giveTableElement.getGiveRewards(); + String itemSlot = giveRewardEditHandler.getDropSection(); + String damagePosition = giveRewardEditHandler.getDamagePosition(); + Map itemMap = rewardMap.get(damagePosition); + + itemMap.put(itemSlot, giveTableSubElement); + rewardMap.put(damagePosition, itemMap); + giveTableElement.setGiveRewards(rewardMap); + dropTable.setRewards(BossAPI.convertObjectToJsonObject(giveTableElement)); + this.plugin.getDropTableFileManager().save(); + + openFor((Player) event.getWhoClicked(), dropTable, giveRewardEditHandler); + } } diff --git a/plugin-modules/Core/src/com/songoda/epicbosses/panel/droptables/types/give/drops/GiveRewardDropsListEditPanel.java b/plugin-modules/Core/src/com/songoda/epicbosses/panel/droptables/types/give/drops/GiveRewardDropsListEditPanel.java new file mode 100644 index 0000000..5d19f8b --- /dev/null +++ b/plugin-modules/Core/src/com/songoda/epicbosses/panel/droptables/types/give/drops/GiveRewardDropsListEditPanel.java @@ -0,0 +1,106 @@ +package com.songoda.epicbosses.panel.droptables.types.give.drops; + +import com.songoda.epicbosses.CustomBosses; +import com.songoda.epicbosses.api.BossAPI; +import com.songoda.epicbosses.droptable.DropTable; +import com.songoda.epicbosses.droptable.elements.GiveTableSubElement; +import com.songoda.epicbosses.droptable.elements.SprayTableElement; +import com.songoda.epicbosses.managers.BossPanelManager; +import com.songoda.epicbosses.managers.files.ItemsFileManager; +import com.songoda.epicbosses.panel.droptables.types.give.handlers.GiveRewardEditHandler; +import com.songoda.epicbosses.utils.NumberUtils; +import com.songoda.epicbosses.utils.itemstack.ItemStackUtils; +import com.songoda.epicbosses.utils.panel.Panel; +import com.songoda.epicbosses.utils.panel.base.handlers.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 02-Jan-19 + */ +public class GiveRewardDropsListEditPanel extends SubVariablePanelHandler { + + private ItemsFileManager itemsFileManager; + private CustomBosses plugin; + + public GiveRewardDropsListEditPanel(BossPanelManager bossPanelManager, PanelBuilder panelBuilder, CustomBosses plugin) { + super(bossPanelManager, panelBuilder); + + this.itemsFileManager = plugin.getItemStackManager(); + this.plugin = plugin; + } + + @Override + public void fillPanel(Panel panel, DropTable dropTable, GiveRewardEditHandler giveRewardEditHandler) { + GiveTableSubElement giveTableSubElement = giveRewardEditHandler.getGiveTableSubElement(); + Map rewardMap = giveTableSubElement.getItems(); + List keyList = new ArrayList<>(); + int maxPage = panel.getMaxPage(keyList); + + panel.setOnPageChange((player, currentPage, requestedPage) -> { + if(requestedPage < 0 || requestedPage > maxPage) return false; + + loadPage(panel, requestedPage, dropTable, giveRewardEditHandler, rewardMap, keyList); + return true; + }); + + loadPage(panel, 0, dropTable, giveRewardEditHandler, rewardMap, keyList); + } + + @Override + public void openFor(Player player, DropTable dropTable, GiveRewardEditHandler giveRewardEditHandler) { + PanelBuilder panelBuilder = getPanelBuilder().cloneBuilder(); + Map replaceMap = new HashMap<>(); + + replaceMap.put("{name}", BossAPI.getDropTableName(dropTable)); + panelBuilder.addReplaceData(replaceMap); + + PanelBuilderCounter panelBuilderCounter = panelBuilder.getPanelBuilderCounter(); + Panel panel = panelBuilder.getPanel() + .setParentPanelHandler(this.bossPanelManager.getGiveRewardMainEditMenu(), dropTable, giveRewardEditHandler); + +// panelBuilderCounter.getSlotsWith("NewReward").forEach(slot -> panel.setOnClick(slot, event -> this.bossPanelManager.getSprayNewRewardEditMenu().openFor((Player) event.getWhoClicked(), dropTable, giveRewardEditHandler))); + fillPanel(panel, dropTable, giveRewardEditHandler); + + panel.openFor(player); + } + + @Override + public void initializePanel(PanelBuilder panelBuilder) { + + } + + private void loadPage(Panel panel, int page, DropTable dropTable, GiveRewardEditHandler giveRewardEditHandler, Map rewardMap, List keyList) { + panel.loadPage(page, (slot, realisticSlot) -> { + if(slot >= keyList.size()) { + panel.setItem(realisticSlot, new ItemStack(Material.AIR), e -> {}); + } else { + String name = keyList.get(slot); + Double chance = rewardMap.get(name); + Map replaceMap = new HashMap<>(); + + if(chance == null) chance = 100.0; + + replaceMap.put("{itemName}", name); + replaceMap.put("{chance}", NumberUtils.get().formatDouble(chance)); + + ItemStack itemStack = this.itemsFileManager.getItemStackConverter().from(this.itemsFileManager.getItemStackHolder(name)); + + ItemStackUtils.applyDisplayName(itemStack, this.plugin.getConfig().getString("Display.DropTable.RewardList.name"), replaceMap); + ItemStackUtils.applyDisplayLore(itemStack, this.plugin.getConfig().getStringList("Display.DropTable.RewardList.lore"), replaceMap); + +// panel.setItem(realisticSlot, itemStack, event -> this.bossPanelManager.getSprayRewardMainEditMenu().openFor((Player) event.getWhoClicked(), dropTable, giveRewardEditHandler, name)); + } + }); + } +} diff --git a/plugin-modules/Core/src/com/songoda/epicbosses/panel/droptables/types/give/drops/GiveRewardDropsMainEditPanel.java b/plugin-modules/Core/src/com/songoda/epicbosses/panel/droptables/types/give/drops/GiveRewardDropsMainEditPanel.java new file mode 100644 index 0000000..edba557 --- /dev/null +++ b/plugin-modules/Core/src/com/songoda/epicbosses/panel/droptables/types/give/drops/GiveRewardDropsMainEditPanel.java @@ -0,0 +1,9 @@ +package com.songoda.epicbosses.panel.droptables.types.give.drops; + +/** + * @author Charles Cullen + * @version 1.0.0 + * @since 02-Jan-19 + */ +public class GiveRewardDropsMainEditPanel { +} diff --git a/plugin-modules/Core/src/com/songoda/epicbosses/panel/droptables/types/give/drops/GiveRewardDropsNewDropEditPanel.java b/plugin-modules/Core/src/com/songoda/epicbosses/panel/droptables/types/give/drops/GiveRewardDropsNewDropEditPanel.java new file mode 100644 index 0000000..421a195 --- /dev/null +++ b/plugin-modules/Core/src/com/songoda/epicbosses/panel/droptables/types/give/drops/GiveRewardDropsNewDropEditPanel.java @@ -0,0 +1,9 @@ +package com.songoda.epicbosses.panel.droptables.types.give.drops; + +/** + * @author Charles Cullen + * @version 1.0.0 + * @since 02-Jan-19 + */ +public class GiveRewardDropsNewDropEditPanel { +} diff --git a/plugin-modules/Core/src/com/songoda/epicbosses/utils/Message.java b/plugin-modules/Core/src/com/songoda/epicbosses/utils/Message.java index 8259f53..85d7490 100644 --- a/plugin-modules/Core/src/com/songoda/epicbosses/utils/Message.java +++ b/plugin-modules/Core/src/com/songoda/epicbosses/utils/Message.java @@ -44,6 +44,11 @@ public enum Message { Boss_DropTable_DropAddedNewReward("&b&lEpicBosses &8» &7You have added a new reward to the drop table &f{0}&7. Now opening the editing panel for the new reward."), Boss_DropTable_DropRewardChance("&b&lEpicBosses &8» &7You have {0} the chance for the reward section for &f{1}&7 to &f{2}%&7."), Boss_DropTable_DropRewardRemoved("&b&lEpicBosses &8» &7You have removed the reward section from the drop drop table."), + Boss_DropTable_GiveRandomDrops("&b&lEpicBosses &8» &7You have set the random drops for the &f{0}&7 drop table to &f{1}&7."), + Boss_DropTable_GiveRandomCommands("&b&lEpicBosses &8» &7You have set the random commands for the &f{0}&7 drop table to &f{1}&7."), + Boss_DropTable_GiveMaxDrops("&b&lEpicBosses &8» &7You have {0} the max drops for the &f{1}&7 damage section to &f{1}&7."), + Boss_DropTable_GiveMaxCommands("&b&lEpicBosses &8» &7You have {0} the max commands for the &f{1}&7 damage section to &f{1}&7."), + Boss_DropTable_GiveRequiredPercentage("&b&lEpicBosses &8» &7You have {0} the required percentage for the &f{1}&7 damage section to &f{1}&7."), Boss_Edit_NoPermission("&c&l(!) &cYou do not have access to this command."), Boss_Edit_ItemStackHolderNull("&c&l(!) &cThe itemstack name that is provided for the spawn item doesn't exist or wasn't found."), diff --git a/pom.xml b/pom.xml index a7b838e..6f9c051 100644 --- a/pom.xml +++ b/pom.xml @@ -20,7 +20,7 @@ - 1.0.0-U160 + 1.0.0-U161 EpicBosses com.songoda.epicbosses.CustomBosses AMinecraftDev