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,8 +254,7 @@ 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"),
new GameMode(SmashDom.class, GameType.ChampionsDominate, "Smash Dominate"), new GameMode(SmashDom.class, GameType.ChampionsDominate, "Smash Dominate"),

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,325 +49,173 @@ 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 =
public Runner(ArcadeManager manager) {
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)
{ {
this(manager, GameType.Runner); super(manager, GameType.Runner, new Kit[]
{
new KitLeaper(manager),
new KitArcher(manager),
new KitFrosty(manager)
}, DESCRIPTION);
registerStatTrackers(new DistanceTraveledStatTracker(this, "MarathonRunner")); DamagePvP = false;
HungerSet = 20;
registerChatStats( WorldWaterDamage = 4;
new ChatStatData("MarathonRunner", "Distance ran", true), PrepareFreeze = false;
BlankLine,
new ChatStatData("kit", "Kit", true)
);
}
public Runner(ArcadeManager manager, GameType type)
{
super(manager, type,
new Kit[]
{
new KitLeaper(manager),
new KitArcher(manager),
new KitFrosty(manager)
},
new String[]
{
"Blocks fall from underneath you",
"Keep running to stay alive",
"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);
antiHack.addIgnoredCheck(HeadRoll.class); antiHack.addIgnoredCheck(HeadRoll.class);
} }
@EventHandler @EventHandler
public void ArrowDamage(ProjectileHitEvent event) public void arrowDamage(ProjectileHitEvent event)
{ {
if (!(event.getEntity() instanceof Arrow)) Entity entity = event.getEntity();
return;
if (!(entity instanceof Arrow) || !IsLive())
final Arrow arrow = (Arrow)event.getEntity();
Manager.getPlugin().getServer().getScheduler().scheduleSyncDelayedTask(Manager.getPlugin(), new Runnable()
{ {
public void run() return;
}
Manager.runSyncLater(() ->
{
Block block = UtilEnt.getHitBlock(entity);
double radius = 2.5;
for (Block other : UtilBlock.getInRadius(block.getLocation().add(0.5, 0.5, 0.5), radius).keySet())
{ {
try addBlock(other);
{
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;
for (Block other : UtilBlock.getInRadius(block.getLocation().add(0.5, 0.5, 0.5), radius).keySet())
{
AddBlock(other);
}
arrow.remove();
}
catch (Exception e)
{
e.printStackTrace();
}
} }
entity.remove();
}, 0); }, 0);
} }
public void AddBlock(Block block) private void addBlock(Block block)
{ {
if (block == null || block.getTypeId() == 0 || block.getTypeId() == 7 || block.isLiquid()) if (block == null || block.getType() == Material.AIR || block.getType() == Material.BEDROCK || block.isLiquid() || block.getRelative(BlockFace.UP).getTypeId() != 0 || _blocks.containsKey(block))
{
return; return;
}
if (block.getRelative(BlockFace.UP).getTypeId() != 0)
return;
if (_blocks.containsKey(block))
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) if (event.getType() != UpdateType.TICK || !IsLive())
{
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;
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 x = min.getBlockX(); x <= max.getBlockX(); 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))
continue; if (!UtilTime.elapsed(time, BLOCK_DECAY))
{
//Fall return false;
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 (!(ent instanceof FallingBlock)) if (!(entity instanceof FallingBlock))
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();
}
@Override
public void Collide(LivingEntity target, Block block, ProjectileUser data)
{
if (target == null)
return;
if (target instanceof Player)
{ {
if (!Manager.GetGame().IsAlive((Player)target)) return;
{
return;
}
if (target.getLocation().getY() > data.getThrown().getLocation().getY() + 0.5)
{
return;
}
} }
//Damage Event
Manager.GetDamage().NewDamageEvent(target, data.getThrower(), null,
DamageCause.ENTITY_ATTACK, 6, true, true, false,
"Falling Block", "Falling Block");
BlockSmash(data.getThrown()); if (Math.random() < 0.3)
} {
FallingBlock block = (FallingBlock) entity;
public HashMap<Block, Long> getBlocks() block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, Material.REDSTONE_BLOCK);
{ }
return _blocks;
entity.remove();
} }
@Override @Override
public void Idle(ProjectileUser data) public void Collide(LivingEntity target, Block block, ProjectileUser data)
{
if (target == null || UtilPlayer.isSpectator(target) || target.getLocation().getY() > data.getThrown().getLocation().getY() + 0.5)
{
return;
}
Manager.GetDamage().NewDamageEvent(target, data.getThrower(), null, DamageCause.ENTITY_ATTACK, 6, true, true, false, "Falling Block", "Falling Block");
blockSmash(data.getThrown());
}
@Override
public void Idle(ProjectileUser data)
{ {
} }
@Override @Override
public void Expire(ProjectileUser data) public void Expire(ProjectileUser data)
{ {
data.getThrown().remove();
} }
@Override @Override
public void ChunkUnload(ProjectileUser data) public void ChunkUnload(ProjectileUser data)
{ {

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";
}
}