diff --git a/Plugins/Mineplex.Core/src/mineplex/core/chat/Chat.java b/Plugins/Mineplex.Core/src/mineplex/core/chat/Chat.java index 23dc80f2c..19b70eae1 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/chat/Chat.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/chat/Chat.java @@ -7,7 +7,9 @@ import java.io.InputStreamReader; import java.net.URL; import java.nio.charset.Charset; import java.security.cert.X509Certificate; +import java.util.HashMap; import java.util.Iterator; +import java.util.UUID; import javax.net.ssl.HostnameVerifier; import javax.net.ssl.HttpsURLConnection; @@ -17,6 +19,7 @@ import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; import mineplex.core.MiniPlugin; +import mineplex.core.chat.command.ChatSlowCommand; import mineplex.core.preferences.PreferencesManager; import mineplex.core.recharge.Recharge; import mineplex.core.updater.event.UpdateEvent; @@ -57,9 +60,10 @@ public class Chat extends MiniPlugin //private String _authName = ""; private String _serverName; + private int _chatSlow = 0; private long _silenced = 0; - private NautHashMap _playerLastMessage = new NautHashMap(); + private HashMap _playerLastMessage = new HashMap(); public Chat(JavaPlugin plugin, CoreClientManager clientManager, PreferencesManager preferences, String serverName) { @@ -84,6 +88,23 @@ public class Chat extends MiniPlugin { addCommand(new SilenceCommand(this)); addCommand(new BroadcastCommand(this)); + addCommand(new ChatSlowCommand(this)); + } + + public void setChatSlow(int seconds, boolean inform) + { + if (seconds < 0) + seconds = 0; + + _chatSlow = seconds; + + if (inform) + { + if (seconds == 0) + UtilServer.broadcast(F.main("Chat", "Chat Slow is now disabled")); + else + UtilServer.broadcast(F.main("Chat", "Chat slow is now enabled with a cooldown of " + F.time(seconds + " seconds"))); + } } public void Silence(long duration, boolean inform) @@ -290,17 +311,26 @@ public class Chat extends MiniPlugin UtilPlayer.message(sender, F.main("Chat", "You are sending messages too fast.")); event.setCancelled(true); } - else if (!_clientManager.Get(sender).GetRank().Has(Rank.MODERATOR) && - _playerLastMessage.containsKey(sender.getName()) && - _playerLastMessage.get(sender.getName()).equalsIgnoreCase(event.getMessage())) + else if (_playerLastMessage.containsKey(sender.getUniqueId())) { - UtilPlayer.message(sender, F.main("Chat", "You can't repeat the same message.")); - event.setCancelled(true); - } - else - { - _playerLastMessage.put(sender.getName(), event.getMessage()); + MessageData lastMessage = _playerLastMessage.get(sender.getUniqueId()); + long chatSlowTime = 1000L * _chatSlow; + long timeDiff = System.currentTimeMillis() - lastMessage.getTimeSent(); + if (timeDiff < chatSlowTime && !_clientManager.Get(sender).GetRank().Has(Rank.HELPER)) + { + UtilPlayer.message(sender, F.main("Chat", "Chat slow enabled. Please wait " + F.time(UtilTime.convertString(chatSlowTime - timeDiff, 1, UtilTime.TimeUnit.FIT)))); + event.setCancelled(true); + } + else if (!_clientManager.Get(sender).GetRank().Has(Rank.MODERATOR) && + lastMessage.getMessage().equalsIgnoreCase(event.getMessage())) + { + UtilPlayer.message(sender, F.main("Chat", "You can't repeat the same message.")); + event.setCancelled(true); + } } + + if (!event.isCancelled()) + _playerLastMessage.put(sender.getUniqueId(), new MessageData(event.getMessage())); } public String hasher(JSONArray hasharray, String message) @@ -530,6 +560,6 @@ public class Chat extends MiniPlugin @EventHandler public void playerQuit(PlayerQuitEvent event) { - _playerLastMessage.remove(event.getPlayer().getName()); + _playerLastMessage.remove(event.getPlayer().getUniqueId()); } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/chat/MessageData.java b/Plugins/Mineplex.Core/src/mineplex/core/chat/MessageData.java new file mode 100644 index 000000000..770389534 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/chat/MessageData.java @@ -0,0 +1,28 @@ +package mineplex.core.chat; + +public class MessageData +{ + private String _message; + private long _timeSent; + + public MessageData(String message) + { + this(message, System.currentTimeMillis()); + } + + public MessageData(String message, long timeSent) + { + _message = message; + _timeSent = timeSent; + } + + public String getMessage() + { + return _message; + } + + public long getTimeSent() + { + return _timeSent; + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/chat/command/ChatSlowCommand.java b/Plugins/Mineplex.Core/src/mineplex/core/chat/command/ChatSlowCommand.java new file mode 100644 index 000000000..8bd788fc8 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/chat/command/ChatSlowCommand.java @@ -0,0 +1,51 @@ +package mineplex.core.chat.command; + +import org.bukkit.entity.Player; + +import mineplex.core.chat.Chat; +import mineplex.core.command.CommandBase; +import mineplex.core.common.Rank; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilPlayer; + +public class ChatSlowCommand extends CommandBase +{ + public ChatSlowCommand(Chat plugin) + { + super(plugin, Rank.SNR_MODERATOR, "chatslow"); + } + + @Override + public void Execute(Player caller, String[] args) + { + if (args != null && args.length == 1) + { + try + { + int seconds = Integer.parseInt(args[0]); + + if (seconds < 0) + { + UtilPlayer.message(caller, F.main("Chat", "Seconds must be a positive integer")); + return; + } + + Plugin.setChatSlow(seconds, true); + UtilPlayer.message(caller, F.main("Chat", "Set chat slow to " + F.time(seconds + " seconds"))); + } + catch (Exception e) + { + showUsage(caller); + } + } + else + { + showUsage(caller); + } + } + + private void showUsage(Player caller) + { + UtilPlayer.message(caller, F.main("Chat", "Usage: /chatslow ")); + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/monitor/LagMeter.java b/Plugins/Mineplex.Core/src/mineplex/core/monitor/LagMeter.java index 39361a43f..fc898459e 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/monitor/LagMeter.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/monitor/LagMeter.java @@ -12,6 +12,7 @@ import mineplex.core.updater.event.UpdateEvent; import org.bukkit.ChatColor; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.plugin.java.JavaPlugin; @@ -25,6 +26,8 @@ public class LagMeter extends MiniPlugin private double _ticksPerSecondAverage; private long _lastAverage; + private long _lastTick = 0; + private HashSet _monitoring = new HashSet(); public LagMeter(JavaPlugin plugin, CoreClientManager clientManager) diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java b/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java index ef07946b6..cfb9a167e 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java @@ -518,7 +518,7 @@ public class HubManager extends MiniClientPlugin UtilTabTitle.setHeaderAndFooter(player, " ", "Visit " + C.cGreen + "www.mineplex.com" + ChatColor.RESET + " for News, Forums and Shop"); //Public Message - if (_clientManager.Get(player).GetRank() != Rank.OWNER) + if (_clientManager.Get(player).GetRank() != Rank.LEGEND) event.setJoinMessage(null); else { diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/modules/ParkourManager.java b/Plugins/Mineplex.Hub/src/mineplex/hub/modules/ParkourManager.java index ac79a341b..9308e8340 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/modules/ParkourManager.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/modules/ParkourManager.java @@ -58,7 +58,7 @@ public class ParkourManager extends MiniPlugin private HashSet _parkour = new HashSet(); - private Location _snakeParkourReturn; + //private Location _snakeParkourReturn; private Location _lavaParkourReturn; private WeakHashMap _lavaLocation = new WeakHashMap(); private WeakHashMap _lavaTimer = new WeakHashMap(); @@ -94,19 +94,19 @@ public class ParkourManager extends MiniPlugin }, 4000, new Location(Manager.GetSpawn().getWorld(), -93,67,38), new Location(Manager.GetSpawn().getWorld(), -86,100,42), new Location(Manager.GetSpawn().getWorld(), -120,50,-17))); - _parkour.add(new ParkourSnake("Snake Parkour", new String[] - { - "This parkour requires incredible timing", - "and great agility! Some say it was created", - "by the devil as a cruel joke!" - }, 8000, new Location(Manager.GetSpawn().getWorld(), 22,70,-54), - new Location(Manager.GetSpawn().getWorld(), 35,-200,-90), new Location(Manager.GetSpawn().getWorld(), -30,250,-46))); +// _parkour.add(new ParkourSnake("Snake Parkour", new String[] +// { +// "This parkour requires incredible timing", +// "and great agility! Some say it was created", +// "by the devil as a cruel joke!" +// }, 8000, new Location(Manager.GetSpawn().getWorld(), 22,70,-54), +// new Location(Manager.GetSpawn().getWorld(), 35,-200,-90), new Location(Manager.GetSpawn().getWorld(), -30,250,-46))); _lavaParkourReturn = new Location(Manager.GetSpawn().getWorld(), -89.5,68,36.5); _lavaParkourReturn.setYaw(90); - _snakeParkourReturn = new Location(Manager.GetSpawn().getWorld(), 16.5,72,-52.5); - _snakeParkourReturn.setYaw(180); + //_snakeParkourReturn = new Location(Manager.GetSpawn().getWorld(), 16.5,72,-52.5); + //_snakeParkourReturn.setYaw(180); } public boolean isParkourMode(Player player) @@ -259,24 +259,24 @@ public class ParkourManager extends MiniPlugin event.getEntity().teleport(_lavaParkourReturn); } - @EventHandler(priority = EventPriority.HIGHEST) - public void snakeReturn(EntityDamageEvent event) - { - if (event.getCause() != DamageCause.VOID) - return; - - if (!(event.getEntity() instanceof Player)) - return; - - Player player = (Player)event.getEntity(); - - if (!isParkourMode(player)) - return; - - event.getEntity().eject(); - event.getEntity().leaveVehicle(); - event.getEntity().teleport(_snakeParkourReturn); - } +// @EventHandler(priority = EventPriority.HIGHEST) +// public void snakeReturn(EntityDamageEvent event) +// { +// if (event.getCause() != DamageCause.VOID) +// return; +// +// if (!(event.getEntity() instanceof Player)) +// return; +// +// Player player = (Player)event.getEntity(); +// +// if (!isParkourMode(player)) +// return; +// +// event.getEntity().eject(); +// event.getEntity().leaveVehicle(); +// event.getEntity().teleport(_snakeParkourReturn); +// } @EventHandler public void lavaBlockReturn(UpdateEvent event) @@ -458,14 +458,14 @@ public class ParkourManager extends MiniPlugin } } - @EventHandler - public void snakeUpdate(UpdateEvent event) - { - if (event.getType() != UpdateType.FASTER) - return; - - for (ParkourData parkour : _parkour) - if (parkour instanceof ParkourSnake) - ((ParkourSnake)parkour).Update(); - } +// @EventHandler +// public void snakeUpdate(UpdateEvent event) +// { +// if (event.getType() != UpdateType.FASTER) +// return; +// +// for (ParkourData parkour : _parkour) +// if (parkour instanceof ParkourSnake) +// ((ParkourSnake)parkour).Update(); +// } } diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/modules/StackerManager.java b/Plugins/Mineplex.Hub/src/mineplex/hub/modules/StackerManager.java index 69afd0a49..cc3385aba 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/modules/StackerManager.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/modules/StackerManager.java @@ -49,7 +49,7 @@ public class StackerManager extends MiniPlugin implements IThrown Manager = manager; _projectileManager = new ProjectileManager(manager.GetPlugin()); - } + } @EventHandler public void GrabEntity(PlayerInteractEntityEvent event) diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/modules/WorldManager.java b/Plugins/Mineplex.Hub/src/mineplex/hub/modules/WorldManager.java index 551f146f0..9b34cd245 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/modules/WorldManager.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/modules/WorldManager.java @@ -228,7 +228,7 @@ public class WorldManager extends MiniPlugin @EventHandler public void UpdateWeather(UpdateEvent event) { - if (event.getType() != UpdateType.TICK) + if (event.getType() != UpdateType.SEC) return; World world = UtilWorld.getWorld("world"); diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/damage/DamageManager.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/damage/DamageManager.java index d3b8929a1..447759e6e 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/damage/DamageManager.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/damage/DamageManager.java @@ -13,6 +13,7 @@ import mineplex.core.common.util.UtilEvent; import mineplex.core.common.util.UtilGear; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; +import mineplex.core.common.util.UtilWorld; import mineplex.core.disguise.DisguiseManager; import mineplex.core.npc.NpcManager; import mineplex.minecraft.game.core.combat.CombatManager; @@ -103,6 +104,8 @@ public class DamageManager extends MiniPlugin //New Event NewDamageEvent(damagee, damager, projectile, event.getCause(), event.getDamage(), true, false, false, null, null, preCancel); + System.out.println(UtilEnt.getName(damagee) + " by " + event.getCause() + " at " + UtilWorld.locToStr(damagee.getLocation())); + event.setCancelled(true); } 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 119a1ef81..ce183ee71 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java @@ -9,9 +9,11 @@ import java.util.UUID; import org.bukkit.Bukkit; import org.bukkit.ChatColor; +import org.bukkit.Color; import org.bukkit.GameMode; import org.bukkit.Material; import org.bukkit.OfflinePlayer; +import org.bukkit.Sound; import org.bukkit.craftbukkit.v1_7_R4.entity.CraftEntity; import org.bukkit.craftbukkit.v1_7_R4.entity.CraftPlayer; import org.bukkit.entity.EntityType; @@ -39,6 +41,7 @@ import mineplex.core.chat.Chat; import mineplex.core.common.Rank; import mineplex.core.common.util.C; import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilFirework; import mineplex.core.common.util.UtilGear; import mineplex.core.common.util.UtilInv; import mineplex.core.common.util.UtilPlayer; @@ -562,7 +565,18 @@ public class ArcadeManager extends MiniPlugin implements IRelation public void MessageJoin(PlayerJoinEvent event) { if (_game == null || _game.AnnounceJoinQuit) - event.setJoinMessage(F.sys("Join", event.getPlayer().getName())); + { + Player player = event.getPlayer(); + + if (_clientManager.Get(player).GetRank() != Rank.LEGEND) + event.setJoinMessage(null); + else + { + event.setJoinMessage(C.cGreen + C.Bold + "Legend " + player.getName() + " has joined!"); + UtilFirework.playFirework(player.getEyeLocation(), org.bukkit.FireworkEffect.Type.BALL_LARGE, Color.LIME, true, true); + player.getWorld().playSound(player.getEyeLocation(), Sound.WITHER_SPAWN, 2f, 1f); + } + } else event.setJoinMessage(null); } 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 283822eed..ef6d9d7ab 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 @@ -112,7 +112,7 @@ public class Draw extends SoloGame _words = new String[] { - "Bird", "Volcano", "Love", "Dance", "Hair", "Glasses", "Domino", "Dice", "Computer", "Top Hat", "Beard", "Wind", "Rain", "Minecraft", "Push", "Fighting", "Juggle", "Clown", "Miner", "Creeper", "Ghast", "Spider", "Punch", "Roll", "River", "Desert", "Cold", "Pregnant", "Photo", "Quick", "Mario", "Luigi", "Bridge", "Turtle", "Door Knob", "Mineplex", "Binoculars", "Telescope", "Planet", "Mountain Bike", "Moon", "Comet", "Flower", "Squirrel", "Horse Riding", "Chef", "Elephant", "Yoshi", "Shotgun", "Pistol", "James Bond", "Money", "Salt and Pepper", "Truck", "Helicopter", "Hot Air Balloon", "Sprout", "Yelling", "Muscles", "Skinny", "Zombie", "Lava", "Snake", "Motorbike", "Whale", "Boat", "Letterbox", "Window", "Lollipop", "Handcuffs", "Police", "Uppercut", "Windmill", "Eyepatch", "Campfire", "Rainbow", "Storm", "Pikachu", "Charmander", "Tornado", "Crying", "King", "Hobo", "Worm", "Snail", "XBox", "Playstation", "Nintendo", "Duck", "Pull", "Dinosaur", "Alligator", "Ankle", "Angel", "Acorn", "Bread", "Booty", "Bacon", "Crown", "Donut", "Drill", "Crack", "Leash", "Magic", "Wizard", "Igloo", "Plant", "Screw", "Rifle", "Puppy", "Stool", "Stamp", "Letter", "Witch", "Zebra", "Wagon", "Compass", "Watch", "Clock", "Time", "Cyclops", "Coconut", "Hang", "Penguin", "Confused", "Bucket", "Lion", "Rubbish", "Spaceship", "Bowl", "Shark", "Pizza", "Pyramid", "Dress", "Pants", "Shorts", "Boots", "Boy", "Girl", "Math", "Sunglasses", "Frog", "Chair", "Cake", "Grapes", "Kiss", "Snorlax", "Earth", "Spaghetti", "Couch", "Family", "Milk", "Blood", "Pig", "Giraffe", "Mouse", "Couch", "Fat", "Chocolate", "Camel", "Cheese", "Beans", "Water", "Chicken", "Cannibal", "Zipper", "Book", "Swimming", "Horse", "Paper", "Toaster", "Television", "Hammer", "Piano", "Sleeping", "Yawn", "Sheep", "Night", "Chest", "Lamp", "Redstone", "Grass", "Plane", "Ocean", "Lake", "Melon", "Pumpkin", "Gift", "Fishing", "Pirate", "Lightning", "Stomach", "Belly Button", "Fishing Rod", "Iron Ore", "Diamonds", "Emeralds", "Nether Portal", "Ender Dragon", "Rabbit", "Harry Potter", "Torch", "Light", "Battery", "Zombie Pigman", "Telephone", "Tent", "Hand", "Traffic Lights", "Anvil", "Tail", "Umbrella", "Piston", "Skeleton", "Spikes", "Bridge", "Bomb", "Spoon", "Rainbow", "Staircase", "Poop", "Dragon", "Fire", "Apple", "Shoe", "Squid", "Cookie", "Tooth", "Camera", "Sock", "Monkey", "Unicorn", "Smile", "Pool", "Rabbit", "Cupcake", "Pancake", "Princess", "Castle", "Flag", "Planet", "Stars", "Camp Fire", "Rose", "Spray", "Pencil", "Ice Cream", "Toilet", "Moose", "Bear", "Beer", "Batman", "Eggs", "Teapot", "Golf Club", "Tennis Racket", "Shield", "Crab", "Pot of Gold", "Cactus", "Television", "Pumpkin Pie", "Chimney", "Stable", "Nether", "Wither", "Beach", "Stop Sign", "Chestplate", "Pokeball", "Christmas Tree", "Present", "Snowflake", "Laptop", "Superman", "Football", "Basketball", "Creeper", "Tetris", "Jump", "Ninja", "Baby", "Troll Face", "Grim Reaper", "Temple", "Explosion", "Vomit", "Ants", "Barn", "Burn", "Baggage", "Frisbee", "Iceberg", "Sleeping", "Dream", "Snorlax", "Balloons", "Elevator", "Alligator", "Bikini", "Butterfly", "Bumblebee", "Pizza", "Jellyfish", "Sideburns", "Speedboat", "Treehouse", "Water Gun", "Drink", "Hook", "Dance", "Fall", "Summer", "Autumn", "Spring", "Winter", "Night Time", "Galaxy", "Sunrise", "Sunset", "Picnic", "Snowflake", "Holding Hands", "America", "Laptop", "Anvil", "Bagel", "Bench", "Cigar", "Darts", "Muffin", "Queen", "Wheat", "Dolphin", "Scarf", "Swing", "Thumb", "Tomato", "Alcohol", "Armor", "Alien", "Beans", "Cheek", "Phone", "Keyboard", "Orange", "Calculator", "Paper", "Desk", "Disco", "Elbow", "Drool", "Giant", "Golem", "Grave", "Llama", "Moose", "Party", "Panda", "Plumber", "Salsa", "Salad", "Skunk", "Skull", "Stump", "Sugar", "Ruler", "Bookcase", "Hamster", "Soup", "Teapot", "Towel", "Waist", "Archer", "Anchor", "Bamboo", "Branch", "Booger", "Carrot", "Cereal", "Coffee", "Wolf", "Crayon", "Finger", "Forest", "Hotdog", "Burger", "Obsidian", "Pillow", "Swing", "YouTube", "Farm", "Rain", "Cloud", "Frozen", "Garbage", "Music", "Twitter", "Facebook", "Santa Hat", "Rope", "Neck", "Sponge", "Sushi", "Noodles", "Soup", "Tower", "Berry", "Capture", "Prison", "Robot", "Trash", "School", "Skype", "Snowman", "Crowd", "Bank", "Mudkip", "Joker", "Lizard", "Tiger", "Royal", "Erupt", "Wizard", "Stain", "Cinema", "Notebook", "Blanket", "Paint", "Guard", "Astronaut" , "Slime" , "Mansion" , "Radar" , "Thorn" , "Tears" , "Tiny" , "Candy" , "Pepsi" , "Flint" , "Draw My Thing" , "Rice" , "Shout" , "Prize" , "Skirt" , "Thief" , "Syrup" , "Kirby" , "Brush" , "Violin", + "Bird", "Volcano", "Love", "Dance", "Hair", "Glasses", "Domino", "Dice", "Computer", "Top Hat", "Beard", "Wind", "Rain", "Minecraft", "Push", "Fighting", "Juggle", "Clown", "Miner", "Creeper", "Ghast", "Spider", "Punch", "Roll", "River", "Desert", "Cold", "Pregnant", "Photo", "Quick", "Mario", "Luigi", "Bridge", "Turtle", "Door Knob", "Mineplex", "Binoculars", "Telescope", "Planet", "Mountain Bike", "Moon", "Comet", "Flower", "Squirrel", "Horse Riding", "Chef", "Elephant", "Yoshi", "Shotgun", "Pistol", "James Bond", "Money", "Salt and Pepper", "Truck", "Helicopter", "Hot Air Balloon", "Sprout", "Yelling", "Muscles", "Skinny", "Zombie", "Lava", "Snake", "Motorbike", "Whale", "Boat", "Letterbox", "Window", "Lollipop", "Handcuffs", "Police", "Uppercut", "Windmill", "Eyepatch", "Campfire", "Rainbow", "Storm", "Pikachu", "Charmander", "Tornado", "Crying", "King", "Hobo", "Worm", "Snail", "XBox", "Playstation", "Nintendo", "Duck", "Pull", "Dinosaur", "Alligator", "Ankle", "Angel", "Acorn", "Bread", "Booty", "Bacon", "Crown", "Donut", "Drill", "Leash", "Magic", "Wizard", "Igloo", "Plant", "Screw", "Rifle", "Puppy", "Stool", "Stamp", "Letter", "Witch", "Zebra", "Wagon", "Compass", "Watch", "Clock", "Time", "Cyclops", "Coconut", "Hang", "Penguin", "Confused", "Bucket", "Lion", "Rubbish", "Spaceship", "Bowl", "Shark", "Pizza", "Pyramid", "Dress", "Pants", "Shorts", "Boots", "Boy", "Girl", "Math", "Sunglasses", "Frog", "Chair", "Cake", "Grapes", "Kiss", "Snorlax", "Earth", "Spaghetti", "Couch", "Family", "Milk", "Blood", "Pig", "Giraffe", "Mouse", "Couch", "Fat", "Chocolate", "Camel", "Cheese", "Beans", "Water", "Chicken", "Cannibal", "Zipper", "Book", "Swimming", "Horse", "Paper", "Toaster", "Television", "Hammer", "Piano", "Sleeping", "Yawn", "Sheep", "Night", "Chest", "Lamp", "Redstone", "Grass", "Plane", "Ocean", "Lake", "Melon", "Pumpkin", "Gift", "Fishing", "Pirate", "Lightning", "Stomach", "Belly Button", "Fishing Rod", "Iron Ore", "Diamonds", "Emeralds", "Nether Portal", "Ender Dragon", "Rabbit", "Harry Potter", "Torch", "Light", "Battery", "Zombie Pigman", "Telephone", "Tent", "Hand", "Traffic Lights", "Anvil", "Tail", "Umbrella", "Piston", "Skeleton", "Spikes", "Bridge", "Bomb", "Spoon", "Rainbow", "Staircase", "Poop", "Dragon", "Fire", "Apple", "Shoe", "Squid", "Cookie", "Tooth", "Camera", "Sock", "Monkey", "Unicorn", "Smile", "Pool", "Rabbit", "Cupcake", "Pancake", "Princess", "Castle", "Flag", "Planet", "Stars", "Camp Fire", "Rose", "Spray", "Pencil", "Ice Cream", "Toilet", "Moose", "Bear", "Beer", "Batman", "Eggs", "Teapot", "Golf Club", "Tennis Racket", "Shield", "Crab", "Pot of Gold", "Cactus", "Television", "Pumpkin Pie", "Chimney", "Stable", "Nether", "Wither", "Beach", "Stop Sign", "Chestplate", "Pokeball", "Christmas Tree", "Present", "Snowflake", "Laptop", "Superman", "Football", "Basketball", "Creeper", "Tetris", "Jump", "Ninja", "Baby", "Troll Face", "Grim Reaper", "Temple", "Explosion", "Vomit", "Ants", "Barn", "Burn", "Baggage", "Frisbee", "Iceberg", "Sleeping", "Dream", "Snorlax", "Balloons", "Elevator", "Alligator", "Bikini", "Butterfly", "Bumblebee", "Pizza", "Jellyfish", "Sideburns", "Speedboat", "Treehouse", "Water Gun", "Drink", "Hook", "Dance", "Fall", "Summer", "Autumn", "Spring", "Winter", "Night Time", "Galaxy", "Sunrise", "Sunset", "Picnic", "Snowflake", "Holding Hands", "America", "Laptop", "Anvil", "Bagel", "Bench", "Cigar", "Darts", "Muffin", "Queen", "Wheat", "Dolphin", "Scarf", "Swing", "Thumb", "Tomato", "Alcohol", "Armor", "Alien", "Beans", "Cheek", "Phone", "Keyboard", "Orange", "Calculator", "Paper", "Desk", "Disco", "Elbow", "Drool", "Giant", "Golem", "Grave", "Llama", "Moose", "Party", "Panda", "Plumber", "Salsa", "Salad", "Skunk", "Skull", "Stump", "Sugar", "Ruler", "Bookcase", "Hamster", "Soup", "Teapot", "Towel", "Waist", "Archer", "Anchor", "Bamboo", "Branch", "Booger", "Carrot", "Cereal", "Coffee", "Wolf", "Crayon", "Finger", "Forest", "Hotdog", "Burger", "Obsidian", "Pillow", "Swing", "YouTube", "Farm", "Rain", "Cloud", "Frozen", "Garbage", "Music", "Twitter", "Facebook", "Santa Hat", "Rope", "Neck", "Sponge", "Sushi", "Noodles", "Soup", "Tower", "Berry", "Capture", "Prison", "Robot", "Trash", "School", "Skype", "Snowman", "Crowd", "Bank", "Mudkip", "Joker", "Lizard", "Tiger", "Royal", "Erupt", "Wizard", "Stain", "Cinema", "Notebook", "Blanket", "Paint", "Guard", "Astronaut" , "Slime" , "Mansion" , "Radar" , "Thorn" , "Tears" , "Tiny" , "Candy" , "Pepsi" , "Flint" , "Draw My Thing" , "Rice" , "Shout" , "Prize" , "Skirt" , "Thief" , "Syrup" , "Kirby" , "Brush" , "Violin", }; _tools = new HashSet();