|
|
|
@ -5,6 +5,52 @@ import java.util.HashSet;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.Map.Entry;
|
|
|
|
|
|
|
|
|
|
import org.bukkit.Bukkit;
|
|
|
|
|
import org.bukkit.ChatColor;
|
|
|
|
|
import org.bukkit.Effect;
|
|
|
|
|
import org.bukkit.GameMode;
|
|
|
|
|
import org.bukkit.Location;
|
|
|
|
|
import org.bukkit.Material;
|
|
|
|
|
import org.bukkit.Sound;
|
|
|
|
|
import org.bukkit.block.Block;
|
|
|
|
|
import org.bukkit.block.BlockState;
|
|
|
|
|
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
|
|
|
|
import org.bukkit.entity.ArmorStand;
|
|
|
|
|
import org.bukkit.entity.Entity;
|
|
|
|
|
import org.bukkit.entity.EntityType;
|
|
|
|
|
import org.bukkit.entity.Item;
|
|
|
|
|
import org.bukkit.entity.Player;
|
|
|
|
|
import org.bukkit.event.EventHandler;
|
|
|
|
|
import org.bukkit.event.EventPriority;
|
|
|
|
|
import org.bukkit.event.block.BlockBurnEvent;
|
|
|
|
|
import org.bukkit.event.block.BlockFadeEvent;
|
|
|
|
|
import org.bukkit.event.block.BlockFormEvent;
|
|
|
|
|
import org.bukkit.event.block.BlockFromToEvent;
|
|
|
|
|
import org.bukkit.event.block.BlockGrowEvent;
|
|
|
|
|
import org.bukkit.event.block.BlockPhysicsEvent;
|
|
|
|
|
import org.bukkit.event.block.BlockPlaceEvent;
|
|
|
|
|
import org.bukkit.event.block.BlockSpreadEvent;
|
|
|
|
|
import org.bukkit.event.block.LeavesDecayEvent;
|
|
|
|
|
import org.bukkit.event.entity.EntityChangeBlockEvent;
|
|
|
|
|
import org.bukkit.event.entity.EntityCombustEvent;
|
|
|
|
|
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
|
|
|
|
import org.bukkit.event.entity.ItemMergeEvent;
|
|
|
|
|
import org.bukkit.event.inventory.InventoryPickupItemEvent;
|
|
|
|
|
import org.bukkit.event.player.PlayerBucketEmptyEvent;
|
|
|
|
|
import org.bukkit.event.player.PlayerBucketFillEvent;
|
|
|
|
|
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
|
|
|
|
|
import org.bukkit.event.player.PlayerInteractEntityEvent;
|
|
|
|
|
import org.bukkit.event.player.PlayerInteractEvent;
|
|
|
|
|
import org.bukkit.event.player.PlayerMoveEvent;
|
|
|
|
|
import org.bukkit.event.player.PlayerPickupItemEvent;
|
|
|
|
|
import org.bukkit.event.player.PlayerQuitEvent;
|
|
|
|
|
import org.bukkit.event.player.PlayerToggleFlightEvent;
|
|
|
|
|
import org.bukkit.event.world.StructureGrowEvent;
|
|
|
|
|
import org.bukkit.material.Bed;
|
|
|
|
|
import org.bukkit.potion.PotionEffect;
|
|
|
|
|
import org.bukkit.potion.PotionEffectType;
|
|
|
|
|
import org.bukkit.util.Vector;
|
|
|
|
|
|
|
|
|
|
import mineplex.core.common.Rank;
|
|
|
|
|
import mineplex.core.common.util.C;
|
|
|
|
|
import mineplex.core.common.util.F;
|
|
|
|
@ -45,52 +91,8 @@ import nautilus.game.arcade.game.games.speedbuilders.stattrackers.SpeediestBuild
|
|
|
|
|
import nautilus.game.arcade.kit.Kit;
|
|
|
|
|
import nautilus.game.arcade.managers.chat.ChatStatData;
|
|
|
|
|
import nautilus.game.arcade.stats.BlockPlaceStatTracker;
|
|
|
|
|
|
|
|
|
|
import net.minecraft.server.v1_8_R3.PacketPlayOutGameStateChange;
|
|
|
|
|
|
|
|
|
|
import org.bukkit.Bukkit;
|
|
|
|
|
import org.bukkit.ChatColor;
|
|
|
|
|
import org.bukkit.Effect;
|
|
|
|
|
import org.bukkit.GameMode;
|
|
|
|
|
import org.bukkit.Location;
|
|
|
|
|
import org.bukkit.Material;
|
|
|
|
|
import org.bukkit.Sound;
|
|
|
|
|
import org.bukkit.block.Block;
|
|
|
|
|
import org.bukkit.block.BlockState;
|
|
|
|
|
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
|
|
|
|
import org.bukkit.entity.ArmorStand;
|
|
|
|
|
import org.bukkit.entity.Entity;
|
|
|
|
|
import org.bukkit.entity.EntityType;
|
|
|
|
|
import org.bukkit.entity.Item;
|
|
|
|
|
import org.bukkit.entity.Player;
|
|
|
|
|
import org.bukkit.event.EventHandler;
|
|
|
|
|
import org.bukkit.event.EventPriority;
|
|
|
|
|
import org.bukkit.event.block.BlockBurnEvent;
|
|
|
|
|
import org.bukkit.event.block.BlockFadeEvent;
|
|
|
|
|
import org.bukkit.event.block.BlockFormEvent;
|
|
|
|
|
import org.bukkit.event.block.BlockFromToEvent;
|
|
|
|
|
import org.bukkit.event.block.BlockGrowEvent;
|
|
|
|
|
import org.bukkit.event.block.BlockPhysicsEvent;
|
|
|
|
|
import org.bukkit.event.block.BlockPlaceEvent;
|
|
|
|
|
import org.bukkit.event.block.BlockSpreadEvent;
|
|
|
|
|
import org.bukkit.event.block.LeavesDecayEvent;
|
|
|
|
|
import org.bukkit.event.entity.EntityChangeBlockEvent;
|
|
|
|
|
import org.bukkit.event.entity.EntityCombustEvent;
|
|
|
|
|
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
|
|
|
|
import org.bukkit.event.entity.ItemMergeEvent;
|
|
|
|
|
import org.bukkit.event.player.PlayerBucketEmptyEvent;
|
|
|
|
|
import org.bukkit.event.player.PlayerBucketFillEvent;
|
|
|
|
|
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
|
|
|
|
|
import org.bukkit.event.player.PlayerInteractEvent;
|
|
|
|
|
import org.bukkit.event.player.PlayerJoinEvent;
|
|
|
|
|
import org.bukkit.event.player.PlayerPickupItemEvent;
|
|
|
|
|
import org.bukkit.event.player.PlayerQuitEvent;
|
|
|
|
|
import org.bukkit.event.world.StructureGrowEvent;
|
|
|
|
|
import org.bukkit.material.Bed;
|
|
|
|
|
import org.bukkit.potion.PotionEffect;
|
|
|
|
|
import org.bukkit.potion.PotionEffectType;
|
|
|
|
|
import org.bukkit.util.Vector;
|
|
|
|
|
|
|
|
|
|
public class SpeedBuilders extends SoloGame
|
|
|
|
|
{
|
|
|
|
|
private static final String GUARDIAN_NAME = "Gwen the Guardian";
|
|
|
|
@ -431,10 +433,10 @@ public class SpeedBuilders extends SoloGame
|
|
|
|
|
EndCheck();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@EventHandler(priority = EventPriority.MONITOR)
|
|
|
|
|
public void teamGen(GameStateChangeEvent event)
|
|
|
|
|
@EventHandler(priority = EventPriority.LOWEST)
|
|
|
|
|
public void onPrepare(GameStateChangeEvent event)
|
|
|
|
|
{
|
|
|
|
|
if (event.GetState() != GameState.Live)
|
|
|
|
|
if (event.GetState() != GameState.Prepare)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
//Add 1 spawn so it doesn't freak out
|
|
|
|
@ -444,13 +446,6 @@ public class SpeedBuilders extends SoloGame
|
|
|
|
|
GameTeam guardians = new GameTeam(this, "Guardians", ChatColor.GRAY, spawns);
|
|
|
|
|
|
|
|
|
|
AddTeam(guardians);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@EventHandler(priority = EventPriority.LOWEST)
|
|
|
|
|
public void onPrepare(GameStateChangeEvent event)
|
|
|
|
|
{
|
|
|
|
|
if (event.GetState() != GameState.Prepare)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
spawnJudge();
|
|
|
|
|
//GUARDIAN LAZORZ WILL ROXORZ YOUR BOXORZ
|
|
|
|
@ -461,19 +456,21 @@ public class SpeedBuilders extends SoloGame
|
|
|
|
|
{
|
|
|
|
|
if (i >= WorldData.GetDataLocs("YELLOW").size())
|
|
|
|
|
{
|
|
|
|
|
Manager.addSpectator(players.get(i), true);
|
|
|
|
|
GetTeamList().get(0).RemovePlayer(players.get(i));
|
|
|
|
|
Manager.addSpectator(players.get(i), true);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@EventHandler
|
|
|
|
|
public void onLive(GameStateChangeEvent event)
|
|
|
|
|
{
|
|
|
|
|
if (!IsLive())
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (WorldData.GetDataLocs("YELLOW").size() < GetPlayers(true).size())
|
|
|
|
|
if (WorldData.GetDataLocs("YELLOW").size() < GetTeamList().get(0).GetPlayers(true).size())
|
|
|
|
|
{
|
|
|
|
|
Announce(C.Bold + "Too many players...");
|
|
|
|
|
SetState(GameState.End);
|
|
|
|
@ -491,7 +488,7 @@ public class SpeedBuilders extends SoloGame
|
|
|
|
|
|
|
|
|
|
HashSet<Location> usedBuildLocs = new HashSet<Location>();
|
|
|
|
|
|
|
|
|
|
for (Player player : GetPlayers(true))
|
|
|
|
|
for (Player player : GetTeamList().get(0).GetPlayers(true))
|
|
|
|
|
{
|
|
|
|
|
Location buildLoc = UtilAlg.findClosest(player.getLocation(), WorldData.GetDataLocs("YELLOW"));
|
|
|
|
|
Location spawnLoc = UtilAlg.findClosest(buildLoc, GetTeamList().get(0).GetSpawns());
|
|
|
|
@ -648,7 +645,7 @@ public class SpeedBuilders extends SoloGame
|
|
|
|
|
|
|
|
|
|
_perfectBuild.put(player, System.currentTimeMillis());
|
|
|
|
|
|
|
|
|
|
if (_perfectBuild.size() == GetTeamList().get(0).GetPlayers(false).size())
|
|
|
|
|
if (_perfectBuild.size() == _buildRecreations.size())
|
|
|
|
|
{
|
|
|
|
|
// Everyone has a perfect build
|
|
|
|
|
_allPerfect = true;
|
|
|
|
@ -734,12 +731,20 @@ public class SpeedBuilders extends SoloGame
|
|
|
|
|
{
|
|
|
|
|
for (RecreationData recreation : _buildRecreations.values())
|
|
|
|
|
{
|
|
|
|
|
Vector vec = player.getLocation().getDirection().multiply(-1);
|
|
|
|
|
Vector vec = UtilAlg.getTrajectory(recreation.getMidpoint(), player.getLocation());
|
|
|
|
|
|
|
|
|
|
if (UtilMath.offsetSquared(player.getLocation(), recreation.getMidpoint()) < 64)
|
|
|
|
|
{
|
|
|
|
|
Location tpLoc = recreation.getMidpoint().add(vec.clone().multiply(8));
|
|
|
|
|
tpLoc.setDirection(player.getLocation().getDirection());
|
|
|
|
|
|
|
|
|
|
//First tp out this combats hacked clients with anti-KB
|
|
|
|
|
player.teleport(tpLoc);
|
|
|
|
|
|
|
|
|
|
//Then apply velocity as normal
|
|
|
|
|
UtilAction.velocity(player, vec, 1.8, false, 0, 0.4, vec.length(), false);
|
|
|
|
|
|
|
|
|
|
player.playSound(player.getEyeLocation(), Sound.NOTE_PLING, 10F, 0.5F);
|
|
|
|
|
UtilAction.velocity(player, vec, 1.6, false, 0, 0.4, vec.length(), false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -1219,9 +1224,34 @@ public class SpeedBuilders extends SoloGame
|
|
|
|
|
if (!_buildRecreations.get(player).inBuildArea(event.getEntity().getLocation()))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
boolean hasMobType = false;
|
|
|
|
|
|
|
|
|
|
for (MobData mobData : _currentBuild.Mobs)
|
|
|
|
|
{
|
|
|
|
|
if (mobData.EntityType == event.getEntityType())
|
|
|
|
|
{
|
|
|
|
|
hasMobType = true;
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!hasMobType)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
_buildRecreations.get(player).addToDemolition(event.getEntity());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@EventHandler
|
|
|
|
|
public void stopBabyEgg(PlayerInteractEntityEvent event)
|
|
|
|
|
{
|
|
|
|
|
if (!IsLive())
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (event.getPlayer().getItemInHand().getType() == Material.MONSTER_EGG)
|
|
|
|
|
event.setCancelled(true);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@EventHandler
|
|
|
|
|
public void updateDemolitionBlocks(UpdateEvent event)
|
|
|
|
|
{
|
|
|
|
@ -1393,6 +1423,9 @@ public class SpeedBuilders extends SoloGame
|
|
|
|
|
if (!IsLive())
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
// Falling blocks disappear for some reason so we update to make it reappear
|
|
|
|
|
event.getBlock().getState().update(true, false);
|
|
|
|
|
|
|
|
|
|
event.setCancelled(true);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -1453,6 +1486,18 @@ public class SpeedBuilders extends SoloGame
|
|
|
|
|
|
|
|
|
|
@EventHandler
|
|
|
|
|
public void stopPhysics(BlockPhysicsEvent event)
|
|
|
|
|
{
|
|
|
|
|
if (!IsLive())
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (event.getBlock().isLiquid())
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
event.setCancelled(true);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@EventHandler
|
|
|
|
|
public void stopInventoryPickup(InventoryPickupItemEvent event)
|
|
|
|
|
{
|
|
|
|
|
if (!IsLive())
|
|
|
|
|
return;
|
|
|
|
@ -1567,34 +1612,6 @@ public class SpeedBuilders extends SoloGame
|
|
|
|
|
event.setCancelled(true);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//Add to guardians before arcade manager adds to spectator to trick it into thinking the player is "alive"
|
|
|
|
|
@EventHandler(priority = EventPriority.LOW)
|
|
|
|
|
public void joinAddGuardian(PlayerJoinEvent event)
|
|
|
|
|
{
|
|
|
|
|
if (!InProgress())
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
moveToGuardians(event.getPlayer(), false);
|
|
|
|
|
event.getPlayer().teleport(GetSpectatorLocation());
|
|
|
|
|
|
|
|
|
|
//We need to disguise a tick after
|
|
|
|
|
Manager.runSyncLater(new Runnable()
|
|
|
|
|
{
|
|
|
|
|
@Override
|
|
|
|
|
public void run()
|
|
|
|
|
{
|
|
|
|
|
DisguiseGuardian disguise = new DisguiseGuardian(event.getPlayer());
|
|
|
|
|
disguise.setName(C.cGray + event.getPlayer().getName());
|
|
|
|
|
disguise.setCustomNameVisible(true);
|
|
|
|
|
|
|
|
|
|
Manager.GetDisguise().disguise(disguise);
|
|
|
|
|
|
|
|
|
|
event.getPlayer().setAllowFlight(true);
|
|
|
|
|
event.getPlayer().setFlying(true);
|
|
|
|
|
}
|
|
|
|
|
}, 1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@EventHandler
|
|
|
|
|
public void setNextBuild(PlayerCommandPreprocessEvent event)
|
|
|
|
|
{
|
|
|
|
@ -1637,6 +1654,37 @@ public class SpeedBuilders extends SoloGame
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@EventHandler
|
|
|
|
|
public void moveSetFlight(PlayerMoveEvent event)
|
|
|
|
|
{
|
|
|
|
|
if (!IsLive())
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (_state != SpeedBuildersState.BUILDING)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (!GetTeamList().get(0).HasPlayer(event.getPlayer()))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (UtilEnt.isGrounded(event.getPlayer()) && !event.getPlayer().isFlying())
|
|
|
|
|
event.getPlayer().setAllowFlight(true);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@EventHandler
|
|
|
|
|
public void flightToggleJump(PlayerToggleFlightEvent event)
|
|
|
|
|
{
|
|
|
|
|
if (!GetTeamList().get(0).HasPlayer(event.getPlayer()))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
event.setCancelled(true);
|
|
|
|
|
|
|
|
|
|
event.getPlayer().setAllowFlight(false);
|
|
|
|
|
|
|
|
|
|
event.getPlayer().playSound(event.getPlayer().getEyeLocation(), Sound.GHAST_FIREBALL, 1f, 1f);
|
|
|
|
|
|
|
|
|
|
UtilAction.velocity(event.getPlayer(), new Vector(0, 1, 0));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void EndCheck()
|
|
|
|
|
{
|
|
|
|
@ -1662,7 +1710,17 @@ public class SpeedBuilders extends SoloGame
|
|
|
|
|
if (places.size() >= 3)
|
|
|
|
|
AddGems(places.get(2), 10, "3rd Place", false, false);
|
|
|
|
|
|
|
|
|
|
for (Player player : GetPlayers(false))
|
|
|
|
|
ArrayList<Player> participants = new ArrayList<Player>();
|
|
|
|
|
|
|
|
|
|
ArrayList<Player> guardians = GetTeamList().get(1).GetPlayers(false);
|
|
|
|
|
|
|
|
|
|
participants.addAll(playersTeam.GetPlayers(true));
|
|
|
|
|
|
|
|
|
|
guardians.retainAll(playersTeam.GetPlacements(true));
|
|
|
|
|
|
|
|
|
|
participants.addAll(guardians);
|
|
|
|
|
|
|
|
|
|
for (Player player : participants)
|
|
|
|
|
if (player.isOnline())
|
|
|
|
|
AddGems(player, 10, "Participation", false, false);
|
|
|
|
|
|
|
|
|
@ -1734,7 +1792,7 @@ public class SpeedBuilders extends SoloGame
|
|
|
|
|
|
|
|
|
|
for (Player player : playersDead)
|
|
|
|
|
{
|
|
|
|
|
Scoreboard.Write(C.cGray + player.getName());
|
|
|
|
|
Scoreboard.Write(C.cDGray + player.getName());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Scoreboard.Draw();
|
|
|
|
|