diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/shape/ShapeGrid.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/shape/ShapeGrid.java
index a95d7ecdb..eed8796ed 100644
--- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/shape/ShapeGrid.java
+++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/shape/ShapeGrid.java
@@ -4,26 +4,40 @@ import org.bukkit.util.Vector;
public class ShapeGrid extends Shape
{
-
+
/**
* Each string in the array represents a layer on the XY-plane, meaning the layers moves towards positive Z.
* Each line in the string represents a line on parallel with the X-axis, where the first line is on the top of the shape.
* Use '#' for each point and anything else for each "non-point".
* The finished shape will then be centered afterwards.
*/
- public ShapeGrid(String...input)
+ public ShapeGrid(String... input)
{
- this(DefaultDencity, input);
+ this(DefaultDencity, '#', input);
+ }
+
+ /**
+ * Each string in the array represents a layer on the XY-plane, meaning the layers moves towards positive Z.
+ * Each line in the string represents a line on parallel with the X-axis, where the first line is on the top of the shape.
+ * Use the read
char for each point and anything else for each "non-point".
+ * The finished shape will then be centered afterwards.
+ */
+ public ShapeGrid(char read, String...input)
+ {
+ this(DefaultDencity, read, input);
}
/**
* Each string in the array represents a layer on the XY-plane, meaning the layers moves towards positive Z.
* Each line in the string represents a line on parallel with the X-axis.
- * Use '#' for each point and '_' for each "non-point".
+ * Use the read
char for each point and anything else for each "non-point".
* The finished shape will then be centered afterwards.
*/
- public ShapeGrid(double dencity, String...input)
+ public ShapeGrid(double dencity, char read, String...input)
{
+ int lx = 0;
+ int ly = 0;
+ int lz = 0;
for(int y = 0; y < input.length; y++)
{
String[] lines = input[y].split("\n");
@@ -32,12 +46,15 @@ public class ShapeGrid extends Shape
String line = lines[z];
for(int x = 0; x < line.length(); x++)
{
- if(line.charAt(x) == '#') addPoint(new Vector(x,-y+input.length,z).multiply(dencity));
+ if(line.charAt(x) == read) addPoint(new Vector(x,-y+input.length,z).multiply(dencity));
+ if(x > lx) lx = x;
+ if(-y+input.length > ly) ly = -y+input.length;
+ if(z > lz) lz= z;
}
}
}
- add(getMidPoint().multiply(-1));
+ add(new Vector(lx,ly,lz).multiply(-0.5*dencity));
}
}
diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/shape/ShapeWings.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/shape/ShapeWings.java
index d70e60f94..3f6b8ddfd 100644
--- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/shape/ShapeWings.java
+++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/shape/ShapeWings.java
@@ -24,22 +24,29 @@ public class ShapeWings extends ShapeGrid implements ICosmeticShape
{
this(particle, null, 0, 1);
}
-
+
public ShapeWings(String particle, Vector offsetData, float speed, int count)
{
- super(0.15,
- "##0000000000000000##",
- "0##00000000000000##0",
- "00##000000000000##00",
- "00###0000000000###00",
- "000####000000####000",
- "000######00#####0000",
- "0000############0000",
- "00000##########00000",
- "00000##########00000",
- "00000####000###00000",
- "00000###0000###00000",
- "00000##000000##00000"
+ this(particle, offsetData, 0, 1, false);
+ }
+
+ public ShapeWings(String particle, Vector offsetData, float speed, int count, boolean edge)
+ {
+ super(0.15, edge? '$' : '#',
+ "0$$0000000000000000$$0",
+ "$##$00000000000000$##$",
+ "0$##$000000000000$##$0",
+ "00$##$0000000000$##$00",
+ "00$###$00000000$###$00",
+ "000$####$0000$####$000",
+ "000$######$$#####$0000",
+ "0000$############$0000",
+ "00000$##########$00000",
+ "00000$##########$00000",
+ "00000$####$$$###$00000",
+ "00000$###$000$###$0000",
+ "00000$##$00000$##$0000",
+ "000000$000000000$00000"
);
_particle = particle;
@@ -58,8 +65,16 @@ public class ShapeWings extends ShapeGrid implements ICosmeticShape
for(Vector v : clone._points)
{
Location ploc = loc.clone().add(v);
- UtilParticle.PlayParticleToAll(_particle, ploc, _offsetData, _speed, _count, ViewDist.NORMAL);
+ displayParticle(ploc);
}
}
+
+ /**
+ * Display a single particle of the type provided to this shape at the given location.
+ */
+ public void displayParticle(Location loc)
+ {
+ UtilParticle.PlayParticleToAll(_particle, loc, _offsetData, _speed, _count, ViewDist.NORMAL);
+ }
}
diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilColor.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilColor.java
index 93638b31a..01ad550cd 100644
--- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilColor.java
+++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilColor.java
@@ -74,7 +74,7 @@ public class UtilColor
public static Vector colorToVector(Color color)
{
- return new Vector((color.getRed()/255.0)-1, color.getGreen()/255.0, color.getBlue()/255.0);
+ return new Vector(Math.max(color.getRed()/255.0, 0.00001f), color.getGreen()/255.0, color.getBlue()/255.0);
}
public static RGBData hexToRgb(int hex)
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/GadgetManager.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/GadgetManager.java
index 43f8871a0..31a872510 100644
--- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/GadgetManager.java
+++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/GadgetManager.java
@@ -32,20 +32,115 @@ import mineplex.core.disguise.DisguiseManager;
import mineplex.core.donation.DonationManager;
import mineplex.core.gadget.event.GadgetCollideEntityEvent;
import mineplex.core.gadget.event.GadgetEnableEvent;
-import mineplex.core.gadget.gadgets.arrowtrail.*;
-import mineplex.core.gadget.gadgets.death.*;
-import mineplex.core.gadget.gadgets.doublejump.*;
-import mineplex.core.gadget.gadgets.hat.*;
-import mineplex.core.gadget.gadgets.item.*;
-import mineplex.core.gadget.gadgets.morph.*;
-import mineplex.core.gadget.gadgets.outfit.*;
-import mineplex.core.gadget.gadgets.particle.*;
+import mineplex.core.gadget.gadgets.arrowtrail.ArrowTrailBlood;
+import mineplex.core.gadget.gadgets.arrowtrail.ArrowTrailCandyCane;
+import mineplex.core.gadget.gadgets.arrowtrail.ArrowTrailConfetti;
+import mineplex.core.gadget.gadgets.arrowtrail.ArrowTrailCupid;
+import mineplex.core.gadget.gadgets.arrowtrail.ArrowTrailEmerald;
+import mineplex.core.gadget.gadgets.arrowtrail.ArrowTrailEnchant;
+import mineplex.core.gadget.gadgets.arrowtrail.ArrowTrailFrostLord;
+import mineplex.core.gadget.gadgets.arrowtrail.ArrowTrailMusic;
+import mineplex.core.gadget.gadgets.arrowtrail.ArrowTrailShadow;
+import mineplex.core.gadget.gadgets.arrowtrail.ArrowTrailStorm;
+import mineplex.core.gadget.gadgets.arrowtrail.ArrowTrailTitan;
+import mineplex.core.gadget.gadgets.death.DeathBlood;
+import mineplex.core.gadget.gadgets.death.DeathCandyCane;
+import mineplex.core.gadget.gadgets.death.DeathCupidsBorkenHeart;
+import mineplex.core.gadget.gadgets.death.DeathEmerald;
+import mineplex.core.gadget.gadgets.death.DeathEnchant;
+import mineplex.core.gadget.gadgets.death.DeathFrostLord;
+import mineplex.core.gadget.gadgets.death.DeathMusic;
+import mineplex.core.gadget.gadgets.death.DeathPinataBurst;
+import mineplex.core.gadget.gadgets.death.DeathShadow;
+import mineplex.core.gadget.gadgets.death.DeathStorm;
+import mineplex.core.gadget.gadgets.death.DeathTitan;
+import mineplex.core.gadget.gadgets.doublejump.DoubleJumpBlood;
+import mineplex.core.gadget.gadgets.doublejump.DoubleJumpCandyCane;
+import mineplex.core.gadget.gadgets.doublejump.DoubleJumpCupidsWings;
+import mineplex.core.gadget.gadgets.doublejump.DoubleJumpEmerald;
+import mineplex.core.gadget.gadgets.doublejump.DoubleJumpEnchant;
+import mineplex.core.gadget.gadgets.doublejump.DoubleJumpFirecracker;
+import mineplex.core.gadget.gadgets.doublejump.DoubleJumpFrostLord;
+import mineplex.core.gadget.gadgets.doublejump.DoubleJumpMusic;
+import mineplex.core.gadget.gadgets.doublejump.DoubleJumpShadow;
+import mineplex.core.gadget.gadgets.doublejump.DoubleJumpStorm;
+import mineplex.core.gadget.gadgets.doublejump.DoubleJumpTitan;
+import mineplex.core.gadget.gadgets.hat.HatCoal;
+import mineplex.core.gadget.gadgets.hat.HatGrinch;
+import mineplex.core.gadget.gadgets.hat.HatPresent;
+import mineplex.core.gadget.gadgets.hat.HatRudolph;
+import mineplex.core.gadget.gadgets.hat.HatSanta;
+import mineplex.core.gadget.gadgets.hat.HatSnowman;
+import mineplex.core.gadget.gadgets.item.ItemBatGun;
+import mineplex.core.gadget.gadgets.item.ItemCoal;
+import mineplex.core.gadget.gadgets.item.ItemCoinBomb;
+import mineplex.core.gadget.gadgets.item.ItemDuelingSword;
+import mineplex.core.gadget.gadgets.item.ItemEtherealPearl;
+import mineplex.core.gadget.gadgets.item.ItemFirework;
+import mineplex.core.gadget.gadgets.item.ItemFleshHook;
+import mineplex.core.gadget.gadgets.item.ItemFreezeCannon;
+import mineplex.core.gadget.gadgets.item.ItemMelonLauncher;
+import mineplex.core.gadget.gadgets.item.ItemPaintballGun;
+import mineplex.core.gadget.gadgets.item.ItemPaintbrush;
+import mineplex.core.gadget.gadgets.item.ItemPartyPopper;
+import mineplex.core.gadget.gadgets.item.ItemSnowball;
+import mineplex.core.gadget.gadgets.item.ItemTNT;
+import mineplex.core.gadget.gadgets.morph.MorphBat;
+import mineplex.core.gadget.gadgets.morph.MorphBlaze;
+import mineplex.core.gadget.gadgets.morph.MorphBlock;
+import mineplex.core.gadget.gadgets.morph.MorphBunny;
+import mineplex.core.gadget.gadgets.morph.MorphChicken;
+import mineplex.core.gadget.gadgets.morph.MorphCow;
+import mineplex.core.gadget.gadgets.morph.MorphCreeper;
+import mineplex.core.gadget.gadgets.morph.MorphEnderman;
+import mineplex.core.gadget.gadgets.morph.MorphPig;
+import mineplex.core.gadget.gadgets.morph.MorphPumpkinKing;
+import mineplex.core.gadget.gadgets.morph.MorphSlime;
+import mineplex.core.gadget.gadgets.morph.MorphSnowman;
+import mineplex.core.gadget.gadgets.morph.MorphTitan;
+import mineplex.core.gadget.gadgets.morph.MorphVillager;
+import mineplex.core.gadget.gadgets.morph.MorphWither;
+import mineplex.core.gadget.gadgets.outfit.OutfitRaveSuitBoots;
+import mineplex.core.gadget.gadgets.outfit.OutfitRaveSuitChestplate;
+import mineplex.core.gadget.gadgets.outfit.OutfitRaveSuitHelmet;
+import mineplex.core.gadget.gadgets.outfit.OutfitRaveSuitLeggings;
+import mineplex.core.gadget.gadgets.outfit.OutfitSpaceSuitBoots;
+import mineplex.core.gadget.gadgets.outfit.OutfitSpaceSuitChestplate;
+import mineplex.core.gadget.gadgets.outfit.OutfitSpaceSuitHelmet;
+import mineplex.core.gadget.gadgets.outfit.OutfitSpaceSuitLeggings;
+import mineplex.core.gadget.gadgets.outfit.OutfitTeam;
+import mineplex.core.gadget.gadgets.particle.ParticleBlood;
+import mineplex.core.gadget.gadgets.particle.ParticleCandyCane;
+import mineplex.core.gadget.gadgets.particle.ParticleCoalFumes;
+import mineplex.core.gadget.gadgets.particle.ParticleWingsDemons;
+import mineplex.core.gadget.gadgets.particle.ParticleWingsInfernal;
+import mineplex.core.gadget.gadgets.particle.ParticleWingsPixie;
+import mineplex.core.gadget.gadgets.particle.ParticleYinYang;
+import mineplex.core.gadget.gadgets.particle.ParticleEmerald;
+import mineplex.core.gadget.gadgets.particle.ParticleEnchant;
+import mineplex.core.gadget.gadgets.particle.ParticleFairy;
+import mineplex.core.gadget.gadgets.particle.ParticleFireRings;
+import mineplex.core.gadget.gadgets.particle.ParticleFoot;
+import mineplex.core.gadget.gadgets.particle.ParticleFrostLord;
+import mineplex.core.gadget.gadgets.particle.ParticleHeart;
+import mineplex.core.gadget.gadgets.particle.ParticleLegend;
+import mineplex.core.gadget.gadgets.particle.ParticleMusic;
+import mineplex.core.gadget.gadgets.particle.ParticlePartyTime;
+import mineplex.core.gadget.gadgets.particle.ParticleRain;
+import mineplex.core.gadget.gadgets.particle.ParticleTitan;
+import mineplex.core.gadget.gadgets.particle.ParticleWingsAngel;
+import mineplex.core.gadget.set.SetBlood;
import mineplex.core.gadget.set.SetCandyCane;
import mineplex.core.gadget.set.SetCupidsWings;
+import mineplex.core.gadget.set.SetEmerald;
+import mineplex.core.gadget.set.SetEnchant;
import mineplex.core.gadget.set.SetFrostLord;
+import mineplex.core.gadget.set.SetMusic;
import mineplex.core.gadget.set.SetParty;
import mineplex.core.gadget.set.SetRaveSuit;
+import mineplex.core.gadget.set.SetShadow;
import mineplex.core.gadget.set.SetSpaceSuit;
+import mineplex.core.gadget.set.SetStorm;
import mineplex.core.gadget.set.SetTitan;
import mineplex.core.gadget.types.ArrowEffectGadget;
import mineplex.core.gadget.types.DeathEffectGadget;
@@ -67,6 +162,7 @@ import mineplex.core.projectile.ProjectileManager;
public class GadgetManager extends MiniPlugin
{
+ //TODO: ADD STORM, ENCHANT, MUSIC & BLOOD SET!
private CoreClientManager _clientManager;
private DonationManager _donationManager;
private InventoryManager _inventoryManager;
@@ -122,6 +218,12 @@ public class GadgetManager extends MiniPlugin
addSet(new SetSpaceSuit(this));
addSet(new SetParty(this));
addSet(new SetCupidsWings(this));
+ addSet(new SetEmerald(this));
+ addSet(new SetShadow(this));
+ addSet(new SetEnchant(this));
+ addSet(new SetStorm(this));
+ addSet(new SetBlood(this));
+ addSet(new SetMusic(this));
}
private void CreateGadgets()
@@ -179,11 +281,7 @@ public class GadgetManager extends MiniPlugin
// Particles
addGadget(new ParticleFoot(this));
- addGadget(new ParticleEnchant(this));
addGadget(new ParticleFireRings(this));
- addGadget(new ParticleRain(this));
- addGadget(new ParticleHelix(this));
- addGadget(new ParticleGreen(this));
addGadget(new ParticleFairy(this));
addGadget(new ParticleLegend(this));
addGadget(new ParticleFrostLord(this));
@@ -192,7 +290,17 @@ public class GadgetManager extends MiniPlugin
addGadget(new ParticleCoalFumes(this));
addGadget(new ParticlePartyTime(this));
addGadget(new ParticleHeart(this));
- addGadget(new ParticleDemonsWings(this));
+ addGadget(new ParticleEmerald(this));
+ addGadget(new ParticleWingsDemons(this));
+ addGadget(new ParticleEnchant(this));
+ addGadget(new ParticleRain(this));
+ addGadget(new ParticleBlood(this));
+ addGadget(new ParticleMusic(this));
+ addGadget(new ParticleWingsAngel(this));
+ addGadget(new ParticleWingsInfernal(this));
+ addGadget(new ParticleWingsPixie(this));
+ addGadget(new ParticleYinYang(this));
+
// Arrow Trails
addGadget(new ArrowTrailFrostLord(this));
@@ -200,6 +308,12 @@ public class GadgetManager extends MiniPlugin
addGadget(new ArrowTrailCandyCane(this));
addGadget(new ArrowTrailConfetti(this));
addGadget(new ArrowTrailCupid(this));
+ addGadget(new ArrowTrailEmerald(this));
+ addGadget(new ArrowTrailShadow(this));
+ addGadget(new ArrowTrailEnchant(this));
+ addGadget(new ArrowTrailStorm(this));
+ addGadget(new ArrowTrailBlood(this));
+ addGadget(new ArrowTrailMusic(this));
// Death Effect
addGadget(new DeathFrostLord(this));
@@ -207,6 +321,12 @@ public class GadgetManager extends MiniPlugin
addGadget(new DeathCandyCane(this));
addGadget(new DeathPinataBurst(this));
addGadget(new DeathCupidsBorkenHeart(this));
+ addGadget(new DeathEmerald(this));
+ addGadget(new DeathShadow(this));
+ addGadget(new DeathEnchant(this));
+ addGadget(new DeathStorm(this));
+ addGadget(new DeathBlood(this));
+ addGadget(new DeathMusic(this));
// Double Jump
addGadget(new DoubleJumpFrostLord(this));
@@ -214,6 +334,12 @@ public class GadgetManager extends MiniPlugin
addGadget(new DoubleJumpCandyCane(this));
addGadget(new DoubleJumpFirecracker(this));
addGadget(new DoubleJumpCupidsWings(this));
+ addGadget(new DoubleJumpEmerald(this));
+ addGadget(new DoubleJumpShadow(this));
+ addGadget(new DoubleJumpEnchant(this));
+ addGadget(new DoubleJumpStorm(this));
+ addGadget(new DoubleJumpBlood(this));
+ addGadget(new DoubleJumpMusic(this));
// Hat
addGadget(new HatSanta(this));
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/arrowtrail/ArrowTrailBlood.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/arrowtrail/ArrowTrailBlood.java
new file mode 100644
index 000000000..5b577183a
--- /dev/null
+++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/arrowtrail/ArrowTrailBlood.java
@@ -0,0 +1,40 @@
+package mineplex.core.gadget.gadgets.arrowtrail;
+
+import org.bukkit.Material;
+import org.bukkit.entity.Arrow;
+
+import mineplex.core.common.util.C;
+import mineplex.core.common.util.LineFormat;
+import mineplex.core.common.util.UtilParticle;
+import mineplex.core.common.util.UtilParticle.ParticleType;
+import mineplex.core.common.util.UtilParticle.ViewDist;
+import mineplex.core.common.util.UtilText;
+import mineplex.core.gadget.GadgetManager;
+import mineplex.core.gadget.types.ArrowEffectGadget;
+
+public class ArrowTrailBlood extends ArrowEffectGadget
+{
+
+ public ArrowTrailBlood(GadgetManager manager)
+ {
+ super(manager, "Bloody Arrows",
+ UtilText.splitLineToArray(C.cGray + "Arrows soaking in blood, freshly pulled out from your enemies corpse", LineFormat.LORE),
+ 1, Material.REDSTONE, (byte) 0);
+ }
+
+ @Override
+ public void doTrail(Arrow arrow)
+ {
+ UtilParticle.PlayParticleToAll(ParticleType.RED_DUST, arrow.getLocation(), null, 0f, 1, ViewDist.LONG);
+ UtilParticle.PlayParticleToAll(ParticleType.ICON_CRACK.getParticle(Material.REDSTONE_BLOCK, 0), arrow.getLocation(), null, 0.05f, 3, ViewDist.LONG);
+ }
+
+ @Override
+ public void doHitEffect(Arrow arrow)
+ {
+ UtilParticle.PlayParticleToAll(ParticleType.RED_DUST, arrow.getLocation(), 0.4f, 0.4f, 0.4f, 0f, 20, ViewDist.LONG);
+ UtilParticle.PlayParticleToAll(ParticleType.ICON_CRACK.getParticle(Material.REDSTONE_BLOCK, 0), arrow.getLocation(), 0.1f, 0.1f, 0.1f, 0.25f, 60, ViewDist.LONG);
+
+ }
+
+}
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/arrowtrail/ArrowTrailEmerald.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/arrowtrail/ArrowTrailEmerald.java
new file mode 100644
index 000000000..b37be4469
--- /dev/null
+++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/arrowtrail/ArrowTrailEmerald.java
@@ -0,0 +1,59 @@
+package mineplex.core.gadget.gadgets.arrowtrail;
+
+import org.bukkit.Location;
+import org.bukkit.Material;
+import org.bukkit.entity.Arrow;
+import org.bukkit.util.Vector;
+
+import mineplex.core.common.util.LineFormat;
+import mineplex.core.common.util.UtilAlg;
+import mineplex.core.common.util.UtilParticle;
+import mineplex.core.common.util.UtilParticle.ParticleType;
+import mineplex.core.common.util.UtilParticle.ViewDist;
+import mineplex.core.common.util.UtilText;
+import mineplex.core.gadget.GadgetManager;
+import mineplex.core.gadget.types.ArrowEffectGadget;
+
+public class ArrowTrailEmerald extends ArrowEffectGadget
+{
+
+ public ArrowTrailEmerald(GadgetManager manager)
+ {
+ super(manager, "Green Arrows",
+ UtilText.splitLineToArray("Shoot swirly green arrows", LineFormat.LORE),
+ 1, Material.EMERALD, (byte)0);
+ }
+
+ @Override
+ public void doTrail(Arrow arrow)
+ {
+ Vector v = arrow.getVelocity();
+ Vector up = UtilAlg.getUp(v);
+ Vector left = UtilAlg.getLeft(v);
+
+ Location loc = arrow.getLocation();
+
+ double amount = 2;
+ double ticks = 15;
+ for(int i = 0; i < amount; i++)
+ {
+ double rad = Math.PI*2.0;
+ rad += i/amount * rad;
+ rad += Math.PI*2*(arrow.getTicksLived()%ticks)/ticks;
+ double l = -Math.sin(rad);
+ double u = Math.cos(rad);
+
+ Vector vel = v.clone().add(up.clone().multiply(u)).add(left.clone().multiply(l));
+ vel.multiply(0.4);
+
+ UtilParticle.PlayParticleToAll(ParticleType.HAPPY_VILLAGER, loc.clone().add(vel), vel, 1f, 0, ViewDist.LONGER);
+ }
+ }
+
+ @Override
+ public void doHitEffect(Arrow arrow)
+ {
+ UtilParticle.PlayParticleToAll(ParticleType.HAPPY_VILLAGER, arrow.getLocation(), 0.35f, 0.35f, 0.35f, 1f, 15, ViewDist.LONGER);
+ }
+
+}
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/arrowtrail/ArrowTrailEnchant.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/arrowtrail/ArrowTrailEnchant.java
new file mode 100644
index 000000000..cc9512caa
--- /dev/null
+++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/arrowtrail/ArrowTrailEnchant.java
@@ -0,0 +1,81 @@
+package mineplex.core.gadget.gadgets.arrowtrail;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.bukkit.Location;
+import org.bukkit.Material;
+import org.bukkit.entity.Arrow;
+import org.bukkit.event.EventHandler;
+import org.bukkit.util.Vector;
+
+import mineplex.core.common.util.C;
+import mineplex.core.common.util.LineFormat;
+import mineplex.core.common.util.UtilParticle;
+import mineplex.core.common.util.UtilParticle.ParticleType;
+import mineplex.core.common.util.UtilParticle.ViewDist;
+import mineplex.core.common.util.UtilText;
+import mineplex.core.gadget.GadgetManager;
+import mineplex.core.gadget.types.ArrowEffectGadget;
+import mineplex.core.updater.UpdateType;
+import mineplex.core.updater.event.UpdateEvent;
+
+public class ArrowTrailEnchant extends ArrowEffectGadget
+{
+
+ private Map _arrowMap = new HashMap<>();
+
+ public ArrowTrailEnchant(GadgetManager manager)
+ {
+ super(manager, "Smart Arrows",
+ UtilText.splitLineToArray(C.cGray + "Arrows so smart that they can't be bothered with helping you hit your target", LineFormat.LORE),
+ 1, Material.BOOK, (byte) 0);
+ }
+
+ @Override
+ public void doTrail(Arrow arrow)
+ {
+ Vector v = arrow.getVelocity();
+ double l = v.lengthSquared();
+ v.multiply(-1/l);
+ for(int i = 0; i < l; i++) {
+ UtilParticle.PlayParticleToAll(ParticleType.ENCHANTMENT_TABLE, arrow.getLocation().add(v.clone().multiply(i+1)), null, 1, 0, ViewDist.LONG);
+ }
+ }
+
+ @Override
+ public void doHitEffect(Arrow arrow)
+ {
+ _arrowMap.put(arrow, System.currentTimeMillis() + 2000);
+ }
+
+ @EventHandler
+ public void onUpdate(UpdateEvent event)
+ {
+ if(event.getType() != UpdateType.TICK) return;
+
+ for (Iterator> it = _arrowMap.entrySet().iterator(); it.hasNext();)
+ {
+ Entry e = it.next();
+ if(e.getValue() <= System.currentTimeMillis())
+ {
+ it.remove();
+ continue;
+ }
+
+ Location loc = e.getKey().getLocation().add(0, 1, 0);
+ for(double d = 0; d < Math.PI*2; d += Math.PI/6) {
+ double x = Math.sin(d);
+ double z = Math.cos(d);
+ Vector v = new Vector(x, -0.6, z).multiply(1.5);
+// OUT
+// UtilParticle.PlayParticleToAll(ParticleType.ENCHANTMENT_TABLE, loc.clone().add(-x*1.5, 0, -z*1.5), v, 1, 0, ViewDist.LONG);
+// IN
+ UtilParticle.PlayParticleToAll(ParticleType.ENCHANTMENT_TABLE, loc.clone(), v, 1, 0, ViewDist.LONG);
+ }
+ }
+ }
+
+}
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/arrowtrail/ArrowTrailMusic.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/arrowtrail/ArrowTrailMusic.java
new file mode 100644
index 000000000..b036161fc
--- /dev/null
+++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/arrowtrail/ArrowTrailMusic.java
@@ -0,0 +1,41 @@
+package mineplex.core.gadget.gadgets.arrowtrail;
+
+import org.bukkit.Material;
+import org.bukkit.entity.Arrow;
+
+import mineplex.core.common.util.C;
+import mineplex.core.common.util.LineFormat;
+import mineplex.core.common.util.UtilParticle;
+import mineplex.core.common.util.UtilParticle.ParticleType;
+import mineplex.core.common.util.UtilParticle.ViewDist;
+import mineplex.core.common.util.UtilText;
+import mineplex.core.gadget.GadgetManager;
+import mineplex.core.gadget.types.ArrowEffectGadget;
+
+public class ArrowTrailMusic extends ArrowEffectGadget
+{
+
+ public ArrowTrailMusic(GadgetManager manager)
+ {
+ super(manager, "Music Arrows",
+ UtilText.splitLineToArray(C.cGray + "Share your music with your friends using the new .arrow format", LineFormat.LORE),
+ 1, Material.GREEN_RECORD, (byte) 0);
+ }
+
+ @Override
+ public void doTrail(Arrow arrow)
+ {
+
+ float d = arrow.getTicksLived()%25;
+ d /= 24f;
+
+ UtilParticle.PlayParticleToAll(ParticleType.NOTE, arrow.getLocation(), d, 0, 0, 1, 0, ViewDist.LONGER);
+ }
+
+ @Override
+ public void doHitEffect(Arrow arrow)
+ {
+ UtilParticle.PlayParticleToAll(ParticleType.NOTE, arrow.getLocation(), 0.5f, 0.3f, 0.5f, 1, 5, ViewDist.LONGER);
+ }
+
+}
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/arrowtrail/ArrowTrailShadow.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/arrowtrail/ArrowTrailShadow.java
new file mode 100644
index 000000000..8dccd6456
--- /dev/null
+++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/arrowtrail/ArrowTrailShadow.java
@@ -0,0 +1,41 @@
+package mineplex.core.gadget.gadgets.arrowtrail;
+
+import org.bukkit.Material;
+import org.bukkit.entity.Arrow;
+import org.bukkit.entity.Player;
+
+import mineplex.core.common.util.C;
+import mineplex.core.common.util.LineFormat;
+import mineplex.core.common.util.UtilParticle;
+import mineplex.core.common.util.UtilParticle.ParticleType;
+import mineplex.core.common.util.UtilParticle.ViewDist;
+import mineplex.core.common.util.UtilText;
+import mineplex.core.gadget.GadgetManager;
+import mineplex.core.gadget.types.ArrowEffectGadget;
+
+public class ArrowTrailShadow extends ArrowEffectGadget
+{
+
+ public ArrowTrailShadow(GadgetManager manager)
+ {
+ super(manager, "Shadow Arrows",
+ UtilText.splitLineToArray(C.cGray + "Very very dark arrows", LineFormat.LORE),
+ 1, Material.COAL, (byte) 0);
+ }
+
+ @Override
+ public void doTrail(Arrow arrow)
+ {
+// if(!(arrow.getShooter() instanceof Player)) return;
+// Player player = (Player) arrow.getShooter();
+// if(getSet() == null || !getSet().isActive(player)) return;
+ UtilParticle.PlayParticleToAll(ParticleType.SMOKE, arrow.getLocation(), null, 0.1f, 3, ViewDist.LONG);
+ }
+
+ @Override
+ public void doHitEffect(Arrow arrow)
+ {
+ UtilParticle.PlayParticleToAll(ParticleType.LARGE_SMOKE, arrow.getLocation(), 0.3f, 0.3f, 0.3f , 0, 5, ViewDist.LONG);
+ }
+
+}
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/arrowtrail/ArrowTrailStorm.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/arrowtrail/ArrowTrailStorm.java
new file mode 100644
index 000000000..33590f880
--- /dev/null
+++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/arrowtrail/ArrowTrailStorm.java
@@ -0,0 +1,37 @@
+package mineplex.core.gadget.gadgets.arrowtrail;
+
+import org.bukkit.Material;
+import org.bukkit.entity.Arrow;
+
+import mineplex.core.common.util.C;
+import mineplex.core.common.util.LineFormat;
+import mineplex.core.common.util.UtilParticle;
+import mineplex.core.common.util.UtilParticle.ParticleType;
+import mineplex.core.common.util.UtilParticle.ViewDist;
+import mineplex.core.common.util.UtilText;
+import mineplex.core.gadget.GadgetManager;
+import mineplex.core.gadget.types.ArrowEffectGadget;
+
+public class ArrowTrailStorm extends ArrowEffectGadget
+{
+
+ public ArrowTrailStorm(GadgetManager manager)
+ {
+ super(manager, "Rain Arrows",
+ UtilText.splitLineToArray(C.cGray + "Take your sadness to new hights and ranges", LineFormat.LORE),
+ 1, Material.INK_SACK, (byte) 4);
+ }
+
+ @Override
+ public void doTrail(Arrow arrow)
+ {
+ UtilParticle.PlayParticleToAll(ParticleType.SPLASH, arrow.getLocation(), 0.0f, 0.0f, 0.0f, 0.3f, 10, ViewDist.LONGER);
+ }
+
+ @Override
+ public void doHitEffect(Arrow arrow)
+ {
+ UtilParticle.PlayParticleToAll(ParticleType.SPLASH, arrow.getLocation(), 0.4f, 0.4f, 0.4f, 0.7f, 160, ViewDist.LONGER);
+ }
+
+}
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/death/DeathBlood.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/death/DeathBlood.java
new file mode 100644
index 000000000..cc5afad3d
--- /dev/null
+++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/death/DeathBlood.java
@@ -0,0 +1,35 @@
+package mineplex.core.gadget.gadgets.death;
+
+import org.bukkit.Material;
+import org.bukkit.entity.Player;
+
+import mineplex.core.blood.BloodEvent;
+import mineplex.core.common.util.C;
+import mineplex.core.common.util.LineFormat;
+import mineplex.core.common.util.UtilParticle;
+import mineplex.core.common.util.UtilText;
+import mineplex.core.common.util.UtilParticle.ParticleType;
+import mineplex.core.common.util.UtilParticle.ViewDist;
+import mineplex.core.gadget.GadgetManager;
+import mineplex.core.gadget.types.DeathEffectGadget;
+
+public class DeathBlood extends DeathEffectGadget
+{
+
+ public DeathBlood(GadgetManager manager)
+ {
+ super(manager, "Gory Blood Death",
+ UtilText.splitLineToArray(C.cGray + "Dye in the nastiest and bloodiest way possible. Soak your enemies in your blood every time you die!", LineFormat.LORE),
+ 1, Material.REDSTONE, (byte) 0);
+ }
+
+ @Override
+ public void onBlood(Player player, BloodEvent event)
+ {
+ event.setItem(Material.REDSTONE_BLOCK, (byte) 0);
+ UtilParticle.PlayParticleToAll(ParticleType.RED_DUST, player.getLocation(), 0.4f, 0.4f, 0.4f, 0f, 20, ViewDist.LONG);
+ UtilParticle.PlayParticleToAll(ParticleType.ICON_CRACK.getParticle(Material.REDSTONE_BLOCK, 0), player.getLocation(), 0.1f, 0.1f, 0.1f, 0.25f, 60, ViewDist.LONG);
+ }
+
+
+}
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/death/DeathEmerald.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/death/DeathEmerald.java
new file mode 100644
index 000000000..8459ad1ff
--- /dev/null
+++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/death/DeathEmerald.java
@@ -0,0 +1,29 @@
+package mineplex.core.gadget.gadgets.death;
+
+import org.bukkit.Material;
+import org.bukkit.entity.Player;
+
+import mineplex.core.blood.BloodEvent;
+import mineplex.core.common.util.C;
+import mineplex.core.common.util.LineFormat;
+import mineplex.core.common.util.UtilText;
+import mineplex.core.gadget.GadgetManager;
+import mineplex.core.gadget.types.DeathEffectGadget;
+
+public class DeathEmerald extends DeathEffectGadget
+{
+
+ public DeathEmerald(GadgetManager manager)
+ {
+ super(manager, "Green Death",
+ UtilText.splitLineToArray(C.cGreen + "I might be dead, but at least I got emeralds", LineFormat.LORE),
+ 1, Material.EMERALD, (byte) 0);
+ }
+
+ @Override
+ public void onBlood(Player player, BloodEvent event)
+ {
+ event.setItem(Material.EMERALD, (byte) 0);
+ }
+
+}
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/death/DeathEnchant.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/death/DeathEnchant.java
new file mode 100644
index 000000000..bf6949703
--- /dev/null
+++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/death/DeathEnchant.java
@@ -0,0 +1,73 @@
+package mineplex.core.gadget.gadgets.death;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.bukkit.Location;
+import org.bukkit.Material;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.util.Vector;
+
+import mineplex.core.blood.BloodEvent;
+import mineplex.core.common.util.C;
+import mineplex.core.common.util.LineFormat;
+import mineplex.core.common.util.UtilParticle;
+import mineplex.core.common.util.UtilParticle.ParticleType;
+import mineplex.core.common.util.UtilParticle.ViewDist;
+import mineplex.core.common.util.UtilText;
+import mineplex.core.gadget.GadgetManager;
+import mineplex.core.gadget.types.DeathEffectGadget;
+import mineplex.core.updater.UpdateType;
+import mineplex.core.updater.event.UpdateEvent;
+
+public class DeathEnchant extends DeathEffectGadget
+{
+
+ private Map _locationMap = new HashMap<>();
+
+ public DeathEnchant(GadgetManager manager)
+ {
+ super(manager, "Death of Wisdom",
+ UtilText.splitLineToArray(C.cGray + "Only a fool would continue fighting when he knows he have lost. Die with some cool and smart particles instead ;)", LineFormat.LORE),
+ 1, Material.BOOK, (byte) 0);
+ }
+
+ @Override
+ public void onBlood(Player player, BloodEvent event)
+ {
+ event.setItem(Material.BOOK, (byte)0);
+ _locationMap.put(event.getLocation().clone(), System.currentTimeMillis() + 1500);
+ }
+
+ @EventHandler
+ public void onUpdate(UpdateEvent event)
+ {
+ if(event.getType() != UpdateType.TICK) return;
+
+ for (Iterator> it = _locationMap.entrySet().iterator(); it.hasNext();)
+ {
+ Entry e = it.next();
+ if(e.getValue() <= System.currentTimeMillis())
+ {
+ it.remove();
+ continue;
+ }
+
+ Location loc = e.getKey().clone().add(0, 1, 0);
+ for(double d = 0; d < Math.PI*2; d += Math.PI/6) {
+ double x = Math.sin(d);
+ double z = Math.cos(d);
+ Vector v = new Vector(x, -0.6, z).multiply(1.5);
+// OUT
+ UtilParticle.PlayParticleToAll(ParticleType.ENCHANTMENT_TABLE, loc.clone().add(-x*1.5, 0, -z*1.5), v, 1, 0, ViewDist.LONG);
+// IN
+// UtilParticle.PlayParticleToAll(ParticleType.ENCHANTMENT_TABLE, loc.clone(), v, 1, 0, ViewDist.LONG);
+ }
+ }
+ }
+
+
+}
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/death/DeathMusic.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/death/DeathMusic.java
new file mode 100644
index 000000000..914fedd4d
--- /dev/null
+++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/death/DeathMusic.java
@@ -0,0 +1,90 @@
+package mineplex.core.gadget.gadgets.death;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.bukkit.Location;
+import org.bukkit.Material;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.util.Vector;
+
+import mineplex.core.blood.BloodEvent;
+import mineplex.core.common.util.C;
+import mineplex.core.common.util.LineFormat;
+import mineplex.core.common.util.UtilParticle;
+import mineplex.core.common.util.UtilText;
+import mineplex.core.common.util.UtilParticle.ParticleType;
+import mineplex.core.common.util.UtilParticle.ViewDist;
+import mineplex.core.gadget.GadgetManager;
+import mineplex.core.gadget.types.DeathEffectGadget;
+import mineplex.core.updater.UpdateType;
+import mineplex.core.updater.event.UpdateEvent;
+
+public class DeathMusic extends DeathEffectGadget
+{
+
+ private Map _playerMap = new HashMap<>();
+
+ public DeathMusic(GadgetManager manager)
+ {
+ super(manager, "Musical Death",
+ UtilText.splitLineToArray(C.cGray + "The body might die, but the music lives on!", LineFormat.LORE),
+ 1, Material.GREEN_RECORD, (byte) 0);
+ }
+
+ @Override
+ public void onBlood(Player player, BloodEvent event)
+ {
+ event.setCancelled(true);
+ _playerMap.put(player.getLocation(), System.currentTimeMillis() + 1250);
+ _playerMap.put(player.getLocation().add(0, 0.9, 0), System.currentTimeMillis() + 1250);
+ _playerMap.put(player.getLocation().add(0, 1.8, 0), System.currentTimeMillis() + 1250);
+ }
+
+ @EventHandler
+ public void onUpdate(UpdateEvent event)
+ {
+ if(event.getType() != UpdateType.TICK) return;
+
+ if(event.getTick()%2 == 1) return;
+
+ for(Iterator> it = _playerMap.entrySet().iterator(); it.hasNext();)
+ {
+ Entry e = it.next();
+ if(e.getValue() <= System.currentTimeMillis())
+ {
+ it.remove();
+ continue;
+ }
+
+ long diff = e.getValue()-System.currentTimeMillis();
+ double d = diff/1250.0;
+
+ int amount = 4;
+
+ double rad = Math.PI * 2 * d;
+
+
+ double step = Math.PI * 2;
+ step /= amount;
+
+ for(int i = 0; i < amount; i++)
+ {
+ double rad2 = rad + step * i;
+
+ double x = Math.sin(rad2) * d * 1.3;
+ double z = Math.cos(rad2) * d * 1.3;
+
+ Location loc = e.getKey().clone().add(x, 0, z);
+
+ UtilParticle.PlayParticleToAll(ParticleType.NOTE, loc, new Vector(d, 0, 0), 1, 0, ViewDist.NORMAL);
+
+ }
+ }
+ }
+
+
+}
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/death/DeathShadow.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/death/DeathShadow.java
new file mode 100644
index 000000000..7f574f9e4
--- /dev/null
+++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/death/DeathShadow.java
@@ -0,0 +1,35 @@
+package mineplex.core.gadget.gadgets.death;
+
+import org.bukkit.Material;
+import org.bukkit.entity.Player;
+
+import mineplex.core.blood.BloodEvent;
+import mineplex.core.common.util.C;
+import mineplex.core.common.util.LineFormat;
+import mineplex.core.common.util.UtilParticle;
+import mineplex.core.common.util.UtilText;
+import mineplex.core.common.util.UtilParticle.ParticleType;
+import mineplex.core.common.util.UtilParticle.ViewDist;
+import mineplex.core.gadget.GadgetManager;
+import mineplex.core.gadget.types.DeathEffectGadget;
+
+public class DeathShadow extends DeathEffectGadget
+{
+
+ public DeathShadow(GadgetManager manager)
+ {
+ super(manager, "Shadow Death",
+ UtilText.splitLineToArray(C.cGray + "Disappear in a cloud of smoke", LineFormat.LORE),
+ 1, Material.COAL, (byte) 0);
+ }
+
+ @Override
+ public void onBlood(Player player, BloodEvent event)
+ {
+ event.setCancelled(true);
+
+ UtilParticle.PlayParticleToAll(ParticleType.LARGE_SMOKE, player.getLocation().add(0, 0.5, 0), 0.1f, 0.5f, 0.1f, 0, 50, ViewDist.NORMAL);
+ UtilParticle.PlayParticleToAll(ParticleType.LARGE_SMOKE, player.getLocation(), 0.5f, 0.0f, 0.5f, 0, 50, ViewDist.NORMAL);
+ }
+
+}
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/death/DeathStorm.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/death/DeathStorm.java
new file mode 100644
index 000000000..fc089830f
--- /dev/null
+++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/death/DeathStorm.java
@@ -0,0 +1,34 @@
+package mineplex.core.gadget.gadgets.death;
+
+import org.bukkit.Material;
+import org.bukkit.entity.Player;
+
+import mineplex.core.blood.BloodEvent;
+import mineplex.core.common.util.C;
+import mineplex.core.common.util.LineFormat;
+import mineplex.core.common.util.UtilParticle;
+import mineplex.core.common.util.UtilText;
+import mineplex.core.common.util.UtilParticle.ParticleType;
+import mineplex.core.common.util.UtilParticle.ViewDist;
+import mineplex.core.gadget.GadgetManager;
+import mineplex.core.gadget.types.DeathEffectGadget;
+
+public class DeathStorm extends DeathEffectGadget
+{
+
+ public DeathStorm(GadgetManager manager)
+ {
+ super(manager, "Gloomy Death",
+ UtilText.splitLineToArray(C.cGray + "Is your death not sad enugh? Make it even more sad by adding some rainy weather too it!", LineFormat.LORE),
+ 1, Material.INK_SACK, (byte) 4);
+ }
+
+ @Override
+ public void onBlood(Player player, BloodEvent event)
+ {
+ event.setItem(Material.INK_SACK, (byte) 4);
+ UtilParticle.PlayParticleToAll(ParticleType.SPLASH, player.getLocation().add(0, 0.9, 0), 0.6f, 0.9f, 0.6f, 0.6f, 100, ViewDist.NORMAL);
+ }
+
+
+}
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/doublejump/DoubleJumpBlood.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/doublejump/DoubleJumpBlood.java
new file mode 100644
index 000000000..9e4af8216
--- /dev/null
+++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/doublejump/DoubleJumpBlood.java
@@ -0,0 +1,32 @@
+package mineplex.core.gadget.gadgets.doublejump;
+
+import org.bukkit.Material;
+import org.bukkit.entity.Player;
+
+import mineplex.core.common.util.C;
+import mineplex.core.common.util.LineFormat;
+import mineplex.core.common.util.UtilParticle;
+import mineplex.core.common.util.UtilText;
+import mineplex.core.common.util.UtilParticle.ParticleType;
+import mineplex.core.common.util.UtilParticle.ViewDist;
+import mineplex.core.gadget.GadgetManager;
+import mineplex.core.gadget.types.DoubleJumpEffectGadget;
+
+public class DoubleJumpBlood extends DoubleJumpEffectGadget
+{
+
+ public DoubleJumpBlood(GadgetManager manager)
+ {
+ super(manager, "Bloody Leap",
+ UtilText.splitLineToArray(C.cGray + "Oh, I gotta leap. No time to bursh of the enemies blood!", LineFormat.LORE),
+ 1, Material.REDSTONE, (byte) 0);
+ }
+
+ @Override
+ public void doEffect(Player player)
+ {
+ UtilParticle.PlayParticleToAll(ParticleType.RED_DUST, player.getLocation(), 0.5f, 0.5f, 0.5f, 0f, 40, ViewDist.LONG);
+ UtilParticle.PlayParticleToAll(ParticleType.ICON_CRACK.getParticle(Material.REDSTONE_BLOCK, 0), player.getLocation(), 0.1f, 0.1f, 0.1f, 0.25f, 100, ViewDist.LONG);
+ }
+
+}
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/doublejump/DoubleJumpEmerald.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/doublejump/DoubleJumpEmerald.java
new file mode 100644
index 000000000..a22e62857
--- /dev/null
+++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/doublejump/DoubleJumpEmerald.java
@@ -0,0 +1,85 @@
+package mineplex.core.gadget.gadgets.doublejump;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map.Entry;
+
+import org.bukkit.Location;
+import org.bukkit.Material;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.util.Vector;
+
+import mineplex.core.common.util.C;
+import mineplex.core.common.util.LineFormat;
+import mineplex.core.common.util.UtilAlg;
+import mineplex.core.common.util.UtilParticle;
+import mineplex.core.common.util.UtilText;
+import mineplex.core.common.util.UtilParticle.ParticleType;
+import mineplex.core.common.util.UtilParticle.ViewDist;
+import mineplex.core.gadget.GadgetManager;
+import mineplex.core.gadget.types.DoubleJumpEffectGadget;
+import mineplex.core.updater.UpdateType;
+import mineplex.core.updater.event.UpdateEvent;
+
+public class DoubleJumpEmerald extends DoubleJumpEffectGadget
+{
+
+ private HashMap _players = new HashMap<>();
+
+ public DoubleJumpEmerald(GadgetManager manager)
+ {
+ super(manager, "Green Jump",
+ UtilText.splitLineToArray(C.cGreen + "Oh, some just released a big one...", LineFormat.LORE),
+ 1, Material.EMERALD, (byte)0);
+ }
+
+ @Override
+ public void doEffect(Player player)
+ {
+ _players.put(player, System.currentTimeMillis() + 500);
+ float r = 0.5f;
+ UtilParticle.PlayParticleToAll(ParticleType.HAPPY_VILLAGER, player.getLocation(), r, r, r, 0, 20, ViewDist.LONGER);
+ }
+
+ @EventHandler
+ public void onUpdate(UpdateEvent event)
+ {
+ if(event.getType() != UpdateType.TICK) return;
+
+ for (Iterator> it = _players.entrySet().iterator(); it.hasNext();)
+ {
+ Entry e = it.next();
+ if(e.getValue() < System.currentTimeMillis())
+ {
+ it.remove();
+ continue;
+ }
+ double diff = e.getValue()-System.currentTimeMillis();
+ double r = (diff + 100)/400;
+
+ Vector v = e.getKey().getVelocity();
+ Vector up = UtilAlg.getUp(v);
+ Vector left = UtilAlg.getLeft(v);
+
+ Location loc = e.getKey().getLocation();
+
+ double amount = 3;
+ double ticks = 15;
+ for(int i = 0; i < amount; i++)
+ {
+ double rad = Math.PI*2.0;
+ rad += i/amount * rad;
+ rad += Math.PI*2*(e.getKey().getTicksLived()%ticks)/ticks;
+ double l = -Math.sin(rad);
+ double u = Math.cos(rad);
+
+ Vector vel = v.clone().add(up.clone().multiply(u)).add(left.clone().multiply(l));
+ vel.multiply(r);
+
+ UtilParticle.PlayParticleToAll(ParticleType.HAPPY_VILLAGER, loc.clone().add(vel), vel, 1f, 0, ViewDist.LONGER);
+ }
+ }
+ }
+
+}
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/doublejump/DoubleJumpEnchant.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/doublejump/DoubleJumpEnchant.java
new file mode 100644
index 000000000..240d5b51c
--- /dev/null
+++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/doublejump/DoubleJumpEnchant.java
@@ -0,0 +1,86 @@
+package mineplex.core.gadget.gadgets.doublejump;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.bukkit.Location;
+import org.bukkit.Material;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.util.Vector;
+
+import mineplex.core.common.util.C;
+import mineplex.core.common.util.LineFormat;
+import mineplex.core.common.util.UtilParticle;
+import mineplex.core.common.util.UtilParticle.ParticleType;
+import mineplex.core.common.util.UtilParticle.ViewDist;
+import mineplex.core.common.util.UtilText;
+import mineplex.core.gadget.GadgetManager;
+import mineplex.core.gadget.types.DoubleJumpEffectGadget;
+import mineplex.core.updater.UpdateType;
+import mineplex.core.updater.event.UpdateEvent;
+
+public class DoubleJumpEnchant extends DoubleJumpEffectGadget
+{
+
+ private Map _locationMap = new HashMap<>();
+ private Map _playerMap = new HashMap<>();
+
+ public DoubleJumpEnchant(GadgetManager manager)
+ {
+ super(manager, "Leap of Wisdom",
+ UtilText.splitLineToArray(C.cGray + "Lett your widowm aid you in every leap you take", LineFormat.LORE),
+ 1, Material.BOOK, (byte) 0);
+ }
+
+ @Override
+ public void doEffect(Player player)
+ {
+ _locationMap.put(player.getLocation(), System.currentTimeMillis() + 1500);
+ _playerMap.put(player, System.currentTimeMillis() + 1100);
+ }
+
+ @EventHandler
+ public void onUpdate(UpdateEvent event)
+ {
+ if(event.getType() != UpdateType.TICK) return;
+
+ for (Iterator> it = _locationMap.entrySet().iterator(); it.hasNext();)
+ {
+ Entry e = it.next();
+ if(e.getValue() <= System.currentTimeMillis())
+ {
+ it.remove();
+ continue;
+ }
+
+ Location loc = e.getKey().clone().add(0, 1, 0);
+ for(double d = 0; d < Math.PI*2; d += Math.PI/6) {
+ double x = Math.sin(d);
+ double z = Math.cos(d);
+ Vector v = new Vector(x, -0.6, z).multiply(1.5);
+// OUT
+// UtilParticle.PlayParticleToAll(ParticleType.ENCHANTMENT_TABLE, loc.clone().add(-x*1.5, 0, -z*1.5), v, 1, 0, ViewDist.LONG);
+// IN
+ UtilParticle.PlayParticleToAll(ParticleType.ENCHANTMENT_TABLE, loc.clone(), v, 1, 0, ViewDist.LONG);
+ }
+ }
+
+ for (Iterator> it = _playerMap.entrySet().iterator(); it.hasNext();)
+ {
+ Entry e = it.next();
+ if(e.getValue() <= System.currentTimeMillis())
+ {
+ it.remove();
+ continue;
+ }
+
+ long diff = e.getValue()-System.currentTimeMillis();
+ float r = diff/2000.0f;
+ UtilParticle.PlayParticleToAll(ParticleType.ENCHANTMENT_TABLE, e.getKey().getLocation(), r, r, r, 0, 10, ViewDist.LONGER);
+ }
+ }
+
+}
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/doublejump/DoubleJumpFirecracker.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/doublejump/DoubleJumpFirecracker.java
index d8613a86d..91c6ed0a9 100644
--- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/doublejump/DoubleJumpFirecracker.java
+++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/doublejump/DoubleJumpFirecracker.java
@@ -1,20 +1,21 @@
package mineplex.core.gadget.gadgets.doublejump;
-import org.bukkit.Color;
-import org.bukkit.FireworkEffect.Type;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import mineplex.core.common.util.C;
import mineplex.core.common.util.LineFormat;
-import mineplex.core.common.util.UtilFirework;
-import mineplex.core.common.util.UtilMath;
+import mineplex.core.common.util.UtilParticle;
import mineplex.core.common.util.UtilText;
+import mineplex.core.common.util.UtilParticle.ParticleType;
+import mineplex.core.common.util.UtilParticle.ViewDist;
import mineplex.core.gadget.GadgetManager;
import mineplex.core.gadget.types.DoubleJumpEffectGadget;
public class DoubleJumpFirecracker extends DoubleJumpEffectGadget
{
+
+ private byte[] _data = new byte[]{1,2,4,5,6,9,10,11,12,13,14,15};
public DoubleJumpFirecracker(GadgetManager manager)
{
@@ -26,7 +27,10 @@ public class DoubleJumpFirecracker extends DoubleJumpEffectGadget
@Override
public void doEffect(Player player)
{
- UtilFirework.playFirework(player.getLocation(), Type.BALL, Color.fromRGB(UtilMath.r(255*255*255)), false, false);
+ for(byte data : _data) {
+ String particle = ParticleType.ICON_CRACK.getParticle(Material.INK_SACK, data);
+ UtilParticle.PlayParticleToAll(particle, player.getLocation(), null, 0.3f, 15, ViewDist.LONGER);
+ }
}
}
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/doublejump/DoubleJumpMusic.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/doublejump/DoubleJumpMusic.java
new file mode 100644
index 000000000..afe57b17c
--- /dev/null
+++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/doublejump/DoubleJumpMusic.java
@@ -0,0 +1,85 @@
+package mineplex.core.gadget.gadgets.doublejump;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.bukkit.Location;
+import org.bukkit.Material;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.util.Vector;
+
+import mineplex.core.common.util.C;
+import mineplex.core.common.util.LineFormat;
+import mineplex.core.common.util.UtilParticle;
+import mineplex.core.common.util.UtilParticle.ParticleType;
+import mineplex.core.common.util.UtilParticle.ViewDist;
+import mineplex.core.common.util.UtilText;
+import mineplex.core.gadget.GadgetManager;
+import mineplex.core.gadget.types.DoubleJumpEffectGadget;
+import mineplex.core.updater.UpdateType;
+import mineplex.core.updater.event.UpdateEvent;
+
+public class DoubleJumpMusic extends DoubleJumpEffectGadget
+{
+
+ private Map _playerMap = new HashMap<>();
+
+ public DoubleJumpMusic(GadgetManager manager)
+ {
+ super(manager, "Musical Leap",
+ UtilText.splitLineToArray(C.cGray + "Take your leaps and dance moves to the next level with.", LineFormat.LORE),
+ 1, Material.GREEN_RECORD, (byte) 0);
+ }
+
+ @Override
+ public void doEffect(Player player)
+ {
+ _playerMap.put(player.getLocation(), System.currentTimeMillis() + 1250);
+ }
+
+ @EventHandler
+ public void onUpdate(UpdateEvent event)
+ {
+ if(event.getType() != UpdateType.TICK) return;
+
+ if(event.getTick()%2 == 1) return;
+
+ for(Iterator> it = _playerMap.entrySet().iterator(); it.hasNext();)
+ {
+ Entry e = it.next();
+ if(e.getValue() <= System.currentTimeMillis())
+ {
+ it.remove();
+ continue;
+ }
+
+ long diff = e.getValue()-System.currentTimeMillis();
+ double d = 1 - diff/1250.0;
+
+ int amount = 4;
+
+ double rad = Math.PI * 2 * d;
+
+
+ double step = Math.PI * 2;
+ step /= amount;
+
+ for(int i = 0; i < amount; i++)
+ {
+ double rad2 = rad + step * i;
+
+ double x = Math.sin(rad2) * d * 1.3;
+ double z = Math.cos(rad2) * d * 1.3;
+
+ Location loc = e.getKey().clone().add(x, 0, z);
+
+ UtilParticle.PlayParticleToAll(ParticleType.NOTE, loc, new Vector(d, 0, 0), 1, 0, ViewDist.NORMAL);
+
+ }
+ }
+ }
+
+}
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/doublejump/DoubleJumpShadow.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/doublejump/DoubleJumpShadow.java
new file mode 100644
index 000000000..620c10c7f
--- /dev/null
+++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/doublejump/DoubleJumpShadow.java
@@ -0,0 +1,30 @@
+package mineplex.core.gadget.gadgets.doublejump;
+
+import org.bukkit.Material;
+import org.bukkit.entity.Player;
+
+import mineplex.core.common.util.LineFormat;
+import mineplex.core.common.util.UtilParticle;
+import mineplex.core.common.util.UtilText;
+import mineplex.core.common.util.UtilParticle.ParticleType;
+import mineplex.core.common.util.UtilParticle.ViewDist;
+import mineplex.core.gadget.GadgetManager;
+import mineplex.core.gadget.types.DoubleJumpEffectGadget;
+
+public class DoubleJumpShadow extends DoubleJumpEffectGadget
+{
+
+ public DoubleJumpShadow(GadgetManager manager)
+ {
+ super(manager, "Shadow Leap",
+ UtilText.splitLineToArray("Lead out of the shadows", LineFormat.LORE),
+ 1, Material.COAL, (byte) 0);
+ }
+
+ @Override
+ public void doEffect(Player player)
+ {
+ UtilParticle.PlayParticleToAll(ParticleType.LARGE_SMOKE, player.getLocation(), 0.5f, 0.0f, 0.5f, 0, 20, ViewDist.LONG);
+ }
+
+}
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/doublejump/DoubleJumpStorm.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/doublejump/DoubleJumpStorm.java
new file mode 100644
index 000000000..52c1da360
--- /dev/null
+++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/doublejump/DoubleJumpStorm.java
@@ -0,0 +1,32 @@
+package mineplex.core.gadget.gadgets.doublejump;
+
+import org.bukkit.Material;
+import org.bukkit.entity.Player;
+
+import mineplex.core.common.util.C;
+import mineplex.core.common.util.LineFormat;
+import mineplex.core.common.util.UtilParticle;
+import mineplex.core.common.util.UtilText;
+import mineplex.core.common.util.UtilParticle.ParticleType;
+import mineplex.core.common.util.UtilParticle.ViewDist;
+import mineplex.core.gadget.GadgetManager;
+import mineplex.core.gadget.types.DoubleJumpEffectGadget;
+
+public class DoubleJumpStorm extends DoubleJumpEffectGadget
+{
+
+ public DoubleJumpStorm(GadgetManager manager)
+ {
+ super(manager, "Wet Leap",
+ UtilText.splitLineToArray(C.cGray + "Make a wet and sad leap. Perfekt for those off bridges.", LineFormat.LORE),
+ 1, Material.INK_SACK, (byte) 4);
+ }
+
+ @Override
+ public void doEffect(Player player)
+ {
+ UtilParticle.PlayParticleToAll(ParticleType.SPLASH, player.getLocation(), 0.4f, 0.3f, 0.4f, 1f, 160, ViewDist.NORMAL);
+ UtilParticle.PlayParticleToAll(ParticleType.CLOUD, player.getLocation(), 0.3f, 0.1f, 0.3f, 0.05f, 50, ViewDist.NORMAL);
+ }
+
+}
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleHelix.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleBlood.java
similarity index 97%
rename from Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleHelix.java
rename to Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleBlood.java
index 209bb0e33..3b45a3e5c 100644
--- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleHelix.java
+++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleBlood.java
@@ -16,10 +16,10 @@ import mineplex.core.gadget.types.ParticleGadget;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
-public class ParticleHelix extends ParticleGadget
+public class ParticleBlood extends ParticleGadget
{
- public ParticleHelix(GadgetManager manager)
+ public ParticleBlood(GadgetManager manager)
{
super(manager, "Blood Helix", UtilText.splitLineToArray(C.cGray + "Blood magic is very dangerous... but also very cool!", LineFormat.LORE),
-2, Material.REDSTONE, (byte) 0);
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleGreen.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleEmerald.java
similarity index 70%
rename from Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleGreen.java
rename to Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleEmerald.java
index 32b913b8c..af6af1dae 100644
--- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleGreen.java
+++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleEmerald.java
@@ -15,23 +15,36 @@ import mineplex.core.gadget.types.ParticleGadget;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
-public class ParticleGreen extends ParticleGadget
+public class ParticleEmerald extends ParticleGadget
{
- public ParticleGreen(GadgetManager manager)
+ public ParticleEmerald(GadgetManager manager)
{
- super(manager, "Green Ring",
+ super(manager, "Emerald Twirl",
UtilText.splitLineToArray(C.cGray + "With these sparkles, you can sparkle while sparkle with CaptainSparklez!", LineFormat.LORE),
- -2, Material.EMERALD, (byte) 0);
+ -2, Material.EMERALD, (byte) 0, "Green Ring");
}
public void playParticle(Player player, UpdateEvent event)
{
if (event.getType() != UpdateType.TICK) return;
- float x = (float) (Math.sin(player.getTicksLived() / 7d) * 1f);
- float z = (float) (Math.cos(player.getTicksLived() / 7d) * 1f);
- float y = (float) (Math.cos(player.getTicksLived() / 17d) * 1f + 1f);
+ int tick = player.getTicksLived();
+
+ float x = (float) (Math.sin(tick / 7d) * 1f);
+ float z = (float) (Math.cos(tick / 7d) * 1f);
+ float y = (float) (Math.cos(tick / 17d) * 1f + 1f);
+
+ UtilParticle.PlayParticle(ParticleType.HAPPY_VILLAGER, player.getLocation().add(x, y, z), 0f, 0f, 0f, 0, 1, ViewDist.NORMAL,
+ UtilServer.getPlayers());
+
+ if(getSet() == null || !getSet().isActive(player)) return;
+
+ tick += 17;
+ x = (float) (Math.sin(tick / 7d) * 1f);
+ z = (float) (Math.cos(tick / 7d) * 1f);
+ tick += 30;
+ y = (float) (Math.cos(tick / 17d) * 1f + 1f);
UtilParticle.PlayParticle(ParticleType.HAPPY_VILLAGER, player.getLocation().add(x, y, z), 0f, 0f, 0f, 0, 1, ViewDist.NORMAL,
UtilServer.getPlayers());
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleHeart.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleHeart.java
index be5926f2c..a55c4aee7 100644
--- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleHeart.java
+++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleHeart.java
@@ -1,8 +1,5 @@
package mineplex.core.gadget.gadgets.particle;
-import java.util.HashMap;
-
-import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
@@ -23,7 +20,6 @@ import mineplex.core.updater.event.UpdateEvent;
public class ParticleHeart extends ParticleGadget
{
- private HashMap> _target = new HashMap>();
public ParticleHeart(GadgetManager manager)
{
@@ -59,8 +55,5 @@ public class ParticleHeart extends ParticleGadget
public void quit(PlayerQuitEvent event)
{
}
-
- private void clean(Player player)
- {
- }
+
}
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleMusic.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleMusic.java
new file mode 100644
index 000000000..6291d04ac
--- /dev/null
+++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleMusic.java
@@ -0,0 +1,95 @@
+package mineplex.core.gadget.gadgets.particle;
+
+import org.bukkit.Bukkit;
+import org.bukkit.Location;
+import org.bukkit.Material;
+import org.bukkit.entity.Player;
+import org.bukkit.util.Vector;
+
+import mineplex.core.common.util.C;
+import mineplex.core.common.util.LineFormat;
+import mineplex.core.common.util.UtilParticle;
+import mineplex.core.common.util.UtilParticle.ParticleType;
+import mineplex.core.common.util.UtilParticle.ViewDist;
+import mineplex.core.common.util.UtilText;
+import mineplex.core.gadget.GadgetManager;
+import mineplex.core.gadget.types.ParticleGadget;
+import mineplex.core.updater.UpdateType;
+import mineplex.core.updater.event.UpdateEvent;
+
+public class ParticleMusic extends ParticleGadget
+{
+
+ public ParticleMusic(GadgetManager manager)
+ {
+ super(manager, "Music", UtilText.splitLineToArray(C.cAqua + "And the beat goes?", LineFormat.LORE), 1, Material.GREEN_RECORD, (byte) 0);
+ }
+
+ @Override
+ public void playParticle(Player player, UpdateEvent event)
+ {
+ boolean moving = Manager.isMoving(player);
+ UpdateType type = moving? UpdateType.FASTER : UpdateType.FAST;
+
+ if (event.getType() != type) return;
+
+// float[] ds = new float[]{0,5/25f,12/25f,24/25f};
+// float[] ds = new float[]{0,1/25f,2/25f,3/25f,4/25f,5/25f,6/25f,7/25f,8/25f,9/25f,10/25f,11/25f,12/25f,13/25f,14/25f,15/25f,16/25f,17/25f,18/25f,19/25f,20/25f,21/25f,22/25f,23/25f,24/25f};
+// float[] ds = new float[]{0};
+ float[] ds = new float[]{0.24f, 0.25f, 0.26f, 0.56f, 0.58f, 0.6f, 0.91f};
+
+ int index = Math.abs(event.getTick()%(ds.length*10)/10);
+ float d = ds[index];
+ double rad = Math.PI * 2 * (Math.abs(event.getTick()%(20*10)/(10*20d)));
+
+ int amount = 4;
+
+ double step = Math.PI * 2;
+ step /= amount;
+
+ double r = 1;
+
+ if (moving)
+ {
+ UtilParticle.PlayParticleToAll(ParticleType.NOTE, player.getLocation(), d, 0, 0, 1, 0, ViewDist.NORMAL);
+ return;
+ }
+
+ for (int a = 0; a < amount; a++)
+ {
+ double rad2 = rad + step * a;
+
+ double x = Math.sin(rad2) * r;
+ double y = 1 + (Math.sin(rad2 * 11) + Math.cos(rad2 * 13)) / 4.0;
+ double z = Math.cos(rad2) * r;
+
+
+ Location loc = player.getLocation().add(x, y, z);
+
+ UtilParticle.PlayParticleToAll(ParticleType.NOTE, loc, d, 0, 0, 1, 0, ViewDist.NORMAL);
+ }
+
+ if (getSet() != null && getSet().isActive(player))
+ {
+ double red = Math.sin(((float) d + 0.0F) * (float) Math.PI * 2.0F) * 0.65F + 0.35F;
+ double green = Math.sin(((float) d + 0.33333334F) * (float) Math.PI * 2.0F) * 0.65F + 0.35F;
+ double blue = Math.sin(((float) d + 0.6666667F) * (float) Math.PI * 2.0F) * 0.65F + 0.35F;
+
+ if(red == 0) red = 0.00001;
+
+ double step2 = Math.PI/12;
+ if(Manager.isMoving(player)) step2 = Math.PI/2;
+
+ for(double rad2 = 0; rad2 < Math.PI*2; rad2 += step2)
+ {
+ double x = Math.sin(rad2 + step) * r;
+ double z = Math.cos(rad2 + step) * r;
+
+ Location loc = player.getLocation().add(x, 1.25, z);
+ UtilParticle.PlayParticleToAll(ParticleType.RED_DUST, loc, new Vector(red, green, blue), 1, 0, ViewDist.NORMAL);
+ }
+ }
+
+ }
+
+}
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticlePartyTime.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticlePartyTime.java
index ee5d52df0..6d60de7ee 100644
--- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticlePartyTime.java
+++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticlePartyTime.java
@@ -52,7 +52,7 @@ public class ParticlePartyTime extends ParticleGadget
{
if(event.getType() != UpdateType.TICK) return;
- Location loc = player.getLocation().add(Math.random()*2-1, 3, Math.random()*2-1);
+ Location loc = player.getLocation().add(Math.random()*2-1, 2.3 + Math.random()*0.7, Math.random()*2-1);
List list = Arrays.asList(_data);
Collections.shuffle(list);
@@ -62,7 +62,9 @@ public class ParticlePartyTime extends ParticleGadget
if(Manager.isMoving(player)) {
UtilParticle.PlayParticleToAll(particle, player.getLocation().add(0, 1, 0), null, 0.08f, 1, ViewDist.NORMAL);
} else {
- UtilParticle.PlayParticleToAll(particle, loc, null, 0.08f, 10, ViewDist.NORMAL);
+ UtilParticle.PlayParticleToAll(particle, loc, null, 0.08f, 10, ViewDist.NORMAL);
+
+// if(UtilMath.r(10) == 0) loc.getWorld().playSound(loc, Sound.FIREWORK_BLAST, 0.1f, 1f);
}
}
@@ -86,8 +88,7 @@ public class ParticlePartyTime extends ParticleGadget
String particle = ParticleType.ICON_CRACK.getParticle(Material.INK_SACK, data);
UtilParticle.PlayParticleToAll(particle, spawnLoc, null, 0.08f, 30, ViewDist.NORMAL);
-
- spawnLoc.getWorld().playSound(spawnLoc, Sound.FIREWORK_LAUNCH, 0.05f, 0.4f);
+ loc.getWorld().playSound(loc, Sound.FIREWORK_BLAST, 0.1f, 1f);
}
}
}
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleWingsAngel.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleWingsAngel.java
new file mode 100644
index 000000000..b15aacac5
--- /dev/null
+++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleWingsAngel.java
@@ -0,0 +1,52 @@
+package mineplex.core.gadget.gadgets.particle;
+
+import org.bukkit.Location;
+import org.bukkit.Material;
+import org.bukkit.entity.Player;
+import org.bukkit.util.Vector;
+
+import mineplex.core.common.shape.ShapeWings;
+import mineplex.core.common.util.C;
+import mineplex.core.common.util.LineFormat;
+import mineplex.core.common.util.UtilParticle.ParticleType;
+import mineplex.core.common.util.UtilText;
+import mineplex.core.gadget.GadgetManager;
+import mineplex.core.gadget.types.ParticleGadget;
+import mineplex.core.updater.UpdateType;
+import mineplex.core.updater.event.UpdateEvent;
+
+public class ParticleWingsAngel extends ParticleGadget
+{
+
+ private ShapeWings _wings = new ShapeWings(ParticleType.RED_DUST.particleName, new Vector(1,1,1), 1, 0, false);
+ private ShapeWings _wingsEdge = new ShapeWings(ParticleType.RED_DUST.particleName, new Vector(1,1,0.5), 1, 0, true);
+
+ public ParticleWingsAngel(GadgetManager manager)
+ {
+ super(manager, "Angle Wings",
+ UtilText.splitLineToArray(C.cGray + "The wings of the angelic creature, made of long, soft feathers like the fur of a polar bear, thick and so soft it feels like a cloud. They are whiter than a soft coloured cloud on a bleating summers day, so white that a pure glow seems to emit from them.", LineFormat.LORE),
+ 1, Material.NETHER_STAR, (byte) 0);
+ }
+
+ @Override
+ public void playParticle(Player player, UpdateEvent event)
+ {
+
+ Location loc = player.getLocation().add(0, 1.2, 0).add(player.getLocation().getDirection().multiply(-0.2));
+ if (Manager.isMoving(player))
+ {
+ if (event.getType() == UpdateType.TICK)
+ {
+ _wings.displayParticle(loc);
+ _wingsEdge.displayParticle(loc);
+ }
+ return;
+ }
+
+ if (event.getType() == UpdateType.FAST) _wings.display(loc);
+ if (event.getType() == UpdateType.FAST) _wingsEdge.display(loc);
+
+
+ }
+
+}
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleDemonsWings.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleWingsDemons.java
similarity index 65%
rename from Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleDemonsWings.java
rename to Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleWingsDemons.java
index 671831aa3..fa08f1823 100644
--- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleDemonsWings.java
+++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleWingsDemons.java
@@ -3,6 +3,7 @@ package mineplex.core.gadget.gadgets.particle;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.entity.Player;
+import org.bukkit.util.Vector;
import mineplex.core.common.shape.ShapeWings;
import mineplex.core.common.util.C;
@@ -16,15 +17,16 @@ import mineplex.core.gadget.types.ParticleGadget;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
-public class ParticleDemonsWings extends ParticleGadget
+public class ParticleWingsDemons extends ParticleGadget
{
- private ShapeWings _wings = new ShapeWings(ParticleType.RED_DUST.particleName, null, 0, 0);
+ private ShapeWings _wings = new ShapeWings(ParticleType.SMOKE.particleName, new Vector(0,-0.03,0), 1, 0, false);
- public ParticleDemonsWings(GadgetManager manager)
+ public ParticleWingsDemons(GadgetManager manager)
{
- super(manager, "Demon Wings", UtilText.splitLineToArray(C.cGray + "Even the shadows can't hide you from the demons", LineFormat.LORE), 1,
- Material.COAL, (byte) 1);
+ super(manager, "Demon Wings",
+ UtilText.splitLineToArray(C.cGray + "Even the shadows can't hide you from the demons", LineFormat.LORE),
+ 1, Material.COAL, (byte) 1);
}
@Override
@@ -35,7 +37,7 @@ public class ParticleDemonsWings extends ParticleGadget
if (Manager.isMoving(player))
{
if (event.getType() == UpdateType.FASTEST)
- UtilParticle.PlayParticleToAll(ParticleType.RED_DUST, loc, 0.3f, 0.3f, 0.3f, 0, 10, ViewDist.NORMAL);
+ UtilParticle.PlayParticleToAll(ParticleType.SMOKE, loc, 0.3f, 0.2f, 0.3f, 0, 10, ViewDist.NORMAL);
return;
}
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleWingsInfernal.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleWingsInfernal.java
new file mode 100644
index 000000000..c67838dee
--- /dev/null
+++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleWingsInfernal.java
@@ -0,0 +1,52 @@
+package mineplex.core.gadget.gadgets.particle;
+
+import org.bukkit.Location;
+import org.bukkit.Material;
+import org.bukkit.entity.Player;
+import org.bukkit.util.Vector;
+
+import mineplex.core.common.shape.ShapeWings;
+import mineplex.core.common.util.C;
+import mineplex.core.common.util.LineFormat;
+import mineplex.core.common.util.UtilParticle.ParticleType;
+import mineplex.core.common.util.UtilText;
+import mineplex.core.gadget.GadgetManager;
+import mineplex.core.gadget.types.ParticleGadget;
+import mineplex.core.updater.UpdateType;
+import mineplex.core.updater.event.UpdateEvent;
+
+public class ParticleWingsInfernal extends ParticleGadget
+{
+
+ private ShapeWings _wings = new ShapeWings(ParticleType.RED_DUST.particleName, new Vector(1,0,0), 1, 0, false);
+ private ShapeWings _wingsEdge = new ShapeWings(ParticleType.RED_DUST.particleName, new Vector(1,0.6,0), 1, 0, true);
+
+ public ParticleWingsInfernal(GadgetManager manager)
+ {
+ super(manager, "Infernal Wings", UtilText.splitLineToArray(C.cGray + "The wings of the angelic creature, made of long, soft feathers like the fur of a polar bear, thick and so soft it feels like a cloud. They are whiter than a soft coloured cloud on a bleating summers day, so white that a pure glow seems to emit from them.", LineFormat.LORE),
+ 1, Material.MAGMA_CREAM, (byte) 0);
+ }
+
+ @Override
+ public void playParticle(Player player, UpdateEvent event)
+ {
+
+ Location loc = player.getLocation().add(0, 1.2, 0).add(player.getLocation().getDirection().multiply(-0.2));
+ if (Manager.isMoving(player))
+ {
+ if (event.getType() == UpdateType.TICK)
+ {
+ _wings.displayParticle(loc);
+ _wingsEdge.displayParticle(loc);
+ }
+ return;
+ }
+
+ _wings = new ShapeWings(ParticleType.RED_DUST.particleName, new Vector(1,0,0), 1, 0, false);
+ _wingsEdge = new ShapeWings(ParticleType.RED_DUST.particleName, new Vector(1,0.6,0), 1, 0, true);
+
+ if (event.getType() == UpdateType.FAST) _wings.display(loc);
+ if (event.getType() == UpdateType.FAST) _wingsEdge.display(loc);
+ }
+
+}
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleWingsPixie.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleWingsPixie.java
new file mode 100644
index 000000000..7ae457a07
--- /dev/null
+++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleWingsPixie.java
@@ -0,0 +1,51 @@
+package mineplex.core.gadget.gadgets.particle;
+
+import org.bukkit.Location;
+import org.bukkit.Material;
+import org.bukkit.entity.Player;
+import org.bukkit.util.Vector;
+
+import mineplex.core.common.shape.ShapeWings;
+import mineplex.core.common.util.C;
+import mineplex.core.common.util.LineFormat;
+import mineplex.core.common.util.UtilParticle.ParticleType;
+import mineplex.core.common.util.UtilText;
+import mineplex.core.gadget.GadgetManager;
+import mineplex.core.gadget.types.ParticleGadget;
+import mineplex.core.updater.UpdateType;
+import mineplex.core.updater.event.UpdateEvent;
+
+public class ParticleWingsPixie extends ParticleGadget
+{
+
+ private ShapeWings _wings = new ShapeWings(ParticleType.RED_DUST.particleName, new Vector(1/300d,1,1), 1, 0, false);
+ private ShapeWings _wingsEdge = new ShapeWings(ParticleType.RED_DUST.particleName, new Vector(1,105/255d,180/255d), 1, 0, true);
+
+ public ParticleWingsPixie(GadgetManager manager)
+ {
+ super(manager, "Pixie Wings", UtilText.splitLineToArray(C.cGray + "Pixie Wings. Much blue. Little Pink.", LineFormat.LORE),
+ 1, Material.INK_SACK, (byte) 12);
+ }
+
+ @Override
+ public void playParticle(Player player, UpdateEvent event)
+ {
+
+ Location loc = player.getLocation().add(0, 1.2, 0).add(player.getLocation().getDirection().multiply(-0.2));
+ if (Manager.isMoving(player))
+ {
+ if (event.getType() == UpdateType.TICK)
+ {
+ _wings.displayParticle(loc);
+ _wingsEdge.displayParticle(loc);
+ }
+ return;
+ }
+
+ if (event.getType() == UpdateType.FAST) _wings.display(loc);
+ if (event.getType() == UpdateType.FAST) _wingsEdge.display(loc);
+
+
+ }
+
+}
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleYinYang.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleYinYang.java
new file mode 100644
index 000000000..ee511b6fb
--- /dev/null
+++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleYinYang.java
@@ -0,0 +1,70 @@
+package mineplex.core.gadget.gadgets.particle;
+
+import org.bukkit.Location;
+import org.bukkit.Material;
+import org.bukkit.entity.Player;
+import org.bukkit.util.Vector;
+
+import mineplex.core.common.util.LineFormat;
+import mineplex.core.common.util.UtilParticle;
+import mineplex.core.common.util.UtilParticle.ParticleType;
+import mineplex.core.common.util.UtilParticle.ViewDist;
+import mineplex.core.common.util.UtilText;
+import mineplex.core.gadget.GadgetManager;
+import mineplex.core.gadget.types.ParticleGadget;
+import mineplex.core.recharge.Recharge;
+import mineplex.core.recharge.RechargeData;
+import mineplex.core.updater.UpdateType;
+import mineplex.core.updater.event.UpdateEvent;
+import net.md_5.bungee.api.ChatColor;
+import net.minecraft.server.v1_8_R3.MathHelper;
+
+public class ParticleYinYang extends ParticleGadget
+{
+
+ public ParticleYinYang(GadgetManager manager)
+ {
+ super(manager, "Yin and Yang",
+ UtilText.splitLineToArray(ChatColor.GRAY + "Keeping the cosmos in balance since 800 B.C.", LineFormat.LORE),
+ 1, Material.RECORD_9, (byte) 0);
+ }
+
+ @Override
+ public void playParticle(Player player, UpdateEvent event)
+ {
+ if(event.getType() != UpdateType.TICK) return;
+
+ float step = (float) (Math.PI/30);
+ step *= event.getTick()%60;
+
+ float x = MathHelper.sin(step)*0.3f;
+ float y = 0;
+ float z = MathHelper.cos(step)*0.3f;
+
+ Location loc = player.getLocation().add(0, 0.2, 0);
+
+ RechargeData r = Recharge.Instance.Get(player).get("Yin and Yang Move");
+
+ if(Manager.isMoving(player))
+ {
+ long time = 50;
+ if(r != null)
+ {
+ time = Math.min(1000, r.GetRemaining() + 200);
+ }
+ Recharge.Instance.useForce(player, "Yin and Yang Move", time);
+ }
+
+ if(r != null) {
+ float d = r.GetRemaining()/1000f;
+ y = 0.3f * d;
+ x *= 0.1 + ((1-d) * 0.9);
+ z *= 0.1 + ((1-d) * 0.9);
+ }
+
+ UtilParticle.PlayParticleToAll(ParticleType.FIREWORKS_SPARK, loc, new Vector(x, y, z), 1, 0, ViewDist.NORMAL);
+ UtilParticle.PlayParticleToAll(ParticleType.FIREWORKS_SPARK, loc, new Vector(-x, y, -z), 1, 0, ViewDist.NORMAL);
+
+ }
+
+}
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/set/SetBlood.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/set/SetBlood.java
new file mode 100644
index 000000000..70ebf29f2
--- /dev/null
+++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/set/SetBlood.java
@@ -0,0 +1,23 @@
+package mineplex.core.gadget.set;
+
+import mineplex.core.gadget.GadgetManager;
+import mineplex.core.gadget.gadgets.arrowtrail.ArrowTrailBlood;
+import mineplex.core.gadget.gadgets.death.DeathBlood;
+import mineplex.core.gadget.gadgets.doublejump.DoubleJumpBlood;
+import mineplex.core.gadget.gadgets.particle.ParticleBlood;
+import mineplex.core.gadget.types.Gadget;
+import mineplex.core.gadget.types.GadgetSet;
+
+public class SetBlood extends GadgetSet
+{
+
+ public SetBlood(GadgetManager manager)
+ {
+ super(manager, "The Vampire Set 2000", "Improves ???",
+ manager.getGadget(ArrowTrailBlood.class),
+ manager.getGadget(DeathBlood.class),
+ manager.getGadget(DoubleJumpBlood.class),
+ manager.getGadget(ParticleBlood.class));
+ }
+
+}
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/set/SetEmerald.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/set/SetEmerald.java
new file mode 100644
index 000000000..7977c1956
--- /dev/null
+++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/set/SetEmerald.java
@@ -0,0 +1,22 @@
+package mineplex.core.gadget.set;
+
+import mineplex.core.gadget.GadgetManager;
+import mineplex.core.gadget.gadgets.arrowtrail.ArrowTrailEmerald;
+import mineplex.core.gadget.gadgets.death.DeathEmerald;
+import mineplex.core.gadget.gadgets.doublejump.DoubleJumpEmerald;
+import mineplex.core.gadget.gadgets.particle.ParticleEmerald;
+import mineplex.core.gadget.types.GadgetSet;
+
+public class SetEmerald extends GadgetSet
+{
+
+ public SetEmerald(GadgetManager manager)
+ {
+ super(manager, "Emerald", "Improved Emerald Twirl",
+ manager.getGadget(ParticleEmerald.class),
+ manager.getGadget(ArrowTrailEmerald.class),
+ manager.getGadget(DeathEmerald.class),
+ manager.getGadget(DoubleJumpEmerald.class));
+ }
+
+}
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/set/SetEnchant.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/set/SetEnchant.java
new file mode 100644
index 000000000..ba996950c
--- /dev/null
+++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/set/SetEnchant.java
@@ -0,0 +1,22 @@
+package mineplex.core.gadget.set;
+
+import mineplex.core.gadget.GadgetManager;
+import mineplex.core.gadget.gadgets.arrowtrail.ArrowTrailEnchant;
+import mineplex.core.gadget.gadgets.death.DeathEnchant;
+import mineplex.core.gadget.gadgets.doublejump.DoubleJumpEnchant;
+import mineplex.core.gadget.gadgets.particle.ParticleEnchant;
+import mineplex.core.gadget.types.GadgetSet;
+
+public class SetEnchant extends GadgetSet
+{
+
+ public SetEnchant(GadgetManager manager)
+ {
+ super(manager, "Set of Wisdom", "Improves ???",
+ manager.getGadget(ArrowTrailEnchant.class),
+ manager.getGadget(DeathEnchant.class),
+ manager.getGadget(DoubleJumpEnchant.class),
+ manager.getGadget(ParticleEnchant.class));
+ }
+
+}
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/set/SetMusic.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/set/SetMusic.java
new file mode 100644
index 000000000..1821409be
--- /dev/null
+++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/set/SetMusic.java
@@ -0,0 +1,22 @@
+package mineplex.core.gadget.set;
+
+import mineplex.core.gadget.GadgetManager;
+import mineplex.core.gadget.gadgets.arrowtrail.ArrowTrailMusic;
+import mineplex.core.gadget.gadgets.death.DeathMusic;
+import mineplex.core.gadget.gadgets.doublejump.DoubleJumpMusic;
+import mineplex.core.gadget.gadgets.particle.ParticleMusic;
+import mineplex.core.gadget.types.GadgetSet;
+
+public class SetMusic extends GadgetSet
+{
+
+ public SetMusic(GadgetManager manager)
+ {
+ super(manager, "Ultimate Music Collection Set", "Improves Particle",
+ manager.getGadget(ArrowTrailMusic.class),
+ manager.getGadget(DeathMusic.class),
+ manager.getGadget(DoubleJumpMusic.class),
+ manager.getGadget(ParticleMusic.class));
+ }
+
+}
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/set/SetShadow.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/set/SetShadow.java
new file mode 100644
index 000000000..22a988d5e
--- /dev/null
+++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/set/SetShadow.java
@@ -0,0 +1,22 @@
+package mineplex.core.gadget.set;
+
+import mineplex.core.gadget.GadgetManager;
+import mineplex.core.gadget.gadgets.arrowtrail.ArrowTrailShadow;
+import mineplex.core.gadget.gadgets.death.DeathShadow;
+import mineplex.core.gadget.gadgets.doublejump.DoubleJumpShadow;
+import mineplex.core.gadget.gadgets.particle.ParticleFoot;
+import mineplex.core.gadget.types.GadgetSet;
+
+public class SetShadow extends GadgetSet
+{
+
+ public SetShadow(GadgetManager manager)
+ {
+ super(manager, "Shadow Set", "Improves arrow ???",
+ manager.getGadget(ArrowTrailShadow.class),
+ manager.getGadget(DeathShadow.class),
+ manager.getGadget(DoubleJumpShadow.class),
+ manager.getGadget(ParticleFoot.class));
+ }
+
+}
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/set/SetStorm.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/set/SetStorm.java
new file mode 100644
index 000000000..d49518062
--- /dev/null
+++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/set/SetStorm.java
@@ -0,0 +1,23 @@
+package mineplex.core.gadget.set;
+
+import mineplex.core.gadget.GadgetManager;
+import mineplex.core.gadget.gadgets.arrowtrail.ArrowTrailStorm;
+import mineplex.core.gadget.gadgets.death.DeathStorm;
+import mineplex.core.gadget.gadgets.doublejump.DoubleJumpStorm;
+import mineplex.core.gadget.gadgets.particle.ParticleRain;
+import mineplex.core.gadget.types.Gadget;
+import mineplex.core.gadget.types.GadgetSet;
+
+public class SetStorm extends GadgetSet
+{
+
+ public SetStorm(GadgetManager manager)
+ {
+ super(manager, "Set of the Howling Winds", "Improves ???",
+ manager.getGadget(ArrowTrailStorm.class),
+ manager.getGadget(DeathStorm.class),
+ manager.getGadget(DoubleJumpStorm.class),
+ manager.getGadget(ParticleRain.class));
+ }
+
+}