diff --git a/plugin-modules/Core/src/com/songoda/epicbosses/api/BossAPI.java b/plugin-modules/Core/src/com/songoda/epicbosses/api/BossAPI.java index 71cd1d8..45438e1 100644 --- a/plugin-modules/Core/src/com/songoda/epicbosses/api/BossAPI.java +++ b/plugin-modules/Core/src/com/songoda/epicbosses/api/BossAPI.java @@ -21,7 +21,11 @@ import com.songoda.epicbosses.skills.CustomSkillHandler; import com.songoda.epicbosses.skills.Skill; import com.songoda.epicbosses.skills.custom.Minions; import com.songoda.epicbosses.skills.elements.CustomMinionSkillElement; +import com.songoda.epicbosses.skills.elements.SubCustomSkillElement; +import com.songoda.epicbosses.skills.types.CommandSkillElement; import com.songoda.epicbosses.skills.types.CustomSkillElement; +import com.songoda.epicbosses.skills.types.GroupSkillElement; +import com.songoda.epicbosses.skills.types.PotionSkillElement; import com.songoda.epicbosses.utils.BossesGson; import com.songoda.epicbosses.utils.Debug; import com.songoda.epicbosses.utils.EntityFinder; @@ -180,6 +184,33 @@ public class BossAPI { return null; } + public static JsonObject createNewSkillCustomData(String type) { + JsonParser jsonParser = new JsonParser(); + String jsonString; + + if(type.equalsIgnoreCase("COMMAND")) { + CommandSkillElement commandSkillElement = new CommandSkillElement(new ArrayList<>()); + + jsonString = BossesGson.get().toJson(commandSkillElement); + } else if(type.equalsIgnoreCase("POTION")) { + PotionSkillElement potionSkillElement = new PotionSkillElement(new ArrayList<>()); + + jsonString = BossesGson.get().toJson(potionSkillElement); + } else if(type.equalsIgnoreCase("CUSTOM")) { + CustomSkillElement customSkillElement = new CustomSkillElement(new SubCustomSkillElement("", 0.0, null)); + + jsonString = BossesGson.get().toJson(customSkillElement); + } else if(type.equalsIgnoreCase("GROUP")) { + GroupSkillElement groupSkillElement = new GroupSkillElement(new ArrayList<>()); + + jsonString = BossesGson.get().toJson(groupSkillElement); + } else { + return null; + } + + return jsonParser.parse(jsonString).getAsJsonObject(); + } + /** * Used to create a new base drop table * with the specified arguments. diff --git a/plugin-modules/Core/src/com/songoda/epicbosses/panel/skills/MainSkillEditorPanel.java b/plugin-modules/Core/src/com/songoda/epicbosses/panel/skills/MainSkillEditorPanel.java index ec72625..d3644c6 100644 --- a/plugin-modules/Core/src/com/songoda/epicbosses/panel/skills/MainSkillEditorPanel.java +++ b/plugin-modules/Core/src/com/songoda/epicbosses/panel/skills/MainSkillEditorPanel.java @@ -74,7 +74,7 @@ public class MainSkillEditorPanel extends VariablePanelHandler { counter.getSlotsWith("Mode").forEach(slot -> panel.setOnClick(slot, getModeAction(skill))); counter.getSlotsWith("DisplayName").forEach(slot -> panel.setOnClick(slot, getDisplayNameAction(skill))); counter.getSlotsWith("CustomMessage").forEach(slot -> panel.setOnClick(slot, getCustomMessageAction(skill))); - counter.getSlotsWith("Type").forEach(slot -> {}); + counter.getSlotsWith("Type").forEach(slot -> panel.setOnClick(slot, event -> this.bossPanelManager.getSkillTypeEditMenu().openFor((Player) event.getWhoClicked(), skill))); panel.openFor(player); } @@ -92,13 +92,6 @@ public class MainSkillEditorPanel extends VariablePanelHandler { .addSlotCounter("Type"); } - private ClickAction getTypeAction(Skill skill) { - return event -> { - Player player = (Player) event.getWhoClicked(); - - }; - } - private ClickAction getDisplayNameAction(Skill skill) { return event -> { Player player = (Player) event.getWhoClicked(); diff --git a/plugin-modules/Core/src/com/songoda/epicbosses/panel/skills/SkillTypeEditorPanel.java b/plugin-modules/Core/src/com/songoda/epicbosses/panel/skills/SkillTypeEditorPanel.java index 90cf8c7..2c5e16d 100644 --- a/plugin-modules/Core/src/com/songoda/epicbosses/panel/skills/SkillTypeEditorPanel.java +++ b/plugin-modules/Core/src/com/songoda/epicbosses/panel/skills/SkillTypeEditorPanel.java @@ -1,12 +1,20 @@ package com.songoda.epicbosses.panel.skills; import com.songoda.epicbosses.CustomBosses; +import com.songoda.epicbosses.api.BossAPI; import com.songoda.epicbosses.managers.BossPanelManager; +import com.songoda.epicbosses.managers.files.SkillsFileManager; import com.songoda.epicbosses.skills.Skill; import com.songoda.epicbosses.utils.panel.Panel; +import com.songoda.epicbosses.utils.panel.base.ClickAction; import com.songoda.epicbosses.utils.panel.base.handlers.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.InventoryClickEvent; + +import java.util.HashMap; +import java.util.Map; /** * @author Charles Cullen @@ -15,8 +23,12 @@ import org.bukkit.entity.Player; */ public class SkillTypeEditorPanel extends VariablePanelHandler { + private SkillsFileManager skillsFileManager; + public SkillTypeEditorPanel(BossPanelManager bossPanelManager, PanelBuilder panelBuilder, CustomBosses plugin) { super(bossPanelManager, panelBuilder); + + this.skillsFileManager = plugin.getSkillsFileManager(); } @Override @@ -26,11 +38,72 @@ public class SkillTypeEditorPanel extends VariablePanelHandler { @Override public void openFor(Player player, Skill skill) { + Map replaceMap = new HashMap<>(); + PanelBuilder panelBuilder = getPanelBuilder().cloneBuilder(); + replaceMap.put("{name}", BossAPI.getSkillName(skill)); + panelBuilder.addReplaceData(replaceMap); + + Panel panel = panelBuilder.getPanel() + .setDestroyWhenDone(true) + .setCancelClick(true) + .setCancelLowerClick(true) + .setParentPanelHandler(this.bossPanelManager.getMainSkillEditMenu(), skill); + PanelBuilderCounter counter = panel.getPanelBuilderCounter(); + + counter.getSlotsWith("Command").forEach(slot -> panel.setOnClick(slot, getCommandAction(skill))); + counter.getSlotsWith("Custom").forEach(slot -> panel.setOnClick(slot, getCustomAction(skill))); + counter.getSlotsWith("Potion").forEach(slot -> panel.setOnClick(slot, getPotionAction(skill))); + counter.getSlotsWith("Group").forEach(slot -> panel.setOnClick(slot, getGroupAction(skill))); + + panel.openFor(player); } @Override public void initializePanel(PanelBuilder panelBuilder) { + PanelBuilderCounter panelBuilderCounter = panelBuilder.getPanelBuilderCounter(); + panelBuilderCounter + .addSlotCounter("Command") + .addSlotCounter("Custom") + .addSlotCounter("Potion") + .addSlotCounter("Group"); + } + + private ClickAction getCommandAction(Skill skill) { + return event -> { + skill.setType("COMMAND"); + skill.setCustomData(BossAPI.createNewSkillCustomData(skill.getType())); + save(skill, event); + }; + } + + private ClickAction getCustomAction(Skill skill) { + return event -> { + skill.setType("CUSTOM"); + skill.setCustomData(BossAPI.createNewSkillCustomData(skill.getType())); + save(skill, event); + }; + } + + private ClickAction getGroupAction(Skill skill) { + return event -> { + skill.setType("GROUP"); + skill.setCustomData(BossAPI.createNewSkillCustomData(skill.getType())); + save(skill, event); + }; + } + + private ClickAction getPotionAction(Skill skill) { + return event -> { + skill.setType("POTION"); + skill.setCustomData(BossAPI.createNewSkillCustomData(skill.getType())); + save(skill, event); + }; + } + + private void save(Skill skill, InventoryClickEvent event) { + this.skillsFileManager.save(); + this.bossPanelManager.getMainSkillEditMenu().openFor((Player) event.getWhoClicked(), skill); } } diff --git a/pom.xml b/pom.xml index 4a1c5ab..9a71daf 100644 --- a/pom.xml +++ b/pom.xml @@ -20,7 +20,7 @@ - 1.0.0-U101 + 1.0.0-U102 EpicBosses com.songoda.epicbosses.CustomBosses AMinecraftDev