package be.isach.ultracosmetics.cosmetics.morphs; import be.isach.ultracosmetics.UltraCosmetics; import be.isach.ultracosmetics.UltraCosmeticsData; import be.isach.ultracosmetics.config.MessageManager; import be.isach.ultracosmetics.cosmetics.type.MorphType; import be.isach.ultracosmetics.player.UltraPlayer; import be.isach.ultracosmetics.util.*; import me.libraryaddict.disguise.DisguiseAPI; import me.libraryaddict.disguise.disguisetypes.MobDisguise; import me.libraryaddict.disguise.disguisetypes.watchers.CreeperWatcher; import org.bukkit.entity.Creature; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.util.Vector; /** * @author iSach * @since 08-26-2015 */ public class MorphCreeper extends Morph { private int charge = 0; public MorphCreeper(UltraPlayer owner, UltraCosmetics ultraCosmetics) { super(owner, MorphType.CREEPER, ultraCosmetics); } @Override public void onUpdate() { CreeperWatcher creeperWatcher = (CreeperWatcher) disguise.getWatcher(); if (getPlayer().isSneaking()) { creeperWatcher.setIgnited(true); if (charge + 4 <= 100) charge += 4; SoundUtil.playSound(getPlayer(), Sounds.CREEPER_HISS, 1.4f, 1.5f); } else { if (creeperWatcher.isIgnited()) { disguise = new MobDisguise(getType().getDisguiseType()); DisguiseAPI.disguiseToAll(getPlayer(), disguise); // disguise.setShowName(true); if (!getOwner().canSeeSelfMorph()) disguise.setViewSelfDisguise(false); } if (charge == 100) { UtilParticles.display(Particles.EXPLOSION_HUGE, getPlayer().getLocation()); SoundUtil.playSound(getPlayer(), Sounds.EXPLODE, 1.4f, 1.5f); for (Entity ent : getPlayer().getNearbyEntities(3, 3, 3)) { if (ent instanceof Creature || ent instanceof Player) { double dX = getPlayer().getLocation().getX() - ent.getLocation().getX(); double dY = getPlayer().getLocation().getY() - ent.getLocation().getY(); double dZ = getPlayer().getLocation().getZ() - ent.getLocation().getZ(); double yaw = Math.atan2(dZ, dX); double pitch = Math.atan2(Math.sqrt(dZ * dZ + dX * dX), dY) + Math.PI; double X = Math.sin(pitch) * Math.cos(yaw); double Y = Math.sin(pitch) * Math.sin(yaw); double Z = Math.cos(pitch); Vector vector = new Vector(X, Z, Y); MathUtils.applyVelocity(ent, vector.multiply(1.3D).add(new Vector(0, 1.4D, 0))); } } UltraCosmeticsData.get().getVersionManager().getActionBarUtil().sendActionMessage(getPlayer(), ""); charge = 0; return; } if (charge > 0) charge -= 4; } if (charge > 0 && charge < 100) { if (charge < 5) { UltraCosmeticsData.get().getVersionManager().getActionBarUtil().sendActionMessage(getPlayer(), ""); } else UltraCosmeticsData.get().getVersionManager().getActionBarUtil().sendActionMessage(getPlayer(), MessageManager.getMessage("Morphs.Creeper.charging").replace("%chargelevel%", charge + "")); } else if (charge == 100) UltraCosmeticsData.get().getVersionManager().getActionBarUtil().sendActionMessage(getPlayer(), MessageManager.getMessage("Morphs.Creeper.release-to-explode")); } @Override protected void onClear() { } }