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