Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package io.lumine.xikage.mythicartifacts.items;
- import com.google.common.collect.Lists;
- import io.lumine.xikage.mythicartifacts.MythicArtifacts;
- import io.lumine.xikage.mythicartifacts.io.ConfigManager;
- import io.lumine.xikage.mythicartifacts.profiles.Profile;
- import io.lumine.xikage.mythicmobs.MythicMobs;
- import io.lumine.xikage.mythicmobs.adapters.AbstractLocation;
- import io.lumine.xikage.mythicmobs.adapters.TaskManager;
- import io.lumine.xikage.mythicmobs.adapters.bukkit.BukkitAdapter;
- import io.lumine.xikage.mythicmobs.api.bukkit.events.MythicReloadedEvent;
- import io.lumine.xikage.mythicmobs.io.IOLoader;
- import io.lumine.xikage.mythicmobs.items.MythicItem;
- import io.lumine.xikage.mythicmobs.skills.SkillTrigger;
- import io.lumine.xikage.mythicmobs.skills.TriggeredSkill;
- import java.io.File;
- import java.util.ArrayList;
- import java.util.Collection;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import java.util.Optional;
- import java.util.UUID;
- import java.util.concurrent.ConcurrentHashMap;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- import org.bukkit.Bukkit;
- import org.bukkit.ChatColor;
- import org.bukkit.Material;
- import org.bukkit.entity.Entity;
- import org.bukkit.entity.EntityType;
- import org.bukkit.entity.LivingEntity;
- import org.bukkit.entity.Player;
- import org.bukkit.entity.Projectile;
- import org.bukkit.event.EventHandler;
- import org.bukkit.event.EventPriority;
- import org.bukkit.event.Listener;
- import org.bukkit.event.block.Action;
- import org.bukkit.event.block.BlockBreakEvent;
- import org.bukkit.event.block.BlockPlaceEvent;
- import org.bukkit.event.entity.EntityDamageByEntityEvent;
- import org.bukkit.event.entity.EntityDamageEvent;
- import org.bukkit.event.entity.EntityShootBowEvent;
- import org.bukkit.event.entity.PlayerDeathEvent;
- import org.bukkit.event.entity.PotionSplashEvent;
- import org.bukkit.event.inventory.CraftItemEvent;
- import org.bukkit.event.inventory.InventoryAction;
- import org.bukkit.event.inventory.InventoryClickEvent;
- import org.bukkit.event.player.PlayerArmorStandManipulateEvent;
- import org.bukkit.event.player.PlayerDropItemEvent;
- import org.bukkit.event.player.PlayerInteractAtEntityEvent;
- import org.bukkit.event.player.PlayerInteractEntityEvent;
- import org.bukkit.event.player.PlayerInteractEvent;
- import org.bukkit.event.player.PlayerItemBreakEvent;
- import org.bukkit.event.player.PlayerItemConsumeEvent;
- import org.bukkit.event.player.PlayerJoinEvent;
- import org.bukkit.event.player.PlayerRespawnEvent;
- import org.bukkit.inventory.ItemStack;
- import org.bukkit.inventory.meta.ItemMeta;
- import org.bukkit.projectiles.ProjectileSource;
- public class ItemManager
- implements Listener
- {
- public static Pattern AbilityPowerRegex;
- public static Pattern AmmunitionRegex;
- public static Pattern ArmorRegex;
- public static Pattern CriticalStrikeRegex;
- public static Pattern DurabilityRegex;
- public static Pattern DodgeRegex;
- public static Pattern LeechRegex;
- public static Pattern SpeedRegex;
- public static Pattern LoreRanges;
- public static Pattern EnchantmentRegex;
- private ConcurrentHashMap<String, Artifact> items = new ConcurrentHashMap();
- private ConcurrentHashMap<String, Artifact> display_lookup = new ConcurrentHashMap();
- private IOLoader<MythicArtifacts> itemLoader;
- private List<File> itemFiles;
- private List<IOLoader<MythicArtifacts>> itemList;
- private List<Runnable> secondPass = new ArrayList();
- private Map<UUID, List<ItemStack>> deathCache = new HashMap();
- public ItemManager() {
- AbilityPowerRegex = Pattern.compile("[+](\\d+)[ ](" + ConfigManager.AbilityPowerKeyword + ")");
- ArmorRegex = Pattern.compile("[+](\\d+)[ ](" + ConfigManager.ArmorKeyword + ")");
- CriticalStrikeRegex = Pattern.compile("[+](\\d+)[ ](" + ConfigManager.CriticalStrikeKeyword + ")");
- AmmunitionRegex = Pattern.compile("Ammunition[ ](\\d+)[ ]/[ ](\\d+)");
- DurabilityRegex = Pattern.compile("Durability[ ](\\d+)[ ]/[ ](\\d+)");
- DodgeRegex = Pattern.compile("[+](\\d+)[ ](" + ConfigManager.DodgeKeyword + ")");
- LeechRegex = Pattern.compile("[+](\\d+)[ ](" + ConfigManager.LeechKeyword + ")");
- SpeedRegex = Pattern.compile("[+](\\d+)[ ](" + ConfigManager.SpeedKeyword + ")");
- LoreRanges = Pattern.compile("\\{([0-9]*)-([0-9]*)\\}");
- EnchantmentRegex = Pattern.compile("Spellweaving ([IV]+)");
- TaskManager.get().runLater(() -> {
- loadItems();
- MythicArtifacts.log("Loaded " + this.items.size() + " items.");
- }20);
- }
- public void queueSecondPass(Runnable r) { this.secondPass.add(r); }
- public void loadItems() {
- this.items.clear();
- this.display_lookup.clear();
- for (MythicItem item : MythicMobs.inst().getItemManager().getItems()) {
- String name = item.getDisplayName();
- if (name != null && name.startsWith("" + ChatColor.WHITE)) {
- name = name.substring(2);
- }
- try {
- Artifact artifact = new Artifact(item);
- this.items.put(item.getInternalName(), artifact);
- String material = item.getMaterial().toString().toUpperCase();
- String lookup = material + "_" + name;
- this.display_lookup.put(lookup, artifact);
- }
- catch (Exception ex) {
- ex.printStackTrace();
- MythicArtifacts.error("Failed to load Artifact skills for item " + item.getInternalName());
- }
- }
- this.secondPass.forEach(runnable -> runnable.run());
- this.secondPass.clear();
- MythicMobs.inst().getSkillManager().runSecondPass();
- MythicArtifacts.log("Attached Artifact traits to items.");
- }
- public Optional<Artifact> getItem(String item) {
- if (this.items.containsKey(item)) {
- return Optional.of(this.items.get(item));
- }
- return Optional.empty();
- }
- public Optional<Artifact> getItem(ItemStack item) {
- if (item != null && item.hasItemMeta()) {
- String lookup = item.getType().toString() + "_" + item.getItemMeta().getDisplayName();
- if (this.display_lookup.containsKey(lookup)) {
- return Optional.of(this.display_lookup.get(lookup));
- }
- }
- return Optional.empty();
- }
- public Collection<Artifact> getItems() { return this.items.values(); }
- public Collection<String> getItemNames() { return this.items.keySet(); }
- @EventHandler
- public void onMythicReload(MythicReloadedEvent event) {
- loadItems();
- for (Player player : Bukkit.getOnlinePlayers()) {
- MythicArtifacts.inst().getProfileManager().getPlayerProfile(player).parseArmor();
- }
- }
- @EventHandler
- public void onPlayerJoin(PlayerJoinEvent event) {
- Player player = event.getPlayer();
- MythicArtifacts.inst().getProfileManager().getPlayerProfile(player).parseArmor();
- }
- @EventHandler(priority = EventPriority.HIGHEST)
- public void onBowShoot(EntityShootBowEvent event) {
- if (!(event.getEntity() instanceof Player))
- return;
- Player player = (Player)event.getEntity();
- Profile caster = MythicArtifacts.inst().getProfileManager().getPlayerProfile(player);
- boolean c = caster.runSkills(SkillTrigger.SHOOT, null);
- if (c) {
- event.setCancelled(true);
- }
- }
- @EventHandler(priority = EventPriority.HIGHEST)
- public void onConsume(PlayerItemConsumeEvent event) {
- ItemStack item = event.getItem();
- if (item.getItemMeta() != null &&
- item.getItemMeta().getDisplayName() != null) {
- Optional<Artifact> citem = MythicArtifacts.inst().getItemManager().getItem(item);
- if (citem.isPresent() && (
- (Artifact)citem.get()).hasSkills(SkillTrigger.CONSUME)) {
- Profile caster = MythicArtifacts.inst().getProfileManager().getPlayerProfile(event.getPlayer());
- AbstractLocation origin = BukkitAdapter.adapt(event.getPlayer().getLocation());
- TriggeredSkill ts = new TriggeredSkill(SkillTrigger.CONSUME, caster, origin, null, (Collection)((Artifact)citem.get()).getSkills(SkillTrigger.CONSUME).get(), true, new org.apache.commons.lang3.tuple.Pair[0]);
- if (ts.getCancelled()) {
- event.setCancelled(true);
- }
- }
- }
- }
- @EventHandler(priority = EventPriority.HIGHEST)
- public void onPotionSplash(PotionSplashEvent event) {
- if (!(event.getPotion().getShooter() instanceof Player))
- return;
- ItemStack item = event.getPotion().getItem();
- if (item.getItemMeta() != null &&
- item.getItemMeta().getDisplayName() != null) {
- Optional<Artifact> citem = MythicArtifacts.inst().getItemManager().getItem(item);
- if (citem.isPresent() && (
- (Artifact)citem.get()).hasSkills(SkillTrigger.SPLASH_POTION)) {
- Profile caster = MythicArtifacts.inst().getProfileManager().getPlayerProfile((Player)event.getPotion().getShooter());
- AbstractLocation origin = BukkitAdapter.adapt(event.getPotion().getLocation());
- TriggeredSkill ts = new TriggeredSkill(SkillTrigger.SPLASH_POTION, caster, origin, null, (Collection)((Artifact)citem.get()).getSkills(SkillTrigger.SPLASH_POTION).get(), true, new org.apache.commons.lang3.tuple.Pair[0]);
- if (ts.getCancelled()) {
- event.setCancelled(true);
- }
- }
- }
- }
- @EventHandler(priority = EventPriority.HIGHEST)
- public void EntityDamageEvent(EntityDamageByEntityEvent e) {
- Profile gs = null;
- boolean projectile = false;
- if (e.getDamager() instanceof Player) {
- Player p = (Player)e.getDamager();
- gs = MythicArtifacts.inst().getProfileManager().getPlayerProfile(p);
- DurabilityManager.handleDurabilityHand(p);
- } else if (e.getDamager() instanceof Projectile) {
- projectile = true;
- if (((Projectile)e.getDamager()).getShooter() instanceof Player) {
- Player p = (Player)((Projectile)e.getDamager()).getShooter();
- gs = MythicArtifacts.inst().getProfileManager().getPlayerProfile(p);
- DurabilityManager.handleDurabilityHand(p);
- }
- }
- if (gs != null) {
- if (MythicArtifacts.inst().getConfigManager().useItemLoreStats()) {
- if (gs.rollCriticalStrike() == true) {
- e.setDamage(e.getFinalDamage() * 2.0D);
- }
- if (gs.getLeechPercent() > 0.0D) {
- gs.doLeechHeal(e.getFinalDamage());
- }
- }
- if (projectile == true) {
- boolean c = gs.runSkills(SkillTrigger.BOW_HIT, BukkitAdapter.adapt(e.getEntity()));
- if (c) {
- e.setCancelled(true);
- }
- } else {
- boolean c = gs.runSkills(SkillTrigger.ATTACK, BukkitAdapter.adapt(e.getEntity()));
- if (c) {
- e.setCancelled(true);
- }
- }
- }
- if (e.getEntity() instanceof Player) {
- Player p = (Player)e.getEntity();
- gs = MythicArtifacts.inst().getProfileManager().getPlayerProfile(p);
- LivingEntity damager = null;
- if (e.getDamager() instanceof LivingEntity) {
- damager = (LivingEntity)e.getDamager();
- } else if (e.getDamager() instanceof Projectile && (
- (Projectile)e.getDamager()).getShooter() instanceof LivingEntity) {
- damager = (LivingEntity)((Projectile)e.getDamager()).getShooter();
- }
- if (damager != null) {
- boolean c = gs.runSkills(SkillTrigger.DAMAGED, BukkitAdapter.adapt(damager));
- if (c) {
- e.setCancelled(true);
- }
- }
- }
- }
- @EventHandler(priority = EventPriority.HIGHEST)
- public void InteractEntityEvent(PlayerInteractAtEntityEvent e) {
- Profile gs = MythicArtifacts.inst().getProfileManager().getPlayerProfile(e.getPlayer());
- boolean c = gs.runSkills(SkillTrigger.INTERACT, BukkitAdapter.adapt(e.getRightClicked()));
- if (c)
- e.setCancelled(true);
- }
- @EventHandler(priority = EventPriority.HIGHEST)
- public void InteractEvent(PlayerInteractEvent e) {
- boolean c;
- Player player = e.getPlayer();
- Profile gs = MythicArtifacts.inst().getProfileManager().getPlayerProfile(e.getPlayer());
- switch (e.getAction()) {
- case LEFT_CLICK_AIR:
- case LEFT_CLICK_BLOCK:
- c = gs.runSkills(SkillTrigger.SWING, gs.getPlayer());
- if (c) {
- e.setCancelled(true);
- }
- return;
- case RIGHT_CLICK_AIR:
- case RIGHT_CLICK_BLOCK:
- if (player.getInventory().getItemInHand() != null && player.getInventory().getItemInHand().getType() != Material.AIR) {
- boolean cc = gs.runSkills(SkillTrigger.USE, gs.getPlayer());
- if (cc) {
- e.setCancelled(true);
- }
- } else {
- try {
- boolean ccc = gs.runSkills(SkillTrigger.RIGHTCLICK, gs.getPlayer());
- if (ccc) {
- e.setCancelled(true);
- }
- } catch (Exception exception) {}
- break;
- }
- return;
- }
- }
- @EventHandler(priority = EventPriority.HIGH)
- public void onPlayerKillTrigger(PlayerDeathEvent event) {
- Player killed = event.getEntity();
- Entity entity = killed.getKiller();
- if (entity == null) {
- EntityDamageEvent entityDamageEvent = event.getEntity().getLastDamageCause();
- if (entityDamageEvent != null && !entityDamageEvent.isCancelled() && entityDamageEvent instanceof EntityDamageByEntityEvent) {
- entity = ((EntityDamageByEntityEvent)entityDamageEvent).getDamager();
- }
- }
- if (entity instanceof Projectile) {
- ProjectileSource ps = ((Projectile)entity).getShooter();
- if (ps instanceof LivingEntity) {
- entity = (Entity)ps;
- }
- }
- if (entity instanceof Player) {
- Profile killerProfile = MythicArtifacts.inst().getProfileManager().getPlayerProfile((Player)entity);
- killerProfile.runSkills(SkillTrigger.KILLPLAYER, BukkitAdapter.adapt(killed));
- }
- Profile killedProfile = MythicArtifacts.inst().getProfileManager().getPlayerProfile(killed);
- killedProfile.runSkills(SkillTrigger.DEATH, BukkitAdapter.adapt(entity));
- }
- @EventHandler
- public void onInteractEntity(PlayerInteractEntityEvent event) {
- if (event.getRightClicked().getType() == EntityType.ITEM_FRAME) {
- Player player = event.getPlayer();
- if (player.getItemInHand().getItemMeta() != null &&
- player.getItemInHand().getItemMeta().getDisplayName() != null) {
- Optional<Artifact> artifact = MythicArtifacts.inst().getItemManager().getItem(player.getItemInHand());
- if (artifact.isPresent()) {
- if (((Artifact)artifact.get()).isDestroy()) {
- player.getItemInHand().setType(Material.AIR);
- player.getItemInHand().setAmount(0);
- event.setCancelled(true);
- }
- if (((Artifact)artifact.get()).preventDropping()) {
- event.setCancelled(true);
- }
- }
- }
- }
- }
- @EventHandler
- public void onInteractEntity(PlayerArmorStandManipulateEvent event) {
- Player player = event.getPlayer();
- if (player.getItemInHand().getItemMeta() != null &&
- player.getItemInHand().getItemMeta().getDisplayName() != null) {
- Optional<Artifact> artifact = MythicArtifacts.inst().getItemManager().getItem(player.getItemInHand());
- if (artifact.isPresent()) {
- if (((Artifact)artifact.get()).isDestroy()) {
- player.getItemInHand().setType(Material.AIR);
- player.getItemInHand().setAmount(0);
- event.setCancelled(true);
- }
- if (((Artifact)artifact.get()).preventDropping()) {
- event.setCancelled(true);
- }
- }
- }
- }
- @EventHandler
- public void onBlockPlace(BlockPlaceEvent event) {
- if (event.getItemInHand().getItemMeta() != null &&
- event.getItemInHand().getItemMeta().getDisplayName() != null) {
- Optional<Artifact> citem = MythicArtifacts.inst().getItemManager().getItem(event.getItemInHand());
- if (citem.isPresent()) {
- event.setCancelled(true);
- if (((Artifact)citem.get()).hasSkills(SkillTrigger.SPLASH_POTION)) {
- Profile caster = MythicArtifacts.inst().getProfileManager().getPlayerProfile(event.getPlayer());
- AbstractLocation origin = BukkitAdapter.adapt(event.getBlock().getLocation());
- TriggeredSkill triggeredSkill = new TriggeredSkill(SkillTrigger.BLOCK_PLACE, caster, origin, null, (Collection)((Artifact)citem.get()).getSkills(SkillTrigger.BLOCK_PLACE).get(), true, new org.apache.commons.lang3.tuple.Pair[0]);
- }
- }
- }
- }
- @EventHandler
- public void onBlockBreak(BlockBreakEvent event) {
- Player player = event.getPlayer();
- Profile caster = MythicArtifacts.inst().getProfileManager().getPlayerProfile(player);
- AbstractLocation origin = BukkitAdapter.adapt(event.getBlock().getLocation());
- boolean b = caster.runSkills(SkillTrigger.BLOCK_BREAK, origin, caster.getPlayer());
- if (b) {
- event.setCancelled(true);
- }
- }
- @EventHandler
- public void onItemClickDestroy(InventoryClickEvent event) {
- ItemStack itemStack = event.getCursor();
- if (itemStack != null && itemStack.getItemMeta() != null &&
- itemStack.getItemMeta().getDisplayName() != null) {
- Optional<Artifact> item = MythicArtifacts.inst().getItemManager().getItem(itemStack);
- if (item.isPresent() && (
- (Artifact)item.get()).isDestroy()) {
- event.setCursor(new ItemStack(Material.AIR));
- return;
- }
- }
- itemStack = event.getCurrentItem();
- if (itemStack != null && itemStack.getItemMeta() != null &&
- itemStack.getItemMeta().getDisplayName() != null) {
- Optional<Artifact> item = MythicArtifacts.inst().getItemManager().getItem(itemStack);
- if (item.isPresent() && (
- (Artifact)item.get()).isDestroy()) {
- event.setCurrentItem(new ItemStack(Material.AIR));
- return;
- }
- }
- if (event.getAction() == InventoryAction.HOTBAR_SWAP || event.getAction() == InventoryAction.HOTBAR_MOVE_AND_READD) {
- itemStack = event.getView().getBottomInventory().getItem(event.getHotbarButton());
- if (itemStack != null && itemStack.getItemMeta() != null &&
- itemStack.getItemMeta().getDisplayName() != null) {
- Optional<Artifact> item = MythicArtifacts.inst().getItemManager().getItem(itemStack);
- if (item.isPresent() && (
- (Artifact)item.get()).isDestroy()) {
- event.getView().getBottomInventory().setItem(event.getHotbarButton(), new ItemStack(Material.AIR));
- return;
- }
- }
- }
- }
- @EventHandler
- public void onItemClick(InventoryClickEvent event) {
- if (event.getClickedInventory() instanceof org.bukkit.inventory.PlayerInventory && (event
- .getInventory() instanceof org.bukkit.inventory.PlayerInventory || event
- .getInventory() instanceof org.bukkit.inventory.CraftingInventory)) {
- return;
- }
- ItemStack itemStack = event.getCursor();
- if (itemStack != null && itemStack.getItemMeta() != null &&
- itemStack.getItemMeta().getDisplayName() != null) {
- Optional<Artifact> item = MythicArtifacts.inst().getItemManager().getItem(itemStack);
- if (item.isPresent()) {
- if (((Artifact)item.get()).isDestroy()) {
- itemStack.setType(Material.AIR);
- itemStack.setAmount(0);
- return;
- }
- if (((Artifact)item.get()).getPermission().isPresent() &&
- !event.getWhoClicked().hasPermission((String)((Artifact)item.get()).getPermission().get())) {
- itemStack.setType(Material.AIR);
- return;
- }
- if (((Artifact)item.get()).destroyOnDrop()) {
- itemStack.setType(Material.AIR);
- }
- if (((Artifact)item.get()).preventDropping()) {
- event.setCancelled(true);
- return;
- }
- }
- }
- itemStack = event.getCurrentItem();
- if (itemStack != null && itemStack.getItemMeta() != null &&
- itemStack.getItemMeta().getDisplayName() != null) {
- Optional<Artifact> item = MythicArtifacts.inst().getItemManager().getItem(itemStack);
- if (item.isPresent()) {
- if (((Artifact)item.get()).isDestroy()) {
- itemStack.setType(Material.AIR);
- return;
- }
- if (((Artifact)item.get()).getPermission().isPresent() &&
- !event.getWhoClicked().hasPermission((String)((Artifact)item.get()).getPermission().get())) {
- itemStack.setType(Material.AIR);
- return;
- }
- if (((Artifact)item.get()).destroyOnDrop()) {
- itemStack.setType(Material.AIR);
- }
- if (((Artifact)item.get()).preventDropping()) {
- event.setCancelled(true);
- return;
- }
- }
- }
- if (event.getAction() == InventoryAction.HOTBAR_SWAP || event.getAction() == InventoryAction.HOTBAR_MOVE_AND_READD) {
- itemStack = event.getView().getBottomInventory().getItem(event.getHotbarButton());
- if (itemStack != null && itemStack.getItemMeta() != null &&
- itemStack.getItemMeta().getDisplayName() != null) {
- Optional<Artifact> item = MythicArtifacts.inst().getItemManager().getItem(itemStack);
- if (item.isPresent()) {
- if (((Artifact)item.get()).getPermission().isPresent() &&
- !event.getWhoClicked().hasPermission((String)((Artifact)item.get()).getPermission().get())) {
- itemStack.setType(Material.AIR);
- return;
- }
- if (((Artifact)item.get()).destroyOnDrop()) {
- itemStack.setType(Material.AIR);
- itemStack.setAmount(0);
- }
- if (((Artifact)item.get()).preventDropping()) {
- event.setCancelled(true);
- return;
- }
- }
- }
- }
- }
- @EventHandler
- public void onItemDrop(PlayerDropItemEvent event) {
- if (event.getItemDrop().getItemStack().getItemMeta() != null &&
- event.getItemDrop().getItemStack().getItemMeta().getDisplayName() != null) {
- Optional<Artifact> item = MythicArtifacts.inst().getItemManager().getItem(event.getItemDrop().getItemStack());
- if (item.isPresent()) {
- if (((Artifact)item.get()).getPermission().isPresent() &&
- !event.getPlayer().hasPermission((String)((Artifact)item.get()).getPermission().get())) {
- event.getItemDrop().getItemStack().setType(Material.AIR);
- event.setCancelled(true);
- return;
- }
- if (((Artifact)item.get()).isDestroy() || ((Artifact)item.get()).destroyOnDrop()) {
- event.getItemDrop().remove();
- } else if (((Artifact)item.get()).preventDropping()) {
- event.setCancelled(true);
- return;
- }
- MythicArtifacts.inst().getProfileManager().getPlayerProfile(event.getPlayer()).parseWeapons();
- }
- }
- }
- @EventHandler(priority = EventPriority.HIGH)
- public void onPlayerDeath(PlayerDeathEvent event) {
- event.getDrops().removeIf(item -> {
- if (item.getItemMeta() != null &&
- item.getItemMeta().getDisplayName() != null) {
- Optional<Artifact> citem = MythicArtifacts.inst().getItemManager().getItem(item);
- if (citem.isPresent()) {
- if (!event.getKeepInventory() && (
- (Artifact)citem.get()).getKeepOnDeath()) {
- if (((Artifact)citem.get()).getPermission().isPresent() &&
- !event.getEntity().hasPermission((String)((Artifact)citem.get()).getPermission().get())) {
- item.setType(Material.AIR);
- return true;
- }
- this.deathCache.putIfAbsent(event.getEntity().getUniqueId(), Lists.newArrayList());
- ((List)this.deathCache.get(event.getEntity().getUniqueId())).add(item);
- return true;
- }
- if (((Artifact)citem.get()).isDestroy() || ((Artifact)citem.get()).destroyOnDrop()) {
- item.setType(Material.AIR);
- } else if (((Artifact)citem.get()).preventDropping()) {
- return true;
- }
- }
- }
- return false;
- });
- }
- @EventHandler
- public void onPlayerRespawn(PlayerRespawnEvent event) {
- Player player = event.getPlayer();
- if (this.deathCache.containsKey(player.getUniqueId())) {
- ((List)this.deathCache.remove(player.getUniqueId())).forEach(item ->
- player.getInventory().addItem(new ItemStack[] { item }));
- }
- }
- @EventHandler(priority = EventPriority.HIGHEST)
- public void EntityDamagedEvent(EntityDamageEvent e) {
- if (e.getEntity() instanceof Player) {
- Player p = (Player)e.getEntity();
- Profile gs = MythicArtifacts.inst().getProfileManager().getPlayerProfile(p);
- if (!(e instanceof EntityDamageByEntityEvent)) {
- gs.runSkills(SkillTrigger.DAMAGED, null);
- }
- if (!MythicArtifacts.inst().getConfigManager().useItemLoreStats())
- return;
- if (p.getNoDamageTicks() == 0) {
- DurabilityManager.handleDurabilityArmor(p);
- }
- if (gs != null) {
- EntityDamageEvent.DamageCause dc = e.getCause();
- if (dc.equals(EntityDamageEvent.DamageCause.FIRE) || dc
- .equals(EntityDamageEvent.DamageCause.FIRE_TICK) || dc
- .equals(EntityDamageEvent.DamageCause.LAVA)) {
- if (gs.getFireResistMitigation() > 0.0D) {
- if (e.isApplicable(EntityDamageEvent.DamageModifier.ARMOR)) {
- e.setDamage(EntityDamageEvent.DamageModifier.ARMOR, 1.0E-4D);
- }
- if (e.isApplicable(EntityDamageEvent.DamageModifier.MAGIC)) {
- e.setDamage(EntityDamageEvent.DamageModifier.MAGIC, 0.0D);
- }
- e.setDamage(EntityDamageEvent.DamageModifier.BASE, e.getDamage(EntityDamageEvent.DamageModifier.BASE) * gs.getFireResistMultiplier());
- }
- }
- else if (gs.getArmorMitigation() > 0.0D) {
- if (e.isApplicable(EntityDamageEvent.DamageModifier.ARMOR)) {
- e.setDamage(EntityDamageEvent.DamageModifier.ARMOR, 1.0E-4D);
- }
- if (e.isApplicable(EntityDamageEvent.DamageModifier.MAGIC)) {
- e.setDamage(EntityDamageEvent.DamageModifier.MAGIC, 0.0D);
- }
- e.setDamage(EntityDamageEvent.DamageModifier.BASE, e.getDamage(EntityDamageEvent.DamageModifier.BASE) * gs.getArmorMultiplier());
- }
- }
- }
- }
- @EventHandler(ignoreCancelled = true)
- public void disableItemBreak(PlayerItemBreakEvent event) { DurabilityManager.handleItemBreak(event.getBrokenItem()); }
- @EventHandler(priority = EventPriority.HIGHEST)
- public void eventCraft(CraftItemEvent event) {
- try {
- if (event.getCurrentItem() == null || event.getCurrentItem().getType() == Material.AIR) {
- return;
- }
- ItemStack item = event.getCurrentItem();
- if (item.hasItemMeta()) {
- ItemMeta im = item.getItemMeta();
- if (im.hasLore()) {
- ArrayList<String> parsedLore = new ArrayList<String>();
- int num = 0;
- for (String str : im.getLore()) {
- if (str.contains("{")) {
- Matcher pMatcher = LoreRanges.matcher(str);
- while (pMatcher.find()) {
- int min = Integer.parseInt(pMatcher.group(1));
- int max = Integer.parseInt(pMatcher.group(2));
- num = MythicArtifacts.r.nextInt(max - min) + min;
- str = str.replace(pMatcher.group(0), "" + num);
- MythicArtifacts.debug("-- Replacing number range " + pMatcher.group(0) + " with " + num);
- }
- str = str.replace("{lastrandom}", String.valueOf(num));
- }
- parsedLore.add(str);
- }
- im.setLore(parsedLore);
- item.setItemMeta(im);
- event.setCurrentItem(item);
- }
- }
- } catch (Exception exception) {}
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement