diff --git a/pom.xml b/pom.xml index 3e9e577..4257cd9 100644 --- a/pom.xml +++ b/pom.xml @@ -6,18 +6,22 @@ Elytra jar - 1.0-SNAPSHOT + 0.1.3-SNAPSHOT spigot-repo https://hub.spigotmc.org/nexus/content/repositories/snapshots/ + + DrkMatr1984 Repo + https://minevolt.net/repo + org.bukkit bukkit - 1.12-R0.1-SNAPSHOT + 1.14.4-R0.1-SNAPSHOT provided diff --git a/src/main/java/me/fromgate/elytra/Elytra.java b/src/main/java/me/fromgate/elytra/Elytra.java index 47341fe..f040d3a 100644 --- a/src/main/java/me/fromgate/elytra/Elytra.java +++ b/src/main/java/me/fromgate/elytra/Elytra.java @@ -34,16 +34,20 @@ public void onEnable() { task.runTaskTimer(plugin, 20, 13); } if(cfg.boostEnable){ - new BoostCheckTask().runTaskTimer(getPlugin(), 20, 8); + BoostCheckTask task = new BoostCheckTask(); + task.runTaskTimer(getPlugin(), 20, 8); } if(cfg.shiftActivation){ - new ShiftActivationCheckTask().runTaskTimer(plugin, 20, 10); + ShiftActivationCheckTask task = new ShiftActivationCheckTask(); + task.runTaskTimer(plugin, 20, 10); } if(cfg.autoElytra){ - new AutoGlideCheckTask().runTaskTimer(plugin, 20, 8); + AutoGlideCheckTask task = new AutoGlideCheckTask(); + task.runTaskTimer(plugin, 20, 8); } if (cfg.runUpEnable){ - new RunUpCheckTask().runTaskTimer(plugin, 20, 6); + RunUpCheckTask task = new RunUpCheckTask(); + task.runTaskTimer(plugin, 20, 6); } } } diff --git a/src/main/java/me/fromgate/elytra/tasks/AutoGlideCheckTask.java b/src/main/java/me/fromgate/elytra/tasks/AutoGlideCheckTask.java index 6066266..cac078b 100644 --- a/src/main/java/me/fromgate/elytra/tasks/AutoGlideCheckTask.java +++ b/src/main/java/me/fromgate/elytra/tasks/AutoGlideCheckTask.java @@ -1,23 +1,16 @@ package me.fromgate.elytra.tasks; -import me.fromgate.elytra.Elytra; -import me.fromgate.elytra.util.Util; +import java.util.HashMap; import org.bukkit.Bukkit; -import org.bukkit.ChatColor; import org.bukkit.Location; -import org.bukkit.Material; import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.PlayerInventory; +import org.bukkit.potion.PotionEffectType; import org.bukkit.scheduler.BukkitRunnable; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import me.fromgate.elytra.Elytra; +import me.fromgate.elytra.util.Util; public class AutoGlideCheckTask extends BukkitRunnable { - private Map oldLocale = new HashMap<>(); + private HashMap oldLocale = new HashMap(); @Override public void run() { if(Bukkit.getServer().getOnlinePlayers()!=null && !Bukkit.getServer().getOnlinePlayers().isEmpty()){ @@ -25,6 +18,8 @@ public void run() { { if (player.hasPermission("elytra.auto")){ if(!player.hasMetadata("swimming") && !player.hasMetadata("falling")){ + if(Elytra.getCfg().cancelIfSlowFall && player.hasPotionEffect(PotionEffectType.SLOW_FALLING)) + return; Location l = player.getLocation(); if(oldLocale.containsKey(player)){ if(!Util.isSameBlocks(l, oldLocale.get(player))){ @@ -33,9 +28,11 @@ public void run() { if(Elytra.getCfg().autoElytraEquip) { if(player.hasPermission("elytra.auto-equip")){ - if(Util.hasElytraStorage(player)){ - autoEquip(player); - } + if(Util.hasElytraStorage(player)) { + Util.autoEquip(player); + }else { + //no elytra to autoequip (maybe a message) + } } } } @@ -57,32 +54,4 @@ public void run() { } } - private void autoEquip(Player player){ - PlayerInventory inv = player.getInventory(); - List storage = new ArrayList(); - ItemStack chestplate = new ItemStack(Material.AIR); - ItemStack elytra = new ItemStack(Material.AIR); - if(inv.getChestplate()!=null && inv.getChestplate().getType()!=Material.AIR){ - chestplate = inv.getChestplate(); - inv.setChestplate(new ItemStack(Material.AIR)); - } - for(ItemStack item : inv.getStorageContents()){ - storage.add(item); - } - for(ItemStack item : storage){ - if(item!=null){ - if(item.getType().equals(Material.ELYTRA)){ - elytra = item; - break; - } - } - } - storage.remove(elytra); - if(chestplate.getType()!=Material.AIR){ - storage.add(chestplate); - } - player.getInventory().setStorageContents(Util.listToArray(storage)); - inv.setChestplate(elytra); - player.sendMessage(ChatColor.GREEN + "Elytra Auto-Equipped"); - } } diff --git a/src/main/java/me/fromgate/elytra/tasks/BoostCheckTask.java b/src/main/java/me/fromgate/elytra/tasks/BoostCheckTask.java index 4248e26..a0cff82 100644 --- a/src/main/java/me/fromgate/elytra/tasks/BoostCheckTask.java +++ b/src/main/java/me/fromgate/elytra/tasks/BoostCheckTask.java @@ -1,20 +1,21 @@ package me.fromgate.elytra.tasks; -import me.fromgate.elytra.Elytra; -import me.fromgate.elytra.ElytraCooldown; -import me.fromgate.elytra.util.Util; +import java.util.HashMap; + import org.bukkit.Bukkit; +import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.util.Vector; -import java.util.HashMap; -import java.util.Map; +import me.fromgate.elytra.Elytra; +import me.fromgate.elytra.ElytraCooldown; +import me.fromgate.elytra.util.Util; public class BoostCheckTask extends BukkitRunnable { - private Map oldLocale = new HashMap<>(); + private HashMap oldLocale = new HashMap(); @Override public void run() { @@ -54,6 +55,18 @@ public void run() { oldLocale.put(player, l); return; } + if(Elytra.getCfg().chargeFirework>0) { + if(Util.containsFireworks(player)) { + Util.removeFirework(player, Elytra.getCfg().chargeFirework); + player.setVelocity(vector.multiply(Elytra.getCfg().speedUpMult)); + Util.playParticles(player); + Util.playSound(player); + Util.processGForce(player); + return; + } + player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&cNot Enough Fireworks to Boost")); + return; + } player.setVelocity(vector.multiply(Elytra.getCfg().speedUpMult)); Util.playParticles(player); Util.playSound(player); diff --git a/src/main/java/me/fromgate/elytra/tasks/RunUpCheckTask.java b/src/main/java/me/fromgate/elytra/tasks/RunUpCheckTask.java index a86572a..2451675 100644 --- a/src/main/java/me/fromgate/elytra/tasks/RunUpCheckTask.java +++ b/src/main/java/me/fromgate/elytra/tasks/RunUpCheckTask.java @@ -1,21 +1,22 @@ package me.fromgate.elytra.tasks; -import me.fromgate.elytra.Elytra; -import me.fromgate.elytra.ElytraCooldown; -import me.fromgate.elytra.util.ElytraConfig; -import me.fromgate.elytra.util.Util; +import java.util.HashMap; +import java.util.Map; + import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.util.Vector; -import java.util.HashMap; -import java.util.Map; +import me.fromgate.elytra.Elytra; +import me.fromgate.elytra.ElytraCooldown; +import me.fromgate.elytra.util.ElytraConfig; +import me.fromgate.elytra.util.Util; public class RunUpCheckTask extends BukkitRunnable { - private Map oldLocale = new HashMap<>(); + private HashMap oldLocale = new HashMap(); private Map runners = new HashMap<>(); private ElytraConfig cfg; diff --git a/src/main/java/me/fromgate/elytra/tasks/ShiftActivationCheckTask.java b/src/main/java/me/fromgate/elytra/tasks/ShiftActivationCheckTask.java index 8b7c210..44cb707 100644 --- a/src/main/java/me/fromgate/elytra/tasks/ShiftActivationCheckTask.java +++ b/src/main/java/me/fromgate/elytra/tasks/ShiftActivationCheckTask.java @@ -1,6 +1,7 @@ package me.fromgate.elytra.tasks; import org.bukkit.Bukkit; +import org.bukkit.ChatColor; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.util.Vector; @@ -17,12 +18,24 @@ public void run() { { if (!player.hasPermission("elytra.shift-activation")) return; if(player.hasMetadata("swimming") || player.hasMetadata("falling")) return; - if (!player.isSneaking()) return; - if (!player.isGliding()) return; if (!Util.isElytraWeared(player)) return; + if (!player.isGliding()) return; + if (!player.isSneaking()) return; Vector vector = player.getVelocity(); if (vector.length() > Elytra.getCfg().shiftActSpeed) return; if (!ElytraCooldown.checkAndUpdate(player, ElytraCooldown.Type.SHIFT)) return; + if(Elytra.getCfg().chargeFirework>0) { + if(Util.containsFireworks(player)) { + Util.removeFirework(player, Elytra.getCfg().chargeFirework); + player.setVelocity(vector.multiply(Elytra.getCfg().shiftMult)); + Util.playParticles(player); + Util.playSound(player); + Util.processGForce(player); + return; + } + player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&cNot Enough Fireworks to Boost")); + return; + } player.setVelocity(vector.multiply(Elytra.getCfg().shiftMult)); Util.playParticles(player); Util.playSound(player); diff --git a/src/main/java/me/fromgate/elytra/util/ElytraConfig.java b/src/main/java/me/fromgate/elytra/util/ElytraConfig.java index 1893785..c54f142 100644 --- a/src/main/java/me/fromgate/elytra/util/ElytraConfig.java +++ b/src/main/java/me/fromgate/elytra/util/ElytraConfig.java @@ -18,7 +18,10 @@ public ElytraConfig(JavaPlugin plugin) { @Path(value = "auto-glide.required-air-under-player") public int autoElytraEmpty = 3; - + + @Path(value = "auto-glide.cancel-if-slow-fall") + public boolean cancelIfSlowFall = true; + // Constant-flight @Path(value = "constant-flight.enable") public boolean constSpeedEnable = false; @@ -95,7 +98,9 @@ public ElytraConfig(JavaPlugin plugin) { @Path(value = "g-force.damage-player") public double gforceDamagePlayer = 2; - + + @Path(value = "g-force.charge-firework") + public int chargeFirework = 1; // Visual effects @Path(value = "particles.enable") diff --git a/src/main/java/me/fromgate/elytra/util/Util.java b/src/main/java/me/fromgate/elytra/util/Util.java index cff7612..50d2f11 100644 --- a/src/main/java/me/fromgate/elytra/util/Util.java +++ b/src/main/java/me/fromgate/elytra/util/Util.java @@ -2,8 +2,6 @@ import me.fromgate.elytra.Elytra; -import java.util.List; - import org.bukkit.*; import org.bukkit.block.Block; import org.bukkit.entity.Player; @@ -115,8 +113,8 @@ public static boolean isElytraWeared(Player player) { public static boolean hasElytraStorage(Player player) { PlayerInventory inv = player.getInventory(); - if(inv.getStorageContents()!=null){ - for(ItemStack item : inv.getStorageContents()){ + if(inv.getContents()!=null){ + for(ItemStack item : inv.getContents()){ if(item!=null){ if(!item.getType().equals(Material.AIR)){ if(item.getType().equals(Material.ELYTRA)){ @@ -130,17 +128,72 @@ public static boolean hasElytraStorage(Player player) { return false; } - public static ItemStack[] listToArray(List list){ - ItemStack[] array = new ItemStack[list.size()]; - int i = 0; - for (ItemStack is : list){ - array[i] = is; - i += 1; - } - return array; + public static boolean containsFireworks(Player player) { + if(player.getInventory().getContents()!=null){ + if(player.getInventory().contains(Material.FIREWORK_ROCKET)) { + for(ItemStack item : player.getInventory().getContents()){ + if(item!=null && !item.getType().equals(Material.AIR)){ + if(item.getType().equals(Material.FIREWORK_ROCKET)){ + if(item.getAmount()>=Elytra.getCfg().chargeFirework) { + return true; + } + } + } + } + } + } + return false; } - + public static void removeFirework(Player player, int amount) { + PlayerInventory inv = player.getInventory(); + for(ItemStack item : inv.getContents()){ + if(item!=null){ + if(!item.getType().equals(Material.AIR)){ + if(item.getType().equals(Material.FIREWORK_ROCKET)){ + if(item.getAmount()>=amount) { + inv.remove(item); + if(item.getAmount()-amount > 0) { + item.setAmount(item.getAmount()-amount); + inv.addItem(item); + } + return; + } + } + } + } + } + } + + public static void autoEquip(Player player){ + PlayerInventory inv = player.getInventory(); + ItemStack chestplate = new ItemStack(Material.AIR); + ItemStack elytra = new ItemStack(Material.AIR); + if(inv.getChestplate()!=null && inv.getChestplate().getType()!=Material.AIR){ + chestplate = inv.getChestplate(); + inv.setChestplate(new ItemStack(Material.AIR)); + } + for(ItemStack item : inv.getContents()){ + if(item!=null){ + if(item.getType().equals(Material.ELYTRA)){ + elytra = item; + break; + } + } + } + inv.remove(elytra); + if((elytra.getAmount()-1)>0) { + elytra.setAmount(elytra.getAmount() -1); + inv.addItem(elytra); + } + if(chestplate.getType()!=Material.AIR){ + inv.addItem(chestplate); + } + elytra.setAmount(1); + inv.setChestplate(elytra); + player.sendMessage(ChatColor.GREEN + "Elytra Auto-Equipped"); + } + public static boolean checkEmptyBlocks(Location from, Location to) { if (from.getBlockY() - to.getBlockY() < 1) return false; Block bf = from.getBlock(); @@ -158,6 +211,7 @@ public static boolean isSameBlocks(Location loc1, Location loc2) { if (loc1.getBlockX() != loc2.getBlockX()) return false; if (loc1.getBlockZ() != loc2.getBlockZ()) return false; if (loc1.getBlockY() != loc2.getBlockY()) return false; + if (loc1.getWorld() != loc2.getWorld()) return false; return true; } } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 84100d1..cd6a6f0 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -6,6 +6,7 @@ auto-glide: enable: true # Enable auto-glide feature auto-equip: false # Enable auto-equip feature (If a player has an elytra in his inventory, it is auto-equipped when auto-glide engages) required-air-under-player: 3 # Amount of empty block under player feet required to start gliding + cancel-if-slow-fall: true # Cancels AutoGlide and AutoEquip if player have a slow fall potion activated. # Constant flight # Determines minimum glding speed, allows to flight constantly @@ -55,6 +56,7 @@ run-up: g-force: damage-elytra: 10 # Break elytra damage-player: 2.0 # Deal damage to player + charge-firework: 2 # Particles effects particles: diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 482c8f5..cc9aa53 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,4 +1,5 @@ name: Elytra main: me.fromgate.elytra.Elytra version: 0.1.3 +api-version: 1.13 author: fromgate \ No newline at end of file