mcMMO/src/main/java/com/gmail/nossr50/util/skills/ParticleEffectUtils.java
2014-10-11 11:25:57 +02:00

118 lines
4.1 KiB
Java

package com.gmail.nossr50.util.skills;
import org.bukkit.Color;
import org.bukkit.Effect;
import org.bukkit.FireworkEffect;
import org.bukkit.FireworkEffect.Type;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Firework;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.inventory.meta.FireworkMeta;
import com.gmail.nossr50.config.Config;
public final class ParticleEffectUtils {
private ParticleEffectUtils() {};
public static void playBleedEffect(LivingEntity livingEntity) {
if (!Config.getInstance().getBleedEffectEnabled()) {
return;
}
livingEntity.getWorld().playEffect(livingEntity.getEyeLocation(), Effect.STEP_SOUND, Material.REDSTONE_WIRE);
}
public static void playDodgeEffect(Player player) {
if (!Config.getInstance().getDodgeEffectEnabled()) {
return;
}
Location location = player.getEyeLocation();
World world = player.getWorld();
// Have to do it this way, because not all block directions are valid for smoke
world.playEffect(location, Effect.SMOKE, BlockFace.SOUTH_EAST);
world.playEffect(location, Effect.SMOKE, BlockFace.SOUTH);
world.playEffect(location, Effect.SMOKE, BlockFace.SOUTH_WEST);
world.playEffect(location, Effect.SMOKE, BlockFace.EAST);
world.playEffect(location, Effect.SMOKE, BlockFace.SELF);
world.playEffect(location, Effect.SMOKE, BlockFace.WEST);
world.playEffect(location, Effect.SMOKE, BlockFace.NORTH_EAST);
world.playEffect(location, Effect.SMOKE, BlockFace.NORTH);
world.playEffect(location, Effect.SMOKE, BlockFace.NORTH_WEST);
}
public static void playGreaterImpactEffect(LivingEntity livingEntity) {
if (!Config.getInstance().getGreaterImpactEffectEnabled()) {
return;
}
Location location = livingEntity.getEyeLocation();
livingEntity.getWorld().createExplosion(location.getX(), location.getY(), location.getZ(), 0F, false, false);
}
public static void playCallOfTheWildEffect(LivingEntity livingEntity) {
if (!Config.getInstance().getCallOfTheWildEffectEnabled()) {
return;
}
livingEntity.getWorld().playEffect(livingEntity.getEyeLocation(), Effect.MOBSPAWNER_FLAMES, 1);
}
public static void playAbilityEnabledEffect(Player player) {
if (!Config.getInstance().getAbilityActivationEffectEnabled()) {
return;
}
if (hasHeadRoom(player)) {
fireworkParticleShower(player, Color.GREEN);
}
}
public static void playAbilityDisabledEffect(Player player) {
if (!Config.getInstance().getAbilityDeactivationEffectEnabled()) {
return;
}
if (hasHeadRoom(player)) {
fireworkParticleShower(player, Color.RED);
}
}
public static void fireworkParticleShower(Player player, Color color) {
Location location = player.getLocation();
location.setY(location.getY() + (player.isInsideVehicle() ? 1.0 : -1.0));
location.setPitch(-90);
Firework firework = (Firework) player.getWorld().spawnEntity(location, EntityType.FIREWORK);
FireworkMeta fireworkMeta = firework.getFireworkMeta();
FireworkEffect effect = FireworkEffect.builder().flicker(false).withColor(color).with((Config.getInstance().getLargeFireworks() ? Type.BALL_LARGE : Type.BALL)).trail(true).build();
fireworkMeta.addEffect(effect);
fireworkMeta.addEffect(effect);
fireworkMeta.setPower(0);
firework.setFireworkMeta(fireworkMeta);
}
private static boolean hasHeadRoom(Player player) {
boolean hasHeadRoom = true;
Block headBlock = player.getEyeLocation().getBlock();
for (int i = 0; i < 3; i++) {
if (!headBlock.getRelative(BlockFace.UP, i).isEmpty()) {
hasHeadRoom = false;
break;
}
}
return hasHeadRoom;
}
}