Bomb Lobbers again
This commit is contained in:
parent
30dcfdb660
commit
f495405b49
|
@ -1,11 +1,28 @@
|
||||||
package nautilus.game.arcade.game.games.lobbers;
|
package nautilus.game.arcade.game.games.lobbers;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
import mineplex.core.common.util.F;
|
import org.bukkit.ChatColor;
|
||||||
import mineplex.core.common.util.NautHashMap;
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.block.Block;
|
||||||
|
import org.bukkit.entity.LivingEntity;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.entity.TNTPrimed;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.block.Action;
|
||||||
|
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||||
|
import org.bukkit.event.entity.ExplosionPrimeEvent;
|
||||||
|
import org.bukkit.event.player.PlayerInteractEvent;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.metadata.FixedMetadataValue;
|
||||||
|
|
||||||
|
import mineplex.core.common.util.C;
|
||||||
import mineplex.core.common.util.UtilAction;
|
import mineplex.core.common.util.UtilAction;
|
||||||
import mineplex.core.common.util.UtilAlg;
|
import mineplex.core.common.util.UtilAlg;
|
||||||
import mineplex.core.common.util.UtilBlock;
|
import mineplex.core.common.util.UtilBlock;
|
||||||
|
@ -24,7 +41,7 @@ import mineplex.core.updater.UpdateType;
|
||||||
import mineplex.core.updater.event.UpdateEvent;
|
import mineplex.core.updater.event.UpdateEvent;
|
||||||
import mineplex.minecraft.game.core.combat.CombatComponent;
|
import mineplex.minecraft.game.core.combat.CombatComponent;
|
||||||
import mineplex.minecraft.game.core.combat.event.CombatDeathEvent;
|
import mineplex.minecraft.game.core.combat.event.CombatDeathEvent;
|
||||||
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
|
||||||
import nautilus.game.arcade.ArcadeManager;
|
import nautilus.game.arcade.ArcadeManager;
|
||||||
import nautilus.game.arcade.GameType;
|
import nautilus.game.arcade.GameType;
|
||||||
import nautilus.game.arcade.events.GameStateChangeEvent;
|
import nautilus.game.arcade.events.GameStateChangeEvent;
|
||||||
|
@ -46,74 +63,52 @@ import nautilus.game.arcade.game.modules.compass.CompassModule;
|
||||||
import nautilus.game.arcade.kit.Kit;
|
import nautilus.game.arcade.kit.Kit;
|
||||||
import nautilus.game.arcade.managers.chat.ChatStatData;
|
import nautilus.game.arcade.managers.chat.ChatStatData;
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.Material;
|
|
||||||
import org.bukkit.block.Block;
|
|
||||||
import org.bukkit.entity.LivingEntity;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.entity.TNTPrimed;
|
|
||||||
import org.bukkit.event.EventHandler;
|
|
||||||
import org.bukkit.event.block.Action;
|
|
||||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
|
||||||
import org.bukkit.event.entity.ExplosionPrimeEvent;
|
|
||||||
import org.bukkit.event.player.PlayerInteractEvent;
|
|
||||||
import org.bukkit.metadata.FixedMetadataValue;
|
|
||||||
import org.bukkit.util.Vector;
|
|
||||||
|
|
||||||
public class BombLobbers extends TeamGame implements IThrown
|
public class BombLobbers extends TeamGame implements IThrown
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* @author Mysticate
|
private static final String[] DESCRIPTION =
|
||||||
* Created in July, 2015
|
{
|
||||||
*/
|
"Fight against your enemies using",
|
||||||
|
"the power of " + C.cRed + "Explosives!",
|
||||||
private NautHashMap<GameTeam, Location> _averageSpawns = new NautHashMap<GameTeam, Location>();
|
C.cGreen + "Left-Click" + C.Reset + " TNT to throw at your enemy.",
|
||||||
|
C.cYellow + "Last Team" + " alive wins!"
|
||||||
private NautHashMap<TNTPrimed, BombToken> _tnt = new NautHashMap<TNTPrimed, BombToken>();
|
};
|
||||||
|
|
||||||
private NautHashMap<Player, Double> _kills = new NautHashMap<Player, Double>();
|
private final Map<GameTeam, Location> _averageSpawns = new HashMap<>();
|
||||||
|
private final Map<TNTPrimed, BombToken> _tnt = new HashMap<>();
|
||||||
|
private final Map<Player, Double> _kills = new HashMap<>();
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public BombLobbers(ArcadeManager manager)
|
public BombLobbers(ArcadeManager manager)
|
||||||
{
|
{
|
||||||
super(manager, GameType.Lobbers,
|
super(manager, GameType.Lobbers, new Kit[]
|
||||||
new Kit[]
|
{
|
||||||
{
|
|
||||||
new KitJumper(manager),
|
new KitJumper(manager),
|
||||||
new KitArmorer(manager),
|
new KitArmorer(manager),
|
||||||
new KitPitcher(manager),
|
new KitPitcher(manager),
|
||||||
new KitWaller(manager)
|
new KitWaller(manager)
|
||||||
},
|
}, DESCRIPTION);
|
||||||
|
|
||||||
new String[]
|
|
||||||
{
|
|
||||||
"Fight against your enemies using",
|
|
||||||
"the power of explosives!",
|
|
||||||
"Left click TNT to throw at your enemy.",
|
|
||||||
"Last team alive wins!"
|
|
||||||
});
|
|
||||||
|
|
||||||
DamageFall = true;
|
DamageFall = true;
|
||||||
DamageEvP = true;
|
DamageEvP = true;
|
||||||
|
|
||||||
WorldWaterDamage = 5;
|
WorldWaterDamage = 5;
|
||||||
|
|
||||||
PrepareFreeze = false;
|
PrepareFreeze = false;
|
||||||
|
|
||||||
InventoryOpenChest = false;
|
InventoryOpenChest = false;
|
||||||
InventoryOpenBlock = false;
|
InventoryOpenBlock = false;
|
||||||
|
|
||||||
ItemDrop = false;
|
ItemDrop = false;
|
||||||
|
|
||||||
BlockPlace = false;
|
BlockPlace = false;
|
||||||
|
|
||||||
Manager.GetExplosion().SetLiquidDamage(false);
|
Manager.GetExplosion().SetLiquidDamage(false);
|
||||||
|
|
||||||
HungerSet = 20;
|
HungerSet = 20;
|
||||||
|
|
||||||
WorldTimeSet = 6000;
|
WorldTimeSet = 6000;
|
||||||
|
|
||||||
registerStatTrackers(
|
registerStatTrackers(
|
||||||
new Tracker6Kill(this),
|
new Tracker6Kill(this),
|
||||||
new TrackerBlastProof(this),
|
new TrackerBlastProof(this),
|
||||||
|
@ -141,24 +136,26 @@ public class BombLobbers extends TeamGame implements IThrown
|
||||||
.giveHotbarItem()
|
.giveHotbarItem()
|
||||||
.register(this);
|
.register(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void setTime(GameStateChangeEvent event)
|
public void setTime(GameStateChangeEvent event)
|
||||||
{
|
{
|
||||||
if (event.GetState() != GameState.Prepare)
|
if (event.GetState() != GameState.Prepare)
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (WorldData.MapName.equalsIgnoreCase("Intergalactic"))
|
if (WorldData.MapName.equalsIgnoreCase("Intergalactic"))
|
||||||
{
|
{
|
||||||
WorldTimeSet = 18000;
|
WorldTimeSet = 18000;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addKill(Player player)
|
public void addKill(Player player)
|
||||||
{
|
{
|
||||||
_kills.put(player, _kills.containsKey(player) ? _kills.get(player) + 1 : 1);
|
_kills.put(player, _kills.containsKey(player) ? _kills.get(player) + 1 : 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
public double getKills(Player player)
|
public double getKills(Player player)
|
||||||
{
|
{
|
||||||
if (_kills.containsKey(player))
|
if (_kills.containsKey(player))
|
||||||
|
@ -171,35 +168,35 @@ public class BombLobbers extends TeamGame implements IThrown
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onKill(CombatDeathEvent event)
|
public void onKill(CombatDeathEvent event)
|
||||||
{
|
{
|
||||||
if (!IsLive())
|
if (!IsLive())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Player dead = UtilPlayer.searchExact(((Player) event.GetEvent().getEntity()).getName());
|
Player dead = UtilPlayer.searchExact(event.GetEvent().getEntity().getName());
|
||||||
|
|
||||||
if (!IsAlive(dead))
|
if (!IsAlive(dead))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for (CombatComponent damager : event.GetLog().GetAttackers())
|
for (CombatComponent damager : event.GetLog().GetAttackers())
|
||||||
{
|
{
|
||||||
Player killer = UtilPlayer.searchExact(damager.GetName());
|
Player killer = UtilPlayer.searchExact(damager.GetName());
|
||||||
|
|
||||||
if (killer == null || !killer.isOnline())
|
if (killer == null || !killer.isOnline())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (IsAlive(killer))
|
if (IsAlive(killer))
|
||||||
{
|
{
|
||||||
if (event.GetLog().GetKiller() == damager)
|
if (event.GetLog().GetKiller() == damager)
|
||||||
{
|
{
|
||||||
addKill(killer);
|
addKill(killer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void loadTeamLocations(GameStateChangeEvent event)
|
public void loadTeamLocations(GameStateChangeEvent event)
|
||||||
{
|
{
|
||||||
|
@ -211,7 +208,7 @@ public class BombLobbers extends TeamGame implements IThrown
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void disableFlying(GameStateChangeEvent event)
|
public void disableFlying(GameStateChangeEvent event)
|
||||||
{
|
{
|
||||||
|
@ -220,101 +217,89 @@ public class BombLobbers extends TeamGame implements IThrown
|
||||||
player.setAllowFlight(false);
|
player.setAllowFlight(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void throwTNT(PlayerInteractEvent event)
|
public void throwTNT(PlayerInteractEvent event)
|
||||||
{
|
{
|
||||||
if (event.getAction() == Action.PHYSICAL)
|
if (event.getAction() == Action.PHYSICAL || !IsLive())
|
||||||
return;
|
{
|
||||||
|
|
||||||
if (!IsLive())
|
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
|
ItemStack itemStack = player.getItemInHand();
|
||||||
|
|
||||||
if (!IsAlive(player))
|
if (!IsAlive(player) || itemStack == null || itemStack.getType() == Material.TNT)
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (!UtilInv.IsItem(player.getItemInHand(), Material.TNT, (byte) 0))
|
|
||||||
return;
|
|
||||||
|
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
|
|
||||||
UtilInv.remove(player, Material.TNT, (byte) 0, 1);
|
UtilInv.remove(player, Material.TNT, (byte) 0, 1);
|
||||||
UtilInv.Update(player);
|
player.updateInventory();
|
||||||
|
|
||||||
TNTPrimed tnt = (TNTPrimed) player.getWorld().spawn(player.getEyeLocation().add(player.getLocation().getDirection()), TNTPrimed.class);
|
TNTPrimed tnt = player.getWorld().spawn(player.getEyeLocation().add(player.getLocation().getDirection()), TNTPrimed.class);
|
||||||
tnt.setMetadata("owner", new FixedMetadataValue(Manager.getPlugin(), player.getUniqueId()));
|
tnt.setMetadata("owner", new FixedMetadataValue(Manager.getPlugin(), player.getUniqueId()));
|
||||||
tnt.setFuseTicks(60);
|
tnt.setFuseTicks(60);
|
||||||
|
|
||||||
UtilAction.velocity(tnt, player.getLocation().getDirection(), 2.0D, false, 0.0D, 0.1D, 10.0D, false);
|
UtilAction.velocity(tnt, player.getLocation().getDirection(), 2.0D, false, 0.0D, 0.1D, 10.0D, false);
|
||||||
|
|
||||||
ArrayList<Player> canHit = new ArrayList<Player>();
|
List<Player> canHit = new ArrayList<>();
|
||||||
for (Player pos : GetPlayers(true))
|
for (Player pos : GetPlayers(true))
|
||||||
{
|
{
|
||||||
if (GetTeam(player).HasPlayer(pos))
|
if (GetTeam(player).HasPlayer(pos))
|
||||||
|
{
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
canHit.add(pos);
|
canHit.add(pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
Manager.GetProjectile().AddThrow(tnt, player, this, -1L, true, true, false, true, .2F, canHit);
|
Manager.GetProjectile().AddThrow(tnt, player, this, -1L, true, true, false, true, .2F, canHit);
|
||||||
|
|
||||||
Manager.getPlugin().getServer().getPluginManager().callEvent(new TNTThrowEvent(player, tnt));
|
Manager.getPlugin().getServer().getPluginManager().callEvent(new TNTThrowEvent(player, tnt));
|
||||||
|
|
||||||
_tnt.put(tnt, new BombToken(player));
|
_tnt.put(tnt, new BombToken(player));
|
||||||
|
|
||||||
AddGems(player, 0.5, "TNT Thrown", true, true);
|
AddGems(player, 0.5, "TNT Thrown", true, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Player getThrower(TNTPrimed tnt)
|
public Player getThrower(TNTPrimed tnt)
|
||||||
{
|
{
|
||||||
if (_tnt.get(tnt) == null)
|
BombToken token = _tnt.get(tnt);
|
||||||
return null;
|
return token == null ? null : UtilPlayer.searchExact(_tnt.get(tnt).Thrower);
|
||||||
|
|
||||||
return UtilPlayer.searchExact(_tnt.get(tnt).Thrower);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onTNTExplode(ExplosionPrimeEvent event)
|
public void onTNTExplode(ExplosionPrimeEvent event)
|
||||||
{
|
{
|
||||||
if (!IsLive())
|
if (!IsLive() || !(event.getEntity() instanceof TNTPrimed))
|
||||||
return;
|
{
|
||||||
|
|
||||||
if (!(event.getEntity() instanceof TNTPrimed))
|
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
TNTPrimed tnt = (TNTPrimed) event.getEntity();
|
TNTPrimed tnt = (TNTPrimed) event.getEntity();
|
||||||
|
|
||||||
if (!_tnt.containsKey(tnt))
|
if (!_tnt.containsKey(tnt))
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
Player thrower = UtilPlayer.searchExact(_tnt.get(tnt).Thrower);
|
Player thrower = UtilPlayer.searchExact(_tnt.get(tnt).Thrower);
|
||||||
|
|
||||||
if (thrower == null)
|
if (thrower == null || GetTeam(thrower).equals(getSide(tnt.getLocation())))
|
||||||
{
|
{
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
|
tnt.remove();
|
||||||
_tnt.remove(tnt);
|
_tnt.remove(tnt);
|
||||||
|
|
||||||
event.getEntity().remove();
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (GetTeam(thrower) == getSide(tnt.getLocation()))
|
|
||||||
{
|
|
||||||
event.setCancelled(true);
|
|
||||||
|
|
||||||
_tnt.remove(tnt);
|
|
||||||
|
|
||||||
event.getEntity().remove();
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
TNTPreExplodeEvent preExplode = new TNTPreExplodeEvent(thrower, tnt);
|
TNTPreExplodeEvent preExplode = new TNTPreExplodeEvent(thrower, tnt);
|
||||||
Manager.getPlugin().getServer().getPluginManager().callEvent(preExplode);
|
UtilServer.CallEvent(preExplode);
|
||||||
|
|
||||||
if (preExplode.isCancelled())
|
if (preExplode.isCancelled())
|
||||||
{
|
{
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
|
@ -327,41 +312,38 @@ public class BombLobbers extends TeamGame implements IThrown
|
||||||
Manager.GetCondition().Factory().Explosion("Throwing TNT", other, thrower, 50, 0.1, false, false);
|
Manager.GetCondition().Factory().Explosion("Throwing TNT", other, thrower, 50, 0.1, false, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_tnt.remove(tnt);
|
_tnt.remove(tnt);
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void updateTNT(UpdateEvent event)
|
public void updateTNT(UpdateEvent event)
|
||||||
{
|
{
|
||||||
if (event.getType() != UpdateType.TICK)
|
if (event.getType() != UpdateType.TICK || !IsLive())
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
if (!IsLive())
|
|
||||||
return;
|
Map<TNTPrimed, BombToken> toAdd = new HashMap<>();
|
||||||
|
|
||||||
NautHashMap<TNTPrimed, BombToken> toAdd = new NautHashMap<TNTPrimed, BombToken>();
|
|
||||||
|
|
||||||
Iterator<Entry<TNTPrimed, BombToken>> iterator = _tnt.entrySet().iterator();
|
Iterator<Entry<TNTPrimed, BombToken>> iterator = _tnt.entrySet().iterator();
|
||||||
while (iterator.hasNext())
|
while (iterator.hasNext())
|
||||||
{
|
{
|
||||||
Entry<TNTPrimed, BombToken> tnt = iterator.next();
|
Entry<TNTPrimed, BombToken> tnt = iterator.next();
|
||||||
|
|
||||||
if (tnt.getKey() == null)
|
if (tnt.getKey() == null || !tnt.getKey().isValid())
|
||||||
|
{
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
if (!tnt.getKey().isValid())
|
|
||||||
continue;
|
|
||||||
|
|
||||||
BombToken token = tnt.getValue();
|
BombToken token = tnt.getValue();
|
||||||
Player thrower = UtilPlayer.searchExact(token.Thrower);
|
Player thrower = UtilPlayer.searchExact(token.Thrower);
|
||||||
|
|
||||||
if (thrower == null)
|
if (thrower == null || !IsPlaying(thrower))
|
||||||
|
{
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
if (!IsPlaying(thrower))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (!token.Primed)
|
if (!token.Primed)
|
||||||
{
|
{
|
||||||
if (tnt.getKey().getFuseTicks() <= 20)
|
if (tnt.getKey().getFuseTicks() <= 20)
|
||||||
|
@ -373,48 +355,45 @@ public class BombLobbers extends TeamGame implements IThrown
|
||||||
newTNT.setFuseTicks(60);
|
newTNT.setFuseTicks(60);
|
||||||
|
|
||||||
Manager.GetProjectile().AddThrow(newTNT, thrower, this, -1L, true, true, false, true, .2F);
|
Manager.GetProjectile().AddThrow(newTNT, thrower, this, -1L, true, true, false, true, .2F);
|
||||||
|
|
||||||
tnt.getKey().remove();
|
tnt.getKey().remove();
|
||||||
|
|
||||||
iterator.remove();
|
iterator.remove();
|
||||||
toAdd.put(newTNT, token);
|
toAdd.put(newTNT, token);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Prevent concurrent modification thigns
|
//Prevent concurrent modification thigns
|
||||||
for (Entry<TNTPrimed, BombToken> entry : toAdd.entrySet())
|
for (Entry<TNTPrimed, BombToken> entry : toAdd.entrySet())
|
||||||
{
|
{
|
||||||
_tnt.put(entry.getKey(), entry.getValue());
|
_tnt.put(entry.getKey(), entry.getValue());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void blockCollision(UpdateEvent event)
|
public void blockCollision(UpdateEvent event)
|
||||||
{
|
{
|
||||||
if (event.getType() != UpdateType.TICK)
|
if (event.getType() != UpdateType.TICK || !IsLive())
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
if (!IsLive())
|
|
||||||
return;
|
|
||||||
|
|
||||||
for (Entry<TNTPrimed, BombToken> tnt : _tnt.entrySet())
|
for (Entry<TNTPrimed, BombToken> tnt : _tnt.entrySet())
|
||||||
{
|
{
|
||||||
if (tnt.getKey() == null)
|
if (tnt.getKey() == null || !tnt.getKey().isValid())
|
||||||
|
{
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
if (!tnt.getKey().isValid())
|
|
||||||
continue;
|
|
||||||
|
|
||||||
BombToken token = tnt.getValue();
|
BombToken token = tnt.getValue();
|
||||||
Player thrower = UtilPlayer.searchExact(token.Thrower);
|
Player thrower = UtilPlayer.searchExact(token.Thrower);
|
||||||
|
|
||||||
if (thrower == null)
|
if (thrower == null || !IsPlaying(thrower))
|
||||||
|
{
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
if (!IsPlaying(thrower))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (!token.Primed)
|
if (!token.Primed)
|
||||||
{
|
{
|
||||||
//8+ insta explode
|
//8+ insta explode
|
||||||
|
@ -422,7 +401,6 @@ public class BombLobbers extends TeamGame implements IThrown
|
||||||
{
|
{
|
||||||
token.Primed = true;
|
token.Primed = true;
|
||||||
tnt.getKey().setFuseTicks(0);
|
tnt.getKey().setFuseTicks(0);
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
else if (UtilTime.elapsed(token.Created, 3000))
|
else if (UtilTime.elapsed(token.Created, 3000))
|
||||||
{
|
{
|
||||||
|
@ -443,37 +421,33 @@ public class BombLobbers extends TeamGame implements IThrown
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void updateParticles(UpdateEvent event)
|
public void updateParticles(UpdateEvent event)
|
||||||
{
|
{
|
||||||
if (event.getType() != UpdateType.TICK)
|
if (event.getType() != UpdateType.TICK || !IsLive())
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
if (!IsLive())
|
|
||||||
return;
|
|
||||||
|
|
||||||
for (Entry<TNTPrimed, BombToken> tnt : _tnt.entrySet())
|
for (Entry<TNTPrimed, BombToken> tnt : _tnt.entrySet())
|
||||||
{
|
{
|
||||||
if (tnt.getKey() == null)
|
if (tnt.getKey() == null || !tnt.getKey().isValid() || UtilEnt.isGrounded(tnt.getKey()) || tnt.getKey().isOnGround())
|
||||||
|
{
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
if (!tnt.getKey().isValid())
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (UtilEnt.isGrounded(tnt.getKey()) || tnt.getKey().isOnGround())
|
|
||||||
continue;
|
|
||||||
|
|
||||||
BombToken token = tnt.getValue();
|
BombToken token = tnt.getValue();
|
||||||
Player thrower = UtilPlayer.searchExact(token.Thrower);
|
Player thrower = UtilPlayer.searchExact(token.Thrower);
|
||||||
|
|
||||||
if (thrower == null)
|
if (thrower == null)
|
||||||
|
{
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
if (!IsPlaying(thrower))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
GameTeam team = GetTeam(thrower);
|
GameTeam team = GetTeam(thrower);
|
||||||
|
|
||||||
if (team == null)
|
if (team == null)
|
||||||
|
{
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
//A is current
|
//A is current
|
||||||
//B is previous
|
//B is previous
|
||||||
token.B = token.A;
|
token.B = token.A;
|
||||||
|
@ -481,69 +455,66 @@ public class BombLobbers extends TeamGame implements IThrown
|
||||||
|
|
||||||
if (token.A == null || token.B == null)
|
if (token.A == null || token.B == null)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
//Adapted from static lazer code
|
//Adapted from static lazer code
|
||||||
double curRange = 0;
|
double curRange = 0;
|
||||||
double distance = Math.abs(token.A.distance(token.B));
|
double distance = Math.abs(token.A.distance(token.B));
|
||||||
|
|
||||||
while (curRange <= distance)
|
while (curRange <= distance)
|
||||||
{
|
{
|
||||||
Location newTarget = token.B.add(UtilAlg.getTrajectory(token.B, token.A).multiply(curRange));
|
Location newTarget = token.B.add(UtilAlg.getTrajectory(token.B, token.A).multiply(curRange));
|
||||||
// Location newTarget = player.getEyeLocation().add(player.getLocation().getDirection().multiply(curRange));
|
|
||||||
|
|
||||||
//Progress Forwards
|
//Progress Forwards
|
||||||
curRange += 0.2;
|
curRange += 0.2;
|
||||||
|
|
||||||
if (team.GetColor() == ChatColor.AQUA)
|
if (team.GetColor() == ChatColor.AQUA)
|
||||||
{
|
{
|
||||||
for (int i = 0 ; i < 2 ; i++)
|
for (int i = 0; i < 2; i++)
|
||||||
UtilParticle.PlayParticle(ParticleType.RED_DUST, newTarget.clone().add(0.0, 0.5, 0.0), -1, 1, 1, 1, 0,
|
UtilParticle.PlayParticle(ParticleType.RED_DUST, newTarget.clone().add(0.0, 0.5, 0.0), -1, 1, 1, 1, 0,
|
||||||
ViewDist.NORMAL, UtilServer.getPlayers());
|
ViewDist.NORMAL, UtilServer.getPlayers());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
for (int i = 0 ; i < 2 ; i++)
|
for (int i = 0; i < 2; i++)
|
||||||
UtilParticle.PlayParticle(ParticleType.RED_DUST, newTarget.clone().add(0.0, 0.5, 0.0), 0, 0, 0, 0, 1,
|
UtilParticle.PlayParticle(ParticleType.RED_DUST, newTarget.clone().add(0.0, 0.5, 0.0), 0, 0, 0, 0, 1,
|
||||||
ViewDist.NORMAL, UtilServer.getPlayers());
|
ViewDist.NORMAL, UtilServer.getPlayers());
|
||||||
}
|
}
|
||||||
|
|
||||||
//UtilParticle.PlayParticle(ParticleType.RED_DUST, newTarget.clone().add(0.0, 0.6, 0.0), team.GetColorBase().getRed(), team.GetColorBase().getGreen(), team.GetColorBase().getBlue(), 1, 0, ViewDist.LONG, UtilServer.getPlayers());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void preventCheating(UpdateEvent event)
|
public void preventCheating(UpdateEvent event)
|
||||||
{
|
{
|
||||||
if (event.getType() != UpdateType.TICK)
|
if (event.getType() != UpdateType.SEC || !IsLive())
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
if (!IsLive())
|
|
||||||
return;
|
|
||||||
|
|
||||||
for (Player player : GetPlayers(true))
|
for (Player player : GetPlayers(true))
|
||||||
{
|
{
|
||||||
if (GetTeam(player) != getSide(player.getLocation()))
|
if (GetTeam(player).equals(getSide(player.getLocation())))
|
||||||
{
|
{
|
||||||
player.damage(500);
|
Manager.GetDamage().NewDamageEvent(player, null, null, DamageCause.CUSTOM, 500, false, true, true, GetName(), "Cheating");
|
||||||
UtilPlayer.message(player, F.main("Game", "You were killed for trying to cheat!"));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void damageBlocks(ExplosionEvent event)
|
public void damageBlocks(ExplosionEvent event)
|
||||||
{
|
{
|
||||||
if (!Manager.GetGame().IsLive())
|
if (!IsLive())
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
Iterator<Block> iterator = event.GetBlocks().iterator();
|
Iterator<Block> iterator = event.GetBlocks().iterator();
|
||||||
|
|
||||||
while (iterator.hasNext())
|
while (iterator.hasNext())
|
||||||
{
|
{
|
||||||
Block block = iterator.next();
|
Block block = iterator.next();
|
||||||
|
|
||||||
//Stone
|
//Stone
|
||||||
if (block.getType() == Material.STONE)
|
if (block.getType() == Material.STONE)
|
||||||
{
|
{
|
||||||
|
@ -557,18 +528,20 @@ public class BombLobbers extends TeamGame implements IThrown
|
||||||
{
|
{
|
||||||
block.setData((byte) 2);
|
block.setData((byte) 2);
|
||||||
iterator.remove();
|
iterator.remove();
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private GameTeam getSide(Location entityLoc)
|
private GameTeam getSide(Location entityLoc)
|
||||||
{
|
{
|
||||||
Location nearest = UtilAlg.findClosest(entityLoc, new ArrayList<Location>(_averageSpawns.values()));
|
Location nearest = UtilAlg.findClosest(entityLoc, _averageSpawns.values());
|
||||||
|
|
||||||
for (Entry<GameTeam, Location> entry : _averageSpawns.entrySet())
|
for (Entry<GameTeam, Location> entry : _averageSpawns.entrySet())
|
||||||
{
|
{
|
||||||
if (entry.getValue().equals(nearest))
|
if (entry.getValue().equals(nearest))
|
||||||
|
{
|
||||||
return entry.getKey();
|
return entry.getKey();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -578,7 +551,7 @@ public class BombLobbers extends TeamGame implements IThrown
|
||||||
{
|
{
|
||||||
if (!(data.getThrown() instanceof TNTPrimed))
|
if (!(data.getThrown() instanceof TNTPrimed))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!(data.getThrower() instanceof Player))
|
if (!(data.getThrower() instanceof Player))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -587,40 +560,28 @@ public class BombLobbers extends TeamGame implements IThrown
|
||||||
|
|
||||||
if (GetTeam((Player) target) == GetTeam((Player) data.getThrower()))
|
if (GetTeam((Player) target) == GetTeam((Player) data.getThrower()))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
data.getThrown().setVelocity(new Vector());
|
UtilAction.velocity(target, UtilAlg.getTrajectory2d(data.getThrown().getLocation(), target.getLocation()), .2, false, 0, 0.2, .4, true);
|
||||||
|
|
||||||
if (target != null)
|
|
||||||
UtilAction.velocity(target, UtilAlg.getTrajectory2d(data.getThrown().getLocation(), target.getLocation()), .2, false, 0, 0.2, .4, true);
|
|
||||||
|
|
||||||
Manager.GetDamage().NewDamageEvent(target, data.getThrower(), null, DamageCause.PROJECTILE, 10.0, false, false, false, "Throwing TNT", "Throwing TNT Direct Hit");
|
Manager.GetDamage().NewDamageEvent(target, data.getThrower(), null, DamageCause.PROJECTILE, 10.0, false, false, false, "Throwing TNT", "Throwing TNT Direct Hit");
|
||||||
|
|
||||||
AddGems((Player) data.getThrower(), 4.0, "Direct Hit", true, true);
|
AddGems((Player) data.getThrower(), 4.0, "Direct Hit", true, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void Idle(ProjectileUser data)
|
public void Idle(ProjectileUser data)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void Expire(ProjectileUser data)
|
public void Expire(ProjectileUser data)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void ChunkUnload(ProjectileUser data)
|
public void ChunkUnload(ProjectileUser data)
|
||||||
{
|
{
|
||||||
data.getThrown().remove();
|
data.getThrown().remove();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void knockbackIncrease(CustomDamageEvent event)
|
|
||||||
{
|
|
||||||
if (event.GetCause() != DamageCause.ENTITY_EXPLOSION && event.GetCause() != DamageCause.BLOCK_EXPLOSION)
|
|
||||||
return;
|
|
||||||
|
|
||||||
event.AddKnockback("Explosion", 1.7D);
|
|
||||||
}
|
|
||||||
}
|
}
|
|
@ -15,6 +15,7 @@ import nautilus.game.arcade.ArcadeManager;
|
||||||
import nautilus.game.arcade.game.games.lobbers.kits.perks.PerkCraftman;
|
import nautilus.game.arcade.game.games.lobbers.kits.perks.PerkCraftman;
|
||||||
import nautilus.game.arcade.kit.Kit;
|
import nautilus.game.arcade.kit.Kit;
|
||||||
import nautilus.game.arcade.kit.Perk;
|
import nautilus.game.arcade.kit.Perk;
|
||||||
|
import nautilus.game.arcade.kit.perks.PerkDoubleJump;
|
||||||
import nautilus.game.arcade.kit.perks.PerkDummy;
|
import nautilus.game.arcade.kit.perks.PerkDummy;
|
||||||
|
|
||||||
public class KitArmorer extends Kit
|
public class KitArmorer extends Kit
|
||||||
|
@ -22,6 +23,7 @@ public class KitArmorer extends Kit
|
||||||
|
|
||||||
private static final Perk[] PERKS =
|
private static final Perk[] PERKS =
|
||||||
{
|
{
|
||||||
|
new PerkDoubleJump("Double Jump", 1.2, 1.2, false),
|
||||||
new PerkDummy("Armorer", Collections.singletonList(C.cGray + "Receive " + C.cYellow + "Full Gold Armor").toArray(new String[1])),
|
new PerkDummy("Armorer", Collections.singletonList(C.cGray + "Receive " + C.cYellow + "Full Gold Armor").toArray(new String[1])),
|
||||||
new PerkCraftman(),
|
new PerkCraftman(),
|
||||||
};
|
};
|
||||||
|
|
|
@ -13,12 +13,14 @@ import nautilus.game.arcade.game.games.lobbers.kits.perks.PerkCraftman;
|
||||||
import nautilus.game.arcade.game.games.lobbers.kits.perks.PerkWaller;
|
import nautilus.game.arcade.game.games.lobbers.kits.perks.PerkWaller;
|
||||||
import nautilus.game.arcade.kit.Kit;
|
import nautilus.game.arcade.kit.Kit;
|
||||||
import nautilus.game.arcade.kit.Perk;
|
import nautilus.game.arcade.kit.Perk;
|
||||||
|
import nautilus.game.arcade.kit.perks.PerkDoubleJump;
|
||||||
|
|
||||||
public class KitWaller extends Kit
|
public class KitWaller extends Kit
|
||||||
{
|
{
|
||||||
|
|
||||||
private static final Perk[] PERKS =
|
private static final Perk[] PERKS =
|
||||||
{
|
{
|
||||||
|
new PerkDoubleJump("Double Jump", 1.2, 1.2, false),
|
||||||
new PerkWaller(),
|
new PerkWaller(),
|
||||||
new PerkCraftman()
|
new PerkCraftman()
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue