Mineplex/GOD DAMN COSMETICS/gadget/gadgets/arrowtrail/ArrowTrailRainbow.java

86 lines
2.3 KiB
Java
Raw Normal View History

package mineplex.core.gadget.gadgets.arrowtrail;
import java.util.HashMap;
import java.util.Map;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.entity.Arrow;
import org.bukkit.entity.Player;
import mineplex.core.achievement.AchievementManager;
import mineplex.core.common.util.UtilAlg;
import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilParticle.ParticleType;
import mineplex.core.common.util.particles.ColoredParticle;
import mineplex.core.common.util.particles.DustSpellColor;
import mineplex.core.gadget.GadgetManager;
import mineplex.core.gadget.set.SetRainbow;
import mineplex.core.gadget.types.ArrowEffectGadget;
import mineplex.core.gadget.util.CostConstants;
import mineplex.core.particleeffects.BabyFireworkEffect;
public class ArrowTrailRainbow extends ArrowEffectGadget
{
private final AchievementManager _achievementManager;
private final Map<Player, Integer> _rings;
public ArrowTrailRainbow(GadgetManager manager, AchievementManager achievementManager)
{
super(manager, "Rainbow Arrows", SetRainbow.GADGET_LORE, CostConstants.NO_LORE, Material.WOOL, (byte) (UtilMath.r(14) + 1));
_achievementManager = achievementManager;
_rings = new HashMap<>();
}
@Override
public void enableCustom(Player player, boolean message)
{
super.enableCustom(player, message);
int size = Math.min(SetRainbow.PER_LEVEL, 1 + _achievementManager.getMineplexLevelNumber(player) / SetRainbow.PER_LEVEL);
_rings.put(player, size);
}
@Override
public void disableCustom(Player player, boolean message)
{
super.disableCustom(player, message);
_rings.remove(player);
}
@Override
public void doTrail(Arrow arrow)
{
Player shooter = (Player) arrow.getShooter();
int rings = _rings.get(shooter);
for (int i = 0; i < rings; i++)
{
DustSpellColor colour = SetRainbow.COLOURS[i];
new ColoredParticle(ParticleType.RED_DUST, colour, UtilAlg.getRandomLocation(arrow.getLocation(), 0.2))
.display();
}
}
@Override
public void doHitEffect(Arrow arrow)
{
Player shooter = (Player) arrow.getShooter();
Location location = arrow.getLocation();
int rings = _rings.get(shooter);
for (int i = 0; i < rings; i++)
{
DustSpellColor colour = SetRainbow.COLOURS[i];
new BabyFireworkEffect(UtilAlg.getRandomLocation(location, 1, 0.5, 1), colour.toAwtColor())
.start();
}
}
}