mirror of
https://github.com/Auxilor/EcoEnchants.git
synced 2024-11-21 14:55:17 +01:00
Optimised Watcher
This commit is contained in:
parent
da012adf65
commit
6d2f6dca84
@ -1,5 +1,7 @@
|
||||
package com.willfp.ecoenchants.enchantments.util;
|
||||
|
||||
import com.willfp.ecoenchants.enchantments.EcoEnchant;
|
||||
import com.willfp.ecoenchants.enchantments.EcoEnchants;
|
||||
import com.willfp.ecoenchants.util.ItemDurability;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
@ -10,6 +12,7 @@ import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.metadata.MetadataValue;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
@ -29,6 +32,22 @@ public final class EnchantChecks {
|
||||
return item.getItemMeta().getEnchantLevel(enchantment);
|
||||
}
|
||||
|
||||
public static Map<EcoEnchant, Integer> getEnchantsOnItem(ItemStack item) {
|
||||
if(item == null) return new HashMap<>();
|
||||
if(item.getType().equals(Material.AIR)) return new HashMap<>();
|
||||
if(!item.hasItemMeta()) return new HashMap<>();
|
||||
if(item.getItemMeta() == null) return new HashMap<>();
|
||||
|
||||
Map<EcoEnchant, Integer> ecoEnchants = new HashMap<>();
|
||||
item.getEnchantments().forEach(((enchantment, integer) -> {
|
||||
if(EcoEnchants.getFromEnchantment(enchantment) != null) {
|
||||
ecoEnchants.put(EcoEnchants.getFromEnchantment(enchantment), integer);
|
||||
}
|
||||
}));
|
||||
|
||||
return ecoEnchants;
|
||||
}
|
||||
|
||||
public static boolean arrow(Arrow arrow, Enchantment enchantment) {
|
||||
return getArrowLevel(arrow, enchantment) != 0;
|
||||
}
|
||||
@ -46,6 +65,23 @@ public final class EnchantChecks {
|
||||
return enchantments.get(enchantment);
|
||||
}
|
||||
|
||||
public static Map<EcoEnchant, Integer> getEnchantsOnArrow(Arrow arrow) {
|
||||
if (arrow.getMetadata("enchantments").isEmpty()) return new HashMap<>();
|
||||
|
||||
MetadataValue enchantmentsMetaValue = arrow.getMetadata("enchantments").get(0);
|
||||
if (!(enchantmentsMetaValue.value() instanceof Map))
|
||||
return new HashMap<>();
|
||||
|
||||
Map<EcoEnchant, Integer> ecoEnchants = new HashMap<>();
|
||||
((Map<Enchantment, Integer>) enchantmentsMetaValue.value()).forEach(((enchantment, integer) -> {
|
||||
if(EcoEnchants.getFromEnchantment(enchantment) != null) {
|
||||
ecoEnchants.put(EcoEnchants.getFromEnchantment(enchantment), integer);
|
||||
}
|
||||
}));
|
||||
|
||||
return ecoEnchants;
|
||||
}
|
||||
|
||||
public static boolean mainhand(LivingEntity entity, Enchantment enchantment) {
|
||||
return getMainhandLevel(entity, enchantment) != 0;
|
||||
}
|
||||
@ -58,6 +94,26 @@ public final class EnchantChecks {
|
||||
|
||||
return getItemLevel(item, enchantment);
|
||||
}
|
||||
|
||||
public static Map<EcoEnchant, Integer> getEnchantsOnMainhand(LivingEntity entity) {
|
||||
if(entity.getEquipment() == null)
|
||||
return new HashMap<>();
|
||||
|
||||
ItemStack item = entity.getEquipment().getItemInMainHand();
|
||||
|
||||
if(item == null) return new HashMap<>();
|
||||
|
||||
Map<EcoEnchant, Integer> ecoEnchants = new HashMap<>();
|
||||
|
||||
item.getEnchantments().forEach(((enchantment, integer) -> {
|
||||
if(EcoEnchants.getFromEnchantment(enchantment) != null) {
|
||||
ecoEnchants.put(EcoEnchants.getFromEnchantment(enchantment), integer);
|
||||
}
|
||||
}));
|
||||
|
||||
return ecoEnchants;
|
||||
}
|
||||
|
||||
public static boolean offhand(LivingEntity entity, Enchantment enchantment) {
|
||||
return getOffhandLevel(entity, enchantment) != 0;
|
||||
}
|
||||
@ -71,6 +127,25 @@ public final class EnchantChecks {
|
||||
return getItemLevel(item, enchantment);
|
||||
}
|
||||
|
||||
public static Map<EcoEnchant, Integer> getEnchantsOnOffhand(LivingEntity entity) {
|
||||
if(entity.getEquipment() == null)
|
||||
return new HashMap<>();
|
||||
|
||||
ItemStack item = entity.getEquipment().getItemInOffHand();
|
||||
|
||||
if(item == null) return new HashMap<>();
|
||||
|
||||
Map<EcoEnchant, Integer> ecoEnchants = new HashMap<>();
|
||||
|
||||
item.getEnchantments().forEach(((enchantment, integer) -> {
|
||||
if(EcoEnchants.getFromEnchantment(enchantment) != null) {
|
||||
ecoEnchants.put(EcoEnchants.getFromEnchantment(enchantment), integer);
|
||||
}
|
||||
}));
|
||||
|
||||
return ecoEnchants;
|
||||
}
|
||||
|
||||
public static int getArmorPoints(LivingEntity entity, Enchantment enchantment) {
|
||||
return getArmorPoints(entity, enchantment, 0);
|
||||
}
|
||||
|
@ -2,6 +2,7 @@ package com.willfp.ecoenchants.enchantments.util;
|
||||
|
||||
import com.google.common.collect.Sets;
|
||||
import com.willfp.ecoenchants.EcoEnchantsPlugin;
|
||||
import com.willfp.ecoenchants.enchantments.EcoEnchant;
|
||||
import com.willfp.ecoenchants.enchantments.EcoEnchants;
|
||||
import com.willfp.ecoenchants.events.armorequip.ArmorEquipEvent;
|
||||
import com.willfp.ecoenchants.integrations.antigrief.AntigriefManager;
|
||||
@ -46,11 +47,9 @@ public class WatcherTriggers implements Listener {
|
||||
|
||||
if(event.isCancelled()) return;
|
||||
|
||||
EcoEnchants.getAll().forEach((enchant -> {
|
||||
EnchantChecks.getEnchantsOnArrow(arrow).forEach(((enchant, level) -> {
|
||||
if(event.isCancelled()) return;
|
||||
if(!enchant.isEnabled()) return;
|
||||
if (!EnchantChecks.arrow(arrow, enchant)) return;
|
||||
int level = EnchantChecks.getArrowLevel(arrow, enchant);
|
||||
enchant.onArrowDamage(attacker, victim, arrow, level, event);
|
||||
}));
|
||||
}
|
||||
@ -81,11 +80,9 @@ public class WatcherTriggers implements Listener {
|
||||
if (!AntigriefManager.canInjure((Player) attacker, victim)) return;
|
||||
}
|
||||
|
||||
EcoEnchants.getAll().forEach((enchant -> {
|
||||
EnchantChecks.getEnchantsOnItem(item).forEach(((enchant, level) -> {
|
||||
if(event.isCancelled()) return;
|
||||
if(!enchant.isEnabled()) return;
|
||||
if (!EnchantChecks.item(item, enchant)) return;
|
||||
int level = EnchantChecks.getItemLevel(item, enchant);
|
||||
enchant.onTridentDamage(attacker, victim, trident, level, event);
|
||||
}));
|
||||
}
|
||||
@ -142,13 +139,11 @@ public class WatcherTriggers implements Listener {
|
||||
if (!AntigriefManager.canInjure((Player) attacker, victim)) return;
|
||||
}
|
||||
|
||||
EcoEnchants.getAll().forEach((enchant -> {
|
||||
EnchantChecks.getEnchantsOnMainhand(attacker).forEach((enchant, level) -> {
|
||||
if(event.isCancelled()) return;
|
||||
if(!enchant.isEnabled()) return;
|
||||
if (!EnchantChecks.mainhand(attacker, enchant)) return;
|
||||
int level = EnchantChecks.getMainhandLevel(attacker, enchant);
|
||||
enchant.onMeleeAttack(attacker, victim, level, event);
|
||||
}));
|
||||
});
|
||||
}
|
||||
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
@ -159,13 +154,11 @@ public class WatcherTriggers implements Listener {
|
||||
LivingEntity shooter = event.getEntity();
|
||||
Arrow arrow = (Arrow) event.getProjectile();
|
||||
|
||||
EcoEnchants.getAll().forEach((enchant -> {
|
||||
EnchantChecks.getEnchantsOnMainhand(shooter).forEach((enchant, level) -> {
|
||||
if(event.isCancelled()) return;
|
||||
if(!enchant.isEnabled()) return;
|
||||
if (!EnchantChecks.mainhand(shooter, enchant)) return;
|
||||
int level = EnchantChecks.getMainhandLevel(shooter, enchant);
|
||||
enchant.onBowShoot(shooter, arrow, level, event);
|
||||
}));
|
||||
});
|
||||
}
|
||||
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
@ -197,10 +190,8 @@ public class WatcherTriggers implements Listener {
|
||||
Arrow arrow = (Arrow) event.getEntity();
|
||||
LivingEntity shooter = (LivingEntity) event.getEntity().getShooter();
|
||||
|
||||
EcoEnchants.getAll().forEach((enchant -> {
|
||||
EnchantChecks.getEnchantsOnArrow(arrow).forEach(((enchant, level) -> {
|
||||
if(!enchant.isEnabled()) return;
|
||||
if (!EnchantChecks.arrow(arrow, enchant)) return;
|
||||
int level = EnchantChecks.getArrowLevel(arrow, enchant);
|
||||
enchant.onArrowHit(shooter, level, event);
|
||||
}));
|
||||
}
|
||||
@ -216,10 +207,8 @@ public class WatcherTriggers implements Listener {
|
||||
ItemStack item = TridentStack.getTridentStack(trident);
|
||||
LivingEntity shooter = (LivingEntity) event.getEntity().getShooter();
|
||||
|
||||
EcoEnchants.getAll().forEach((enchant -> {
|
||||
EnchantChecks.getEnchantsOnItem(item).forEach(((enchant, level) -> {
|
||||
if(!enchant.isEnabled()) return;
|
||||
if (!EnchantChecks.item(item, enchant)) return;
|
||||
int level = EnchantChecks.getItemLevel(item, enchant);
|
||||
enchant.onTridentHit(shooter, level, event);
|
||||
}));
|
||||
}
|
||||
@ -234,13 +223,11 @@ public class WatcherTriggers implements Listener {
|
||||
if (event.isCancelled())
|
||||
return;
|
||||
|
||||
EcoEnchants.getAll().forEach((enchant -> {
|
||||
EnchantChecks.getEnchantsOnMainhand(player).forEach((enchant, level) -> {
|
||||
if(event.isCancelled()) return;
|
||||
if(!enchant.isEnabled()) return;
|
||||
if (!EnchantChecks.mainhand(player, enchant)) return;
|
||||
int level = EnchantChecks.getMainhandLevel(player, enchant);
|
||||
enchant.onBlockBreak(player, block, level, event);
|
||||
}));
|
||||
});
|
||||
}
|
||||
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
@ -281,13 +268,11 @@ public class WatcherTriggers implements Listener {
|
||||
if(event.getBlock().getDrops(player.getInventory().getItemInMainHand()).isEmpty())
|
||||
return;
|
||||
|
||||
EcoEnchants.getAll().forEach((enchant -> {
|
||||
EnchantChecks.getEnchantsOnMainhand(player).forEach((enchant, level) -> {
|
||||
if(event.isCancelled()) return;
|
||||
if(!enchant.isEnabled()) return;
|
||||
if (!EnchantChecks.mainhand(player, enchant)) return;
|
||||
int level = EnchantChecks.getMainhandLevel(player, enchant);
|
||||
enchant.onDamageBlock(player, block, level, event);
|
||||
}));
|
||||
});
|
||||
}
|
||||
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
@ -302,13 +287,11 @@ public class WatcherTriggers implements Listener {
|
||||
LivingEntity shooter = (LivingEntity) trident.getShooter();
|
||||
ItemStack item = TridentStack.getTridentStack(trident);
|
||||
|
||||
EcoEnchants.getAll().forEach((enchant -> {
|
||||
EnchantChecks.getEnchantsOnItem(item).forEach((enchant, level) -> {
|
||||
if(event.isCancelled()) return;
|
||||
if(!enchant.isEnabled()) return;
|
||||
if (!EnchantChecks.item(item, enchant)) return;
|
||||
int level = EnchantChecks.getItemLevel(item, enchant);
|
||||
enchant.onTridentLaunch(shooter, trident, level, event);
|
||||
}));
|
||||
});
|
||||
}
|
||||
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
|
Loading…
Reference in New Issue
Block a user