From be824fe0c1aeeac9670450083194b4067833c2ea Mon Sep 17 00:00:00 2001 From: AMinecraftDev Date: Wed, 27 Jun 2018 23:43:25 +0800 Subject: [PATCH] 3.0.0-SNAPSHOT-U12 Finished setting up all mechanics, and finished the manager. Added HealthMechanic, NameMechanic, PotionMechanic, WeaponMechanic and fixed SettingsMechanic as well as adding a PotionEffectConverter --- .../custombosses/CustomBosses.java | 10 ++- .../custombosses/entity/BossEntity.java | 51 +++------------ .../entity/elements/PotionElement.java | 18 ----- ...kManager.java => BossItemFileManager.java} | 6 +- .../managers/BossMechanicManager.java | 59 +++++++++++++++++ .../mechanics/EquipmentMechanic.java | 12 ++-- ...StatsMechanic.java => HealthMechanic.java} | 18 +---- .../custombosses/mechanics/NameMechanic.java | 31 +++++++++ .../mechanics/PotionMechanic.java | 38 +++++++++++ .../mechanics/SettingsMechanic.java | 49 ++++++++++++++ .../mechanics/WeaponMechanic.java | 65 +++++++++++++++++++ .../custombosses/utils/Debug.java | 1 + .../custombosses/utils/Versions.java | 46 +++++++++++++ .../{ => file}/reader/SpigotYmlReader.java | 2 +- .../{ => handlers}/ItemStackFileHandler.java | 2 +- .../utils/potion/PotionEffectConverter.java | 41 ++++++++++++ .../converters/PotionEffectTypeConverter.java | 22 +++++++ .../potion/holder/PotionEffectHolder.java | 22 +++++++ .../utils/version/VersionHandler.java | 27 ++++++++ pom.xml | 2 +- 20 files changed, 432 insertions(+), 90 deletions(-) delete mode 100644 plugin-modules/Core/src/net/aminecraftdev/custombosses/entity/elements/PotionElement.java rename plugin-modules/Core/src/net/aminecraftdev/custombosses/managers/{ItemStackManager.java => BossItemFileManager.java} (86%) create mode 100644 plugin-modules/Core/src/net/aminecraftdev/custombosses/managers/BossMechanicManager.java rename plugin-modules/Core/src/net/aminecraftdev/custombosses/mechanics/{StatsMechanic.java => HealthMechanic.java} (65%) create mode 100644 plugin-modules/Core/src/net/aminecraftdev/custombosses/mechanics/NameMechanic.java create mode 100644 plugin-modules/Core/src/net/aminecraftdev/custombosses/mechanics/PotionMechanic.java create mode 100644 plugin-modules/Core/src/net/aminecraftdev/custombosses/mechanics/SettingsMechanic.java create mode 100644 plugin-modules/Core/src/net/aminecraftdev/custombosses/mechanics/WeaponMechanic.java create mode 100644 plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/Versions.java rename plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/{ => file}/reader/SpigotYmlReader.java (93%) rename plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/itemstack/{ => handlers}/ItemStackFileHandler.java (97%) create mode 100644 plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/potion/PotionEffectConverter.java create mode 100644 plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/potion/converters/PotionEffectTypeConverter.java create mode 100644 plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/potion/holder/PotionEffectHolder.java create mode 100644 plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/version/VersionHandler.java diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/CustomBosses.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/CustomBosses.java index a6ff036..dfb6ca3 100644 --- a/plugin-modules/Core/src/net/aminecraftdev/custombosses/CustomBosses.java +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/CustomBosses.java @@ -1,7 +1,8 @@ package net.aminecraftdev.custombosses; import lombok.Getter; -import net.aminecraftdev.custombosses.managers.ItemStackManager; +import net.aminecraftdev.custombosses.managers.BossItemFileManager; +import net.aminecraftdev.custombosses.managers.BossMechanicManager; import net.aminecraftdev.custombosses.utils.IReloadable; import org.bukkit.plugin.java.JavaPlugin; @@ -12,13 +13,16 @@ import org.bukkit.plugin.java.JavaPlugin; */ public class CustomBosses extends JavaPlugin implements IReloadable { - @Getter private ItemStackManager itemStackManager; + @Getter private BossMechanicManager bossMechanicManager; + @Getter private BossItemFileManager itemStackManager; @Override public void onEnable() { - this.itemStackManager = new ItemStackManager(this); + this.itemStackManager = new BossItemFileManager(this); reload(); + + this.bossMechanicManager.load(); } diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/entity/BossEntity.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/entity/BossEntity.java index ef671f0..9fe4ce5 100644 --- a/plugin-modules/Core/src/net/aminecraftdev/custombosses/entity/BossEntity.java +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/entity/BossEntity.java @@ -4,6 +4,7 @@ import com.google.gson.annotations.Expose; import lombok.Getter; import lombok.Setter; import net.aminecraftdev.custombosses.entity.elements.*; +import net.aminecraftdev.custombosses.utils.potion.holder.PotionEffectHolder; import java.util.List; @@ -14,19 +15,19 @@ import java.util.List; */ public class BossEntity { - @Expose private final List potions; - @Expose private final MainStatsElement mainStats; - @Expose private final EquipmentElement equipment; - @Expose private final MessagesElement messages; - @Expose private final CommandsElement commands; - @Expose private final SkillsElement skills; - @Expose private final HandsElement hands; - @Expose private final DropsElement drops; + @Expose @Getter private final List potions; + @Expose @Getter private final MainStatsElement mainStats; + @Expose @Getter private final EquipmentElement equipment; + @Expose @Getter private final MessagesElement messages; + @Expose @Getter private final CommandsElement commands; + @Expose @Getter private final SkillsElement skills; + @Expose @Getter private final HandsElement hands; + @Expose @Getter private final DropsElement drops; @Expose @Getter @Setter private String spawnItem; @Expose @Getter @Setter private boolean editing; - public BossEntity(boolean editing, MainStatsElement mainStats, String spawnItem, EquipmentElement equipment, HandsElement hands, List potions, + public BossEntity(boolean editing, MainStatsElement mainStats, String spawnItem, EquipmentElement equipment, HandsElement hands, List potions, SkillsElement skills, DropsElement drops, MessagesElement messages, CommandsElement commands) { this.editing = editing; this.mainStats = mainStats; @@ -39,36 +40,4 @@ public class BossEntity { this.messages = messages; this.commands = commands; } - - public MainStatsElement getMainStats() { - return mainStats; - } - - public EquipmentElement getEquipment() { - return equipment; - } - - public HandsElement getHands() { - return hands; - } - - public List getPotions() { - return potions; - } - - public SkillsElement getSkills() { - return skills; - } - - public DropsElement getDrops() { - return drops; - } - - public MessagesElement getMessages() { - return messages; - } - - public CommandsElement getCommands() { - return commands; - } } diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/entity/elements/PotionElement.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/entity/elements/PotionElement.java deleted file mode 100644 index 7dc7767..0000000 --- a/plugin-modules/Core/src/net/aminecraftdev/custombosses/entity/elements/PotionElement.java +++ /dev/null @@ -1,18 +0,0 @@ -package net.aminecraftdev.custombosses.entity.elements; - -import com.google.gson.annotations.Expose; -import lombok.Getter; -import lombok.Setter; - -/** - * @author Charles Cullen - * @version 1.0.0 - * @since 14-May-18 - */ -public class PotionElement { - - @Expose @Getter @Setter private String type; - @Expose @Getter @Setter private int leve; - @Expose @Getter @Setter private long duration; - -} diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/managers/ItemStackManager.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/managers/BossItemFileManager.java similarity index 86% rename from plugin-modules/Core/src/net/aminecraftdev/custombosses/managers/ItemStackManager.java rename to plugin-modules/Core/src/net/aminecraftdev/custombosses/managers/BossItemFileManager.java index 39488d5..b7172a7 100644 --- a/plugin-modules/Core/src/net/aminecraftdev/custombosses/managers/ItemStackManager.java +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/managers/BossItemFileManager.java @@ -5,7 +5,7 @@ import net.aminecraftdev.custombosses.utils.ILoadable; import net.aminecraftdev.custombosses.utils.IReloadable; import net.aminecraftdev.custombosses.utils.ISavable; import net.aminecraftdev.custombosses.utils.itemstack.ItemStackConverter; -import net.aminecraftdev.custombosses.utils.itemstack.ItemStackFileHandler; +import net.aminecraftdev.custombosses.utils.itemstack.handlers.ItemStackFileHandler; import net.aminecraftdev.custombosses.utils.itemstack.holder.ItemStackHolder; import org.bukkit.plugin.java.JavaPlugin; @@ -18,14 +18,14 @@ import java.util.Map; * @version 1.0.0 * @since 03-Jun-18 */ -public class ItemStackManager implements ILoadable, ISavable, IReloadable { +public class BossItemFileManager implements ILoadable, ISavable, IReloadable { @Getter private final ItemStackConverter itemStackConverter = new ItemStackConverter(); private Map itemStackHolders = new HashMap<>(); private ItemStackFileHandler itemStackFileHandler; - public ItemStackManager(JavaPlugin javaPlugin) { + public BossItemFileManager(JavaPlugin javaPlugin) { File file = new File(javaPlugin.getDataFolder(), "items.json"); this.itemStackFileHandler = new ItemStackFileHandler(javaPlugin, file, true); diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/managers/BossMechanicManager.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/managers/BossMechanicManager.java new file mode 100644 index 0000000..7183b95 --- /dev/null +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/managers/BossMechanicManager.java @@ -0,0 +1,59 @@ +package net.aminecraftdev.custombosses.managers; + +import net.aminecraftdev.custombosses.CustomBosses; +import net.aminecraftdev.custombosses.entity.BossEntity; +import net.aminecraftdev.custombosses.holder.ActiveBossHolder; +import net.aminecraftdev.custombosses.mechanics.*; +import net.aminecraftdev.custombosses.utils.Debug; +import net.aminecraftdev.custombosses.utils.ILoadable; +import net.aminecraftdev.custombosses.utils.IMechanic; + +import java.util.LinkedList; +import java.util.Queue; + +/** + * @author Charles Cullen + * @version 1.0.0 + * @since 27-Jun-18 + */ +public class BossMechanicManager implements ILoadable { + + private final CustomBosses customBosses; + private Queue mechanicQueue; + + public BossMechanicManager(CustomBosses customBosses) { + this.customBosses = customBosses; + } + + @Override + public void load() { + this.mechanicQueue = new LinkedList<>(); + + this.mechanicQueue.add(new EntityTypeMechanic()); + this.mechanicQueue.add(new NameMechanic()); + this.mechanicQueue.add(new HealthMechanic()); + this.mechanicQueue.add(new EquipmentMechanic(this.customBosses.getItemStackManager())); + this.mechanicQueue.add(new WeaponMechanic(this.customBosses.getItemStackManager())); + this.mechanicQueue.add(new PotionMechanic()); + this.mechanicQueue.add(new SettingsMechanic()); + } + + public boolean handleMechanicApplication(BossEntity bossEntity, ActiveBossHolder activeBossHolder) { + if(this.mechanicQueue != null && bossEntity != null && activeBossHolder != null) { + Queue queue = new LinkedList<>(this.mechanicQueue); + + while(!queue.isEmpty()) { + IMechanic mechanic = queue.poll(); + + if(mechanic == null) continue; + + if(!mechanic.applyMechanic(bossEntity, activeBossHolder)) { + Debug.MECHANIC_APPLICATION_FAILED.debug(mechanic.getClass().getSimpleName()); + return false; + } + } + } + + return true; + } +} diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/mechanics/EquipmentMechanic.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/mechanics/EquipmentMechanic.java index 7126a1f..911a03f 100644 --- a/plugin-modules/Core/src/net/aminecraftdev/custombosses/mechanics/EquipmentMechanic.java +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/mechanics/EquipmentMechanic.java @@ -3,7 +3,7 @@ package net.aminecraftdev.custombosses.mechanics; import net.aminecraftdev.custombosses.entity.BossEntity; import net.aminecraftdev.custombosses.entity.elements.EquipmentElement; import net.aminecraftdev.custombosses.holder.ActiveBossHolder; -import net.aminecraftdev.custombosses.managers.ItemStackManager; +import net.aminecraftdev.custombosses.managers.BossItemFileManager; import net.aminecraftdev.custombosses.utils.IMechanic; import net.aminecraftdev.custombosses.utils.itemstack.holder.ItemStackHolder; import org.bukkit.entity.LivingEntity; @@ -17,14 +17,16 @@ import org.bukkit.inventory.ItemStack; */ public class EquipmentMechanic implements IMechanic { - private ItemStackManager itemStackManager; + private BossItemFileManager itemStackManager; - public EquipmentMechanic(ItemStackManager itemStackManager) { + public EquipmentMechanic(BossItemFileManager itemStackManager) { this.itemStackManager = itemStackManager; } @Override public boolean applyMechanic(BossEntity bossEntity, ActiveBossHolder activeBossHolder) { + if(activeBossHolder.getLivingEntity() == null) return false; + LivingEntity livingEntity = activeBossHolder.getLivingEntity(); EquipmentElement equipmentElement = bossEntity.getEquipment(); EntityEquipment entityEquipment = livingEntity.getEquipment(); @@ -40,7 +42,6 @@ public class EquipmentMechanic implements IMechanic { ItemStack itemStack = this.itemStackManager.getItemStackConverter().from(itemStackHolder); entityEquipment.setHelmet(itemStack); - entityEquipment.setHelmetDropChance(0); } } @@ -51,7 +52,6 @@ public class EquipmentMechanic implements IMechanic { ItemStack itemStack = this.itemStackManager.getItemStackConverter().from(itemStackHolder); entityEquipment.setChestplate(itemStack); - entityEquipment.setChestplateDropChance(0); } } @@ -62,7 +62,6 @@ public class EquipmentMechanic implements IMechanic { ItemStack itemStack = this.itemStackManager.getItemStackConverter().from(itemStackHolder); entityEquipment.setLeggings(itemStack); - entityEquipment.setLeggingsDropChance(0); } } @@ -73,7 +72,6 @@ public class EquipmentMechanic implements IMechanic { ItemStack itemStack = this.itemStackManager.getItemStackConverter().from(itemStackHolder); entityEquipment.setBoots(itemStack); - entityEquipment.setBootsDropChance(0); } } diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/mechanics/StatsMechanic.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/mechanics/HealthMechanic.java similarity index 65% rename from plugin-modules/Core/src/net/aminecraftdev/custombosses/mechanics/StatsMechanic.java rename to plugin-modules/Core/src/net/aminecraftdev/custombosses/mechanics/HealthMechanic.java index 960129d..e773539 100644 --- a/plugin-modules/Core/src/net/aminecraftdev/custombosses/mechanics/StatsMechanic.java +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/mechanics/HealthMechanic.java @@ -4,16 +4,15 @@ import net.aminecraftdev.custombosses.entity.BossEntity; import net.aminecraftdev.custombosses.holder.ActiveBossHolder; import net.aminecraftdev.custombosses.utils.Debug; import net.aminecraftdev.custombosses.utils.IMechanic; -import net.aminecraftdev.custombosses.utils.StringUtils; -import net.aminecraftdev.custombosses.utils.reader.SpigotYmlReader; +import net.aminecraftdev.custombosses.utils.file.reader.SpigotYmlReader; import org.bukkit.entity.LivingEntity; /** * @author Charles Cullen * @version 1.0.0 - * @since 02-Jun-18 + * @since 27-Jun-18 */ -public class StatsMechanic implements IMechanic { +public class HealthMechanic implements IMechanic { @Override public boolean applyMechanic(BossEntity bossEntity, ActiveBossHolder activeBossHolder) { @@ -30,17 +29,6 @@ public class StatsMechanic implements IMechanic { livingEntity.setMaxHealth(maxHealth); livingEntity.setHealth(maxHealth); - - String customName = bossEntity.getMainStats().getDisplayName(); - - if(customName != null) { - livingEntity.setCustomName(StringUtils.get().translateColor(customName)); - livingEntity.setCustomNameVisible(true); - } - - livingEntity.setRemoveWhenFarAway(false); - livingEntity.setCanPickupItems(false); - return true; } } diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/mechanics/NameMechanic.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/mechanics/NameMechanic.java new file mode 100644 index 0000000..f489a7a --- /dev/null +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/mechanics/NameMechanic.java @@ -0,0 +1,31 @@ +package net.aminecraftdev.custombosses.mechanics; + +import net.aminecraftdev.custombosses.entity.BossEntity; +import net.aminecraftdev.custombosses.holder.ActiveBossHolder; +import net.aminecraftdev.custombosses.utils.IMechanic; +import net.aminecraftdev.custombosses.utils.StringUtils; +import org.bukkit.entity.LivingEntity; + +/** + * @author Charles Cullen + * @version 1.0.0 + * @since 27-Jun-18 + */ +public class NameMechanic implements IMechanic { + + @Override + public boolean applyMechanic(BossEntity bossEntity, ActiveBossHolder activeBossHolder) { + if(activeBossHolder.getLivingEntity() == null) return false; + + LivingEntity livingEntity = activeBossHolder.getLivingEntity(); + + String customName = bossEntity.getMainStats().getDisplayName(); + + if(customName != null) { + livingEntity.setCustomName(StringUtils.get().translateColor(customName)); + livingEntity.setCustomNameVisible(true); + } + + return true; + } +} diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/mechanics/PotionMechanic.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/mechanics/PotionMechanic.java new file mode 100644 index 0000000..1d16466 --- /dev/null +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/mechanics/PotionMechanic.java @@ -0,0 +1,38 @@ +package net.aminecraftdev.custombosses.mechanics; + +import net.aminecraftdev.custombosses.entity.BossEntity; +import net.aminecraftdev.custombosses.holder.ActiveBossHolder; +import net.aminecraftdev.custombosses.utils.IMechanic; +import net.aminecraftdev.custombosses.utils.potion.PotionEffectConverter; +import net.aminecraftdev.custombosses.utils.potion.holder.PotionEffectHolder; +import org.bukkit.entity.LivingEntity; + +import java.util.List; + +/** + * @author Charles Cullen + * @version 1.0.0 + * @since 27-Jun-18 + */ +public class PotionMechanic implements IMechanic { + + private PotionEffectConverter potionEffectConverter; + + public PotionMechanic() { + this.potionEffectConverter = new PotionEffectConverter(); + } + + @Override + public boolean applyMechanic(BossEntity bossEntity, ActiveBossHolder activeBossHolder) { + if(activeBossHolder.getLivingEntity() == null) return false; + + LivingEntity livingEntity = activeBossHolder.getLivingEntity(); + List potionElements = bossEntity.getPotions(); + + if(potionElements != null && !potionElements.isEmpty()) { + potionElements.forEach(potionElement -> livingEntity.addPotionEffect(this.potionEffectConverter.from(potionElement))); + } + + return true; + } +} diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/mechanics/SettingsMechanic.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/mechanics/SettingsMechanic.java new file mode 100644 index 0000000..303c028 --- /dev/null +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/mechanics/SettingsMechanic.java @@ -0,0 +1,49 @@ +package net.aminecraftdev.custombosses.mechanics; + +import net.aminecraftdev.custombosses.entity.BossEntity; +import net.aminecraftdev.custombosses.holder.ActiveBossHolder; +import net.aminecraftdev.custombosses.utils.Debug; +import net.aminecraftdev.custombosses.utils.IMechanic; +import net.aminecraftdev.custombosses.utils.StringUtils; +import net.aminecraftdev.custombosses.utils.file.reader.SpigotYmlReader; +import net.aminecraftdev.custombosses.utils.version.VersionHandler; +import org.bukkit.entity.LivingEntity; +import org.bukkit.inventory.EntityEquipment; + +/** + * @author Charles Cullen + * @version 1.0.0 + * @since 02-Jun-18 + */ +public class SettingsMechanic implements IMechanic { + + private VersionHandler versionHandler; + + public SettingsMechanic() { + this.versionHandler = new VersionHandler(); + } + + @Override + public boolean applyMechanic(BossEntity bossEntity, ActiveBossHolder activeBossHolder) { + if(activeBossHolder.getLivingEntity() == null) return false; + + LivingEntity livingEntity = activeBossHolder.getLivingEntity(); + EntityEquipment entityEquipment = livingEntity.getEquipment(); + + livingEntity.setRemoveWhenFarAway(false); + livingEntity.setCanPickupItems(false); + entityEquipment.setHelmetDropChance(0.0F); + entityEquipment.setChestplateDropChance(0.0F); + entityEquipment.setLeggingsDropChance(0.0F); + entityEquipment.setBootsDropChance(0.0F); + + if(this.versionHandler.canUseOffHand()) { + entityEquipment.setItemInMainHandDropChance(0.0F); + entityEquipment.setItemInOffHandDropChance(0.0F); + } else { + entityEquipment.setItemInHandDropChance(0.0F); + } + + return true; + } +} diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/mechanics/WeaponMechanic.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/mechanics/WeaponMechanic.java new file mode 100644 index 0000000..6b56f0a --- /dev/null +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/mechanics/WeaponMechanic.java @@ -0,0 +1,65 @@ +package net.aminecraftdev.custombosses.mechanics; + +import net.aminecraftdev.custombosses.entity.BossEntity; +import net.aminecraftdev.custombosses.entity.elements.HandsElement; +import net.aminecraftdev.custombosses.holder.ActiveBossHolder; +import net.aminecraftdev.custombosses.managers.BossItemFileManager; +import net.aminecraftdev.custombosses.utils.IMechanic; +import net.aminecraftdev.custombosses.utils.version.VersionHandler; +import net.aminecraftdev.custombosses.utils.itemstack.holder.ItemStackHolder; +import org.bukkit.entity.LivingEntity; +import org.bukkit.inventory.EntityEquipment; +import org.bukkit.inventory.ItemStack; + +/** + * @author Charles Cullen + * @version 1.0.0 + * @since 27-Jun-18 + */ +public class WeaponMechanic implements IMechanic { + + private BossItemFileManager itemStackManager; + private VersionHandler versionHandler; + + public WeaponMechanic(BossItemFileManager itemStackManager) { + this.itemStackManager = itemStackManager; + this.versionHandler = new VersionHandler(); + } + + @Override + public boolean applyMechanic(BossEntity bossEntity, ActiveBossHolder activeBossHolder) { + if(activeBossHolder.getLivingEntity() == null) return false; + + LivingEntity livingEntity = activeBossHolder.getLivingEntity(); + EntityEquipment entityEquipment = livingEntity.getEquipment(); + HandsElement handsElement = bossEntity.getHands(); + String mainHand = handsElement.getMainHand(); + String offHand = handsElement.getOffHand(); + + if(mainHand != null) { + ItemStackHolder itemStackHolder = this.itemStackManager.getItemStackHolder(mainHand); + + if(itemStackHolder != null) { + ItemStack itemStack = this.itemStackManager.getItemStackConverter().from(itemStackHolder); + + if(this.versionHandler.canUseOffHand()) { + entityEquipment.setItemInMainHand(itemStack); + } else { + entityEquipment.setItemInHand(itemStack); + } + } + } + + if(offHand != null && this.versionHandler.canUseOffHand()) { + ItemStackHolder itemStackHolder = this.itemStackManager.getItemStackHolder(offHand); + + if(itemStackHolder != null) { + ItemStack itemStack = this.itemStackManager.getItemStackConverter().from(itemStackHolder); + + entityEquipment.setItemInOffHand(itemStack); + } + } + + return false; + } +} diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/Debug.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/Debug.java index 5d9d85b..5561540 100644 --- a/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/Debug.java +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/Debug.java @@ -11,6 +11,7 @@ public enum Debug { NULL_ENTITY_TYPE("The {0} boss or minion has got an invalid entity type."), MAX_HEALTH("You cannot set the max health higher than {0}. You can adjust your max health in the spigot.yml file and restart your server to increase this."), + MECHANIC_APPLICATION_FAILED("Some mechanics have failed to be applied. It got stuck at {0} mechanic."), ATTEMPTED_TO_SPAWN_WHILE_DISABLED("The {0} boss/minion attempted to spawn while editing is enabled."); diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/Versions.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/Versions.java new file mode 100644 index 0000000..cb2f6a8 --- /dev/null +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/Versions.java @@ -0,0 +1,46 @@ +package net.aminecraftdev.custombosses.utils; + +import lombok.Getter; + +/** + * @author Charles Cullen + * @version 1.0.0 + * @since 27-Jun-18 + */ +public enum Versions { + + v1_7_R3(1, "1.7.9"), + v1_7_R4(2, "1.7.10"), + v1_8_R1(3, "1.8"), + v1_8_R2(4, "1.8.3"), + v1_8_R3(5, "1.8.9"), + v1_9_R1(6, "1.9"), + v1_9_R2(7, "1.9.4"), + v1_10_R1(8, "1.10"), + v1_11_R1(9, "1.11.2"), + v1_12_R1(10, "1.12.1"); + + @Getter private String displayVersion, bukkitVersion; + private int weight; + + Versions(int weight, String displayVersion) { + this.weight = weight; + this.displayVersion = displayVersion; + this.bukkitVersion = name(); + } + + public boolean isHigherThan(Versions input) { + return this.weight >= input.weight; + } + + public static Versions getVersion(String input) { + for(Versions versions : values()) { + if(versions.getBukkitVersion().equalsIgnoreCase(input)) { + return versions; + } + } + + return null; + } + +} diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/reader/SpigotYmlReader.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/file/reader/SpigotYmlReader.java similarity index 93% rename from plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/reader/SpigotYmlReader.java rename to plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/file/reader/SpigotYmlReader.java index 886d57a..3f0ba92 100644 --- a/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/reader/SpigotYmlReader.java +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/file/reader/SpigotYmlReader.java @@ -1,4 +1,4 @@ -package net.aminecraftdev.custombosses.utils.reader; +package net.aminecraftdev.custombosses.utils.file.reader; import net.aminecraftdev.custombosses.utils.IYmlReader; import net.aminecraftdev.custombosses.utils.file.FileUtils; diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/itemstack/ItemStackFileHandler.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/itemstack/handlers/ItemStackFileHandler.java similarity index 97% rename from plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/itemstack/ItemStackFileHandler.java rename to plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/itemstack/handlers/ItemStackFileHandler.java index d153aa9..c6274f3 100644 --- a/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/itemstack/ItemStackFileHandler.java +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/itemstack/handlers/ItemStackFileHandler.java @@ -1,4 +1,4 @@ -package net.aminecraftdev.custombosses.utils.itemstack; +package net.aminecraftdev.custombosses.utils.itemstack.handlers; import com.google.gson.Gson; import com.google.gson.GsonBuilder; diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/potion/PotionEffectConverter.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/potion/PotionEffectConverter.java new file mode 100644 index 0000000..689106f --- /dev/null +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/potion/PotionEffectConverter.java @@ -0,0 +1,41 @@ +package net.aminecraftdev.custombosses.utils.potion; + +import net.aminecraftdev.custombosses.utils.IConverter; +import net.aminecraftdev.custombosses.utils.potion.converters.PotionEffectTypeConverter; +import net.aminecraftdev.custombosses.utils.potion.holder.PotionEffectHolder; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; + +/** + * @author Charles Cullen + * @version 1.0.0 + * @since 27-Jun-18 + */ +public class PotionEffectConverter implements IConverter { + + private PotionEffectTypeConverter potionEffectTypeConverter; + + public PotionEffectConverter() { + this.potionEffectTypeConverter = new PotionEffectTypeConverter(); + } + + @Override + public PotionEffectHolder to(PotionEffect potionEffect) { + PotionEffectType potionEffectType = potionEffect.getType(); + int duration = potionEffect.getDuration(); + int level = potionEffect.getAmplifier(); + + return new PotionEffectHolder(this.potionEffectTypeConverter.to(potionEffectType), level+1, duration/20); + } + + @Override + public PotionEffect from(PotionEffectHolder potionHolder) { + String potionEffectType = potionHolder.getType(); + Integer duration = potionHolder.getDuration(); + Integer level = potionHolder.getLevel(); + + if(potionEffectType != null && duration != null && level != null) return new PotionEffect(this.potionEffectTypeConverter.from(potionEffectType), level-1, (duration*20)); + + return null; + } +} diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/potion/converters/PotionEffectTypeConverter.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/potion/converters/PotionEffectTypeConverter.java new file mode 100644 index 0000000..1770446 --- /dev/null +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/potion/converters/PotionEffectTypeConverter.java @@ -0,0 +1,22 @@ +package net.aminecraftdev.custombosses.utils.potion.converters; + +import net.aminecraftdev.custombosses.utils.IConverter; +import org.bukkit.potion.PotionEffectType; + +/** + * @author Charles Cullen + * @version 1.0.0 + * @since 27-Jun-18 + */ +public class PotionEffectTypeConverter implements IConverter { + + @Override + public String to(PotionEffectType potionEffectType) { + return potionEffectType.getName().toUpperCase(); + } + + @Override + public PotionEffectType from(String s) { + return PotionEffectType.getByName(s); + } +} diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/potion/holder/PotionEffectHolder.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/potion/holder/PotionEffectHolder.java new file mode 100644 index 0000000..7f809ae --- /dev/null +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/potion/holder/PotionEffectHolder.java @@ -0,0 +1,22 @@ +package net.aminecraftdev.custombosses.utils.potion.holder; + +import com.google.gson.annotations.Expose; +import lombok.Getter; + +/** + * @author Charles Cullen + * @version 1.0.0 + * @since 27-Jun-18 + */ +public class PotionEffectHolder { + + @Expose @Getter private String type; + @Expose @Getter private Integer level, duration; + + public PotionEffectHolder(String type, Integer level, Integer duration) { + this.type = type; + this.level = level; + this.duration = duration; + } + +} diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/version/VersionHandler.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/version/VersionHandler.java new file mode 100644 index 0000000..050e1a3 --- /dev/null +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/version/VersionHandler.java @@ -0,0 +1,27 @@ +package net.aminecraftdev.custombosses.utils.version; + +import net.aminecraftdev.custombosses.utils.Versions; +import org.bukkit.Bukkit; + +/** + * @author Charles Cullen + * @version 1.0.0 + * @since 27-Jun-18 + */ +public class VersionHandler { + + private Versions version; + + public VersionHandler() { + String v = Bukkit.getServer().getClass().getPackage().getName(); + + v = v.substring(v.lastIndexOf(".") + 1); + + this.version = Versions.getVersion(v); + } + + public boolean canUseOffHand() { + return this.version.isHigherThan(Versions.v1_9_R1); + } + +} diff --git a/pom.xml b/pom.xml index 40c566b..123735b 100644 --- a/pom.xml +++ b/pom.xml @@ -19,7 +19,7 @@ - 3.0.0-SNAPSHOT-U11 + 3.0.0-SNAPSHOT-U12 CustomBosses net.aminecraftdev.custombosses.CustomBosses AMinecraftDev