diff --git a/Plugins/.idea/compiler.xml b/Plugins/.idea/compiler.xml index c01fc77f0..ccd5607c1 100644 --- a/Plugins/.idea/compiler.xml +++ b/Plugins/.idea/compiler.xml @@ -2,6 +2,9 @@ - + \ No newline at end of file diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilShapes.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilShapes.java index c5443b0d1..b8486b467 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilShapes.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilShapes.java @@ -9,25 +9,15 @@ import org.bukkit.util.Vector; public class UtilShapes { - private final static BlockFace[] diagonalFaces = - { - BlockFace.SOUTH_WEST, BlockFace.NORTH_WEST, BlockFace.NORTH_EAST, BlockFace.SOUTH_EAST - }; - private final static BlockFace[] radial = { BlockFace.SOUTH, BlockFace.SOUTH_WEST, BlockFace.WEST, BlockFace.NORTH_WEST, BlockFace.NORTH, BlockFace.NORTH_EAST, BlockFace.EAST, BlockFace.SOUTH_EAST }; - private final static BlockFace[] squareFaces = - { - BlockFace.SOUTH, BlockFace.WEST, BlockFace.NORTH, BlockFace.EAST - }; - - public static ArrayList getCircle(Location loc, double radius, boolean hollow) + public static ArrayList getCircle(Location loc, double radius) { - return getCircleBlocks(loc, radius, 0, hollow, false); + return getCircleBlocks(loc, radius, 0, true, false); } public static ArrayList getSphereBlocks(Location loc, double radius, double height, boolean hollow) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/command/CommandCenter.java b/Plugins/Mineplex.Core/src/mineplex/core/command/CommandCenter.java index 4da7927f9..2b4d8f81b 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/command/CommandCenter.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/command/CommandCenter.java @@ -60,8 +60,10 @@ public class CommandCenter implements Listener if (command != null) { - if (ClientManager.Get(event.getPlayer()).GetRank().Has(event.getPlayer(), command.GetRequiredRank(), command.GetSpecificRanks(), true)) - { + event.setCancelled(true); + + if (ClientManager.Get(event.getPlayer()).GetRank().Has(event.getPlayer(), command.GetRequiredRank(), command.GetSpecificRanks(), true)) + { if (!Recharge.Instance.use(event.getPlayer(), "Command", 500, false, false)) { event.getPlayer().sendMessage(F.main("Command Center", "You can't spam commands that fast.")); @@ -71,7 +73,6 @@ public class CommandCenter implements Listener command.SetAliasUsed(commandName.toLowerCase()); command.Execute(event.getPlayer(), args); } - event.setCancelled(true); } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/message/MessageManager.java b/Plugins/Mineplex.Core/src/mineplex/core/message/MessageManager.java index db26122a2..3c7cc86cb 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/message/MessageManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/message/MessageManager.java @@ -2,7 +2,6 @@ package mineplex.core.message; import java.util.ArrayList; import java.util.HashMap; -import java.util.LinkedList; import java.util.UUID; import org.bukkit.Bukkit; @@ -23,7 +22,6 @@ import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilTime.TimeUnit; -import mineplex.core.event.StackerEvent; import mineplex.core.friend.FriendManager; import mineplex.core.friend.data.FriendData; import mineplex.core.friend.data.FriendStatus; @@ -98,7 +96,7 @@ public class MessageManager extends MiniClientPlugin } public boolean canMessage(Player from, Player to) - { + { if (!canSenderMessageThem(from, to.getName())) { return false; @@ -133,7 +131,7 @@ public class MessageManager extends MiniClientPlugin return null; } - + public boolean isMuted(Player sender) { PunishClient client = _punish.GetClient(sender.getName()); @@ -158,7 +156,7 @@ public class MessageManager extends MiniClientPlugin return true; } - + return false; } @@ -181,11 +179,11 @@ public class MessageManager extends MiniClientPlugin public void DoMessage(Player from, Player to, String message) { - PrivateMessageEvent pmEvent = new PrivateMessageEvent(from, to, message); + PrivateMessageEvent pmEvent = new PrivateMessageEvent(from, to, message); Bukkit.getServer().getPluginManager().callEvent(pmEvent); if (pmEvent.isCancelled()) return; - + if (!canMessage(from, to)) { return; @@ -193,7 +191,8 @@ public class MessageManager extends MiniClientPlugin // My attempt at trying to mitigate some of the spam bots - Phinary // Triggers if they are whispering a new player - if (!GetClientManager().Get(from).GetRank().Has(Rank.HELPER) && Get(from).LastTo != null && !Get(from).LastTo.equalsIgnoreCase(to.getName())) + if (!GetClientManager().Get(from).GetRank().Has(Rank.HELPER) && Get(from).LastTo != null + && !Get(from).LastTo.equalsIgnoreCase(to.getName())) { long delta = System.currentTimeMillis() - Get(from).LastToTime; @@ -211,7 +210,7 @@ public class MessageManager extends MiniClientPlugin } message = _chat.getFilteredMessage(from, message); - + // Inform UtilPlayer.message(from, C.cGold + "§l" + from.getName() + " > " + to.getName() + C.cYellow + " §l" + message); @@ -355,13 +354,11 @@ public class MessageManager extends MiniClientPlugin String toRank = F.rank(_clientManager.Get(to).GetRank()); - // Message the sender RedisMessageCallback message = new RedisMessageCallback(globalMessage, true, to.getName(), - C.cPurple + "-> " + toRank + " " + to.getName() + " " + C.cPurple - + globalMessage.getMessage()); - + C.cPurple + "-> " + toRank + " " + to.getName() + " " + C.cPurple + globalMessage.getMessage()); + // Inform Admins for (Player staff : UtilServer.getPlayers()) { @@ -392,8 +389,9 @@ public class MessageManager extends MiniClientPlugin return; } - String message = C.cGold + "§l" + globalMessage.getSender() + " > " + to.getName() + C.cYellow + " §l" + globalMessage.getMessage(); - + String message = C.cGold + "§l" + globalMessage.getSender() + " > " + to.getName() + C.cYellow + " §l" + + globalMessage.getMessage(); + // Message the receiver UtilPlayer.message(to, message); @@ -448,7 +446,7 @@ public class MessageManager extends MiniClientPlugin { UtilPlayer.message(staff, - recevierRank + " " + target.getName() + " " + C.cPurple + message.getMessage()); + recevierRank + " " + target.getName() + " " + C.cPurple + message.getMessage()); } } } @@ -456,7 +454,8 @@ public class MessageManager extends MiniClientPlugin } } - public void sendMessage(final Player sender, String target, String message, boolean isReply, final boolean adminMessage) + public void sendMessage(final Player sender, final String target, final String message, final boolean isReply, + final boolean adminMessage) { FriendData friends = _friendsManager.Get(sender); FriendStatus friend = null; @@ -484,6 +483,33 @@ public class MessageManager extends MiniClientPlugin } } + final FriendStatus friendInfo = friend; + + new BukkitRunnable() + { + final String newMessage = _chat.getFilteredMessage(sender, message); + + @Override + public void run() + { + new BukkitRunnable() + { + + @Override + public void run() + { + sendMessage(sender, target, newMessage, adminMessage, isReply, friendInfo); + } + + }.runTask(getPlugin()); + } + + }.runTaskAsynchronously(getPlugin()); + } + + private void sendMessage(final Player sender, String target, String message, final boolean adminMessage, boolean isReply, + FriendStatus friend) + { // We now have the friend object, if its not null. We are sending the message to that player. // Only notify player if friend is null and its not a reply diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java b/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java index d2637c0b7..edf8669f6 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java @@ -202,7 +202,7 @@ public class HubManager extends MiniClientPlugin BookMeta meta = (BookMeta)_ruleBook.getItemMeta(); _serverName = getPlugin().getConfig().getString("serverstatus.name"); _serverName = _serverName.substring(0, Math.min(16, _serverName.length())); - + meta.addPage("§m-------------------§r\n" + "Welcome to §6§lMineplex§r\n" + "§r§0§l§r§m§0§m-------------------§r§0\n" @@ -213,7 +213,7 @@ public class HubManager extends MiniClientPlugin + "Part 1 - Rules\n" + "\n" + "Part 2 - FAQ\n"); - + meta.addPage("§m-------------------\n" + "§r §2§lRules§r§0\n" + "§m-------------------\n" @@ -221,7 +221,7 @@ public class HubManager extends MiniClientPlugin + "§l1.§§§r §4No§r spamming.\n" + "\n" + "§0This is sending too many messages and/or repeating the same message in a short period of time.\n"); - + meta.addPage("§m-------------------\n" + "§r §2§lRules§r§0\n" + "§m-------------------\n" @@ -229,7 +229,7 @@ public class HubManager extends MiniClientPlugin + "§l2.§m§r §4No§0 use of excessive caps.\n" + "\n" + "This is sending messages with an excessive amount of capital letters.\n"); - + meta.addPage("§m-------------------\n" + "§r §2§lRules§r§0\n" + "§m-------------------\n" @@ -237,7 +237,7 @@ public class HubManager extends MiniClientPlugin + "§l3.§r §4No§0 hacking or use of any unapproved mods.\n" + "\n" + "This means we do not tolerate any sort of hacked client or any unapproved mods, such as fly hacks.\n"); - + meta.addPage("§m-------------------\n" + "§r §2§lRules§r§0\n" + "§m-------------------\n" @@ -245,7 +245,7 @@ public class HubManager extends MiniClientPlugin + "§l4.§r §4No§0 advertising non-Mineplex related links.\n" + "\n" + "This is when a link is sent in chat which directs others to non-Mineplex related content.\n"); - + meta.addPage("§m-------------------\n" + "§r §2§lRules§r§0\n" + "§m-------------------\n" @@ -253,20 +253,20 @@ public class HubManager extends MiniClientPlugin + "§l5.§r §4No§0 trolling or use of any exploits.\n" + "\n" + "This means that abuse of bugs/glitches is not tolerated. You also may not do things such as teamkilling and/or blocking spawns.\n"); - + meta.addPage("§m-------------------\n" + "§r §2§lRules§r§0\n" + "§m-------------------\n" + "§r\n" + "§l6.§r §2Be§0 respectful to others, yourself, and the environment around you.\n"); - + meta.addPage("§m-------------------\n" + "§r §2§lRules§r§0\n" + "§m-------------------\n" + "§r\n" + "§rPlease report any bugs, exploits, and/or rule breakers on our forums with evidence.\n" + "§omineplex.com/forums\n"); - + meta.addPage("§m-------------------\n" + "§r §2§lFAQ§r§0\n" + "§m-------------------\n" @@ -277,17 +277,17 @@ public class HubManager extends MiniClientPlugin + "\n" + "§9Right-Click: pick up\n" + "Left-Click: throw\n"); - + meta.addPage("§m-------------------\n" + "§r §2§lFAQ§r§0\n" + "§m-------------------\n" + "§r\n" - + "§lHow do I get §b§lUltra§0 §lor §5§lHero§0§l?\n" + + "§lHow do I get §bUltra§l, §5Hero§l, or §aLegend§l?\n" + "\n" + "§r§0You are able to purchase these ranks through our shop on our website at:\n" + "\n" + "§owww.mineplex.com/shop\n"); - + meta.addPage("§m-------------------\n" + "§r §2§lFAQ§r§0\n" + "§m-------------------\n" @@ -297,7 +297,7 @@ public class HubManager extends MiniClientPlugin + "§m§rYour rank may take a while to be applied. If it has been over 24 hours please contact:\n" + "\n" + "§omineplex.com/support\n"); - + meta.addPage("§m-------------------\n" + "§r §2§lFAQ§r§0\n" + "§m-------------------\n" @@ -307,17 +307,17 @@ public class HubManager extends MiniClientPlugin + "§0If you believe you were wrongfully punished, please submit an appeal at:\n" + "\n" + "§omineplex.com/appeals\n"); - + meta.addPage("§m-------------------\n" + "§r §2§lFAQ§r§0\n" + "§m-------------------\n" + "§r\n" - + "§lHow do I apply for Helper?\n" + + "§lHow do I apply for Trainee?\n" + "\n" - + "§rYou may only apply for Helper if you have §bUltra §0or §5Hero§0.\n" + + "§rYou may only apply for Helper if you have §bUltra§0, §5Hero§0, or §aLegend§0.\n" + "Apply at:\n" + "§omineplex.com/application\n"); - + meta.addPage("§m-------------------\n" + "§r §6§lThank you for \n" + " reading!§r§0\n" @@ -326,7 +326,7 @@ public class HubManager extends MiniClientPlugin + "Remember to visit our website §2mineplex.com§0 for important news & updates!\n" + "\n" + "\n" - + " §c§lH§6§lA§a§lV§9§lE §c§lF§6§lU§a§lN§9§l!\n"); + + "§c§lH§6§lA§a§lV§9§lE §c§lF§6§lU§a§lN§9§l!\n"); // These are needed or 1.8 clients will not show book correctly meta.setTitle("Rule Book"); diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/condition/Condition.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/condition/Condition.java index acd2431cb..b35f4b59e 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/condition/Condition.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/condition/Condition.java @@ -1,5 +1,6 @@ package mineplex.minecraft.game.core.condition; +import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.entity.LivingEntity; import org.bukkit.potion.PotionEffect; @@ -128,9 +129,9 @@ public class Condition //Add if (_ticks == -1) - (new PotionEffect(type, 72000, _mult, _ambient)).apply(_ent); + _ent.addPotionEffect(new PotionEffect(type, 72000, _mult, _ambient), true); else - (new PotionEffect(type, _ticks, _mult, _ambient)).apply(_ent); + _ent.addPotionEffect(new PotionEffect(type, _ticks, _mult, _ambient), true); } catch (Exception e) { @@ -142,8 +143,37 @@ public class Condition { try { - PotionEffectType type = PotionEffectType.getByName(_type.toString()); - _ent.removePotionEffect(type); + // TODO Remove once we update to 1.8, this fix fixes crashes for potioneffect's when acting on a potioneffect damage + // event. + boolean potionEffectCrash = false; + StackTraceElement[] stackTraces = Thread.currentThread().getStackTrace(); + + for (StackTraceElement trace : stackTraces) + { + if (trace.getClassName().equals("net.minecraft.server.v1_7_R4.EntityLiving") + && trace.getMethodName().equals("aO")) + { + potionEffectCrash = true; + break; + } + } + + if (potionEffectCrash) + { + Bukkit.getScheduler().runTaskLater(Manager.getPlugin(), new Runnable() + { + public void run() + { + PotionEffectType type = PotionEffectType.getByName(_type.toString()); + _ent.removePotionEffect(type); + } + }, 0); + } + else + { + PotionEffectType type = PotionEffectType.getByName(_type.toString()); + _ent.removePotionEffect(type); + } } catch (Exception e) { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java index 62f80515e..df3a9868c 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java @@ -42,7 +42,6 @@ import mineplex.core.blockrestore.BlockRestore; import mineplex.core.blood.Blood; import mineplex.core.chat.Chat; import mineplex.core.common.Rank; -import mineplex.core.common.jsonchat.ChildJsonMessage; import mineplex.core.common.jsonchat.ClickEvent; import mineplex.core.common.jsonchat.JsonMessage; import mineplex.core.common.util.C; @@ -84,7 +83,6 @@ import mineplex.core.status.ServerStatusManager; import mineplex.core.task.TaskManager; import mineplex.core.teleport.Teleport; import mineplex.core.timing.TimingManager; -import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import mineplex.minecraft.game.classcombat.Class.ClassManager; import mineplex.minecraft.game.classcombat.Condition.SkillConditionManager; @@ -161,7 +159,6 @@ public class ArcadeManager extends MiniPlugin implements IRelation private EloManager _eloManager; // Managers - private GameFactory _gameFactory; private GameCreationManager _gameCreationManager; private GameGemManager _gameGemManager; private GameManager _gameManager; @@ -222,8 +219,7 @@ public class ArcadeManager extends MiniPlugin implements IRelation _explosionManager.SetDebris(false); if (serverConfig.GameList.contains(GameType.ChampionsDominate) - || serverConfig.GameList.contains(GameType.ChampionsTDM) - || serverConfig.GameList.contains(GameType.ChampionsMOBA)) + || serverConfig.GameList.contains(GameType.ChampionsTDM)) { _conditionManager = new SkillConditionManager(plugin); } @@ -263,9 +259,6 @@ public class ArcadeManager extends MiniPlugin implements IRelation // Shop _arcadeShop = new ArcadeShop(this, clientManager, donationManager); - // Game Factory - _gameFactory = new GameFactory(this); - // Managers new GameChatManager(this); _gameCreationManager = new GameCreationManager(this); @@ -539,11 +532,6 @@ public class ArcadeManager extends MiniPlugin implements IRelation { return _gameHostManager; } - - public GameFactory GetGameFactory() - { - return _gameFactory; - } public GameManager GetGameManager() { @@ -1256,7 +1244,7 @@ public class ArcadeManager extends MiniPlugin implements IRelation public void toggleChampionsModules(GameType gameType) { - boolean isChamps = gameType == GameType.ChampionsDominate || gameType == GameType.ChampionsTDM || gameType == GameType.ChampionsMOBA; + boolean isChamps = gameType == GameType.ChampionsDominate || gameType == GameType.ChampionsTDM; if (_enabled == isChamps) { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameFactory.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameFactory.java deleted file mode 100644 index cf8cad827..000000000 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameFactory.java +++ /dev/null @@ -1,123 +0,0 @@ -package nautilus.game.arcade; - -import java.util.HashMap; - -import nautilus.game.arcade.game.games.sneakyassassins.*; - -import org.bukkit.ChatColor; - -import nautilus.game.arcade.game.Game; -import nautilus.game.arcade.game.games.baconbrawl.BaconBrawl; -import nautilus.game.arcade.game.games.barbarians.Barbarians; -import nautilus.game.arcade.game.games.bridge.Bridge; -import nautilus.game.arcade.game.games.build.Build; -import nautilus.game.arcade.game.games.cards.Cards; -import nautilus.game.arcade.game.games.castlesiege.CastleSiege; -import nautilus.game.arcade.game.games.champions.ChampionsDominate; -import nautilus.game.arcade.game.games.champions.ChampionsTDM; -import nautilus.game.arcade.game.games.christmas.Christmas; -import nautilus.game.arcade.game.games.deathtag.DeathTag; -import nautilus.game.arcade.game.games.dragonescape.DragonEscape; -import nautilus.game.arcade.game.games.dragonescape.DragonEscapeTeams; -import nautilus.game.arcade.game.games.dragonriders.DragonRiders; -import nautilus.game.arcade.game.games.dragons.Dragons; -import nautilus.game.arcade.game.games.dragons.DragonsTeams; -import nautilus.game.arcade.game.games.draw.Draw; -import nautilus.game.arcade.game.games.event.EventGame; -import nautilus.game.arcade.game.games.evolution.Evolution; -import nautilus.game.arcade.game.games.gravity.Gravity; -import nautilus.game.arcade.game.games.halloween.Halloween; -import nautilus.game.arcade.game.games.hideseek.HideSeek; -import nautilus.game.arcade.game.games.holeinwall.HoleInTheWall; -import nautilus.game.arcade.game.games.micro.Micro; -import nautilus.game.arcade.game.games.milkcow.MilkCow; -import nautilus.game.arcade.game.games.minestrike.MineStrike; -import nautilus.game.arcade.game.games.mineware.MineWare; -import nautilus.game.arcade.game.games.quiver.Quiver; -import nautilus.game.arcade.game.games.quiver.QuiverTeams; -import nautilus.game.arcade.game.games.runner.Runner; -import nautilus.game.arcade.game.games.searchanddestroy.SearchAndDestroy; -import nautilus.game.arcade.game.games.sheep.SheepGame; -import nautilus.game.arcade.game.games.smash.SuperSmash; -import nautilus.game.arcade.game.games.smash.SuperSmashDominate; -import nautilus.game.arcade.game.games.smash.SuperSmashTeam; -import nautilus.game.arcade.game.games.snake.Snake; -import nautilus.game.arcade.game.games.snowfight.SnowFight; -import nautilus.game.arcade.game.games.spleef.Spleef; -import nautilus.game.arcade.game.games.spleef.SpleefTeams; -import nautilus.game.arcade.game.games.squidshooter.SquidShooter; -import nautilus.game.arcade.game.games.stacker.Stacker; -import nautilus.game.arcade.game.games.survivalgames.SurvivalGames; -import nautilus.game.arcade.game.games.survivalgames.SurvivalGamesTeams; -import nautilus.game.arcade.game.games.paintball.Paintball; -import nautilus.game.arcade.game.games.tug.Tug; -import nautilus.game.arcade.game.games.turfforts.TurfForts; -import nautilus.game.arcade.game.games.uhc.UHC; -import nautilus.game.arcade.game.games.wither.WitherGame; -import nautilus.game.arcade.game.games.wizards.Wizards; -import nautilus.game.arcade.game.games.zombiesurvival.ZombieSurvival; - -public class GameFactory -{ - private ArcadeManager _manager; - - public GameFactory(ArcadeManager gameManager) - { - _manager = gameManager; - } - - public Game CreateGame(GameType gameType, HashMap pastTeams) - { - if (gameType == GameType.Barbarians) return new Barbarians(_manager); - else if (gameType == GameType.BaconBrawl) return new BaconBrawl(_manager); - else if (gameType == GameType.Bridge) return new Bridge(_manager); - else if (gameType == GameType.Build) return new Build(_manager); - else if (gameType == GameType.Cards) return new Cards(_manager); - else if (gameType == GameType.CastleSiege) return new CastleSiege(_manager); - else if (gameType == GameType.Christmas) return new Christmas(_manager); - else if (gameType == GameType.DeathTag) return new DeathTag(_manager); - else if (gameType == GameType.ChampionsDominate) return new ChampionsDominate(_manager); - else if (gameType == GameType.ChampionsTDM) return new ChampionsTDM(_manager); - else if (gameType == GameType.Dragons) return new Dragons(_manager); - else if (gameType == GameType.DragonsTeams) return new DragonsTeams(_manager); - else if (gameType == GameType.DragonEscape) return new DragonEscape(_manager); - else if (gameType == GameType.DragonEscapeTeams) return new DragonEscapeTeams(_manager); - else if (gameType == GameType.DragonRiders) return new DragonRiders(_manager); - else if (gameType == GameType.Draw) return new Draw(_manager); - else if (gameType == GameType.Event) return new EventGame(_manager); - else if (gameType == GameType.Evolution) return new Evolution(_manager); - else if (gameType == GameType.Gravity) return new Gravity(_manager); - else if (gameType == GameType.Halloween) return new Halloween(_manager); - else if (gameType == GameType.HideSeek) return new HideSeek(_manager); - else if (gameType == GameType.HoleInTheWall) return new HoleInTheWall(_manager); - else if (gameType == GameType.Micro) return new Micro(_manager); - else if (gameType == GameType.MineStrike) return new MineStrike(_manager); - else if (gameType == GameType.MineWare) return new MineWare(_manager); - else if (gameType == GameType.MilkCow) return new MilkCow(_manager); - else if (gameType == GameType.Paintball) return new Paintball(_manager); - else if (gameType == GameType.Quiver) return new Quiver(_manager); - else if (gameType == GameType.QuiverTeams) return new QuiverTeams(_manager); - else if (gameType == GameType.Runner) return new Runner(_manager); - else if (gameType == GameType.SearchAndDestroy) return new SearchAndDestroy(_manager); - else if (gameType == GameType.SnowFight) return new SnowFight(_manager); - else if (gameType == GameType.Sheep) return new SheepGame(_manager); - else if (gameType == GameType.Smash) return new SuperSmash(_manager); - else if (gameType == GameType.SmashTeams) return new SuperSmashTeam(_manager); - else if (gameType == GameType.SmashDomination) return new SuperSmashDominate(_manager); - else if (gameType == GameType.Snake) return new Snake(_manager); - else if (gameType == GameType.SneakyAssassins) return new SneakyAssassins(_manager); - else if (gameType == GameType.Spleef) return new Spleef(_manager); - else if (gameType == GameType.SpleefTeams) return new SpleefTeams(_manager); - else if (gameType == GameType.SquidShooter) return new SquidShooter(_manager); - else if (gameType == GameType.Stacker) return new Stacker(_manager); - else if (gameType == GameType.SurvivalGames) return new SurvivalGames(_manager); - else if (gameType == GameType.SurvivalGamesTeams) return new SurvivalGamesTeams(_manager); - else if (gameType == GameType.Tug) return new Tug(_manager); - else if (gameType == GameType.TurfWars) return new TurfForts(_manager); - else if (gameType == GameType.UHC) return new UHC(_manager); - else if (gameType == GameType.WitherAssault) return new WitherGame(_manager); - else if (gameType == GameType.Wizards) return new Wizards(_manager); - else if (gameType == GameType.ZombieSurvival) return new ZombieSurvival(_manager); - else return null; - } -} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java index 07570963d..28d79a4b5 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java @@ -1,65 +1,120 @@ package nautilus.game.arcade; +import nautilus.game.arcade.game.Game; +import nautilus.game.arcade.game.games.baconbrawl.BaconBrawl; +import nautilus.game.arcade.game.games.barbarians.Barbarians; +import nautilus.game.arcade.game.games.bridge.Bridge; +import nautilus.game.arcade.game.games.build.Build; +import nautilus.game.arcade.game.games.cards.Cards; +import nautilus.game.arcade.game.games.castlesiege.CastleSiege; +import nautilus.game.arcade.game.games.champions.ChampionsDominate; +import nautilus.game.arcade.game.games.champions.ChampionsTDM; +import nautilus.game.arcade.game.games.christmas.Christmas; +import nautilus.game.arcade.game.games.deathtag.DeathTag; +import nautilus.game.arcade.game.games.dragonescape.DragonEscape; +import nautilus.game.arcade.game.games.dragonescape.DragonEscapeTeams; +import nautilus.game.arcade.game.games.dragonriders.DragonRiders; +import nautilus.game.arcade.game.games.dragons.Dragons; +import nautilus.game.arcade.game.games.dragons.DragonsTeams; +import nautilus.game.arcade.game.games.draw.Draw; +import nautilus.game.arcade.game.games.event.EventGame; +import nautilus.game.arcade.game.games.evolution.Evolution; +import nautilus.game.arcade.game.games.gravity.Gravity; +import nautilus.game.arcade.game.games.halloween.Halloween; +import nautilus.game.arcade.game.games.hideseek.HideSeek; +import nautilus.game.arcade.game.games.holeinwall.HoleInTheWall; +import nautilus.game.arcade.game.games.horsecharge.Horse; +import nautilus.game.arcade.game.games.micro.Micro; +import nautilus.game.arcade.game.games.milkcow.MilkCow; +import nautilus.game.arcade.game.games.minestrike.MineStrike; +import nautilus.game.arcade.game.games.mineware.MineWare; +import nautilus.game.arcade.game.games.oldmineware.OldMineWare; +import nautilus.game.arcade.game.games.paintball.Paintball; +import nautilus.game.arcade.game.games.quiver.Quiver; +import nautilus.game.arcade.game.games.quiver.QuiverTeams; +import nautilus.game.arcade.game.games.runner.Runner; +import nautilus.game.arcade.game.games.searchanddestroy.SearchAndDestroy; +import nautilus.game.arcade.game.games.sheep.SheepGame; +import nautilus.game.arcade.game.games.smash.SuperSmash; +import nautilus.game.arcade.game.games.smash.SuperSmashDominate; +import nautilus.game.arcade.game.games.smash.SuperSmashTeam; +import nautilus.game.arcade.game.games.snake.Snake; +import nautilus.game.arcade.game.games.sneakyassassins.SneakyAssassins; +import nautilus.game.arcade.game.games.snowfight.SnowFight; +import nautilus.game.arcade.game.games.spleef.Spleef; +import nautilus.game.arcade.game.games.spleef.SpleefTeams; +import nautilus.game.arcade.game.games.squidshooter.SquidShooter; +import nautilus.game.arcade.game.games.stacker.Stacker; +import nautilus.game.arcade.game.games.survivalgames.SurvivalGames; +import nautilus.game.arcade.game.games.survivalgames.SurvivalGamesTeams; +import nautilus.game.arcade.game.games.tug.Tug; +import nautilus.game.arcade.game.games.turfforts.TurfForts; +import nautilus.game.arcade.game.games.uhc.UHC; +import nautilus.game.arcade.game.games.wither.WitherGame; +import nautilus.game.arcade.game.games.wizards.Wizards; +import nautilus.game.arcade.game.games.zombiesurvival.ZombieSurvival; + import org.bukkit.Material; public enum GameType { //Mini - BaconBrawl("Bacon Brawl", Material.PORK, (byte)0, GameCategory.ARCADE, 1), - Barbarians("A Barbarians Life", Material.WOOD_AXE, (byte)0, GameCategory.EXTRA, 2), - Bridge("The Bridges", Material.IRON_PICKAXE, (byte)0, GameCategory.SURVIVAL, 3), - CastleSiege("Castle Siege", Material.DIAMOND_CHESTPLATE, (byte)0, GameCategory.CLASSICS, 4), - ChampionsDominate("Champions Domination", "Champions", Material.BEACON, (byte)0, GameCategory.CHAMPIONS, 6), - ChampionsMOBA("Champions MOBA", "Champions", Material.SKULL_ITEM, (byte)0, GameCategory.CHAMPIONS, 7), - ChampionsTDM("Champions TDM", "Champions", Material.GOLD_SWORD, (byte)0, GameCategory.CHAMPIONS, 5), - Christmas("Christmas Chaos", Material.SNOW_BALL, (byte)0, GameCategory.CLASSICS, 8), - DeathTag("Death Tag", Material.SKULL_ITEM, (byte)0, GameCategory.ARCADE, 9), - DragonEscape("Dragon Escape", Material.DRAGON_EGG, (byte)0, GameCategory.ARCADE, 10), - DragonEscapeTeams("Dragon Escape Teams", Material.DRAGON_EGG, (byte)0, GameCategory.TEAM_VARIANT, 11), - DragonRiders("Dragon Riders", Material.DRAGON_EGG, (byte)0, GameCategory.ARCADE, 12), - Dragons("Dragons", Material.ENDER_STONE, (byte)0, GameCategory.ARCADE, 13), - DragonsTeams("Dragons Teams", Material.ENDER_STONE, (byte)0, GameCategory.TEAM_VARIANT, 14), - Draw("Draw My Thing", Material.BOOK_AND_QUILL, (byte)0, GameCategory.CLASSICS, 15), - Evolution("Evolution", Material.EMERALD, (byte)0, GameCategory.ARCADE, 16), - FlappyBird("Flappy Bird", Material.FEATHER, (byte)0, GameCategory.ARCADE, 17), - Gravity("Gravity", Material.ENDER_PORTAL, (byte)0, GameCategory.EXTRA, 18), - Halloween("Halloween Horror", Material.PUMPKIN, (byte)0, GameCategory.CLASSICS, 19), - HideSeek("Block Hunt", Material.GRASS, (byte)0, GameCategory.CLASSICS, 20), - HoleInTheWall("Hole in the Wall", Material.STAINED_GLASS, (byte) 2, GameCategory.ARCADE, 52), - Horse("Horseback", Material.IRON_BARDING, (byte)0, GameCategory.ARCADE, 21), - Micro("Micro Battle", Material.LAVA_BUCKET, (byte)0, GameCategory.ARCADE, 24), - MilkCow("Milk the Cow", Material.MILK_BUCKET, (byte)0, GameCategory.ARCADE, 27), - MineStrike("MineStrike", Material.TNT, (byte)0, GameCategory.CLASSICS, 25, "http://chivebox.com/file/c/assets.zip", false), - MineWare("MineWare", Material.PAPER, (byte)0, GameCategory.EXTRA, 26), - Paintball("Super Paintball", Material.ENDER_PEARL, (byte)0, GameCategory.ARCADE, 28), - Quiver("One in the Quiver", Material.ARROW, (byte)0, GameCategory.ARCADE, 29), - QuiverTeams("One in the Quiver Teams", Material.ARROW, (byte)0, GameCategory.TEAM_VARIANT, 30), - Runner("Runner", Material.LEATHER_BOOTS, (byte)0, GameCategory.ARCADE, 31), - SearchAndDestroy("Search and Destroy", Material.TNT, (byte)0, GameCategory.SURVIVAL, 32), - Sheep("Sheep Quest", Material.WOOL, (byte)4, GameCategory.ARCADE, 33), - Smash("Super Smash Mobs", Material.SKULL_ITEM, (byte)4, GameCategory.CLASSICS, 34), - SmashDomination("Super Smash Mobs Domination", "Super Smash Mobs", Material.SKULL_ITEM, (byte)4, GameCategory.EXTRA, 36), - SmashTeams("Super Smash Mobs Teams", "Super Smash Mobs", Material.SKULL_ITEM, (byte)4, GameCategory.TEAM_VARIANT, 35), - Snake("Snake", Material.WOOL, (byte)0, GameCategory.ARCADE, 37), - SneakyAssassins("Sneaky Assassins", Material.INK_SACK, (byte)0, GameCategory.ARCADE, 38), - SnowFight("Snow Fight", Material.SNOW_BALL, (byte)0, GameCategory.EXTRA, 39), - Spleef("Super Spleef", Material.IRON_SPADE, (byte)0, GameCategory.ARCADE, 40), - SpleefTeams("Super Spleef Teams", Material.IRON_SPADE, (byte)0, GameCategory.TEAM_VARIANT, 41), - SquidShooter("Squid Shooter", Material.FIREWORK_CHARGE, (byte)0, GameCategory.ARCADE, 43), - Stacker("Super Stacker", Material.BOWL, (byte)0, GameCategory.ARCADE, 42), - SurvivalGames("Survival Games", Material.IRON_SWORD, (byte)0, GameCategory.SURVIVAL, 22), - SurvivalGamesTeams("Survival Games Teams", Material.IRON_SWORD, (byte)0, GameCategory.TEAM_VARIANT, 23), - Tug("Tug of Wool", Material.WHEAT, (byte)0, GameCategory.ARCADE, 44), - TurfWars("Turf Wars", Material.STAINED_CLAY, (byte)14, GameCategory.ARCADE, 45), - UHC("Ultra Hardcore", Material.GOLDEN_APPLE, (byte)0, GameCategory.SURVIVAL, 46), - WitherAssault("Wither Assault", Material.SKULL_ITEM, (byte)1, GameCategory.ARCADE, 47), - Wizards("Wizards", Material.BLAZE_ROD, (byte)0, GameCategory.SURVIVAL, 48, "http://chivebox.com/file/c/ResWizards.zip", true), - ZombieSurvival("Zombie Survival", Material.SKULL_ITEM, (byte)2, GameCategory.SURVIVAL, 49), + BaconBrawl(BaconBrawl.class, "Bacon Brawl", Material.PORK, (byte)0, GameCategory.ARCADE, 1), + Barbarians(Barbarians.class, "A Barbarians Life", Material.WOOD_AXE, (byte)0, GameCategory.EXTRA, 2), + Bridge(Bridge.class, "The Bridges", Material.IRON_PICKAXE, (byte)0, GameCategory.SURVIVAL, 3), + CastleSiege(CastleSiege.class, "Castle Siege", Material.DIAMOND_CHESTPLATE, (byte)0, GameCategory.CLASSICS, 4), + ChampionsDominate(ChampionsDominate.class, "Champions Domination", "Champions", Material.BEACON, (byte)0, GameCategory.CHAMPIONS, 6), + //ChampionsMOBA(ChampionsMOBA.class, "Champions MOBA", "Champions", Material.SKULL_ITEM, (byte)0, GameCategory.CHAMPIONS, 7), + ChampionsTDM(ChampionsTDM.class, "Champions TDM", "Champions", Material.GOLD_SWORD, (byte)0, GameCategory.CHAMPIONS, 5), + Christmas(Christmas.class, "Christmas Chaos", Material.SNOW_BALL, (byte)0, GameCategory.CLASSICS, 8), + DeathTag(DeathTag.class, "Death Tag", Material.SKULL_ITEM, (byte)0, GameCategory.ARCADE, 9), + DragonEscape(DragonEscape.class, "Dragon Escape", Material.DRAGON_EGG, (byte)0, GameCategory.ARCADE, 10), + DragonEscapeTeams(DragonEscapeTeams.class, "Dragon Escape Teams", Material.DRAGON_EGG, (byte)0, GameCategory.TEAM_VARIANT, 11), + DragonRiders(DragonRiders.class, "Dragon Riders", Material.DRAGON_EGG, (byte)0, GameCategory.ARCADE, 12), + Dragons(Dragons.class, "Dragons", Material.ENDER_STONE, (byte)0, GameCategory.ARCADE, 13), + DragonsTeams(DragonsTeams.class, "Dragons Teams", Material.ENDER_STONE, (byte)0, GameCategory.TEAM_VARIANT, 14), + Draw(Draw.class, "Draw My Thing", Material.BOOK_AND_QUILL, (byte)0, GameCategory.CLASSICS, 15), + Evolution(Evolution.class, "Evolution", Material.EMERALD, (byte)0, GameCategory.ARCADE, 16), + //FlappyBird(FlappyBird.class, "Flappy Bird", Material.FEATHER, (byte)0, GameCategory.ARCADE, 17), + Gravity(Gravity.class, "Gravity", Material.ENDER_PORTAL, (byte)0, GameCategory.EXTRA, 18), + Halloween(Halloween.class, "Halloween Horror", Material.PUMPKIN, (byte)0, GameCategory.CLASSICS, 19), + HideSeek(HideSeek.class, "Block Hunt", Material.GRASS, (byte)0, GameCategory.CLASSICS, 20), + HoleInTheWall(HoleInTheWall.class, "Hole in the Wall", Material.STAINED_GLASS, (byte) 2, GameCategory.ARCADE, 52), + Horse(Horse.class, "Horseback", Material.IRON_BARDING, (byte)0, GameCategory.ARCADE, 21), + Micro(Micro.class, "Micro Battle", Material.LAVA_BUCKET, (byte)0, GameCategory.ARCADE, 24), + MilkCow(MilkCow.class, "Milk the Cow", Material.MILK_BUCKET, (byte)0, GameCategory.ARCADE, 27), + MineStrike(MineStrike.class, "MineStrike", Material.TNT, (byte)0, GameCategory.CLASSICS, 25, "http://chivebox.com/file/c/assets.zip", true), + MineWare(MineWare.class, "MineWare", Material.PAPER, (byte)0, GameCategory.EXTRA, 26), + OldMineWare(OldMineWare.class, "Old MineWare", Material.PAPER, (byte)0, GameCategory.EXTRA, 26), + Paintball(Paintball.class, "Super Paintball", Material.ENDER_PEARL, (byte)0, GameCategory.ARCADE, 28), + Quiver(Quiver.class, "One in the Quiver", Material.ARROW, (byte)0, GameCategory.ARCADE, 29), + QuiverTeams(QuiverTeams.class, "One in the Quiver Teams", Material.ARROW, (byte)0, GameCategory.TEAM_VARIANT, 30), + Runner(Runner.class, "Runner", Material.LEATHER_BOOTS, (byte)0, GameCategory.ARCADE, 31), + SearchAndDestroy(SearchAndDestroy.class, "Search and Destroy", Material.TNT, (byte)0, GameCategory.SURVIVAL, 32), + Sheep(SheepGame.class, "Sheep Quest", Material.WOOL, (byte)4, GameCategory.ARCADE, 33), + Smash(SuperSmash.class, "Super Smash Mobs", Material.SKULL_ITEM, (byte)4, GameCategory.CLASSICS, 34), + SmashDomination(SuperSmashDominate.class, "Super Smash Mobs Domination", "Super Smash Mobs", Material.SKULL_ITEM, (byte)4, GameCategory.EXTRA, 36), + SmashTeams(SuperSmashTeam.class, "Super Smash Mobs Teams", "Super Smash Mobs", Material.SKULL_ITEM, (byte)4, GameCategory.TEAM_VARIANT, 35), + Snake(Snake.class, "Snake", Material.WOOL, (byte)0, GameCategory.ARCADE, 37), + SneakyAssassins(SneakyAssassins.class, "Sneaky Assassins", Material.INK_SACK, (byte)0, GameCategory.ARCADE, 38), + SnowFight(SnowFight.class, "Snow Fight", Material.SNOW_BALL, (byte)0, GameCategory.EXTRA, 39), + Spleef(Spleef.class, "Super Spleef", Material.IRON_SPADE, (byte)0, GameCategory.ARCADE, 40), + SpleefTeams(SpleefTeams.class, "Super Spleef Teams", Material.IRON_SPADE, (byte)0, GameCategory.TEAM_VARIANT, 41), + SquidShooter(SquidShooter.class, "Squid Shooter", Material.FIREWORK_CHARGE, (byte)0, GameCategory.ARCADE, 43), + Stacker(Stacker.class, "Super Stacker", Material.BOWL, (byte)0, GameCategory.ARCADE, 42), + SurvivalGames(SurvivalGames.class, "Survival Games", Material.IRON_SWORD, (byte)0, GameCategory.SURVIVAL, 22), + SurvivalGamesTeams(SurvivalGamesTeams.class, "Survival Games Teams", Material.IRON_SWORD, (byte)0, GameCategory.TEAM_VARIANT, 23), + Tug(Tug.class, "Tug of Wool", Material.WHEAT, (byte)0, GameCategory.ARCADE, 44), + TurfWars(TurfForts.class, "Turf Wars", Material.STAINED_CLAY, (byte)14, GameCategory.ARCADE, 45), + UHC(UHC.class, "Ultra Hardcore", Material.GOLDEN_APPLE, (byte)0, GameCategory.SURVIVAL, 46), + WitherAssault(WitherGame.class, "Wither Assault", Material.SKULL_ITEM, (byte)1, GameCategory.ARCADE, 47), + Wizards(Wizards.class, "Wizards", Material.BLAZE_ROD, (byte)0, GameCategory.SURVIVAL, 48, "http://chivebox.com/file/c/ResWizards.zip", true), + ZombieSurvival(ZombieSurvival.class, "Zombie Survival", Material.SKULL_ITEM, (byte)2, GameCategory.SURVIVAL, 49), - Build("Master Builders", Material.BRICK, (byte)0, GameCategory.CLASSICS, 50), - Cards("Craft Against Humanity", Material.MAP, (byte)0, GameCategory.CLASSICS, 51), + Build(Build.class, "Master Builders", Material.BRICK, (byte)0, GameCategory.CLASSICS, 50), + Cards(Cards.class, "Craft Against Humanity", Material.MAP, (byte)0, GameCategory.CLASSICS, 51), - Event("Mineplex Event", Material.CAKE, (byte)0, GameCategory.EVENT, 999); + Event(EventGame.class, "Mineplex Event", Material.CAKE, (byte)0, GameCategory.EVENT, 999); String _name; String _lobbyName; @@ -68,27 +123,29 @@ public enum GameType GameCategory _gameCategory; boolean _enforceResourcePack; String _resourcePack; + Class _gameClass; private int _gameId; // Unique identifying id for this gamemode (used for statistics) public int getGameId() { return _gameId; } - GameType(String name, Material mat, byte data, GameCategory gameCategory, int gameId) + GameType(Class gameClass, String name, Material mat, byte data, GameCategory gameCategory, int gameId) { - this(name, name, mat, data, gameCategory, gameId); + this(gameClass, name, name, mat, data, gameCategory, gameId); } - GameType(String name, Material mat, byte data, GameCategory gameCategory, int gameId, String resourcePackUrl, boolean enforceResourcePack) + GameType(Class gameClass, String name, Material mat, byte data, GameCategory gameCategory, int gameId, String resourcePackUrl, boolean enforceResourcePack) { - this(name, name, mat, data, gameCategory, gameId, resourcePackUrl, enforceResourcePack); + this(gameClass, name, name, mat, data, gameCategory, gameId, resourcePackUrl, enforceResourcePack); } - GameType(String name, String lobbyName, Material mat, byte data, GameCategory gameCategory, int gameId) + GameType(Class gameClass, String name, String lobbyName, Material mat, byte data, GameCategory gameCategory, int gameId) { - this(name, lobbyName, mat, data, gameCategory, gameId, null, false); + this(gameClass, name, lobbyName, mat, data, gameCategory, gameId, null, false); } - GameType(String name, String lobbyName, Material mat, byte data, GameCategory gameCategory, int gameId, String resourcePackUrl, boolean enforceResourcePack) + GameType(Class gameClass, String name, String lobbyName, Material mat, byte data, GameCategory gameCategory, int gameId, String resourcePackUrl, boolean enforceResourcePack) { + _gameClass = gameClass; _name = name; _lobbyName = lobbyName; _mat = mat; @@ -99,6 +156,11 @@ public enum GameType _enforceResourcePack = enforceResourcePack; } + public Class getGameClass() + { + return _gameClass; + } + public boolean isEnforceResourcePack() { return _enforceResourcePack; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/command/StopCommand.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/command/StopCommand.java index 13fa1b5f5..2f09c66bf 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/command/StopCommand.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/command/StopCommand.java @@ -22,8 +22,6 @@ public class StopCommand extends CommandBase if (Plugin.GetGame() == null) return; - HandlerList.unregisterAll(Plugin.GetGame()); - if (Plugin.GetGame().GetState() == GameState.End || Plugin.GetGame().GetState() == GameState.End) { caller.sendMessage("Game is already ending..."); @@ -38,6 +36,7 @@ public class StopCommand extends CommandBase Plugin.GetGame().SetState(GameState.End); } + HandlerList.unregisterAll(Plugin.GetGame()); Plugin.GetGame().Announce(C.cAqua + C.Bold + caller.getName() + " has stopped the game."); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java index 4f3a4a4fd..11c0fdb97 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java @@ -9,12 +9,10 @@ import java.util.Set; import org.bukkit.Bukkit; import org.bukkit.ChatColor; -import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.Sound; import org.bukkit.block.BlockFace; import org.bukkit.craftbukkit.v1_7_R4.CraftWorld; -import org.bukkit.craftbukkit.v1_7_R4.entity.CraftPlayer; import org.bukkit.entity.Entity; import org.bukkit.entity.Hanging; import org.bukkit.entity.Player; @@ -1275,16 +1273,21 @@ public abstract class Game implements Listener { CreatureAllowOverride = event.getAllowed(); } - + + public boolean isInsideMap(Player player) + { + return isInsideMap(player.getLocation()); + } + public boolean isInsideMap(Location loc) { return !( - loc.getX() >= WorldData.MaxX || + loc.getX() >= WorldData.MaxX + 1 || loc.getX() <= WorldData.MinX || loc.getZ() >= WorldData.MaxZ + 1 || - loc.getZ() <= WorldData.MinZ + 1 || - loc.getY() >= WorldData.MaxY || - loc.getY() <= WorldData.MinY + 1); + loc.getZ() <= WorldData.MinZ || + loc.getY() >= WorldData.MaxY + 1 || + loc.getY() <= WorldData.MinY); } public void setItemMerge(boolean itemMerge) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/GameScore.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/GameScore.java index 42fb029ed..29847b966 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/GameScore.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/GameScore.java @@ -1,5 +1,7 @@ package nautilus.game.arcade.game.games; +import java.util.ArrayList; +import java.util.Collections; import java.util.Comparator; import org.bukkit.entity.Player; @@ -20,7 +22,7 @@ public class GameScore return Player; } - public static Comparator SCORE_COMPARATOR = new Comparator() + public static Comparator SCORE_DESC = new Comparator() { @Override public int compare(GameScore o1, GameScore o2) @@ -28,7 +30,7 @@ public class GameScore if (o1.Score == o2.Score) return 0; - return o1.Score > o2.Score ? 1 : -1; + return o1.Score > o2.Score ? -1 : 1; } }; } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/draw/Draw.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/draw/Draw.java index 893a8e566..309cd2b2f 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/draw/Draw.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/draw/Draw.java @@ -651,7 +651,7 @@ public class Draw extends SoloGame private void SortScores() { - Collections.sort(_ranks, GameScore.SCORE_COMPARATOR); + Collections.sort(_ranks, GameScore.SCORE_DESC); } @Override diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/Challenge.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/Challenge.java new file mode 100644 index 000000000..cd5a7e040 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/Challenge.java @@ -0,0 +1,245 @@ +package nautilus.game.arcade.game.games.mineware; + +import java.util.ArrayList; +import java.util.HashSet; +import mineplex.core.common.util.C; +import mineplex.core.common.util.UtilInv; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilTime; +import mineplex.core.hologram.Hologram; +import mineplex.core.hologram.Hologram.HologramTarget; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.block.Block; +import org.bukkit.entity.Player; +import org.bukkit.event.Listener; +import org.bukkit.scheduler.BukkitRunnable; + +public abstract class Challenge implements Listener +{ + public enum ChallengeType + { + LastStanding, FirstComplete + } + + public MineWare Host; + + private String _order; + + protected long StartTime; + protected long Duration; + + private Location _center; + + protected HashSet Completed = new HashSet(); + private HashSet _modifiedBlocks = new HashSet(); + protected int Places; + private ChallengeType _challengeType; + + public Challenge(MineWare host, ChallengeType challengeType, String challengeName) + { + Host = host; + _order = challengeName; + _center = new Location(host.WorldData.World, 0, 0, 0); + _challengeType = challengeType; + } + + public HashSet getModifiedBlocks() + { + return _modifiedBlocks; + } + + public String getMessage(Player player) + { + return _order; + } + + public void setBorder(int minX, int maxX, int minY, int maxY, int minZ, int maxZ) + { + Host.WorldData.MinX = minX; + Host.WorldData.MaxX = maxX; + Host.WorldData.MinY = minY; + Host.WorldData.MaxY = maxY; + Host.WorldData.MinZ = minZ; + Host.WorldData.MaxZ = maxZ; + } + + protected void addBlock(Block block) + { + if (block.getType() == Material.AIR) + { + _modifiedBlocks.remove(block); + } + else + { + _modifiedBlocks.add(block); + } + } + + public void StartOrder() + { + setupPlayers(); + + Completed.clear(); + + StartTime = System.currentTimeMillis(); + + Duration = 60000; + + Places = (int) Math.ceil(getChallengers().size() / 2D); + } + + public void EndOrder() + { + cleanupRoom(); + } + + protected void displayCount(Player player, Location loc, String string) + { + final Hologram hologram = new Hologram(Host.Manager.getHologramManager(), loc, string); + hologram.setHologramTarget(HologramTarget.WHITELIST); + hologram.addPlayer(player); + hologram.start(); + final long expires = System.currentTimeMillis() + 500; + + new BukkitRunnable() + { + public void run() + { + if (!Host.IsLive() || expires < System.currentTimeMillis()) + { + hologram.stop(); + cancel(); + } + else + { + hologram.setLocation(hologram.getLocation().add(0, 0.1, 0)); + } + } + }.runTaskTimer(Host.Manager.getPlugin(), 0, 0); + } + + public abstract ArrayList getSpawns(); + + public abstract void cleanupRoom(); + + /** + * Register border + */ + public abstract void setupPlayers(); + + public abstract void generateRoom(); + + public String GetOrder() + { + return _order.toUpperCase(); + } + + public boolean isInsideMap(Player player) + { + return Host.isInsideMap(player.getLocation()); + } + + public final boolean Finish() + { + ArrayList players = getChallengers(); + + if (players.isEmpty()) + return true; + + if (_challengeType == ChallengeType.LastStanding) + { + if (players.size() <= Places) + { + for (Player player : players) + { + SetCompleted(player); + } + return true; + } + } + else if (_challengeType == ChallengeType.FirstComplete) + { + if (Completed.size() >= Places) + { + return true; + } + } + + return UtilTime.elapsed(StartTime, Duration); + } + + public int GetTimeLeft() + { + return (int) ((Duration - (System.currentTimeMillis() - StartTime)) / 1000); + } + + public void SetCompleted(Player player) + { + if (Completed.contains(player)) + return; + + Completed.add(player); + UtilPlayer.message(player, C.cGreen + C.Bold + "You completed the task!"); + player.playSound(player.getLocation(), Sound.LEVEL_UP, 2f, 1f); + UtilInv.Clear(player); + } + + public void setLost(Player player) + { + Host.LoseLife(player, false); + Host.Manager.addSpectator(player, true); + UtilInv.Clear(player); + } + + /** + * Get all players that are alive, regardless of having won or not. + */ + public ArrayList getChallengers() + { + return Host.getChallengers(); + } + + public boolean IsCompleted(Player player) + { + return Completed.contains(player); + } + + public float GetTimeLeftPercent() + { + float a = (float) (Duration - (System.currentTimeMillis() - StartTime)); + float b = (float) (Duration); + return a / b; + } + + public final int GetRemainingPlaces() + { + if (_challengeType == ChallengeType.FirstComplete) + { + return Places - Completed.size(); + } + else if (_challengeType == ChallengeType.LastStanding) + { + return getChallengers().size() - Places; + } + + return 0; + } + + public int getMinPlayers() + { + return 2; + } + + public Location getCenter() + { + return _center.clone(); + } + + public boolean hasWinner() + { + return !Completed.isEmpty(); + } + +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/ChallengeSeperateRooms.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/ChallengeSeperateRooms.java new file mode 100644 index 000000000..24f255d29 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/ChallengeSeperateRooms.java @@ -0,0 +1,140 @@ +package nautilus.game.arcade.game.games.mineware; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map.Entry; +import mineplex.core.common.util.UtilPlayer; + +import org.bukkit.Location; +import org.bukkit.entity.Player; + +public abstract class ChallengeSeperateRooms extends Challenge +{ + private HashMap _borders = new HashMap(); + private HashMap _spawns = new HashMap(); + private double _borderX, _borderZ; + + public ChallengeSeperateRooms(MineWare host, ChallengeType challengeType, String challengeName) + { + super(host, challengeType, challengeName); + } + + public void assignRooms() + { + for (Player player : getChallengers()) + { + for (Entry entry : _spawns.entrySet()) + { + if (entry.getKey().distance(player.getLocation()) < 1) + { + _borders.put(player.getName(), entry.getValue()); + break; + } + } + } + } + + public final void generateRoom() + { + int size = getChallengers().size(); + + int x = 1; + int z = 1; + + while (size > x * z) + { + if (x > z) + { + z++; + } + else + { + x++; + } + } + + _borderX = (x * getBorderX()) + (x * getDividersX()); + _borderZ = (z * getBorderZ()) + (z * getDividersZ()); + _borderX /= 2; + _borderZ /= 2; + _borderX = Math.ceil(_borderX); + _borderZ = Math.ceil(_borderZ); + + int players = 0; + + for (int x1 = 0; x1 < x; x1++) + { + for (int z1 = 0; z1 < z; z1++) + { + if (++players > size) + continue; + + double lX = (x1 * getBorderX()) + (x1 * getDividersX()); + double lZ = (z1 * getBorderZ()) + (z1 * getDividersZ()); + lX -= _borderX; + lZ -= _borderZ; + + Location loc = getCenter().clone().add(lX, 0, lZ); + + generateRoom(loc.clone()); + + _spawns.put(getSpawn(loc.clone()), new Integer[] + { + loc.getBlockX(), loc.getBlockX() + getBorderX(), + + loc.getBlockY(), loc.getBlockY() + getBorderY(), + + loc.getBlockZ(), loc.getBlockZ() + getBorderZ() + }); + } + } + } + + @Override + public void StartOrder() + { + super.StartOrder(); + + setBorder((int) -Math.ceil(_borderX), (int) Math.ceil(_borderX), 0, 256, (int) -Math.ceil(_borderZ), + (int) Math.ceil(_borderZ)); + } + + public abstract void generateRoom(Location loc); + + public abstract int getBorderX(); + + public abstract int getBorderY(); + + public abstract int getBorderZ(); + + public abstract int getDividersX(); + + public abstract int getDividersZ(); + + public Location getSpawn(Location roomLocation) + { + return roomLocation.clone().add(getBorderX() / 2D, 1, getBorderZ() / 2D); + } + + @Override + public ArrayList getSpawns() + { + return new ArrayList(_spawns.keySet()); + } + + public boolean isInsideMap(Player player) + { + Location loc = player.getLocation(); + + if (!_borders.containsKey(player.getName()) || UtilPlayer.isSpectator(player)) + { + return super.isInsideMap(player); + } + + Integer[] borders = _borders.get(player.getName()); + + return !(loc.getX() >= borders[1] + 1 || loc.getX() <= borders[0] || loc.getZ() >= borders[5] + 1 + || loc.getZ() <= borders[4] || loc.getY() >= borders[3] + 1 || loc.getY() <= borders[2]); + } + +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/MineWare.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/MineWare.java index e6c3cbff6..7a8d6f32d 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/MineWare.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/MineWare.java @@ -1,232 +1,424 @@ package nautilus.game.arcade.game.games.mineware; +import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; import java.util.HashMap; -import java.util.Iterator; +import java.util.HashSet; -import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Sound; -import org.bukkit.entity.Chicken; -import org.bukkit.entity.Cow; -import org.bukkit.entity.Creature; -import org.bukkit.entity.Ghast; -import org.bukkit.entity.Pig; +import org.bukkit.block.Block; +import org.bukkit.entity.Entity; import org.bukkit.entity.Player; -import org.bukkit.entity.Sheep; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.HandlerList; -import org.bukkit.event.entity.EntityTargetEvent; +import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.player.PlayerDropItemEvent; -import org.bukkit.util.Vector; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.inventory.InventoryHolder; import mineplex.core.common.util.C; -import mineplex.core.common.util.UtilAlg; -import mineplex.core.common.util.UtilBlock; +import mineplex.core.common.util.UtilInv; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTime; +import mineplex.core.common.util.UtilWorld; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.GameType; import nautilus.game.arcade.events.GameStateChangeEvent; import nautilus.game.arcade.game.SoloGame; -import nautilus.game.arcade.game.games.mineware.order.Order; -import nautilus.game.arcade.game.games.mineware.random.*; -import nautilus.game.arcade.game.games.runner.kits.KitLeaper; +import nautilus.game.arcade.game.GameTeam.PlayerState; +import nautilus.game.arcade.game.games.holeinwall.KitNormal; +import nautilus.game.arcade.game.games.mineware.challenges.*; import nautilus.game.arcade.kit.Kit; public class MineWare extends SoloGame { private HashMap _lives = new HashMap(); - - private Order _order = null; + private HashSet _killed = new HashSet(); + + private Challenge _order; + private ArrayList _lastOrderBlocks; private long _orderTime = 0; - private int _orderCount = 0; - - private ArrayList _orders = new ArrayList(); - private ArrayList _ordersCopy = new ArrayList(); - - private Location _ghastLoc = null; - private Location _ghastTarget = null; - private Ghast _ghast = null; - private ArrayList _mobLocs = new ArrayList(); - private ArrayList _mobs = new ArrayList(); - - public MineWare(ArcadeManager manager) + private boolean _orderWaiting; + + private ArrayList> _orders = new ArrayList>(); + private ArrayList> _ordersCopy = new ArrayList>(); + + public MineWare(ArcadeManager manager, String justSoError) { super(manager, GameType.MineWare, - new Kit[] - { - new KitLeaper(manager), - }, + new Kit[] + { + new KitNormal(manager), + }, + + new String[] + { + "Follow the orders given in chat!", "First half to follow it win the round.", "Other players lose one life.", + "Last player with lives wins!" + }); - new String[] - { - "Follow the orders given in chat!", - "First half to follow it win the round.", - "Other players lose one life.", - "Last player with lives wins!" - }); - - this.PrepareFreeze = false; - this.DamagePvP = false; - - this.BlockPlace = true; - this.BlockBreak = true; - - this.ItemDrop = true; - this.ItemPickup = true; - - InventoryOpenBlock = true; - InventoryOpenChest = true; + DamagePvE = false; + DamageEvP = false; + DamageFall = false; InventoryClick = true; - + DamageSelf = false; + DeathOut = false; + + Manager.GetCreature().SetDisableCustomDrops(true); + PopulateOrders(); } - - @Override - public void ParseData() - { - _ghastLoc = WorldData.GetDataLocs("WHITE").get(0); - while (_mobLocs.size() < 100) - { - Location loc = WorldData.GetRandomXZ(); - - while (UtilBlock.airFoliage(loc.getBlock())) - loc.add(0, -1, 0); - - Material mat = loc.getBlock().getType(); - - if (mat == Material.STONE || - mat == Material.GRASS || - mat == Material.SAND) - _mobLocs.add(loc); - } - } - - public void PopulateOrders() + @Override + public void EndCheck() { - _orders.add(new ActionMilkCow(this)); - _orders.add(new ActionShearSheep(this)); - - _orders.add(new CraftLadder(this)); - _orders.add(new CraftStoneShovel(this)); - - _orders.add(new DamageChicken(this)); - _orders.add(new DamageFall(this)); - _orders.add(new DamageGhast(this)); - - _orders.add(new GatherCobble(this)); - _orders.add(new GatherRedFlower(this)); - _orders.add(new GatherYellowFlower(this)); - _orders.add(new GatherSand(this)); - - _orders.add(new PlaceDoor(this)); - - _orders.add(new RideBoat(this)); - _orders.add(new RidePig(this)); - - _orders.add(new StandAlone(this)); - _orders.add(new StandShelter(this)); - _orders.add(new StandStone(this)); - _orders.add(new StandWater(this)); - } - - public Order GetOrder() - { - if (_ordersCopy.isEmpty()) + if (!IsLive()) + return; + + int living = 0; + + for (Player player : GetPlayers(false)) { - for (Order order : _orders) + if (_lives.containsKey(player) && _lives.get(player) > 0) { - _ordersCopy.add(order); + System.out.print(player.getName() + " is living"); + living++; } } - - return _ordersCopy.remove(UtilMath.r(_ordersCopy.size())); + + if (living <= 1) + { + SetState(GameState.End); + System.out.print("End game"); + AnnounceEnd(getWinners()); + } } - + + @Override + public boolean isInsideMap(Player player) + { + if (_order != null) + { + return _order.isInsideMap(player); + } + + return true; + } + + @EventHandler + public void onLive(GameStateChangeEvent event) + { + if (event.GetState() != GameState.Live) + { + return; + } + + UtilServer.getServer().getPluginManager().registerEvents(_order, Manager.getPlugin()); + + if (_order instanceof ChallengeSeperateRooms) + { + ((ChallengeSeperateRooms) _order).assignRooms(); + } + + _order.StartOrder(); + + sayChallenge(_order); + } + + public void PopulateOrders() + { + //_orders.add(ChallengeShootChickens.class); + //_orders.add(ChallengeStandOnColor.class); + _orders.add(ChallengePickASide.class); + //_orders.add(ChallengeMilkACow.class); + _orders.add(ChallengeHitTargets.class); + _orders.add(ChallengeNavigateMaze.class); + //_orders.add(ChallengeDragonEgg.class); + _orders.add(ChallengeBlockShot.class); + //_orders.add(ChallengeChestLoot.class); + _orders.add(ChallengeLavaRun.class); + } + + public Challenge GetOrder() + { + for (int i = 0; i < _orders.size() * 4; i++) + { + try + { + if (_ordersCopy.isEmpty()) + { + _ordersCopy.addAll(_orders); + } + + Challenge challenge = _ordersCopy.remove(UtilMath.r(_ordersCopy.size())).getConstructor(MineWare.class) + .newInstance(this); + + if (getChallengers().size() >= challenge.getMinPlayers()) + { + System.out.print("Using challenge " + challenge.getClass().getSimpleName()); + return challenge; + } + else + { + System.out.print("Cannot use challenge " + challenge.getClass().getSimpleName() + ", not enough players"); + + } + } + catch (InvocationTargetException ex) + { + ex.getCause().printStackTrace(); + } + catch (Exception e) + { + e.printStackTrace(); + } + } + + return null; + } + @EventHandler(priority = EventPriority.HIGH) public void GameStateChange(GameStateChangeEvent event) { if (event.GetState() != GameState.Prepare) return; - + for (Player player : GetPlayers(true)) - _lives.put(player, 10); + _lives.put(player, 5); // TODO + + _order = GetOrder(); + _order.generateRoom(); + + GetTeamList().get(0).SetSpawns(_order.getSpawns()); + SpectatorSpawn = UtilWorld.averageLocation(_order.getSpawns()).add(0, 7, 0); } - + + @EventHandler + public void onDamage(CustomDamageEvent event) + { + event.SetDamageToLevel(false); + } + + @EventHandler + public void onDeath(PlayerDeathEvent event) + { + _killed.add(event.getEntity()); + + if (_order == null) + return; + + LoseLife(event.getEntity(), true); + } + + public boolean IsAlive(Entity entity) + { + if (_killed.contains(entity)) + { + return false; + } + + return super.IsAlive(entity); + } + + @EventHandler + public void onQuit(PlayerQuitEvent event) + { + _lives.remove(event.getPlayer()); + } + + public ArrayList getChallengers() + { + ArrayList challengers = new ArrayList(); + + for (Player player : GetPlayers(false)) + { + if (!UtilPlayer.isSpectator(player)) + { + challengers.add(player); + } + } + + return challengers; + } + + public void sayChallenge(Challenge challenge) + { + for (Player player : UtilServer.getPlayers()) + { + player.playSound(player.getLocation(), Sound.NOTE_PLING, 1f, 1f); + + UtilPlayer.message(player, + C.cYellow + C.Bold + (IsAlive(player) ? challenge.getMessage(player) : challenge.GetOrder())); + } + } + + @EventHandler + public void onInteract(PlayerInteractEvent event) + { + if (!_orderWaiting) + { + return; + } + + event.setCancelled(true); + } + + @EventHandler + public void PlayerMoveCancel(PlayerMoveEvent event) + { + if (!PrepareFreeze) + return; + + if (!_orderWaiting) + return; + + if (!IsAlive(event.getPlayer())) + return; + + if (UtilMath.offset2d(event.getFrom(), event.getTo()) <= 0) + return; + + event.getFrom().setPitch(event.getTo().getPitch()); + event.getFrom().setYaw(event.getTo().getYaw()); + + event.setTo(event.getFrom()); + } + @EventHandler public void UpdateOrder(UpdateEvent event) { if (event.getType() != UpdateType.TICK) return; - + if (!IsLive()) return; - - //New Order + + // New Order if (_order == null) { - if (!UtilTime.elapsed(_orderTime, 1000)) + if (!UtilTime.elapsed(_orderTime, 1500)) return; - + + for (Player player : GetPlayers(false)) + { + if (_killed.contains(player) && _lives.get(player) > 0) + { + Manager.Clear(player); + } + } + + _killed.clear(); + _order = GetOrder(); - + if (_order == null) { + System.out.println("No challenge suitable"); SetState(GameState.Dead); return; } - - //Register - UtilServer.getServer().getPluginManager().registerEvents(_order, Manager.getPlugin()); - _order.StartOrder(_orderCount++); - Announce(C.cYellow + C.Bold + _order.GetOrder().toUpperCase()); - + for (Block block : _lastOrderBlocks) + { + if (block.getState() instanceof InventoryHolder) + { + ((InventoryHolder) block.getState()).getInventory().clear(); + } + + block.setTypeIdAndData(Material.AIR.getId(), (byte) 0, false); + } + + _order.generateRoom(); + + GetTeamList().get(0).SetSpawns(_order.getSpawns()); + SpectatorSpawn = UtilWorld.averageLocation(_order.getSpawns()).add(0, 7, 0); + + for (Player player : getChallengers()) + { + player.teleport(GetTeamList().get(0).GetSpawn()); + } + + if (_order instanceof ChallengeSeperateRooms) + { + ((ChallengeSeperateRooms) _order).assignRooms(); + } + + _orderTime = System.currentTimeMillis(); + _orderWaiting = true; /* XXX GetObjectiveSide().setDisplayName( ChatColor.WHITE + "§lMineWare " + C.cGreen + "§l" + "Round " + _orderCount); */ } - //Update Order + else if (_orderWaiting) + { + if (!UtilTime.elapsed(_orderTime, 1000)) + return; + + _orderWaiting = false; + + _order.StartOrder(); + + // Register + UtilServer.getServer().getPluginManager().registerEvents(_order, Manager.getPlugin()); + + sayChallenge(_order); + } + // Update Order else { if (_order.Finish()) { _orderTime = System.currentTimeMillis(); - - if (_order.PlayerHasCompleted()) + + for (Player player : getChallengers()) { - for (Player player : GetPlayers(true)) + UtilInv.Clear(player); + + if (_order.hasWinner() && !_order.IsCompleted(player)) { - if (!_order.IsCompleted(player)) - { - LoseLife(player); - - if (IsAlive(player)) - _order.FailItems(player); - } + LoseLife(player, false); } } - - - //Deregister + + // Deregister HandlerList.unregisterAll(_order); + _order.EndOrder(); + + _lastOrderBlocks = new ArrayList(_order.getModifiedBlocks()); + // Remove blocks from top to bottom, prevents blocks popping off. + Collections.sort(_lastOrderBlocks, new Comparator() + { + + @Override + public int compare(Block o1, Block o2) + { + return new Integer(o2.getY()).compareTo(o1.getY()); + } + }); + _order = null; + + EndCheck(); } else { - //Set Level + // Set Level for (Player player : UtilServer.getPlayers()) { player.setLevel(_order.GetRemainingPlaces()); @@ -240,110 +432,44 @@ public class MineWare extends SoloGame { if (!_lives.containsKey(player)) return 0; - - if (!IsAlive(player)) - return 0; - + return _lives.get(player); } - - private void LoseLife(Player player) + + public void LoseLife(Player player, boolean isDeath) { int lives = GetLives(player) - 1; - + if (lives > 0) { UtilPlayer.message(player, C.cRed + C.Bold + "You failed the task!"); UtilPlayer.message(player, C.cRed + C.Bold + "You have " + lives + " lives left!"); player.playSound(player.getLocation(), Sound.NOTE_BASS_GUITAR, 2f, 0.5f); - + _lives.put(player, lives); - } + } else - { + {System.out.print(player.getName() + " list"); UtilPlayer.message(player, C.cRed + C.Bold + "You are out of the game!"); player.playSound(player.getLocation(), Sound.EXPLODE, 2f, 1f); - - player.damage(5000); - + Scoreboard.ResetScore(player.getName()); - } - } - - @EventHandler - public void UpdateMobs(UpdateEvent event) - { - if (event.getType() != UpdateType.FAST) - return; - - if (!InProgress()) - return; - - Iterator mobIterator = _mobs.iterator(); - while (mobIterator.hasNext()) - { - Creature mob = mobIterator.next(); + SetPlayerState(player, PlayerState.OUT); - if (!mob.isValid()) + if (!isDeath) { - mob.remove(); - mobIterator.remove(); + Manager.addSpectator(player, true); } } - - if (_mobs.size() < 200) - { - Location loc = _mobLocs.get(UtilMath.r(_mobLocs.size())).clone().add(new Vector(0.5,1,0.5)); - double r = Math.random(); - - this.CreatureAllowOverride = true; - - if (r > 0.75) _mobs.add(loc.getWorld().spawn(loc, Pig.class)); - else if (r > 0.5) _mobs.add(loc.getWorld().spawn(loc, Cow.class)); - else if (r > 0.25) _mobs.add(loc.getWorld().spawn(loc, Chicken.class)); - else _mobs.add(loc.getWorld().spawn(loc, Sheep.class)); - - this.CreatureAllowOverride = false; - } - - if (_ghast == null || !_ghast.isValid()) - { - if (_ghast != null) - _ghast.remove(); - - this.CreatureAllowOverride = true; - _ghast = _ghastLoc.getWorld().spawn(_ghastLoc, Ghast.class); - this.CreatureAllowOverride = false; - - _ghast.setMaxHealth(10000); - _ghast.setHealth(_ghast.getMaxHealth()); - } - else - { - //New Target - if (_ghastTarget == null || UtilMath.offset(_ghast.getLocation(), _ghastTarget) < 5) - { - _ghastTarget = _ghastLoc.clone().add(40 - 80*Math.random(), -20*Math.random(), 40 - 80*Math.random()); - } - - _ghast.teleport(_ghast.getLocation().add(UtilAlg.getTrajectory(_ghast.getLocation(), _ghastTarget).multiply(0.1))); - } } - - @EventHandler - public void GhastTarget(EntityTargetEvent event) - { - if (event.getEntity().equals(_ghast)) - event.setCancelled(true); - } - + @Override public int GetScoreboardScore(Player player) { return GetLives(player); } - + @EventHandler public void ItemDrop(PlayerDropItemEvent event) { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenges/ChallengeBlockShot.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenges/ChallengeBlockShot.java new file mode 100644 index 000000000..911c5e5a9 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenges/ChallengeBlockShot.java @@ -0,0 +1,185 @@ +package nautilus.game.arcade.game.games.mineware.challenges; + +import java.util.ArrayList; +import java.util.HashMap; + +import mineplex.core.common.util.C; +import mineplex.core.common.util.UtilAlg; +import mineplex.core.common.util.UtilFirework; +import mineplex.core.common.util.UtilMath; +import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; +import mineplex.core.common.util.UtilServer; +import mineplex.core.common.util.UtilShapes; +import mineplex.core.itemstack.ItemBuilder; +import nautilus.game.arcade.game.games.mineware.Challenge; +import nautilus.game.arcade.game.games.mineware.MineWare; + +import org.bukkit.FireworkEffect.Type; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.entity.ProjectileHitEvent; +import org.bukkit.event.entity.ProjectileLaunchEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.material.Wool; +import org.bukkit.projectiles.ProjectileSource; +import org.bukkit.scheduler.BukkitRunnable; + +public class ChallengeBlockShot extends Challenge +{ + private HashMap _shotBlocks = new HashMap(); + private ArrayList _spawns = new ArrayList(); + private ArrayList _arrows = new ArrayList(); + + public ChallengeBlockShot(MineWare host) + { + super(host, ChallengeType.FirstComplete, "Shoot down 5 blocks"); + } + + @Override + public ArrayList getSpawns() + { + return _spawns; + } + + @EventHandler + public void onShoot(ProjectileLaunchEvent event) + { + _arrows.add(event.getEntity()); + } + + @Override + public void cleanupRoom() + { + for (Entity arrow : _arrows) + { + arrow.remove(); + } + } + + @EventHandler + public void onProjectileHit(final ProjectileHitEvent event) + { + event.getEntity().remove(); + + new BukkitRunnable() + { + public void run() + { + ProjectileSource shooter = event.getEntity().getShooter(); + + if (shooter != null && shooter instanceof Player) + { + Player player = (Player) shooter; + + for (double x = -0.5; x <= 0.5; x++) + { + for (double y = -0.5; y <= 0.5; y++) + { + for (double z = -0.5; z <= 0.5; z++) + { + Block block = event.getEntity().getLocation().add(x, y, z).getBlock(); + + if (block.getType() == Material.WOOL) + { + int score = _shotBlocks.get(player.getName()) + 1; + + _shotBlocks.put(player.getName(), score); + + Location sloc = player.getEyeLocation(); + sloc.add(UtilAlg.getTrajectory(sloc, block.getLocation().add(0.5, 0.5, 0.5)).multiply( + Math.min(7, block.getLocation().distance(sloc)))); + + displayCount(player, sloc, (score >= 5 ? C.cDGreen : score >= 3 ? C.cGreen + : score >= 1 ? C.cRed : C.cDRed) + + score); + + if (score == 5) + { + SetCompleted(player); + } + + Location loc = block.getLocation().add(0.5, 0.5, 0.5); + UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, loc, 0, 0, 0, 0, 1, ViewDist.MAX, + UtilServer.getPlayers()); + + spawnBlock(); + + Wool wool = new Wool(block.getType(), block.getData()); + + UtilFirework.playFirework(loc, Type.BALL, wool.getColor().getColor(), true, true); + + block.setTypeIdAndData(Material.AIR.getId(), (byte) 0, false); + + addBlock(block); + + return; + } + } + } + } + } + } + }.runTaskLater(Host.Manager.getPlugin(), 0); + } + + private void spawnBlock() + { + while (true) + { + Block block = getCenter().add(UtilMath.r(40) - 20, 10 + UtilMath.r(10), UtilMath.r(40) - 20).getBlock(); + + if (block.getType() == Material.AIR) + { + block.setType(Material.WOOL); + block.setData((byte) UtilMath.r(16)); + addBlock(block); + + break; + } + } + } + + @Override + public void setupPlayers() + { + setBorder(-16, 16, 0, 20, -16, 16); + + for (Player player : Host.GetPlayers(true)) + { + player.getInventory().setItem(0, + new ItemBuilder(Material.BOW).addEnchantment(Enchantment.ARROW_INFINITE, 1).setUnbreakable(true).build()); + player.getInventory().setItem(9, new ItemStack(Material.ARROW)); + + _shotBlocks.put(player.getName(), 0); + } + } + + @Override + public void generateRoom() + { + for (Location loc : UtilShapes.getPointsInCircle(getCenter(), getChallengers().size(), 10)) + { + loc = loc.getBlock().getLocation().add(0.5, 7.1, 0.5); + _spawns.add(loc); + + Block block = loc.getBlock().getRelative(BlockFace.DOWN); + block.setType(Material.DOUBLE_STEP); + block.setData((byte) 8); + addBlock(block); + } + + for (int i = 0; i < 18; i++) + { + spawnBlock(); + } + } + +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenges/ChallengeBuildBuilding.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenges/ChallengeBuildBuilding.java new file mode 100644 index 000000000..9d87a6adb --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenges/ChallengeBuildBuilding.java @@ -0,0 +1,88 @@ +package nautilus.game.arcade.game.games.mineware.challenges; + +import java.util.ArrayList; +import java.util.HashMap; + +import nautilus.game.arcade.game.games.mineware.ChallengeSeperateRooms; +import nautilus.game.arcade.game.games.mineware.MineWare; + +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.entity.Player; + +public class ChallengeBuildBuilding extends ChallengeSeperateRooms +{ + private ArrayList _materials = new ArrayList(); + private HashMap _build = new HashMap(); + + public ChallengeBuildBuilding(MineWare host, String challengeName) + { + super(host, ChallengeType.FirstComplete, "Replicate the building!"); + + for (int x = 0; x < 3; x++) + { + for (int y = 0; y < 5; y++) + { + for (int z = 0; z < 3; z++) + { + + } + } + } + } + + @Override + public void generateRoom(Location loc) + { + // TODO Auto-generated method stub + + } + + @Override + public int getBorderX() + { + return 10; + } + + @Override + public int getBorderY() + { + return 20; + } + + @Override + public int getBorderZ() + { + return 10; + } + + @Override + public int getDividersX() + { + return 5; + } + + @Override + public int getDividersZ() + { + return 5; + } + + @Override + public void cleanupRoom() + { + // TODO Auto-generated method stub + + } + + @Override + public void setupPlayers() + { + for (Player player : getChallengers()) + { + player.setGameMode(GameMode.CREATIVE); + } + } + +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenges/ChallengeChestLoot.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenges/ChallengeChestLoot.java new file mode 100644 index 000000000..5b4562c2f --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenges/ChallengeChestLoot.java @@ -0,0 +1,127 @@ +package nautilus.game.arcade.game.games.mineware.challenges; + +import java.util.ArrayList; + +import mineplex.core.common.util.UtilMath; +import nautilus.game.arcade.game.games.mineware.Challenge; +import nautilus.game.arcade.game.games.mineware.MineWare; + +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.block.Chest; +import org.bukkit.block.DoubleChest; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; + +public class ChallengeChestLoot extends Challenge +{ + public ChallengeChestLoot(MineWare host) + { + super(host, ChallengeType.FirstComplete, "Find a diamond in the chests"); + } + + @Override + public ArrayList getSpawns() + { + ArrayList spawns = new ArrayList(); + + for (int x = -7; x <= 7; x++) + { + for (int z = -7; z <= 7; z++) + { + if (x % 2 == 0 && z % 2 == 0) + { + spawns.add(getCenter().clone().add(x, 2.1, z)); + } + } + } + + return spawns; + } + + @Override + public void cleanupRoom() + { + } + + @Override + public void setupPlayers() + { + } + + @EventHandler + public void onInventoryClick(InventoryClickEvent event) + { + if (!(event.getInventory().getHolder() instanceof Player)) + { + event.setCancelled(true); + + if (event.getInventory().getHolder() instanceof DoubleChest || event.getInventory().getHolder() instanceof Chest) + { + if (event.getCurrentItem() != null && event.getCurrentItem().getType() == Material.DIAMOND) + { + event.setCurrentItem(new ItemStack(Material.AIR)); + SetCompleted((Player) event.getWhoClicked()); + } + } + } + } + + @Override + public void generateRoom() + { + ArrayList invs = new ArrayList(); + + for (int x = -7; x <= 7; x++) + { + for (int z = -7; z <= 7; z++) + { + Block b = getCenter().getBlock().getRelative(x, 1, z); + + if (Math.abs(x) % 2 == 0 && Math.abs(z) % 2 == 0) + { + b.setType(Material.CHEST); + + Inventory inventory = ((Chest) b.getState()).getInventory(); + invs.add(inventory); + + for (int i = 0; i < inventory.getSize(); i++) + { + ItemStack item = new ItemStack(Material.values()[UtilMath.r(Material.values().length)]); + + if (item.getType() == Material.DIAMOND || item.getType() == Material.AIR) + { + i--; + continue; + } + + inventory.setItem(i, item); + } + } + else + { + b.setType(Material.STAINED_CLAY); + b.setData((byte) UtilMath.r(16)); + + Block block = b.getRelative(BlockFace.UP); + block.setType(Material.STAINED_CLAY); + block.setData((byte) UtilMath.r(16)); + addBlock(block); + } + + addBlock(b); + } + } + + for (int i = 0; i < 10 + getChallengers().size(); i++) + { + Inventory inv = invs.get(UtilMath.r(invs.size())); + inv.setItem(UtilMath.r(inv.getSize()), new ItemStack(Material.DIAMOND)); + } + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenges/ChallengeDragonEgg.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenges/ChallengeDragonEgg.java new file mode 100644 index 000000000..b37659f0f --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenges/ChallengeDragonEgg.java @@ -0,0 +1,171 @@ +package nautilus.game.arcade.game.games.mineware.challenges; + +import java.util.ArrayList; +import java.util.HashMap; + +import mineplex.core.common.util.C; +import mineplex.core.common.util.UtilMath; +import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; +import mineplex.core.itemstack.ItemBuilder; +import nautilus.game.arcade.game.games.mineware.Challenge; +import nautilus.game.arcade.game.games.mineware.MineWare; + +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.block.Action; +import org.bukkit.event.player.PlayerInteractEvent; + +public class ChallengeDragonEgg extends Challenge +{ + private HashMap _smashedEggs = new HashMap(); + private ArrayList _dragonEggs = new ArrayList(); + + public ChallengeDragonEgg(MineWare host) + { + super(host, ChallengeType.FirstComplete, "Whack a dragon egg 10 times"); + } + + @Override + public ArrayList getSpawns() + { + ArrayList spawns = new ArrayList(); + + for (int x = -14; x < 15; x++) + { + for (int z = -14; z < 15; z++) + { + if (x % 2 == 0 && z % 2 == 0) + { + spawns.add(getCenter().clone().add(x, 1.1, z)); + } + } + } + + return spawns; + } + + @EventHandler + public void onBlockHit(PlayerInteractEvent event) + { + if (event.getAction() != Action.LEFT_CLICK_BLOCK && event.getAction() != Action.RIGHT_CLICK_BLOCK) + { + return; + } + + if (UtilPlayer.isSpectator(event.getPlayer())) + { + return; + } + + Block block = event.getClickedBlock(); + + if (block.getType() != Material.DRAGON_EGG) + { + return; + } + + event.setCancelled(true); + + block.setType(Material.AIR); + addBlock(block); + + UtilParticle.PlayParticle(ParticleType.PORTAL, block.getLocation().add(0.5, 0.5, 0.5), 0.5F, 0.5F, 0.5F, 0, 11, + ViewDist.MAX, UtilServer.getPlayers()); + + Host.CreatureAllowOverride = true; + + for (int i = 0; i < 10; i++) + { + Block b = getCenter().clone().add(UtilMath.r(30) - 15, 1, UtilMath.r(30) - 15).getBlock(); + + if (b.getType() == Material.AIR) + { + Entity entity = getCenter().getWorld().spawnFallingBlock(b.getLocation().add(0.5, 2, 0.5), Material.DRAGON_EGG, + (byte) 0); + _dragonEggs.add(entity); + + break; + } + } + + Host.CreatureAllowOverride = false; + + Player player = event.getPlayer(); + + int score = _smashedEggs.get(player.getName()) + 1; + + displayCount(player, block.getLocation().add(0.5, 1, 0.5), (score >= 10 ? C.cDGreen : score >= 7 ? C.cGreen + : score >= 4 ? C.cRed : C.cDRed) + + score); + + _smashedEggs.put(player.getName(), score); + + if (score == 10) + { + SetCompleted(player); + } + } + + @Override + public void cleanupRoom() + { + for (int x = -15; x <= 15; x++) + { + for (int z = -15; z <= 15; z++) + { + Block b = getCenter().getBlock().getRelative(x, 1, z); + + addBlock(b); + } + } + + for (Entity ent : _dragonEggs) + { + ent.remove(); + } + } + + @Override + public void setupPlayers() + { + setBorder(-18, 18, 0, 20, -18, 18); + + for (Player player : getChallengers()) + { + _smashedEggs.put(player.getName(), 0); + player.getInventory().setItem(0, new ItemBuilder(Material.IRON_AXE).setTitle(C.cWhite + "Egg Smasher").build()); + } + } + + @Override + public void generateRoom() + { + for (int x = -15; x <= 15; x++) + { + for (int z = -15; z <= 15; z++) + { + Block b = getCenter().getBlock().getRelative(x, 0, z); + b.setType(Material.WOOL); + b.setData((byte) UtilMath.r(16)); + + addBlock(b); + } + } + + for (int i = 0; i < 9; i++) + { + Block b = getCenter().getBlock().getRelative(UtilMath.r(30) - 15, 1, UtilMath.r(30) - 15); + b.setType(Material.DRAGON_EGG); + addBlock(b); + } + } + +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenges/ChallengeHitTargets.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenges/ChallengeHitTargets.java new file mode 100644 index 000000000..88d43f903 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenges/ChallengeHitTargets.java @@ -0,0 +1,156 @@ +package nautilus.game.arcade.game.games.mineware.challenges; + +import java.util.ArrayList; +import java.util.HashMap; + +import mineplex.core.common.util.C; +import mineplex.core.common.util.UtilMath; +import mineplex.core.common.util.UtilPlayer; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; +import nautilus.game.arcade.game.games.mineware.Challenge; +import nautilus.game.arcade.game.games.mineware.MineWare; + +import org.apache.commons.lang.StringUtils; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.block.Block; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; + +public class ChallengeHitTargets extends Challenge +{ + private HashMap> _targets = new HashMap>(); + private int _targetsEach; + + public ChallengeHitTargets(MineWare host) + { + super(host, ChallengeType.FirstComplete, "Hit the chosen players"); + } + + @EventHandler + public void onDamage(CustomDamageEvent event) + { + if (UtilPlayer.isSpectator(event.GetDamageePlayer())) + return; + + if (!(event.GetDamageeEntity() instanceof Player)) + return; + + Player p = event.GetDamageePlayer(); + + if (!_targets.containsKey(p.getName())) + return; + + String name = ((Player) event.GetDamageeEntity()).getName(); + + ArrayList targets = _targets.get(p.getName()); + + if (!targets.remove(name)) + { + p.playSound(p.getLocation(), Sound.NOTE_PLING, 1f, 1f); + + UtilPlayer.message(p, "Hit the players " + StringUtils.join(targets, C.cWhite + C.Bold + ", " + C.cYellow + C.Bold)); + return; + } + + displayCount(p, event.GetDamageeEntity().getEyeLocation().add(0, 0.3, 0), (targets.isEmpty() ? C.cDGreen + : targets.size() == 1 ? C.cRed : C.cDRed) + (_targetsEach - targets.size())); + + if (targets.isEmpty()) + { + SetCompleted(p); + } + } + + @Override + public String getMessage(Player player) + { + return "Hit the players " + + StringUtils.join(_targets.get(player.getName()), C.cWhite + C.Bold + ", " + C.cYellow + C.Bold); + } + + @Override + public int getMinPlayers() + { + return 4; + } + + @Override + public ArrayList getSpawns() + { + ArrayList spawns = new ArrayList(); + + for (int x = -8; x <= 8; x++) + { + for (int z = -8; z <= 8; z++) + { + if (x % 2 == 0 && z % 2 == 0) + { + spawns.add(getCenter().clone().add(x + 0.5, 1.1, z + 0.5)); + } + } + } + + return spawns; + } + + @Override + public void cleanupRoom() + { + } + + @Override + public void setupPlayers() + { + ArrayList players = new ArrayList(); + + for (Player player : players) + { + ArrayList names = new ArrayList(); + + for (Player p : players) + { + if (p != player) + { + names.add(p.getName()); + } + } + + while (names.size() > 3) + { + names.remove(UtilMath.r(names.size())); + } + + _targetsEach = names.size(); + + _targets.put(player.getName(), names); + } + } + + @Override + public void generateRoom() + { + for (int x = -10; x <= 10; x++) + { + for (int z = -10; z <= 10; z++) + { + Block b = getCenter().clone().add(x, 0, z).getBlock(); + b.setType(Material.SMOOTH_BRICK); + addBlock(b); + + if (Math.abs(x) > 1 && Math.abs(x) < 9 && Math.abs(z) > 1 && Math.abs(z) < 9) + { + for (int y = 1; y < 3; y++) + { + Block block = b.getRelative(0, y, 0); + block.setType(Material.SMOOTH_BRICK); + block.setData((byte) (UtilMath.r(8) < 7 ? 0 : UtilMath.r(2) + 1)); + addBlock(block); + } + } + } + } + } + +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenges/ChallengeLavaRun.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenges/ChallengeLavaRun.java new file mode 100644 index 000000000..f9778aa7e --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenges/ChallengeLavaRun.java @@ -0,0 +1,179 @@ +package nautilus.game.arcade.game.games.mineware.challenges; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; + +import mineplex.core.common.util.UtilMath; +import mineplex.core.common.util.UtilServer; +import mineplex.core.common.util.UtilTime; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; +import nautilus.game.arcade.game.games.mineware.Challenge; +import nautilus.game.arcade.game.games.mineware.MineWare; + +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; + +public class ChallengeLavaRun extends Challenge +{ + private long _delay; + private Location _obsidian; + + public ChallengeLavaRun(MineWare host) + { + super(host, ChallengeType.LastStanding, "The lava is coming! Stand on the obsidian!"); + } + + @Override + public ArrayList getSpawns() + { + ArrayList spawns = new ArrayList(); + + for (int x = -7; x <= 7; x++) + { + for (int z = -7; z <= 7; z++) + { + spawns.add(getCenter().clone().add(x + 0.5, 2, z + 0.5)); + } + } + + return spawns; + } + + @EventHandler + public void onDamage(CustomDamageEvent event) + { + if (event.GetDamagerEntity(true) != null) + { + return; + } + + event.AddMod("Ensure Death", null, 9999, false); + } + + @EventHandler + public void onTick(UpdateEvent event) + { + if (event.getType() != UpdateType.TICK) + { + return; + } + + if (!UtilTime.elapsed(_delay, 2000)) + return; + + if (_obsidian == null) + { + _obsidian = getCenter().add(UtilMath.r(21) - 9.5, 1, UtilMath.r(21) - 9.5); + + for (int x = -10; x <= 10; x++) + { + for (int z = -10; z <= 10; z++) + { + Block b = getCenter().getBlock().getRelative(x, 1, z); + + b.setType(Material.GLASS); + addBlock(b); + } + } + + _obsidian.getBlock().setType(Material.OBSIDIAN); + + for (Player player : UtilServer.getPlayers()) + player.playSound(player.getLocation(), Sound.NOTE_PIANO, 2f, 0f); + } + else + { + ArrayList glassBlocks = new ArrayList(); + + for (int x = -10; x <= 10; x++) + { + for (int z = -10; z <= 10; z++) + { + Block b = getCenter().getBlock().getRelative(x, 1, z); + + if (b.getType() == Material.GLASS) + { + glassBlocks.add(b); + } + } + } + + if (glassBlocks.isEmpty()) + { + _delay = System.currentTimeMillis(); + _obsidian = null; + } + else + { + final HashMap distance = new HashMap(); + + for (Block b : glassBlocks) + { + distance.put(b, b.getLocation().add(0.5, 0, 0.5).distance(_obsidian)); + } + + Collections.sort(glassBlocks, new Comparator() + { + + @Override + public int compare(Block o1, Block o2) + { + return distance.get(o2).compareTo(distance.get(o1)); + } + }); + + for (int i = 0; i < Math.min(8, glassBlocks.size()); i++) + { + Block b = glassBlocks.remove(0); + b.setTypeIdAndData(Material.AIR.getId(), (byte) 0, false); + addBlock(b); + } + } + } + } + + @Override + public void cleanupRoom() + { + } + + @Override + public void setupPlayers() + { + } + + @Override + public void generateRoom() + { + for (int x = -15; x <= 15; x++) + { + for (int z = -15; z <= 15; z++) + { + Block block = getCenter().getBlock().getRelative(x, 0, z); + block.setType(Material.LAVA); + addBlock(block); + + if (Math.abs(x) <= 10 && Math.abs(z) <= 10) + { + Block b = block.getRelative(BlockFace.UP); + b.setType(Material.GLASS); + addBlock(b); + } + } + } + + _obsidian = getCenter().add(UtilMath.r(21) - 9.5, 1, UtilMath.r(21) - 9.5); + + _obsidian.getBlock().setType(Material.OBSIDIAN); + } + +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenges/ChallengeMilkACow.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenges/ChallengeMilkACow.java new file mode 100644 index 000000000..a7eeac736 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenges/ChallengeMilkACow.java @@ -0,0 +1,241 @@ +package nautilus.game.arcade.game.games.mineware.challenges; + +import java.util.ArrayList; +import java.util.HashMap; + +import mineplex.core.common.util.C; +import mineplex.core.common.util.UtilMath; +import mineplex.core.common.util.UtilPlayer; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; +import nautilus.game.arcade.game.games.mineware.Challenge; +import nautilus.game.arcade.game.games.mineware.MineWare; + +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.block.Block; +import org.bukkit.entity.Cow; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.entity.Villager; +import org.bukkit.entity.Villager.Profession; +import org.bukkit.event.EventHandler; +import org.bukkit.event.player.PlayerInteractEntityEvent; +import org.bukkit.event.player.PlayerItemConsumeEvent; +import org.bukkit.inventory.ItemStack; + +public class ChallengeMilkACow extends Challenge +{ + private Villager _villager; + private HashMap> _milked = new HashMap>(); + private HashMap _score = new HashMap(); + + public ChallengeMilkACow(MineWare host) + { + super(host, ChallengeType.FirstComplete, "Deliver 5 buckets of milk to the villager"); + } + + @Override + public void cleanupRoom() + { + for (Entity cow : _milked.keySet()) + { + cow.remove(); + } + + _villager.remove(); + } + + @EventHandler + public void Damage(CustomDamageEvent event) + { + if (event.GetProjectile() == null) + return; + + Player player = event.GetDamagerPlayer(true); + + if (player == null) + return; + + LivingEntity ent = event.GetDamageeEntity(); + + if (!(ent instanceof Player)) + { + event.SetCancelled("Non-Combat Entity"); + } + } + + @Override + public void setupPlayers() + { + setBorder(-16, 16, 0, 10, -16, 16); + + for (Player player : Host.GetPlayers(true)) + { + player.getInventory().setItem(0, new ItemStack(Material.BUCKET)); + _score.put(player.getName(), 0); + } + } + + @Override + public void generateRoom() + { + for (int x = -16; x <= 16; x++) + { + for (int z = -16; z <= 16; z++) + { + for (int y = 0; y <= 1; y++) + { + Block b = getCenter().getBlock().getRelative(x, y, z); + + if (y == 0) + { + b.setType(Material.GRASS); + } + else + { + if (Math.abs(x) == 16 || Math.abs(z) == 16) + { + b.setType(Material.FENCE); + } + else if (UtilMath.r(4) == 0) + { + if (UtilMath.r(8) == 0) + { + b.setType(UtilMath.random.nextBoolean() ? Material.YELLOW_FLOWER : Material.RED_ROSE); + } + else + { + b.setType(Material.LONG_GRASS); + b.setData((byte) 1); + } + } + } + + if (b.getType() != Material.AIR) + { + addBlock(b); + } + } + } + } + + Host.CreatureAllowOverride = true; + _villager = (Villager) getCenter().getWorld().spawnEntity(getCenter().clone().add(0, 1, 0), EntityType.VILLAGER); + _villager.setProfession(Profession.FARMER); + String[] names = new String[] + { + "Tom", "Steve", "John", "Harry", "Andrew", "Daniel", "Jorge", "Jim" + }; + + if (UtilMath.r(5) == 0) + { + names = new String[] + { + "Moosworth", "Mooington", "Mooley", "Moose", "Mooskee", "Chicken", "Mooffy", "Moozzle" + }; + } + + for (int i = 0; i < 8; i++) + { + Location loc = getCenter().clone().add(UtilMath.r(26) - 13, 1, UtilMath.r(26) - 13); + Cow cow = (Cow) loc.getWorld().spawnEntity(loc, EntityType.COW); + + cow.setCustomName(C.cWhite + names[i]); + cow.setCustomNameVisible(true); + + _milked.put(cow, new ArrayList()); + } + + Host.CreatureAllowOverride = false; + } + + @EventHandler + public void onEntityInteract(PlayerInteractEntityEvent event) + { + Player p = event.getPlayer(); + + if (UtilPlayer.isSpectator(p)) + { + return; + } + + if (!Host.IsLive()) + { + return; + } + + ItemStack item = p.getItemInHand(); + + if (item == null) + return; + + Entity ent = event.getRightClicked(); + + if (_milked.containsKey(ent)) + { + if (item.getType() == Material.BUCKET) + { + if (!_milked.get(ent).contains(p.getName())) + { + p.setItemInHand(new ItemStack(Material.MILK_BUCKET)); + _milked.get(ent).add(p.getName()); + } + else + { + p.updateInventory(); + } + } + + event.setCancelled(true); + } + else if (ent == _villager) + { + if (item.getType() == Material.MILK_BUCKET) + { + p.setItemInHand(new ItemStack(Material.BUCKET)); + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 2, 0); + int score = _score.get(p.getName()) + 1; + _score.put(p.getName(), score); + + displayCount(p, ((Villager) ent).getEyeLocation().add(0, 0.3, 0), (score >= 5 ? C.cDGreen : score >= 3 ? C.cGreen + : score >= 2 ? C.cRed : C.cDRed) + score); + + if (score == 5) + { + SetCompleted(p); + } + } + + event.setCancelled(true); + } + } + + @EventHandler + public void onConsume(PlayerItemConsumeEvent event) + { + event.setCancelled(true); + event.getPlayer().updateInventory(); + } + + @Override + public ArrayList getSpawns() + { + ArrayList spawns = new ArrayList(); + + for (int x = -13; x <= 13; x++) + { + for (int z = -13; z <= 13; z++) + { + if (x % 2 == 0 && z % 2 == 0) + { + spawns.add(getCenter().clone().add(x + 0.5, 1.1, z + 0.5)); + } + } + } + + return spawns; + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenges/ChallengeNavigateMaze.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenges/ChallengeNavigateMaze.java new file mode 100644 index 000000000..2056bac3b --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenges/ChallengeNavigateMaze.java @@ -0,0 +1,246 @@ +package nautilus.game.arcade.game.games.mineware.challenges; + +import java.util.ArrayList; + +import mineplex.core.common.util.UtilPlayer; +import nautilus.game.arcade.game.games.mineware.Challenge; +import nautilus.game.arcade.game.games.mineware.MineWare; + +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.event.EventHandler; +import org.bukkit.event.player.PlayerMoveEvent; + +public class ChallengeNavigateMaze extends Challenge +{ + + public ChallengeNavigateMaze(MineWare host) + { + super(host, ChallengeType.FirstComplete, "Make it to the other side of the maze"); + } + + @Override + public ArrayList getSpawns() + { + ArrayList spawns = new ArrayList(); + + for (int z = -9; z <= 12; z++) + { + Location loc = getCenter().clone().add(-16, 1.1, z); + spawns.add(loc); + } + + return spawns; + } + + @EventHandler + public void onMove(PlayerMoveEvent event) + { + if (UtilPlayer.isSpectator(event.getPlayer())) + return; + + if (event.getTo().getY() >= 1 && event.getTo().getX() > 15) + { + SetCompleted(event.getPlayer()); + } + } + + @Override + public void cleanupRoom() + { + } + + @Override + public void setupPlayers() + { + setBorder(-20, 18, 0, 10, -20, 18); + } + + @Override + public void generateRoom() + { + for (int x = -18; x <= 20; x++) + { + for (int z = -12; z <= 15; z++) + { + Block b = getCenter().getBlock().getRelative(x, 0, z); + + if (z == -12 || z == 15) + { + for (int y = 1; y <= 3; y++) + { + Block block = b.getRelative(0, y, 0); + block.setType(Material.STONE); + block.setData((byte) 0); + addBlock(block); + } + } + + if (x > 14 || x < -12) + { + b.setType(Material.WOOL); + b.setData((byte) (x < 0 ? 14 : 13)); + } + else + { + b.setType(Material.STONE); + b.setData((byte) 0); + + Block block = b.getRelative(0, 4, 0); + + if (block.getX() == -12) + { + block.setType(Material.STONE); + block.setData((byte) 0); + } + else + { + block.setType(Material.STAINED_GLASS); + block.setData((byte) 8); + } + + addBlock(block); + } + + addBlock(b); + } + } + + for (int i = 0; i < 30; i++) + { + ArrayList mazeBlocks = generateMaze(); + + if (mazeValid()) + { + for (Block b : mazeBlocks) + { + addBlock(b); + } + break; + } + else + { + System.out.print("Generated bad maze, trying again.."); + for (Block b : mazeBlocks) + { + b.setTypeIdAndData(Material.AIR.getId(), (byte) 0, false); + } + } + } + } + + private boolean mazeValid() + { + ArrayList blocks = new ArrayList(); + ArrayList nextLoop = new ArrayList(); + + nextLoop.add(getCenter().getBlock().getRelative(-15, 1, 0)); + + blocks.addAll(nextLoop); + + while (!nextLoop.isEmpty()) + { + Block block = nextLoop.remove(0); + + for (BlockFace face : new BlockFace[] + { + BlockFace.EAST, BlockFace.WEST, BlockFace.SOUTH, BlockFace.NORTH + }) + { + Block b = block.getRelative(face); + + if (blocks.contains(b)) + continue; + + blocks.add(b); + + if (b.getType() == Material.STONE || b.getX() < -14 || b.getZ() < -12 || b.getZ() > 15) + continue; + + if (b.getX() >= 15) + { + return true; + } + + nextLoop.add(b); + } + } + + return false; + } + + private ArrayList generateMaze() + { + ArrayList blocks = new ArrayList(); + int[][] maze = new MazeGenerator(10, 10).getMaze(); + + // Divisable by 2's are up and down walls + // Other's are left and right. All walls have a corner block. + + // This means I need to loop over all of the blocks, figure out if its a corner if yes then set block + // Else if its a wall, then figure out if I'm making the wall or not + for (int x = 1; x < 10; x++) + { + for (int z = 1; z < 10; z++) + { + Block b = getCenter().getBlock().getRelative((x - 5) * 3, 1, (z - 5) * 3); + + for (int y = 0; y < 3; y++) + { + Block block = b.getRelative(0, y, 0); + + if (block.getType() == Material.STONE) + continue; + + block.setType(Material.STONE); + block.setData((byte) 0); + blocks.add(block); + } + + // Set blocks for x + if ((maze[x][z] & 8) == 0) + { + for (int i = 1; i <= 2; i++) + { + for (int y = 0; y < 3; y++) + { + Block block = b.getRelative(i, y, 0); + + if (block.getType() == Material.STONE) + continue; + + block.setType(Material.STONE); + block.setData((byte) 0); + blocks.add(block); + } + } + + } + + // Set blocks for z + if ((maze[x][z] & 1) == 0) + { + for (int i = 1; i <= 2; i++) + { + for (int y = 0; y < 3; y++) + { + Block block = b.getRelative(0, y, i); + + if (block.getType() == Material.STONE) + continue; + + block.setType(Material.STONE); + block.setData((byte) 0); + blocks.add(block); + } + } + + } + } + } + + return blocks; + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenges/ChallengePickASide.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenges/ChallengePickASide.java new file mode 100644 index 000000000..b09cb2337 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenges/ChallengePickASide.java @@ -0,0 +1,193 @@ +package nautilus.game.arcade.game.games.mineware.challenges; + +import java.util.ArrayList; + +import mineplex.core.common.util.C; +import mineplex.core.common.util.UtilServer; +import mineplex.core.common.util.UtilTextBottom; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; +import nautilus.game.arcade.game.games.mineware.Challenge; +import nautilus.game.arcade.game.games.mineware.MineWare; + +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.block.Block; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; + +public class ChallengePickASide extends Challenge +{ + private long _stageExpires; + private long _lastSound; + private boolean _isFalling; + + public ChallengePickASide(MineWare host) + { + super(host, ChallengeType.LastStanding, "Stand on the side with the least players! Don't be caught on the white blocks!"); + } + + public int getMinPlayers() + { + return 3; + } + + @Override + public ArrayList getSpawns() + { + ArrayList spawns = new ArrayList(); + + for (int x = -8; x <= 8; x++) + { + for (int z = -8; z <= 8; z++) + { + if (x % 2 == 0 && z % 2 == 0) + { + spawns.add(getCenter().clone().add(x + 0.5, 1.1, z + 0.5)); + } + } + } + + return spawns; + } + + @Override + public void cleanupRoom() + { + } + + @Override + public void setupPlayers() + { + setBorder(-10, 10, 0, 10, -10, 10); + } + + @EventHandler + public void OnTick(UpdateEvent event) + { + if (event.getType() != UpdateType.TICK) + { + return; + } + + if (!Host.IsLive()) + { + return; + } + + Player[] players = getChallengers().toArray(new Player[0]); + + if (_stageExpires < System.currentTimeMillis()) + { + UtilTextBottom.displayProgress(0, players); + + if (_isFalling) + { + _isFalling = false; + _stageExpires = System.currentTimeMillis() + 1500; + } + else + { + _isFalling = true; + _stageExpires = System.currentTimeMillis() + 4000; + + ArrayList red = new ArrayList(); + ArrayList blue = new ArrayList(); + ArrayList misc = new ArrayList(); + + for (Player player : getChallengers()) + { + Location loc = player.getLocation(); + + while (loc.getBlockY() > 0 && loc.getBlock().getType() != Material.STAINED_CLAY) + { + loc.add(0, -1, 0); + } + + byte data = loc.getBlock().getType() == Material.STAINED_CLAY ? loc.getBlock().getData() : 0; + + if (data == 11) + { + red.add(player); + } + else if (data == 14) + { + blue.add(player); + } + else + { + misc.add(player); + } + } + + Host.Announce(C.cRed + "RED: " + red.size(), true); + Host.Announce(C.cRed + "BLUE: " + blue.size(), false); + + if (misc.size() > 0) + { + Host.Announce(C.cRed + "MISC: " + misc.size(), false); + } + + if (!red.isEmpty() && !blue.isEmpty()) + { + if (red.size() < blue.size()) + { + misc.addAll(blue); + } + else if (blue.size() < red.size()) + { + misc.addAll(red); + } + + for (Player player : misc) + { + setLost(player); + } + } + } + } + else if (!_isFalling) + { + UtilTextBottom.displayProgress((_stageExpires - System.currentTimeMillis()) / 8D, players); + + if (_lastSound < System.currentTimeMillis()) + { + _lastSound = System.currentTimeMillis() + 1000; + + for (Player player : UtilServer.getPlayers()) + player.playSound(player.getLocation(), Sound.NOTE_STICKS, 1f, 1f); + } + } + else + { + UtilTextBottom.displayProgress(0, players); + } + } + + @Override + public void generateRoom() + { + for (int x = -10; x <= 10; x++) + { + for (int z = -10; z <= 10; z++) + { + for (int y = 0; y <= 2; y++) + { + Block b = getCenter().getBlock().getRelative(x, y, z); + + if (y == 0 || Math.abs(x) == 10 || Math.abs(z) == 10) + { + if (y > 0 && Math.abs(z) != 10) + continue; + + b.setType(Material.STAINED_CLAY); + b.setData((byte) (z < 0 ? 11 : z > 0 ? 14 : 0)); + addBlock(b); + } + } + } + } + } + +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenges/ChallengeShootChickens.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenges/ChallengeShootChickens.java new file mode 100644 index 000000000..742949398 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenges/ChallengeShootChickens.java @@ -0,0 +1,232 @@ +package nautilus.game.arcade.game.games.mineware.challenges; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; + +import mineplex.core.common.util.C; +import mineplex.core.common.util.UtilAlg; +import mineplex.core.common.util.UtilMath; +import mineplex.core.itemstack.ItemBuilder; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; +import nautilus.game.arcade.game.games.mineware.Challenge; +import nautilus.game.arcade.game.games.mineware.MineWare; + +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.Chicken; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.entity.Projectile; +import org.bukkit.event.EventHandler; +import org.bukkit.event.entity.EntityDeathEvent; +import org.bukkit.event.entity.ProjectileLaunchEvent; +import org.bukkit.inventory.ItemStack; + +public class ChallengeShootChickens extends Challenge +{ + private ArrayList _chickens = new ArrayList(); + private HashMap _killedChickens = new HashMap(); + private ArrayList _arrows = new ArrayList(); + + public ChallengeShootChickens(MineWare host) + { + super(host, ChallengeType.FirstComplete, "Shoot 6 chickens"); + } + + @Override + public void cleanupRoom() + { + for (Chicken chicken : _chickens) + { + chicken.remove(); + } + + for (Projectile arrow : _arrows) + { + arrow.remove(); + } + + Host.DamagePvE = false; + } + + @EventHandler + public void onShoot(ProjectileLaunchEvent event) + { + _arrows.add(event.getEntity()); + } + + @EventHandler + public void onDeath(EntityDeathEvent event) + { + event.getDrops().clear(); + event.setDroppedExp(0); + } + + @EventHandler + public void Damage(CustomDamageEvent event) + { + if (event.GetProjectile() == null) + { + event.SetCancelled("Not projectile damage"); + return; + } + + Player player = event.GetDamagerPlayer(true); + + if (player == null) + return; + + if (event.isCancelled()) + return; + + LivingEntity ent = event.GetDamageeEntity(); + + if (!_chickens.remove(ent)) + { + event.SetCancelled("Not a chicken"); + return; + } + + event.AddMod("Ensure Death", null, 10, false); + + int score = _killedChickens.get(player.getName()) + 1; + + Location sloc = player.getEyeLocation(); + sloc.add(UtilAlg.getTrajectory(sloc, ent.getEyeLocation()).multiply(Math.min(7, ent.getLocation().distance(sloc)))); + + displayCount(player, sloc, (score >= 6 ? C.cDGreen : score >= 4 ? C.cGreen : score >= 2 ? C.cRed : C.cDRed) + score); + + _killedChickens.put(player.getName(), score); + + if (score == 6) + { + SetCompleted(player); + } + } + + @EventHandler + public void onHalfSecond(UpdateEvent event) + { + if (!Host.IsLive()) + { + return; + } + + if (event.getType() != UpdateType.FAST) + { + return; + } + + Iterator itel = _chickens.iterator(); + + while (itel.hasNext()) + { + Chicken chicken = itel.next(); + + if (chicken.isOnGround() || !chicken.isValid()) + { + chicken.remove(); + itel.remove(); + } + } + + if (_chickens.size() < 13) + { + Location loc = getCenter().clone().add(UtilMath.r(20) - 10, 15, UtilMath.r(20) - 10); + + Host.CreatureAllowOverride = true; + Chicken chicken = (Chicken) loc.getWorld().spawnEntity(loc, EntityType.CHICKEN); + Host.CreatureAllowOverride = false; + chicken.setMaxHealth(0.1); + chicken.setHealth(0.1); + + _chickens.add(chicken); + } + } + + @Override + public void setupPlayers() + { + setBorder(-10, 10, 0, 10, -10, 10); + + for (Player player : Host.GetPlayers(true)) + { + player.getInventory().setItem(0, + new ItemBuilder(Material.BOW).addEnchantment(Enchantment.ARROW_INFINITE, 1).setUnbreakable(true).build()); + player.getInventory().setItem(9, new ItemStack(Material.ARROW)); + + _killedChickens.put(player.getName(), 0); + } + + Host.DamagePvE = true; + } + + @Override + public void generateRoom() + { + for (int x = -10; x <= 10; x++) + { + for (int z = -10; z <= 10; z++) + { + for (int y = 0; y <= 1; y++) + { + Block b = getCenter().getBlock().getRelative(x, y, z); + + if (y == 0) + { + b.setType(Material.GRASS); + } + else + { + if (Math.abs(x) == 10 || Math.abs(z) == 10) + { + b.setType(Material.FENCE); + } + else if (UtilMath.r(4) == 0) + { + if (UtilMath.r(8) == 0) + { + b.setType(UtilMath.random.nextBoolean() ? Material.YELLOW_FLOWER : Material.RED_ROSE); + } + else + { + b.setType(Material.LONG_GRASS); + b.setData((byte) 1); + } + } + } + + if (b.getType() != Material.AIR) + { + addBlock(b); + } + } + } + } + } + + @Override + public ArrayList getSpawns() + { + ArrayList spawns = new ArrayList(); + + for (int x = -8; x <= 8; x++) + { + for (int z = -8; z <= 8; z++) + { + if (x % 2 == 0 && z % 2 == 0) + { + spawns.add(getCenter().clone().add(x + 0.5, 1.1, z + 0.5)); + } + } + } + + return spawns; + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenges/ChallengeStandOnColor.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenges/ChallengeStandOnColor.java new file mode 100644 index 000000000..ce0e70068 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenges/ChallengeStandOnColor.java @@ -0,0 +1,213 @@ +package nautilus.game.arcade.game.games.mineware.challenges; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map.Entry; + +import mineplex.core.common.util.UtilInv; +import mineplex.core.common.util.UtilMath; +import mineplex.core.common.util.UtilServer; +import mineplex.core.common.util.UtilTextBottom; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; +import nautilus.game.arcade.game.games.mineware.Challenge; +import nautilus.game.arcade.game.games.mineware.MineWare; + +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.block.Block; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.inventory.ItemStack; + +public class ChallengeStandOnColor extends Challenge +{ + private ArrayList _colors = new ArrayList(); + private int _currentColor; + private boolean _isFalling; + private long _lastSound; + private long _stageExpires; + private long _timeDelay = 5000; + + public ChallengeStandOnColor(MineWare host) + { + super(host, ChallengeType.LastStanding, "Stand on the correct color"); + + for (int i = 0; i <= 15; i++) + { + _colors.add(i); + } + + _colors.remove(new Integer(2)); + _colors.remove(new Integer(6)); + _colors.remove(new Integer(7)); + _colors.remove(new Integer(9)); + _colors.remove(new Integer(12)); + } + + @Override + public void cleanupRoom() + { + for (Player player : Host.GetPlayers(true)) + { + UtilInv.Clear(player); + } + } + + private void generateFloor() + { + ArrayList> cords = new ArrayList>(); + + int i = UtilMath.r(_colors.size()); + + for (int x = -4; x <= 4; x++) + { + for (int z = -4; z <= 4; z++) + { + cords.add(new HashMap.SimpleEntry(x * 2, z * 2)); + } + } + + Collections.shuffle(cords); + + for (Entry entry : cords) + { + byte color = (byte) (int) _colors.get(i++); + + if (i >= _colors.size()) + { + i = 0; + } + for (int x = 0; x <= 1; x++) + { + for (int z = 0; z <= 1; z++) + { + Block b = getCenter().getBlock().getRelative(entry.getKey() + x, 0, entry.getValue() + z); + + b.setTypeIdAndData(Material.STAINED_CLAY.getId(), color, false); + addBlock(b); + } + } + } + } + + @Override + public void generateRoom() + { + setBorder(-20, 20, 0, 10, -20, 20); + generateFloor(); + } + + @Override + public ArrayList getSpawns() + { + ArrayList spawns = new ArrayList(); + + for (int x = -7; x <= 7; x++) + { + for (int z = -7; z <= 7; z++) + { + if (x % 2 == 0 && z % 2 == 0) + { + spawns.add(getCenter().clone().add(x + 0.5, 1.1, z + 0.5)); + } + } + } + + return spawns; + } + + @EventHandler + public void OnTick(UpdateEvent event) + { + if (event.getType() != UpdateType.TICK) + { + return; + } + + if (!Host.IsLive()) + { + return; + } + + Player[] players = getChallengers().toArray(new Player[0]); + + if (_stageExpires < System.currentTimeMillis()) + { + UtilTextBottom.displayProgress(0, players); + + if (_isFalling) + { + for (Player player : UtilServer.getPlayers()) + player.playSound(player.getLocation(), Sound.NOTE_PIANO, 2f, 0f); + + _timeDelay -= 800; + _isFalling = false; + _stageExpires = System.currentTimeMillis() + _timeDelay; + _currentColor = _colors.get(UtilMath.r(_colors.size())); + generateFloor(); + + for (Player player : getChallengers()) + { + for (int i = 0; i < 9; i++) + { + player.getInventory().setItem(i, new ItemStack(Material.STAINED_CLAY, 1, (short) _currentColor)); + } + } + } + else + { + _isFalling = true; + _stageExpires = System.currentTimeMillis() + 4000; + + for (int x = -8; x <= 9; x++) + { + for (int z = -8; z <= 9; z++) + { + Block b = getCenter().getBlock().getRelative(x, 0, z); + + if (b.getData() != _currentColor) + { + b.setTypeIdAndData(Material.AIR.getId(), (byte) 0, false); + addBlock(b); + } + } + } + } + } + else if (!_isFalling) + { + UtilTextBottom.displayProgress((_stageExpires - System.currentTimeMillis()) / (double) _timeDelay, players); + + if (_lastSound < System.currentTimeMillis()) + { + _lastSound = System.currentTimeMillis() + 1000; + + for (Player player : UtilServer.getPlayers()) + player.playSound(player.getLocation(), Sound.NOTE_STICKS, 1f, 1f); + } + } + else + { + UtilTextBottom.displayProgress(0, players); + } + } + + @Override + public void setupPlayers() + { + _stageExpires = System.currentTimeMillis() + _timeDelay; + _currentColor = _colors.get(UtilMath.r(_colors.size())); + + for (Player player : Host.GetPlayers(true)) + { + for (int i = 0; i < 9; i++) + { + player.getInventory().setItem(i, new ItemStack(Material.STAINED_CLAY, 1, (short) _currentColor)); + } + } + } + +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenges/MazeGenerator.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenges/MazeGenerator.java new file mode 100644 index 000000000..785911a54 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenges/MazeGenerator.java @@ -0,0 +1,104 @@ +package nautilus.game.arcade.game.games.mineware.challenges; + +import java.util.Arrays; +import java.util.Collections; + +/* + * recursive backtracking algorithm + * shamelessly borrowed from the ruby at + * http://weblog.jamisbuck.org/2010/12/27/maze-generation-recursive-backtracking + * + * This code taken from http://rosettacode.org/wiki/Maze_generation#Java + */ +public class MazeGenerator +{ + private final int x; + private final int y; + private final int[][] maze; + + public MazeGenerator(int x, int y) + { + this.x = x; + this.y = y; + maze = new int[this.x][this.y]; + generateMaze(0, 0); + } + + public int[][] getMaze() + { + return maze; + } + + public void display() + { + for (int i = 0; i < y; i++) + { + // draw the north edge + for (int j = 0; j < x; j++) + { + System.out.print((maze[j][i] & 1) == 0 ? "+---" : "+ "); + } + System.out.println("+"); + // draw the west edge + for (int j = 0; j < x; j++) + { + System.out.print((maze[j][i] & 8) == 0 ? "| " : " "); + } + System.out.println("|"); + } + // draw the bottom line + for (int j = 0; j < x; j++) + { + System.out.print("+---"); + } + System.out.println("+"); + } + + private void generateMaze(int cx, int cy) + { + DIR[] dirs = DIR.values(); + Collections.shuffle(Arrays.asList(dirs)); + for (DIR dir : dirs) + { + int nx = cx + dir.dx; + int ny = cy + dir.dy; + if (between(nx, x) && between(ny, y) && (maze[nx][ny] == 0)) + { + maze[cx][cy] |= dir.bit; + maze[nx][ny] |= dir.opposite.bit; + generateMaze(nx, ny); + } + } + } + + private boolean between(int v, int upper) + { + return (v >= 0) && (v < upper); + } + + private enum DIR + { + N(1, 0, -1), S(2, 0, 1), E(4, 1, 0), W(8, -1, 0); + private final int bit; + private final int dx; + private final int dy; + private DIR opposite; + + // use the static initializer to resolve forward references + static + { + N.opposite = S; + S.opposite = N; + E.opposite = W; + W.opposite = E; + } + + private DIR(int bit, int dx, int dy) + { + this.bit = bit; + this.dx = dx; + this.dy = dy; + } + }; + +} \ No newline at end of file diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/random/CraftLadder.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/random/CraftLadder.java deleted file mode 100644 index 2cb7ae54c..000000000 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/random/CraftLadder.java +++ /dev/null @@ -1,24 +0,0 @@ -package nautilus.game.arcade.game.games.mineware.random; - -import nautilus.game.arcade.game.games.mineware.MineWare; -import nautilus.game.arcade.game.games.mineware.order.OrderCraft; - -public class CraftLadder extends OrderCraft -{ - public CraftLadder(MineWare host) - { - super(host, "Craft some ladders", 65, -1, 1); - } - - @Override - public void Initialize() - { - - } - - @Override - public void Uninitialize() - { - - } -} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/random/CraftStoneShovel.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/random/CraftStoneShovel.java deleted file mode 100644 index 7c587446d..000000000 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/random/CraftStoneShovel.java +++ /dev/null @@ -1,24 +0,0 @@ -package nautilus.game.arcade.game.games.mineware.random; - -import nautilus.game.arcade.game.games.mineware.MineWare; -import nautilus.game.arcade.game.games.mineware.order.OrderCraft; - -public class CraftStoneShovel extends OrderCraft -{ - public CraftStoneShovel(MineWare host) - { - super(host, "Craft a stone shovel", 273, -1, 1); - } - - @Override - public void Initialize() - { - - } - - @Override - public void Uninitialize() - { - - } -} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/random/GatherCobble.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/random/GatherCobble.java deleted file mode 100644 index 06d8ad584..000000000 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/random/GatherCobble.java +++ /dev/null @@ -1,24 +0,0 @@ -package nautilus.game.arcade.game.games.mineware.random; - -import nautilus.game.arcade.game.games.mineware.MineWare; -import nautilus.game.arcade.game.games.mineware.order.OrderGather; - -public class GatherCobble extends OrderGather -{ - public GatherCobble(MineWare host) - { - super(host, "Pick up 10 Cobblestone", 4, -1, 10); - } - - @Override - public void Initialize() - { - - } - - @Override - public void Uninitialize() - { - - } -} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/random/GatherRedFlower.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/random/GatherRedFlower.java deleted file mode 100644 index 9a54ffd62..000000000 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/random/GatherRedFlower.java +++ /dev/null @@ -1,24 +0,0 @@ -package nautilus.game.arcade.game.games.mineware.random; - -import nautilus.game.arcade.game.games.mineware.MineWare; -import nautilus.game.arcade.game.games.mineware.order.OrderGather; - -public class GatherRedFlower extends OrderGather -{ - public GatherRedFlower(MineWare host) - { - super(host, "Pick 3 Red Roses", 38, -1, 3); - } - - @Override - public void Initialize() - { - - } - - @Override - public void Uninitialize() - { - - } -} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/random/GatherSand.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/random/GatherSand.java deleted file mode 100644 index 64f0fb9b3..000000000 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/random/GatherSand.java +++ /dev/null @@ -1,24 +0,0 @@ -package nautilus.game.arcade.game.games.mineware.random; - -import nautilus.game.arcade.game.games.mineware.MineWare; -import nautilus.game.arcade.game.games.mineware.order.OrderGather; - -public class GatherSand extends OrderGather -{ - public GatherSand(MineWare host) - { - super(host, "Pick up 16 Sand", 12, -1, 16); - } - - @Override - public void Initialize() - { - - } - - @Override - public void Uninitialize() - { - - } -} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/random/GatherYellowFlower.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/random/GatherYellowFlower.java deleted file mode 100644 index 66b3dc2f9..000000000 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/random/GatherYellowFlower.java +++ /dev/null @@ -1,24 +0,0 @@ -package nautilus.game.arcade.game.games.mineware.random; - -import nautilus.game.arcade.game.games.mineware.MineWare; -import nautilus.game.arcade.game.games.mineware.order.OrderGather; - -public class GatherYellowFlower extends OrderGather -{ - public GatherYellowFlower(MineWare host) - { - super(host, "Pick 4 Yellow Flowers", 37, -1, 4); - } - - @Override - public void Initialize() - { - - } - - @Override - public void Uninitialize() - { - - } -} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/random/PlaceDoor.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/random/PlaceDoor.java deleted file mode 100644 index 9f768220e..000000000 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/random/PlaceDoor.java +++ /dev/null @@ -1,24 +0,0 @@ -package nautilus.game.arcade.game.games.mineware.random; - -import nautilus.game.arcade.game.games.mineware.MineWare; -import nautilus.game.arcade.game.games.mineware.order.OrderPlace; - -public class PlaceDoor extends OrderPlace -{ - public PlaceDoor(MineWare host) - { - super(host, "Place a wooden door", 64, -1, 1); - } - - @Override - public void Initialize() - { - - } - - @Override - public void Uninitialize() - { - - } -} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/OldMineWare.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/OldMineWare.java new file mode 100644 index 000000000..919e9de19 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/OldMineWare.java @@ -0,0 +1,352 @@ +package nautilus.game.arcade.game.games.oldmineware; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; + +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.entity.Chicken; +import org.bukkit.entity.Cow; +import org.bukkit.entity.Creature; +import org.bukkit.entity.Ghast; +import org.bukkit.entity.Pig; +import org.bukkit.entity.Player; +import org.bukkit.entity.Sheep; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.HandlerList; +import org.bukkit.event.entity.EntityTargetEvent; +import org.bukkit.event.player.PlayerDropItemEvent; +import org.bukkit.util.Vector; + +import mineplex.core.common.util.C; +import mineplex.core.common.util.UtilAlg; +import mineplex.core.common.util.UtilBlock; +import mineplex.core.common.util.UtilMath; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; +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.GameType; +import nautilus.game.arcade.events.GameStateChangeEvent; +import nautilus.game.arcade.game.SoloGame; +import nautilus.game.arcade.game.games.oldmineware.order.Order; +import nautilus.game.arcade.game.games.oldmineware.random.*; +import nautilus.game.arcade.game.games.runner.kits.KitLeaper; +import nautilus.game.arcade.kit.Kit; + +public class OldMineWare extends SoloGame +{ + private HashMap _lives = new HashMap(); + + private Order _order = null; + private long _orderTime = 0; + private int _orderCount = 0; + + private ArrayList _orders = new ArrayList(); + private ArrayList _ordersCopy = new ArrayList(); + + private Location _ghastLoc = null; + private Location _ghastTarget = null; + private Ghast _ghast = null; + private ArrayList _mobLocs = new ArrayList(); + private ArrayList _mobs = new ArrayList(); + + public OldMineWare(ArcadeManager manager) + { + super(manager, GameType.OldMineWare, + + new Kit[] + { + new KitLeaper(manager), + }, + + new String[] + { + "Follow the orders given in chat!", + "First half to follow it win the round.", + "Other players lose one life.", + "Last player with lives wins!" + }); + + this.PrepareFreeze = false; + + this.DamagePvP = false; + + this.BlockPlace = true; + this.BlockBreak = true; + + this.ItemDrop = true; + this.ItemPickup = true; + + InventoryOpenBlock = true; + InventoryOpenChest = true; + InventoryClick = true; + + PopulateOrders(); + } + + @Override + public void ParseData() + { + _ghastLoc = WorldData.GetDataLocs("WHITE").get(0); + + while (_mobLocs.size() < 100) + { + Location loc = WorldData.GetRandomXZ(); + + while (UtilBlock.airFoliage(loc.getBlock())) + loc.add(0, -1, 0); + + Material mat = loc.getBlock().getType(); + + if (mat == Material.STONE || + mat == Material.GRASS || + mat == Material.SAND) + _mobLocs.add(loc); + } + } + + public void PopulateOrders() + { + _orders.add(new ActionMilkCow(this)); + _orders.add(new ActionShearSheep(this)); + + _orders.add(new CraftLadder(this)); + _orders.add(new CraftStoneShovel(this)); + + _orders.add(new DamageChicken(this)); + _orders.add(new DamageFall(this)); + _orders.add(new DamageGhast(this)); + + _orders.add(new GatherCobble(this)); + _orders.add(new GatherRedFlower(this)); + _orders.add(new GatherYellowFlower(this)); + _orders.add(new GatherSand(this)); + + _orders.add(new PlaceDoor(this)); + + _orders.add(new RideBoat(this)); + _orders.add(new RidePig(this)); + + _orders.add(new StandAlone(this)); + _orders.add(new StandShelter(this)); + _orders.add(new StandStone(this)); + _orders.add(new StandWater(this)); + } + + public Order GetOrder() + { + if (_ordersCopy.isEmpty()) + { + for (Order order : _orders) + { + _ordersCopy.add(order); + } + } + + return _ordersCopy.remove(UtilMath.r(_ordersCopy.size())); + } + + @EventHandler(priority = EventPriority.HIGH) + public void GameStateChange(GameStateChangeEvent event) + { + if (event.GetState() != GameState.Prepare) + return; + + for (Player player : GetPlayers(true)) + _lives.put(player, 10); + } + + @EventHandler + public void UpdateOrder(UpdateEvent event) + { + if (event.getType() != UpdateType.TICK) + return; + + if (!IsLive()) + return; + + //New Order + if (_order == null) + { + if (!UtilTime.elapsed(_orderTime, 1000)) + return; + + _order = GetOrder(); + + if (_order == null) + { + SetState(GameState.Dead); + return; + } + + //Register + UtilServer.getServer().getPluginManager().registerEvents(_order, Manager.getPlugin()); + _order.StartOrder(_orderCount++); + + Announce(C.cYellow + C.Bold + _order.GetOrder().toUpperCase()); + + /* XXX + GetObjectiveSide().setDisplayName( + ChatColor.WHITE + "§lMineWare " + C.cGreen + "§l" + + "Round " + _orderCount); + */ + } + //Update Order + else + { + if (_order.Finish()) + { + _orderTime = System.currentTimeMillis(); + + if (_order.PlayerHasCompleted()) + { + for (Player player : GetPlayers(true)) + { + if (!_order.IsCompleted(player)) + { + LoseLife(player); + + if (IsAlive(player)) + _order.FailItems(player); + } + } + } + + + //Deregister + HandlerList.unregisterAll(_order); + _order.EndOrder(); + _order = null; + } + else + { + //Set Level + for (Player player : UtilServer.getPlayers()) + { + player.setLevel(_order.GetRemainingPlaces()); + player.setExp(_order.GetTimeLeftPercent()); + } + } + } + } + + private int GetLives(Player player) + { + if (!_lives.containsKey(player)) + return 0; + + if (!IsAlive(player)) + return 0; + + return _lives.get(player); + } + + private void LoseLife(Player player) + { + int lives = GetLives(player) - 1; + + if (lives > 0) + { + UtilPlayer.message(player, C.cRed + C.Bold + "You failed the task!"); + UtilPlayer.message(player, C.cRed + C.Bold + "You have " + lives + " lives left!"); + player.playSound(player.getLocation(), Sound.NOTE_BASS_GUITAR, 2f, 0.5f); + + _lives.put(player, lives); + } + else + { + UtilPlayer.message(player, C.cRed + C.Bold + "You are out of the game!"); + player.playSound(player.getLocation(), Sound.EXPLODE, 2f, 1f); + + player.damage(5000); + + Scoreboard.ResetScore(player.getName()); + } + } + + @EventHandler + public void UpdateMobs(UpdateEvent event) + { + if (event.getType() != UpdateType.FAST) + return; + + if (!InProgress()) + return; + + Iterator mobIterator = _mobs.iterator(); + + while (mobIterator.hasNext()) + { + Creature mob = mobIterator.next(); + + if (!mob.isValid()) + { + mob.remove(); + mobIterator.remove(); + } + } + + if (_mobs.size() < 200) + { + Location loc = _mobLocs.get(UtilMath.r(_mobLocs.size())).clone().add(new Vector(0.5,1,0.5)); + double r = Math.random(); + + this.CreatureAllowOverride = true; + + if (r > 0.75) _mobs.add(loc.getWorld().spawn(loc, Pig.class)); + else if (r > 0.5) _mobs.add(loc.getWorld().spawn(loc, Cow.class)); + else if (r > 0.25) _mobs.add(loc.getWorld().spawn(loc, Chicken.class)); + else _mobs.add(loc.getWorld().spawn(loc, Sheep.class)); + + this.CreatureAllowOverride = false; + } + + if (_ghast == null || !_ghast.isValid()) + { + if (_ghast != null) + _ghast.remove(); + + this.CreatureAllowOverride = true; + _ghast = _ghastLoc.getWorld().spawn(_ghastLoc, Ghast.class); + this.CreatureAllowOverride = false; + + _ghast.setMaxHealth(10000); + _ghast.setHealth(_ghast.getMaxHealth()); + } + else + { + //New Target + if (_ghastTarget == null || UtilMath.offset(_ghast.getLocation(), _ghastTarget) < 5) + { + _ghastTarget = _ghastLoc.clone().add(40 - 80*Math.random(), -20*Math.random(), 40 - 80*Math.random()); + } + + _ghast.teleport(_ghast.getLocation().add(UtilAlg.getTrajectory(_ghast.getLocation(), _ghastTarget).multiply(0.1))); + } + } + + @EventHandler + public void GhastTarget(EntityTargetEvent event) + { + if (event.getEntity().equals(_ghast)) + event.setCancelled(true); + } + + @Override + public int GetScoreboardScore(Player player) + { + return GetLives(player); + } + + @EventHandler + public void ItemDrop(PlayerDropItemEvent event) + { + event.getItemDrop().remove(); + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/order/Order.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/order/Order.java similarity index 91% rename from Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/order/Order.java rename to Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/order/Order.java index d1802065c..a3bc65606 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/order/Order.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/order/Order.java @@ -1,11 +1,11 @@ -package nautilus.game.arcade.game.games.mineware.order; +package nautilus.game.arcade.game.games.oldmineware.order; import java.util.HashSet; import mineplex.core.common.util.C; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilTime; -import nautilus.game.arcade.game.games.mineware.MineWare; +import nautilus.game.arcade.game.games.oldmineware.OldMineWare; import org.bukkit.Sound; import org.bukkit.entity.Player; @@ -13,7 +13,7 @@ import org.bukkit.event.Listener; public abstract class Order implements Listener { - public MineWare Host; + public OldMineWare Host; private String _order; @@ -22,7 +22,7 @@ public abstract class Order implements Listener private HashSet _completed = new HashSet(); - public Order(MineWare host, String order) + public Order(OldMineWare host, String order) { Host = host; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/order/OrderCraft.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/order/OrderCraft.java similarity index 91% rename from Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/order/OrderCraft.java rename to Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/order/OrderCraft.java index 30c1e3530..5f1186993 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/order/OrderCraft.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/order/OrderCraft.java @@ -1,10 +1,10 @@ -package nautilus.game.arcade.game.games.mineware.order; +package nautilus.game.arcade.game.games.oldmineware.order; import java.util.HashMap; import mineplex.core.common.util.UtilInv; import mineplex.core.itemstack.ItemStackFactory; -import nautilus.game.arcade.game.games.mineware.MineWare; +import nautilus.game.arcade.game.games.oldmineware.OldMineWare; import org.bukkit.Material; import org.bukkit.Sound; @@ -23,7 +23,7 @@ public abstract class OrderCraft extends Order private byte _data; private int _req; - public OrderCraft(MineWare host, String order, int id, int data, int required) + public OrderCraft(OldMineWare host, String order, int id, int data, int required) { super(host, order); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/order/OrderGather.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/order/OrderGather.java similarity index 88% rename from Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/order/OrderGather.java rename to Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/order/OrderGather.java index 18a4712bf..1ed1a32fc 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/order/OrderGather.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/order/OrderGather.java @@ -1,10 +1,10 @@ -package nautilus.game.arcade.game.games.mineware.order; +package nautilus.game.arcade.game.games.oldmineware.order; import java.util.HashMap; import mineplex.core.common.util.UtilInv; import mineplex.core.itemstack.ItemStackFactory; -import nautilus.game.arcade.game.games.mineware.MineWare; +import nautilus.game.arcade.game.games.oldmineware.OldMineWare; import org.bukkit.Sound; import org.bukkit.entity.Player; @@ -19,7 +19,7 @@ public abstract class OrderGather extends Order private byte _data; private int _req; - public OrderGather(MineWare host, String order, int id, int data, int required) + public OrderGather(OldMineWare host, String order, int id, int data, int required) { super(host, order); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/order/OrderPlace.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/order/OrderPlace.java similarity index 86% rename from Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/order/OrderPlace.java rename to Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/order/OrderPlace.java index db0991c84..89e24c25f 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/order/OrderPlace.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/order/OrderPlace.java @@ -1,8 +1,8 @@ -package nautilus.game.arcade.game.games.mineware.order; +package nautilus.game.arcade.game.games.oldmineware.order; import java.util.HashMap; -import nautilus.game.arcade.game.games.mineware.MineWare; +import nautilus.game.arcade.game.games.oldmineware.OldMineWare; import org.bukkit.Sound; import org.bukkit.entity.Player; @@ -17,7 +17,7 @@ public abstract class OrderPlace extends Order private byte _data; private int _req; - public OrderPlace(MineWare host, String order, int id, int data, int required) + public OrderPlace(OldMineWare host, String order, int id, int data, int required) { super(host, order); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/random/ActionMilkCow.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/random/ActionMilkCow.java similarity index 80% rename from Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/random/ActionMilkCow.java rename to Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/random/ActionMilkCow.java index 8c3f99904..ac6a1cc84 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/random/ActionMilkCow.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/random/ActionMilkCow.java @@ -1,4 +1,4 @@ -package nautilus.game.arcade.game.games.mineware.random; +package nautilus.game.arcade.game.games.oldmineware.random; import org.bukkit.Material; import org.bukkit.entity.Cow; @@ -8,12 +8,12 @@ import org.bukkit.event.player.PlayerInteractEntityEvent; import org.bukkit.inventory.ItemStack; import mineplex.core.common.util.UtilGear; -import nautilus.game.arcade.game.games.mineware.MineWare; -import nautilus.game.arcade.game.games.mineware.order.Order; +import nautilus.game.arcade.game.games.oldmineware.OldMineWare; +import nautilus.game.arcade.game.games.oldmineware.order.Order; public class ActionMilkCow extends Order { - public ActionMilkCow(MineWare host) + public ActionMilkCow(OldMineWare host) { super(host, "milk a cow"); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/random/ActionShearSheep.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/random/ActionShearSheep.java similarity index 75% rename from Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/random/ActionShearSheep.java rename to Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/random/ActionShearSheep.java index 0dcd3e13f..ff8f55fbf 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/random/ActionShearSheep.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/random/ActionShearSheep.java @@ -1,4 +1,4 @@ -package nautilus.game.arcade.game.games.mineware.random; +package nautilus.game.arcade.game.games.oldmineware.random; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -6,12 +6,12 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.player.PlayerShearEntityEvent; import org.bukkit.inventory.ItemStack; -import nautilus.game.arcade.game.games.mineware.MineWare; -import nautilus.game.arcade.game.games.mineware.order.Order; +import nautilus.game.arcade.game.games.oldmineware.OldMineWare; +import nautilus.game.arcade.game.games.oldmineware.order.Order; public class ActionShearSheep extends Order { - public ActionShearSheep(MineWare host) + public ActionShearSheep(OldMineWare host) { super(host, "shear a sheep"); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/random/CraftLadder.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/random/CraftLadder.java new file mode 100644 index 000000000..de3423cf5 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/random/CraftLadder.java @@ -0,0 +1,24 @@ +package nautilus.game.arcade.game.games.oldmineware.random; + +import nautilus.game.arcade.game.games.oldmineware.OldMineWare; +import nautilus.game.arcade.game.games.oldmineware.order.OrderCraft; + +public class CraftLadder extends OrderCraft +{ + public CraftLadder(OldMineWare host) + { + super(host, "Craft some ladders", 65, -1, 1); + } + + @Override + public void Initialize() + { + + } + + @Override + public void Uninitialize() + { + + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/random/CraftStoneShovel.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/random/CraftStoneShovel.java new file mode 100644 index 000000000..67bb917d7 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/random/CraftStoneShovel.java @@ -0,0 +1,24 @@ +package nautilus.game.arcade.game.games.oldmineware.random; + +import nautilus.game.arcade.game.games.oldmineware.OldMineWare; +import nautilus.game.arcade.game.games.oldmineware.order.OrderCraft; + +public class CraftStoneShovel extends OrderCraft +{ + public CraftStoneShovel(OldMineWare host) + { + super(host, "Craft a stone shovel", 273, -1, 1); + } + + @Override + public void Initialize() + { + + } + + @Override + public void Uninitialize() + { + + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/random/DamageChicken.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/random/DamageChicken.java similarity index 79% rename from Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/random/DamageChicken.java rename to Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/random/DamageChicken.java index 26182e868..c5020a63c 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/random/DamageChicken.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/random/DamageChicken.java @@ -1,4 +1,4 @@ -package nautilus.game.arcade.game.games.mineware.random; +package nautilus.game.arcade.game.games.oldmineware.random; import org.bukkit.entity.Chicken; import org.bukkit.entity.LivingEntity; @@ -7,12 +7,12 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import mineplex.minecraft.game.core.damage.CustomDamageEvent; -import nautilus.game.arcade.game.games.mineware.MineWare; -import nautilus.game.arcade.game.games.mineware.order.Order; +import nautilus.game.arcade.game.games.oldmineware.OldMineWare; +import nautilus.game.arcade.game.games.oldmineware.order.Order; public class DamageChicken extends Order { - public DamageChicken(MineWare host) + public DamageChicken(OldMineWare host) { super(host, "punch a chicken"); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/random/DamageFall.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/random/DamageFall.java similarity index 74% rename from Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/random/DamageFall.java rename to Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/random/DamageFall.java index 6a700de8b..3e9a667a3 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/random/DamageFall.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/random/DamageFall.java @@ -1,16 +1,16 @@ -package nautilus.game.arcade.game.games.mineware.random; +package nautilus.game.arcade.game.games.oldmineware.random; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import mineplex.minecraft.game.core.damage.CustomDamageEvent; -import nautilus.game.arcade.game.games.mineware.MineWare; -import nautilus.game.arcade.game.games.mineware.order.Order; +import nautilus.game.arcade.game.games.oldmineware.OldMineWare; +import nautilus.game.arcade.game.games.oldmineware.order.Order; public class DamageFall extends Order { - public DamageFall(MineWare host) + public DamageFall(OldMineWare host) { super(host, "Take fall damage"); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/random/DamageGhast.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/random/DamageGhast.java similarity index 86% rename from Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/random/DamageGhast.java rename to Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/random/DamageGhast.java index 1ec28a023..1f0b34531 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/random/DamageGhast.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/random/DamageGhast.java @@ -1,4 +1,4 @@ -package nautilus.game.arcade.game.games.mineware.random; +package nautilus.game.arcade.game.games.oldmineware.random; import org.bukkit.Material; import org.bukkit.entity.Ghast; @@ -11,12 +11,12 @@ import org.bukkit.inventory.ItemStack; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import mineplex.minecraft.game.core.damage.CustomDamageEvent; -import nautilus.game.arcade.game.games.mineware.MineWare; -import nautilus.game.arcade.game.games.mineware.order.Order; +import nautilus.game.arcade.game.games.oldmineware.OldMineWare; +import nautilus.game.arcade.game.games.oldmineware.order.Order; public class DamageGhast extends Order { - public DamageGhast(MineWare host) + public DamageGhast(OldMineWare host) { super(host, "shoot the ghast"); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/random/GatherCobble.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/random/GatherCobble.java new file mode 100644 index 000000000..f0ad7c488 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/random/GatherCobble.java @@ -0,0 +1,24 @@ +package nautilus.game.arcade.game.games.oldmineware.random; + +import nautilus.game.arcade.game.games.oldmineware.OldMineWare; +import nautilus.game.arcade.game.games.oldmineware.order.OrderGather; + +public class GatherCobble extends OrderGather +{ + public GatherCobble(OldMineWare host) + { + super(host, "Pick up 10 Cobblestone", 4, -1, 10); + } + + @Override + public void Initialize() + { + + } + + @Override + public void Uninitialize() + { + + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/random/GatherRedFlower.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/random/GatherRedFlower.java new file mode 100644 index 000000000..95f6cc716 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/random/GatherRedFlower.java @@ -0,0 +1,24 @@ +package nautilus.game.arcade.game.games.oldmineware.random; + +import nautilus.game.arcade.game.games.oldmineware.OldMineWare; +import nautilus.game.arcade.game.games.oldmineware.order.OrderGather; + +public class GatherRedFlower extends OrderGather +{ + public GatherRedFlower(OldMineWare host) + { + super(host, "Pick 3 Red Roses", 38, -1, 3); + } + + @Override + public void Initialize() + { + + } + + @Override + public void Uninitialize() + { + + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/random/GatherSand.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/random/GatherSand.java new file mode 100644 index 000000000..440410865 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/random/GatherSand.java @@ -0,0 +1,24 @@ +package nautilus.game.arcade.game.games.oldmineware.random; + +import nautilus.game.arcade.game.games.oldmineware.OldMineWare; +import nautilus.game.arcade.game.games.oldmineware.order.OrderGather; + +public class GatherSand extends OrderGather +{ + public GatherSand(OldMineWare host) + { + super(host, "Pick up 16 Sand", 12, -1, 16); + } + + @Override + public void Initialize() + { + + } + + @Override + public void Uninitialize() + { + + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/random/GatherYellowFlower.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/random/GatherYellowFlower.java new file mode 100644 index 000000000..09f86376d --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/random/GatherYellowFlower.java @@ -0,0 +1,24 @@ +package nautilus.game.arcade.game.games.oldmineware.random; + +import nautilus.game.arcade.game.games.oldmineware.OldMineWare; +import nautilus.game.arcade.game.games.oldmineware.order.OrderGather; + +public class GatherYellowFlower extends OrderGather +{ + public GatherYellowFlower(OldMineWare host) + { + super(host, "Pick 4 Yellow Flowers", 37, -1, 4); + } + + @Override + public void Initialize() + { + + } + + @Override + public void Uninitialize() + { + + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/random/PlaceDoor.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/random/PlaceDoor.java new file mode 100644 index 000000000..de267c011 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/random/PlaceDoor.java @@ -0,0 +1,24 @@ +package nautilus.game.arcade.game.games.oldmineware.random; + +import nautilus.game.arcade.game.games.oldmineware.OldMineWare; +import nautilus.game.arcade.game.games.oldmineware.order.OrderPlace; + +public class PlaceDoor extends OrderPlace +{ + public PlaceDoor(OldMineWare host) + { + super(host, "Place a wooden door", 64, -1, 1); + } + + @Override + public void Initialize() + { + + } + + @Override + public void Uninitialize() + { + + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/random/RideBoat.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/random/RideBoat.java similarity index 75% rename from Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/random/RideBoat.java rename to Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/random/RideBoat.java index 42bb40d82..407c0e45b 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/random/RideBoat.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/random/RideBoat.java @@ -1,4 +1,4 @@ -package nautilus.game.arcade.game.games.mineware.random; +package nautilus.game.arcade.game.games.oldmineware.random; import org.bukkit.entity.Boat; import org.bukkit.entity.Player; @@ -6,12 +6,12 @@ import org.bukkit.event.EventHandler; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; -import nautilus.game.arcade.game.games.mineware.MineWare; -import nautilus.game.arcade.game.games.mineware.order.Order; +import nautilus.game.arcade.game.games.oldmineware.OldMineWare; +import nautilus.game.arcade.game.games.oldmineware.order.Order; public class RideBoat extends Order { - public RideBoat(MineWare host) + public RideBoat(OldMineWare host) { super(host, "Sit in a Boat"); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/random/RidePig.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/random/RidePig.java similarity index 80% rename from Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/random/RidePig.java rename to Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/random/RidePig.java index 8b737287a..2211166a6 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/random/RidePig.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/random/RidePig.java @@ -1,4 +1,4 @@ -package nautilus.game.arcade.game.games.mineware.random; +package nautilus.game.arcade.game.games.oldmineware.random; import org.bukkit.Material; import org.bukkit.entity.Pig; @@ -8,12 +8,12 @@ import org.bukkit.inventory.ItemStack; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; -import nautilus.game.arcade.game.games.mineware.MineWare; -import nautilus.game.arcade.game.games.mineware.order.Order; +import nautilus.game.arcade.game.games.oldmineware.OldMineWare; +import nautilus.game.arcade.game.games.oldmineware.order.Order; public class RidePig extends Order { - public RidePig(MineWare host) + public RidePig(OldMineWare host) { super(host, "ride a pig"); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/random/StandAlone.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/random/StandAlone.java similarity index 79% rename from Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/random/StandAlone.java rename to Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/random/StandAlone.java index b568c9e24..ec6458c0f 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/random/StandAlone.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/random/StandAlone.java @@ -1,4 +1,4 @@ -package nautilus.game.arcade.game.games.mineware.random; +package nautilus.game.arcade.game.games.oldmineware.random; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -6,12 +6,12 @@ import org.bukkit.event.EventHandler; import mineplex.core.common.util.UtilMath; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; -import nautilus.game.arcade.game.games.mineware.MineWare; -import nautilus.game.arcade.game.games.mineware.order.Order; +import nautilus.game.arcade.game.games.oldmineware.OldMineWare; +import nautilus.game.arcade.game.games.oldmineware.order.Order; public class StandAlone extends Order { - public StandAlone(MineWare host) + public StandAlone(OldMineWare host) { super(host, "Run away from everyone"); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/random/StandShelter.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/random/StandShelter.java similarity index 81% rename from Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/random/StandShelter.java rename to Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/random/StandShelter.java index ce0c3cdca..5197f1ebf 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/random/StandShelter.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/random/StandShelter.java @@ -1,4 +1,4 @@ -package nautilus.game.arcade.game.games.mineware.random; +package nautilus.game.arcade.game.games.oldmineware.random; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; @@ -7,12 +7,12 @@ import org.bukkit.event.EventHandler; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; -import nautilus.game.arcade.game.games.mineware.MineWare; -import nautilus.game.arcade.game.games.mineware.order.Order; +import nautilus.game.arcade.game.games.oldmineware.OldMineWare; +import nautilus.game.arcade.game.games.oldmineware.order.Order; public class StandShelter extends Order { - public StandShelter(MineWare host) + public StandShelter(OldMineWare host) { super(host, "take shelter from rain"); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/random/StandStone.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/random/StandStone.java similarity index 76% rename from Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/random/StandStone.java rename to Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/random/StandStone.java index e88e9df61..abc09c80e 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/random/StandStone.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/random/StandStone.java @@ -1,4 +1,4 @@ -package nautilus.game.arcade.game.games.mineware.random; +package nautilus.game.arcade.game.games.oldmineware.random; import org.bukkit.Material; import org.bukkit.block.BlockFace; @@ -7,12 +7,12 @@ import org.bukkit.event.EventHandler; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; -import nautilus.game.arcade.game.games.mineware.MineWare; -import nautilus.game.arcade.game.games.mineware.order.Order; +import nautilus.game.arcade.game.games.oldmineware.OldMineWare; +import nautilus.game.arcade.game.games.oldmineware.order.Order; public class StandStone extends Order { - public StandStone(MineWare host) + public StandStone(OldMineWare host) { super(host, "Stand on stone"); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/random/StandWater.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/random/StandWater.java similarity index 73% rename from Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/random/StandWater.java rename to Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/random/StandWater.java index 69d7e2706..3ffafc56e 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/random/StandWater.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/oldmineware/random/StandWater.java @@ -1,16 +1,16 @@ -package nautilus.game.arcade.game.games.mineware.random; +package nautilus.game.arcade.game.games.oldmineware.random; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; -import nautilus.game.arcade.game.games.mineware.MineWare; -import nautilus.game.arcade.game.games.mineware.order.Order; +import nautilus.game.arcade.game.games.oldmineware.OldMineWare; +import nautilus.game.arcade.game.games.oldmineware.order.Order; public class StandWater extends Order { - public StandWater(MineWare host) + public StandWater(OldMineWare host) { super(host, "Go for a swim"); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/SurvivalGames.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/SurvivalGames.java index d3e3a08d8..520d558c0 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/SurvivalGames.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/SurvivalGames.java @@ -43,7 +43,6 @@ import org.bukkit.event.hanging.HangingBreakEvent; import org.bukkit.event.inventory.InventoryCloseEvent; import org.bukkit.event.inventory.PrepareItemCraftEvent; import org.bukkit.event.player.PlayerChangedWorldEvent; -import org.bukkit.event.player.PlayerChatEvent; import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerJoinEvent; @@ -913,16 +912,6 @@ public class SurvivalGames extends SoloGame } } - @EventHandler - public void onChat(PlayerChatEvent event) - { - if (event.getMessage().equalsIgnoreCase("start game") && GetState() == GameState.Recruit) - { - // TODO Remove - getArcadeManager().GetGameManager().StateCountdown(this, 1, true); - } - } - @EventHandler public void DisableDamageLevel(CustomDamageEvent event) { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/WizardSpellMenu.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/WizardSpellMenu.java index 7fccee6e7..f24f415fa 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/WizardSpellMenu.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/WizardSpellMenu.java @@ -2,6 +2,7 @@ package nautilus.game.arcade.game.games.wizards; import mineplex.core.MiniPlugin; import mineplex.core.common.util.C; +import mineplex.core.common.util.UtilInv; import mineplex.core.itemstack.ItemBuilder; import nautilus.game.arcade.events.GameStateChangeEvent; import nautilus.game.arcade.game.Game.GameState; @@ -10,15 +11,17 @@ import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; import org.bukkit.event.block.Action; import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.inventory.InventoryHolder; import org.bukkit.inventory.ItemStack; import org.bukkit.plugin.java.JavaPlugin; -public class WizardSpellMenu extends MiniPlugin +public class WizardSpellMenu extends MiniPlugin { private Wizards _wizards; private WizardSpellMenuShop _wizardShop; @@ -57,6 +60,19 @@ public class WizardSpellMenu extends MiniPlugin }); } + @EventHandler(priority = EventPriority.HIGH) + public void Observer(PlayerCommandPreprocessEvent event) + { + if (event.getMessage().equalsIgnoreCase("/spec")) + { + if (!_wizards.IsAlive(event.getPlayer()) + && !UtilInv.contains(event.getPlayer(), _wizardSpells.getType(), (byte) 0, 1)) + { + event.getPlayer().getInventory().setItem(0, _wizardSpells); + } + } + } + @EventHandler public void onJoin(GameStateChangeEvent event) { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java index be15c1195..f68614c57 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java @@ -1111,6 +1111,9 @@ public class Wizards extends SoloGame @EventHandler public void onClick(InventoryClickEvent event) { + if (event.getClickedInventory() == null || !(event.getClickedInventory().getHolder() instanceof BlockState)) + return; + ItemStack item = event.getCurrentItem(); if (item != null) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameCreationManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameCreationManager.java index f91764e84..a749ac987 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameCreationManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameCreationManager.java @@ -1,5 +1,6 @@ package nautilus.game.arcade.managers; +import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; @@ -188,8 +189,28 @@ public class GameCreationManager implements Listener _lastGames.add(0, gameType); - //Make Game - Manager.SetGame(Manager.GetGameFactory().CreateGame(gameType, pastTeams)); + try + { + Game game = gameType.getGameClass().getConstructor(ArcadeManager.class).newInstance(Manager); + + Manager.SetGame(game); + } + catch (NoSuchMethodException ex) + { + System.err.println("Is the constructor for " + gameType.GetName() + " using only one argument?"); + ex.printStackTrace(); + return; + } + catch (InvocationTargetException ex) + { + ex.getCause().printStackTrace(); + return; + } + catch (Exception ex) + { + ex.printStackTrace(); + return; + } if (Manager.GetGame() == null) { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameFlagManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameFlagManager.java index ff5c02a6b..fdeb66332 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameFlagManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameFlagManager.java @@ -840,7 +840,7 @@ public class GameFlagManager implements Listener for (Player player : UtilServer.getPlayers()) { - if (!game.isInsideMap(player.getLocation()) && game.IsAlive(player)) + if (!game.isInsideMap(player) && game.IsAlive(player)) { if (!Manager.IsAlive(player) || ((CraftPlayer)player).getHandle().spectating) { @@ -917,6 +917,9 @@ public class GameFlagManager implements Listener if (!game.TeleportsDisqualify) return; + if (!game.IsAlive(event.getPlayer())) + return; + //Remove Kit game.RemoveTeamPreference(event.getPlayer()); game.GetPlayerKits().remove(event.getPlayer()); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameHostManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameHostManager.java index 066b86440..e592af3cc 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameHostManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameHostManager.java @@ -103,7 +103,7 @@ public class GameHostManager implements Listener legendGames.add(GameType.SnowFight); legendGames.add(GameType.Gravity); legendGames.add(GameType.Barbarians); - legendGames.add(GameType.MineWare); + legendGames.add(GameType.OldMineWare); legendGames.add(GameType.SmashDomination); // Team variants legendGames.add(GameType.DragonEscapeTeams);