diff --git a/Extensions/Endershot/build.gradle b/Extensions/Endershot/build.gradle new file mode 100644 index 00000000..7fa536bb --- /dev/null +++ b/Extensions/Endershot/build.gradle @@ -0,0 +1,14 @@ +dependencies { + compileOnly 'org.spigotmc:spigot-api:1.15.2-R0.1-SNAPSHOT' + compileOnly project(':plugin') +} + +jar{ + archiveFileName = project.name + " Extension" + ".jar" +} + +description = 'Endershot' + +tasks.withType(Jar) { + destinationDirectory = file("$rootDir/bin/") +} \ No newline at end of file diff --git a/Extensions/Endershot/src/main/java/com/willfp/ecoenchants/endershot/Endershot.java b/Extensions/Endershot/src/main/java/com/willfp/ecoenchants/endershot/Endershot.java new file mode 100644 index 00000000..fa244640 --- /dev/null +++ b/Extensions/Endershot/src/main/java/com/willfp/ecoenchants/endershot/Endershot.java @@ -0,0 +1,50 @@ +package com.willfp.ecoenchants.endershot; + +import com.willfp.ecoenchants.enchantments.EcoEnchant; +import com.willfp.ecoenchants.enchantments.EcoEnchants; +import com.willfp.ecoenchants.enchantments.util.EnchantChecks; +import com.willfp.ecoenchants.integrations.mcmmo.McmmoManager; +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.EnderPearl; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.entity.EntityShootBowEvent; +import org.bukkit.inventory.ItemStack; + +public class Endershot extends EcoEnchant { + public Endershot() { + super("endershot", EnchantmentType.NORMAL, EndershotMain.class); + } + + @EventHandler(priority = EventPriority.LOW) + public void onBowShoot(EntityShootBowEvent event) { + if(McmmoManager.isFake(event)) + return; + if (event.getProjectile().getType() != EntityType.ARROW) + return; + if(!(event.getEntity() instanceof Player)) + return; + + Player player = (Player) event.getEntity(); + + event.setCancelled(true); + + if(!EnchantChecks.mainhand(player, this)) return; + + boolean hasInfinity = EnchantChecks.mainhand(player, ARROW_INFINITE) && this.getConfig().getBool(EcoEnchants.CONFIG_LOCATION + "work-with-infinity"); + if(!hasInfinity) { + ItemStack pearl = new ItemStack(Material.ENDER_PEARL, 1); + if(!player.getInventory().contains(Material.ENDER_PEARL, 1)) + return; + + player.getInventory().remove(pearl); + } + + EnderPearl pearl = player.launchProjectile(EnderPearl.class); + pearl.setShooter(player); + pearl.setVelocity(event.getProjectile().getVelocity()); + } +} diff --git a/Extensions/Endershot/src/main/java/com/willfp/ecoenchants/endershot/EndershotMain.java b/Extensions/Endershot/src/main/java/com/willfp/ecoenchants/endershot/EndershotMain.java new file mode 100644 index 00000000..1d44fe9e --- /dev/null +++ b/Extensions/Endershot/src/main/java/com/willfp/ecoenchants/endershot/EndershotMain.java @@ -0,0 +1,20 @@ +package com.willfp.ecoenchants.endershot; + +import com.willfp.ecoenchants.EcoEnchantsPlugin; +import com.willfp.ecoenchants.enchantments.EcoEnchant; +import com.willfp.ecoenchants.extensions.Extension; +import org.bukkit.Bukkit; + +public class EndershotMain extends Extension { + public static final EcoEnchant ENDERSHOT = new Endershot(); + + @Override + public void onEnable() { + Bukkit.getPluginManager().registerEvents(ENDERSHOT, EcoEnchantsPlugin.getInstance()); + } + + @Override + public void onDisable() { + + } +} diff --git a/Extensions/Endershot/src/main/resources/enchants/normal/endershot.yml b/Extensions/Endershot/src/main/resources/enchants/normal/endershot.yml new file mode 100644 index 00000000..e4a5f16a --- /dev/null +++ b/Extensions/Endershot/src/main/resources/enchants/normal/endershot.yml @@ -0,0 +1,24 @@ +# +# Endershot EcoEnchant +# + +name: "Endershot" +description: Shoot ender pearls out of your bow +enabled: true + +obtaining: + table: true + villager: true + loot: true + rarity: legendary + +general-config: + targets: + - bow + - crossbow + grindstoneable: true + conflicts: [] + maximum-level: 1 + +config: + work-with-infinity: true # Don't consume ender pearls when enchanted with infinity \ No newline at end of file diff --git a/Extensions/Endershot/src/main/resources/extension.yml b/Extensions/Endershot/src/main/resources/extension.yml new file mode 100644 index 00000000..d00ef6d6 --- /dev/null +++ b/Extensions/Endershot/src/main/resources/extension.yml @@ -0,0 +1,3 @@ +name: Endershot +main: com.willfp.ecoenchants.endershot.EndershotMain +version: 1.0.0 diff --git a/settings.gradle b/settings.gradle index f0418023..c9d157b5 100644 --- a/settings.gradle +++ b/settings.gradle @@ -25,3 +25,6 @@ findProject(':Effects').projectDir = file('Extensions/Effects') include('Summoning') findProject(':Summoning').projectDir = file('Extensions/Summoning') + +include('Endershot') +findProject(':Endershot').projectDir = file('Extensions/Endershot') \ No newline at end of file