diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/speedbuilder/SpeedBuilder.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/speedbuilder/SpeedBuilder.java index 00cc402eb..5d2201152 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/speedbuilder/SpeedBuilder.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/speedbuilder/SpeedBuilder.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.HashSet; import java.util.Map.Entry; +import mineplex.core.common.Rank; import mineplex.core.common.util.C; import mineplex.core.common.util.F; import mineplex.core.common.util.MapUtil; @@ -54,10 +55,11 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.block.BlockGrowEvent; import org.bukkit.event.block.BlockPlaceEvent; +import org.bukkit.event.entity.EntityChangeBlockEvent; +import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerPickupItemEvent; import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.event.player.PlayerToggleSneakEvent; import org.bukkit.event.world.StructureGrowEvent; import org.bukkit.material.Bed; import org.bukkit.util.Vector; @@ -348,7 +350,7 @@ public class SpeedBuilder extends SoloGame return; } - _currentBuild = UtilAlg.Random(_buildData); + _currentBuild = _buildData.get(_build); for (Player player : GetPlayers(true)) { @@ -520,7 +522,7 @@ public class SpeedBuilder extends SoloGame @EventHandler public void stopGuardiansBuildEnter(UpdateEvent event) { - if (event.getType() != UpdateType.FAST) + if (event.getType() != UpdateType.FASTER) return; if (!IsLive()) @@ -530,8 +532,13 @@ public class SpeedBuilder extends SoloGame { for (RecreationData recreation : _buildRecreations.values()) { + Vector vec = player.getLocation().getDirection().multiply(-1); + if (UtilMath.offsetSquared(player.getLocation(), recreation.getMidpoint()) < 64) - UtilAction.velocity(player, player.getLocation().getDirection().multiply(-1)); + { + player.playSound(player.getEyeLocation(), Sound.NOTE_PLING, 10F, 0.5F); + UtilAction.velocity(player, vec, 1.6, false, 0, 0.4, vec.length(), false); + } } } } @@ -916,22 +923,67 @@ public class SpeedBuilder extends SoloGame } @EventHandler - public void stopJudgeUnspec(final PlayerToggleSneakEvent event) + public void stopJudgeUnspec(UpdateEvent event) { + if (event.getType() != UpdateType.TICK) + return; + if (!IsLive()) return; if (_state != SpeedBuilderState.REVIEWING) return; - Manager.runSyncLater(new Runnable() + for (Player player : UtilServer.getPlayers()) { - @Override - public void run() - { - event.getPlayer().setSpectatorTarget(_judgeEntity); - } - }, 1L); + player.setGameMode(GameMode.SPECTATOR); + player.setSpectatorTarget(_judgeEntity); + } + } + + @EventHandler + public void stopGuardianSpecPickup(PlayerPickupItemEvent event) + { + if (GetState().ordinal() < GameState.Prepare.ordinal()) + return; + + if (Manager.isSpectator(event.getPlayer()) || GetTeamList().get(1).HasPlayer(event.getPlayer())) + event.setCancelled(true); + } + + @EventHandler + public void stopGuardianSpecPlace(BlockPlaceEvent event) + { + if (GetState().ordinal() < GameState.Prepare.ordinal()) + return; + + if (Manager.isSpectator(event.getPlayer()) || GetTeamList().get(1).HasPlayer(event.getPlayer())) + event.setCancelled(true); + } + + @EventHandler + public void stopEntityChangeBlock(EntityChangeBlockEvent event) + { + event.setCancelled(true); + } + + private int _build; + + @EventHandler + public void setBuild(PlayerCommandPreprocessEvent event) + { + if (GetState() != GameState.Recruit) + return; + + if (!event.getMessage().startsWith("/setbuild ")) + return; + + if (!Manager.GetClients().hasRank(event.getPlayer(), Rank.SNR_MODERATOR)) + return; + + _build = Integer.parseInt(event.getMessage().split(" ")[1]); + + Announce(F.main("Build", "BUILD SET TO " + C.mElem + _build)); } @Override diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/speedbuilder/data/RecreationData.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/speedbuilder/data/RecreationData.java index 3d3c54c8f..3aef94868 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/speedbuilder/data/RecreationData.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/speedbuilder/data/RecreationData.java @@ -18,6 +18,7 @@ import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.block.BlockState; +import org.bukkit.block.Skull; import org.bukkit.craftbukkit.v1_8_R3.CraftWorld; import org.bukkit.craftbukkit.v1_8_R3.util.CraftMagicNumbers; import org.bukkit.entity.Item; @@ -228,13 +229,22 @@ public class RecreationData { Block currentBlock = CornerA.clone().add(x, y, z).getBlock(); BlockState expectedState = buildData.Build[x][y][z]; - + if (expectedState.getType() == currentBlock.getType() && expectedState.getRawData() == currentBlock.getData()) { score++; continue; } + //Sapling growth fix + if (expectedState.getType() == Material.SAPLING && currentBlock.getType() == Material.SAPLING) + { + if (currentBlock.getData() % 8 == expectedState.getRawData() % 8) + score++; + + Game.Announce("SPECIAL SAPLING CHECK = " + (currentBlock.getData() % 8 == expectedState.getRawData() % 8)); + } + //Fix for corner stair shape if (currentBlock.getState().getData() instanceof Stairs && expectedState.getData() instanceof Stairs) {