diff --git a/pom.xml b/pom.xml index 01e03f6..a3bb815 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 org.cyberiantiger.minecraft ducktrails - 1.8-SNAPSHOT + 1.9-SNAPSHOT UTF-8 ${user.name} @@ -57,7 +57,7 @@ org.spigotmc spigot-api - 1.9-R0.1-cybertiger + 1.13-R0.1-SNAPSHOT diff --git a/src/main/java/org/cyberiantiger/minecraft/ducktrails/DragonbornEffectHandler.java b/src/main/java/org/cyberiantiger/minecraft/ducktrails/DragonbornEffectHandler.java index 6fc24cf..abc13f6 100644 --- a/src/main/java/org/cyberiantiger/minecraft/ducktrails/DragonbornEffectHandler.java +++ b/src/main/java/org/cyberiantiger/minecraft/ducktrails/DragonbornEffectHandler.java @@ -17,10 +17,8 @@ import java.util.ArrayList; import java.util.List; -import org.bukkit.Effect; -import org.bukkit.Location; -import org.bukkit.Server; -import org.bukkit.Sound; + +import org.bukkit.*; import org.bukkit.entity.Player; import org.bukkit.util.Vector; import static org.cyberiantiger.minecraft.ducktrails.Note.*; @@ -190,7 +188,7 @@ public class DragonbornEffectHandler extends MusicalEffectHandler { } } } - public static final Track DRAGONBORN_TRACK1 = new Track(Sound.BLOCK_NOTE_HARP) { + public static final Track DRAGONBORN_TRACK1 = new Track(Sound.BLOCK_NOTE_BLOCK_HARP) { @Override public Note getNote(int offset) { return MELODY_DRAGONBORN1[offset % MELODY_DRAGONBORN1.length]; @@ -201,7 +199,7 @@ public float getVolume(int offset) { return 1f; } }; - public static final Track DRAGONBORN_TRACK2 = new Track(Sound.BLOCK_NOTE_HARP) { + public static final Track DRAGONBORN_TRACK2 = new Track(Sound.BLOCK_NOTE_BLOCK_HARP) { @Override public Note getNote(int offset) { return MELODY_DRAGONBORN2[offset % MELODY_DRAGONBORN2.length]; @@ -212,14 +210,14 @@ public float getVolume(int offset) { return 1f; } }; - private final Effect effect; + private final Particle effect; private final List redCircle = new ArrayList(20); private final List blueCircle = new ArrayList(20); private final Vector red = new Vector(1f, 0f, 0f); private final Vector blue = new Vector(0.01f, 0f, 1f); private double rotate = 0.0D; - public DragonbornEffectHandler(Effect effect) { + public DragonbornEffectHandler(Particle effect) { super(new Track[]{DRAGONBORN_TRACK1, DRAGONBORN_TRACK2}); this.effect = effect; for (int i = 0; i < 20; i++) { @@ -256,14 +254,16 @@ protected void showEffectInternal(Server server, Player player, Location from, L Vector xx = new Vector(cos * x.getX() - sin * y.getX(), cos * x.getY() - sin * y.getY(), cos * x.getZ() - sin * y.getZ()); Vector yy = new Vector(sin * x.getX() + cos * y.getX(), sin * x.getY() + cos * y.getY(), sin * x.getZ() + cos * y.getZ()); for (Vector v : redCircle) { - translateEffect(server, player, to, v, 1f, 0f, 0f, xx, yy, z); + Object data = new Particle.DustOptions(Color.RED,.7f); + translateEffect(server, player, to, v, 1f, 0f, 0f, xx, yy, z,data); } for (Vector v : blueCircle) { - translateEffect(server, player, to, v, 0.01f, 0f, 1f, xx, yy, z); + Object data = new Particle.DustOptions(Color.BLUE,.7f); + translateEffect(server, player, to, v, 0.01f, 0f, 1f, xx, yy, z,data); } } - private void translateEffect(Server server, Player player, Location base, Vector offset, float r, float g, float b, Vector x, Vector y, Vector z) { + private void translateEffect(Server server, Player player, Location base, Vector offset, float r, float g, float b, Vector x, Vector y, Vector z, Object data) { base = base.clone(); Vector realOffset = new Vector( offset.getX() * x.getX() + offset.getY() * y.getX() + offset.getZ() * z.getX(), @@ -272,7 +272,7 @@ private void translateEffect(Server server, Player player, Location base, Vector base.setX(realOffset.getX() + base.getX()); base.setY(realOffset.getY() + base.getY()); base.setZ(realOffset.getZ() + base.getZ()); - sendEffect(server, player, effect, base, r, g, b, 1f, 256f, 0); + sendEffect(server, player, effect, base, r, g, b, 1f, 256f, 0,1,data); } } diff --git a/src/main/java/org/cyberiantiger/minecraft/ducktrails/DuckTalesEffectHandler.java b/src/main/java/org/cyberiantiger/minecraft/ducktrails/DuckTalesEffectHandler.java index b25b1e3..a6fa25a 100644 --- a/src/main/java/org/cyberiantiger/minecraft/ducktrails/DuckTalesEffectHandler.java +++ b/src/main/java/org/cyberiantiger/minecraft/ducktrails/DuckTalesEffectHandler.java @@ -15,10 +15,7 @@ */ package org.cyberiantiger.minecraft.ducktrails; -import org.bukkit.Effect; -import org.bukkit.Location; -import org.bukkit.Server; -import org.bukkit.Sound; +import org.bukkit.*; import org.bukkit.entity.Player; import org.bukkit.util.Vector; import static org.cyberiantiger.minecraft.ducktrails.Note.*; @@ -83,7 +80,7 @@ public class DuckTalesEffectHandler extends MusicalEffectHandler { } } } - public static final Track DUCK_TALES_TRACK = new Track(Sound.BLOCK_NOTE_HARP) { + public static final Track DUCK_TALES_TRACK = new Track(Sound.BLOCK_NOTE_BLOCK_HARP) { @Override public Note getNote(int offset) { return DUCK_TALES_MELODY[offset % DUCK_TALES_MELODY.length]; @@ -96,10 +93,10 @@ public float getVolume(int offset) { }; private final double cos45 = Math.cos(Math.PI / 4); private final double sin45 = Math.sin(Math.PI / 4); - private final Effect effect; + private final Particle effect; private double rotate = 0.0D; - public DuckTalesEffectHandler(Effect effect) { + public DuckTalesEffectHandler(Particle effect) { super(new Track[]{DUCK_TALES_TRACK}); this.effect = effect; } @@ -147,7 +144,8 @@ private void translateEffect(Server server, Player player, Location base, Vector base.setX(realOffset.getX() + base.getX()); base.setY(realOffset.getY() + base.getY()); base.setZ(realOffset.getZ() + base.getZ()); - sendEffect(server, player, effect, base, (float) realVelocity.getX(), (float) realVelocity.getY(), (float) realVelocity.getZ(), 1f, 256f, 0); + Object data = new Particle.DustOptions(Color.ORANGE,.7f); + sendEffect(server, player, effect, base, (float) realVelocity.getX(), (float) realVelocity.getY(), (float) realVelocity.getZ(), 1f, 256f,0,1,data); } } diff --git a/src/main/java/org/cyberiantiger/minecraft/ducktrails/EffectHandler.java b/src/main/java/org/cyberiantiger/minecraft/ducktrails/EffectHandler.java index 31db0b1..853e0cd 100644 --- a/src/main/java/org/cyberiantiger/minecraft/ducktrails/EffectHandler.java +++ b/src/main/java/org/cyberiantiger/minecraft/ducktrails/EffectHandler.java @@ -16,9 +16,8 @@ package org.cyberiantiger.minecraft.ducktrails; import java.util.concurrent.atomic.AtomicReference; -import org.bukkit.Effect; -import org.bukkit.Location; -import org.bukkit.Server; + +import org.bukkit.*; import org.bukkit.entity.Player; /** @@ -27,20 +26,20 @@ */ public abstract class EffectHandler { public static class BasicEffectHandler extends EffectHandler { - private final Effect effect; + private final Particle effect; private final float dx; private final float dy; private final float dz; private final float v; private final int id; - private final int data; + private final Object data; private final int count; - public BasicEffectHandler(Effect effect, float dx, float dy, float dz, float v, int count) { - this(effect, dx, dy, dz, v, 0, 0, count); + public BasicEffectHandler(Particle effect, float dx, float dy, float dz, float v, int count) { + this(effect, dx, dy, dz, v, 0, null, count); } - public BasicEffectHandler(Effect effect, float dx, float dy, float dz, float v, int id, int data, int count) { + public BasicEffectHandler(Particle effect, float dx, float dy, float dz, float v, int id, Object data, int count) { this.effect = effect; this.dx = dx; this.dy = dy; @@ -59,10 +58,10 @@ protected void showEffectInternal(Server server, Player player, Location from, L public static class RainbowEffectHandler extends EffectHandler { private float hue = 0f; - private final Effect effect; + private final Particle effect; - public RainbowEffectHandler(Effect effect) { + public RainbowEffectHandler(Particle effect) { this.effect = effect; } @@ -73,7 +72,8 @@ protected void showEffectInternal(Server server, Player player, Location from, L float g = ((argb >> 8) & 0xff) / 255f; float b = (argb & 0xff) / 255f; r = r == 0f ? 0.001f : r; - sendEffect(server, player, effect, to, r, g, b, 1f, 256f, 0); + Object data = new Particle.DustOptions(Color.fromRGB((int)r,(int)g,(int)b),(int)r); + sendEffect(server, player, effect, to, r, g, b, 1f, 256f, 1,1,data); hue = hue + 0.01f; hue = hue >= 1f ? 0f : hue; } @@ -92,16 +92,23 @@ public final void showEffect(Server server, Player player, Location from, Locati showEffectInternal(server, player, from, to); } - protected void sendEffect(Server server, Player source, Effect effect, Location loc, float dx, float dy, float dz, float v, float r, int count) { - sendEffect(server, source, effect, loc, dx, dy, dz, v, r, count, 0, 0); + protected void sendEffect(Server server, Player source, Particle effect, Location loc, float dx, float dy, float dz, float v, float r, int count) { + sendEffect(server, source, effect, loc, dx, dy, dz, v, r, count, 0, null); } - protected void sendEffect(Server server, Player source, Effect effect, Location loc, float dx, float dy, float dz, float v, float r, int count, int id, int data) { + protected void sendEffect(Server server, Player source, Particle effect, Location loc, float dx, float dy, float dz, float v, float r, int count, int id, Object data) { float r2 = r*r; for (Player p : server.getOnlinePlayers()) { if (p.getWorld() == loc.getWorld() && p.canSee(source)) { if (loc.distanceSquared(p.getLocation()) < r2) { - p.spigot().playEffect(loc, effect, id, data, dx, dy, dz, v, count, (int)r); + // v, + if(data == null){ + p.getWorld().spawnParticle(effect, loc, count, dx, dy, dz); + } + else { + p.getWorld().spawnParticle(effect, loc, count, dx, dy, dz, data); + } + //p.spigot().playEffect(loc, effect, id, data, dx, dy, dz, v, count, (int)r); } } } diff --git a/src/main/java/org/cyberiantiger/minecraft/ducktrails/GameOfThronesEffectHandler.java b/src/main/java/org/cyberiantiger/minecraft/ducktrails/GameOfThronesEffectHandler.java index def67a1..108dc5f 100644 --- a/src/main/java/org/cyberiantiger/minecraft/ducktrails/GameOfThronesEffectHandler.java +++ b/src/main/java/org/cyberiantiger/minecraft/ducktrails/GameOfThronesEffectHandler.java @@ -17,10 +17,8 @@ import java.util.ArrayList; import java.util.List; -import org.bukkit.Effect; -import org.bukkit.Location; -import org.bukkit.Server; -import org.bukkit.Sound; + +import org.bukkit.*; import org.bukkit.entity.Player; import org.bukkit.util.Vector; import static org.cyberiantiger.minecraft.ducktrails.Note.*; @@ -85,7 +83,7 @@ public class GameOfThronesEffectHandler extends MusicalEffectHandler { } } } - public static final Track GAME_OF_THRONES_TRACK = new Track(Sound.BLOCK_NOTE_HARP) { + public static final Track GAME_OF_THRONES_TRACK = new Track(Sound.BLOCK_NOTE_BLOCK_HARP) { @Override public Note getNote(int offset) { return GAME_OF_THRONES_MELODY[offset % GAME_OF_THRONES_MELODY.length]; @@ -106,6 +104,8 @@ public float getVolume(int offset) { private double rotateY; private double rotateZ; + private boolean bColor = true; + public GameOfThronesEffectHandler() { super(new Track[]{GAME_OF_THRONES_TRACK}); for (int i = 0; i < 40; i++) { @@ -143,16 +143,26 @@ protected void showEffectInternal(Server server, Player player, Location from, L Matrix3 m = Matrix3.rotateX(rotateX).multiply(Matrix3.rotateY(rotateY)).multiply(Matrix3.rotateZ(rotateZ)); Location base = new Location(to.getWorld(), position.getX(), position.getY() + 1.5, position.getZ()); for (Vector p : particleRing) { - translateEffect(server, player, base, Effect.COLOURED_DUST, p, 1.0f, 215f/255f, 0f, m); + //This was COLOURED_DUST. I can not find that anymore. I am not sure what it turned into. + Object data; + if(bColor) { + data = new Particle.DustOptions(Color.BLACK, .7f); + bColor = false; + } + else { + data = new Particle.DustOptions(Color.GRAY, .7f); + bColor = true; + } + translateEffect(server, player, base, Particle.REDSTONE, p, 1.0f, 215f/255f, 0f, m,data); } } - private void translateEffect(Server server, Player player, Location base, Effect effect, Vector offset, float r, float g, float b, Matrix3 m) { + private void translateEffect(Server server, Player player, Location base, Particle effect, Vector offset, float r, float g, float b, Matrix3 m,Object data) { base = base.clone(); Vector realOffset = m.multiply(offset); base.setX(realOffset.getX() + base.getX()); base.setY(realOffset.getY() + base.getY()); base.setZ(realOffset.getZ() + base.getZ()); - sendEffect(server, player, effect, base, r, g, b, 1f, 256f, 0); + sendEffect(server, player, effect, base, r, g, b, 1f, 256f, 0,1,data); } } diff --git a/src/main/java/org/cyberiantiger/minecraft/ducktrails/Main.java b/src/main/java/org/cyberiantiger/minecraft/ducktrails/Main.java index 67701bc..bec6605 100644 --- a/src/main/java/org/cyberiantiger/minecraft/ducktrails/Main.java +++ b/src/main/java/org/cyberiantiger/minecraft/ducktrails/Main.java @@ -40,6 +40,8 @@ import java.util.TreeSet; import java.util.WeakHashMap; import java.util.logging.Level; +import java.util.logging.Logger; + import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.command.Command; @@ -57,6 +59,8 @@ public class Main extends JavaPlugin implements Listener { public static final String LOCALE_FILE = "locale.properties"; + public static Logger log; + private class MusicRunnable extends TimerTask { public void run() { long nanoTime = System.nanoTime(); @@ -179,6 +183,8 @@ public void onEnable() { timer = new Timer(); timerTask = new MusicRunnable(); timer.scheduleAtFixedRate(timerTask, 0L, 160L); + + log = this.getLogger(); } @Override diff --git a/src/main/java/org/cyberiantiger/minecraft/ducktrails/NyanEffectHandler.java b/src/main/java/org/cyberiantiger/minecraft/ducktrails/NyanEffectHandler.java index 5772353..5c9f1b4 100644 --- a/src/main/java/org/cyberiantiger/minecraft/ducktrails/NyanEffectHandler.java +++ b/src/main/java/org/cyberiantiger/minecraft/ducktrails/NyanEffectHandler.java @@ -15,10 +15,7 @@ */ package org.cyberiantiger.minecraft.ducktrails; -import org.bukkit.Effect; -import org.bukkit.Location; -import org.bukkit.Server; -import org.bukkit.Sound; +import org.bukkit.*; import org.bukkit.entity.Player; import static org.cyberiantiger.minecraft.ducktrails.Note.*; @@ -50,7 +47,7 @@ public class NyanEffectHandler extends MusicalEffectHandler { B3, null, B3, A_SHARP3, B3, F_SHARP3, G_SHARP3, B3, E4, D_SHARP4, E4, F_SHARP4, B3, null, A_SHARP3, null, // Bar 11 B3, null, B3, A_SHARP3, B3, F_SHARP3, G_SHARP3, B3, E4, D_SHARP4, E4, F_SHARP4, B4, C_SHARP4,}; - public static final Track NYAN_CAT_MELODY_TRACK = new Track(Sound.BLOCK_NOTE_HARP) { + public static final Track NYAN_CAT_MELODY_TRACK = new Track(Sound.BLOCK_NOTE_BLOCK_HARP) { @Override public Note getNote(int offset) { // LOOP to 3rd Bar (16 notes per bar) @@ -70,9 +67,9 @@ public float getVolume(int offset) { } }; - private final Effect effect; + private final Particle effect; - public NyanEffectHandler(Effect effect) { + public NyanEffectHandler(Particle effect) { super(new Track[]{NYAN_CAT_MELODY_TRACK}); this.effect = effect; } @@ -80,13 +77,21 @@ public NyanEffectHandler(Effect effect) { @Override protected void showEffectInternal(Server server, Player player, Location from, Location to) { super.showEffectInternal(server, player, from, to); - for (int i = 0; i < 20; i++) { + double frequency = .3; + + for (int i = 0; i < 32; i++) { int argb = java.awt.Color.HSBtoRGB(i / 20.0f, 1f, 1f); float r = ((argb >> 16) & 0xff) / 255f; float g = ((argb >> 8) & 0xff) / 255f; float b = (argb & 0xff) / 255f; r = r == 0f ? 0.001f : r; - sendEffect(server, player, effect, to, r, g, b, 1f, 256f, 0); + + double red = Math.sin(frequency*i + 0) * 127 + 128; + double green = Math.sin(frequency*i + 2) * 127 + 128; + double blue = Math.sin(frequency*i + 4) * 127 + 128; + + Object data = new Particle.DustOptions(Color.fromRGB((int)red,(int)green,(int)blue),.7f); + sendEffect(server, player, effect, to, b, g, r, 1f, 256f, 0,1,data); to.setY(to.getY() + 2 / 20d); } } diff --git a/src/main/java/org/cyberiantiger/minecraft/ducktrails/PFUDOREffectHandler.java b/src/main/java/org/cyberiantiger/minecraft/ducktrails/PFUDOREffectHandler.java index fc6c344..6a33ae3 100644 --- a/src/main/java/org/cyberiantiger/minecraft/ducktrails/PFUDOREffectHandler.java +++ b/src/main/java/org/cyberiantiger/minecraft/ducktrails/PFUDOREffectHandler.java @@ -15,10 +15,7 @@ */ package org.cyberiantiger.minecraft.ducktrails; -import org.bukkit.Effect; -import org.bukkit.Location; -import org.bukkit.Server; -import org.bukkit.Sound; +import org.bukkit.*; import org.bukkit.entity.Player; import org.bukkit.util.Vector; import static org.cyberiantiger.minecraft.ducktrails.Note.*; @@ -45,7 +42,7 @@ public class PFUDOREffectHandler extends MusicalEffectHandler { C4, null, null,}; - public static final Track PFUDOR_MELODY_TRACK = new Track(Sound.BLOCK_NOTE_HARP) { + public static final Track PFUDOR_MELODY_TRACK = new Track(Sound.BLOCK_NOTE_BLOCK_HARP) { @Override public Note getNote(int offset) { return PFUDOR_MELODY[offset % PFUDOR_MELODY.length]; @@ -56,10 +53,10 @@ public float getVolume(int offset) { return 1f; } }; - private final Effect effect; + private final Particle effect; double distance = 0.0D; - public PFUDOREffectHandler(Effect effect) { + public PFUDOREffectHandler(Particle effect) { super(new Track[]{PFUDOR_MELODY_TRACK}); this.effect = effect; } @@ -93,19 +90,29 @@ protected void showEffectInternal(Server server, Player player, Location from, L pony.setX(baseX + Math.random()); pony.setY(baseY + Math.random()); pony.setZ(baseZ + Math.random()); - sendEffect(server, player, Effect.POTION_SWIRL, pony, 1f, 0.7f, 0.7f, 1f, 256f, 0); + //Was Potion_Break + sendEffect(server, player, Particle.EXPLOSION_NORMAL, pony, 1f, 0.7f, 0.7f, 1f, 256f, 0); } } sideways.multiply(0.5D); to.subtract(sideways); sideways.multiply(1 / 8D); + double frequency = .3; for (int i = 0; i < 17; i++) { int argb = java.awt.Color.HSBtoRGB(i / 15.0f, 1f, 1f); float r = ((argb >> 16) & 0xff) / 255f; float g = ((argb >> 8) & 0xff) / 255f; float b = (argb & 0xff) / 255f; r = r == 0f ? 0.001f : r; - sendEffect(server, player, effect, to, r, g, b, 1f, 256f, 0); + + + double red = Math.sin(frequency*i + 0) * 127 + 128; + double green = Math.sin(frequency*i + 2) * 127 + 128; + double blue = Math.sin(frequency*i + 4) * 127 + 128; + + Object data = new Particle.DustOptions(Color.fromRGB((int)red,(int)green,(int)blue),.7f); + + sendEffect(server, player, effect, to, r, g, b, 1f, 256f, 0,1,data); to.add(sideways); } } diff --git a/src/main/java/org/cyberiantiger/minecraft/ducktrails/Trail.java b/src/main/java/org/cyberiantiger/minecraft/ducktrails/Trail.java index 0d9ca84..64ce1f1 100644 --- a/src/main/java/org/cyberiantiger/minecraft/ducktrails/Trail.java +++ b/src/main/java/org/cyberiantiger/minecraft/ducktrails/Trail.java @@ -15,7 +15,9 @@ */ package org.cyberiantiger.minecraft.ducktrails; +import org.bukkit.Color; import org.bukkit.Effect; +import org.bukkit.Particle; import org.bukkit.entity.Player; import static org.cyberiantiger.minecraft.ducktrails.MusicalEffectHandler.*; @@ -27,67 +29,74 @@ public enum Trail { FLAME("ducktrails.trail.flame") { public EffectHandler createHandler(Player player) { - return new BasicEffectHandler(Effect.FLAME, 0f, 0f, 0f, 0.02f, 1); + return new BasicEffectHandler(Particle.FLAME, 0f, 0f, 0f, 0.02f, 1); } }, HEARTS("ducktrails.trail.hearts") { public EffectHandler createHandler(Player player) { - return new BasicEffectHandler(Effect.HEART, 0f, 1f, 0f, 0.2f, 0); + return new BasicEffectHandler(Particle.HEART, 0f, 1f, 0f, 0.2f, 0); } }, RUBY("ducktrails.trail.ruby") { public EffectHandler createHandler(Player player) { - return new BasicEffectHandler(Effect.COLOURED_DUST, 1f, 0f, 0f, 1f, 0); + Object data = new Particle.DustOptions(Color.RED,1); + return new BasicEffectHandler(Particle.REDSTONE, 1f,0f,0f,1f,1, data, 0); } }, EMERALD("ducktrails.trail.emerald") { public EffectHandler createHandler(Player player) { - return new BasicEffectHandler(Effect.COLOURED_DUST, 0.0001f, 1f, 0f, 1f, 0); + Object data = new Particle.DustOptions(Color.GREEN,1); + return new BasicEffectHandler(Particle.REDSTONE, 1f,0f,0f,1f,1, data, 0); } }, SAPPHIRE("ducktrails.trail.sapphire") { public EffectHandler createHandler(Player player) { - return new BasicEffectHandler(Effect.COLOURED_DUST, 0.0001f, 0f, 1f, 1f, 0); + Object data = new Particle.DustOptions(Color.BLUE,1); + return new BasicEffectHandler(Particle.REDSTONE, 1f,0f,0f,1f,1, data, 0); } }, TOPAZ("ducktrails.trail.topaz") { public EffectHandler createHandler(Player player) { - return new BasicEffectHandler(Effect.COLOURED_DUST, 1f, 1f, 0f, 1f, 0); + Object data = new Particle.DustOptions(Color.YELLOW,1); + return new BasicEffectHandler(Particle.REDSTONE, 1f,0f,0f,1f,1, data, 0); } }, AMETHYST("ducktrails.trail.amethyst") { public EffectHandler createHandler(Player player) { - return new BasicEffectHandler(Effect.COLOURED_DUST, 1f, 0f, 1f, 1f, 0); + Object data = new Particle.DustOptions(Color.PURPLE,1); + return new BasicEffectHandler(Particle.REDSTONE, 1f,0f,0f,1f,1, data, 0); } }, DIAMOND("ducktrails.trail.diamond") { public EffectHandler createHandler(Player player) { - return new BasicEffectHandler(Effect.COLOURED_DUST, 0.0001f, 1f, 1f, 1f, 0); + Object data = new Particle.DustOptions(Color.WHITE,1); + return new BasicEffectHandler(Particle.REDSTONE, 1f,0f,0f,1f,1, data, 0); } }, OPAL("ducktrails.trail.opal") { public EffectHandler createHandler(Player player) { - return new RainbowEffectHandler(Effect.COLOURED_DUST); + Object data = new Particle.DustOptions(Color.AQUA,1); + return new BasicEffectHandler(Particle.REDSTONE, 1f,0f,0f,1f,1, data, 0); } }, NYAN("ducktrails.trail.nyan") { public EffectHandler createHandler(Player player) { - return new NyanEffectHandler(Effect.COLOURED_DUST); + return new NyanEffectHandler(Particle.REDSTONE); } }, PFUDOR("ducktrails.trail.pfudor") { public EffectHandler createHandler(Player player) { - return new PFUDOREffectHandler(Effect.COLOURED_DUST); + return new PFUDOREffectHandler(Particle.REDSTONE); } }, DUCKTALES("ducktrails.trail.ducktales") { public EffectHandler createHandler(Player player) { - return new DuckTalesEffectHandler(Effect.FIREWORKS_SPARK); + return new DuckTalesEffectHandler(Particle.REDSTONE); } }, DRAGONBORN("ducktrails.trail.dragonborn") { public EffectHandler createHandler(Player player) { - return new DragonbornEffectHandler(Effect.COLOURED_DUST); + return new DragonbornEffectHandler(Particle.REDSTONE); } }, GAMEOFTHRONES("ducktrails.trail.gameofthrones") {;