ProjectAres/Lobby/src/main/java/tc/oc/lobby/bukkit/gizmos/rocket/RocketUtils.java

69 lines
2.8 KiB
Java

package tc.oc.lobby.bukkit.gizmos.rocket;
import com.google.common.collect.Lists;
import java.util.List;
import java.util.Random;
import net.minecraft.server.Packet;
import net.minecraft.server.PacketPlayOutEntity;
import org.bukkit.Color;
import org.bukkit.Effect;
import org.bukkit.FireworkEffect;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.craftbukkit.entity.CraftPlayer;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Firework;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.FireworkMeta;
import org.bukkit.util.Vector;
import tc.oc.lobby.bukkit.gizmos.GizmoConfig;
public class RocketUtils {
static Random random = new Random();
static List<Color> colors = Lists.newArrayList(Color.AQUA, Color.BLUE, Color.FUCHSIA, Color.GREEN, Color.LIME, Color.MAROON, Color.NAVY, Color.NAVY, Color.OLIVE, Color.ORANGE, Color.PURPLE, Color.RED, Color.TEAL, Color.YELLOW);
public static Firework getRandomFirework(Location loc) {
FireworkMeta fireworkMeta = (FireworkMeta) (new ItemStack(Material.FIREWORK)).getItemMeta();
Firework firework = (Firework) loc.getWorld().spawnEntity(loc, EntityType.FIREWORK);
fireworkMeta.setPower(GizmoConfig.FIREWORK_POWER);
fireworkMeta.addEffect(FireworkEffect.builder()
.with(RocketUtils.randomFireworkType())
.withColor(RocketUtils.randomColor())
.trail(GizmoConfig.FIREWORK_TRAIL)
.build());
firework.setFireworkMeta(fireworkMeta);
return firework;
}
public static FireworkEffect.Type randomFireworkType() {
return FireworkEffect.Type.values()[random.nextInt(FireworkEffect.Type.values().length)];
}
public static Color randomColor() {
return colors.get(random.nextInt(colors.size()));
}
public static void takeOff(Player observer, Location loc) {
for(int i = 0; i < GizmoConfig.SMOKE_COUNT; i++) {
double angle = 2 * Math.PI * i / GizmoConfig.SMOKE_COUNT;
Location base = loc.clone().add(new Vector(GizmoConfig.SMOKE_RADIUS * Math.cos(angle), 0, GizmoConfig.SMOKE_RADIUS * Math.sin(angle)));
for(int j = 0; j <= 8; j++) {
observer.playEffect(base, Effect.SMOKE, j);
}
}
}
public static void fakeDelta(Player observer, Player victim, Vector delta) {
Packet packet = new PacketPlayOutEntity.PacketPlayOutRelEntityMove(((CraftPlayer) victim).getHandle().getId(), (byte) (delta.getX() * 32), (byte) (delta.getY() * 32), (byte) (delta.getZ() * 32), false /* on ground */);
sendPacket((CraftPlayer) observer, packet);
}
private static void sendPacket(CraftPlayer player, Packet packet) {
player.getHandle().playerConnection.sendPacket(packet);
}
}