This commit is contained in:
Sam 2018-04-30 13:42:58 +01:00 committed by Alexander Meech
parent 41fdde2c22
commit bd1d543344
6 changed files with 168 additions and 400 deletions

View File

@ -27,6 +27,7 @@ import org.bukkit.block.Jukebox;
import org.bukkit.block.Skull; import org.bukkit.block.Skull;
import org.bukkit.craftbukkit.v1_8_R3.CraftWorld; import org.bukkit.craftbukkit.v1_8_R3.CraftWorld;
import org.bukkit.craftbukkit.v1_8_R3.inventory.CraftItemStack; import org.bukkit.craftbukkit.v1_8_R3.inventory.CraftItemStack;
import org.bukkit.entity.Entity;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.BannerMeta; import org.bukkit.inventory.meta.BannerMeta;
import org.bukkit.inventory.meta.SkullMeta; import org.bukkit.inventory.meta.SkullMeta;

View File

@ -54,6 +54,8 @@ import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason;
import org.bukkit.metadata.FixedMetadataValue; import org.bukkit.metadata.FixedMetadataValue;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
import mineplex.core.common.Pair;
public class UtilEnt public class UtilEnt
{ {
public static final String FLAG_NO_REMOVE = "noremove"; public static final String FLAG_NO_REMOVE = "noremove";
@ -1130,4 +1132,47 @@ public class UtilEnt
{ {
((CraftEntity) entity).getHandle().setPositionRotation(location.getX(), location.getY(), location.getZ(), location.getYaw(), location.getPitch()); ((CraftEntity) entity).getHandle().setPositionRotation(location.getX(), location.getY(), location.getZ(), location.getYaw(), location.getPitch());
} }
public static Pair<Location, Location> getSideStandingBox(Entity entity)
{
Location location = entity.getLocation();
double xMod = location.getX() % 1;
double zMod = location.getZ() % 1;
if (location.getX() < 0)
{
xMod += 1;
}
if (location.getZ() < 0)
{
zMod += 1;
}
int xMin = 0;
int xMax = 0;
int zMin = 0;
int zMax = 0;
if (xMod < 0.3)
{
xMin = -1;
}
else if (xMod > 0.7)
{
xMax = 1;
}
if (zMod < 0.3)
{
zMin = -1;
}
else if (zMod > 0.7)
{
zMax = 1;
}
return Pair.create(new Location(location.getWorld(), xMin, 0, zMin), new Location(location.getWorld(), xMax, 0, zMax));
}
} }

View File

@ -72,7 +72,6 @@ import nautilus.game.arcade.game.games.quiver.modes.BunnyHop;
import nautilus.game.arcade.game.games.quiver.modes.UltimateOITQ; import nautilus.game.arcade.game.games.quiver.modes.UltimateOITQ;
import nautilus.game.arcade.game.games.rings.ElytraRings; import nautilus.game.arcade.game.games.rings.ElytraRings;
import nautilus.game.arcade.game.games.runner.Runner; import nautilus.game.arcade.game.games.runner.Runner;
import nautilus.game.arcade.game.games.runner.modes.FasterThanLight;
import nautilus.game.arcade.game.games.sheep.SheepGame; import nautilus.game.arcade.game.games.sheep.SheepGame;
import nautilus.game.arcade.game.games.sheep.modes.EweHeroes; import nautilus.game.arcade.game.games.sheep.modes.EweHeroes;
import nautilus.game.arcade.game.games.sheep.modes.OverpoweredSheepQuest; import nautilus.game.arcade.game.games.sheep.modes.OverpoweredSheepQuest;
@ -255,7 +254,6 @@ public enum GameType
new GameMode(SheepMania.class, GameType.Sheep, "Sheep Mania"), new GameMode(SheepMania.class, GameType.Sheep, "Sheep Mania"),
new GameMode(SmashSheep.class, GameType.Sheep, "Smash Sheep"), new GameMode(SmashSheep.class, GameType.Sheep, "Smash Sheep"),
new GameMode(OverpoweredSheepQuest.class, GameType.Sheep, "OP Sheep Quest"), new GameMode(OverpoweredSheepQuest.class, GameType.Sheep, "OP Sheep Quest"),
new GameMode(FasterThanLight.class, GameType.Runner, "Faster Than Light"),
new GameMode(BunnyHop.class, GameType.Quiver, "Bunny Hop"), new GameMode(BunnyHop.class, GameType.Quiver, "Bunny Hop"),
new GameMode(UltimateOITQ.class, GameType.Quiver, "Ultimate OITQ"), new GameMode(UltimateOITQ.class, GameType.Quiver, "Ultimate OITQ"),
new GameMode(Countdown.class, GameType.HideSeek, "Countdown"), new GameMode(Countdown.class, GameType.HideSeek, "Countdown"),

View File

@ -80,6 +80,7 @@ public class Micro extends TeamGame
.register(this); .register(this);
new MapCrumbleModule() new MapCrumbleModule()
.setRate(3)
.register(this); .register(this);
registerStatTrackers( registerStatTrackers(

View File

@ -1,17 +1,13 @@
package nautilus.game.arcade.game.games.runner; package nautilus.game.arcade.game.games.runner;
import java.lang.reflect.Field;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.Map;
import java.util.Iterator;
import net.minecraft.server.v1_8_R3.EntityArrow;
import org.bukkit.Effect; import org.bukkit.Effect;
import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.block.BlockFace; import org.bukkit.block.BlockFace;
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftArrow;
import org.bukkit.entity.Arrow; import org.bukkit.entity.Arrow;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.FallingBlock; import org.bukkit.entity.FallingBlock;
@ -28,8 +24,12 @@ import com.mineplex.anticheat.checks.move.Speed;
import mineplex.core.Managers; import mineplex.core.Managers;
import mineplex.core.antihack.AntiHack; import mineplex.core.antihack.AntiHack;
import mineplex.core.common.Pair;
import mineplex.core.common.util.C;
import mineplex.core.common.util.MapUtil; import mineplex.core.common.util.MapUtil;
import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilBlock;
import mineplex.core.common.util.UtilEnt;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilTime;
import mineplex.core.projectile.IThrown; import mineplex.core.projectile.IThrown;
import mineplex.core.projectile.ProjectileUser; import mineplex.core.projectile.ProjectileUser;
@ -49,53 +49,45 @@ import nautilus.game.arcade.stats.DistanceTraveledStatTracker;
public class Runner extends SoloGame implements IThrown public class Runner extends SoloGame implements IThrown
{ {
private HashMap<Block, Long> _blocks = new HashMap<Block, Long>();
private static final String[] DESCRIPTION =
{
C.cGreen + "Blocks Fall" + C.Reset + " from underneath you.",
C.cAqua + "Keep Running" + C.Reset + " to stay alive.",
"Avoid " + C.cRed + "Falling Blocks" + C.Reset + " from above.",
C.cYellow + "Last Player" + C.Reset + " alive wins!"
};
private static final long BLOCK_DECAY = 600;
private static final long BLOCK_LIFETIME = 1200;
private final Map<Block, Long> _blocks = new HashMap<>();
public Runner(ArcadeManager manager) public Runner(ArcadeManager manager)
{ {
this(manager, GameType.Runner); super(manager, GameType.Runner, new Kit[]
registerStatTrackers(new DistanceTraveledStatTracker(this, "MarathonRunner"));
registerChatStats(
new ChatStatData("MarathonRunner", "Distance ran", true),
BlankLine,
new ChatStatData("kit", "Kit", true)
);
}
public Runner(ArcadeManager manager, GameType type)
{
super(manager, type,
new Kit[]
{ {
new KitLeaper(manager), new KitLeaper(manager),
new KitArcher(manager), new KitArcher(manager),
new KitFrosty(manager) new KitFrosty(manager)
}, }, DESCRIPTION);
new String[] DamagePvP = false;
{ HungerSet = 20;
"Blocks fall from underneath you", WorldWaterDamage = 4;
"Keep running to stay alive", PrepareFreeze = false;
"Avoid falling blocks from above",
"Last player alive wins!"
});
this.DamagePvP = false;
this.HungerSet = 20;
this.WorldWaterDamage = 4;
this.PrepareFreeze = false;
new CompassModule() new CompassModule()
.setGiveCompass(true)
.setGiveCompassToSpecs(true)
.setGiveCompassToAlive(false)
.register(this); .register(this);
this.GlideCheckEnabled = false; registerStatTrackers(
new DistanceTraveledStatTracker(this, "MarathonRunner")
);
registerChatStats(
new ChatStatData("MarathonRunner", "Distance ran", true)
);
GlideCheckEnabled = false;
AntiHack antiHack = Managers.get(AntiHack.class); AntiHack antiHack = Managers.get(AntiHack.class);
antiHack.addIgnoredCheck(Speed.class); antiHack.addIgnoredCheck(Speed.class);
antiHack.addIgnoredCheck(Glide.class); antiHack.addIgnoredCheck(Glide.class);
@ -103,257 +95,113 @@ public class Runner extends SoloGame implements IThrown
} }
@EventHandler @EventHandler
public void ArrowDamage(ProjectileHitEvent event) public void arrowDamage(ProjectileHitEvent event)
{
Entity entity = event.getEntity();
if (!(entity instanceof Arrow) || !IsLive())
{ {
if (!(event.getEntity() instanceof Arrow))
return; return;
}
final Arrow arrow = (Arrow)event.getEntity(); Manager.runSyncLater(() ->
Manager.getPlugin().getServer().getScheduler().scheduleSyncDelayedTask(Manager.getPlugin(), new Runnable()
{ {
public void run() Block block = UtilEnt.getHitBlock(entity);
{
try
{
EntityArrow entityArrow = ((CraftArrow)arrow).getHandle();
Field fieldX = EntityArrow.class.getDeclaredField("d");
Field fieldY = EntityArrow.class.getDeclaredField("e");
Field fieldZ = EntityArrow.class.getDeclaredField("f");
fieldX.setAccessible(true);
fieldY.setAccessible(true);
fieldZ.setAccessible(true);
int x = fieldX.getInt(entityArrow);
int y = fieldY.getInt(entityArrow);
int z = fieldZ.getInt(entityArrow);
Block block = arrow.getWorld().getBlockAt(x, y, z);
double radius = 2.5; double radius = 2.5;
for (Block other : UtilBlock.getInRadius(block.getLocation().add(0.5, 0.5, 0.5), radius).keySet()) for (Block other : UtilBlock.getInRadius(block.getLocation().add(0.5, 0.5, 0.5), radius).keySet())
{ {
AddBlock(other); addBlock(other);
} }
arrow.remove(); entity.remove();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}, 0); }, 0);
} }
public void AddBlock(Block block) private void addBlock(Block block)
{
if (block == null || block.getType() == Material.AIR || block.getType() == Material.BEDROCK || block.isLiquid() || block.getRelative(BlockFace.UP).getTypeId() != 0 || _blocks.containsKey(block))
{ {
if (block == null || block.getTypeId() == 0 || block.getTypeId() == 7 || block.isLiquid())
return;
if (block.getRelative(BlockFace.UP).getTypeId() != 0)
return;
if (_blocks.containsKey(block))
return; return;
}
_blocks.put(block, System.currentTimeMillis()); _blocks.put(block, System.currentTimeMillis());
MapUtil.QuickChangeBlockAt(block.getLocation(), Material.STAINED_CLAY, (byte) 14);
block.setTypeIdAndData(159, (byte) 14, false);
} }
@EventHandler @EventHandler
public void BlockBreak(UpdateEvent event) public void blockBreak(UpdateEvent event)
{
if (event.getType() != UpdateType.TICK || !IsLive())
{ {
if (event.getType() != UpdateType.TICK)
return; return;
}
if (!IsLive())
return;
//Add Blocks
for (Player player : GetPlayers(true)) for (Player player : GetPlayers(true))
{ {
//Side Standing Pair<Location, Location> box = UtilEnt.getSideStandingBox(player);
double xMod = player.getLocation().getX() % 1; Location min = box.getLeft(), max = box.getRight();
if (player.getLocation().getX() < 0)
xMod += 1;
double zMod = player.getLocation().getZ() % 1; for (int x = min.getBlockX(); x <= max.getBlockX(); x++)
if (player.getLocation().getZ() < 0)
zMod += 1;
int xMin = 0;
int xMax = 0;
int zMin = 0;
int zMax = 0;
if (xMod < 0.3) xMin = -1;
if (xMod > 0.7) xMax = 1;
if (zMod < 0.3) zMin = -1;
if (zMod > 0.7) zMax = 1;
for (int x=xMin ; x<=xMax ; x++)
{ {
for (int z=zMin ; z<=zMax ; z++) for (int z = min.getBlockZ(); z <= max.getBlockZ(); z++)
{ {
AddBlock(player.getLocation().add(x, -0.5, z).getBlock()); addBlock(player.getLocation().add(x, -0.5, z).getBlock());
} }
} }
} }
//Decay _blocks.entrySet().removeIf(entry ->
HashSet<Block> readd = new HashSet<Block>();
Iterator<Block> blockIterator = _blocks.keySet().iterator();
while (blockIterator.hasNext())
{ {
Block block = blockIterator.next(); Block block = entry.getKey();
long time = entry.getValue();
if (!UtilTime.elapsed(_blocks.get(block), 600)) if (!UtilTime.elapsed(time, BLOCK_DECAY))
continue; {
return false;
}
//Fall
int id = block.getTypeId();
byte data = block.getData();
MapUtil.QuickChangeBlockAt(block.getLocation(), Material.AIR); MapUtil.QuickChangeBlockAt(block.getLocation(), Material.AIR);
FallingBlock ent = block.getWorld().spawnFallingBlock(block.getLocation(), id, data); FallingBlock ent = block.getWorld().spawnFallingBlock(block.getLocation(), Material.STAINED_CLAY, (byte) 14);
Manager.GetProjectile().AddThrow(ent, null, this, -1, true, false, false, false, 0.3f); Manager.GetProjectile().AddThrow(ent, null, this, BLOCK_LIFETIME, true, false, false, false, 0.3F);
return true;
blockIterator.remove(); });
}
//
//// if (!UtilTime.elapsed(_blocks.get(block), 120))
//// continue;
//
// blockIterator.remove();
//
// //Degrade
// if (block.getTypeId() == 98)
// {
// if (block.getData() == 0)
// {
// readd.add(block);
// block.setData((byte)2);
// continue;
// }
// }
//
// //Degrade
// if (block.getTypeId() == 35 || block.getTypeId() == 159)
// {
// if (block.getData() == 3)
// {
// readd.add(block);
// block.setData((byte)5);
// continue;
// }
//
// if (block.getData() == 5)
// {
// readd.add(block);
// block.setData((byte)4);
// continue;
// }
//
// if (block.getData() == 4)
// {
// readd.add(block);
// block.setData((byte)1);
// continue;
// }
//
// if (block.getData() == 1)
// {
// readd.add(block);
// block.setData((byte)14);
// continue;
// }
//
// else if (block.getData() != 14)
// {
// readd.add(block);
// block.setData((byte)3);
// continue;
// }
// }
//
// //Fall
// int id = block.getTypeId();
// byte data = block.getData();
// MapUtil.QuickChangeBlockAt(block.getLocation(), Material.AIR);
// FallingBlock ent = block.getWorld().spawnFallingBlock(block.getLocation(), id, data);
// Manager.GetProjectile().AddThrow(ent, null, this, -1, true, false, false, false, 1d);
// }
//
// //Re-add
// for (Block block : readd)
// {
// _blocks.put(block, System.currentTimeMillis());
// }
} }
@EventHandler @EventHandler
public void BlockForm(EntityChangeBlockEvent event) public void blockForm(EntityChangeBlockEvent event)
{ {
BlockSmash(event.getEntity()); blockSmash(event.getEntity());
event.setCancelled(true); event.setCancelled(true);
} }
public void BlockSmash(Entity ent) private void blockSmash(Entity entity)
{
if (!(entity instanceof FallingBlock))
{ {
if (!(ent instanceof FallingBlock))
return; return;
FallingBlock block = (FallingBlock)ent;
int id = block.getBlockId();
if (id == 35 || id == 159)
id = 152;
block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, id);
ent.remove();
} }
if (Math.random() < 0.3)
{
FallingBlock block = (FallingBlock) entity;
block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, Material.REDSTONE_BLOCK);
}
entity.remove();
}
@Override @Override
public void Collide(LivingEntity target, Block block, ProjectileUser data) public void Collide(LivingEntity target, Block block, ProjectileUser data)
{ {
if (target == null) if (target == null || UtilPlayer.isSpectator(target) || target.getLocation().getY() > data.getThrown().getLocation().getY() + 0.5)
return;
if (target instanceof Player)
{
if (!Manager.GetGame().IsAlive((Player)target))
{ {
return; return;
} }
if (target.getLocation().getY() > data.getThrown().getLocation().getY() + 0.5) Manager.GetDamage().NewDamageEvent(target, data.getThrower(), null, DamageCause.ENTITY_ATTACK, 6, true, true, false, "Falling Block", "Falling Block");
{ blockSmash(data.getThrown());
return;
}
}
//Damage Event
Manager.GetDamage().NewDamageEvent(target, data.getThrower(), null,
DamageCause.ENTITY_ATTACK, 6, true, true, false,
"Falling Block", "Falling Block");
BlockSmash(data.getThrown());
}
public HashMap<Block, Long> getBlocks()
{
return _blocks;
} }
@Override @Override
@ -365,7 +213,7 @@ public class Runner extends SoloGame implements IThrown
@Override @Override
public void Expire(ProjectileUser data) public void Expire(ProjectileUser data)
{ {
data.getThrown().remove();
} }
@Override @Override

View File

@ -1,125 +0,0 @@
package nautilus.game.arcade.game.games.runner.modes;
import java.util.HashSet;
import java.util.Iterator;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.entity.FallingBlock;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
import mineplex.core.common.util.MapUtil;
import mineplex.core.common.util.UtilTime;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import nautilus.game.arcade.ArcadeManager;
import nautilus.game.arcade.game.games.runner.Runner;
/**
* GottaGoFast gamemode for Runner
*
* @author xXVevzZXx
*/
public class FasterThanLight extends Runner
{
public FasterThanLight(ArcadeManager manager)
{
super(manager);
}
@EventHandler
public void speed(UpdateEvent event)
{
if (!IsLive())
return;
if (event.getType() != UpdateType.SEC)
return;
for (Player player : GetPlayers(true))
{
player.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, 40, 2, true, true),
true);
}
}
@Override
@EventHandler
public void BlockBreak(UpdateEvent event)
{
if (event.getType() != UpdateType.TICK)
return;
if (!IsLive())
return;
//Add Blocks
for (Player player : GetPlayers(true))
{
//Side Standing
double xMod = player.getLocation().getX() % 1;
if (player.getLocation().getX() < 0)
xMod += 1;
double zMod = player.getLocation().getZ() % 1;
if (player.getLocation().getZ() < 0)
zMod += 1;
int xMin = 0;
int xMax = 0;
int zMin = 0;
int zMax = 0;
if (xMod < 0.3)
xMin = -1;
if (xMod > 0.7)
xMax = 1;
if (zMod < 0.3)
zMin = -1;
if (zMod > 0.7)
zMax = 1;
for (int x = xMin; x <= xMax; x++)
{
for (int z = zMin; z <= zMax; z++)
{
AddBlock(player.getLocation().add(x, -0.5, z).getBlock());
}
}
}
//Decay
HashSet<Block> readd = new HashSet<Block>();
Iterator<Block> blockIterator = getBlocks().keySet().iterator();
while (blockIterator.hasNext())
{
Block block = blockIterator.next();
if (!UtilTime.elapsed(getBlocks().get(block), 200))
continue;
//Fall
int id = block.getTypeId();
byte data = block.getData();
MapUtil.QuickChangeBlockAt(block.getLocation(), Material.AIR);
FallingBlock ent = block.getWorld().spawnFallingBlock(block.getLocation(), id, data);
Manager.GetProjectile().AddThrow(ent, null, this, -1, true, false, false, false, 0.3f);
blockIterator.remove();
}
}
@Override
public String GetMode()
{
return "Faster Than Light";
}
}