Bomb Lobbers again

This commit is contained in:
Sam 2018-04-30 21:32:52 +01:00 committed by Alexander Meech
parent 30dcfdb660
commit f495405b49
3 changed files with 181 additions and 216 deletions

View File

@ -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);
}
} }

View File

@ -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(),
}; };

View File

@ -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()
}; };