From 11baa56327058330ca37d30c0c3c05410498b9ab Mon Sep 17 00:00:00 2001 From: AMinecraftDev Date: Sun, 18 Nov 2018 16:29:58 +0800 Subject: [PATCH] 1.0.0-SNAPSHOT-U58 + Finished working on how skills are handled + Updated skills.json to allow for easier usage of skills --- .../Core/resources-json/bosses.json | 3 +- .../Core/resources-json/skills.json | 162 ++++++++++-------- plugin-modules/Core/resources-yml/config.yml | 4 +- .../com/songoda/epicbosses/CustomBosses.java | 12 +- .../com/songoda/epicbosses/api/BossAPI.java | 32 +++- .../listeners/during/BossSkillListener.java | 36 ++-- .../listeners/pre/BossSpawnListener.java | 11 ++ .../managers/BossEntityManager.java | 14 +- .../managers/BossListenerManager.java | 2 + .../epicbosses/managers/BossSkillManager.java | 95 +++++++++- .../mechanics/boss/PotionMechanic.java | 4 - .../epicbosses/skills/CustomSkillHandler.java | 11 ++ .../epicbosses/skills/ISkillHandler.java | 5 +- .../com/songoda/epicbosses/skills/Skill.java | 2 + .../epicbosses/skills/custom/Cage.java | 32 ++-- .../epicbosses/skills/custom/Disarm.java | 18 +- .../epicbosses/skills/custom/Fireball.java | 15 +- .../epicbosses/skills/custom/Grapple.java | 16 +- .../epicbosses/skills/custom/Insidious.java | 16 +- .../epicbosses/skills/custom/Knockback.java | 16 +- .../epicbosses/skills/custom/Launch.java | 14 +- .../epicbosses/skills/custom/Lightning.java | 14 +- .../epicbosses/skills/custom/Minions.java | 22 +-- .../epicbosses/skills/custom/Warp.java | 14 +- .../skills/elements/CustomSkillElement.java | 17 -- ...ement.java => SubCommandSkillElement.java} | 2 +- .../elements/SubCustomSkillElement.java | 42 +++++ .../epicbosses/skills/types/CommandSkill.java | 54 ------ .../skills/types/CommandSkillElement.java | 54 ++++++ .../epicbosses/skills/types/CustomSkill.java | 25 --- .../skills/types/CustomSkillElement.java | 26 +++ ...GroupSkill.java => GroupSkillElement.java} | 8 +- ...tionSkill.java => PotionSkillElement.java} | 11 +- .../com/songoda/epicbosses/utils/Debug.java | 1 + .../songoda/epicbosses/utils/NumberUtils.java | 2 + pom.xml | 2 +- 36 files changed, 476 insertions(+), 338 deletions(-) create mode 100644 plugin-modules/Core/src/com/songoda/epicbosses/skills/CustomSkillHandler.java delete mode 100644 plugin-modules/Core/src/com/songoda/epicbosses/skills/elements/CustomSkillElement.java rename plugin-modules/Core/src/com/songoda/epicbosses/skills/elements/{CommandSkillElement.java => SubCommandSkillElement.java} (90%) create mode 100644 plugin-modules/Core/src/com/songoda/epicbosses/skills/elements/SubCustomSkillElement.java delete mode 100644 plugin-modules/Core/src/com/songoda/epicbosses/skills/types/CommandSkill.java create mode 100644 plugin-modules/Core/src/com/songoda/epicbosses/skills/types/CommandSkillElement.java delete mode 100644 plugin-modules/Core/src/com/songoda/epicbosses/skills/types/CustomSkill.java create mode 100644 plugin-modules/Core/src/com/songoda/epicbosses/skills/types/CustomSkillElement.java rename plugin-modules/Core/src/com/songoda/epicbosses/skills/types/{GroupSkill.java => GroupSkillElement.java} (61%) rename plugin-modules/Core/src/com/songoda/epicbosses/skills/types/{PotionSkill.java => PotionSkillElement.java} (74%) diff --git a/plugin-modules/Core/resources-json/bosses.json b/plugin-modules/Core/resources-json/bosses.json index dcbe9d3..153a8e0 100644 --- a/plugin-modules/Core/resources-json/bosses.json +++ b/plugin-modules/Core/resources-json/bosses.json @@ -41,8 +41,7 @@ "overallChance": 35.5, "masterMessage": "SKMainSkillMessage", "skills": [ - "KNOCKBACK1", - "CAGE1" + "Lightning1" ] }, "drops": { diff --git a/plugin-modules/Core/resources-json/skills.json b/plugin-modules/Core/resources-json/skills.json index 3e82196..a7ffd7d 100644 --- a/plugin-modules/Core/resources-json/skills.json +++ b/plugin-modules/Core/resources-json/skills.json @@ -2,16 +2,18 @@ "Blind1": { "mode": "ALL", "type": "POTION", - "radius": 10, "displayName": "Blind", "customMessage": "BlindMessage", - "potions": [ - { - "type": "blind", - "level": 2, - "duration": 10 - } - ] + "radius": 10, + "customData": { + "potions": [ + { + "type": "blind", + "level": 2, + "duration": 10 + } + ] + } }, "Guts1": { "mode": "ALL", @@ -19,35 +21,39 @@ "radius": 10, "displayName": "Guts", "customMessage": "GutsMessage", - "commands": [ - { - "chance": 25, - "commands": [ - "Guts1", - "Guts2" - ] - }, - { - "chance": 10, - "commands": [ - "Guts3" - ] - } - ] + "customData": { + "commands": [ + { + "chance": 25, + "commands": [ + "Guts1", + "Guts2" + ] + }, + { + "chance": 10, + "commands": [ + "Guts3" + ] + } + ] + } }, "Cage1": { "mode": "ALL", "type": "CUSTOM", "radius": 10, "displayName": "Cage", - "custom": { - "type": "CAGE", - "multiplier": 0.0 - }, - "cage": { - "flatType": "IRON_BLOCK", - "wallType": "IRON_BARS", - "insideType": "WATER" + "customData": { + "custom": { + "type": "CAGE", + "multiplier": 0.0, + "otherSkillData": { + "flatType": "IRON_BLOCK", + "wallType": "IRON_BARS", + "insideType": "WATER" + } + } } }, "Disarm1": { @@ -56,9 +62,11 @@ "radius": 10, "displayName": "Disarm", "customMessage": null, - "custom": { - "type": "DISARM", - "multiplier": null + "customData": { + "custom": { + "type": "DISARM", + "multiplier": null + } } }, "Fireball1": { @@ -67,9 +75,11 @@ "radius": 10, "displayName": "Fireball", "customMessage": null, - "custom": { - "type": "FIREBALL", - "multiplier": 3.0 + "customData": { + "custom": { + "type": "FIREBALL", + "multiplier": 3.0 + } } }, "Grapple1": { @@ -78,9 +88,11 @@ "radius": 10, "displayName": "Grapple", "customMessage": null, - "custom": { - "type": "GRAPPLE", - "multiplier": 3.0 + "customData": { + "custom": { + "type": "GRAPPLE", + "multiplier": 3.0 + } } }, "Insidious1": { @@ -89,9 +101,11 @@ "radius": 10, "displayName": "Insidious", "customMessage": null, - "custom": { - "type": "INSIDIOUS", - "multiplier": 2.5 + "customData": { + "custom": { + "type": "INSIDIOUS", + "multiplier": 2.5 + } } }, "Knockback1": { @@ -100,9 +114,11 @@ "radius": 10, "displayName": "Knockback", "customMessage": null, - "custom": { - "type": "KNOCKBACK", - "multiplier": 2.5 + "customData": { + "custom": { + "type": "KNOCKBACK", + "multiplier": 2.5 + } } }, "Launch1": { @@ -111,9 +127,11 @@ "radius": 10, "displayName": "Launch", "customMessage": null, - "custom": { - "type": "LAUNCH", - "multiplier": 3.0 + "customData": { + "custom": { + "type": "LAUNCH", + "multiplier": 3.0 + } } }, "Lightning1": { @@ -122,9 +140,11 @@ "radius": 10, "displayName": "Lightning", "customMessage": null, - "custom": { - "type": "LIGHTNING", - "multiplier": null + "customData": { + "custom": { + "type": "LIGHTNING", + "multiplier": null + } } }, "Minions1": { @@ -133,15 +153,17 @@ "radius": 10, "displayName": "Minions", "customMessage": null, - "custom": { - "type": "MINIONS", - "multiplier": null - }, - "minions": { - "amount": 5, - "minionsToSpawn": [ - "Minion1" - ] + "customData": { + "custom": { + "type": "MINIONS", + "multiplier": null, + "otherSkillData": { + "amount": 5, + "minionsToSpawn": [ + "Minion1" + ] + } + } } }, "Warp1": { @@ -150,9 +172,11 @@ "radius": 10, "displayName": "Warp", "customMessage": null, - "custom": { - "type": "WARP", - "multiplier": null + "customData": { + "custom": { + "type": "WARP", + "multiplier": null + } } }, "Shazaam1": { @@ -161,9 +185,11 @@ "radius": 10, "displayName": "Shazaam", "customMessage": "ShazaamMessage", - "groupedSkills": [ - "Blind1", - "Knockback1" - ] + "customData": { + "groupedSkills": [ + "Blind1", + "Knockback1" + ] + } } } \ No newline at end of file diff --git a/plugin-modules/Core/resources-yml/config.yml b/plugin-modules/Core/resources-yml/config.yml index 4071021..e6d44a7 100644 --- a/plugin-modules/Core/resources-yml/config.yml +++ b/plugin-modules/Core/resources-yml/config.yml @@ -1,5 +1,5 @@ Settings: - debug: false + debug: true bossTargetRange: 50.0 defaultNearbyRadius: 250.0 nearbyFormat: '{name} ({distance}m)' @@ -36,7 +36,7 @@ Display: AutoSpawns: menuName: '&b&lEpicBosses &3&lAutoSpawns' Bosses: - menuName: '&b&lEpicBosses &3&lItems' + menuName: '&b&lEpicBosses &3&lBosses' name: '&b&l{name}' lore: - '&3Editing: &f{enabled}' diff --git a/plugin-modules/Core/src/com/songoda/epicbosses/CustomBosses.java b/plugin-modules/Core/src/com/songoda/epicbosses/CustomBosses.java index db31558..f8dd133 100644 --- a/plugin-modules/Core/src/com/songoda/epicbosses/CustomBosses.java +++ b/plugin-modules/Core/src/com/songoda/epicbosses/CustomBosses.java @@ -54,8 +54,8 @@ public class CustomBosses extends JavaPlugin implements IReloadable { @Getter private MinionMechanicManager minionMechanicManager; @Getter private MinionEntityContainer minionEntityContainer; - @Getter private VersionHandler versionHandler; - @Getter private DebugManager debugManager; + @Getter private VersionHandler versionHandler = new VersionHandler(); + @Getter private DebugManager debugManager = new DebugManager(); @Getter private YmlFileHandler langFileHandler, editorFileHandler, configFileHandler; @Getter private FileConfiguration lang, editor, config; @@ -64,6 +64,11 @@ public class CustomBosses extends JavaPlugin implements IReloadable { @Getter private boolean debug = false; + @Override + public void onDisable() { + this.bossEntityManager.killAllHolders(null); + } + @Override public void onEnable() { Debug.setPlugin(this); @@ -82,8 +87,6 @@ public class CustomBosses extends JavaPlugin implements IReloadable { new Metrics(this); new ServerUtils(this); - this.debugManager = new DebugManager(); - this.versionHandler = new VersionHandler(); this.bossSkillManager = new BossSkillManager(); this.bossHookManager = new BossHookManager(this); this.bossTauntManager = new BossTauntManager(this); @@ -118,6 +121,7 @@ public class CustomBosses extends JavaPlugin implements IReloadable { this.bossPanelManager.load(); //RELOAD/LOAD ALL MANAGERS + this.bossSkillManager.load(); this.bossHookManager.reload(); this.bossLocationManager.reload(); this.bossMechanicManager.load(); 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 983ea4b..ce36c3e 100644 --- a/plugin-modules/Core/src/com/songoda/epicbosses/api/BossAPI.java +++ b/plugin-modules/Core/src/com/songoda/epicbosses/api/BossAPI.java @@ -10,8 +10,11 @@ import com.songoda.epicbosses.holder.ActiveBossHolder; import com.songoda.epicbosses.managers.files.CommandsFileManager; import com.songoda.epicbosses.managers.files.ItemsFileManager; import com.songoda.epicbosses.managers.files.MessagesFileManager; +import com.songoda.epicbosses.skills.CustomSkillHandler; +import com.songoda.epicbosses.skills.Skill; import com.songoda.epicbosses.skills.custom.Minions; -import com.songoda.epicbosses.skills.types.CustomSkill; +import com.songoda.epicbosses.skills.elements.CustomMinionSkillElement; +import com.songoda.epicbosses.skills.types.CustomSkillElement; import com.songoda.epicbosses.utils.Debug; import com.songoda.epicbosses.utils.EntityFinder; import com.songoda.epicbosses.utils.ServerUtils; @@ -101,8 +104,8 @@ public class BossAPI { * @param customSkill - The custom skill you are registering * @return boolean if the registration succeeded or failed */ - public static boolean registerCustomSkill(CustomSkill customSkill) { - return PLUGIN.getBossSkillManager().registerSkill(customSkill); + public static boolean registerCustomSkill(CustomSkillHandler customSkill) { + return PLUGIN.getBossSkillManager().registerCustomSkill(customSkill); } /** @@ -115,8 +118,8 @@ public class BossAPI { * * @param customSkill - The custom skill you are trying to remove */ - public static void removeCustomSkill(CustomSkill customSkill) { - PLUGIN.getBossSkillManager().removeSkill(customSkill); + public static void removeCustomSkill(CustomSkillHandler customSkill) { + PLUGIN.getBossSkillManager().removeCustomSkill(customSkill); } /** @@ -290,6 +293,8 @@ public class BossAPI { preBossSpawnEvent = new PreBossSpawnEvent(activeBossHolder); } + System.out.println("SPAWNING EVENT " + preBossSpawnEvent); + PLUGIN.getBossTargetManager().initializeTargetHandler(activeBossHolder); ServerUtils.get().callEvent(preBossSpawnEvent); @@ -301,16 +306,27 @@ public class BossAPI { * bossEntity, under the activebossholder. * * @param activeBossHolder - targeted active boss - * @param minions - Minion skill class + * @param skill - the skill from the skills.json * @return boolean if the spawning of the minions succeeded or failed */ - public static boolean spawnNewMinion(ActiveBossHolder activeBossHolder, Minions minions) { + public static boolean spawnNewMinion(ActiveBossHolder activeBossHolder, Skill skill) { // if(minionEntity.isEditing()) { // Debug.ATTEMPTED_TO_SPAWN_WHILE_DISABLED.debug(); // return null; // } - return PLUGIN.getBossEntityManager().spawnMinionsOnBossHolder(activeBossHolder, minions); + if(skill.getType().equalsIgnoreCase("CUSTOM")) { + CustomSkillElement customSkillElement = PLUGIN.getBossSkillManager().getCustomSkillElement(skill); + + if(customSkillElement.getCustom().getType().equalsIgnoreCase("MINION")) { + CustomMinionSkillElement customMinionSkillElement = customSkillElement.getCustom().getCustomMinionSkillData(); + + PLUGIN.getBossEntityManager().spawnMinionsOnBossHolder(activeBossHolder, skill, customMinionSkillElement); + } + } + + + return false; } /** diff --git a/plugin-modules/Core/src/com/songoda/epicbosses/listeners/during/BossSkillListener.java b/plugin-modules/Core/src/com/songoda/epicbosses/listeners/during/BossSkillListener.java index d993922..746874e 100644 --- a/plugin-modules/Core/src/com/songoda/epicbosses/listeners/during/BossSkillListener.java +++ b/plugin-modules/Core/src/com/songoda/epicbosses/listeners/during/BossSkillListener.java @@ -3,17 +3,16 @@ package com.songoda.epicbosses.listeners.during; import com.songoda.epicbosses.CustomBosses; import com.songoda.epicbosses.api.BossAPI; import com.songoda.epicbosses.entity.BossEntity; -import com.songoda.epicbosses.events.BossSkillEvent; import com.songoda.epicbosses.events.PreBossSkillEvent; import com.songoda.epicbosses.holder.ActiveBossHolder; import com.songoda.epicbosses.managers.BossEntityManager; import com.songoda.epicbosses.managers.BossSkillManager; import com.songoda.epicbosses.managers.files.SkillsFileManager; -import com.songoda.epicbosses.skills.ISkillHandler; import com.songoda.epicbosses.skills.Skill; -import com.songoda.epicbosses.skills.types.CommandSkill; -import com.songoda.epicbosses.skills.types.CustomSkill; -import com.songoda.epicbosses.skills.types.PotionSkill; +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.Debug; import com.songoda.epicbosses.utils.RandomUtils; import com.songoda.epicbosses.utils.ServerUtils; @@ -26,7 +25,6 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.bukkit.potion.Potion; import java.util.ArrayList; import java.util.Arrays; @@ -42,8 +40,10 @@ public class BossSkillListener implements Listener { private BossEntityManager bossEntityManager; private SkillsFileManager skillsFileManager; + private BossSkillManager bossSkillManager; public BossSkillListener(CustomBosses plugin) { + this.bossSkillManager = plugin.getBossSkillManager(); this.bossEntityManager = plugin.getBossEntityManager(); this.skillsFileManager = plugin.getSkillsFileManager(); } @@ -65,11 +65,11 @@ public class BossSkillListener implements Listener { if(bossEntity.getSkills() == null || bossEntity.getSkills().getOverallChance() == null) return; - if(RandomUtils.get().canPreformAction(bossEntity.getSkills().getOverallChance())) { +// if(RandomUtils.get().canPreformAction(bossEntity.getSkills().getOverallChance())) { PreBossSkillEvent preBossSkillEvent = new PreBossSkillEvent(activeBossHolder, livingEntity, (LivingEntity) entityDamaging); ServerUtils.get().callEvent(preBossSkillEvent); - } +// } } @EventHandler @@ -98,17 +98,25 @@ public class BossSkillListener implements Listener { List targettedEntities = getTargetedEntities(activeBossHolder, skill, activeBossHolder.getLivingEntity().getLocation(), damagingEntity); if(skill.getType().equalsIgnoreCase("POTION")) { - PotionSkill potionSkill = (PotionSkill) skill; + PotionSkillElement potionSkillElement = this.bossSkillManager.getPotionSkillElement(skill); - potionSkill.castSkill(activeBossHolder, targettedEntities); + potionSkillElement.castSkill(skill, potionSkillElement, activeBossHolder, targettedEntities); + System.out.println("#1"); } else if(skill.getType().equalsIgnoreCase("COMMAND")) { - CommandSkill commandSkill = (CommandSkill) skill; + CommandSkillElement commandSkillElement = this.bossSkillManager.getCommandSkillElement(skill); - commandSkill.castSkill(activeBossHolder, targettedEntities); + commandSkillElement.castSkill(skill, commandSkillElement, activeBossHolder, targettedEntities); + System.out.println("#2"); + } else if(skill.getType().equalsIgnoreCase("GROUP")) { + GroupSkillElement groupSkillElement = this.bossSkillManager.getGroupSkillElement(skill); + + groupSkillElement.castSkill(skill, groupSkillElement, activeBossHolder, targettedEntities); + System.out.println("#3"); } else if(skill.getType().equalsIgnoreCase("CUSTOM")) { - CustomSkill customSkill = (CustomSkill) skill; - + CustomSkillElement customSkillElement = this.bossSkillManager.getCustomSkillElement(skill); + this.bossSkillManager.handleCustomSkillCasting(skill, customSkillElement, activeBossHolder, targettedEntities); + System.out.println("#4"); } } diff --git a/plugin-modules/Core/src/com/songoda/epicbosses/listeners/pre/BossSpawnListener.java b/plugin-modules/Core/src/com/songoda/epicbosses/listeners/pre/BossSpawnListener.java index 69700d4..a8a3f54 100644 --- a/plugin-modules/Core/src/com/songoda/epicbosses/listeners/pre/BossSpawnListener.java +++ b/plugin-modules/Core/src/com/songoda/epicbosses/listeners/pre/BossSpawnListener.java @@ -102,8 +102,17 @@ public class BossSpawnListener implements Listener { } } + @EventHandler + public void onPreBossSpawnItem(PreBossSpawnItemEvent event) { + handleEvent(event); + } + @EventHandler public void onPreBossSpawnEvent(PreBossSpawnEvent event) { + handleEvent(event); + } + + private void handleEvent(PreBossSpawnEvent event) { ActiveBossHolder activeBossHolder = event.getActiveBossHolder(); BossEntity bossEntity = activeBossHolder.getBossEntity(); Location location = activeBossHolder.getLocation(); @@ -130,6 +139,8 @@ public class BossSpawnListener implements Listener { if(activeBossHolder.getName() != null) messages.replaceAll(s -> s.replace("{boss}", activeBossHolder.getName())); messages.replaceAll(s -> s.replace("{location}", StringUtils.get().translateLocation(location))); + System.out.println("MESSAGE SYSTEM"); + MessageUtils.get().sendMessage(location, NumberUtils.get().getSquared(messageRadius), messages); } diff --git a/plugin-modules/Core/src/com/songoda/epicbosses/managers/BossEntityManager.java b/plugin-modules/Core/src/com/songoda/epicbosses/managers/BossEntityManager.java index e2ba981..f51bf57 100644 --- a/plugin-modules/Core/src/com/songoda/epicbosses/managers/BossEntityManager.java +++ b/plugin-modules/Core/src/com/songoda/epicbosses/managers/BossEntityManager.java @@ -15,7 +15,9 @@ import com.songoda.epicbosses.managers.files.BossesFileManager; import com.songoda.epicbosses.managers.files.DropTableFileManager; import com.songoda.epicbosses.managers.files.ItemsFileManager; import com.songoda.epicbosses.managers.files.MinionsFileManager; +import com.songoda.epicbosses.skills.Skill; import com.songoda.epicbosses.skills.custom.Minions; +import com.songoda.epicbosses.skills.elements.CustomMinionSkillElement; import com.songoda.epicbosses.utils.BossesGson; import com.songoda.epicbosses.utils.Debug; import com.songoda.epicbosses.utils.RandomUtils; @@ -260,12 +262,12 @@ public class BossEntityManager { return activeBossHolder; } - public boolean spawnMinionsOnBossHolder(ActiveBossHolder activeBossHolder, Minions minions) { - List minionsToSpawn = minions.getMinions().getMinionsToSpawn(); - Integer amount = minions.getMinions().getAmount(); + public boolean spawnMinionsOnBossHolder(ActiveBossHolder activeBossHolder, Skill skill, CustomMinionSkillElement minionSkillElement) { + List minionsToSpawn = minionSkillElement.getMinionsToSpawn(); + Integer amount = minionSkillElement.getAmount(); if(minionsToSpawn == null || minionsToSpawn.isEmpty()) { - Debug.FAILED_TO_SPAWN_MINIONS_FROM_SKILL.debug(minions.getDisplayName()); + Debug.FAILED_TO_SPAWN_MINIONS_FROM_SKILL.debug(skill.getDisplayName()); return false; } @@ -277,13 +279,13 @@ public class BossEntityManager { MinionEntity minionEntity = this.minionsFileManager.getMinionEntity(string); if(minionEntity == null) { - Debug.FAILED_TO_FIND_MINION.debug(minions.getDisplayName(), string); + Debug.FAILED_TO_FIND_MINION.debug(skill.getDisplayName(), string); return; } for(int i = 1; i <= finalAmount; i++) { if(!this.minionMechanicManager.handleMechanicApplication(minionEntity, activeBossHolder)) { - Debug.FAILED_TO_SPAWN_MINION.debug(minions.getDisplayName(), string); + Debug.FAILED_TO_SPAWN_MINION.debug(skill.getDisplayName(), string); return; } } diff --git a/plugin-modules/Core/src/com/songoda/epicbosses/managers/BossListenerManager.java b/plugin-modules/Core/src/com/songoda/epicbosses/managers/BossListenerManager.java index 5e94366..9aded18 100644 --- a/plugin-modules/Core/src/com/songoda/epicbosses/managers/BossListenerManager.java +++ b/plugin-modules/Core/src/com/songoda/epicbosses/managers/BossListenerManager.java @@ -3,6 +3,7 @@ package com.songoda.epicbosses.managers; import com.songoda.epicbosses.CustomBosses; import com.songoda.epicbosses.listeners.after.BossDeathListener; import com.songoda.epicbosses.listeners.during.BossDamageListener; +import com.songoda.epicbosses.listeners.during.BossSkillListener; import com.songoda.epicbosses.listeners.pre.BossSpawnListener; import com.songoda.epicbosses.utils.Debug; import com.songoda.epicbosses.utils.ILoadable; @@ -33,6 +34,7 @@ public class BossListenerManager implements ILoadable { serverUtils.registerListener(new BossSpawnListener(this.plugin)); serverUtils.registerListener(new BossDamageListener(this.plugin)); + serverUtils.registerListener(new BossSkillListener(this.plugin)); serverUtils.registerListener(new BossDeathListener(this.plugin)); this.hasBeenLoaded = true; diff --git a/plugin-modules/Core/src/com/songoda/epicbosses/managers/BossSkillManager.java b/plugin-modules/Core/src/com/songoda/epicbosses/managers/BossSkillManager.java index 2371426..ede55d3 100644 --- a/plugin-modules/Core/src/com/songoda/epicbosses/managers/BossSkillManager.java +++ b/plugin-modules/Core/src/com/songoda/epicbosses/managers/BossSkillManager.java @@ -1,8 +1,20 @@ package com.songoda.epicbosses.managers; +import com.songoda.epicbosses.holder.ActiveBossHolder; +import com.songoda.epicbosses.skills.CustomSkillHandler; import com.songoda.epicbosses.skills.Skill; +import com.songoda.epicbosses.skills.custom.*; +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.ILoadable; +import org.bukkit.entity.LivingEntity; import java.util.HashSet; +import java.util.List; import java.util.Set; /** @@ -10,21 +22,88 @@ import java.util.Set; * @version 1.0.0 * @since 05-Nov-18 */ -public class BossSkillManager { +public class BossSkillManager implements ILoadable { - private static final Set SKILLS = new HashSet<>(); + private static final Set SKILLS = new HashSet<>(); - public boolean registerSkill(Skill skill) { - if(SKILLS.contains(skill)) return false; + @Override + public void load() { + registerCustomSkill(new Cage()); + registerCustomSkill(new Disarm()); + registerCustomSkill(new Fireball()); + registerCustomSkill(new Grapple()); + registerCustomSkill(new Insidious()); + registerCustomSkill(new Knockback()); + registerCustomSkill(new Launch()); + registerCustomSkill(new Lightning()); + registerCustomSkill(new Minions()); + registerCustomSkill(new Warp()); + } - SKILLS.add(skill); + public void handleCustomSkillCasting(Skill skill, CustomSkillElement customSkillElement, ActiveBossHolder activeBossHolder, List nearbyEntities) { + String type = customSkillElement.getCustom().getType(); + CustomSkillHandler customSkillHandler = getCustomSkillHandler(type); + + if(customSkillHandler == null) { + Debug.FAILED_TO_OBTAIN_THE_SKILL_HANDLER.debug(type); + return; + } + + customSkillHandler.castSkill(skill, customSkillElement, activeBossHolder, nearbyEntities); + } + + public PotionSkillElement getPotionSkillElement(Skill skill) { + if(skill.getType().equalsIgnoreCase("POTION")) { + return BossesGson.get().fromJson(skill.getCustomData(), PotionSkillElement.class); + } + + return null; + } + + public CommandSkillElement getCommandSkillElement(Skill skill) { + if(skill.getType().equalsIgnoreCase("COMMAND")) { + return BossesGson.get().fromJson(skill.getCustomData(), CommandSkillElement.class); + } + + return null; + } + + public GroupSkillElement getGroupSkillElement(Skill skill) { + if(skill.getType().equalsIgnoreCase("GROUP")) { + return BossesGson.get().fromJson(skill.getCustomData(), GroupSkillElement.class); + } + + return null; + } + + public CustomSkillElement getCustomSkillElement(Skill skill) { + if(skill.getType().equalsIgnoreCase("CUSTOM")) { + return BossesGson.get().fromJson(skill.getCustomData(), CustomSkillElement.class); + } + + return null; + } + + public boolean registerCustomSkill(CustomSkillHandler customSkillHandler) { + if(SKILLS.contains(customSkillHandler)) return false; + + SKILLS.add(customSkillHandler); return true; } - public void removeSkill(Skill skill) { - if(!SKILLS.contains(skill)) return; + public void removeCustomSkill(CustomSkillHandler customSkillHandler) { + if(!SKILLS.contains(customSkillHandler)) return; - SKILLS.remove(skill); + SKILLS.remove(customSkillHandler); } + public CustomSkillHandler getCustomSkillHandler(String name) { + for(CustomSkillHandler customSkillHandler : new HashSet<>(SKILLS)) { + String skillName = customSkillHandler.getClass().getSimpleName(); + + if(skillName.equalsIgnoreCase(name)) return customSkillHandler; + } + + return null; + } } diff --git a/plugin-modules/Core/src/com/songoda/epicbosses/mechanics/boss/PotionMechanic.java b/plugin-modules/Core/src/com/songoda/epicbosses/mechanics/boss/PotionMechanic.java index d8868bf..29c1a5c 100644 --- a/plugin-modules/Core/src/com/songoda/epicbosses/mechanics/boss/PotionMechanic.java +++ b/plugin-modules/Core/src/com/songoda/epicbosses/mechanics/boss/PotionMechanic.java @@ -42,10 +42,6 @@ public class PotionMechanic implements IOptionalMechanic { potionElements.forEach(potionElement -> { PotionEffect potionEffect = this.potionEffectConverter.from(potionElement); - System.out.println(potionEffect); - System.out.println(potionEffect.getAmplifier()); - System.out.println(potionEffect.getDuration()); - System.out.println(livingEntity); livingEntity.addPotionEffect(potionEffect); }); } diff --git a/plugin-modules/Core/src/com/songoda/epicbosses/skills/CustomSkillHandler.java b/plugin-modules/Core/src/com/songoda/epicbosses/skills/CustomSkillHandler.java new file mode 100644 index 0000000..ee44a8d --- /dev/null +++ b/plugin-modules/Core/src/com/songoda/epicbosses/skills/CustomSkillHandler.java @@ -0,0 +1,11 @@ +package com.songoda.epicbosses.skills; + +import com.songoda.epicbosses.skills.types.CustomSkillElement; + +/** + * @author Charles Cullen + * @version 1.0.0 + * @since 18-Nov-18 + */ +public abstract class CustomSkillHandler implements ISkillHandler { +} diff --git a/plugin-modules/Core/src/com/songoda/epicbosses/skills/ISkillHandler.java b/plugin-modules/Core/src/com/songoda/epicbosses/skills/ISkillHandler.java index 1ca5e1b..dca6421 100644 --- a/plugin-modules/Core/src/com/songoda/epicbosses/skills/ISkillHandler.java +++ b/plugin-modules/Core/src/com/songoda/epicbosses/skills/ISkillHandler.java @@ -1,6 +1,7 @@ package com.songoda.epicbosses.skills; import com.songoda.epicbosses.holder.ActiveBossHolder; +import com.songoda.epicbosses.skills.types.CustomSkillElement; import org.bukkit.entity.LivingEntity; import java.util.List; @@ -10,8 +11,8 @@ import java.util.List; * @version 1.0.0 * @since 05-Nov-18 */ -public interface ISkillHandler { +public interface ISkillHandler { - void castSkill(ActiveBossHolder activeBossHolder, List nearbyEntities); + void castSkill(Skill skill, T t, ActiveBossHolder activeBossHolder, List nearbyEntities); } diff --git a/plugin-modules/Core/src/com/songoda/epicbosses/skills/Skill.java b/plugin-modules/Core/src/com/songoda/epicbosses/skills/Skill.java index d615002..b69ac0a 100644 --- a/plugin-modules/Core/src/com/songoda/epicbosses/skills/Skill.java +++ b/plugin-modules/Core/src/com/songoda/epicbosses/skills/Skill.java @@ -1,5 +1,6 @@ package com.songoda.epicbosses.skills; +import com.google.gson.JsonObject; import com.google.gson.annotations.Expose; import lombok.Getter; import lombok.Setter; @@ -13,6 +14,7 @@ public class Skill { @Expose @Getter @Setter private String mode, type, displayName, customMessage; @Expose @Getter @Setter private Double radius; + @Expose @Getter @Setter private JsonObject customData; public Skill(String mode, String type, Double radius, String displayName, String customMessage) { this.mode = mode; diff --git a/plugin-modules/Core/src/com/songoda/epicbosses/skills/custom/Cage.java b/plugin-modules/Core/src/com/songoda/epicbosses/skills/custom/Cage.java index 3e0575a..6424148 100644 --- a/plugin-modules/Core/src/com/songoda/epicbosses/skills/custom/Cage.java +++ b/plugin-modules/Core/src/com/songoda/epicbosses/skills/custom/Cage.java @@ -1,18 +1,16 @@ package com.songoda.epicbosses.skills.custom; -import com.google.gson.annotations.Expose; -import com.songoda.epicbosses.CustomBosses; import com.songoda.epicbosses.holder.ActiveBossHolder; -import com.songoda.epicbosses.skills.ISkillHandler; +import com.songoda.epicbosses.skills.CustomSkillHandler; +import com.songoda.epicbosses.skills.Skill; import com.songoda.epicbosses.skills.custom.cage.CageLocationData; import com.songoda.epicbosses.skills.custom.cage.CagePlayerData; import com.songoda.epicbosses.skills.elements.CustomCageSkillElement; -import com.songoda.epicbosses.skills.types.CustomSkill; +import com.songoda.epicbosses.skills.types.CustomSkillElement; import com.songoda.epicbosses.utils.Debug; import com.songoda.epicbosses.utils.ServerUtils; import com.songoda.epicbosses.utils.itemstack.converters.MaterialConverter; import lombok.Getter; -import lombok.Setter; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.BlockState; @@ -25,21 +23,15 @@ import java.util.*; * @version 1.0.0 * @since 06-Nov-18 */ -public class Cage extends CustomSkill implements ISkillHandler { +public class Cage extends CustomSkillHandler { private static final MaterialConverter MATERIAL_CONVERTER = new MaterialConverter(); @Getter private static final Map cageLocationDataMap = new HashMap<>(); @Getter private static final List playersInCage = new ArrayList<>(); - @Expose @Getter @Setter private CustomCageSkillElement cage; - - public Cage(String mode, String type, Double radius, String displayName, String customMessage) { - super(mode, type, radius, displayName, customMessage); - } - @Override - public void castSkill(ActiveBossHolder activeBossHolder, List nearbyEntities) { + public void castSkill(Skill skill, CustomSkillElement customSkillElement, ActiveBossHolder activeBossHolder, List nearbyEntities) { nearbyEntities.forEach(livingEntity -> { UUID uuid = livingEntity.getUniqueId(); @@ -53,7 +45,7 @@ public class Cage extends CustomSkill implements ISkillHandler { cagePlayerData.setBlockStateMaps(teleportLocation); livingEntity.teleport(teleportLocation); - ServerUtils.get().runLater(1L, () -> setCageBlocks(cagePlayerData)); + ServerUtils.get().runLater(1L, () -> setCageBlocks(cagePlayerData, customSkillElement.getCustom().getCustomCageSkillData(), skill)); ServerUtils.get().runLater(100L, () -> { restoreCageBlocks(cagePlayerData); getPlayersInCage().remove(uuid); @@ -93,19 +85,19 @@ public class Cage extends CustomSkill implements ISkillHandler { }); } - private void setCageBlocks(CagePlayerData cagePlayerData) { + private void setCageBlocks(CagePlayerData cagePlayerData, CustomCageSkillElement cage, Skill skill) { Map> queueMap = cagePlayerData.getMapOfCages(); - setBlocks(queueMap.get("W"), getCage().getWallType()); - setBlocks(queueMap.get("F"), getCage().getFlatType()); - setBlocks(queueMap.get("I"), getCage().getInsideType()); + setBlocks(queueMap.get("W"), cage.getWallType(), skill); + setBlocks(queueMap.get("F"), cage.getFlatType(), skill); + setBlocks(queueMap.get("I"), cage.getInsideType(), skill); } - private void setBlocks(Queue queue, String materialType) { + private void setBlocks(Queue queue, String materialType, Skill skill) { Material material = MATERIAL_CONVERTER.from(materialType); if(material == null) { - Debug.SKILL_CAGE_INVALID_MATERIAL.debug(materialType, getDisplayName()); + Debug.SKILL_CAGE_INVALID_MATERIAL.debug(materialType, skill.getDisplayName()); return; } diff --git a/plugin-modules/Core/src/com/songoda/epicbosses/skills/custom/Disarm.java b/plugin-modules/Core/src/com/songoda/epicbosses/skills/custom/Disarm.java index 8024a0d..18665bf 100644 --- a/plugin-modules/Core/src/com/songoda/epicbosses/skills/custom/Disarm.java +++ b/plugin-modules/Core/src/com/songoda/epicbosses/skills/custom/Disarm.java @@ -1,8 +1,10 @@ package com.songoda.epicbosses.skills.custom; +import com.songoda.epicbosses.CustomBosses; import com.songoda.epicbosses.holder.ActiveBossHolder; -import com.songoda.epicbosses.skills.ISkillHandler; -import com.songoda.epicbosses.skills.types.CustomSkill; +import com.songoda.epicbosses.skills.CustomSkillHandler; +import com.songoda.epicbosses.skills.Skill; +import com.songoda.epicbosses.skills.types.CustomSkillElement; import com.songoda.epicbosses.utils.Message; import com.songoda.epicbosses.utils.RandomUtils; import org.bukkit.Material; @@ -18,14 +20,10 @@ import java.util.List; * @version 1.0.0 * @since 11-Nov-18 */ -public class Disarm extends CustomSkill implements ISkillHandler { - - public Disarm(String mode, String type, Double radius, String displayName, String customMessage) { - super(mode, type, radius, displayName, customMessage); - } +public class Disarm extends CustomSkillHandler { @Override - public void castSkill(ActiveBossHolder activeBossHolder, List nearbyEntities) { + public void castSkill(Skill skill, CustomSkillElement customSkillElement, ActiveBossHolder activeBossHolder, List nearbyEntities) { nearbyEntities.forEach(livingEntity -> { EntityEquipment entityEquipment = livingEntity.getEquipment(); int itemSlot = RandomUtils.get().getRandomNumber(5); @@ -37,8 +35,8 @@ public class Disarm extends CustomSkill implements ISkillHandler { if(livingEntity instanceof HumanEntity) { HumanEntity humanEntity = (HumanEntity) livingEntity; - itemStack = PLUGIN.getVersionHandler().getItemInHand(humanEntity); - PLUGIN.getVersionHandler().setItemInHand(humanEntity, replacementItemStack); + itemStack = CustomBosses.get().getVersionHandler().getItemInHand(humanEntity); + CustomBosses.get().getVersionHandler().setItemInHand(humanEntity, replacementItemStack); break; } case 1: diff --git a/plugin-modules/Core/src/com/songoda/epicbosses/skills/custom/Fireball.java b/plugin-modules/Core/src/com/songoda/epicbosses/skills/custom/Fireball.java index 43d5e52..8016175 100644 --- a/plugin-modules/Core/src/com/songoda/epicbosses/skills/custom/Fireball.java +++ b/plugin-modules/Core/src/com/songoda/epicbosses/skills/custom/Fireball.java @@ -1,8 +1,9 @@ package com.songoda.epicbosses.skills.custom; import com.songoda.epicbosses.holder.ActiveBossHolder; -import com.songoda.epicbosses.skills.ISkillHandler; -import com.songoda.epicbosses.skills.types.CustomSkill; +import com.songoda.epicbosses.skills.CustomSkillHandler; +import com.songoda.epicbosses.skills.Skill; +import com.songoda.epicbosses.skills.types.CustomSkillElement; import org.bukkit.entity.LivingEntity; import org.bukkit.util.Vector; @@ -13,19 +14,15 @@ import java.util.List; * @version 1.0.0 * @since 11-Nov-18 */ -public class Fireball extends CustomSkill implements ISkillHandler { - - public Fireball(String mode, String type, Double radius, String displayName, String customMessage) { - super(mode, type, radius, displayName, customMessage); - } +public class Fireball extends CustomSkillHandler { @Override - public void castSkill(ActiveBossHolder activeBossHolder, List nearbyEntities) { + public void castSkill(Skill skill, CustomSkillElement customSkillElement, ActiveBossHolder activeBossHolder, List nearbyEntities) { LivingEntity boss = activeBossHolder.getLivingEntity(); if(boss == null) return; - Double multiplier = getCustom().getMultiplier(); + Double multiplier = customSkillElement.getCustom().getMultiplier(); if(multiplier == null) multiplier = 1.0; diff --git a/plugin-modules/Core/src/com/songoda/epicbosses/skills/custom/Grapple.java b/plugin-modules/Core/src/com/songoda/epicbosses/skills/custom/Grapple.java index 193ae7d..af16b5d 100644 --- a/plugin-modules/Core/src/com/songoda/epicbosses/skills/custom/Grapple.java +++ b/plugin-modules/Core/src/com/songoda/epicbosses/skills/custom/Grapple.java @@ -1,9 +1,9 @@ package com.songoda.epicbosses.skills.custom; -import com.songoda.epicbosses.CustomBosses; import com.songoda.epicbosses.holder.ActiveBossHolder; -import com.songoda.epicbosses.skills.ISkillHandler; -import com.songoda.epicbosses.skills.types.CustomSkill; +import com.songoda.epicbosses.skills.CustomSkillHandler; +import com.songoda.epicbosses.skills.Skill; +import com.songoda.epicbosses.skills.types.CustomSkillElement; import org.bukkit.Location; import org.bukkit.entity.LivingEntity; import org.bukkit.util.Vector; @@ -15,16 +15,12 @@ import java.util.List; * @version 1.0.0 * @since 11-Nov-18 */ -public class Grapple extends CustomSkill implements ISkillHandler { - - public Grapple(String mode, String type, Double radius, String displayName, String customMessage) { - super(mode, type, radius, displayName, customMessage); - } +public class Grapple extends CustomSkillHandler { @Override - public void castSkill(ActiveBossHolder activeBossHolder, List nearbyEntities) { + public void castSkill(Skill skill, CustomSkillElement customSkillElement, ActiveBossHolder activeBossHolder, List nearbyEntities) { Location bossLocation = activeBossHolder.getLocation(); - Double multiplier = getCustom().getMultiplier(); + Double multiplier = customSkillElement.getCustom().getMultiplier(); if(multiplier == null) multiplier = 1.0; diff --git a/plugin-modules/Core/src/com/songoda/epicbosses/skills/custom/Insidious.java b/plugin-modules/Core/src/com/songoda/epicbosses/skills/custom/Insidious.java index 9aa7b9a..7d3f53c 100644 --- a/plugin-modules/Core/src/com/songoda/epicbosses/skills/custom/Insidious.java +++ b/plugin-modules/Core/src/com/songoda/epicbosses/skills/custom/Insidious.java @@ -1,9 +1,9 @@ package com.songoda.epicbosses.skills.custom; -import com.songoda.epicbosses.CustomBosses; import com.songoda.epicbosses.holder.ActiveBossHolder; -import com.songoda.epicbosses.skills.ISkillHandler; -import com.songoda.epicbosses.skills.types.CustomSkill; +import com.songoda.epicbosses.skills.CustomSkillHandler; +import com.songoda.epicbosses.skills.Skill; +import com.songoda.epicbosses.skills.types.CustomSkillElement; import org.bukkit.entity.LivingEntity; import java.util.List; @@ -13,15 +13,11 @@ import java.util.List; * @version 1.0.0 * @since 11-Nov-18 */ -public class Insidious extends CustomSkill implements ISkillHandler { - - public Insidious(String mode, String type, Double radius, String displayName, String customMessage) { - super(mode, type, radius, displayName, customMessage); - } +public class Insidious extends CustomSkillHandler { @Override - public void castSkill(ActiveBossHolder activeBossHolder, List nearbyEntities) { - Double multiplier = getCustom().getMultiplier(); + public void castSkill(Skill skill, CustomSkillElement customSkillElement, ActiveBossHolder activeBossHolder, List nearbyEntities) { + Double multiplier = customSkillElement.getCustom().getMultiplier(); if(multiplier == null) multiplier = 2.5; diff --git a/plugin-modules/Core/src/com/songoda/epicbosses/skills/custom/Knockback.java b/plugin-modules/Core/src/com/songoda/epicbosses/skills/custom/Knockback.java index 3b80512..77d4465 100644 --- a/plugin-modules/Core/src/com/songoda/epicbosses/skills/custom/Knockback.java +++ b/plugin-modules/Core/src/com/songoda/epicbosses/skills/custom/Knockback.java @@ -1,9 +1,9 @@ package com.songoda.epicbosses.skills.custom; -import com.songoda.epicbosses.CustomBosses; import com.songoda.epicbosses.holder.ActiveBossHolder; -import com.songoda.epicbosses.skills.ISkillHandler; -import com.songoda.epicbosses.skills.types.CustomSkill; +import com.songoda.epicbosses.skills.CustomSkillHandler; +import com.songoda.epicbosses.skills.Skill; +import com.songoda.epicbosses.skills.types.CustomSkillElement; import org.bukkit.Location; import org.bukkit.entity.LivingEntity; import org.bukkit.util.Vector; @@ -15,15 +15,11 @@ import java.util.List; * @version 1.0.0 * @since 11-Nov-18 */ -public class Knockback extends CustomSkill implements ISkillHandler { - - public Knockback(String mode, String type, Double radius, String displayName, String customMessage) { - super(mode, type, radius, displayName, customMessage); - } +public class Knockback extends CustomSkillHandler { @Override - public void castSkill(ActiveBossHolder activeBossHolder, List nearbyEntities) { - Double multiplier = getCustom().getMultiplier(); + public void castSkill(Skill skill, CustomSkillElement customSkillElement, ActiveBossHolder activeBossHolder, List nearbyEntities) { + Double multiplier = customSkillElement.getCustom().getMultiplier(); if(multiplier == null) multiplier = 2.5; diff --git a/plugin-modules/Core/src/com/songoda/epicbosses/skills/custom/Launch.java b/plugin-modules/Core/src/com/songoda/epicbosses/skills/custom/Launch.java index 1e987ad..70b7dbc 100644 --- a/plugin-modules/Core/src/com/songoda/epicbosses/skills/custom/Launch.java +++ b/plugin-modules/Core/src/com/songoda/epicbosses/skills/custom/Launch.java @@ -1,9 +1,9 @@ package com.songoda.epicbosses.skills.custom; -import com.songoda.epicbosses.CustomBosses; import com.songoda.epicbosses.holder.ActiveBossHolder; -import com.songoda.epicbosses.skills.ISkillHandler; -import com.songoda.epicbosses.skills.types.CustomSkill; +import com.songoda.epicbosses.skills.CustomSkillHandler; +import com.songoda.epicbosses.skills.Skill; +import com.songoda.epicbosses.skills.types.CustomSkillElement; import org.bukkit.Location; import org.bukkit.entity.LivingEntity; @@ -14,14 +14,10 @@ import java.util.List; * @version 1.0.0 * @since 11-Nov-18 */ -public class Launch extends CustomSkill implements ISkillHandler { - - public Launch(String mode, String type, Double radius, String displayName, String customMessage) { - super(mode, type, radius, displayName, customMessage); - } +public class Launch extends CustomSkillHandler { @Override - public void castSkill(ActiveBossHolder activeBossHolder, List nearbyEntities) { + public void castSkill(Skill skill, CustomSkillElement customSkillElement, ActiveBossHolder activeBossHolder, List nearbyEntities) { Location bossLocation = activeBossHolder.getLocation(); nearbyEntities.forEach(livingEntity -> livingEntity.teleport(bossLocation.clone().add(0, 35, 0))); diff --git a/plugin-modules/Core/src/com/songoda/epicbosses/skills/custom/Lightning.java b/plugin-modules/Core/src/com/songoda/epicbosses/skills/custom/Lightning.java index 7542f32..81347f1 100644 --- a/plugin-modules/Core/src/com/songoda/epicbosses/skills/custom/Lightning.java +++ b/plugin-modules/Core/src/com/songoda/epicbosses/skills/custom/Lightning.java @@ -1,9 +1,9 @@ package com.songoda.epicbosses.skills.custom; -import com.songoda.epicbosses.CustomBosses; import com.songoda.epicbosses.holder.ActiveBossHolder; -import com.songoda.epicbosses.skills.ISkillHandler; -import com.songoda.epicbosses.skills.types.CustomSkill; +import com.songoda.epicbosses.skills.CustomSkillHandler; +import com.songoda.epicbosses.skills.Skill; +import com.songoda.epicbosses.skills.types.CustomSkillElement; import org.bukkit.entity.LivingEntity; import java.util.List; @@ -13,14 +13,10 @@ import java.util.List; * @version 1.0.0 * @since 11-Nov-18 */ -public class Lightning extends CustomSkill implements ISkillHandler { - - public Lightning(String mode, String type, Double radius, String displayName, String customMessage) { - super(mode, type, radius, displayName, customMessage); - } +public class Lightning extends CustomSkillHandler { @Override - public void castSkill(ActiveBossHolder activeBossHolder, List nearbyEntities) { + public void castSkill(Skill skill, CustomSkillElement customSkillElement, ActiveBossHolder activeBossHolder, List nearbyEntities) { nearbyEntities.forEach(livingEntity -> livingEntity.getWorld().strikeLightningEffect(livingEntity.getEyeLocation())); } } diff --git a/plugin-modules/Core/src/com/songoda/epicbosses/skills/custom/Minions.java b/plugin-modules/Core/src/com/songoda/epicbosses/skills/custom/Minions.java index 84021c7..09cccf0 100644 --- a/plugin-modules/Core/src/com/songoda/epicbosses/skills/custom/Minions.java +++ b/plugin-modules/Core/src/com/songoda/epicbosses/skills/custom/Minions.java @@ -1,14 +1,10 @@ package com.songoda.epicbosses.skills.custom; -import com.google.gson.annotations.Expose; -import com.songoda.epicbosses.CustomBosses; import com.songoda.epicbosses.api.BossAPI; import com.songoda.epicbosses.holder.ActiveBossHolder; -import com.songoda.epicbosses.skills.ISkillHandler; -import com.songoda.epicbosses.skills.elements.CustomMinionSkillElement; -import com.songoda.epicbosses.skills.types.CustomSkill; -import lombok.Getter; -import lombok.Setter; +import com.songoda.epicbosses.skills.CustomSkillHandler; +import com.songoda.epicbosses.skills.Skill; +import com.songoda.epicbosses.skills.types.CustomSkillElement; import org.bukkit.entity.LivingEntity; import java.util.List; @@ -18,16 +14,10 @@ import java.util.List; * @version 1.0.0 * @since 11-Nov-18 */ -public class Minions extends CustomSkill implements ISkillHandler { - - @Expose @Getter @Setter private CustomMinionSkillElement minions; - - public Minions(String mode, String type, Double radius, String displayName, String customMessage) { - super(mode, type, radius, displayName, customMessage); - } +public class Minions extends CustomSkillHandler { @Override - public void castSkill(ActiveBossHolder activeBossHolder, List nearbyEntities) { - BossAPI.spawnNewMinion(activeBossHolder, this); + public void castSkill(Skill skill, CustomSkillElement customSkillElement, ActiveBossHolder activeBossHolder, List nearbyEntities) { + BossAPI.spawnNewMinion(activeBossHolder, skill); } } diff --git a/plugin-modules/Core/src/com/songoda/epicbosses/skills/custom/Warp.java b/plugin-modules/Core/src/com/songoda/epicbosses/skills/custom/Warp.java index 45047cf..eab7538 100644 --- a/plugin-modules/Core/src/com/songoda/epicbosses/skills/custom/Warp.java +++ b/plugin-modules/Core/src/com/songoda/epicbosses/skills/custom/Warp.java @@ -1,9 +1,9 @@ package com.songoda.epicbosses.skills.custom; -import com.songoda.epicbosses.CustomBosses; import com.songoda.epicbosses.holder.ActiveBossHolder; -import com.songoda.epicbosses.skills.ISkillHandler; -import com.songoda.epicbosses.skills.types.CustomSkill; +import com.songoda.epicbosses.skills.CustomSkillHandler; +import com.songoda.epicbosses.skills.Skill; +import com.songoda.epicbosses.skills.types.CustomSkillElement; import org.bukkit.entity.LivingEntity; import java.util.List; @@ -13,14 +13,10 @@ import java.util.List; * @version 1.0.0 * @since 11-Nov-18 */ -public class Warp extends CustomSkill implements ISkillHandler { - - public Warp(String mode, String type, Double radius, String displayName, String customMessage) { - super(mode, type, radius, displayName, customMessage); - } +public class Warp extends CustomSkillHandler { @Override - public void castSkill(ActiveBossHolder activeBossHolder, List nearbyEntities) { + public void castSkill(Skill skill, CustomSkillElement customSkillElement, ActiveBossHolder activeBossHolder, List nearbyEntities) { LivingEntity target = nearbyEntities.get(0); activeBossHolder.getLivingEntity().teleport(target); diff --git a/plugin-modules/Core/src/com/songoda/epicbosses/skills/elements/CustomSkillElement.java b/plugin-modules/Core/src/com/songoda/epicbosses/skills/elements/CustomSkillElement.java deleted file mode 100644 index c80eecd..0000000 --- a/plugin-modules/Core/src/com/songoda/epicbosses/skills/elements/CustomSkillElement.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.songoda.epicbosses.skills.elements; - -import com.google.gson.annotations.Expose; -import lombok.Getter; -import lombok.Setter; - -/** - * @author Charles Cullen - * @version 1.0.0 - * @since 05-Nov-18 - */ -public class CustomSkillElement { - - @Expose @Getter @Setter private String type; - @Expose @Getter @Setter private Double multiplier; - -} diff --git a/plugin-modules/Core/src/com/songoda/epicbosses/skills/elements/CommandSkillElement.java b/plugin-modules/Core/src/com/songoda/epicbosses/skills/elements/SubCommandSkillElement.java similarity index 90% rename from plugin-modules/Core/src/com/songoda/epicbosses/skills/elements/CommandSkillElement.java rename to plugin-modules/Core/src/com/songoda/epicbosses/skills/elements/SubCommandSkillElement.java index 002e852..03a4a9e 100644 --- a/plugin-modules/Core/src/com/songoda/epicbosses/skills/elements/CommandSkillElement.java +++ b/plugin-modules/Core/src/com/songoda/epicbosses/skills/elements/SubCommandSkillElement.java @@ -11,7 +11,7 @@ import java.util.List; * @version 1.0.0 * @since 05-Nov-18 */ -public class CommandSkillElement { +public class SubCommandSkillElement { @Expose @Getter @Setter private Double chance; @Expose @Getter @Setter private List commands; diff --git a/plugin-modules/Core/src/com/songoda/epicbosses/skills/elements/SubCustomSkillElement.java b/plugin-modules/Core/src/com/songoda/epicbosses/skills/elements/SubCustomSkillElement.java new file mode 100644 index 0000000..06ce153 --- /dev/null +++ b/plugin-modules/Core/src/com/songoda/epicbosses/skills/elements/SubCustomSkillElement.java @@ -0,0 +1,42 @@ +package com.songoda.epicbosses.skills.elements; + +import com.google.gson.JsonObject; +import com.google.gson.annotations.Expose; +import com.songoda.epicbosses.utils.BossesGson; +import lombok.Getter; +import lombok.Setter; + +/** + * @author Charles Cullen + * @version 1.0.0 + * @since 05-Nov-18 + */ +public class SubCustomSkillElement { + + @Expose @Getter @Setter private String type; + @Expose @Getter @Setter private Double multiplier; + @Expose @Setter private JsonObject otherSkillData; + + public SubCustomSkillElement(String type, Double multiplier, JsonObject otherSkillData) { + this.type = type; + this.multiplier = multiplier; + this.otherSkillData = otherSkillData; + } + + public CustomCageSkillElement getCustomCageSkillData() { + if(getType().equalsIgnoreCase("CAGE")) { + return BossesGson.get().fromJson(this.otherSkillData, CustomCageSkillElement.class); + } + + return null; + } + + public CustomMinionSkillElement getCustomMinionSkillData() { + if(getType().equalsIgnoreCase("MINION")) { + return BossesGson.get().fromJson(this.otherSkillData, CustomMinionSkillElement.class); + } + + return null; + } + +} diff --git a/plugin-modules/Core/src/com/songoda/epicbosses/skills/types/CommandSkill.java b/plugin-modules/Core/src/com/songoda/epicbosses/skills/types/CommandSkill.java deleted file mode 100644 index 3f683de..0000000 --- a/plugin-modules/Core/src/com/songoda/epicbosses/skills/types/CommandSkill.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.songoda.epicbosses.skills.types; - -import com.google.gson.annotations.Expose; -import com.songoda.epicbosses.holder.ActiveBossHolder; -import com.songoda.epicbosses.skills.ISkillHandler; -import com.songoda.epicbosses.skills.Skill; -import com.songoda.epicbosses.skills.elements.CommandSkillElement; -import com.songoda.epicbosses.utils.Debug; -import com.songoda.epicbosses.utils.RandomUtils; -import com.songoda.epicbosses.utils.ServerUtils; -import lombok.Getter; -import lombok.Setter; -import org.bukkit.entity.LivingEntity; - -import java.util.List; - -/** - * @author Charles Cullen - * @version 1.0.0 - * @since 05-Nov-18 - */ -public class CommandSkill extends Skill implements ISkillHandler { - - @Expose @Getter @Setter private List commands; - - public CommandSkill(String mode, String type, Double radius, String displayName, String customMessage) { - super(mode, type, radius, displayName, customMessage); - } - - @Override - public void castSkill(ActiveBossHolder activeBossHolder, List nearbyEntities) { - List commandSkillElements = getCommands(); - ServerUtils serverUtils = ServerUtils.get(); - - if(commandSkillElements.isEmpty()) { - Debug.SKILL_COMMANDS_ARE_EMPTY.debug(getDisplayName()); - return; - } - - nearbyEntities.forEach(livingEntity -> - commandSkillElements.forEach(commandSkillElement -> { - Double chance = commandSkillElement.getChance(); - List commands = commandSkillElement.getCommands(); - - if(commands == null || commands.isEmpty()) return; - if(chance == null) chance = 100.0; - if(!RandomUtils.get().canPreformAction(chance)) return; - - commands.replaceAll(s -> s.replace("%player%", livingEntity.getName())); - commands.forEach(serverUtils::sendConsoleCommand); - }) - ); - } -} diff --git a/plugin-modules/Core/src/com/songoda/epicbosses/skills/types/CommandSkillElement.java b/plugin-modules/Core/src/com/songoda/epicbosses/skills/types/CommandSkillElement.java new file mode 100644 index 0000000..b295686 --- /dev/null +++ b/plugin-modules/Core/src/com/songoda/epicbosses/skills/types/CommandSkillElement.java @@ -0,0 +1,54 @@ +package com.songoda.epicbosses.skills.types; + +import com.google.gson.annotations.Expose; +import com.songoda.epicbosses.holder.ActiveBossHolder; +import com.songoda.epicbosses.skills.ISkillHandler; +import com.songoda.epicbosses.skills.Skill; +import com.songoda.epicbosses.skills.elements.SubCommandSkillElement; +import com.songoda.epicbosses.utils.Debug; +import com.songoda.epicbosses.utils.RandomUtils; +import com.songoda.epicbosses.utils.ServerUtils; +import lombok.Getter; +import lombok.Setter; +import org.bukkit.entity.LivingEntity; + +import java.util.List; + +/** + * @author Charles Cullen + * @version 1.0.0 + * @since 05-Nov-18 + */ +public class CommandSkillElement implements ISkillHandler { + + @Expose @Getter @Setter private List commands; + + public CommandSkillElement(List commandSkillElements) { + this.commands = commandSkillElements; + } + + @Override + public void castSkill(Skill skill, CommandSkillElement commandSkillElement, ActiveBossHolder activeBossHolder, List nearbyEntities) { + List commandSkillElements = getCommands(); + ServerUtils serverUtils = ServerUtils.get(); + + if(commandSkillElements.isEmpty()) { + Debug.SKILL_COMMANDS_ARE_EMPTY.debug(); + return; + } + + nearbyEntities.forEach(livingEntity -> + commandSkillElements.forEach(commandSkillEle -> { + Double chance = commandSkillEle.getChance(); + List commands = commandSkillEle.getCommands(); + + if(commands == null || commands.isEmpty()) return; + if(chance == null) chance = 100.0; + if(!RandomUtils.get().canPreformAction(chance)) return; + + commands.replaceAll(s -> s.replace("%player%", livingEntity.getName())); + commands.forEach(serverUtils::sendConsoleCommand); + }) + ); + } +} diff --git a/plugin-modules/Core/src/com/songoda/epicbosses/skills/types/CustomSkill.java b/plugin-modules/Core/src/com/songoda/epicbosses/skills/types/CustomSkill.java deleted file mode 100644 index 3ab2c69..0000000 --- a/plugin-modules/Core/src/com/songoda/epicbosses/skills/types/CustomSkill.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.songoda.epicbosses.skills.types; - -import com.google.gson.annotations.Expose; -import com.songoda.epicbosses.CustomBosses; -import com.songoda.epicbosses.skills.ISkillHandler; -import com.songoda.epicbosses.skills.Skill; -import com.songoda.epicbosses.skills.elements.CustomSkillElement; -import lombok.Getter; -import lombok.Setter; - -/** - * @author Charles Cullen - * @version 1.0.0 - * @since 05-Nov-18 - */ -public class CustomSkill extends Skill { - - protected static final CustomBosses PLUGIN = CustomBosses.get(); - - @Expose @Getter @Setter private CustomSkillElement custom; - - public CustomSkill(String mode, String type, Double radius, String displayName, String customMessage) { - super(mode, type, radius, displayName, customMessage); - } -} diff --git a/plugin-modules/Core/src/com/songoda/epicbosses/skills/types/CustomSkillElement.java b/plugin-modules/Core/src/com/songoda/epicbosses/skills/types/CustomSkillElement.java new file mode 100644 index 0000000..7e630a3 --- /dev/null +++ b/plugin-modules/Core/src/com/songoda/epicbosses/skills/types/CustomSkillElement.java @@ -0,0 +1,26 @@ +package com.songoda.epicbosses.skills.types; + +import com.google.gson.annotations.Expose; +import com.songoda.epicbosses.CustomBosses; +import com.songoda.epicbosses.holder.ActiveBossHolder; +import com.songoda.epicbosses.skills.ISkillHandler; +import com.songoda.epicbosses.skills.elements.SubCustomSkillElement; +import lombok.Getter; +import lombok.Setter; +import org.bukkit.entity.LivingEntity; + +import java.util.List; + +/** + * @author Charles Cullen + * @version 1.0.0 + * @since 05-Nov-18 + */ +public class CustomSkillElement { + + @Expose @Getter @Setter private SubCustomSkillElement custom; + + public CustomSkillElement(SubCustomSkillElement subCustomSkillElement) { + this.custom = subCustomSkillElement; + } +} diff --git a/plugin-modules/Core/src/com/songoda/epicbosses/skills/types/GroupSkill.java b/plugin-modules/Core/src/com/songoda/epicbosses/skills/types/GroupSkillElement.java similarity index 61% rename from plugin-modules/Core/src/com/songoda/epicbosses/skills/types/GroupSkill.java rename to plugin-modules/Core/src/com/songoda/epicbosses/skills/types/GroupSkillElement.java index a71a5dd..ef11a9e 100644 --- a/plugin-modules/Core/src/com/songoda/epicbosses/skills/types/GroupSkill.java +++ b/plugin-modules/Core/src/com/songoda/epicbosses/skills/types/GroupSkillElement.java @@ -15,16 +15,16 @@ import java.util.List; * @version 1.0.0 * @since 05-Nov-18 */ -public class GroupSkill extends Skill implements ISkillHandler { +public class GroupSkillElement implements ISkillHandler { @Expose @Getter @Setter private List groupedSkills; - public GroupSkill(String mode, String type, Double radius, String displayName, String customMessage) { - super(mode, type, radius, displayName, customMessage); + public GroupSkillElement(List groupedSkills) { + this.groupedSkills = groupedSkills; } @Override - public void castSkill(ActiveBossHolder activeBossHolder, List nearbyEntities) { + public void castSkill(Skill skill, GroupSkillElement groupSkillElement, ActiveBossHolder activeBossHolder, List nearbyEntities) { //TODO } } diff --git a/plugin-modules/Core/src/com/songoda/epicbosses/skills/types/PotionSkill.java b/plugin-modules/Core/src/com/songoda/epicbosses/skills/types/PotionSkillElement.java similarity index 74% rename from plugin-modules/Core/src/com/songoda/epicbosses/skills/types/PotionSkill.java rename to plugin-modules/Core/src/com/songoda/epicbosses/skills/types/PotionSkillElement.java index 096f10c..df3e9cc 100644 --- a/plugin-modules/Core/src/com/songoda/epicbosses/skills/types/PotionSkill.java +++ b/plugin-modules/Core/src/com/songoda/epicbosses/skills/types/PotionSkillElement.java @@ -18,25 +18,24 @@ import java.util.List; * @version 1.0.0 * @since 05-Nov-18 */ -public class PotionSkill extends Skill implements ISkillHandler { +public class PotionSkillElement implements ISkillHandler { @Expose @Getter @Setter private List potions; private final PotionEffectConverter potionEffectConverter; - public PotionSkill(String mode, String type, Double radius, String displayName, String customMessage) { - super(mode, type, radius, displayName, customMessage); - + public PotionSkillElement(List potions) { + this.potions = potions; this.potionEffectConverter = new PotionEffectConverter(); } @Override - public void castSkill(ActiveBossHolder activeBossHolder, List nearbyEntities) { + public void castSkill(Skill skill, PotionSkillElement customSkillElement, ActiveBossHolder activeBossHolder, List nearbyEntities) { List potionElements = getPotions(); if(potionElements == null) return; if(potionElements.isEmpty()) { - Debug.SKILL_POTIONS_ARE_EMPTY.debug(getDisplayName()); + Debug.SKILL_POTIONS_ARE_EMPTY.debug(); return; } diff --git a/plugin-modules/Core/src/com/songoda/epicbosses/utils/Debug.java b/plugin-modules/Core/src/com/songoda/epicbosses/utils/Debug.java index 3e06a9b..4aefa41 100644 --- a/plugin-modules/Core/src/com/songoda/epicbosses/utils/Debug.java +++ b/plugin-modules/Core/src/com/songoda/epicbosses/utils/Debug.java @@ -39,6 +39,7 @@ public enum Debug { FAILED_TO_CREATE_ACTIVE_BOSS_HOLDER("Something went wrong while trying to create an active boss holder for someone who is trying to spawn a boss."), FAILED_TO_GIVE_SPAWN_EGG("{0} tried to obtain a spawn egg for the boss {1} but it has not been set yet."), FAILED_TO_CONNECT_TO_VAULT("Something went wrong while trying to connect to Vault. Please make sure you have an Economy and Permission plugin connected to your Vault plugin such as Essentials and GroupManager."), + FAILED_TO_OBTAIN_THE_SKILL_HANDLER("Something went wrong when trying to detect the skill handler for {0}."), DROP_TABLE_FAILED_INVALID_NUMBER("The specified position ({0}) on the drop table is not a valid number."), DROP_TABLE_FAILED_TO_GET_ITEM("The drop table failed to get the specific item for the list."), diff --git a/plugin-modules/Core/src/com/songoda/epicbosses/utils/NumberUtils.java b/plugin-modules/Core/src/com/songoda/epicbosses/utils/NumberUtils.java index 6cf3c71..2d325ec 100644 --- a/plugin-modules/Core/src/com/songoda/epicbosses/utils/NumberUtils.java +++ b/plugin-modules/Core/src/com/songoda/epicbosses/utils/NumberUtils.java @@ -28,6 +28,8 @@ public class NumberUtils { } public int getSquared(int original) { + if(original == -1) return -1; + return original * original; } diff --git a/pom.xml b/pom.xml index fcc04b4..946b5a3 100644 --- a/pom.xml +++ b/pom.xml @@ -19,7 +19,7 @@ - 1.0.0-SNAPSHOT-U55 + 1.0.0-SNAPSHOT-U58 EpicBosses com.songoda.epicbosses.CustomBosses AMinecraftDev