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.SoundUtil; import be.isach.ultracosmetics.util.Sounds; import org.bukkit.Bukkit; import org.bukkit.Effect; import org.bukkit.Material; import org.bukkit.World; import org.bukkit.entity.Item; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerPickupItemEvent; import org.bukkit.metadata.FixedMetadataValue; import org.bukkit.metadata.LazyMetadataValue; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.util.Vector; import java.util.ArrayList; import java.util.Iterator; import java.util.Random; import java.util.UUID; /** * Represents an instance of a melon thrower gadget summoned by a player. * * @author iSach * @since 08-03-2015 */ public class GadgetMelonThrower extends Gadget implements Listener { private Random random = new Random(); private Item melon = null; private World world = null; public GadgetMelonThrower(UltraPlayer owner, UltraCosmetics ultraCosmetics) { super(owner, GadgetType.MELONTHROWER, ultraCosmetics); } @EventHandler public void onTakeUpMelon(PlayerPickupItemEvent event) { if (event.getItem().hasMetadata("UC#MELONITEM") && event.getItem().getTicksLived() > 5 && affectPlayers) { event.getPlayer().addPotionEffect(new PotionEffect(PotionEffectType.SPEED, 5 * 20, 2)); SoundUtil.playSound(getPlayer().getLocation(), Sounds.BURP, 1.4f, 1.5f); event.setCancelled(true); event.getItem().remove(); } } @Override void onRightClick() { this.world = getPlayer().getWorld(); SoundUtil.playSound(getPlayer().getLocation(), Sounds.EXPLODE, 1.4f, 1.5f); Item item = getPlayer().getWorld().dropItem(getPlayer().getEyeLocation(), ItemFactory.create(Material.MELON_BLOCK, (byte) 0x0, UUID.randomUUID().toString())); item.setPickupDelay(0); item.setMetadata("UNPICKABLEUP", new FixedMetadataValue(getUltraCosmetics(), "UC#MELONBLOCK")); item.setVelocity(getPlayer().getEyeLocation().getDirection().multiply(1.3d)); melon = item; } @Override public void onUpdate() { try { Bukkit.getScheduler().runTask(getUltraCosmetics(), () -> { if (melon == null || !melon.isValid()) { return; } if (melon.isOnGround()) { melon.getWorld().playEffect(melon.getLocation(), Effect.STEP_SOUND, 103); for (int i = 0; i < 8; i++) { final Item newItem = getPlayer().getWorld().dropItem(melon.getLocation(), ItemFactory.create(Material.MELON, (byte) 0x0, UUID.randomUUID().toString())); newItem.setVelocity(new Vector(random.nextDouble() - 0.5, random.nextDouble() / 2.0, random.nextDouble() - 0.5).multiply(0.75D)); newItem.setMetadata("UC#MELONITEM", new FixedMetadataValue(getUltraCosmetics(), "UC#MELONTHROWER")); Bukkit.getScheduler().runTaskLaterAsynchronously(getUltraCosmetics(), new BukkitRunnable() { @Override public void run() { if (newItem.isValid()) { newItem.remove(); } } }, 100); } melon.remove(); melon = null; } }); } catch (Exception exc) { } } @Override public void onClear() { if (melon != null) { melon.remove(); } if (world != null) { for (Item i : world.getEntitiesByClass(Item.class)) { if(i.hasMetadata("UC#MELONITEM")) { i.remove(); } } } } @Override void onLeftClick() { } }