Merge pull request #7 from Mineplex-LLC/feature/dmt-update

Draw My Thing Update
This commit is contained in:
Shaun Bennett 2016-02-26 04:38:10 -06:00
commit 775b6eeffa
10 changed files with 427 additions and 94 deletions

View File

@ -171,6 +171,7 @@ public class UtilBlock
blockPassSet.add((byte) Material.STAINED_GLASS_PANE.getId());
blockPassSet.add((byte) Material.IRON_TRAPDOOR.getId());
blockPassSet.add((byte) Material.DAYLIGHT_DETECTOR_INVERTED.getId());
blockPassSet.add((byte) Material.BARRIER.getId());
blockPassSet.add((byte) Material.BIRCH_FENCE_GATE.getId());
blockPassSet.add((byte) Material.JUNGLE_FENCE_GATE.getId());

View File

@ -1,9 +1,9 @@
package mineplex.core.common.util;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
@ -14,7 +14,7 @@ import org.bukkit.ChatColor;
import org.bukkit.GameMode;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.block.Block;
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_8_R3.event.CraftEventFactory;
@ -24,6 +24,7 @@ import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryView;
import org.bukkit.potion.PotionEffect;
import org.bukkit.util.BlockIterator;
import org.bukkit.util.Vector;
import net.minecraft.server.v1_8_R3.EntityPlayer;
@ -755,4 +756,32 @@ public class UtilPlayer
looking.multiply(distance);
return player.getEyeLocation().clone().add(looking);
}
public static Block getTarget(LivingEntity entity, HashSet<Byte> ignore, int maxDistance)
{
Iterator<Block> itr = new BlockIterator(entity, maxDistance);
while (itr.hasNext())
{
Block block = itr.next();
int id = block.getTypeId();
if (ignore == null)
{
if (id != 0)
{
return block;
}
}
else
{
if (!ignore.contains((byte)id))
{
return block;
}
}
}
return null;
}
}

View File

@ -88,7 +88,7 @@ public enum GameType
DragonRiders(DragonRiders.class, GameDisplay.DragonRiders),
Dragons(Dragons.class, GameDisplay.Dragons),
DragonsTeams(DragonsTeams.class, GameDisplay.DragonsTeams),
Draw(Draw.class, GameDisplay.Draw),
Draw(Draw.class, GameDisplay.Draw, "http://chivebox.com/mineplex/ResDrawMyThing.zip", true),
Evolution(Evolution.class, GameDisplay.Evolution),
Gravity(Gravity.class, GameDisplay.Gravity),
Halloween(Halloween.class, GameDisplay.Halloween, "http://file.mineplex.com/ResHalloween.zip", true),

View File

@ -0,0 +1,25 @@
package nautilus.game.arcade.game.games.draw;
import org.bukkit.Material;
public class BlockInfo
{
private Material _type;
private byte _data;
public BlockInfo(Material type, byte data)
{
_type = type;
_data = data;
}
public Material getType()
{
return _type;
}
public byte getData()
{
return _data;
}
}

View File

@ -10,6 +10,7 @@ import java.util.List;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.GameMode;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Sound;
@ -18,6 +19,7 @@ import org.bukkit.block.BlockFace;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.entity.EntityShootBowEvent;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
import org.bukkit.event.player.PlayerInteractEvent;
@ -66,6 +68,7 @@ public class Draw extends SoloGame
//Brush
private byte _brushColor = 15;
private Material _brushMaterial = Material.WOOL;
private Location _brushPrevious = null;
private boolean _lockDrawer = true;
@ -88,22 +91,23 @@ public class Draw extends SoloGame
private String[] _holidayWords;
private boolean _useHolidayWords = false;
private HashSet<String> _usedWords = new HashSet<String>();
public Draw(ArcadeManager manager)
{
super(manager, GameType.Draw,
new Kit[]
{
new KitSlowAndSteady(manager),
new KitSelector(manager),
new KitTools(manager),
//new KitSlowAndSteady(manager),
//new KitSelector(manager),
// new KitTools(manager),
new KitArtist(manager)
},
new String[]
{
"Take turns to draw something",
"Right-Click with Swords to draw",
"Right-Click with items to draw",
"Hints are given at top of screen",
});
@ -111,11 +115,73 @@ public class Draw extends SoloGame
this.Damage = false;
this.HungerSet = 20;
this.WorldTimeSet = 8000;
_words = new String[]
{
"Bird", "Volcano", "Sloth", "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", "Car", "Sun", "Eye", "Bow", "Axe", "Face", "Mushroom", "Guitar", "Book",
};
{
"Bird", "Volcano", "Sloth", "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", "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", "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", "Car", "Sun", "Eye", "Bow", "Axe", "Face", "Mushroom", "Guitar",
"Pickle", "Banana", "Crab", "Sugar", "Soda", "Cookie", "Burger", "Fries", "Speaker",
"Pillow", "Rug", "Purse", "Monitor", "Bow", "Pen", "Cat", "Kitten", "Puppy", "Bed", "Button",
"Computer", "Key", "Spoon", "Lamp", "Bottle", "Card", "Newspaper", "Glasses", "Mountain", "Minecraft",
"Shirt", "Truck", "Car", "Phone", "Cork", "iPod", "Paper", "Bag", "USB", "CD", "Wallet", "Cow", "Pig",
"Sheep", "Tomato", "Painting", "Chair", "Keyboard", "Chocolate", "Duck", "Clock", "Balloon", "Remote",
"Bread", "Ring", "Necklace", "Hippo", "Flag", "Window", "Door", "Radio", "Television", "Boat",
"Fridge", "House", "Piano", "Guitar", "Trumpet", "Drums", "Speaker", "Helmet", "Tree", "Slippers",
"Table", "Doll", "Headphones", "Box", "Flower", "Book", "Carrot", "Egg", "Sun", "Hill", "Candle",
"Food", "Mouse", "Money", "Emerald", "Magnet", "Camera", "Movie", "Video Game", "Teddy", "Lake",
"Violin", "Cheese", "Burger", "Peasant", "King", "Queen", "Prince", "Princess", "Mother", "Father", "Taco",
"Racecar", "Car", "Truck", "Tree", "Elephant", "Lion", "Pig", "Cow", "Chicken", "Dog", "Cat", "Moon", "Stars",
"Sun", "Diamond", "Gold", "Redstone", "Skateboard", "Bike", "Swimming Pool", "Cookie", "Computer", "Laptop",
"Piano", "Guitar", "Trumpet", "Drums", "Flute", "Helicopter", "Plane", "Football", "Tennis", "Hockey",
"Water", "Ocean", "Microsoft", "Twitter", "Godzilla", "Building", "House", "Rainbow", "Barbie", "Girl", "Boy",
"Children", "Bomb", "Explosion", "Gun", "Tank", "Penguin", "Eagle", "America", "Kangaroo", "Sea", "Raspberry",
"Strawberry", "Jam", "Sandwich", "Owl", "Watermelon", "Australia", "Canada", "United States", "Diary"
};
_holidayWords = new String[]
{
@ -150,13 +216,50 @@ public class Draw extends SoloGame
@Override
public void ParseData()
{
for (Location loc : WorldData.GetCustomLocs("159"))
_canvas.add(loc.getBlock());
int count = 0;
for (Block b : UtilBlock.getInBoundingBox(WorldData.GetDataLocs("PINK").get(0), WorldData.GetDataLocs("PINK").get(1), false))
{
if (b.getType() != Material.AIR)
{
_canvas.add(b);
count++;
}
}
System.out.println("===");
System.out.println("Draw loc: " + WorldData.GetDataLocs("RED").size());
System.out.println("Canvas Count: " + count);
System.out.println("===");
_drawerLocation = WorldData.GetDataLocs("RED").get(0);
_textLocation = WorldData.GetDataLocs("YELLOW").get(0);
}
@EventHandler
public void clearBoardStart(GameStateChangeEvent e)
{
if (e.GetState() != GameState.Live)
return;
Reset();
for (Player player : GetPlayers(true))
player.setGameMode(GameMode.ADVENTURE);
}
@EventHandler
public void playerFallCloudy(PlayerMoveEvent e)
{
if (!GetPlayers(true).contains(e.getPlayer()))
return;
if (!WorldData.MapName.equalsIgnoreCase("Cloudy"))
return;
if (e.getTo().getBlockY() <= 130)
{
GetTeam(e.getPlayer()).SpawnTeleport(e.getPlayer());
}
}
@Override
@ -281,21 +384,20 @@ public class Draw extends SoloGame
drawer.setAllowFlight(true);
drawer.setFlying(true);
drawer.setFlySpeed(0.4f);
drawer.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.WOOD_SWORD, (byte)0, 1, "Thin Paint Brush"));
drawer.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.IRON_SWORD, (byte)0, 1, "Thick Paint Brush"));
if (GetKit(drawer) instanceof KitTools)
{
drawer.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.STONE_SWORD, (byte)0, 1, "Line Tool"));
drawer.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.GOLD_SWORD, (byte)0, 1, "Square Tool"));
drawer.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.DIAMOND_SWORD, (byte)0, 1, "Circle Tool"));
}
drawer.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.WOOD_SWORD, (byte) 0, 1, "Pencil"));
drawer.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.IRON_SWORD, (byte) 0, 1, "Paint Brush"));
drawer.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.STONE_SWORD, (byte) 0, 1, "Line Tool"));
drawer.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.GOLD_SWORD, (byte)0, 1, "Square Tool"));
drawer.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.DIAMOND_SWORD, (byte)0, 1, "Circle Tool"));
drawer.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.BOW, (byte)0, 1, "Spray Can"));
drawer.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.BUCKET, (byte)0, 1, "Paint Bucket"));
drawer.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.TNT, (byte)0, 1, "Clear Canvas"));
drawer.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.IRON_HOE, (byte)0, 1, "Paint Bucket"));
drawer.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.GOLD_HOE, (byte)0, 1, "Clear Canvas"));
Announce(C.cGold + C.Bold + "Round " + (_roundCount+1) + ": " + C.cYellow + C.Bold + drawer.getName() + " is drawing!");
drawer.getInventory().setItem(10, ItemStackFactory.Instance.CreateStack(Material.ARROW, (byte)0, 1, "Paint"));
Announce(C.cGold + C.Bold + "Round " + (_roundCount + 1) + ": " + C.cYellow + C.Bold + drawer.getName() + " is drawing!");
}
}
@ -477,7 +579,66 @@ public class Draw extends SoloGame
for (Tool tool : _tools)
tool.update();
}
@EventHandler
public void sprayCan(UpdateEvent e)
{
if (e.getType() != UpdateType.TICK)
return;
if (!IsLive())
return;
for (Player p : _drawers.GetPlayers(true))
{
if (!UtilGear.isMat(p.getItemInHand(), Material.BOW))
continue;
if (!UtilPlayer.isChargingBow(p))
{
_brushPrevious = null;
continue;
}
Block block = UtilPlayer.getTarget(p, UtilBlock.blockPassSet, 400);
if (block == null || !_canvas.contains(block))
continue;
// Spray
block.setType(_brushMaterial);
block.setData(_brushColor);
for (Block surround : UtilBlock.getSurrounding(block, true))
{
if (!_canvas.contains(surround))
continue;
if (Math.random() > 0.5)
{
surround.setType(_brushMaterial);
surround.setData(_brushColor);
}
}
for (Player other : UtilServer.getPlayers())
other.playSound(other.getLocation(), Sound.FIZZ, 0.2f, 2f);
_lockDrawer = false;
_brushPrevious = block.getLocation().add(0.5, 0.5, 0.5);
}
}
@EventHandler
public void sprayCanArrowCancel(EntityShootBowEvent e)
{
if (e.getEntity() instanceof Player)
{
e.setCancelled(true);
((Player)e.getEntity()).updateInventory();
}
}
@EventHandler
public void Paint(UpdateEvent event)
{
@ -491,23 +652,24 @@ public class Draw extends SoloGame
{
if (!UtilGear.isMat(player.getItemInHand(), Material.WOOD_SWORD) && !UtilGear.isMat(player.getItemInHand(), Material.IRON_SWORD))
continue;
if (!player.isBlocking())
{
_brushPrevious = null;
continue;
}
Block block = player.getTargetBlock((HashSet<Byte>) null, 200);
if (block == null || !_canvas.contains(block))
Block block = UtilPlayer.getTarget(player, UtilBlock.blockPassSet, 400);
if (block == null || !_canvas.contains(block))
continue;
if (block.getData() == _brushColor)
if (block.getData() == _brushColor && block.getType() == _brushMaterial)
continue;
//Color
block.setType(_brushMaterial);
block.setData(_brushColor);
//Thick Brush
if (UtilGear.isMat(player.getItemInHand(), Material.IRON_SWORD))
{
@ -515,25 +677,27 @@ public class Draw extends SoloGame
{
if (!_canvas.contains(other))
continue;
block.setType(_brushMaterial);
other.setData(_brushColor);
}
}
//Join Dots
if (_brushPrevious != null)
{
{
while (UtilMath.offset(_brushPrevious, block.getLocation().add(0.5, 0.5, 0.5)) > 0.5)
{
{
_brushPrevious.add(UtilAlg.getTrajectory(_brushPrevious, block.getLocation().add(0.5, 0.5, 0.5)).multiply(0.5));
Block fixBlock = _brushPrevious.getBlock();
if (!_canvas.contains(fixBlock))
continue;
fixBlock.setType(_brushMaterial);
fixBlock.setData(_brushColor);
//Thick Brush
if (UtilGear.isMat(player.getItemInHand(), Material.IRON_SWORD))
{
@ -541,18 +705,19 @@ public class Draw extends SoloGame
{
if (!_canvas.contains(other))
continue;
other.setType(_brushMaterial);
other.setData(_brushColor);
}
}
}
}
for (Player other : UtilServer.getPlayers())
other.playSound(other.getLocation(), Sound.FIZZ, 0.2f, 2f);
_lockDrawer = false;
_brushPrevious = block.getLocation().add(0.5, 0.5, 0.5);
}
}
@ -565,7 +730,7 @@ public class Draw extends SoloGame
Player player = event.getPlayer();
if (!UtilGear.isMat(player.getItemInHand(), Material.TNT))
if (!UtilGear.isMat(player.getItemInHand(), Material.GOLD_HOE))
return;
if (!_drawers.HasPlayer(player))
@ -580,6 +745,7 @@ public class Draw extends SoloGame
//Restore
_brushColor = color;
_brushMaterial = Material.WOOL;
_lockDrawer = false;
for (Player other : UtilServer.getPlayers())
@ -587,48 +753,60 @@ public class Draw extends SoloGame
}
@EventHandler
public void PaintBucket(PlayerInteractEvent event)
{
public void paintFill(PlayerInteractEvent e)
{
if (!IsLive())
return;
Player player = event.getPlayer();
if (!UtilGear.isMat(player.getItemInHand(), Material.BUCKET))
Player p = e.getPlayer();
if (!UtilGear.isMat(p.getItemInHand(), Material.IRON_HOE))
{
// Not the correct tool (iron hoe = paint fill).
return;
}
if (!_drawers.HasPlayer(p))
{
// Not drawing.
return;
}
// Get the target block that the player clicks on.
Block target = UtilPlayer.getTarget(p, UtilBlock.blockPassSet, 400);
if (target == null || !_canvas.contains(target))
{
// Target block is non-existent or not in the canvas.
return;
}
Material material = target.getType();
byte data = target.getData();
if (data == _brushColor && material == _brushMaterial)
return;
if (!_drawers.HasPlayer(player))
return;
Block block = player.getTargetBlock((HashSet<Byte>) null, 200);
if (block == null || !_canvas.contains(block))
return;
//Fill
byte color = block.getData();
if (color == _brushColor)
return;
FillRecurse(block, color);
fillRecursive(target, material, data);
for (Player other : UtilServer.getPlayers())
other.playSound(other.getLocation(), Sound.SPLASH, 0.4f, 1.5f);
}
public void FillRecurse(Block block, byte color)
private void fillRecursive(Block block, final Material fillMaterial, final byte fillData)
{
if (block.getData() != color)
return;
if (!_canvas.contains(block))
return;
block.setData(_brushColor);
for (Block other : UtilBlock.getSurrounding(block, false))
if (!_canvas.contains(block) || block.getType() != fillMaterial || block.getData() != fillData)
{
FillRecurse(other, color);
return;
}
block.setTypeIdAndData(_brushMaterial.getId(), _brushColor, false);
List<Block> around = UtilBlock.getSurrounding(block, false);
for (Block next : around)
{
fillRecursive(next, fillMaterial, fillData);
}
}
@ -643,11 +821,40 @@ public class Draw extends SoloGame
if (!_drawers.HasPlayer(player))
return;
Block block = player.getTargetBlock((HashSet<Byte>) null, 200);
if (block == null || block.getType() != Material.WOOL || _canvas.contains(block))
Block target = UtilPlayer.getTarget(player, UtilBlock.blockPassSet, 400);
if (target == null)
return;
Location loc = target.getLocation();
List<Block> possibleBlocks = UtilBlock.getInBoundingBox(WorldData.GetDataLocs("GREEN").get(0),
WorldData.GetDataLocs("GREEN").get(1));
Block block = player.getWorld().getBlockAt(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ());
if (block == null)
{
return;
}
for (Block other : possibleBlocks)
{
if (
other.getX() == block.getX()
&& other.getY() == block.getY()
&& other.getZ() == block.getZ()
)
{
block = other;
}
}
if (block == null || !possibleBlocks.contains(block))
return;
_brushColor = block.getData();
_brushMaterial = block.getType();
player.playSound(player.getLocation(), Sound.ORB_PICKUP, 2f, 1f);
}
@ -656,11 +863,13 @@ public class Draw extends SoloGame
{
for (Block block : _canvas)
{
if (block.getTypeId() != 35 || block.getData() != 0)
block.setTypeIdAndData(35, (byte)0, false);
// if (block.getTypeId() != 35 || block.getData() != 0)
// block.setTypeIdAndData(35, (byte)0, false);
block.setTypeIdAndData(35, (byte) 0, false);
}
_brushColor = 15;
_brushMaterial = Material.WOOL;
if (_textBlocks != null)
{
@ -843,6 +1052,11 @@ public class Draw extends SoloGame
return _brushColor;
}
public Material getBrushMaterial()
{
return _brushMaterial;
}
public void setLock(boolean b)
{
_lockDrawer = b;

View File

@ -0,0 +1,38 @@
package nautilus.game.arcade.game.games.draw.kits;
import org.bukkit.Material;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import nautilus.game.arcade.ArcadeManager;
import nautilus.game.arcade.kit.Kit;
import nautilus.game.arcade.kit.KitAvailability;
import nautilus.game.arcade.kit.Perk;
/**
* Created by William (WilliamTiger).
* 23/12/15
*/
public class KitArtist extends Kit
{
public KitArtist(ArcadeManager manager)
{
super(manager, "Artist", KitAvailability.Free,
new String[]
{
"The world is but a canvas to your imagination."
},
new Perk[]
{
},
EntityType.ZOMBIE, new ItemStack(Material.IRON_SWORD));
}
@Override
public void GiveItems(Player player)
{
}
}

View File

@ -1,13 +1,17 @@
package nautilus.game.arcade.game.games.draw.tools;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import mineplex.core.common.util.UtilBlock;
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.UtilEvent.ActionType;
import nautilus.game.arcade.game.games.draw.BlockInfo;
import nautilus.game.arcade.game.games.draw.Draw;
import org.bukkit.Material;
@ -25,8 +29,8 @@ public abstract class Tool
protected Material _material;
protected HashMap<Block, Byte> _past = new HashMap<Block, Byte>();
protected HashMap<Block, Byte> _new = new HashMap<Block, Byte>();
protected HashMap<Block, BlockInfo> _past = new HashMap<Block, BlockInfo>();
protected HashMap<Block, BlockInfo> _new = new HashMap<Block, BlockInfo>();
public Tool(Draw host, Material mat)
{
@ -38,7 +42,8 @@ public abstract class Tool
{
if (!UtilEvent.isAction(event, ActionType.R))
return;
Block block = event.getPlayer().getTargetBlock((HashSet<Byte>) null, 60);
Block block = UtilPlayer.getTarget(event.getPlayer(), UtilBlock.blockPassSet, 400);
if (block == null)
return;
@ -68,10 +73,10 @@ public abstract class Tool
return;
}
_new = new HashMap<Block, Byte>();
_new = new HashMap<Block, BlockInfo>();
//Calculate New
Block end = _drawer.getTargetBlock((HashSet<Byte>) null, 64);
Block end = UtilPlayer.getTarget(_drawer, UtilBlock.blockPassSet, 400);
if (end != null && Host.getCanvas().contains(end))
{
customDraw(end);
@ -81,7 +86,10 @@ public abstract class Tool
for (Block block : _past.keySet())
{
if (!_new.containsKey(block))
block.setData(_past.get(block));
{
block.setType(_past.get(block).getType());
block.setData(_past.get(block).getData());
}
}
_past = _new;

View File

@ -3,6 +3,7 @@ package nautilus.game.arcade.game.games.draw.tools;
import mineplex.core.common.util.UtilAlg;
import mineplex.core.common.util.UtilParticle;
import mineplex.core.common.util.UtilParticle.ParticleType;
import nautilus.game.arcade.game.games.draw.BlockInfo;
import nautilus.game.arcade.game.games.draw.Draw;
import org.bukkit.Location;
@ -48,10 +49,15 @@ public class ToolCircle extends Tool
return;
byte color = block.getData();
Material type = block.getType();
if (_past.containsKey(block))
color = _past.get(block);
{
type = _past.get(block).getType();
color = _past.get(block).getData();
}
_new.put(block, color);
_new.put(block, new BlockInfo(type, color));
block.setType(Host.getBrushMaterial());
block.setData(Host.getColor());
}
}

View File

@ -2,6 +2,7 @@ package nautilus.game.arcade.game.games.draw.tools;
import mineplex.core.common.util.UtilAlg;
import mineplex.core.common.util.UtilMath;
import nautilus.game.arcade.game.games.draw.BlockInfo;
import nautilus.game.arcade.game.games.draw.Draw;
import org.bukkit.Location;
@ -32,10 +33,15 @@ public class ToolLine extends Tool
continue;
byte color = lineBlock.getData();
Material type = lineBlock.getType();
if (_past.containsKey(lineBlock))
color = _past.get(lineBlock);
{
type = _past.get(lineBlock).getType();
color = _past.get(lineBlock).getData();
}
_new.put(lineBlock, color);
_new.put(lineBlock, new BlockInfo(type, color));
lineBlock.setType(Host.getBrushMaterial());
lineBlock.setData(Host.getColor());
}
}

View File

@ -1,5 +1,6 @@
package nautilus.game.arcade.game.games.draw.tools;
import nautilus.game.arcade.game.games.draw.BlockInfo;
import nautilus.game.arcade.game.games.draw.Draw;
import org.bukkit.Location;
@ -71,12 +72,17 @@ public class ToolSquare extends Tool
if (!Host.getCanvas().contains(block))
return;
Material type = block.getType();
byte color = block.getData();
if (_past.containsKey(block))
color = _past.get(block);
{
type = _past.get(block).getType();
color = _past.get(block).getData();
}
_new.put(block, color);
_new.put(block, new BlockInfo(type, color));
block.setType(Host.getBrushMaterial());
block.setData(Host.getColor());
}
}