package be.isach.ultracosmetics.cosmetics.gadgets; import be.isach.ultracosmetics.UltraCosmetics; import be.isach.ultracosmetics.player.UltraPlayer; import be.isach.ultracosmetics.cosmetics.type.GadgetType; import be.isach.ultracosmetics.util.ItemFactory; import be.isach.ultracosmetics.util.Particles; import be.isach.ultracosmetics.util.UtilParticles; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.entity.ArmorStand; import org.bukkit.entity.Bat; import org.bukkit.event.EventHandler; import org.bukkit.event.HandlerList; import org.bukkit.event.player.PlayerInteractAtEntityEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; import java.util.HashMap; import java.util.Map; /** * Represents an instance of a ghost party gadget summoned by a player. * * @author iSach * @since 10-18-2015 */ public class GadgetGhostParty extends Gadget { Map<Bat, ArmorStand> bats = new HashMap<>(); public GadgetGhostParty(UltraPlayer owner, UltraCosmetics ultraCosmetics) { super(owner, GadgetType.GHOSTPARTY, ultraCosmetics); } @Override void onRightClick() { for (int i = 0; i < 20; i++) { Bat bat = getPlayer().getWorld().spawn(getPlayer().getLocation().add(0, 1, 0), Bat.class); ArmorStand ghost = bat.getWorld().spawn(bat.getLocation(), ArmorStand.class); ghost.setSmall(true); ghost.setGravity(false); ghost.setVisible(false); ghost.setHelmet(ItemFactory.createSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNjhkMjE4MzY0MDIxOGFiMzMwYWM1NmQyYWFiN2UyOWE5NzkwYTU0NWY2OTE2MTllMzg1NzhlYTRhNjlhZTBiNiJ9fX0", ChatColor.DARK_GRAY + "" + ChatColor.ITALIC + "Ghost")); ghost.setChestplate(ItemFactory.createColouredLeather(Material.LEATHER_CHESTPLATE, 255, 255, 255)); ghost.setItemInHand(new ItemStack(Material.DIAMOND_HOE)); bat.setPassenger(ghost); bat.addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, 160, 1)); bats.put(bat, ghost); } Bukkit.getScheduler().runTaskLaterAsynchronously(getUltraCosmetics(), new Runnable() { @Override public void run() { killBats(); } }, 160); } @EventHandler public void onPlayerInteractGhost(PlayerInteractAtEntityEvent event) { if (event.getRightClicked() != null && event.getRightClicked().getVehicle() != null && bats.containsKey(event.getRightClicked().getVehicle())) event.setCancelled(true); } private void killBats() { for (Bat bat : bats.keySet()) { bats.get(bat).remove(); bat.remove(); } bats.clear(); } @Override void onLeftClick() { } @Override public void onUpdate() { try { if (!bats.isEmpty()) { for (Bat bat : bats.keySet()) UtilParticles.display(Particles.CLOUD, 0.05f, 0.05f, 0.05f, bat.getLocation().add(0, 1.5, 0), 1); } } catch (Exception exc) { } } @Override public void onClear() { killBats(); HandlerList.unregisterAll(this); } }