diff --git a/TODO b/TODO new file mode 100644 index 0000000..c2171aa --- /dev/null +++ b/TODO @@ -0,0 +1,18 @@ +TODO: Remove the need for a skill Model, make it get JSON data -> send it through the parser -> output custom skill +TODO: Finish the Skill system +TODO: Setup the Custom input Skill system +TODO: Test the Skill system (without running the plugin as a whole) +TODO: Apply CustomSkill class to BossEntity +TODO: Add additional configurations to BossEntity/CustomEntityModel +TODO: Make a parser to convert CustomEntityModels to CustomEntity's +TODO: Make a parser to convert SkillModels to Skills +TODO: Setup a items.json which can read and write items really easily +TODO: Setup a messages.json which can allow for any message within the plugin to be referred to this section +TODO: Make a load/save for bosses.json and skills.json +TODO: Setup commands +TODO: Setup drops system +TODO: Setup API +TODO: Setup GUI aspect to allow for in-game boss setup +TODO: Write a documentation up about how to use the plugin +TODO: Make the 2.x.x - 3.x.x converter (an executable jar, NOT a plugin) + diff --git a/plugin-modules/Core/resources/bosses.json b/plugin-modules/Core/resources/bosses.json new file mode 100644 index 0000000..0e0dcd2 --- /dev/null +++ b/plugin-modules/Core/resources/bosses.json @@ -0,0 +1,3 @@ +{ + +} \ No newline at end of file diff --git a/plugin-modules/Core/resources/skills.json b/plugin-modules/Core/resources/skills.json new file mode 100644 index 0000000..0e0dcd2 --- /dev/null +++ b/plugin-modules/Core/resources/skills.json @@ -0,0 +1,3 @@ +{ + +} \ No newline at end of file diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/CustomBosses.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/CustomBosses.java index 239ec40..99f5551 100644 --- a/plugin-modules/Core/src/net/aminecraftdev/custombosses/CustomBosses.java +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/CustomBosses.java @@ -1,9 +1,12 @@ package net.aminecraftdev.custombosses; +import org.bukkit.plugin.java.JavaPlugin; + /** * @author AMinecraftDev * @version 1.0.0 * @since 06-Sep-17 */ -public class CustomBosses { +public class CustomBosses extends JavaPlugin { + } diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/api/BossAPI.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/api/BossAPI.java new file mode 100644 index 0000000..0fa2bfc --- /dev/null +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/api/BossAPI.java @@ -0,0 +1,23 @@ +package net.aminecraftdev.custombosses.api; + +/** + * @author Charles Cullen + * @version 1.0.0 + * @since 11-Mar-18 + * + */ +public class BossAPI { + + private static BossAPI instance; + + public BossAPI() { + instance = this; + } + + + + public static BossAPI get() { + return instance; + } + +} diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/entities/base/CustomEntity.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/entities/base/CustomEntity.java index f781457..ea9ba3b 100644 --- a/plugin-modules/Core/src/net/aminecraftdev/custombosses/entities/base/CustomEntity.java +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/entities/base/CustomEntity.java @@ -1,9 +1,9 @@ package net.aminecraftdev.custombosses.entities.base; import net.aminecraftdev.custombosses.handlers.EntityHandler; -import net.aminecraftdev.custombosses.handlers.IIdentifier; +import net.aminecraftdev.custombosses.utils.IIdentifier; import net.aminecraftdev.custombosses.models.CustomEntityModel; -import net.aminecraftdev.custombosses.skills.base.CustomSkill; +import net.aminecraftdev.custombosses.skills.CustomSkill; import org.bukkit.Location; import org.bukkit.entity.LivingEntity; import org.bukkit.inventory.EntityEquipment; @@ -27,8 +27,6 @@ public class CustomEntity implements IIdentifier { public CustomEntity(String identifier, CustomEntityModel customEntityModel) { this.identifier = identifier; this.customEntityModel = customEntityModel; - - // TODO: Convert customSkillModels into customSkills } @Override diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/entities/components/PotionEffectComponent.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/entities/components/PotionEffectComponent.java new file mode 100644 index 0000000..aef87e1 --- /dev/null +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/entities/components/PotionEffectComponent.java @@ -0,0 +1,45 @@ +package net.aminecraftdev.custombosses.entities.components; + +import com.google.gson.annotations.Expose; +import org.bukkit.potion.PotionEffectType; + +/** + * @author Charles Cullen + * @version 1.0.0 + * @since 11-Mar-18 + */ +public class PotionEffectComponent { + + @Expose private PotionEffectType potionEffectType; + @Expose private int duration, level; + + public PotionEffectComponent(PotionEffectType potionEffectType, int duration, int level) { + this.potionEffectType = potionEffectType; + this.duration = duration; + this.level = level; + } + + public PotionEffectType getPotionEffectType() { + return potionEffectType; + } + + public void setPotionEffectType(PotionEffectType potionEffectType) { + this.potionEffectType = potionEffectType; + } + + public int getDuration() { + return duration; + } + + public void setDuration(int duration) { + this.duration = duration; + } + + public int getLevel() { + return level; + } + + public void setLevel(int level) { + this.level = level; + } +} diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/entities/components/entity/ArmorComponent.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/entities/components/entity/ArmorComponent.java new file mode 100644 index 0000000..93c8e9f --- /dev/null +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/entities/components/entity/ArmorComponent.java @@ -0,0 +1,52 @@ +package net.aminecraftdev.custombosses.entities.components.entity; + +import com.google.gson.annotations.Expose; + +/** + * @author Charles Cullen + * @version 1.0.0 + * @since 11-Mar-18 + */ +public class ArmorComponent { + + @Expose private String helmet, chestplate, leggings, boots; + + public ArmorComponent(String helmet, String chestplate, String leggings, String boots, String mainHand, String offHand) { + this.helmet = helmet; + this.chestplate = chestplate; + this.leggings = leggings; + this.boots = boots; + } + + public String getHelmet() { + return helmet; + } + + public void setHelmet(String helmet) { + this.helmet = helmet; + } + + public String getChestplate() { + return chestplate; + } + + public void setChestplate(String chestplate) { + this.chestplate = chestplate; + } + + public String getLeggings() { + return leggings; + } + + public void setLeggings(String leggings) { + this.leggings = leggings; + } + + public String getBoots() { + return boots; + } + + public void setBoots(String boots) { + this.boots = boots; + } +} diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/entities/components/entity/HandComponent.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/entities/components/entity/HandComponent.java new file mode 100644 index 0000000..75d5aaf --- /dev/null +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/entities/components/entity/HandComponent.java @@ -0,0 +1,35 @@ +package net.aminecraftdev.custombosses.entities.components.entity; + +import com.google.gson.annotations.Expose; + +/** + * @author Charles Cullen + * @version 1.0.0 + * @since 11-Mar-18 + */ +public class HandComponent { + + @Expose private String mainHand, offHand; + + public HandComponent(String mainHand, String offHand) { + this.mainHand = mainHand; + this.offHand = offHand; + } + + public String getMainHand() { + return mainHand; + } + + public void setMainHand(String mainHand) { + this.mainHand = mainHand; + } + + public String getOffHand() { + return offHand; + } + + public void setOffHand(String offHand) { + this.offHand = offHand; + } + +} diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/entities/components/skills/SkillComponent.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/entities/components/skills/SkillComponent.java new file mode 100644 index 0000000..114428a --- /dev/null +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/entities/components/skills/SkillComponent.java @@ -0,0 +1,87 @@ +package net.aminecraftdev.custombosses.entities.components.skills; + +import com.google.gson.annotations.Expose; +import net.aminecraftdev.custombosses.utils.base.BaseSkillData; +import net.aminecraftdev.custombosses.skills.enums.SkillTarget; +import net.aminecraftdev.custombosses.skills.enums.SkillType; + +/** + * @author Charles Cullen + * @version 1.0.0 + * @since 11-Mar-18 + */ +public class SkillComponent { + + @Expose private String name; + @Expose private int radius; + @Expose private SkillTarget skillTarget; + @Expose private SkillType skillType; + @Expose private String showName, customMessage; + @Expose private BaseSkillData skillData; + @Expose private SkillGroupComponent skillGroupComponent; + + public SkillComponent(String name, int radius, SkillTarget skillTarget, SkillType skillType, String showName, String customMessage, BaseSkillData skillData, SkillGroupComponent skillGroupComponent) { + this.name = name; + + setRadius(radius); + setSkillTarget(skillTarget); + setSkillType(skillType, skillData); + setShowName(showName); + setCustomMessage(customMessage); + + this.skillGroupComponent = skillGroupComponent; + } + + public String getName() { + return name; + } + + public SkillTarget getSkillTarget() { + return skillTarget; + } + + public void setSkillTarget(SkillTarget skillTarget) { + this.skillTarget = skillTarget; + } + + public SkillType getSkillType() { + return skillType; + } + + public void setSkillType(SkillType skillType, BaseSkillData baseSkillData) { + this.skillType = skillType; + this.skillData = baseSkillData; + } + + public int getRadius() { + return radius; + } + + public void setRadius(int radius) { + this.radius = radius; + } + + public String getShowName() { + return showName; + } + + public void setShowName(String showName) { + this.showName = showName; + } + + public String getCustomMessage() { + return customMessage; + } + + public void setCustomMessage(String customMessage) { + this.customMessage = customMessage; + } + + public BaseSkillData getSkillData() { + return skillData; + } + + public SkillGroupComponent getSkillGroupComponent() { + return skillGroupComponent; + } +} diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/entities/components/skills/SkillGroupComponent.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/entities/components/skills/SkillGroupComponent.java new file mode 100644 index 0000000..c6f8d05 --- /dev/null +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/entities/components/skills/SkillGroupComponent.java @@ -0,0 +1,37 @@ +package net.aminecraftdev.custombosses.entities.components.skills; + +import com.google.gson.annotations.Expose; + +import java.util.List; + +/** + * @author Charles Cullen + * @version 1.0.0 + * @since 11-Mar-18 + */ +public class SkillGroupComponent { + + @Expose private boolean isGroup; + @Expose private List connectedSkills; + + public SkillGroupComponent(boolean isGroup, List connectedSkills) { + this.isGroup = isGroup; + this.connectedSkills = connectedSkills; + } + + public boolean isGroup() { + return this.isGroup; + } + + public void setGroup(boolean group) { + isGroup = group; + } + + public List getConnectedSkills() { + return connectedSkills; + } + + public void setConnectedSkills(List connectedSkills) { + this.connectedSkills = connectedSkills; + } +} diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/entities/components/skills/data/CommandSkillData.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/entities/components/skills/data/CommandSkillData.java new file mode 100644 index 0000000..3846fa1 --- /dev/null +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/entities/components/skills/data/CommandSkillData.java @@ -0,0 +1,25 @@ +package net.aminecraftdev.custombosses.entities.components.skills.data; + +import com.google.gson.annotations.Expose; +import net.aminecraftdev.custombosses.utils.base.BaseSkillData; + +import java.util.List; + +/** + * @author Charles Cullen + * @version 1.0.0 + * @since 11-Mar-18 + */ +public class CommandSkillData extends BaseSkillData { + + @Expose private List commands; + + public CommandSkillData(List commands) { + this.commands = commands; + } + + public List getCommands() { + return commands; + } + +} diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/entities/components/skills/data/CustomSkillData.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/entities/components/skills/data/CustomSkillData.java new file mode 100644 index 0000000..af83788 --- /dev/null +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/entities/components/skills/data/CustomSkillData.java @@ -0,0 +1,22 @@ +package net.aminecraftdev.custombosses.entities.components.skills.data; + +import com.google.gson.annotations.Expose; +import net.aminecraftdev.custombosses.utils.base.BaseSkillData; + +/** + * @author Charles Cullen + * @version 1.0.0 + * @since 11-Mar-18 + */ +public class CustomSkillData extends BaseSkillData { + + @Expose private Object customData; + + public CustomSkillData(Object object) { + this.customData = object; + } + + public Object getCustomData() { + return customData; + } +} diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/entities/components/skills/data/PotionSkillData.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/entities/components/skills/data/PotionSkillData.java new file mode 100644 index 0000000..21a2417 --- /dev/null +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/entities/components/skills/data/PotionSkillData.java @@ -0,0 +1,26 @@ +package net.aminecraftdev.custombosses.entities.components.skills.data; + +import com.google.gson.annotations.Expose; +import net.aminecraftdev.custombosses.entities.components.PotionEffectComponent; +import net.aminecraftdev.custombosses.utils.base.BaseSkillData; + +import java.util.List; + +/** + * @author Charles Cullen + * @version 1.0.0 + * @since 11-Mar-18 + */ +public class PotionSkillData extends BaseSkillData { + + @Expose private List potionEffects; + + public PotionSkillData(List potionEffectComponents) { + this.potionEffects = potionEffectComponents; + } + + public List getPotionEffects() { + return potionEffects; + } + +} diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/models/CustomEntityModel.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/models/CustomEntityModel.java index 453de24..7f82b9b 100644 --- a/plugin-modules/Core/src/net/aminecraftdev/custombosses/models/CustomEntityModel.java +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/models/CustomEntityModel.java @@ -1,11 +1,11 @@ package net.aminecraftdev.custombosses.models; -import net.aminecraftdev.custombosses.handlers.IIdentifier; +import net.aminecraftdev.custombosses.utils.IIdentifier; import net.aminecraftdev.custombosses.handlers.ValidationHandler; -import net.aminecraftdev.custombosses.handlers.models.IEquipmentHandler; -import net.aminecraftdev.custombosses.handlers.models.IPotionHandler; -import net.aminecraftdev.custombosses.handlers.models.ISkillHandler; -import net.aminecraftdev.custombosses.handlers.models.IStatsHandler; +import net.aminecraftdev.custombosses.utils.models.IEquipmentHandler; +import net.aminecraftdev.custombosses.utils.models.IPotionHandler; +import net.aminecraftdev.custombosses.utils.models.ISkillHandler; +import net.aminecraftdev.custombosses.utils.models.IStatsHandler; import org.bukkit.entity.EntityType; import org.bukkit.inventory.ItemStack; import org.bukkit.potion.PotionEffect; @@ -16,9 +16,6 @@ import java.util.*; * @author AMinecraftDev * @version 1.0.0 * @since 06-Sep-17 - * - * TODO: Make it load messages via a messages.json file - * TODO: Make it load all custom items via. a items.json file */ public class CustomEntityModel implements IIdentifier, IStatsHandler, IEquipmentHandler, ISkillHandler, IPotionHandler { diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/models/CustomSkillModel.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/models/CustomSkillModel.java index 73ba0dc..085e804 100644 --- a/plugin-modules/Core/src/net/aminecraftdev/custombosses/models/CustomSkillModel.java +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/models/CustomSkillModel.java @@ -1,45 +1,9 @@ package net.aminecraftdev.custombosses.models; -import net.aminecraftdev.custombosses.handlers.IIdentifier; -import net.aminecraftdev.custombosses.skills.types.SkillTarget; -import net.aminecraftdev.custombosses.skills.types.SkillType; - /** * @author Charles Cullen * @version 1.0.0 - * @since 08-Mar-18 + * @since 12-Mar-18 */ -public class CustomSkillModel implements IIdentifier { - - private SkillTarget skillTarget; - private SkillType skillType; - private String identifier; - - public CustomSkillModel(String identifier, SkillTarget skillTarget, SkillType skillType) { - this.identifier = identifier; - - setSkillTarget(skillTarget); - setSkillType(skillType); - } - - @Override - public String getIdentifier() { - return this.identifier; - } - - public SkillType getSkillType() { - return this.skillType; - } - - public void setSkillType(SkillType skillType) { - this.skillType = skillType; - } - - public SkillTarget getSkillTarget() { - return this.skillTarget; - } - - public void setSkillTarget(SkillTarget skillTarget) { - this.skillTarget = skillTarget; - } +public class CustomSkillModel { } diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/skills/CustomCommandSkill.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/skills/CustomCommandSkill.java deleted file mode 100644 index 3631ff2..0000000 --- a/plugin-modules/Core/src/net/aminecraftdev/custombosses/skills/CustomCommandSkill.java +++ /dev/null @@ -1,35 +0,0 @@ -package net.aminecraftdev.custombosses.skills; - -import net.aminecraftdev.custombosses.handlers.ValidationHandler; -import net.aminecraftdev.custombosses.models.CustomSkillModel; -import net.aminecraftdev.custombosses.skills.base.CustomSkill; -import org.bukkit.Bukkit; -import org.bukkit.entity.LivingEntity; - -import java.util.ArrayList; -import java.util.List; - -/** - * @author Charles Cullen - * @version 1.0.0 - * @since 08-Mar-18 - */ -public class CustomCommandSkill extends CustomSkill { - - private List commands = new ArrayList<>(); - - public CustomCommandSkill(String identifier, CustomSkillModel customSkillModel, List commands) { - super(identifier, customSkillModel); - - if(ValidationHandler.isNull(commands)) return; - - this.commands.addAll(commands); - } - - @Override - public void executeSkill(LivingEntity livingEntity) { - for(String command : this.commands) { - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command.replace("%player%", livingEntity.getName())); - } - } -} diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/skills/CustomEffectSkill.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/skills/CustomEffectSkill.java deleted file mode 100644 index 012f721..0000000 --- a/plugin-modules/Core/src/net/aminecraftdev/custombosses/skills/CustomEffectSkill.java +++ /dev/null @@ -1,12 +0,0 @@ -package net.aminecraftdev.custombosses.skills; - -/** - * @author Charles Cullen - * @version 1.0.0 - * @since 08-Mar-18 - */ -public class CustomEffectSkill { - - //TODO: Setup EffectSkill type - -} diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/skills/CustomPotionSkill.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/skills/CustomPotionSkill.java deleted file mode 100644 index 2489d28..0000000 --- a/plugin-modules/Core/src/net/aminecraftdev/custombosses/skills/CustomPotionSkill.java +++ /dev/null @@ -1,12 +0,0 @@ -package net.aminecraftdev.custombosses.skills; - -/** - * @author Charles Cullen - * @version 1.0.0 - * @since 08-Mar-18 - */ -public class CustomPotionSkill { - - //TODO: Setup PotionSkill type - -} diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/skills/CustomSkill.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/skills/CustomSkill.java new file mode 100644 index 0000000..328cdcc --- /dev/null +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/skills/CustomSkill.java @@ -0,0 +1,98 @@ +package net.aminecraftdev.custombosses.skills; + +import net.aminecraftdev.custombosses.entities.components.skills.SkillComponent; +import net.aminecraftdev.custombosses.utils.IIdentifier; +import net.aminecraftdev.custombosses.skills.enums.SkillTarget; +import net.aminecraftdev.custombosses.skills.enums.SkillType; +import org.bukkit.entity.Player; + +import java.util.List; + +/** + * @author Charles Cullen + * @version 1.0.0 + * @since 11-Mar-18 + */ +public abstract class CustomSkill implements IIdentifier { + + private String name, showName, customMessage; + private List linkedSkills; + private SkillTarget skillTarget; + private SkillType skillType; + private boolean isGroup; + private int radius; + + public CustomSkill(SkillComponent skillComponent) { + this.name = skillComponent.getName(); + this.radius = skillComponent.getRadius(); + this.skillTarget = skillComponent.getSkillTarget(); + this.skillType = skillComponent.getSkillType(); + this.showName = skillComponent.getShowName(); + this.customMessage = skillComponent.getCustomMessage(); + this.linkedSkills = skillComponent.getSkillGroupComponent().getConnectedSkills(); + this.isGroup = skillComponent.getSkillGroupComponent().isGroup(); + } + + @Override + public String getIdentifier() { + return name; + } + + public SkillTarget getSkillTarget() { + return skillTarget; + } + + public void setSkillTarget(SkillTarget skillTarget) { + this.skillTarget = skillTarget; + } + + public SkillType getSkillType() { + return skillType; + } + + public void setSkillType(SkillType skillType) { + this.skillType = skillType; + } + + public int getRadius() { + return radius; + } + + public void setRadius(int radius) { + this.radius = radius; + } + + public String getShowName() { + return showName; + } + + public void setShowName(String showName) { + this.showName = showName; + } + + public String getCustomMessage() { + return customMessage; + } + + public void setCustomMessage(String customMessage) { + this.customMessage = customMessage; + } + + public boolean isGroup() { + return isGroup; + } + + public void setGroup(boolean group) { + isGroup = group; + } + + public List getLinkedSkills() { + return linkedSkills; + } + + public void setLinkedSkills(List linkedSkills) { + this.linkedSkills = linkedSkills; + } + + public abstract void execute(Player player); +} diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/skills/base/CustomSkill.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/skills/base/CustomSkill.java deleted file mode 100644 index a5ba138..0000000 --- a/plugin-modules/Core/src/net/aminecraftdev/custombosses/skills/base/CustomSkill.java +++ /dev/null @@ -1,32 +0,0 @@ -package net.aminecraftdev.custombosses.skills.base; - -import net.aminecraftdev.custombosses.handlers.IIdentifier; -import net.aminecraftdev.custombosses.models.CustomSkillModel; -import org.bukkit.entity.LivingEntity; - -/** - * @author Charles Cullen - * @version 1.0.0 - * @since 08-Mar-18 - */ -public abstract class CustomSkill implements IIdentifier { - - private CustomSkillModel customSkillModel; - private String identifier; - - public CustomSkill(String identifier, CustomSkillModel customSkillModel) { - this.identifier = identifier; - this.customSkillModel = customSkillModel; - } - - @Override - public String getIdentifier() { - return this.identifier; - } - - public CustomSkillModel getCustomSkillModel() { - return this.customSkillModel; - } - - public abstract void executeSkill(LivingEntity livingEntity); -} diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/skills/types/SkillTarget.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/skills/enums/SkillTarget.java similarity index 73% rename from plugin-modules/Core/src/net/aminecraftdev/custombosses/skills/types/SkillTarget.java rename to plugin-modules/Core/src/net/aminecraftdev/custombosses/skills/enums/SkillTarget.java index 750afa7..6562d7b 100644 --- a/plugin-modules/Core/src/net/aminecraftdev/custombosses/skills/types/SkillTarget.java +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/skills/enums/SkillTarget.java @@ -1,4 +1,4 @@ -package net.aminecraftdev.custombosses.skills.types; +package net.aminecraftdev.custombosses.skills.enums; /** * @author Charles Cullen diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/skills/types/SkillType.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/skills/enums/SkillType.java similarity index 72% rename from plugin-modules/Core/src/net/aminecraftdev/custombosses/skills/types/SkillType.java rename to plugin-modules/Core/src/net/aminecraftdev/custombosses/skills/enums/SkillType.java index 2745168..eb8523a 100644 --- a/plugin-modules/Core/src/net/aminecraftdev/custombosses/skills/types/SkillType.java +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/skills/enums/SkillType.java @@ -1,4 +1,4 @@ -package net.aminecraftdev.custombosses.skills.types; +package net.aminecraftdev.custombosses.skills.enums; /** * @author Charles Cullen diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/skills/types/CommandSkill.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/skills/types/CommandSkill.java new file mode 100644 index 0000000..9dd30ca --- /dev/null +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/skills/types/CommandSkill.java @@ -0,0 +1,40 @@ +package net.aminecraftdev.custombosses.skills.types; + +import net.aminecraftdev.custombosses.entities.components.skills.SkillComponent; +import net.aminecraftdev.custombosses.skills.CustomSkill; +import net.aminecraftdev.custombosses.entities.components.skills.data.CommandSkillData; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; + +import java.util.List; + +/** + * @author Charles Cullen + * @version 1.0.0 + * @since 12-Mar-18 + */ +public class CommandSkill extends CustomSkill { + + private List commands; + + public CommandSkill(SkillComponent skillComponent, CommandSkillData commandSkillData) { + super(skillComponent); + + this.commands = commandSkillData.getCommands(); + } + + public List getCommands() { + return commands; + } + + public void setCommands(List commands) { + this.commands = commands; + } + + @Override + public void execute(Player player) { + for(String s : getCommands()) { + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), s.replace("%player%", player.getName())); + } + } +} diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/skills/types/PotionSkill.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/skills/types/PotionSkill.java new file mode 100644 index 0000000..85579e4 --- /dev/null +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/skills/types/PotionSkill.java @@ -0,0 +1,40 @@ +package net.aminecraftdev.custombosses.skills.types; + +import net.aminecraftdev.custombosses.entities.components.skills.SkillComponent; +import net.aminecraftdev.custombosses.skills.CustomSkill; +import net.aminecraftdev.custombosses.entities.components.skills.data.PotionSkillData; +import net.aminecraftdev.custombosses.utils.parser.PotionParser; +import org.bukkit.entity.Player; +import org.bukkit.potion.PotionEffect; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author Charles Cullen + * @version 1.0.0 + * @since 12-Mar-18 + */ +public class PotionSkill extends CustomSkill { + + private List potionEffects; + + public PotionSkill(SkillComponent skillComponent, PotionSkillData potionSkillData) { + super(skillComponent); + + this.potionEffects = new ArrayList<>(); + + potionSkillData.getPotionEffects().forEach(potionEffectComponent -> this.potionEffects.add(new PotionParser(potionEffectComponent).parse())); + } + + public void setPotionEffects(List potionEffects) { + this.potionEffects = potionEffects; + } + + @Override + public void execute(Player player) { + for(PotionEffect potionEffect : this.potionEffects) { + player.addPotionEffect(potionEffect); + } + } +} diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/BossesGson.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/BossesGson.java new file mode 100644 index 0000000..dea164a --- /dev/null +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/BossesGson.java @@ -0,0 +1,34 @@ +package net.aminecraftdev.custombosses.utils; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import net.aminecraftdev.custombosses.utils.base.BaseSkillData; +import net.aminecraftdev.custombosses.skills.enums.SkillTarget; +import net.aminecraftdev.custombosses.skills.enums.SkillType; +import net.aminecraftdev.custombosses.utils.adapters.PotionEffectTypeAdapter; +import net.aminecraftdev.custombosses.utils.adapters.SkillDataAdapter; +import net.aminecraftdev.custombosses.utils.adapters.SkillTargetAdapter; +import net.aminecraftdev.custombosses.utils.adapters.SkillTypeAdapter; +import org.bukkit.potion.PotionEffectType; + +/** + * @author Charles Cullen + * @version 1.0.0 + * @since 11-Mar-18 + */ +public class BossesGson { + + private static Gson gson = new GsonBuilder() + .setPrettyPrinting() + .excludeFieldsWithoutExposeAnnotation() + .registerTypeAdapter(PotionEffectType.class, new PotionEffectTypeAdapter()) + .registerTypeAdapter(BaseSkillData.class, new SkillDataAdapter()) + .registerTypeAdapter(SkillTarget.class, new SkillTargetAdapter()) + .registerTypeAdapter(SkillType.class, new SkillTypeAdapter()) + .create(); + + public static Gson get() { + return gson; + } + +} diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/handlers/IIdentifier.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/IIdentifier.java similarity index 73% rename from plugin-modules/Core/src/net/aminecraftdev/custombosses/handlers/IIdentifier.java rename to plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/IIdentifier.java index 8851a8e..8c8d3d9 100644 --- a/plugin-modules/Core/src/net/aminecraftdev/custombosses/handlers/IIdentifier.java +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/IIdentifier.java @@ -1,4 +1,4 @@ -package net.aminecraftdev.custombosses.handlers; +package net.aminecraftdev.custombosses.utils; /** * @author Charles Cullen diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/adapters/PotionEffectTypeAdapter.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/adapters/PotionEffectTypeAdapter.java new file mode 100644 index 0000000..308e480 --- /dev/null +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/adapters/PotionEffectTypeAdapter.java @@ -0,0 +1,30 @@ +package net.aminecraftdev.custombosses.utils.adapters; + +import com.google.gson.*; +import net.aminecraftdev.custombosses.utils.base.BaseAdapter; +import org.bukkit.potion.PotionEffectType; + +import java.lang.reflect.Type; + +/** + * @author Charles Cullen + * @version 1.0.0 + * @since 11-Mar-18 + */ +public class PotionEffectTypeAdapter implements BaseAdapter { + + @Override + public PotionEffectType deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException { + String effectType = jsonElement.getAsString(); + PotionEffectType potionEffectType = PotionEffectType.getByName(effectType.toUpperCase()); + + if(potionEffectType == null) return null; + + return potionEffectType; + } + + @Override + public JsonElement serialize(PotionEffectType potionEffectType, Type type, JsonSerializationContext jsonSerializationContext) { + return new JsonPrimitive(potionEffectType.getName().toUpperCase()); + } +} diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/adapters/SkillDataAdapter.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/adapters/SkillDataAdapter.java new file mode 100644 index 0000000..8a9024e --- /dev/null +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/adapters/SkillDataAdapter.java @@ -0,0 +1,54 @@ +package net.aminecraftdev.custombosses.utils.adapters; + +import com.google.gson.*; +import net.aminecraftdev.custombosses.utils.base.BaseSkillData; +import net.aminecraftdev.custombosses.utils.base.BaseAdapter; + +import java.lang.reflect.Type; + +/** + * @author Charles Cullen + * @version 1.0.0 + * @since 11-Mar-18 + */ +public class SkillDataAdapter implements BaseAdapter { + + @Override + public BaseSkillData deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException { + final JsonObject member = (JsonObject) jsonElement; + final JsonElement typeString = get(member, "type"); + final JsonElement data = get(member, "data"); + final Type actualType = typeForName(typeString); + + return jsonDeserializationContext.deserialize(data, actualType); + } + + @Override + public JsonElement serialize(BaseSkillData baseSkillData, Type type, JsonSerializationContext jsonSerializationContext) { + final JsonObject jsonObject = new JsonObject(); + + jsonObject.addProperty("type", baseSkillData.getClass().getName()); + jsonObject.add("data", jsonSerializationContext.serialize(baseSkillData)); + + return jsonObject; + } + + private Type typeForName(final JsonElement typeElem) { + try { + return Class.forName(typeElem.getAsString()); + } + catch (ClassNotFoundException e) { + throw new JsonParseException(e); + } + } + + private JsonElement get(final JsonObject wrapper, final String memberName) { + final JsonElement elem = wrapper.get(memberName); + + if (elem == null) { + throw new JsonParseException( + "no '" + memberName + "' member found in json file."); + } + return elem; + } +} diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/adapters/SkillTargetAdapter.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/adapters/SkillTargetAdapter.java new file mode 100644 index 0000000..39b4780 --- /dev/null +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/adapters/SkillTargetAdapter.java @@ -0,0 +1,32 @@ +package net.aminecraftdev.custombosses.utils.adapters; + +import com.google.gson.*; +import net.aminecraftdev.custombosses.skills.enums.SkillTarget; +import net.aminecraftdev.custombosses.utils.base.BaseAdapter; + +import java.lang.reflect.Type; + +/** + * @author Charles Cullen + * @version 1.0.0 + * @since 11-Mar-18 + */ +public class SkillTargetAdapter implements BaseAdapter { + + @Override + public SkillTarget deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException { + String target = jsonElement.getAsString(); + + try { + return SkillTarget.valueOf(target); + } catch (Exception ex) { + return null; + } + } + + @Override + public JsonElement serialize(SkillTarget skillTarget, Type type, JsonSerializationContext jsonSerializationContext) { + return new JsonPrimitive(skillTarget.name().toUpperCase()); + } + +} diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/adapters/SkillTypeAdapter.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/adapters/SkillTypeAdapter.java new file mode 100644 index 0000000..3b75f4f --- /dev/null +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/adapters/SkillTypeAdapter.java @@ -0,0 +1,31 @@ +package net.aminecraftdev.custombosses.utils.adapters; + +import com.google.gson.*; +import net.aminecraftdev.custombosses.skills.enums.SkillType; +import net.aminecraftdev.custombosses.utils.base.BaseAdapter; + +import java.lang.reflect.Type; + +/** + * @author Charles Cullen + * @version 1.0.0 + * @since 11-Mar-18 + */ +public class SkillTypeAdapter implements BaseAdapter { + + @Override + public SkillType deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException { + String target = jsonElement.getAsString(); + + try { + return SkillType.valueOf(target); + } catch (Exception ex) { + return null; + } + } + + @Override + public JsonElement serialize(SkillType skillTarget, Type type, JsonSerializationContext jsonSerializationContext) { + return new JsonPrimitive(skillTarget.name().toUpperCase()); + } +} diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/base/BaseAdapter.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/base/BaseAdapter.java new file mode 100644 index 0000000..08e88c7 --- /dev/null +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/base/BaseAdapter.java @@ -0,0 +1,13 @@ +package net.aminecraftdev.custombosses.utils.base; + +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonSerializer; + +/** + * @author Charles Cullen + * @version 1.0.0 + * @since 11-Mar-18 + */ +public interface BaseAdapter extends JsonSerializer, JsonDeserializer { + +} diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/base/BaseParser.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/base/BaseParser.java new file mode 100644 index 0000000..7b7143c --- /dev/null +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/base/BaseParser.java @@ -0,0 +1,18 @@ +package net.aminecraftdev.custombosses.utils.base; + +/** + * @author Charles Cullen + * @version 1.0.0 + * @since 11-Mar-18 + */ +public abstract class BaseParser { + + protected Input input; + + public BaseParser(Input input) { + this.input = input; + } + + public abstract Output parse(); + +} diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/base/BaseSkillData.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/base/BaseSkillData.java new file mode 100644 index 0000000..6271cb7 --- /dev/null +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/base/BaseSkillData.java @@ -0,0 +1,8 @@ +package net.aminecraftdev.custombosses.utils.base; + +/** + * @author Charles Cullen + * @version 1.0.0 + * @since 11-Mar-18 + */ +public class BaseSkillData {} diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/handlers/models/IEquipmentHandler.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/models/IEquipmentHandler.java similarity index 89% rename from plugin-modules/Core/src/net/aminecraftdev/custombosses/handlers/models/IEquipmentHandler.java rename to plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/models/IEquipmentHandler.java index 0888a35..d76f979 100644 --- a/plugin-modules/Core/src/net/aminecraftdev/custombosses/handlers/models/IEquipmentHandler.java +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/models/IEquipmentHandler.java @@ -1,4 +1,4 @@ -package net.aminecraftdev.custombosses.handlers.models; +package net.aminecraftdev.custombosses.utils.models; import org.bukkit.inventory.ItemStack; diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/handlers/models/IPotionHandler.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/models/IPotionHandler.java similarity index 82% rename from plugin-modules/Core/src/net/aminecraftdev/custombosses/handlers/models/IPotionHandler.java rename to plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/models/IPotionHandler.java index a933dc4..beb4f3d 100644 --- a/plugin-modules/Core/src/net/aminecraftdev/custombosses/handlers/models/IPotionHandler.java +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/models/IPotionHandler.java @@ -1,4 +1,4 @@ -package net.aminecraftdev.custombosses.handlers.models; +package net.aminecraftdev.custombosses.utils.models; import org.bukkit.potion.PotionEffect; diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/handlers/models/ISkillHandler.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/models/ISkillHandler.java similarity index 83% rename from plugin-modules/Core/src/net/aminecraftdev/custombosses/handlers/models/ISkillHandler.java rename to plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/models/ISkillHandler.java index cb3a7a8..f5f008e 100644 --- a/plugin-modules/Core/src/net/aminecraftdev/custombosses/handlers/models/ISkillHandler.java +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/models/ISkillHandler.java @@ -1,4 +1,4 @@ -package net.aminecraftdev.custombosses.handlers.models; +package net.aminecraftdev.custombosses.utils.models; import net.aminecraftdev.custombosses.models.CustomSkillModel; diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/handlers/models/IStatsHandler.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/models/IStatsHandler.java similarity index 89% rename from plugin-modules/Core/src/net/aminecraftdev/custombosses/handlers/models/IStatsHandler.java rename to plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/models/IStatsHandler.java index 11b68b5..a7943a2 100644 --- a/plugin-modules/Core/src/net/aminecraftdev/custombosses/handlers/models/IStatsHandler.java +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/models/IStatsHandler.java @@ -1,4 +1,4 @@ -package net.aminecraftdev.custombosses.handlers.models; +package net.aminecraftdev.custombosses.utils.models; import org.bukkit.entity.EntityType; diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/parser/PotionParser.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/parser/PotionParser.java new file mode 100644 index 0000000..52e37ae --- /dev/null +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/parser/PotionParser.java @@ -0,0 +1,31 @@ +package net.aminecraftdev.custombosses.utils.parser; + +import net.aminecraftdev.custombosses.entities.components.PotionEffectComponent; +import net.aminecraftdev.custombosses.utils.base.BaseParser; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; + +/** + * @author Charles Cullen + * @version 1.0.0 + * @since 11-Mar-18 + */ +public class PotionParser extends BaseParser { + + public PotionParser(PotionEffectComponent potionEffectComponent) { + super(potionEffectComponent); + } + + @Override + public PotionEffect parse() { + int duration = this.input.getDuration(); + int level = this.input.getLevel(); + PotionEffectType potionEffectType = this.input.getPotionEffectType(); + + if(duration == -1) { + duration = 15000; + } + + return new PotionEffect(potionEffectType, duration*20, level-1); + } +} diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/parser/skills/CommandSkillParser.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/parser/skills/CommandSkillParser.java new file mode 100644 index 0000000..5594ff7 --- /dev/null +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/parser/skills/CommandSkillParser.java @@ -0,0 +1,29 @@ +package net.aminecraftdev.custombosses.utils.parser.skills; + +import net.aminecraftdev.custombosses.entities.components.skills.SkillComponent; +import net.aminecraftdev.custombosses.entities.components.skills.data.CommandSkillData; +import net.aminecraftdev.custombosses.skills.types.CommandSkill; +import net.aminecraftdev.custombosses.utils.base.BaseParser; + +/** + * @author Charles Cullen + * @version 1.0.0 + * @since 12-Mar-18 + */ +public class CommandSkillParser extends BaseParser { + + public CommandSkillParser(SkillComponent skillComponent) { + super(skillComponent); + } + + @Override + public CommandSkill parse() { + if(this.input.getSkillData() instanceof CommandSkillData) { + CommandSkillData commandSkillData = (CommandSkillData) this.input.getSkillData(); + + return new CommandSkill(this.input, commandSkillData); + } + + return null; + } +} diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/parser/skills/PotionSkillParser.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/parser/skills/PotionSkillParser.java new file mode 100644 index 0000000..6cb66c8 --- /dev/null +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/parser/skills/PotionSkillParser.java @@ -0,0 +1,29 @@ +package net.aminecraftdev.custombosses.utils.parser.skills; + +import net.aminecraftdev.custombosses.entities.components.skills.SkillComponent; +import net.aminecraftdev.custombosses.entities.components.skills.data.PotionSkillData; +import net.aminecraftdev.custombosses.skills.types.PotionSkill; +import net.aminecraftdev.custombosses.utils.base.BaseParser; + +/** + * @author Charles Cullen + * @version 1.0.0 + * @since 12-Mar-18 + */ +public class PotionSkillParser extends BaseParser { + + public PotionSkillParser(SkillComponent skillComponent) { + super(skillComponent); + } + + @Override + public PotionSkill parse() { + if(this.input.getSkillData() instanceof PotionSkillData) { + PotionSkillData potionSkillData = (PotionSkillData) this.input.getSkillData(); + + return new PotionSkill(this.input, potionSkillData); + } + + return null; + } +} diff --git a/pom.xml b/pom.xml index dda9286..62dba0c 100644 --- a/pom.xml +++ b/pom.xml @@ -20,7 +20,7 @@ - 3.0.0a + 3.0.0b