Finished Gravity

INcluded map
This commit is contained in:
Chiss 2014-01-21 22:48:18 +11:00
parent 0fba94f8ae
commit e124dde006
11 changed files with 476 additions and 119 deletions

Binary file not shown.

Binary file not shown.

View File

@ -9,12 +9,12 @@ public class DisguiseBat extends DisguiseAnimal
DataWatcher.a(16, new Byte((byte)0)); DataWatcher.a(16, new Byte((byte)0));
} }
public boolean isFlying() public boolean isSitting()
{ {
return (DataWatcher.getByte(16) & 0x1) != 0; return (DataWatcher.getByte(16) & 0x1) != 0;
} }
public void setFlying(boolean paramBoolean) public void setSitting(boolean paramBoolean)
{ {
int i = DataWatcher.getByte(16); int i = DataWatcher.getByte(16);
if (paramBoolean) if (paramBoolean)

View File

@ -1000,7 +1000,14 @@ public abstract class Game implements Listener
_helpTimer = System.currentTimeMillis(); _helpTimer = System.currentTimeMillis();
Announce(C.cWhite + C.Bold + "TIP " + ChatColor.RESET + _helpColor + _help[_helpIndex]); String msg = C.cWhite + C.Bold + "TIP " + ChatColor.RESET + _helpColor + _help[_helpIndex];
for (Player player : UtilServer.getPlayers())
{
player.playSound(player.getLocation(), Sound.CHICKEN_EGG_POP, 1f, 1f);
UtilPlayer.message(player, msg);
}
_helpIndex = (_helpIndex + 1)%_help.length; _helpIndex = (_helpIndex + 1)%_help.length;
} }

View File

@ -5,17 +5,25 @@ import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.Iterator; import java.util.Iterator;
import org.bukkit.Color;
import org.bukkit.FireworkEffect;
import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.Sound; import org.bukkit.Sound;
import org.bukkit.FireworkEffect.Type;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.craftbukkit.v1_6_R3.entity.CraftFallingSand; import org.bukkit.craftbukkit.v1_6_R3.entity.CraftFallingSand;
import org.bukkit.entity.Arrow;
import org.bukkit.entity.FallingBlock; import org.bukkit.entity.FallingBlock;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.entity.Projectile;
import org.bukkit.entity.Slime; import org.bukkit.entity.Slime;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.block.Action; import org.bukkit.event.block.Action;
import org.bukkit.event.entity.EntityChangeBlockEvent; import org.bukkit.event.entity.EntityChangeBlockEvent;
import org.bukkit.event.entity.ProjectileHitEvent;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.event.entity.EntityShootBowEvent;
import org.bukkit.event.player.PlayerDropItemEvent; import org.bukkit.event.player.PlayerDropItemEvent;
import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
@ -25,8 +33,13 @@ import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilAlg;
import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilBlock;
import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilEnt;
import mineplex.core.common.util.UtilFirework;
import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilParticle;
import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilPlayer;
import mineplex.core.common.util.UtilTime;
import mineplex.core.common.util.UtilWorld;
import mineplex.core.common.util.UtilParticle.ParticleType;
import mineplex.core.recharge.Recharge; import mineplex.core.recharge.Recharge;
import mineplex.core.updater.UpdateType; import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent; import mineplex.core.updater.event.UpdateEvent;
@ -50,6 +63,12 @@ public class Gravity extends SoloGame
//Player Hooks //Player Hooks
private HashMap<Player, GravityHook> _hooks = new HashMap<Player, GravityHook>(); private HashMap<Player, GravityHook> _hooks = new HashMap<Player, GravityHook>();
private HashMap<Arrow, Vector> _arrows = new HashMap<Arrow, Vector>();
private ArrayList<Location> _powerups = new ArrayList<Location>();
private Location _powerup = null;
private long _lastPowerup = 0;
public Gravity(ArcadeManager manager) public Gravity(ArcadeManager manager)
{ {
super(manager, GameType.Gravity, super(manager, GameType.Gravity,
@ -61,8 +80,8 @@ public class Gravity extends SoloGame
new String[] new String[]
{ {
C.cGreen + "Push Drop" + C.cGray + " to kick off blocks", C.cGreen + "Push Drop" + C.cGray + " to boost off blocks",
C.cGreen + "Left-Click" + C.cGray + " to use " + F.skill("Block Cannon"), C.cGreen + "Left-Click" + C.cGray + " to use " + F.skill("Sonic Blast"),
C.cGreen + "Right-Click" + C.cGray + " to use " + F.skill("Jetpack"), C.cGreen + "Right-Click" + C.cGray + " to use " + F.skill("Jetpack"),
"Food is Oxygen. Restore it at Emerald Blocks.", "Food is Oxygen. Restore it at Emerald Blocks.",
"Last player alive wins!" "Last player alive wins!"
@ -74,18 +93,26 @@ public class Gravity extends SoloGame
"You automatically grab onto nearby platforms.", "You automatically grab onto nearby platforms.",
"Hold Block to use your Jetpack", "Hold Block to use your Jetpack",
"Your Experience Bar is your Jetpack Fuel", "Your Experience Bar is your Jetpack Fuel",
"Restore Jetpack Fuel by collecting Powerups",
"Powerups are flashing green fireworks",
"Your Hunger is your Oxygen Level", "Your Hunger is your Oxygen Level",
"Restore Oxygen at the Emerald Blocks", "Restore Oxygen at the Emerald Blocks",
}; };
this.DamagePvP = false; this.DamagePvP = false;
this.HungerSet = 20; this.HungerSet = 10;
this.WorldTimeSet = 18000; this.WorldTimeSet = 18000;
this.CompassEnabled = true; this.CompassEnabled = true;
} }
@Override
public void ParseData()
{
_powerups = this.WorldData.GetDataLocs("LIME");
}
@EventHandler @EventHandler
public void CreatePlayerObjects(GameStateChangeEvent event) public void CreatePlayerObjects(GameStateChangeEvent event)
{ {
@ -101,6 +128,27 @@ public class Gravity extends SoloGame
} }
} }
@EventHandler
public void AnnounceBoost(GameStateChangeEvent event)
{
if (event.GetState() != GameState.Live)
return;
Announce(C.Bold + C.cPurple + "Press " + C.Bold + C.cWhite + "DROP WEAPON" + C.Bold + C.cPurple + " to boost yourself off platforms!");
}
@EventHandler
public void ClearObjects(GameStateChangeEvent event)
{
if (event.GetState() != GameState.End)
return;
for (GravityObject obj : _objects)
obj.Clean();
_objects.clear();
}
@EventHandler @EventHandler
public void KickOff(PlayerDropItemEvent event) public void KickOff(PlayerDropItemEvent event)
{ {
@ -114,7 +162,7 @@ public class Gravity extends SoloGame
@EventHandler @EventHandler
public void Jetpack(UpdateEvent event) public void Jetpack(UpdateEvent event)
{ {
if (!IsLive()) if (!InProgress())
return; return;
if (event.getType() != UpdateType.TICK) if (event.getType() != UpdateType.TICK)
@ -128,6 +176,9 @@ public class Gravity extends SoloGame
@EventHandler @EventHandler
public void Shoot(PlayerInteractEvent event) public void Shoot(PlayerInteractEvent event)
{ {
if (!IsLive())
return;
if (event.isCancelled()) if (event.isCancelled())
return; return;
@ -149,15 +200,29 @@ public class Gravity extends SoloGame
return; return;
//Projectile //Projectile
Vector vel = player.getLocation().getDirection().multiply(1.2);
Arrow arrow = player.getWorld().spawnArrow(
player.getEyeLocation().add(player.getLocation().getDirection().multiply(2.5)).subtract(new Vector(0,0.8,0)),
player.getLocation().getDirection(), (float) vel.length(), 0f);
arrow.setShooter(player);
UtilEnt.ghost(arrow, true, true);
_arrows.put(arrow, vel);
event.setCancelled(true);
/* OLD
Vector velocity = player.getLocation().getDirection().multiply(1.2); Vector velocity = player.getLocation().getDirection().multiply(1.2);
FallingBlock projectile = player.getWorld().spawnFallingBlock(player.getEyeLocation().add(player.getLocation().getDirection().multiply(2)), Material.SKULL, (byte)0); FallingBlock projectile = player.getWorld().spawnFallingBlock(player.getEyeLocation().subtract(0, 1.2, 0).add(player.getLocation().getDirection().multiply(2)), Material.SKULL, (byte)0);
_objects.add(new GravityBomb(this, projectile, 12, velocity)); _objects.add(new GravityBomb(this, projectile, 12, velocity, player));
//Sound //Sound
player.getWorld().playSound(player.getLocation(), Sound.CHICKEN_EGG_POP, 2f, 0.25f); player.getWorld().playSound(player.getLocation(), Sound.EXPLODE, 0.5f, 2f);
player.getWorld().playSound(player.getLocation(), Sound.CHICKEN_EGG_POP, 2f, 0.25f); */
} }
@EventHandler @EventHandler
@ -372,13 +437,13 @@ public class Gravity extends SoloGame
if (!(obj instanceof GravityBomb)) if (!(obj instanceof GravityBomb))
continue; continue;
HashSet<GravityDebris> debris = ((GravityBomb)obj).DetonateCheck(); HashSet<GravityDebris> debris = ((GravityBomb)obj).BombDetonate();
if (!debris.isEmpty()) if (debris != null && !debris.isEmpty())
{ {
newDebris.addAll(debris); newDebris.addAll(debris);
objectIterator.remove(); objectIterator.remove();
obj.CustomCollide(); obj.CustomCollide(null);
obj.Clean(); obj.Clean();
} }
} }
@ -415,4 +480,177 @@ public class Gravity extends SoloGame
if (object instanceof GravityPlayer) if (object instanceof GravityPlayer)
((GravityPlayer)object).Oxygen(); ((GravityPlayer)object).Oxygen();
} }
public ArrayList<GravityObject> GetObjects()
{
return _objects;
}
@EventHandler
public void BowShoot(EntityShootBowEvent event)
{
Player shooter = (Player)event.getEntity();
Vector vel = event.getProjectile().getVelocity();
vel.multiply(0.6);
Arrow arrow = shooter.getWorld().spawnArrow(
shooter.getEyeLocation().add(shooter.getLocation().getDirection().multiply(1.5)).subtract(new Vector(0,0.8,0)),
shooter.getLocation().getDirection(), (float) vel.length(), 0f);
arrow.setShooter(shooter);
UtilEnt.ghost(arrow, true, true);
_arrows.put(arrow, vel);
event.setCancelled(true);
}
@EventHandler
public void BowUpdate(UpdateEvent event)
{
if (event.getType() != UpdateType.TICK)
return;
Iterator<Arrow> arrowIterator = _arrows.keySet().iterator();
while (arrowIterator.hasNext())
{
Arrow arrow = arrowIterator.next();
for (GravityObject obj : _objects)
{
if (UtilMath.offset(obj.Base.getLocation().add(0, 0.5, 0), arrow.getLocation()) > obj.Size)
continue;
if (obj instanceof GravityPlayer)
{
if (obj.Ent.equals(arrow.getShooter()))
continue;
}
BowExplode(arrow);
break;
}
if (!arrow.isValid() || arrow.getTicksLived() > 200)
{
arrow.remove();
arrowIterator.remove();
}
else
{
arrow.setVelocity(_arrows.get(arrow));
UtilParticle.PlayParticle(ParticleType.FLAME, arrow.getLocation(), 0, 0, 0, 0, 1);
UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, arrow.getLocation(), 0, 0, 0, 0, 1);
arrow.getWorld().playSound(arrow.getLocation(), Sound.FIZZ, 0.3f, 0.5f);
}
}
}
@EventHandler
public void BowHit(ProjectileHitEvent event)
{
BowExplode(event.getEntity());
}
public void BowExplode(Projectile proj)
{
//Blast Objs
for (GravityObject obj : _objects)
{
if (UtilMath.offset(proj, obj.Base) > 3)
continue;
obj.AddVelocity(UtilAlg.getTrajectory(proj, obj.Base).multiply(0.4), 10);
obj.CustomCollide(null);
obj.GrabDelay = System.currentTimeMillis();
obj.SetMovingBat(true);
}
//Blast Debris
for (Block block : UtilBlock.getInRadius(proj.getLocation().add(0, 0.5, 0), 3d).keySet())
{
if (UtilBlock.airFoliage(block))
continue;
if (block.getType() == Material.EMERALD_BLOCK)
continue;
//Projectile
Vector velocity = UtilAlg.getTrajectory(proj.getLocation(), block.getLocation().add(0.5, 0.5, 0.5));
velocity.add(proj.getVelocity().normalize());
velocity.add((new Vector(Math.random()-0.5,Math.random()-0.5,Math.random()-0.5)).multiply(0.5));
velocity.multiply(0.3);
//Block
Material type = block.getType();
byte data = block.getData();
block.setType(Material.AIR);
//Projectile
FallingBlock projectile = block.getWorld().spawnFallingBlock(block.getLocation().add(0.5, 0.6, 0.5), type,data);
GravityDebris newDebris = new GravityDebris(this, projectile, 12, velocity);
//Add
_objects.add(newDebris);
}
//Effect
UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, proj.getLocation(), 0, 0, 0, 0, 1);
proj.getWorld().playSound(proj.getLocation(), Sound.EXPLODE, 0.6f, 1.5f);
//Remove
proj.remove();
}
@EventHandler
public void PowerupUpdate(UpdateEvent event)
{
if (!IsLive())
return;
if (event.getType() != UpdateType.SEC)
return;
if (!UtilTime.elapsed(_lastPowerup, 15000))
return;
if (_powerup == null)
_powerup = UtilAlg.Random(_powerups);
else
{
FireworkEffect effect = FireworkEffect.builder().flicker(false).withColor(Color.GREEN).with(Type.BALL).trail(false).build();
UtilFirework.playFirework(_powerup, effect);
}
}
@EventHandler
public void PowerupCollect(UpdateEvent event)
{
if (event.getType() != UpdateType.TICK)
return;
if (_powerup == null)
return;
for (Player player : GetPlayers(true))
{
if (UtilMath.offset(player.getLocation(), _powerup) < 3)
{
UtilPlayer.message(player, F.main("Game", "You collected " + F.skill("Jetpack Fuel") + "!"));
player.setExp(Math.min(0.9999f, player.getExp() + 0.25f));
player.getWorld().playSound(player.getLocation(), Sound.DRINK, 1f, 0.5f);
_powerup = null;
_lastPowerup = System.currentTimeMillis();
break;
}
}
}
} }

View File

@ -5,15 +5,11 @@ import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilParticle;
import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.core.common.util.UtilParticle.ParticleType;
import mineplex.core.disguise.disguises.DisguiseBat; import mineplex.core.disguise.disguises.DisguiseBat;
import mineplex.core.disguise.disguises.DisguiseChicken; import nautilus.game.arcade.game.games.gravity.objects.*;
import org.bukkit.Sound; import org.bukkit.Sound;
import org.bukkit.craftbukkit.v1_6_R3.entity.CraftFallingSand;
import org.bukkit.entity.Chicken;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.FallingBlock;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.entity.Slime;
import org.bukkit.entity.Zombie; import org.bukkit.entity.Zombie;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
@ -27,6 +23,7 @@ public abstract class GravityObject
public Vector Vel; public Vector Vel;
public Zombie Base; public Zombie Base;
public DisguiseBat Bat;
public long GrabDelay = 0; public long GrabDelay = 0;
@ -54,9 +51,9 @@ public abstract class GravityObject
Base.setMaxHealth(60); Base.setMaxHealth(60);
Base.setHealth(60); Base.setHealth(60);
DisguiseBat disguise = new DisguiseBat(Base); Bat = new DisguiseBat(Base);
//disguise.setBaby(); Bat.setSitting(false);
Host.Manager.GetDisguise().disguise(disguise); Host.Manager.GetDisguise().disguise(Bat);
UtilEnt.Vegetate(Base, true); UtilEnt.Vegetate(Base, true);
UtilEnt.ghost(Base, true, true); UtilEnt.ghost(Base, true, true);
@ -87,15 +84,15 @@ public abstract class GravityObject
//Effect //Effect
if (Vel.length() > 0) if (Vel.length() > 0)
{ {
if (IsPlayer()) if (this instanceof GravityPlayer)
{ {
UtilParticle.PlayParticle(ParticleType.FIREWORKS_SPARK, Ent.getLocation().add(0, 0.5, 0), 0, 0, 0, 0, 1); UtilParticle.PlayParticle(ParticleType.FIREWORKS_SPARK, Ent.getLocation().subtract(0, 0.5, 0), 0, 0, 0, 0, 1);
} }
else if (Ent instanceof FallingBlock) else if (this instanceof GravityBomb)
{ {
UtilParticle.PlayParticle(ParticleType.RED_DUST, Ent.getLocation().add(0, -0.1, 0), 0, 0, 0, 0, 1); UtilParticle.PlayParticle(ParticleType.FLAME, Ent.getLocation().add(0, -0.1, 0), 0, 0, 0, 0, 1);
} }
else if (Ent instanceof Slime) else if (this instanceof GravityHook)
{ {
UtilParticle.PlayParticle(ParticleType.SNOW_SHOVEL, Ent.getLocation().add(0, 0.1, 0), 0, 0, 0, 0, 1); UtilParticle.PlayParticle(ParticleType.SNOW_SHOVEL, Ent.getLocation().add(0, 0.1, 0), 0, 0, 0, 0, 1);
} }
@ -118,6 +115,9 @@ public abstract class GravityObject
if (this.Vel.length() == 0 && other.Vel.length() == 0) if (this.Vel.length() == 0 && other.Vel.length() == 0)
return; return;
if (!this.CanCollide(other) || !other.CanCollide(this))
return;
double size = this.Size; double size = this.Size;
if (other.Size > size) if (other.Size > size)
size = other.Size; size = other.Size;
@ -150,11 +150,20 @@ public abstract class GravityObject
other.GrabDelay = System.currentTimeMillis(); other.GrabDelay = System.currentTimeMillis();
//Collide //Collide
this.CustomCollide(); this.CustomCollide(other);
other.CustomCollide(); other.CustomCollide(this);
//Animation
this.SetMovingBat(true);
other.SetMovingBat(true);
} }
public void CustomCollide() public boolean CanCollide(GravityObject other)
{
return true;
}
public void CustomCollide(GravityObject other)
{ {
} }
@ -186,12 +195,23 @@ public abstract class GravityObject
{ {
Vel.normalize().multiply(3); Vel.normalize().multiply(3);
} }
SetMovingBat(true);
} }
public void Clean() public void Clean()
{ {
Ent.remove();
Ent.leaveVehicle(); Ent.leaveVehicle();
if (!(Ent instanceof Player))
Ent.remove();
Base.remove(); Base.remove();
} }
public void SetMovingBat(boolean moving)
{
Bat.setSitting(!moving);
Host.Manager.GetDisguise().updateDisguise(Bat);
}
} }

View File

@ -37,17 +37,23 @@ public class KitJetpack extends Kit
public void GiveItems(Player player) public void GiveItems(Player player)
{ {
//player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.SHEARS, (byte)0, 1, "Block Cannon")); //player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.SHEARS, (byte)0, 1, "Block Cannon"));
player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.IRON_SWORD, (byte)0, 1, player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.IRON_SWORD, (byte)0, 1, "Space Suit"));
C.cYellow + "Left-Click: " + C.cWhite + "Block Cannon " + C.cYellow + "Right-Click: " + C.cWhite + "Jetpack"));
//player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.DIAMOND_SWORD, (byte)0, 1, "Grappling Hook")); //player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.BOW, (byte)0, 1, "Space Shooter"));
//player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.ARROW, (byte)0, 64, "Space Arrows"));
player.getInventory().setHelmet(ItemStackFactory.Instance.CreateStack(Material.GOLD_HELMET));
player.getInventory().setChestplate(ItemStackFactory.Instance.CreateStack(Material.GOLD_CHESTPLATE));
player.getInventory().setLeggings(ItemStackFactory.Instance.CreateStack(Material.GOLD_LEGGINGS));
player.getInventory().setBoots(ItemStackFactory.Instance.CreateStack(Material.GOLD_BOOTS));
} }
@Override @Override
public void SpawnCustom(LivingEntity ent) public void SpawnCustom(LivingEntity ent)
{ {
ent.getEquipment().setHelmet(new ItemStack(Material.LEATHER_HELMET)); ent.getEquipment().setHelmet(new ItemStack(Material.GOLD_HELMET));
ent.getEquipment().setChestplate(new ItemStack(Material.LEATHER_CHESTPLATE)); ent.getEquipment().setChestplate(new ItemStack(Material.GOLD_CHESTPLATE));
ent.getEquipment().setLeggings(new ItemStack(Material.LEATHER_LEGGINGS)); ent.getEquipment().setLeggings(new ItemStack(Material.GOLD_LEGGINGS));
ent.getEquipment().setBoots(new ItemStack(Material.LEATHER_BOOTS)); ent.getEquipment().setBoots(new ItemStack(Material.GOLD_BOOTS));
} }
} }

View File

@ -4,7 +4,9 @@ import java.util.HashSet;
import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilAlg;
import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilBlock;
import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilParticle;
import mineplex.core.common.util.UtilTime;
import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.core.common.util.UtilParticle.ParticleType;
import nautilus.game.arcade.game.games.gravity.Gravity; import nautilus.game.arcade.game.games.gravity.Gravity;
import nautilus.game.arcade.game.games.gravity.GravityObject; import nautilus.game.arcade.game.games.gravity.GravityObject;
@ -14,13 +16,21 @@ import org.bukkit.Sound;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.FallingBlock; import org.bukkit.entity.FallingBlock;
import org.bukkit.entity.Player;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
public class GravityBomb extends GravityObject public class GravityBomb extends GravityObject
{ {
public GravityBomb(Gravity host, Entity ent, double mass, Vector vel) public Player Owner;
private long _blockHitDelay;
public GravityBomb(Gravity host, Entity ent, double mass, Vector vel, Player owner)
{ {
super(host, ent, mass, 1.5, vel); super(host, ent, mass, 1.5, vel);
Owner = owner;
_blockHitDelay = System.currentTimeMillis();
} }
@Override @Override
@ -29,14 +39,106 @@ public class GravityBomb extends GravityObject
Ent.getWorld().playSound(Ent.getLocation(), Sound.EXPLODE, 1f, 1f); Ent.getWorld().playSound(Ent.getLocation(), Sound.EXPLODE, 1f, 1f);
} }
public HashSet<GravityDebris> DetonateCheck() public boolean CollideCheck(GravityObject other)
{ {
if (this.equals(other))
return false;
if (System.currentTimeMillis() < this.CollideDelay)
return false;
if (System.currentTimeMillis() < other.CollideDelay)
return false;
if (this.Vel.length() == 0 && other.Vel.length() == 0)
return false;
double size = this.Size;
if (other.Size > size)
size = other.Size;
if (UtilMath.offset(this.Base, other.Base) > size)
return false;
return true;
}
public HashSet<GravityDebris> BombDetonate()
{
boolean collided = false;
//Collide with Objects
for (GravityObject obj : Host.GetObjects())
{
if (!CollideCheck(obj))
continue;
collided = true;
}
//Collide with Blocks
if (!collided && UtilTime.elapsed(_blockHitDelay, 100))
for (Block block : UtilBlock.getInRadius(Base.getLocation().add(0, 0.5, 0), 2d).keySet())
{
if (UtilBlock.airFoliage(block))
continue;
//X
if (block.getLocation().getX() + 0.5 < Base.getLocation().getX())
if (Vel.getX() > 0)
continue;
if (block.getLocation().getX() + 0.5 > Base.getLocation().getX())
if (Vel.getX() < 0)
continue;
//Y
if (block.getLocation().getY() + 0.5 < Base.getLocation().getY())
if (Vel.getY() > 0)
continue;
if (block.getLocation().getY() + 0.5 > Base.getLocation().getY())
if (Vel.getY() < 0)
continue;
//Z
if (block.getLocation().getZ() + 0.5 < Base.getLocation().getZ())
if (Vel.getZ() > 0)
continue;
if (block.getLocation().getZ() + 0.5 > Base.getLocation().getZ())
if (Vel.getZ() < 0)
continue;
collided = true;
break;
}
if (!collided)
return null;
//Blast Objs
for (GravityObject obj : Host.GetObjects())
{
if (UtilMath.offset(this.Base, obj.Base) > 3)
continue;
if (this.equals(obj))
continue;
if (System.currentTimeMillis() < obj.CollideDelay)
continue;
if (this.Vel.length() == 0 && obj.Vel.length() == 0)
continue;
obj.AddVelocity(UtilAlg.getTrajectory(this.Base, obj.Base).multiply(0.4), 10);
}
//Blast Debris
HashSet<GravityDebris> debris = new HashSet<GravityDebris>(); HashSet<GravityDebris> debris = new HashSet<GravityDebris>();
if (!Ent.isValid()) for (Block block : UtilBlock.getInRadius(Base.getLocation().add(0, 0.5, 0), 3d).keySet())
return debris;
for (Block block : UtilBlock.getInRadius(Ent.getLocation(), 1.5d).keySet())
{ {
if (UtilBlock.airFoliage(block)) if (UtilBlock.airFoliage(block))
continue; continue;
@ -47,6 +149,7 @@ public class GravityBomb extends GravityObject
//Projectile //Projectile
Vector velocity = UtilAlg.getTrajectory(Ent.getLocation(), block.getLocation().add(0.5, 0.5, 0.5)); Vector velocity = UtilAlg.getTrajectory(Ent.getLocation(), block.getLocation().add(0.5, 0.5, 0.5));
velocity.add(Vel.clone().normalize()); velocity.add(Vel.clone().normalize());
velocity.add((new Vector(Math.random()-0.5,Math.random()-0.5,Math.random()-0.5)).multiply(0.5));
velocity.multiply(0.3); velocity.multiply(0.3);
//Block //Block
@ -66,9 +169,17 @@ public class GravityBomb extends GravityObject
} }
@Override @Override
public void CustomCollide() public void CustomCollide(GravityObject other)
{ {
UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, Ent.getLocation(), 0, 0, 0, 0, 1);
Ent.getWorld().playSound(Ent.getLocation(), Sound.EXPLODE, 0.3f, 1f);
Ent.remove(); Ent.remove();
UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, Ent.getLocation(), 0, 0, 0, 0, 1); }
@Override
public boolean CanCollide(GravityObject other)
{
return false;
} }
} }

View File

@ -1,5 +1,7 @@
package nautilus.game.arcade.game.games.gravity.objects; package nautilus.game.arcade.game.games.gravity.objects;
import mineplex.core.common.util.UtilParticle;
import mineplex.core.common.util.UtilParticle.ParticleType;
import nautilus.game.arcade.game.games.gravity.Gravity; import nautilus.game.arcade.game.games.gravity.Gravity;
import nautilus.game.arcade.game.games.gravity.GravityObject; import nautilus.game.arcade.game.games.gravity.GravityObject;
@ -12,6 +14,18 @@ public class GravityDebris extends GravityObject
{ {
super(host, ent, mass, 2, vel); super(host, ent, mass, 2, vel);
CollideDelay = System.currentTimeMillis() + 250; CollideDelay = System.currentTimeMillis() + 500;
}
@Override
public void CustomCollide(GravityObject other)
{
Ent.remove();
UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, Ent.getLocation(), 0, 0, 0, 0, 1);
}
public boolean CanCollide(GravityObject other)
{
return !(other instanceof GravityDebris);
} }
} }

View File

@ -1,13 +1,10 @@
package nautilus.game.arcade.game.games.gravity.objects; package nautilus.game.arcade.game.games.gravity.objects;
import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.HashSet; import java.util.HashSet;
import mineplex.core.common.util.F; import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilAlg;
import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilBlock;
import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilParticle;
import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilPlayer;
import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilTime;
@ -17,7 +14,6 @@ import nautilus.game.arcade.game.games.gravity.Gravity;
import nautilus.game.arcade.game.games.gravity.GravityObject; import nautilus.game.arcade.game.games.gravity.GravityObject;
import org.bukkit.Effect; import org.bukkit.Effect;
import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.Sound; import org.bukkit.Sound;
import org.bukkit.block.Block; import org.bukkit.block.Block;
@ -33,6 +29,8 @@ public class GravityPlayer extends GravityObject
public GravityPlayer(Gravity host, Entity ent, double mass, Vector vel) public GravityPlayer(Gravity host, Entity ent, double mass, Vector vel)
{ {
super(host, ent, mass, 2, vel); super(host, ent, mass, 2, vel);
SetMovingBat(false);
} }
@Override @Override
@ -79,8 +77,6 @@ public class GravityPlayer extends GravityObject
public void AutoGrab() public void AutoGrab()
{ {
//AntiClip();
if (Vel.length() == 0) if (Vel.length() == 0)
return; return;
@ -101,34 +97,18 @@ public class GravityPlayer extends GravityObject
//Effect //Effect
Ent.getWorld().playEffect(Ent.getLocation(), Effect.STEP_SOUND, 1); Ent.getWorld().playEffect(Ent.getLocation(), Effect.STEP_SOUND, 1);
//Bat
SetMovingBat(false);
//UtilPlayer.message(Ent, "You grabbed onto a Block"); //UtilPlayer.message(Ent, "You grabbed onto a Block");
} }
public void AntiClip()
{
if (!NearBlock() || Vel.length() > 0.05)
return;
Location target = Base.getLocation().getBlock().getLocation().add(0.5, 0.5, 0.5);
target.setY(Base.getLocation().getY());
if (UtilMath.offset(Base.getLocation(), target) > 0.25)
{
this.AddVelocity(UtilAlg.getTrajectory(Base.getLocation(), target).multiply(0.05), 0.05);
}
else
{
Vel.multiply(0);
Base.setVelocity(new Vector(0,0,0));
}
}
public void KickOff(Player player) public void KickOff(Player player)
{ {
if (!Ent.equals(player)) if (!Ent.equals(player))
return; return;
if (!NearBlock()) if (!Bat.isSitting() && !NearBlock())
return; return;
GrabDelay = System.currentTimeMillis(); GrabDelay = System.currentTimeMillis();
@ -157,9 +137,6 @@ public class GravityPlayer extends GravityObject
if (!player.isBlocking()) if (!player.isBlocking())
return; return;
if (player.getItemInHand().getType() != Material.IRON_SWORD)
return;
if (player.getExp() <= 0) if (player.getExp() <= 0)
{ {
if (Recharge.Instance.use(player, "Fuel", 1000, false)) if (Recharge.Instance.use(player, "Fuel", 1000, false))
@ -215,4 +192,10 @@ public class GravityPlayer extends GravityObject
UtilPlayer.message(Ent, F.main("Game", "Get more Oxygen from the Emerald Blocks!")); UtilPlayer.message(Ent, F.main("Game", "Get more Oxygen from the Emerald Blocks!"));
} }
} }
@Override
public void CustomCollide(GravityObject other)
{
UtilPlayer.health((Player)Ent, -1);
}
} }

View File

@ -147,6 +147,18 @@ public class HungerGames extends SoloGame
"Last tribute alive wins!" "Last tribute alive wins!"
}); });
_help = new String[]
{
C.cGreen + "Use a Compass to find and kill enemies!",
C.cAqua + "Crouch to become invisible to Compass tracking!",
C.cGreen + "Avoid the Deep Freeze at all costs!",
C.cAqua + "Use TNT & Tripwires to make traps!",
C.cGreen + "You lose Speed 2 at start of game if you attack.",
C.cAqua + "Avoid enemies who have better gear than you!",
C.cGreen + "Compass finds Supply Drops during night time.",
C.cAqua + "Compass finds Players during day time.",
};
Manager.GetAntiStack().SetEnabled(false); Manager.GetAntiStack().SetEnabled(false);
this.WorldTimeSet = 0; this.WorldTimeSet = 0;
@ -1610,38 +1622,4 @@ public class HungerGames extends SoloGame
{ {
_redChunks.remove(event.getPlayer()); _redChunks.remove(event.getPlayer());
} }
private long _helpTimer = 0;
private int _helpIndex = 0;
private String[] _help = new String[]
{
C.cGreen + "Use a Compass to find and kill enemies!",
C.cAqua + "Crouch to become invisible to Compass tracking!",
C.cGreen + "Avoid the Deep Freeze at all costs!",
C.cAqua + "Use TNT & Tripwires to make traps!",
C.cGreen + "You lose Speed 2 at start of game if you attack.",
C.cAqua + "Avoid enemies who have better gear than you!",
C.cGreen + "Compass finds Supply Drops during night time.",
C.cAqua + "Compass finds Players during day time.",
};
@EventHandler
public void StateUpdate(UpdateEvent event)
{
if (event.getType() != UpdateType.SEC)
return;
if (this.GetState() != GameState.Recruit)
return;
if (!UtilTime.elapsed(_helpTimer, 8000))
return;
_helpTimer = System.currentTimeMillis();
for (Player player : UtilServer.getPlayers())
UtilPlayer.message(player, C.cWhite + C.Bold + "TIP " + ChatColor.RESET + _help[_helpIndex]);
_helpIndex = (_helpIndex + 1)%_help.length;
}
} }