package be.isach.ultracosmetics.cosmetics.gadgets; import be.isach.ultracosmetics.UltraCosmetics; import be.isach.ultracosmetics.UltraCosmeticsData; import be.isach.ultracosmetics.player.UltraPlayer; import be.isach.ultracosmetics.config.MessageManager; import be.isach.ultracosmetics.config.SettingsManager; import be.isach.ultracosmetics.cosmetics.type.GadgetType; import be.isach.ultracosmetics.util.ItemFactory; import be.isach.ultracosmetics.util.MathUtils; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.entity.Item; import org.bukkit.event.EventHandler; import org.bukkit.event.HandlerList; import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.player.PlayerPickupItemEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.util.Vector; import java.util.ArrayList; /** * Represents an instance of a thor hammer gadget summoned by a player. * * @author iSach * @since 08-08-2015 */ public class GadgetThorHammer extends Gadget implements Listener { ArrayList<Item> hammer = new ArrayList<>(); Vector v; public GadgetThorHammer(UltraPlayer owner, UltraCosmetics ultraCosmetics) { super(owner, GadgetType.THORHAMMER, ultraCosmetics); } @Override void onRightClick() { final Item i = getPlayer().getWorld().dropItem(getPlayer().getEyeLocation(), ItemFactory.create(Material.IRON_AXE, (byte) 0, MessageManager.getMessage("Gadgets.ThorHammer.name"))); i.setPickupDelay(0); i.setVelocity(getPlayer().getEyeLocation().getDirection().multiply(1.4)); getPlayer().getInventory().setItem((int) SettingsManager.getConfig().get("Gadget-Slot"), null); hammer.add(i); v = getPlayer().getEyeLocation().getDirection().multiply(1.4).add(new Vector(0, 1, 0)); Bukkit.getScheduler().runTaskLater(getUltraCosmetics(), () -> { i.setVelocity(getPlayer().getEyeLocation().toVector().subtract(i.getLocation().toVector()).multiply(0.2).add(new Vector(0, 0, 0))); v = null; Bukkit.getScheduler().runTaskLater(getUltraCosmetics(), () -> { if (i.isValid()) { ItemStack is; if (UltraCosmeticsData.get().isAmmoEnabled()) { is = ItemFactory.create(getType().getMaterial(), getType().getData(), ChatColor.WHITE + "" + ChatColor.BOLD + getOwner().getAmmo(getType().toString().toLowerCase()) + " " + getType().getName(), ChatColor.BLUE + "Gadget"); } else { is = ItemFactory.create(getType().getMaterial(), getType().getData(), getType().getName(), MessageManager.getMessage("Gadgets.Lore")); } itemStack = is; getPlayer().getInventory().setItem((int) SettingsManager.getConfig().get("Gadget-Slot"), is); i.remove(); } }, 40); }, 20); } @EventHandler public void onItemPickup(PlayerPickupItemEvent event) { if (hammer.contains(event.getItem())) { event.setCancelled(true); if (event.getPlayer() == getPlayer()) { if (event.getItem().getTicksLived() > 5) { ItemStack is; if (UltraCosmeticsData.get().isAmmoEnabled()) { is = ItemFactory.create(getType().getMaterial(), getType().getData(), ChatColor.WHITE + "" + ChatColor.BOLD + getOwner().getAmmo(getType().toString().toLowerCase()) + " " + getType().getName(), ChatColor.BLUE + "Gadget"); } else { is = ItemFactory.create(getType().getMaterial(), getType().getData(), getType().getName(), MessageManager.getMessage("Gadgets.Lore")); } itemStack = is; getPlayer().getInventory().setItem((int) SettingsManager.getConfig().get("Gadget-Slot"), is); hammer.remove(event.getItem()); event.getItem().remove(); } } else { if (v != null) if (affectPlayers) MathUtils.applyVelocity(event.getPlayer(), v); } } } @EventHandler public void onDamEnt(EntityDamageByEntityEvent event) { if(getOwner() != null && getPlayer() != null && event.getDamager() == getPlayer() && getPlayer().getItemInHand().equals(getItemStack())) { event.setCancelled(true); } } @Override void onLeftClick() { } @Override public void onUpdate() { } @Override public void onClear() { for (Item i : hammer) { i.remove(); } hammer.clear(); v = null; HandlerList.unregisterAll(this); } }