Payload (OITQ)
This commit is contained in:
parent
9454e1f409
commit
7a3ce9813c
@ -0,0 +1,111 @@
|
||||
package mineplex.core.common.util.particles.effects;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import mineplex.core.common.util.UtilAlg;
|
||||
import mineplex.core.common.util.UtilBlock;
|
||||
import mineplex.core.common.util.UtilParticle;
|
||||
import mineplex.core.common.util.UtilParticle.ParticleType;
|
||||
import mineplex.core.common.util.UtilParticle.ViewDist;
|
||||
|
||||
/**
|
||||
* Creates a line of particles with customise able traits.
|
||||
*
|
||||
* Most noticeable with Blink skills.
|
||||
*/
|
||||
public class LineParticle
|
||||
{
|
||||
|
||||
private Location _start;
|
||||
private Vector _direction;
|
||||
private Location _lastLocation;
|
||||
|
||||
private double _curRange;
|
||||
private double _incrementedRange;
|
||||
private double _maxRange;
|
||||
private double _actualRange;
|
||||
|
||||
private Set<Material> _ignoredTypes;
|
||||
|
||||
private ParticleType _particleType;
|
||||
private Player[] _toDisplay;
|
||||
|
||||
public LineParticle(Location start, Vector direction, double incrementedRange, double maxRange, Set<Material> ignoredTypes, ParticleType particleType, Player... toDisplay)
|
||||
{
|
||||
this(start, null, direction, incrementedRange, maxRange, ignoredTypes, particleType, toDisplay);
|
||||
}
|
||||
|
||||
public LineParticle(Location start, Location end, Vector direction, double incrementedRange, double maxRange, Set<Material> ignoredTypes, ParticleType particleType, Player... toDisplay)
|
||||
{
|
||||
_start = start;
|
||||
_direction = direction;
|
||||
_lastLocation = start;
|
||||
|
||||
_curRange = 0;
|
||||
_incrementedRange = incrementedRange;
|
||||
_maxRange = maxRange;
|
||||
_ignoredTypes = ignoredTypes;
|
||||
|
||||
_particleType = particleType;
|
||||
_toDisplay = toDisplay;
|
||||
|
||||
if (_direction == null)
|
||||
{
|
||||
direction = UtilAlg.getTrajectory(start, end).normalize();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Advances the line.
|
||||
*
|
||||
* @return true when the line has reached its target or has collided with a
|
||||
* block with a type contained in _ignoredTypes.
|
||||
*/
|
||||
public boolean update()
|
||||
{
|
||||
boolean done = _curRange > _maxRange;
|
||||
|
||||
Location newTarget = _start.clone().add(new Vector(0, 0.2, 0)).add(_direction.clone().multiply(_curRange));
|
||||
_lastLocation = newTarget;
|
||||
|
||||
if (!UtilBlock.airFoliage(newTarget.getBlock()) || !UtilBlock.airFoliage(newTarget.getBlock().getRelative(BlockFace.UP)))
|
||||
{
|
||||
if (_ignoredTypes == null)
|
||||
{
|
||||
done = true;
|
||||
}
|
||||
|
||||
if (!_ignoredTypes.contains(newTarget.getBlock().getType()))
|
||||
{
|
||||
done = true;
|
||||
}
|
||||
}
|
||||
|
||||
_curRange += _incrementedRange;
|
||||
|
||||
UtilParticle.PlayParticle(_particleType, newTarget, 0, 0, 0, 0.001F, 1, ViewDist.LONG, _toDisplay);
|
||||
|
||||
if (done)
|
||||
{
|
||||
_actualRange = _curRange;
|
||||
}
|
||||
|
||||
return done;
|
||||
}
|
||||
|
||||
public Location getLastLocation()
|
||||
{
|
||||
return _lastLocation;
|
||||
}
|
||||
|
||||
public Location getDestination()
|
||||
{
|
||||
return _start.add(_direction.multiply(Math.max(0, _actualRange - 0.4)).add(new Vector(0, 0.4, 0)));
|
||||
}
|
||||
}
|
@ -1,13 +1,21 @@
|
||||
package mineplex.core.common.util;
|
||||
package mineplex.core.common.util.particles.effects;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import mineplex.core.common.util.UtilAlg;
|
||||
import mineplex.core.common.util.UtilMath;
|
||||
import mineplex.core.common.util.UtilParticle;
|
||||
import mineplex.core.common.util.UtilParticle.ParticleType;
|
||||
import mineplex.core.common.util.UtilParticle.ViewDist;
|
||||
|
||||
/**
|
||||
* Creates a particle curve that bends towards a location.
|
||||
*
|
||||
* Most noticeable in Gladiators and TOITQ.
|
||||
*/
|
||||
public class ObjectiveParticle
|
||||
{
|
||||
|
||||
@ -32,7 +40,8 @@ public class ObjectiveParticle
|
||||
this(start, startVector, target, 0.15F, 0.5F, 0.03F, 3, ParticleType.HAPPY_VILLAGER, 0.2F, 3F, Sound.FIZZ, 4, toDisplay);
|
||||
}
|
||||
|
||||
public ObjectiveParticle(Location start, Vector startVector, Location target, float turnMutlipler, float blocksToAdvance, float particleOffset, int particleCount, ParticleType particleType, float soundVolume, float soundPitch, Sound sound, double stopAtDistance, Player... toDisplay)
|
||||
public ObjectiveParticle(Location start, Vector startVector, Location target, float turnMutlipler, float blocksToAdvance, float particleOffset, int particleCount, ParticleType particleType,
|
||||
float soundVolume, float soundPitch, Sound sound, double stopAtDistance, Player... toDisplay)
|
||||
{
|
||||
_current = start;
|
||||
_target = target;
|
||||
@ -56,6 +65,12 @@ public class ObjectiveParticle
|
||||
_direction.normalize();
|
||||
}
|
||||
|
||||
/**
|
||||
* Advances the curve.
|
||||
*
|
||||
* @return true when the curve is within _stopAtDistance blocks of the
|
||||
* target.
|
||||
*/
|
||||
public boolean update()
|
||||
{
|
||||
_direction.add(UtilAlg.getTrajectory(_current, _target).multiply(_turnMultipler));
|
||||
@ -65,7 +80,10 @@ public class ObjectiveParticle
|
||||
|
||||
UtilParticle.PlayParticle(_particleType, _current, _particleOffset, _particleOffset, _particleOffset, 0, _particleCount, ViewDist.LONG, _toDisplay);
|
||||
|
||||
_current.getWorld().playSound(_current, _sound, _soundVolume, _soundPitch);
|
||||
for (Player player : _toDisplay)
|
||||
{
|
||||
player.playSound(_current, _sound, _soundVolume, _soundPitch);
|
||||
}
|
||||
|
||||
return UtilMath.offset(_current, _target) < _stopAtDistance;
|
||||
}
|
@ -38,7 +38,6 @@ import org.bukkit.util.Vector;
|
||||
import mineplex.core.common.MinecraftVersion;
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.F;
|
||||
import mineplex.core.common.util.ObjectiveParticle;
|
||||
import mineplex.core.common.util.UtilAction;
|
||||
import mineplex.core.common.util.UtilAlg;
|
||||
import mineplex.core.common.util.UtilItem;
|
||||
@ -52,7 +51,7 @@ import mineplex.core.common.util.UtilTextBottom;
|
||||
import mineplex.core.common.util.UtilTextMiddle;
|
||||
import mineplex.core.common.util.UtilTextTop;
|
||||
import mineplex.core.common.util.UtilTime;
|
||||
import mineplex.core.hologram.Hologram;
|
||||
import mineplex.core.common.util.particles.effects.ObjectiveParticle;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
import mineplex.minecraft.game.core.combat.CombatComponent;
|
||||
@ -99,7 +98,7 @@ public class QuiverPayload extends TeamGame
|
||||
|
||||
private static final long POWERUP_SPAWN_DELAY = 20000;
|
||||
|
||||
private static final int RESPAWN_INITAL_SECONDS = 5;
|
||||
private static final int RESPAWN_INITAL_SECONDS = 2;
|
||||
private static final int RESPAWN_ARROW_GIVE_DELAY = 20;
|
||||
|
||||
private static final int END_EFFECT_DELAY = 100;
|
||||
@ -109,6 +108,7 @@ public class QuiverPayload extends TeamGame
|
||||
|
||||
private static final long KILLSTREAK_TIME_PERIOD = 1500;
|
||||
private static final long TEAM_KILL_MINIMUM_DELAY = 20000;
|
||||
private static final int TEAM_KILL_MINIMUM_PLAYERS = 6;
|
||||
|
||||
private static final long OBJECTIVE_PARTICLES_TIME = 10000;
|
||||
|
||||
@ -121,7 +121,6 @@ public class QuiverPayload extends TeamGame
|
||||
public static final String DATA_POINT_KIT_BLUE = "LIGHT_BLUE";
|
||||
|
||||
private Minecart _minecart;
|
||||
private Hologram _hologram;
|
||||
private GameTeam _teamDirection;
|
||||
private int _targetIndex;
|
||||
private boolean _hasMoved;
|
||||
@ -223,7 +222,7 @@ public class QuiverPayload extends TeamGame
|
||||
|
||||
for (GameTeam gameTeam : _teamScore.keySet())
|
||||
{
|
||||
int score = _teamScore.get(gameTeam);
|
||||
int score = Math.min(_teamScore.get(gameTeam), MAX_SCORE);
|
||||
|
||||
Scoreboard.write(gameTeam.GetColor() + C.Bold + "Team " + gameTeam.getDisplayName());
|
||||
Scoreboard.write(score + " Point" + (score == 1 ? "" : "s") + " (" + (MAX_SCORE - score) + ")");
|
||||
@ -269,12 +268,9 @@ public class QuiverPayload extends TeamGame
|
||||
Location location = WorldData.GetDataLocs(DATA_POINT_PAYLOAD).get(0);
|
||||
|
||||
_minecart = location.getWorld().spawn(location, Minecart.class);
|
||||
_hologram = new Hologram(Manager.getHologramManager(), location.add(0, 1, 0), "None");
|
||||
|
||||
_minecart.spigot().forceGlowing(true);
|
||||
_minecart.setDisplayBlock(new MaterialData(Material.TNT));
|
||||
_hologram.setFollowEntity(_minecart);
|
||||
_hologram.start();
|
||||
_payloadTeam.addEntry(_minecart.getUniqueId().toString());
|
||||
|
||||
for (Player player : GetPlayers(true))
|
||||
@ -389,7 +385,7 @@ public class QuiverPayload extends TeamGame
|
||||
return;
|
||||
}
|
||||
|
||||
if (event.getType() == UpdateType.MIN_01)
|
||||
if (event.getType() == UpdateType.MIN_02)
|
||||
{
|
||||
this.DeathSpectateSecs++;
|
||||
}
|
||||
@ -553,6 +549,8 @@ public class QuiverPayload extends TeamGame
|
||||
}
|
||||
|
||||
if (event.getType() == UpdateType.FAST)
|
||||
{
|
||||
if (GetPlayers(true).size() >= TEAM_KILL_MINIMUM_PLAYERS)
|
||||
{
|
||||
for (GameTeam gameTeam : GetTeamList())
|
||||
{
|
||||
@ -581,6 +579,7 @@ public class QuiverPayload extends TeamGame
|
||||
_lastTeamKill = System.currentTimeMillis();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (Player player : UtilServer.getPlayers())
|
||||
{
|
||||
@ -695,12 +694,10 @@ public class QuiverPayload extends TeamGame
|
||||
if (gameTeamACount > 0 && gameTeamBCount > 0)
|
||||
{
|
||||
_payloadState = PayloadState.CONTESTED;
|
||||
_hologram.setText(C.cDPurpleB + "Contested");
|
||||
}
|
||||
else
|
||||
{
|
||||
_payloadState = PayloadState.NONE;
|
||||
_hologram.setText("None");
|
||||
}
|
||||
|
||||
setMinecartTeam(_payloadState);
|
||||
@ -746,7 +743,6 @@ public class QuiverPayload extends TeamGame
|
||||
|
||||
_minecart.setVelocity(UtilAlg.getTrajectory(_minecart.getLocation(), _pathMarkers.get(_targetIndex)).normalize().multiply(PAYLOAD_VELOCITY));
|
||||
_hasMoved = true;
|
||||
_hologram.setText(_teamDirection.GetFormattedName());
|
||||
}
|
||||
|
||||
if (event.getType() == UpdateType.FASTER && _payloadState.equals(PayloadState.RESTARTING))
|
||||
@ -884,11 +880,13 @@ public class QuiverPayload extends TeamGame
|
||||
_recentlyChanged = false;
|
||||
UtilAction.zeroVelocity(_minecart);
|
||||
|
||||
if (_teamScore.get(_teamDirection) < MAX_SCORE)
|
||||
{
|
||||
String message = WinnerTeam.GetFormattedName() + " scored a point! Payload respawning...";
|
||||
|
||||
UtilTextMiddle.display("", message, 10, 20, 10);
|
||||
UtilServer.broadcast(message);
|
||||
|
||||
}
|
||||
displayPointScoreEffect();
|
||||
|
||||
for (Player player : UtilServer.getPlayers())
|
||||
@ -1073,7 +1071,7 @@ public class QuiverPayload extends TeamGame
|
||||
}
|
||||
|
||||
Player player = event.getPlayer();
|
||||
Kit kit = GetKit(player);
|
||||
ProgressingKit kit = (ProgressingKit) GetKit(player);
|
||||
|
||||
if (!event.isSneaking())
|
||||
{
|
||||
@ -1090,23 +1088,26 @@ public class QuiverPayload extends TeamGame
|
||||
return;
|
||||
}
|
||||
|
||||
for (Perk perk : kit.GetPerks())
|
||||
for (Perk perk : kit.getPerks()[kit.getUpgradeLevel(player.getUniqueId())])
|
||||
{
|
||||
if (perk instanceof Ultimate)
|
||||
{
|
||||
Ultimate ultimate = (Ultimate) perk;
|
||||
|
||||
if (ultimate.isUsable(player))
|
||||
{
|
||||
ultimate.activate(player);
|
||||
resetUltimate(player, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void incrementUltimate(Player player, double percentage)
|
||||
{
|
||||
Kit kit = GetKit(player);
|
||||
ProgressingKit kit = (ProgressingKit) GetKit(player);
|
||||
|
||||
for (Perk perk : kit.GetPerks())
|
||||
for (Perk perk : kit.getPerks()[kit.getUpgradeLevel(player.getUniqueId())])
|
||||
{
|
||||
if (perk instanceof Ultimate)
|
||||
{
|
||||
|
@ -38,32 +38,32 @@ public class KitNecromancer extends ProgressingKit
|
||||
private static final Perk[][] PERKS = {
|
||||
{
|
||||
new PerkDoubleJump(DOUBLE_JUMP, 0.9, 0.9, true),
|
||||
new PerkLifestealArrows(4),
|
||||
new PerkLifestealArrows(8),
|
||||
new UltimateNecromancer(10000, 3)
|
||||
},
|
||||
{
|
||||
new PerkDoubleJump(DOUBLE_JUMP, 0.9, 0.9, true),
|
||||
new PerkLifestealArrows(4),
|
||||
new PerkLifestealArrows(8),
|
||||
new UltimateNecromancer(10500, 3)
|
||||
},
|
||||
{
|
||||
new PerkDoubleJump(DOUBLE_JUMP, 0.9, 0.9, true),
|
||||
new PerkLifestealArrows(4),
|
||||
new PerkLifestealArrows(8),
|
||||
new UltimateNecromancer(11000, 3)
|
||||
},
|
||||
{
|
||||
new PerkDoubleJump(DOUBLE_JUMP, 0.9, 0.9, true),
|
||||
new PerkLifestealArrows(4),
|
||||
new PerkLifestealArrows(8),
|
||||
new UltimateNecromancer(11500, 3)
|
||||
},
|
||||
{
|
||||
new PerkDoubleJump(DOUBLE_JUMP, 0.9, 0.9, true),
|
||||
new PerkLifestealArrows(4),
|
||||
new PerkLifestealArrows(8),
|
||||
new UltimateNecromancer(12000, 3)
|
||||
},
|
||||
{
|
||||
new PerkDoubleJump(DOUBLE_JUMP, 0.9, 0.9, true),
|
||||
new PerkLifestealArrows(4),
|
||||
new PerkLifestealArrows(8),
|
||||
new UltimateNecromancer(12500, 3)
|
||||
}
|
||||
};
|
||||
|
@ -52,33 +52,33 @@ public class KitSkyWarrior extends ProgressingKit
|
||||
private static final Perk[][] PERKS = {
|
||||
{
|
||||
new PerkDoubleJump(DOUBLE_JUMP, 0.9, 0.9, true),
|
||||
new PerkSpeed(1),
|
||||
new UltimateSkyWarrior(2, 10, 10, 5, 30)
|
||||
new PerkSpeed(0),
|
||||
new UltimateSkyWarrior(5, 10, 10, 5, 30)
|
||||
},
|
||||
{
|
||||
new PerkDoubleJump(DOUBLE_JUMP, 0.9, 0.9, true),
|
||||
new PerkSpeed(1),
|
||||
new UltimateSkyWarrior(2, 10, 10, 5, 30)
|
||||
new PerkSpeed(0),
|
||||
new UltimateSkyWarrior(5, 10, 10, 5, 30)
|
||||
},
|
||||
{
|
||||
new PerkDoubleJump(DOUBLE_JUMP, 0.9, 0.9, true),
|
||||
new PerkSpeed(1),
|
||||
new UltimateSkyWarrior(2, 10, 10, 5, 30)
|
||||
new PerkSpeed(0),
|
||||
new UltimateSkyWarrior(5, 10, 10, 5, 30)
|
||||
},
|
||||
{
|
||||
new PerkDoubleJump(DOUBLE_JUMP, 0.9, 0.9, true),
|
||||
new PerkSpeed(1),
|
||||
new UltimateSkyWarrior(2, 10, 10, 5, 30)
|
||||
new PerkSpeed(0),
|
||||
new UltimateSkyWarrior(5, 10, 10, 5, 30)
|
||||
},
|
||||
{
|
||||
new PerkDoubleJump(DOUBLE_JUMP, 0.9, 0.9, true),
|
||||
new PerkSpeed(1),
|
||||
new UltimateSkyWarrior(2, 10, 10, 5, 30)
|
||||
new PerkSpeed(0),
|
||||
new UltimateSkyWarrior(5, 10, 10, 5, 30)
|
||||
},
|
||||
{
|
||||
new PerkDoubleJump(DOUBLE_JUMP, 0.9, 0.9, true),
|
||||
new PerkSpeed(1),
|
||||
new UltimateSkyWarrior(2, 10, 10, 5, 30)
|
||||
new PerkSpeed(0),
|
||||
new UltimateSkyWarrior(5, 10, 10, 5, 30)
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -58,6 +58,11 @@ public abstract class Ultimate extends Perk
|
||||
player.playSound(player.getLocation(), Sound.BLAZE_DEATH, 1, 0);
|
||||
}
|
||||
|
||||
public boolean isUsable(Player player)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public abstract double getChargeIncreasePerSecond();
|
||||
|
||||
public abstract long getLength();
|
||||
|
@ -37,7 +37,7 @@ public class UltimateNecromancer extends Ultimate
|
||||
|
||||
public UltimateNecromancer(long length, int skeletons)
|
||||
{
|
||||
super("Undead Minions", new String[] {});
|
||||
super("Summon Undead", new String[] {});
|
||||
|
||||
_length = length;
|
||||
_skeletons = skeletons;
|
||||
|
@ -17,13 +17,13 @@ public class UltimateNinja extends Ultimate
|
||||
{
|
||||
|
||||
private static final double CHARGE_PER_SECOND = 0.4;
|
||||
private static final int SPEED_AMPLIFiER = 1;
|
||||
private static final int SPEED_AMPLIFIER = 1;
|
||||
|
||||
private long _length;
|
||||
|
||||
public UltimateNinja(long length)
|
||||
{
|
||||
super("Blood Forge", new String[] {});
|
||||
super("Ancient Blade", new String[] {});
|
||||
|
||||
_length = length;
|
||||
}
|
||||
@ -49,7 +49,7 @@ public class UltimateNinja extends Ultimate
|
||||
super.activate(player);
|
||||
|
||||
player.getInventory().setItem(0, new ItemStack(Material.DIAMOND_SWORD));
|
||||
player.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, (int) ((_length / 1000) * 20), SPEED_AMPLIFiER));
|
||||
player.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, (int) ((_length / 1000) * 20), SPEED_AMPLIFIER));
|
||||
|
||||
UtilParticle.PlayParticleToAll(ParticleType.FIREWORKS_SPARK, player.getEyeLocation(), 0, 0, 0, 1F, 100, ViewDist.NORMAL);
|
||||
}
|
||||
|
@ -25,7 +25,7 @@ public class UltimatePyromancer extends Ultimate
|
||||
|
||||
public UltimatePyromancer()
|
||||
{
|
||||
super("Flare Blitz", new String[] {});
|
||||
super("Pincushion", new String[] {});
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -4,7 +4,6 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.FireworkEffect.Type;
|
||||
import org.bukkit.Color;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Sound;
|
||||
@ -17,16 +16,20 @@ import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.potion.PotionEffect;
|
||||
import org.bukkit.potion.PotionEffectType;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import com.google.common.collect.Sets;
|
||||
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.F;
|
||||
import mineplex.core.common.util.UtilBlock;
|
||||
import mineplex.core.common.util.UtilFirework;
|
||||
import mineplex.core.common.util.UtilInv;
|
||||
import mineplex.core.common.util.UtilParticle;
|
||||
import mineplex.core.common.util.UtilPlayer;
|
||||
import mineplex.core.common.util.UtilParticle.ParticleType;
|
||||
import mineplex.core.common.util.UtilParticle.ViewDist;
|
||||
import mineplex.core.common.util.UtilPlayer;
|
||||
import mineplex.core.common.util.UtilServer;
|
||||
import mineplex.core.common.util.UtilTime;
|
||||
import mineplex.core.common.util.particles.effects.LineParticle;
|
||||
import mineplex.core.itemstack.ItemBuilder;
|
||||
import mineplex.core.recharge.Recharge;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
@ -38,7 +41,9 @@ public class UltimateSkyWarrior extends Ultimate
|
||||
{
|
||||
|
||||
private static final double CHARGE_PER_SECOND = 0.4;
|
||||
private static final long LAUNCHER_FIRE_DELAY = 1000;
|
||||
private static final long LAUNCHER_FIRE_DELAY = 500;
|
||||
private static final long LAUNCHER_MAX_TIME = 15000;
|
||||
private static final int Y_INCREASE = 10;
|
||||
|
||||
private double _damageTeleport;
|
||||
private double _radiusTeleport;
|
||||
@ -50,7 +55,7 @@ public class UltimateSkyWarrior extends Ultimate
|
||||
|
||||
public UltimateSkyWarrior(double damageTeleport, double radiusTeleport, double damageLauncher, double radiusLauncher, int rangeLauncher)
|
||||
{
|
||||
super("Astral Arrows", new String[] {});
|
||||
super("Bombardment", new String[] {});
|
||||
|
||||
_damageTeleport = damageTeleport;
|
||||
_radiusTeleport = radiusTeleport;
|
||||
@ -67,7 +72,7 @@ public class UltimateSkyWarrior extends Ultimate
|
||||
Location playerLocation = player.getLocation();
|
||||
// This is to stop the players getting killed by the border if they were
|
||||
// teleported above it.
|
||||
Location toTeleport = new Location(player.getWorld(), playerLocation.getX(), Math.min(Manager.GetGame().WorldData.MaxY - 3, playerLocation.getY() + 10), playerLocation.getZ());
|
||||
Location toTeleport = new Location(player.getWorld(), playerLocation.getX(), Math.min(Manager.GetGame().WorldData.MaxY - 3, playerLocation.getY() + Y_INCREASE), playerLocation.getZ());
|
||||
|
||||
toTeleport.setYaw(playerLocation.getYaw());
|
||||
toTeleport.setPitch(playerLocation.getPitch());
|
||||
@ -79,7 +84,7 @@ public class UltimateSkyWarrior extends Ultimate
|
||||
player.addPotionEffect(new PotionEffect(PotionEffectType.JUMP, Integer.MAX_VALUE, -10));
|
||||
player.teleport(toTeleport);
|
||||
|
||||
_data.add(new SkyWarriorData(player, block, 3));
|
||||
_data.add(new SkyWarriorData(player, block, 3, UtilInv.getAmount(player, Material.ARROW), System.currentTimeMillis()));
|
||||
|
||||
player.getInventory().clear();
|
||||
|
||||
@ -90,23 +95,33 @@ public class UltimateSkyWarrior extends Ultimate
|
||||
player.getInventory().addItem(itemStack);
|
||||
}
|
||||
|
||||
UtilFirework.playFirework(playerLocation, Type.BALL_LARGE, Color.WHITE, false, false);
|
||||
UtilFirework.playFirework(toTeleport, Type.BALL_LARGE, Color.WHITE, false, false);
|
||||
Game game = Manager.GetGame();
|
||||
|
||||
UtilFirework.playFirework(playerLocation, Type.BALL, game.GetTeam(player).GetColorBase(), false, false);
|
||||
UtilFirework.playFirework(toTeleport, Type.BALL, game.GetTeam(player).GetColorBase(), false, false);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onUpdate(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.TICK)
|
||||
if (event.getType() == UpdateType.TICK)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for (SkyWarriorData data : _data)
|
||||
{
|
||||
UtilParticle.PlayParticleToAll(ParticleType.CLOUD, data.getPlayer().getLocation().subtract(0, 0.5, 0), 0.5F, 0.25F, 0.5F, 0.01F, 6, ViewDist.MAX);
|
||||
}
|
||||
}
|
||||
else if (event.getType() == UpdateType.FAST)
|
||||
{
|
||||
for (SkyWarriorData data : _data)
|
||||
{
|
||||
if (UtilTime.elapsed(data.getStartTimeStamp(), LAUNCHER_MAX_TIME))
|
||||
{
|
||||
cancel(data.getPlayer());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onPlayerInteract(PlayerInteractEvent event)
|
||||
@ -124,53 +139,25 @@ public class UltimateSkyWarrior extends Ultimate
|
||||
return;
|
||||
}
|
||||
|
||||
if (!Recharge.Instance.use(player, "Sky Launcher", LAUNCHER_FIRE_DELAY, true, false))
|
||||
if (!Recharge.Instance.use(player, GetName(), LAUNCHER_FIRE_DELAY, true, false))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
player.getWorld().playSound(player.getLocation(), Sound.FIREWORK_BLAST, 5, 1);
|
||||
|
||||
// Particle Trail
|
||||
Block lastParticle = player.getLocation().getBlock();
|
||||
LineParticle lineParticle = new LineParticle(player.getEyeLocation(), player.getLocation().getDirection(), 0.5, _rangeLauncher, Sets.newHashSet(Material.BARRIER), ParticleType.FIREWORKS_SPARK, UtilServer.getPlayers());
|
||||
|
||||
double curRange = 0;
|
||||
while (curRange <= _rangeLauncher)
|
||||
while (!lineParticle.update())
|
||||
{
|
||||
Location newTarget = player.getLocation().add(new Vector(0, 0.2, 0)).add(player.getLocation().getDirection().multiply(curRange));
|
||||
|
||||
if (!UtilBlock.airFoliage(newTarget.getBlock()) || !UtilBlock.airFoliage(newTarget.getBlock().getRelative(BlockFace.UP)))
|
||||
{
|
||||
if (newTarget.getBlock().getType() != Material.BARRIER)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Progress Forwards
|
||||
curRange += 0.2;
|
||||
|
||||
// Particles
|
||||
if (!lastParticle.equals(newTarget.getBlock()))
|
||||
{
|
||||
UtilParticle.PlayParticleToAll(ParticleType.FIREWORKS_SPARK, lastParticle.getLocation(), 0, 0, 0, 0.001F, 1, ViewDist.LONG);
|
||||
}
|
||||
|
||||
lastParticle = newTarget.getBlock();
|
||||
}
|
||||
|
||||
// Modify Range
|
||||
curRange -= 0.4;
|
||||
if (curRange < 0)
|
||||
curRange = 0;
|
||||
|
||||
// Destination
|
||||
Location location = player.getLocation().add(player.getLocation().getDirection().multiply(curRange).add(new Vector(0, 0.4, 0)));
|
||||
Location location = lineParticle.getDestination();
|
||||
|
||||
// Damage Players
|
||||
for (Player other : UtilPlayer.getNearby(location, _radiusLauncher))
|
||||
{
|
||||
Manager.GetDamage().NewDamageEvent(other, player, null, DamageCause.CUSTOM, _damageLauncher, true, true, false, player.getName(), GetName() + " Launcher");
|
||||
Manager.GetDamage().NewDamageEvent(other, player, null, DamageCause.CUSTOM, _damageLauncher, true, true, false, player.getName(), GetName());
|
||||
}
|
||||
|
||||
UtilParticle.PlayParticleToAll(ParticleType.HUGE_EXPLOSION, location, 0, 0, 0, 1F, 1, ViewDist.LONG);
|
||||
@ -190,7 +177,6 @@ public class UltimateSkyWarrior extends Ultimate
|
||||
|
||||
player.getInventory().clear();
|
||||
Kit.GiveItems(player);
|
||||
player.getInventory().addItem(Quiver.SUPER_ARROW);
|
||||
|
||||
player.setWalkSpeed(0.2F);
|
||||
player.removePotionEffect(PotionEffectType.JUMP);
|
||||
@ -200,6 +186,11 @@ public class UltimateSkyWarrior extends Ultimate
|
||||
|
||||
data.getBlock().setType(Material.AIR);
|
||||
|
||||
for (int i = 0; i < data.getPreviousArrows(); i++)
|
||||
{
|
||||
player.getInventory().addItem(Quiver.SUPER_ARROW);
|
||||
}
|
||||
|
||||
boolean found = false;
|
||||
|
||||
for (Player other : game.GetPlayers(true))
|
||||
@ -211,10 +202,10 @@ public class UltimateSkyWarrior extends Ultimate
|
||||
|
||||
if (game.GetTeam(player).equals(game.GetTeam(other)))
|
||||
{
|
||||
UtilParticle.PlayParticleToAll(ParticleType.FLAME, player.getEyeLocation(), 0.5F, 0.5F, 0.5F, 1F, 20, ViewDist.LONG);
|
||||
UtilParticle.PlayParticleToAll(ParticleType.FLAME, other.getEyeLocation(), 0.5F, 0.5F, 0.5F, 1F, 20, ViewDist.LONG);
|
||||
player.sendMessage(F.main("Game", "You were teleported to " + other.getName()));
|
||||
player.sendMessage(F.main("Game", "You were teleported to " + F.elem(other.getName()) + "."));
|
||||
player.teleport(other);
|
||||
other.getWorld().strikeLightningEffect(other.getLocation());
|
||||
UtilFirework.playFirework(other.getLocation(), Type.STAR, game.GetTeam(player).GetColorBase(), false, false);
|
||||
|
||||
for (Player toDamage : UtilPlayer.getNearby(other.getEyeLocation(), _radiusTeleport))
|
||||
{
|
||||
@ -234,6 +225,21 @@ public class UltimateSkyWarrior extends Ultimate
|
||||
_data.remove(data);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isUsable(Player player)
|
||||
{
|
||||
for (int i = 2; i <= Y_INCREASE; i++)
|
||||
{
|
||||
if (player.getLocation().add(0, i, 0).getBlock().getType() != Material.AIR)
|
||||
{
|
||||
player.sendMessage(F.main("Game", "You do not have enough room to use this!"));;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getChargeIncreasePerSecond()
|
||||
{
|
||||
@ -265,12 +271,16 @@ public class UltimateSkyWarrior extends Ultimate
|
||||
private Player _player;
|
||||
private Block _block;
|
||||
private int _shotsLeft;
|
||||
private int _previousArrows;
|
||||
private long _startTimeStamp;
|
||||
|
||||
public SkyWarriorData(Player player, Block block, int shots)
|
||||
public SkyWarriorData(Player player, Block block, int shots, int previousArrows, long startTimeStamp)
|
||||
{
|
||||
_player = player;
|
||||
_block = block;
|
||||
_shotsLeft = shots;
|
||||
_previousArrows = previousArrows;
|
||||
_startTimeStamp = startTimeStamp;
|
||||
}
|
||||
|
||||
public void setShotsLeft(int slotsLeft)
|
||||
@ -293,5 +303,15 @@ public class UltimateSkyWarrior extends Ultimate
|
||||
return _shotsLeft;
|
||||
}
|
||||
|
||||
public int getPreviousArrows()
|
||||
{
|
||||
return _previousArrows;
|
||||
}
|
||||
|
||||
public long getStartTimeStamp()
|
||||
{
|
||||
return _startTimeStamp;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user