Advertisement
Guest User

Untitled

a guest
May 24th, 2019
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 28.23 KB | None | 0 0
  1. package io.lumine.xikage.mythicartifacts.items;
  2.  
  3. import com.google.common.collect.Lists;
  4. import io.lumine.xikage.mythicartifacts.MythicArtifacts;
  5. import io.lumine.xikage.mythicartifacts.io.ConfigManager;
  6. import io.lumine.xikage.mythicartifacts.profiles.Profile;
  7. import io.lumine.xikage.mythicmobs.MythicMobs;
  8. import io.lumine.xikage.mythicmobs.adapters.AbstractLocation;
  9. import io.lumine.xikage.mythicmobs.adapters.TaskManager;
  10. import io.lumine.xikage.mythicmobs.adapters.bukkit.BukkitAdapter;
  11. import io.lumine.xikage.mythicmobs.api.bukkit.events.MythicReloadedEvent;
  12. import io.lumine.xikage.mythicmobs.io.IOLoader;
  13. import io.lumine.xikage.mythicmobs.items.MythicItem;
  14. import io.lumine.xikage.mythicmobs.skills.SkillTrigger;
  15. import io.lumine.xikage.mythicmobs.skills.TriggeredSkill;
  16. import java.io.File;
  17. import java.util.ArrayList;
  18. import java.util.Collection;
  19. import java.util.HashMap;
  20. import java.util.List;
  21. import java.util.Map;
  22. import java.util.Optional;
  23. import java.util.UUID;
  24. import java.util.concurrent.ConcurrentHashMap;
  25. import java.util.regex.Matcher;
  26. import java.util.regex.Pattern;
  27. import org.bukkit.Bukkit;
  28. import org.bukkit.ChatColor;
  29. import org.bukkit.Material;
  30. import org.bukkit.entity.Entity;
  31. import org.bukkit.entity.EntityType;
  32. import org.bukkit.entity.LivingEntity;
  33. import org.bukkit.entity.Player;
  34. import org.bukkit.entity.Projectile;
  35. import org.bukkit.event.EventHandler;
  36. import org.bukkit.event.EventPriority;
  37. import org.bukkit.event.Listener;
  38. import org.bukkit.event.block.Action;
  39. import org.bukkit.event.block.BlockBreakEvent;
  40. import org.bukkit.event.block.BlockPlaceEvent;
  41. import org.bukkit.event.entity.EntityDamageByEntityEvent;
  42. import org.bukkit.event.entity.EntityDamageEvent;
  43. import org.bukkit.event.entity.EntityShootBowEvent;
  44. import org.bukkit.event.entity.PlayerDeathEvent;
  45. import org.bukkit.event.entity.PotionSplashEvent;
  46. import org.bukkit.event.inventory.CraftItemEvent;
  47. import org.bukkit.event.inventory.InventoryAction;
  48. import org.bukkit.event.inventory.InventoryClickEvent;
  49. import org.bukkit.event.player.PlayerArmorStandManipulateEvent;
  50. import org.bukkit.event.player.PlayerDropItemEvent;
  51. import org.bukkit.event.player.PlayerInteractAtEntityEvent;
  52. import org.bukkit.event.player.PlayerInteractEntityEvent;
  53. import org.bukkit.event.player.PlayerInteractEvent;
  54. import org.bukkit.event.player.PlayerItemBreakEvent;
  55. import org.bukkit.event.player.PlayerItemConsumeEvent;
  56. import org.bukkit.event.player.PlayerJoinEvent;
  57. import org.bukkit.event.player.PlayerRespawnEvent;
  58. import org.bukkit.inventory.ItemStack;
  59. import org.bukkit.inventory.meta.ItemMeta;
  60. import org.bukkit.projectiles.ProjectileSource;
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70.  
  71.  
  72.  
  73. public class ItemManager
  74.   implements Listener
  75. {
  76.   public static Pattern AbilityPowerRegex;
  77.   public static Pattern AmmunitionRegex;
  78.   public static Pattern ArmorRegex;
  79.   public static Pattern CriticalStrikeRegex;
  80.   public static Pattern DurabilityRegex;
  81.   public static Pattern DodgeRegex;
  82.   public static Pattern LeechRegex;
  83.   public static Pattern SpeedRegex;
  84.   public static Pattern LoreRanges;
  85.   public static Pattern EnchantmentRegex;
  86.   private ConcurrentHashMap<String, Artifact> items = new ConcurrentHashMap();
  87.   private ConcurrentHashMap<String, Artifact> display_lookup = new ConcurrentHashMap();
  88.  
  89.   private IOLoader<MythicArtifacts> itemLoader;
  90.  
  91.   private List<File> itemFiles;
  92.   private List<IOLoader<MythicArtifacts>> itemList;
  93.   private List<Runnable> secondPass = new ArrayList();
  94.  
  95.   private Map<UUID, List<ItemStack>> deathCache = new HashMap();
  96.  
  97.   public ItemManager() {
  98.     AbilityPowerRegex = Pattern.compile("[+](\\d+)[ ](" + ConfigManager.AbilityPowerKeyword + ")");
  99.     ArmorRegex = Pattern.compile("[+](\\d+)[ ](" + ConfigManager.ArmorKeyword + ")");
  100.     CriticalStrikeRegex = Pattern.compile("[+](\\d+)[ ](" + ConfigManager.CriticalStrikeKeyword + ")");
  101.     AmmunitionRegex = Pattern.compile("Ammunition[ ](\\d+)[ ]/[ ](\\d+)");
  102.     DurabilityRegex = Pattern.compile("Durability[ ](\\d+)[ ]/[ ](\\d+)");
  103.     DodgeRegex = Pattern.compile("[+](\\d+)[ ](" + ConfigManager.DodgeKeyword + ")");
  104.     LeechRegex = Pattern.compile("[+](\\d+)[ ](" + ConfigManager.LeechKeyword + ")");
  105.     SpeedRegex = Pattern.compile("[+](\\d+)[ ](" + ConfigManager.SpeedKeyword + ")");
  106.     LoreRanges = Pattern.compile("\\{([0-9]*)-([0-9]*)\\}");
  107.     EnchantmentRegex = Pattern.compile("Spellweaving ([IV]+)");
  108.    
  109.     TaskManager.get().runLater(() -> {
  110.           loadItems();
  111.           MythicArtifacts.log("Loaded " + this.items.size() + " items.");
  112.         }20);
  113.   }
  114.  
  115.  
  116.   public void queueSecondPass(Runnable r) { this.secondPass.add(r); }
  117.  
  118.  
  119.   public void loadItems() {
  120.     this.items.clear();
  121.     this.display_lookup.clear();
  122.    
  123.     for (MythicItem item : MythicMobs.inst().getItemManager().getItems()) {
  124.       String name = item.getDisplayName();
  125.       if (name != null && name.startsWith("" + ChatColor.WHITE)) {
  126.         name = name.substring(2);
  127.       }
  128.       try {
  129.         Artifact artifact = new Artifact(item);
  130.        
  131.         this.items.put(item.getInternalName(), artifact);
  132.        
  133.         String material = item.getMaterial().toString().toUpperCase();
  134.         String lookup = material + "_" + name;
  135.         this.display_lookup.put(lookup, artifact);
  136.       }
  137.       catch (Exception ex) {
  138.         ex.printStackTrace();
  139.         MythicArtifacts.error("Failed to load Artifact skills for item " + item.getInternalName());
  140.       }
  141.     }
  142.     this.secondPass.forEach(runnable -> runnable.run());
  143.     this.secondPass.clear();
  144.     MythicMobs.inst().getSkillManager().runSecondPass();
  145.     MythicArtifacts.log("Attached Artifact traits to items.");
  146.   }
  147.  
  148.   public Optional<Artifact> getItem(String item) {
  149.     if (this.items.containsKey(item)) {
  150.       return Optional.of(this.items.get(item));
  151.     }
  152.     return Optional.empty();
  153.   }
  154.  
  155.   public Optional<Artifact> getItem(ItemStack item) {
  156.     if (item != null && item.hasItemMeta()) {
  157.       String lookup = item.getType().toString() + "_" + item.getItemMeta().getDisplayName();
  158.      
  159.       if (this.display_lookup.containsKey(lookup)) {
  160.         return Optional.of(this.display_lookup.get(lookup));
  161.       }
  162.     }
  163.     return Optional.empty();
  164.   }
  165.  
  166.  
  167.   public Collection<Artifact> getItems() { return this.items.values(); }
  168.  
  169.  
  170.  
  171.   public Collection<String> getItemNames() { return this.items.keySet(); }
  172.  
  173.  
  174.   @EventHandler
  175.   public void onMythicReload(MythicReloadedEvent event) {
  176.     loadItems();
  177.    
  178.     for (Player player : Bukkit.getOnlinePlayers()) {
  179.       MythicArtifacts.inst().getProfileManager().getPlayerProfile(player).parseArmor();
  180.     }
  181.   }
  182.  
  183.   @EventHandler
  184.   public void onPlayerJoin(PlayerJoinEvent event) {
  185.     Player player = event.getPlayer();
  186.     MythicArtifacts.inst().getProfileManager().getPlayerProfile(player).parseArmor();
  187.   }
  188.  
  189.   @EventHandler(priority = EventPriority.HIGHEST)
  190.   public void onBowShoot(EntityShootBowEvent event) {
  191.     if (!(event.getEntity() instanceof Player))
  192.       return;
  193.     Player player = (Player)event.getEntity();
  194.     Profile caster = MythicArtifacts.inst().getProfileManager().getPlayerProfile(player);
  195.     boolean c = caster.runSkills(SkillTrigger.SHOOT, null);
  196.     if (c) {
  197.       event.setCancelled(true);
  198.     }
  199.   }
  200.  
  201.   @EventHandler(priority = EventPriority.HIGHEST)
  202.   public void onConsume(PlayerItemConsumeEvent event) {
  203.     ItemStack item = event.getItem();
  204.    
  205.     if (item.getItemMeta() != null &&
  206.       item.getItemMeta().getDisplayName() != null) {
  207.       Optional<Artifact> citem = MythicArtifacts.inst().getItemManager().getItem(item);
  208.       if (citem.isPresent() && (
  209.         (Artifact)citem.get()).hasSkills(SkillTrigger.CONSUME)) {
  210.         Profile caster = MythicArtifacts.inst().getProfileManager().getPlayerProfile(event.getPlayer());
  211.         AbstractLocation origin = BukkitAdapter.adapt(event.getPlayer().getLocation());
  212.         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]);
  213.         if (ts.getCancelled()) {
  214.           event.setCancelled(true);
  215.         }
  216.       }
  217.     }
  218.   }
  219.  
  220.  
  221.  
  222.   @EventHandler(priority = EventPriority.HIGHEST)
  223.   public void onPotionSplash(PotionSplashEvent event) {
  224.     if (!(event.getPotion().getShooter() instanceof Player))
  225.       return;
  226.     ItemStack item = event.getPotion().getItem();
  227.    
  228.     if (item.getItemMeta() != null &&
  229.       item.getItemMeta().getDisplayName() != null) {
  230.       Optional<Artifact> citem = MythicArtifacts.inst().getItemManager().getItem(item);
  231.       if (citem.isPresent() && (
  232.         (Artifact)citem.get()).hasSkills(SkillTrigger.SPLASH_POTION)) {
  233.         Profile caster = MythicArtifacts.inst().getProfileManager().getPlayerProfile((Player)event.getPotion().getShooter());
  234.         AbstractLocation origin = BukkitAdapter.adapt(event.getPotion().getLocation());
  235.         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]);
  236.         if (ts.getCancelled()) {
  237.           event.setCancelled(true);
  238.         }
  239.       }
  240.     }
  241.   }
  242.  
  243.  
  244.  
  245.  
  246.  
  247.  
  248.   @EventHandler(priority = EventPriority.HIGHEST)
  249.   public void EntityDamageEvent(EntityDamageByEntityEvent e) {
  250.     Profile gs = null;
  251.     boolean projectile = false;
  252.    
  253.     if (e.getDamager() instanceof Player) {
  254.       Player p = (Player)e.getDamager();
  255.      
  256.       gs = MythicArtifacts.inst().getProfileManager().getPlayerProfile(p);
  257.       DurabilityManager.handleDurabilityHand(p);
  258.     } else if (e.getDamager() instanceof Projectile) {
  259.       projectile = true;
  260.       if (((Projectile)e.getDamager()).getShooter() instanceof Player) {
  261.         Player p = (Player)((Projectile)e.getDamager()).getShooter();
  262.         gs = MythicArtifacts.inst().getProfileManager().getPlayerProfile(p);
  263.         DurabilityManager.handleDurabilityHand(p);
  264.       }
  265.     }
  266.  
  267.    
  268.     if (gs != null) {
  269.       if (MythicArtifacts.inst().getConfigManager().useItemLoreStats()) {
  270.         if (gs.rollCriticalStrike() == true) {
  271.           e.setDamage(e.getFinalDamage() * 2.0D);
  272.         }
  273.         if (gs.getLeechPercent() > 0.0D) {
  274.           gs.doLeechHeal(e.getFinalDamage());
  275.         }
  276.       }
  277.      
  278.       if (projectile == true) {
  279.         boolean c = gs.runSkills(SkillTrigger.BOW_HIT, BukkitAdapter.adapt(e.getEntity()));
  280.         if (c) {
  281.           e.setCancelled(true);
  282.         }
  283.       } else {
  284.         boolean c = gs.runSkills(SkillTrigger.ATTACK, BukkitAdapter.adapt(e.getEntity()));
  285.         if (c) {
  286.           e.setCancelled(true);
  287.         }
  288.       }
  289.     }
  290.    
  291.     if (e.getEntity() instanceof Player) {
  292.       Player p = (Player)e.getEntity();
  293.       gs = MythicArtifacts.inst().getProfileManager().getPlayerProfile(p);
  294.      
  295.       LivingEntity damager = null;
  296.      
  297.       if (e.getDamager() instanceof LivingEntity) {
  298.         damager = (LivingEntity)e.getDamager();
  299.       } else if (e.getDamager() instanceof Projectile && (
  300.         (Projectile)e.getDamager()).getShooter() instanceof LivingEntity) {
  301.         damager = (LivingEntity)((Projectile)e.getDamager()).getShooter();
  302.       }
  303.  
  304.      
  305.       if (damager != null) {
  306.         boolean c = gs.runSkills(SkillTrigger.DAMAGED, BukkitAdapter.adapt(damager));
  307.         if (c) {
  308.           e.setCancelled(true);
  309.         }
  310.       }
  311.     }
  312.   }
  313.  
  314.   @EventHandler(priority = EventPriority.HIGHEST)
  315.   public void InteractEntityEvent(PlayerInteractAtEntityEvent e) {
  316.     Profile gs = MythicArtifacts.inst().getProfileManager().getPlayerProfile(e.getPlayer());
  317.    
  318.     boolean c = gs.runSkills(SkillTrigger.INTERACT, BukkitAdapter.adapt(e.getRightClicked()));
  319.     if (c)
  320.       e.setCancelled(true);
  321.   }
  322.  
  323.   @EventHandler(priority = EventPriority.HIGHEST)
  324.   public void InteractEvent(PlayerInteractEvent e) {
  325.     boolean c;
  326.     Player player = e.getPlayer();
  327.     Profile gs = MythicArtifacts.inst().getProfileManager().getPlayerProfile(e.getPlayer());
  328.    
  329.     switch (e.getAction()) {
  330.       case LEFT_CLICK_AIR:
  331.       case LEFT_CLICK_BLOCK:
  332.         c = gs.runSkills(SkillTrigger.SWING, gs.getPlayer());
  333.         if (c) {
  334.           e.setCancelled(true);
  335.         }
  336.         return;
  337.       case RIGHT_CLICK_AIR:
  338.       case RIGHT_CLICK_BLOCK:
  339.         if (player.getInventory().getItemInHand() != null && player.getInventory().getItemInHand().getType() != Material.AIR) {
  340.           boolean cc = gs.runSkills(SkillTrigger.USE, gs.getPlayer());
  341.           if (cc) {
  342.             e.setCancelled(true);
  343.           }
  344.         } else {
  345.          
  346.           try {
  347.             boolean ccc = gs.runSkills(SkillTrigger.RIGHTCLICK, gs.getPlayer());
  348.             if (ccc) {
  349.               e.setCancelled(true);
  350.             }
  351.           } catch (Exception exception) {}
  352.           break;
  353.         }
  354.         return;
  355.     }
  356.   }
  357.  
  358.  
  359.  
  360.  
  361.   @EventHandler(priority = EventPriority.HIGH)
  362.   public void onPlayerKillTrigger(PlayerDeathEvent event) {
  363.     Player killed = event.getEntity();
  364.     Entity entity = killed.getKiller();
  365.    
  366.     if (entity == null) {
  367.       EntityDamageEvent entityDamageEvent = event.getEntity().getLastDamageCause();
  368.       if (entityDamageEvent != null && !entityDamageEvent.isCancelled() && entityDamageEvent instanceof EntityDamageByEntityEvent) {
  369.         entity = ((EntityDamageByEntityEvent)entityDamageEvent).getDamager();
  370.       }
  371.     }
  372.     if (entity instanceof Projectile) {
  373.       ProjectileSource ps = ((Projectile)entity).getShooter();
  374.      
  375.       if (ps instanceof LivingEntity) {
  376.         entity = (Entity)ps;
  377.       }
  378.     }
  379.    
  380.     if (entity instanceof Player) {
  381.       Profile killerProfile = MythicArtifacts.inst().getProfileManager().getPlayerProfile((Player)entity);
  382.       killerProfile.runSkills(SkillTrigger.KILLPLAYER, BukkitAdapter.adapt(killed));
  383.     }
  384.    
  385.     Profile killedProfile = MythicArtifacts.inst().getProfileManager().getPlayerProfile(killed);
  386.     killedProfile.runSkills(SkillTrigger.DEATH, BukkitAdapter.adapt(entity));
  387.   }
  388.  
  389.   @EventHandler
  390.   public void onInteractEntity(PlayerInteractEntityEvent event) {
  391.     if (event.getRightClicked().getType() == EntityType.ITEM_FRAME) {
  392.       Player player = event.getPlayer();
  393.       if (player.getItemInHand().getItemMeta() != null &&
  394.         player.getItemInHand().getItemMeta().getDisplayName() != null) {
  395.         Optional<Artifact> artifact = MythicArtifacts.inst().getItemManager().getItem(player.getItemInHand());
  396.        
  397.         if (artifact.isPresent()) {
  398.           if (((Artifact)artifact.get()).isDestroy()) {
  399.             player.getItemInHand().setType(Material.AIR);
  400.             player.getItemInHand().setAmount(0);
  401.             event.setCancelled(true);
  402.           }
  403.           if (((Artifact)artifact.get()).preventDropping()) {
  404.             event.setCancelled(true);
  405.           }
  406.         }
  407.       }
  408.     }
  409.   }
  410.  
  411.  
  412.   @EventHandler
  413.   public void onInteractEntity(PlayerArmorStandManipulateEvent event) {
  414.     Player player = event.getPlayer();
  415.     if (player.getItemInHand().getItemMeta() != null &&
  416.       player.getItemInHand().getItemMeta().getDisplayName() != null) {
  417.       Optional<Artifact> artifact = MythicArtifacts.inst().getItemManager().getItem(player.getItemInHand());
  418.      
  419.       if (artifact.isPresent()) {
  420.         if (((Artifact)artifact.get()).isDestroy()) {
  421.           player.getItemInHand().setType(Material.AIR);
  422.           player.getItemInHand().setAmount(0);
  423.           event.setCancelled(true);
  424.         }
  425.         if (((Artifact)artifact.get()).preventDropping()) {
  426.           event.setCancelled(true);
  427.         }
  428.       }
  429.     }
  430.   }
  431.  
  432.  
  433.   @EventHandler
  434.   public void onBlockPlace(BlockPlaceEvent event) {
  435.     if (event.getItemInHand().getItemMeta() != null &&
  436.       event.getItemInHand().getItemMeta().getDisplayName() != null) {
  437.       Optional<Artifact> citem = MythicArtifacts.inst().getItemManager().getItem(event.getItemInHand());
  438.       if (citem.isPresent()) {
  439.         event.setCancelled(true);
  440.         if (((Artifact)citem.get()).hasSkills(SkillTrigger.SPLASH_POTION)) {
  441.           Profile caster = MythicArtifacts.inst().getProfileManager().getPlayerProfile(event.getPlayer());
  442.           AbstractLocation origin = BukkitAdapter.adapt(event.getBlock().getLocation());
  443.           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]);
  444.         }
  445.       }
  446.     }
  447.   }
  448.  
  449.  
  450.   @EventHandler
  451.   public void onBlockBreak(BlockBreakEvent event) {
  452.     Player player = event.getPlayer();
  453.     Profile caster = MythicArtifacts.inst().getProfileManager().getPlayerProfile(player);
  454.     AbstractLocation origin = BukkitAdapter.adapt(event.getBlock().getLocation());
  455.    
  456.     boolean b = caster.runSkills(SkillTrigger.BLOCK_BREAK, origin, caster.getPlayer());
  457.     if (b) {
  458.       event.setCancelled(true);
  459.     }
  460.   }
  461.  
  462.  
  463.  
  464.  
  465.  
  466.  
  467.  
  468.  
  469.  
  470.  
  471.  
  472.  
  473.  
  474.  
  475.  
  476.  
  477.  
  478.  
  479.  
  480.  
  481.  
  482.  
  483.  
  484.  
  485.   @EventHandler
  486.   public void onItemClickDestroy(InventoryClickEvent event) {
  487.     ItemStack itemStack = event.getCursor();
  488.     if (itemStack != null && itemStack.getItemMeta() != null &&
  489.       itemStack.getItemMeta().getDisplayName() != null) {
  490.       Optional<Artifact> item = MythicArtifacts.inst().getItemManager().getItem(itemStack);
  491.       if (item.isPresent() && (
  492.         (Artifact)item.get()).isDestroy()) {
  493.         event.setCursor(new ItemStack(Material.AIR));
  494.  
  495.        
  496.         return;
  497.       }
  498.     }
  499.    
  500.     itemStack = event.getCurrentItem();
  501.     if (itemStack != null && itemStack.getItemMeta() != null &&
  502.       itemStack.getItemMeta().getDisplayName() != null) {
  503.       Optional<Artifact> item = MythicArtifacts.inst().getItemManager().getItem(itemStack);
  504.       if (item.isPresent() && (
  505.         (Artifact)item.get()).isDestroy()) {
  506.         event.setCurrentItem(new ItemStack(Material.AIR));
  507.  
  508.        
  509.         return;
  510.       }
  511.     }
  512.    
  513.     if (event.getAction() == InventoryAction.HOTBAR_SWAP || event.getAction() == InventoryAction.HOTBAR_MOVE_AND_READD) {
  514.       itemStack = event.getView().getBottomInventory().getItem(event.getHotbarButton());
  515.       if (itemStack != null && itemStack.getItemMeta() != null &&
  516.         itemStack.getItemMeta().getDisplayName() != null) {
  517.         Optional<Artifact> item = MythicArtifacts.inst().getItemManager().getItem(itemStack);
  518.         if (item.isPresent() && (
  519.           (Artifact)item.get()).isDestroy()) {
  520.           event.getView().getBottomInventory().setItem(event.getHotbarButton(), new ItemStack(Material.AIR));
  521.           return;
  522.         }
  523.       }
  524.     }
  525.   }
  526.  
  527.  
  528.  
  529.   @EventHandler
  530.   public void onItemClick(InventoryClickEvent event) {
  531.     if (event.getClickedInventory() instanceof org.bukkit.inventory.PlayerInventory && (event
  532.       .getInventory() instanceof org.bukkit.inventory.PlayerInventory || event
  533.       .getInventory() instanceof org.bukkit.inventory.CraftingInventory)) {
  534.       return;
  535.     }
  536.  
  537.  
  538.    
  539.     ItemStack itemStack = event.getCursor();
  540.     if (itemStack != null && itemStack.getItemMeta() != null &&
  541.       itemStack.getItemMeta().getDisplayName() != null) {
  542.       Optional<Artifact> item = MythicArtifacts.inst().getItemManager().getItem(itemStack);
  543.       if (item.isPresent()) {
  544.         if (((Artifact)item.get()).isDestroy()) {
  545.           itemStack.setType(Material.AIR);
  546.           itemStack.setAmount(0);
  547.           return;
  548.         }
  549.         if (((Artifact)item.get()).getPermission().isPresent() &&
  550.           !event.getWhoClicked().hasPermission((String)((Artifact)item.get()).getPermission().get())) {
  551.           itemStack.setType(Material.AIR);
  552.          
  553.           return;
  554.         }
  555.         if (((Artifact)item.get()).destroyOnDrop()) {
  556.           itemStack.setType(Material.AIR);
  557.         }
  558.         if (((Artifact)item.get()).preventDropping()) {
  559.           event.setCancelled(true);
  560.          
  561.           return;
  562.         }
  563.       }
  564.     }
  565.     itemStack = event.getCurrentItem();
  566.     if (itemStack != null && itemStack.getItemMeta() != null &&
  567.       itemStack.getItemMeta().getDisplayName() != null) {
  568.       Optional<Artifact> item = MythicArtifacts.inst().getItemManager().getItem(itemStack);
  569.       if (item.isPresent()) {
  570.         if (((Artifact)item.get()).isDestroy()) {
  571.           itemStack.setType(Material.AIR);
  572.           return;
  573.         }
  574.         if (((Artifact)item.get()).getPermission().isPresent() &&
  575.           !event.getWhoClicked().hasPermission((String)((Artifact)item.get()).getPermission().get())) {
  576.           itemStack.setType(Material.AIR);
  577.          
  578.           return;
  579.         }
  580.         if (((Artifact)item.get()).destroyOnDrop()) {
  581.           itemStack.setType(Material.AIR);
  582.         }
  583.         if (((Artifact)item.get()).preventDropping()) {
  584.           event.setCancelled(true);
  585.          
  586.           return;
  587.         }
  588.       }
  589.     }
  590.     if (event.getAction() == InventoryAction.HOTBAR_SWAP || event.getAction() == InventoryAction.HOTBAR_MOVE_AND_READD) {
  591.       itemStack = event.getView().getBottomInventory().getItem(event.getHotbarButton());
  592.       if (itemStack != null && itemStack.getItemMeta() != null &&
  593.         itemStack.getItemMeta().getDisplayName() != null) {
  594.         Optional<Artifact> item = MythicArtifacts.inst().getItemManager().getItem(itemStack);
  595.         if (item.isPresent()) {
  596.           if (((Artifact)item.get()).getPermission().isPresent() &&
  597.             !event.getWhoClicked().hasPermission((String)((Artifact)item.get()).getPermission().get())) {
  598.             itemStack.setType(Material.AIR);
  599.            
  600.             return;
  601.           }
  602.           if (((Artifact)item.get()).destroyOnDrop()) {
  603.             itemStack.setType(Material.AIR);
  604.             itemStack.setAmount(0);
  605.           }
  606.           if (((Artifact)item.get()).preventDropping()) {
  607.             event.setCancelled(true);
  608.             return;
  609.           }
  610.         }
  611.       }
  612.     }
  613.   }
  614.  
  615.  
  616.   @EventHandler
  617.   public void onItemDrop(PlayerDropItemEvent event) {
  618.     if (event.getItemDrop().getItemStack().getItemMeta() != null &&
  619.       event.getItemDrop().getItemStack().getItemMeta().getDisplayName() != null) {
  620.       Optional<Artifact> item = MythicArtifacts.inst().getItemManager().getItem(event.getItemDrop().getItemStack());
  621.       if (item.isPresent()) {
  622.         if (((Artifact)item.get()).getPermission().isPresent() &&
  623.           !event.getPlayer().hasPermission((String)((Artifact)item.get()).getPermission().get())) {
  624.           event.getItemDrop().getItemStack().setType(Material.AIR);
  625.           event.setCancelled(true);
  626.          
  627.           return;
  628.         }
  629.         if (((Artifact)item.get()).isDestroy() || ((Artifact)item.get()).destroyOnDrop()) {
  630.           event.getItemDrop().remove();
  631.         } else if (((Artifact)item.get()).preventDropping()) {
  632.           event.setCancelled(true);
  633.           return;
  634.         }
  635.         MythicArtifacts.inst().getProfileManager().getPlayerProfile(event.getPlayer()).parseWeapons();
  636.       }
  637.     }
  638.   }
  639.  
  640.  
  641.   @EventHandler(priority = EventPriority.HIGH)
  642.   public void onPlayerDeath(PlayerDeathEvent event) {
  643.     event.getDrops().removeIf(item -> {
  644.           if (item.getItemMeta() != null &&
  645.             item.getItemMeta().getDisplayName() != null) {
  646.             Optional<Artifact> citem = MythicArtifacts.inst().getItemManager().getItem(item);
  647.            
  648.             if (citem.isPresent()) {
  649.               if (!event.getKeepInventory() && (
  650.                 (Artifact)citem.get()).getKeepOnDeath()) {
  651.                 if (((Artifact)citem.get()).getPermission().isPresent() &&
  652.                   !event.getEntity().hasPermission((String)((Artifact)citem.get()).getPermission().get())) {
  653.                   item.setType(Material.AIR);
  654.                   return true;
  655.                 }
  656.                
  657.                 this.deathCache.putIfAbsent(event.getEntity().getUniqueId(), Lists.newArrayList());
  658.                 ((List)this.deathCache.get(event.getEntity().getUniqueId())).add(item);
  659.                 return true;
  660.               }
  661.              
  662.               if (((Artifact)citem.get()).isDestroy() || ((Artifact)citem.get()).destroyOnDrop()) {
  663.                 item.setType(Material.AIR);
  664.               } else if (((Artifact)citem.get()).preventDropping()) {
  665.                 return true;
  666.               }
  667.             }
  668.           }
  669.          
  670.           return false;
  671.         });
  672.   }
  673.  
  674.   @EventHandler
  675.   public void onPlayerRespawn(PlayerRespawnEvent event) {
  676.     Player player = event.getPlayer();
  677.     if (this.deathCache.containsKey(player.getUniqueId())) {
  678.       ((List)this.deathCache.remove(player.getUniqueId())).forEach(item ->
  679.           player.getInventory().addItem(new ItemStack[] { item }));
  680.     }
  681.   }
  682.  
  683.  
  684.  
  685.   @EventHandler(priority = EventPriority.HIGHEST)
  686.   public void EntityDamagedEvent(EntityDamageEvent e) {
  687.     if (e.getEntity() instanceof Player) {
  688.       Player p = (Player)e.getEntity();
  689.       Profile gs = MythicArtifacts.inst().getProfileManager().getPlayerProfile(p);
  690.      
  691.       if (!(e instanceof EntityDamageByEntityEvent)) {
  692.         gs.runSkills(SkillTrigger.DAMAGED, null);
  693.       }
  694.      
  695.       if (!MythicArtifacts.inst().getConfigManager().useItemLoreStats())
  696.         return;
  697.       if (p.getNoDamageTicks() == 0) {
  698.         DurabilityManager.handleDurabilityArmor(p);
  699.       }
  700.       if (gs != null) {
  701.         EntityDamageEvent.DamageCause dc = e.getCause();
  702.        
  703.         if (dc.equals(EntityDamageEvent.DamageCause.FIRE) || dc
  704.           .equals(EntityDamageEvent.DamageCause.FIRE_TICK) || dc
  705.           .equals(EntityDamageEvent.DamageCause.LAVA)) {
  706.          
  707.           if (gs.getFireResistMitigation() > 0.0D) {
  708.             if (e.isApplicable(EntityDamageEvent.DamageModifier.ARMOR)) {
  709.               e.setDamage(EntityDamageEvent.DamageModifier.ARMOR, 1.0E-4D);
  710.             }
  711.             if (e.isApplicable(EntityDamageEvent.DamageModifier.MAGIC)) {
  712.               e.setDamage(EntityDamageEvent.DamageModifier.MAGIC, 0.0D);
  713.             }
  714.             e.setDamage(EntityDamageEvent.DamageModifier.BASE, e.getDamage(EntityDamageEvent.DamageModifier.BASE) * gs.getFireResistMultiplier());
  715.           }
  716.        
  717.         }
  718.         else if (gs.getArmorMitigation() > 0.0D) {
  719.           if (e.isApplicable(EntityDamageEvent.DamageModifier.ARMOR)) {
  720.             e.setDamage(EntityDamageEvent.DamageModifier.ARMOR, 1.0E-4D);
  721.           }
  722.           if (e.isApplicable(EntityDamageEvent.DamageModifier.MAGIC)) {
  723.             e.setDamage(EntityDamageEvent.DamageModifier.MAGIC, 0.0D);
  724.           }
  725.           e.setDamage(EntityDamageEvent.DamageModifier.BASE, e.getDamage(EntityDamageEvent.DamageModifier.BASE) * gs.getArmorMultiplier());
  726.         }
  727.       }
  728.     }
  729.   }
  730.  
  731.  
  732.  
  733.   @EventHandler(ignoreCancelled = true)
  734.   public void disableItemBreak(PlayerItemBreakEvent event) { DurabilityManager.handleItemBreak(event.getBrokenItem()); }
  735.  
  736.  
  737.   @EventHandler(priority = EventPriority.HIGHEST)
  738.   public void eventCraft(CraftItemEvent event) {
  739.     try {
  740.       if (event.getCurrentItem() == null || event.getCurrentItem().getType() == Material.AIR) {
  741.         return;
  742.       }
  743.      
  744.       ItemStack item = event.getCurrentItem();
  745.      
  746.       if (item.hasItemMeta()) {
  747.         ItemMeta im = item.getItemMeta();
  748.        
  749.         if (im.hasLore()) {
  750.           ArrayList<String> parsedLore = new ArrayList<String>();
  751.           int num = 0;
  752.           for (String str : im.getLore()) {
  753.             if (str.contains("{")) {
  754.              
  755.               Matcher pMatcher = LoreRanges.matcher(str);
  756.               while (pMatcher.find()) {
  757.                 int min = Integer.parseInt(pMatcher.group(1));
  758.                 int max = Integer.parseInt(pMatcher.group(2));
  759.                 num = MythicArtifacts.r.nextInt(max - min) + min;
  760.                 str = str.replace(pMatcher.group(0), "" + num);
  761.                 MythicArtifacts.debug("-- Replacing number range " + pMatcher.group(0) + " with " + num);
  762.               }
  763.               str = str.replace("{lastrandom}", String.valueOf(num));
  764.             }
  765.             parsedLore.add(str);
  766.           }
  767.          
  768.           im.setLore(parsedLore);
  769.           item.setItemMeta(im);
  770.           event.setCurrentItem(item);
  771.         }
  772.       }
  773.     } catch (Exception exception) {}
  774.   }
  775. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement