diff --git a/Extensions/MMO/build.gradle b/Extensions/MMO/build.gradle new file mode 100644 index 00000000..3eb91a11 --- /dev/null +++ b/Extensions/MMO/build.gradle @@ -0,0 +1,22 @@ +repositories { + maven { + url 'https://mvn.lumine.io/repository/maven-public/' + } +} + +dependencies { + compileOnly 'org.spigotmc:spigot-api:1.15.2-R0.1-SNAPSHOT' + compileOnly project(':plugin') + compileOnly 'net.Indyuce:MMOCore:1.4.11' + compileOnly 'net.Indyuce:MMOItems:6.4' +} + +jar{ + archiveFileName = project.name + " Extension" + ".jar" +} + +description = 'MMO' + +tasks.withType(Jar) { + destinationDirectory = file("$rootDir/bin/") +} \ No newline at end of file diff --git a/Extensions/MMO/src/main/java/com/willfp/ecoenchants/mmo/MMOEnchantment.java b/Extensions/MMO/src/main/java/com/willfp/ecoenchants/mmo/MMOEnchantment.java new file mode 100644 index 00000000..d7208dd0 --- /dev/null +++ b/Extensions/MMO/src/main/java/com/willfp/ecoenchants/mmo/MMOEnchantment.java @@ -0,0 +1,10 @@ +package com.willfp.ecoenchants.mmo; + +import com.willfp.ecoenchants.enchantments.EcoEnchant; +import com.willfp.ecoenchants.util.optional.Prerequisite; + +public abstract class MMOEnchantment extends EcoEnchant { + protected MMOEnchantment(String key, EnchantmentType type, Prerequisite... prerequisites) { + super(key, type, MMOMain.class, MMOPrerequisites.append(prerequisites, MMOPrerequisites.HAS_MMOCORE)); + } +} diff --git a/Extensions/MMO/src/main/java/com/willfp/ecoenchants/mmo/MMOMain.java b/Extensions/MMO/src/main/java/com/willfp/ecoenchants/mmo/MMOMain.java new file mode 100644 index 00000000..c46d6d47 --- /dev/null +++ b/Extensions/MMO/src/main/java/com/willfp/ecoenchants/mmo/MMOMain.java @@ -0,0 +1,44 @@ +package com.willfp.ecoenchants.mmo; + +import com.willfp.ecoenchants.enchantments.EcoEnchant; +import com.willfp.ecoenchants.extensions.Extension; +import com.willfp.ecoenchants.mmo.enchants.Athletic; +import com.willfp.ecoenchants.mmo.enchants.Augment; +import com.willfp.ecoenchants.mmo.enchants.abilities.Discounted; +import com.willfp.ecoenchants.mmo.enchants.abilities.Recover; +import com.willfp.ecoenchants.mmo.enchants.mana.Drain; +import com.willfp.ecoenchants.mmo.enchants.mana.Elixir; +import com.willfp.ecoenchants.mmo.enchants.mana.Siphon; +import com.willfp.ecoenchants.mmo.enchants.mana.Spirituality; +import com.willfp.ecoenchants.mmo.enchants.stamina.Endurance; +import com.willfp.ecoenchants.mmo.enchants.stamina.Fortitude; +import com.willfp.ecoenchants.mmo.enchants.stamina.Motivate; +import com.willfp.ecoenchants.util.Logger; + +public class MMOMain extends Extension { + public static final EcoEnchant ELIXIR = new Elixir(); + public static final EcoEnchant SIPHON = new Siphon(); + public static final EcoEnchant DRAIN = new Drain(); + public static final EcoEnchant SPIRITUALITY = new Spirituality(); + public static final EcoEnchant AUGMENT = new Augment(); + public static final EcoEnchant DISCOUNTED = new Discounted(); + public static final EcoEnchant RECOVER = new Recover(); + public static final EcoEnchant ENDURANCE = new Endurance(); + public static final EcoEnchant FORTITUDE = new Fortitude(); + public static final EcoEnchant MOTIVATE = new Motivate(); + public static final EcoEnchant ATHLETIC = new Athletic(); + + @Override + protected void onEnable() { + if(!MMOPrerequisites.HAS_MMOCORE.isMet()) { + Logger.error("MMO Extension requires MMOCore to be installed!"); + Logger.error("Disabling..."); + this.disable(); + } + } + + @Override + protected void onDisable() { + + } +} diff --git a/Extensions/MMO/src/main/java/com/willfp/ecoenchants/mmo/MMOPrerequisites.java b/Extensions/MMO/src/main/java/com/willfp/ecoenchants/mmo/MMOPrerequisites.java new file mode 100644 index 00000000..2796a63c --- /dev/null +++ b/Extensions/MMO/src/main/java/com/willfp/ecoenchants/mmo/MMOPrerequisites.java @@ -0,0 +1,29 @@ +package com.willfp.ecoenchants.mmo; + +import com.willfp.ecoenchants.util.optional.Prerequisite; +import org.bukkit.Bukkit; +import org.bukkit.plugin.Plugin; + +import java.util.Arrays; +import java.util.Set; +import java.util.stream.Collectors; + +public class MMOPrerequisites { + private static final Set enabledPlugins = Arrays.stream(Bukkit.getPluginManager().getPlugins()).map(Plugin::getName).collect(Collectors.toSet()); + + public static final Prerequisite HAS_MMOCORE = new Prerequisite( + () -> enabledPlugins.contains("MMOCore"), + "Has mmocore installed" + ); + public static final Prerequisite HAS_MMOITEMS = new Prerequisite( + () -> enabledPlugins.contains("MMOItems"), + "Has mmoitems installed" + ); + + public static Prerequisite[] append(Prerequisite[] array, Prerequisite newElement) { + Prerequisite[] copy = new Prerequisite[array.length+1]; + System.arraycopy(array, 0, copy, 0, array.length); + copy[array.length] = newElement; + return copy; + } +} diff --git a/Extensions/MMO/src/main/java/com/willfp/ecoenchants/mmo/MMOSpell.java b/Extensions/MMO/src/main/java/com/willfp/ecoenchants/mmo/MMOSpell.java new file mode 100644 index 00000000..4d02db72 --- /dev/null +++ b/Extensions/MMO/src/main/java/com/willfp/ecoenchants/mmo/MMOSpell.java @@ -0,0 +1,10 @@ +package com.willfp.ecoenchants.mmo; + +import com.willfp.ecoenchants.enchantments.itemtypes.Spell; +import com.willfp.ecoenchants.util.optional.Prerequisite; + +public abstract class MMOSpell extends Spell { + protected MMOSpell(String key, Prerequisite... prerequisites) { + super(key, MMOMain.class, MMOPrerequisites.append(prerequisites, MMOPrerequisites.HAS_MMOCORE)); + } +} diff --git a/Extensions/MMO/src/main/java/com/willfp/ecoenchants/mmo/enchants/Athletic.java b/Extensions/MMO/src/main/java/com/willfp/ecoenchants/mmo/enchants/Athletic.java new file mode 100644 index 00000000..678e1401 --- /dev/null +++ b/Extensions/MMO/src/main/java/com/willfp/ecoenchants/mmo/enchants/Athletic.java @@ -0,0 +1,16 @@ +package com.willfp.ecoenchants.mmo.enchants; + +import com.willfp.ecoenchants.events.armorequip.ArmorEquipEvent; +import com.willfp.ecoenchants.mmo.MMOEnchantment; +import org.bukkit.entity.Player; + +public class Athletic extends MMOEnchantment { + public Athletic() { + super("augment", EnchantmentType.NORMAL); + } + + @Override + public void onArmorEquip(Player player, int level, ArmorEquipEvent event) { + + } +} diff --git a/Extensions/MMO/src/main/java/com/willfp/ecoenchants/mmo/enchants/Augment.java b/Extensions/MMO/src/main/java/com/willfp/ecoenchants/mmo/enchants/Augment.java new file mode 100644 index 00000000..3282d299 --- /dev/null +++ b/Extensions/MMO/src/main/java/com/willfp/ecoenchants/mmo/enchants/Augment.java @@ -0,0 +1,16 @@ +package com.willfp.ecoenchants.mmo.enchants; + +import com.willfp.ecoenchants.events.armorequip.ArmorEquipEvent; +import com.willfp.ecoenchants.mmo.MMOEnchantment; +import org.bukkit.entity.Player; + +public class Augment extends MMOEnchantment { + public Augment() { + super("augment", EnchantmentType.NORMAL); + } + + @Override + public void onArmorEquip(Player player, int level, ArmorEquipEvent event) { + + } +} diff --git a/Extensions/MMO/src/main/java/com/willfp/ecoenchants/mmo/enchants/abilities/Discounted.java b/Extensions/MMO/src/main/java/com/willfp/ecoenchants/mmo/enchants/abilities/Discounted.java new file mode 100644 index 00000000..c128a43e --- /dev/null +++ b/Extensions/MMO/src/main/java/com/willfp/ecoenchants/mmo/enchants/abilities/Discounted.java @@ -0,0 +1,33 @@ +package com.willfp.ecoenchants.mmo.enchants.abilities; + +import com.willfp.ecoenchants.enchantments.EcoEnchants; +import com.willfp.ecoenchants.enchantments.util.EnchantChecks; +import com.willfp.ecoenchants.mmo.MMOEnchantment; +import com.willfp.ecoenchants.mmo.MMOPrerequisites; +import net.Indyuce.mmoitems.api.event.AbilityUseEvent; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; + +public class Discounted extends MMOEnchantment { + public Discounted() { + super("discounted", EnchantmentType.NORMAL, MMOPrerequisites.HAS_MMOITEMS); + } + + @EventHandler + public void onAbility(AbilityUseEvent event) { + Player player = event.getPlayer(); + + if(!EnchantChecks.mainhand(player, this)) + return; + + int level = EnchantChecks.getMainhandLevel(player, this); + + double cost = event.getAbility().getModifier("mana"); + if(cost == 0.0D) return; + + double multiplier = 1 - (this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "multiplier") * level); + cost *= multiplier; + + event.getAbility().setModifier("mana", cost); + } +} diff --git a/Extensions/MMO/src/main/java/com/willfp/ecoenchants/mmo/enchants/abilities/Recover.java b/Extensions/MMO/src/main/java/com/willfp/ecoenchants/mmo/enchants/abilities/Recover.java new file mode 100644 index 00000000..edca1ad5 --- /dev/null +++ b/Extensions/MMO/src/main/java/com/willfp/ecoenchants/mmo/enchants/abilities/Recover.java @@ -0,0 +1,34 @@ +package com.willfp.ecoenchants.mmo.enchants.abilities; + +import com.willfp.ecoenchants.enchantments.EcoEnchants; +import com.willfp.ecoenchants.enchantments.util.EnchantChecks; +import com.willfp.ecoenchants.mmo.MMOEnchantment; +import com.willfp.ecoenchants.mmo.MMOPrerequisites; +import net.Indyuce.mmoitems.api.event.AbilityUseEvent; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; + +public class Recover extends MMOEnchantment { + public Recover() { + super("recover", EnchantmentType.NORMAL, MMOPrerequisites.HAS_MMOITEMS); + } + + @EventHandler + public void onAbility(AbilityUseEvent event) { + Player player = event.getPlayer(); + + if(!EnchantChecks.mainhand(player, this)) + return; + + int level = EnchantChecks.getMainhandLevel(player, this); + + double cooldown = event.getAbility().getModifier("cooldown"); + + if(cooldown == 0.0D) return; + + double multiplier = 1 - (this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "multiplier") * level); + cooldown *= multiplier; + + event.getAbility().setModifier("cooldown", cooldown); + } +} diff --git a/Extensions/MMO/src/main/java/com/willfp/ecoenchants/mmo/enchants/mana/Drain.java b/Extensions/MMO/src/main/java/com/willfp/ecoenchants/mmo/enchants/mana/Drain.java new file mode 100644 index 00000000..bc32f149 --- /dev/null +++ b/Extensions/MMO/src/main/java/com/willfp/ecoenchants/mmo/enchants/mana/Drain.java @@ -0,0 +1,27 @@ +package com.willfp.ecoenchants.mmo.enchants.mana; + +import com.willfp.ecoenchants.enchantments.EcoEnchants; +import com.willfp.ecoenchants.mmo.MMOSpell; +import com.willfp.ecoenchants.mmo.integrations.mmo.MMOManager; +import org.bukkit.entity.Player; +import org.bukkit.event.player.PlayerInteractEvent; + +public class Drain extends MMOSpell { + public Drain() { + super("drain"); + } + + @Override + public void onUse(Player player, int level, PlayerInteractEvent event) { + double radius = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "radius-per-level") * level; + double amount = 1 - ((this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "percentage-per-level") / 100) * level); + + player.getNearbyEntities(radius, radius, radius).forEach(entity -> { + if(!(entity instanceof Player)) + return; + + Player victim = (Player) entity; + MMOManager.setMana(victim, MMOManager.getMana(player) * amount); + }); + } +} diff --git a/Extensions/MMO/src/main/java/com/willfp/ecoenchants/mmo/enchants/mana/Elixir.java b/Extensions/MMO/src/main/java/com/willfp/ecoenchants/mmo/enchants/mana/Elixir.java new file mode 100644 index 00000000..81316f0c --- /dev/null +++ b/Extensions/MMO/src/main/java/com/willfp/ecoenchants/mmo/enchants/mana/Elixir.java @@ -0,0 +1,36 @@ +package com.willfp.ecoenchants.mmo.enchants.mana; + +import com.willfp.ecoenchants.enchantments.EcoEnchants; +import com.willfp.ecoenchants.mmo.MMOEnchantment; +import com.willfp.ecoenchants.mmo.integrations.mmo.MMOManager; +import com.willfp.ecoenchants.nms.Cooldown; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.event.entity.EntityDamageByEntityEvent; + +public class Elixir extends MMOEnchantment { + public Elixir() { + super("elixir", EnchantmentType.NORMAL); + } + + @Override + public void onMeleeAttack(LivingEntity attacker, LivingEntity victim, int level, EntityDamageByEntityEvent event) { + if(!(attacker instanceof Player && victim instanceof Player)) + return; + Player pAttacker = (Player) attacker; + Player pVictim = (Player) victim; + + boolean notcharged = this.getConfig().getBool(EcoEnchants.CONFIG_LOCATION + "allow-not-fully-charged"); + if (Cooldown.getCooldown(pAttacker) != 1.0f && !notcharged) + return; + + double victimMana = MMOManager.getMana(pVictim); + + double quantity = (this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "percentage-per-level") / 100) * level; + + double toSteal = victimMana * quantity; + + MMOManager.setMana(pVictim, victimMana - toSteal); + MMOManager.giveMana(pAttacker, toSteal); + } +} diff --git a/Extensions/MMO/src/main/java/com/willfp/ecoenchants/mmo/enchants/mana/Siphon.java b/Extensions/MMO/src/main/java/com/willfp/ecoenchants/mmo/enchants/mana/Siphon.java new file mode 100644 index 00000000..893299f8 --- /dev/null +++ b/Extensions/MMO/src/main/java/com/willfp/ecoenchants/mmo/enchants/mana/Siphon.java @@ -0,0 +1,32 @@ +package com.willfp.ecoenchants.mmo.enchants.mana; + +import com.willfp.ecoenchants.enchantments.EcoEnchants; +import com.willfp.ecoenchants.mmo.MMOEnchantment; +import com.willfp.ecoenchants.mmo.integrations.mmo.MMOManager; +import org.bukkit.entity.Arrow; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.event.entity.EntityDamageByEntityEvent; + +public class Siphon extends MMOEnchantment { + public Siphon() { + super("siphon", EnchantmentType.NORMAL); + } + + @Override + public void onArrowDamage(LivingEntity attacker, LivingEntity victim, Arrow arrow, int level, EntityDamageByEntityEvent event) { + if(!(attacker instanceof Player && victim instanceof Player)) + return; + Player pAttacker = (Player) attacker; + Player pVictim = (Player) victim; + + double victimMana = MMOManager.getMana(pVictim); + + double quantity = (this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "percentage-per-level") / 100) * level; + + double toSteal = victimMana * quantity; + + MMOManager.setMana(pVictim, victimMana - toSteal); + MMOManager.giveMana(pAttacker, toSteal); + } +} diff --git a/Extensions/MMO/src/main/java/com/willfp/ecoenchants/mmo/enchants/mana/Spirituality.java b/Extensions/MMO/src/main/java/com/willfp/ecoenchants/mmo/enchants/mana/Spirituality.java new file mode 100644 index 00000000..ca013202 --- /dev/null +++ b/Extensions/MMO/src/main/java/com/willfp/ecoenchants/mmo/enchants/mana/Spirituality.java @@ -0,0 +1,29 @@ +package com.willfp.ecoenchants.mmo.enchants.mana; + +import com.willfp.ecoenchants.enchantments.EcoEnchants; +import com.willfp.ecoenchants.enchantments.util.EnchantChecks; +import com.willfp.ecoenchants.mmo.MMOEnchantment; +import net.Indyuce.mmocore.api.event.PlayerRegenResourceEvent; +import net.Indyuce.mmocore.api.player.profess.resource.PlayerResource; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; + +public class Spirituality extends MMOEnchantment { + public Spirituality() { + super("spirituality", EnchantmentType.NORMAL); + } + + @EventHandler + public void onRegainMana(PlayerRegenResourceEvent event) { + if(!event.getResource().equals(PlayerResource.MANA)) + return; + + Player player = event.getPlayer(); + + int levels = EnchantChecks.getArmorPoints(player, this); + if(levels == 0) return; + + double multiplier = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "multiplier") * levels; + event.setAmount(event.getAmount() * (multiplier + 1)); + } +} diff --git a/Extensions/MMO/src/main/java/com/willfp/ecoenchants/mmo/enchants/stamina/Endurance.java b/Extensions/MMO/src/main/java/com/willfp/ecoenchants/mmo/enchants/stamina/Endurance.java new file mode 100644 index 00000000..d91575c8 --- /dev/null +++ b/Extensions/MMO/src/main/java/com/willfp/ecoenchants/mmo/enchants/stamina/Endurance.java @@ -0,0 +1,29 @@ +package com.willfp.ecoenchants.mmo.enchants.stamina; + +import com.willfp.ecoenchants.enchantments.EcoEnchants; +import com.willfp.ecoenchants.enchantments.util.EnchantChecks; +import com.willfp.ecoenchants.mmo.MMOEnchantment; +import net.Indyuce.mmocore.api.event.PlayerRegenResourceEvent; +import net.Indyuce.mmocore.api.player.profess.resource.PlayerResource; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; + +public class Endurance extends MMOEnchantment { + public Endurance() { + super("endurance", EnchantmentType.NORMAL); + } + + @EventHandler + public void onRegainMana(PlayerRegenResourceEvent event) { + if(!event.getResource().equals(PlayerResource.STAMINA)) + return; + + Player player = event.getPlayer(); + + int levels = EnchantChecks.getArmorPoints(player, this); + if(levels == 0) return; + + double multiplier = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "multiplier") * levels; + event.setAmount(event.getAmount() * (multiplier + 1)); + } +} diff --git a/Extensions/MMO/src/main/java/com/willfp/ecoenchants/mmo/enchants/stamina/Fortitude.java b/Extensions/MMO/src/main/java/com/willfp/ecoenchants/mmo/enchants/stamina/Fortitude.java new file mode 100644 index 00000000..6202bdb3 --- /dev/null +++ b/Extensions/MMO/src/main/java/com/willfp/ecoenchants/mmo/enchants/stamina/Fortitude.java @@ -0,0 +1,32 @@ +package com.willfp.ecoenchants.mmo.enchants.stamina; + +import com.willfp.ecoenchants.enchantments.EcoEnchants; +import com.willfp.ecoenchants.mmo.MMOEnchantment; +import com.willfp.ecoenchants.mmo.integrations.mmo.MMOManager; +import org.bukkit.entity.Arrow; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.event.entity.EntityDamageByEntityEvent; + +public class Fortitude extends MMOEnchantment { + public Fortitude() { + super("fortitude", EnchantmentType.NORMAL); + } + + @Override + public void onArrowDamage(LivingEntity attacker, LivingEntity victim, Arrow arrow, int level, EntityDamageByEntityEvent event) { + if(!(attacker instanceof Player && victim instanceof Player)) + return; + Player pAttacker = (Player) attacker; + Player pVictim = (Player) victim; + + double victimStamina = MMOManager.getStamina(pVictim); + + double quantity = (this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "percentage-per-level") / 100) * level; + + double toSteal = victimStamina * quantity; + + MMOManager.setStamina(pVictim, victimStamina - toSteal); + MMOManager.giveStamina(pAttacker, toSteal); + } +} diff --git a/Extensions/MMO/src/main/java/com/willfp/ecoenchants/mmo/enchants/stamina/Motivate.java b/Extensions/MMO/src/main/java/com/willfp/ecoenchants/mmo/enchants/stamina/Motivate.java new file mode 100644 index 00000000..dfecc7c9 --- /dev/null +++ b/Extensions/MMO/src/main/java/com/willfp/ecoenchants/mmo/enchants/stamina/Motivate.java @@ -0,0 +1,36 @@ +package com.willfp.ecoenchants.mmo.enchants.stamina; + +import com.willfp.ecoenchants.enchantments.EcoEnchants; +import com.willfp.ecoenchants.mmo.MMOEnchantment; +import com.willfp.ecoenchants.mmo.integrations.mmo.MMOManager; +import com.willfp.ecoenchants.nms.Cooldown; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.event.entity.EntityDamageByEntityEvent; + +public class Motivate extends MMOEnchantment { + public Motivate() { + super("motivate", EnchantmentType.NORMAL); + } + + @Override + public void onMeleeAttack(LivingEntity attacker, LivingEntity victim, int level, EntityDamageByEntityEvent event) { + if(!(attacker instanceof Player && victim instanceof Player)) + return; + Player pAttacker = (Player) attacker; + Player pVictim = (Player) victim; + + boolean notcharged = this.getConfig().getBool(EcoEnchants.CONFIG_LOCATION + "allow-not-fully-charged"); + if (Cooldown.getCooldown(pAttacker) != 1.0f && !notcharged) + return; + + double victimStamina = MMOManager.getStamina(pVictim); + + double quantity = (this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "percentage-per-level") / 100) * level; + + double toSteal = victimStamina * quantity; + + MMOManager.setStamina(pVictim, victimStamina - toSteal); + MMOManager.giveStamina(pAttacker, toSteal); + } +} diff --git a/Extensions/MMO/src/main/java/com/willfp/ecoenchants/mmo/integrations/mmo/MMOIntegration.java b/Extensions/MMO/src/main/java/com/willfp/ecoenchants/mmo/integrations/mmo/MMOIntegration.java new file mode 100644 index 00000000..4b435df6 --- /dev/null +++ b/Extensions/MMO/src/main/java/com/willfp/ecoenchants/mmo/integrations/mmo/MMOIntegration.java @@ -0,0 +1,16 @@ +package com.willfp.ecoenchants.mmo.integrations.mmo; + +import com.willfp.ecoenchants.integrations.Integration; +import org.bukkit.entity.Player; + +public interface MMOIntegration extends Integration { + double getMana(Player player); + void setMana(Player player, double amount); + double getMaxMana(Player player); + void giveMana(Player player, double amount); + + double getStamina(Player player); + void setStamina(Player player, double amount); + double getMaxStamina(Player player); + void giveStamina(Player player, double amount); +} diff --git a/Extensions/MMO/src/main/java/com/willfp/ecoenchants/mmo/integrations/mmo/MMOManager.java b/Extensions/MMO/src/main/java/com/willfp/ecoenchants/mmo/integrations/mmo/MMOManager.java new file mode 100644 index 00000000..dc8f2de6 --- /dev/null +++ b/Extensions/MMO/src/main/java/com/willfp/ecoenchants/mmo/integrations/mmo/MMOManager.java @@ -0,0 +1,60 @@ +package com.willfp.ecoenchants.mmo.integrations.mmo; + +import org.apache.commons.lang.Validate; +import org.bukkit.entity.Player; + +import java.util.HashSet; +import java.util.Set; + +public class MMOManager { + private static final Set integrations = new HashSet<>(); + + public static void register(MMOIntegration integration) { + integrations.add(integration); + } + + private static MMOIntegration getIntegration() { + Validate.notEmpty(integrations, "There must be an existing mmo integration!"); + return integrations.stream().findFirst().get(); + } + + public static double getMana(Player player) { + MMOIntegration integration = getIntegration(); + return integration.getMana(player); + } + + public static double getMaxMana(Player player) { + MMOIntegration integration = getIntegration(); + return integration.getMaxMana(player); + } + + public static void setMana(Player player, double amount) { + MMOIntegration integration = getIntegration(); + integration.setMana(player, amount); + } + + public static void giveMana(Player player, double amount) { + MMOIntegration integration = getIntegration(); + integration.giveMana(player, amount); + } + + public static double getStamina(Player player) { + MMOIntegration integration = getIntegration(); + return integration.getMana(player); + } + + public static double getMaxStamina(Player player) { + MMOIntegration integration = getIntegration(); + return integration.getMaxMana(player); + } + + public static void setStamina(Player player, double amount) { + MMOIntegration integration = getIntegration(); + integration.setMana(player, amount); + } + + public static void giveStamina(Player player, double amount) { + MMOIntegration integration = getIntegration(); + integration.giveMana(player, amount); + } +} diff --git a/Extensions/MMO/src/main/java/com/willfp/ecoenchants/mmo/integrations/mmo/plugins/MMOCore.java b/Extensions/MMO/src/main/java/com/willfp/ecoenchants/mmo/integrations/mmo/plugins/MMOCore.java new file mode 100644 index 00000000..a8222e3f --- /dev/null +++ b/Extensions/MMO/src/main/java/com/willfp/ecoenchants/mmo/integrations/mmo/plugins/MMOCore.java @@ -0,0 +1,53 @@ +package com.willfp.ecoenchants.mmo.integrations.mmo.plugins; + +import com.willfp.ecoenchants.mmo.integrations.mmo.MMOIntegration; +import net.Indyuce.mmocore.api.player.PlayerData; +import net.Indyuce.mmocore.api.player.stats.StatType; +import org.bukkit.entity.Player; + +public class MMOCore implements MMOIntegration { + @Override + public double getMana(Player player) { + return PlayerData.get(player).getMana(); + } + + @Override + public void setMana(Player player, double amount) { + PlayerData.get(player).setMana(amount); + } + + @Override + public void giveMana(Player player, double amount) { + PlayerData.get(player).giveMana(amount); + } + + @Override + public double getMaxMana(Player player) { + return PlayerData.get(player).getStats().getStat(StatType.MAX_MANA); + } + + @Override + public double getStamina(Player player) { + return PlayerData.get(player).getStamina(); + } + + @Override + public void setStamina(Player player, double amount) { + PlayerData.get(player).setStamina(amount); + } + + @Override + public void giveStamina(Player player, double amount) { + PlayerData.get(player).giveStamina(amount); + } + + @Override + public double getMaxStamina(Player player) { + return PlayerData.get(player).getStats().getStat(StatType.MAX_STAMINA); + } + + @Override + public String getPluginName() { + return "MMOCore"; + } +} diff --git a/Extensions/MMO/src/main/resources/enchants/normal/discounted.yml b/Extensions/MMO/src/main/resources/enchants/normal/discounted.yml new file mode 100644 index 00000000..ed3658e4 --- /dev/null +++ b/Extensions/MMO/src/main/resources/enchants/normal/discounted.yml @@ -0,0 +1,25 @@ +# +# Discounted EcoEnchant +# + +name: "Discounted" +description: Reduces mana cost for abilities. +enabled: true + +obtaining: + table: true + villager: true + loot: true + rarity: epic + +general-config: + targets: + - bow + - sword + - axe + grindstoneable: true + conflicts: [] + maximum-level: 5 + +config: + multiplier: 0.1 # Mana cost = initial cost * (1 - multiplier * level), thus 10 cost with discounted 5 means final cost is 5 \ No newline at end of file diff --git a/Extensions/MMO/src/main/resources/enchants/normal/elixir.yml b/Extensions/MMO/src/main/resources/enchants/normal/elixir.yml new file mode 100644 index 00000000..c63be5b1 --- /dev/null +++ b/Extensions/MMO/src/main/resources/enchants/normal/elixir.yml @@ -0,0 +1,25 @@ +# +# Elixir EcoEnchant +# + +name: "Elixir" +description: Steals a portion of your victim's mana. +enabled: true + +obtaining: + table: true + villager: true + loot: true + rarity: epic + +general-config: + targets: + - sword + - axe + grindstoneable: true + conflicts: [] + maximum-level: 3 + +config: + allow-not-fully-charged: false + percentage-per-level: 5 # Percentage of your opponents mana to steal per level \ No newline at end of file diff --git a/Extensions/MMO/src/main/resources/enchants/normal/endurance.yml b/Extensions/MMO/src/main/resources/enchants/normal/endurance.yml new file mode 100644 index 00000000..1e21d217 --- /dev/null +++ b/Extensions/MMO/src/main/resources/enchants/normal/endurance.yml @@ -0,0 +1,29 @@ +# +# Endurance EcoEnchant +# + +name: "Endurance" +description: Increases the rate that you regain stamina. +enabled: true + +obtaining: + table: true + villager: true + loot: true + rarity: epic + +general-config: + targets: + - helmet + - chestplate + - leggings + - boots + grindstoneable: true + conflicts: [] + maximum-level: 4 + +config: + multiplier: 0.1 # How many times faster to regain per level + # The formula is default amount * (1 + (multiplier * level)) + # ie, If you were going to regen 10 stamina with a multiplier of 0.1 and 8 levels, then you would regenerate: + # 10 * (1 + (0.1 * 8)) = 10 * 1.8 = 18 \ No newline at end of file diff --git a/Extensions/MMO/src/main/resources/enchants/normal/fortitude.yml b/Extensions/MMO/src/main/resources/enchants/normal/fortitude.yml new file mode 100644 index 00000000..8789a4bc --- /dev/null +++ b/Extensions/MMO/src/main/resources/enchants/normal/fortitude.yml @@ -0,0 +1,24 @@ +# +# Fortitude EcoEnchant +# + +name: "Fortitude" +description: Steals a portion of your victim's stamina. +enabled: true + +obtaining: + table: true + villager: true + loot: true + rarity: epic + +general-config: + targets: + - bow + - crossbow + grindstoneable: true + conflicts: [] + maximum-level: 3 + +config: + percentage-per-level: 5 # Percentage of your opponents stamina to steal per level \ No newline at end of file diff --git a/Extensions/MMO/src/main/resources/enchants/normal/motivate.yml b/Extensions/MMO/src/main/resources/enchants/normal/motivate.yml new file mode 100644 index 00000000..6643ed82 --- /dev/null +++ b/Extensions/MMO/src/main/resources/enchants/normal/motivate.yml @@ -0,0 +1,25 @@ +# +# Motivate EcoEnchant +# + +name: "Motivate" +description: Steals a portion of your victim's stamina. +enabled: true + +obtaining: + table: true + villager: true + loot: true + rarity: epic + +general-config: + targets: + - sword + - axe + grindstoneable: true + conflicts: [] + maximum-level: 3 + +config: + allow-not-fully-charged: false + percentage-per-level: 5 # Percentage of your opponents stamina to steal per level \ No newline at end of file diff --git a/Extensions/MMO/src/main/resources/enchants/normal/recover.yml b/Extensions/MMO/src/main/resources/enchants/normal/recover.yml new file mode 100644 index 00000000..f0c72bd9 --- /dev/null +++ b/Extensions/MMO/src/main/resources/enchants/normal/recover.yml @@ -0,0 +1,25 @@ +# +# Recover EcoEnchant +# + +name: "Recover" +description: Reduces cooldown for abilities. +enabled: true + +obtaining: + table: true + villager: true + loot: true + rarity: epic + +general-config: + targets: + - bow + - sword + - axe + grindstoneable: true + conflicts: [] + maximum-level: 5 + +config: + multiplier: 0.1 # Cooldown = initial cooldown * (1 - multiplier * level), thus 8 cooldown with recover 5 means final cooldown is 4 \ No newline at end of file diff --git a/Extensions/MMO/src/main/resources/enchants/normal/siphon.yml b/Extensions/MMO/src/main/resources/enchants/normal/siphon.yml new file mode 100644 index 00000000..af8027a5 --- /dev/null +++ b/Extensions/MMO/src/main/resources/enchants/normal/siphon.yml @@ -0,0 +1,24 @@ +# +# Siphon EcoEnchant +# + +name: "Siphon" +description: Steals a portion of your victim's mana. +enabled: true + +obtaining: + table: true + villager: true + loot: true + rarity: epic + +general-config: + targets: + - bow + - crossbow + grindstoneable: true + conflicts: [] + maximum-level: 3 + +config: + percentage-per-level: 5 # Percentage of your opponents mana to steal per level \ No newline at end of file diff --git a/Extensions/MMO/src/main/resources/enchants/normal/spirituality.yml b/Extensions/MMO/src/main/resources/enchants/normal/spirituality.yml new file mode 100644 index 00000000..c6aea5b6 --- /dev/null +++ b/Extensions/MMO/src/main/resources/enchants/normal/spirituality.yml @@ -0,0 +1,29 @@ +# +# Spirituality EcoEnchant +# + +name: "Spirituality" +description: Increases the rate that you regain mana. +enabled: true + +obtaining: + table: true + villager: true + loot: true + rarity: epic + +general-config: + targets: + - helmet + - chestplate + - leggings + - boots + grindstoneable: true + conflicts: [] + maximum-level: 4 + +config: + multiplier: 0.1 # How many times faster to regain per level + # The formula is default amount * (1 + (multiplier * level)) + # ie, If you were going to regen 10 mana with a multiplier of 0.1 and 8 levels, then you would regenerate: + # 10 * (1 + (0.1 * 8)) = 10 * 1.8 = 18 \ No newline at end of file diff --git a/Extensions/MMO/src/main/resources/enchants/spell/drain.yml b/Extensions/MMO/src/main/resources/enchants/spell/drain.yml new file mode 100644 index 00000000..289c9261 --- /dev/null +++ b/Extensions/MMO/src/main/resources/enchants/spell/drain.yml @@ -0,0 +1,26 @@ +# +# Drain EcoEnchant +# + +name: "Drain" +description: Reduces all nearby players' mana. +enabled: true + +obtaining: + table: true + villager: true + loot: true + rarity: legendary + +general-config: + targets: + - sword + grindstoneable: true + conflicts: [] + maximum-level: 3 + +config: + activation-sound: ENTITY_ENDERMAN_TELEPORT + cooldown: 240 # In seconds + radius-per-level: 10 # Radius to check nearby players' mana + percentage-per-level: 10 # Percentage of nearby players' mana to reduce diff --git a/Extensions/MMO/src/main/resources/extension.yml b/Extensions/MMO/src/main/resources/extension.yml new file mode 100644 index 00000000..f2bbce8e --- /dev/null +++ b/Extensions/MMO/src/main/resources/extension.yml @@ -0,0 +1,3 @@ +name: MMO +main: com.willfp.ecoenchants.mmo.MMOMain +version: 1.0.0 \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index 83d74d26..1c2b547f 100644 --- a/settings.gradle +++ b/settings.gradle @@ -37,3 +37,7 @@ findProject(':SprintArtifacts').projectDir = file('Extensions/SprintArtifacts') include('Alchemy') findProject(':Alchemy').projectDir = file('Extensions/Alchemy') + +include('MMO') +findProject(':MMO').projectDir = file('Extensions/MMO') +