From 62f6ea815d61de91791d5b438f3ea1e55485b805 Mon Sep 17 00:00:00 2001 From: Mini-Chiss Date: Mon, 7 Jul 2014 16:23:55 -0700 Subject: [PATCH] Champs Balance Update Map Parser Update --- .../src/mineplex/mapparser/MapParser.java | 678 ++++++------------ .../src/mineplex/mapparser/Parse.java | 472 ++++++++++++ .../src/mineplex/mapparser/TickEvent.java | 19 + .../src/mineplex/mapparser/Ticker.java | 20 + .../src/mineplex/mapparser/WorldManager.java | 62 +- .../Skill/Assassin/SilencingArrow.java | 2 +- .../classcombat/Skill/Brute/BlockToss.java | 3 - .../classcombat/Skill/Brute/Bloodlust.java | 11 +- .../Skill/Knight/HoldPosition.java | 4 +- .../classcombat/Skill/Mage/GlacialBlade.java | 2 +- .../classcombat/Skill/Ranger/Agility.java | 2 +- .../Skill/Ranger/BarbedArrows.java | 10 +- .../classcombat/Skill/Ranger/HeavyArrows.java | 2 +- .../classcombat/Skill/Ranger/Overcharge.java | 4 +- .../Skill/Ranger/VitalitySpores.java | 4 +- .../classcombat/Skill/Ranger/WolfsPounce.java | 4 +- .../game/classcombat/Skill/SkillFactory.java | 4 +- .../arcade/game/games/common/Domination.java | 11 + .../game/games/common/TeamDeathmatch.java | 10 + .../game/arcade/game/games/uhc/UHC.java | 2 +- 20 files changed, 809 insertions(+), 517 deletions(-) create mode 100644 Plugins/Mineplex.MapParser/src/mineplex/mapparser/Parse.java create mode 100644 Plugins/Mineplex.MapParser/src/mineplex/mapparser/TickEvent.java create mode 100644 Plugins/Mineplex.MapParser/src/mineplex/mapparser/Ticker.java diff --git a/Plugins/Mineplex.MapParser/src/mineplex/mapparser/MapParser.java b/Plugins/Mineplex.MapParser/src/mineplex/mapparser/MapParser.java index 29a6b1855..a75c2df97 100644 --- a/Plugins/Mineplex.MapParser/src/mineplex/mapparser/MapParser.java +++ b/Plugins/Mineplex.MapParser/src/mineplex/mapparser/MapParser.java @@ -1,53 +1,50 @@ package mineplex.mapparser; -import java.io.BufferedWriter; import java.io.File; -import java.io.FileWriter; import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; +import mineplex.core.common.util.C; import mineplex.core.common.util.F; +import mineplex.core.common.util.MapUtil; import mineplex.core.common.util.UtilPlayer; -import mineplex.core.common.util.UtilWorld; +import mineplex.core.common.util.UtilServer; import net.minecraft.util.org.apache.commons.io.FileUtils; import org.bukkit.Bukkit; -import org.bukkit.ChatColor; import org.bukkit.GameMode; import org.bukkit.Location; -import org.bukkit.Material; import org.bukkit.World; import org.bukkit.World.Environment; import org.bukkit.WorldCreator; import org.bukkit.WorldType; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; -import org.bukkit.block.Sign; import org.bukkit.entity.EntityType; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; -import org.bukkit.event.entity.CreatureSpawnEvent; import org.bukkit.event.entity.EntitySpawnEvent; import org.bukkit.event.player.PlayerCommandPreprocessEvent; +import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerMoveEvent; -import org.bukkit.material.Wool; import org.bukkit.plugin.java.JavaPlugin; -import org.fusesource.jansi.Ansi.Color; public class MapParser extends JavaPlugin implements Listener { private WorldManager _worldManager; + private Parse _curParse = null; + @Override public void onEnable() { _worldManager = new WorldManager(this); getServer().getPluginManager().registerEvents(this, this); + + getServer().getWorlds().get(0).setSpawnLocation(0, 106, 0); + + //Updates + getServer().getScheduler().scheduleSyncRepeatingTask(this, new Ticker(this), 1, 1); } @Override @@ -57,11 +54,44 @@ public class MapParser extends JavaPlugin implements Listener } @EventHandler - public void Command(PlayerCommandPreprocessEvent event) + public void PlayerJoin(PlayerJoinEvent event) { Player player = event.getPlayer(); - if (event.getMessage().toLowerCase().startsWith("/copyschematics")) + player.teleport(new Location(getServer().getWorlds().get(0), 0, 106, 0)); + + DisplayHelp(player); + } + + public void DisplayHelp(Player player) + { + UtilPlayer.message(player, F.main("Parser", "Listing Commands;")); + UtilPlayer.message(player, F.value("/hub", "Return to hub world")); + UtilPlayer.message(player, F.value("/create ", "Creates a new map")); + UtilPlayer.message(player, F.value("/delete ", "Deletes an existing map")); + UtilPlayer.message(player, F.value("/map ", "Teleport to a map")); + UtilPlayer.message(player, F.value("/list", "List maps")); + UtilPlayer.message(player, F.value("/copyschematics", "Loads Schematics from Build-1")); + } + + @EventHandler + public void Command(PlayerCommandPreprocessEvent event) + { + Player caller = event.getPlayer(); + + if (_curParse != null) + { + UtilPlayer.message(caller, F.main("Parse", "Cannot use commands during map parse!")); + return; + } + + if (event.getMessage().toLowerCase().startsWith("/help")) + { + event.setCancelled(true); + + DisplayHelp(caller); + } + else if (event.getMessage().toLowerCase().startsWith("/copyschematics")) { event.setCancelled(true); @@ -70,510 +100,219 @@ public class MapParser extends JavaPlugin implements Listener FileUtils.copyDirectory(new File(".." + File.separator + "Build-1" + File.separator + "plugins" + File.separator + "WorldEdit" + File.separator + "schematics"), new File("plugins" + File.separator + "WorldEdit" + File.separator + "schematics")); - UtilPlayer.message(player, F.main("Parser", "Schematics Copied.")); + UtilPlayer.message(caller, F.main("Parser", "Schematics Copied.")); } catch (IOException e) { e.printStackTrace(); - UtilPlayer.message(player, F.main("Parser", "Schematics Copy Failed! Contact Jonalon.")); + UtilPlayer.message(caller, F.main("Parser", "Schematics Copy Failed! Contact Jonalon.")); } } - else if (event.getMessage().toLowerCase().startsWith("/createmap")) + else if (event.getMessage().toLowerCase().startsWith("/create")) { event.setCancelled(true); String[] args = event.getMessage().substring(event.getMessage().indexOf(' ') + 1).split(" "); - UtilPlayer.message(player, F.main("Parser", "Creating World: " + F.elem(args[0]))); + String worldName = "map_" + args[0]; - WorldCreator worldCreator = new WorldCreator(args[0]); + UtilPlayer.message(caller, F.main("Parser", "Creating World: " + F.elem(worldName))); + + WorldCreator worldCreator = new WorldCreator(worldName); worldCreator.environment(Environment.NORMAL); worldCreator.type(WorldType.FLAT); worldCreator.generateStructures(false); World world = Bukkit.getServer().createWorld(worldCreator); - UtilPlayer.message(player, F.main("Parser", "Teleporting to World: " + F.elem(args[0]))); + UtilPlayer.message(caller, F.main("Parser", "Teleporting to World: " + F.elem(worldName))); event.getPlayer().teleport(new Location(world, 0, 100, 0)); } - else if (event.getMessage().toLowerCase().startsWith("/loadmap")) + else if (event.getMessage().toLowerCase().startsWith("/delete")) { event.setCancelled(true); String[] args = event.getMessage().substring(event.getMessage().indexOf(' ') + 1).split(" "); - UtilPlayer.message(player, F.main("Parser", "Loading World: " + F.elem(args[0]))); + String worldName = "map_" + args[0]; + + if (!DoesMapExist(worldName)) + { + UtilPlayer.message(caller, F.main("Parser", "World does not exist: " + F.elem(worldName))); + return; + } - World world = _worldManager.loadPendingParse(event.getPlayer(), args[0]); + if (GetMapWorld(worldName) != null) + { + World world = GetMapWorld(worldName); + + //Teleport Out + for (Player other : world.getPlayers()) + other.teleport(new Location(getServer().getWorlds().get(0), 0, 106, 0)); + + //Unload World + MapUtil.UnloadWorld(this, world); + } - UtilPlayer.message(player, F.main("Parser", "Teleporting to World: " + F.elem(args[0]))); + //Delete + FileUtils.deleteQuietly(new File(worldName)); - event.getPlayer().teleport(new Location(world, 0, 100, 0)); + Inform(caller, "Deleted World: " + F.elem(args[0])); } - else if (event.getMessage().toLowerCase().startsWith("/listmaps")) + else if (event.getMessage().toLowerCase().startsWith("/hub")) + { + event.setCancelled(true); + + event.getPlayer().teleport(new Location(getServer().getWorlds().get(0), 0, 106, 0)); + } + else if (event.getMessage().toLowerCase().startsWith("/map")) { event.setCancelled(true); - UtilPlayer.message(player, F.main("Parser", "Listing Worlds;")); + String[] args = event.getMessage().substring(event.getMessage().indexOf(' ') + 1).split(" "); - _worldManager.listPendingParses(event.getPlayer()); + String worldName = "map_" + args[0]; + + UtilPlayer.message(caller, F.main("Parser", "Loading Map: " + F.elem(worldName))); + + World world = GetMapWorld(worldName); + if (world == null) + { + if (DoesMapExist(worldName)) + { + UtilPlayer.message(caller, F.main("Parser", "Map Exists!")); + world = Bukkit.getWorld(worldName); + } + else + { + UtilPlayer.message(caller, F.main("Parser", "Map Doesn't Exist!")); + return; + } + } + + //Error (This should not occur!) + if (world == null) + { + UtilPlayer.message(caller, F.main("Parser", "Null World Error: " + F.elem(worldName))); + return; + } + + //Teleport + UtilPlayer.message(caller, F.main("Parser", "Teleporting to World: " + F.elem(worldName))); + + event.getPlayer().teleport(new Location(world, 0, 100, 0)); + } + else if (event.getMessage().toLowerCase().startsWith("/list")) + { + event.setCancelled(true); + + UtilPlayer.message(caller, F.main("Parser", "Listing Maps;")); + + File mapsFolder = new File("."); + for (File file : mapsFolder.listFiles()) + { + if (!file.isDirectory()) + continue; + + if (!file.getName().toLowerCase().startsWith("map_")) + continue; + + caller.sendMessage(file.getName()); + } + + //_worldManager.listPendingParses(event.getPlayer()); } else if (event.getMessage().toLowerCase().startsWith("/parse")) { event.setCancelled(true); + Location parseLoc = event.getPlayer().getLocation(); + String[] args = event.getMessage().substring(event.getMessage().indexOf(' ') + 1).split(" "); String gameType = args[0]; try { - GameType type = GameType.valueOf(gameType); + GameType.valueOf(gameType); } catch (Exception ex) { - event.getPlayer().sendMessage(ChatColor.RED + "" + ChatColor.BOLD + "Invalid gametype!"); - event.getPlayer().sendMessage(ChatColor.YELLOW + "" + ChatColor.BOLD + "Available games:"); + UtilPlayer.message(event.getPlayer(), F.main("Parser", "Valid Game Types;")); + String gameTypes = ""; + for (GameType game : GameType.values()) { - event.getPlayer().sendMessage(game.toString()); + gameTypes += game.toString() + " "; } + event.getPlayer().sendMessage(gameTypes); + return; } String msg = event.getMessage().replace(gameType, "").toLowerCase(); - World world = player.getWorld(); - - // TODO teleport player to main world - player.teleport(new Location(Bukkit.getWorlds().get(0), 0, 100, 0)); + World world = caller.getWorld(); + //Teleport Players Out + for (Player worldPlayer : world.getPlayers()) + { + worldPlayer.teleport(new Location(Bukkit.getWorlds().get(0), 0, 100, 0)); + UtilPlayer.message(event.getPlayer(), F.main("Parser", "World " + F.elem(world.getName()) + " is preparing to be parsed.")); + } + + //Unload World > Copy String worldName = _worldManager.prepMapParse(world); + if (worldName == null) + { + UtilPlayer.message(event.getPlayer(), F.main("Parser", "Could not prepare world for parsing!")); + return; + } + + //World to be Parsed World parseableWorld = Bukkit.getWorld(worldName); - Parse(event.getPlayer(), parseableWorld, msg.split(" ")); + //Parse the World + Parse(event.getPlayer(), parseableWorld, msg.split(" "), parseLoc); + //Finalize and Save to Zip _worldManager.finalizeParsedWorld(gameType, parseableWorld); } + else if (event.getMessage().toLowerCase().startsWith("/worlds")) + { + event.setCancelled(true); + + UtilPlayer.message(event.getPlayer(), F.main("Parser", "Listing Active Worlds;")); + + for (World world : this.getServer().getWorlds()) + { + event.getPlayer().sendMessage(world.getName()); + } + } } - public void Parse(Player caller, World world, String[] args) + public void Parse(Player caller, World world, String[] args, Location loc) { - HashSet dataId = new HashSet(); - - for (String arg : args) - { - if (arg.equals("/parse")) - continue; - - try - { - dataId.add(Integer.parseInt(arg)); - } - catch (Exception e) - { - caller.sendMessage("Invalid Data ID: " + arg); - } - } - - HashMap> TeamLocs = new HashMap>(); - HashMap> DataLocs = new HashMap>(); - HashMap> CustomLocs = new HashMap>(); - - Location cornerA = null; - Location cornerB = null; - - int processed = 0; - - caller.sendMessage("Scanning for Blocks..."); - - for (int x=-600 ; x < 600 ; x++) - for (int z=-600 ; z < 600 ; z++) - for (int y=0 ; y < 256 ; y++) - { - processed++; - if (processed % 20000000 == 0) - caller.sendMessage("Processed: " + processed + " of " + (1200*1200*256)); - - Block block = world.getBlockAt(caller.getLocation().getBlockX()+x, caller.getLocation().getBlockY()+y, caller.getLocation().getBlockZ()+z); - - //ID DATA - if (dataId.contains(block.getTypeId())) - { - String key = ""+block.getTypeId(); - - if (!CustomLocs.containsKey(key)) - CustomLocs.put(key, new ArrayList()); - - CustomLocs.get(key).add(block.getLocation()); - continue; - } - - //Signs - if (block.getType() == Material.SIGN_POST || block.getType() == Material.WALL_SIGN) - { - if (block.getRelative(BlockFace.DOWN).getType() == Material.SPONGE) - { - Sign s = (Sign) block.getState(); - - String name = ""; - - try - { - name = s.getLine(0); - } - catch (Exception e) - { - caller.sendMessage("Invalid Sign Data: " + UtilWorld.locToStr(block.getLocation())); - } - - //Add - if (!CustomLocs.containsKey(name)) - CustomLocs.put(name, new ArrayList()); - - CustomLocs.get(name).add(block.getRelative(BlockFace.DOWN).getLocation()); - - //Remove Blocks - block.setTypeId(0); - block.getRelative(BlockFace.DOWN).setTypeId(0); - } - } - - //Spawns + Borders - if (block.getTypeId() == 147) - { - Block wool = block.getRelative(BlockFace.DOWN); - if (wool == null) - continue; - - if (wool.getType() == Material.WOOL) - { - if (wool.getData() == 0) - { - if (cornerA == null) cornerA = wool.getLocation(); - else if (cornerB == null) cornerB = wool.getLocation(); - else - { - caller.sendMessage("More than 2 Corner Markers:"); - caller.sendMessage("Corner A: " + cornerA); - caller.sendMessage("Corner B: " + cornerB); - caller.sendMessage("Excess: " + UtilWorld.locToStrClean(wool.getLocation())); - } - - //Remove Blocks - block.setTypeId(0); - wool.setTypeId(0); - } - - if (wool.getData() == 1) - { - if (!TeamLocs.containsKey("Orange")) - TeamLocs.put("Orange", new ArrayList()); - - TeamLocs.get("Orange").add(wool.getLocation()); - - //Remove Blocks - block.setTypeId(0); - wool.setTypeId(0); - } - - if (wool.getData() == 2) - { - if (!TeamLocs.containsKey("Magenta")) - TeamLocs.put("Magenta", new ArrayList()); - - TeamLocs.get("Magenta").add(wool.getLocation()); - - //Remove Blocks - block.setTypeId(0); - wool.setTypeId(0); - } - - if (wool.getData() == 3) - { - if (!TeamLocs.containsKey("Sky")) - TeamLocs.put("Sky", new ArrayList()); - - TeamLocs.get("Sky").add(wool.getLocation()); - - //Remove Blocks - block.setTypeId(0); - wool.setTypeId(0); - } - - if (wool.getData() == 4) - { - if (!TeamLocs.containsKey("Yellow")) - TeamLocs.put("Yellow", new ArrayList()); - - TeamLocs.get("Yellow").add(wool.getLocation()); - - //Remove Blocks - block.setTypeId(0); - wool.setTypeId(0); - } - - if (wool.getData() == 5) - { - if (!TeamLocs.containsKey("Lime")) - TeamLocs.put("Lime", new ArrayList()); - - TeamLocs.get("Lime").add(wool.getLocation()); - - //Remove Blocks - block.setTypeId(0); - wool.setTypeId(0); - } - - if (wool.getData() == 6) - { - if (!TeamLocs.containsKey("Pink")) - TeamLocs.put("Pink", new ArrayList()); - - TeamLocs.get("Pink").add(wool.getLocation()); - - //Remove Blocks - block.setTypeId(0); - wool.setTypeId(0); - } - - if (wool.getData() == 7) - { - if (!TeamLocs.containsKey("Gray")) - TeamLocs.put("Gray", new ArrayList()); - - TeamLocs.get("Gray").add(wool.getLocation()); - - //Remove Blocks - block.setTypeId(0); - wool.setTypeId(0); - } - - if (wool.getData() == 8) - { - if (!TeamLocs.containsKey("LGray")) - TeamLocs.put("LGray", new ArrayList()); - - TeamLocs.get("LGray").add(wool.getLocation()); - - //Remove Blocks - block.setTypeId(0); - wool.setTypeId(0); - } - - if (wool.getData() == 9) - { - if (!TeamLocs.containsKey("Cyan")) - TeamLocs.put("Cyan", new ArrayList()); - - TeamLocs.get("Cyan").add(wool.getLocation()); - - //Remove Blocks - block.setTypeId(0); - wool.setTypeId(0); - } - - if (wool.getData() == 10) - { - if (!TeamLocs.containsKey("Purple")) - TeamLocs.put("Purple", new ArrayList()); - - TeamLocs.get("Purple").add(wool.getLocation()); - - //Remove Blocks - block.setTypeId(0); - wool.setTypeId(0); - } - - if (wool.getData() == 11) - { - if (!TeamLocs.containsKey("DBlue")) - TeamLocs.put("DBlue", new ArrayList()); - - TeamLocs.get("DBlue").add(wool.getLocation()); - - //Remove Blocks - block.setTypeId(0); - wool.setTypeId(0); - } - - if (wool.getData() == 12) - { - if (!TeamLocs.containsKey("Brown")) - TeamLocs.put("Brown", new ArrayList()); - - TeamLocs.get("Brown").add(wool.getLocation()); - - //Remove Blocks - block.setTypeId(0); - wool.setTypeId(0); - } - - if (wool.getData() == 13) - { - if (!TeamLocs.containsKey("Green")) - TeamLocs.put("Green", new ArrayList()); - - TeamLocs.get("Green").add(wool.getLocation()); - - //Remove Blocks - block.setTypeId(0); - wool.setTypeId(0); - } - - if (wool.getData() == 14) - { - if (!TeamLocs.containsKey("Red")) - TeamLocs.put("Red", new ArrayList()); - - TeamLocs.get("Red").add(wool.getLocation()); - - //Remove Blocks - block.setTypeId(0); - wool.setTypeId(0); - } - - if (wool.getData() == 15) - { - if (!TeamLocs.containsKey("Black")) - TeamLocs.put("Black", new ArrayList()); - - TeamLocs.get("Black").add(wool.getLocation()); - - //Remove Blocks - block.setTypeId(0); - wool.setTypeId(0); - } - } - } - - if (block.getTypeId() != 148) - continue; - - Block wool = block.getRelative(BlockFace.DOWN); - if (wool == null) - continue; - - if (wool.getType() != Material.WOOL) - continue; - - Wool woolData = new Wool(wool.getType(), wool.getData()); - - String dataType = woolData.getColor().name(); - - if (!DataLocs.containsKey(dataType)) - DataLocs.put(dataType, new ArrayList()); - - DataLocs.get(dataType).add(wool.getLocation()); - - //Remove Blocks - block.setTypeId(0); - wool.setTypeId(0); - } - - if (cornerA == null || cornerB == null) - { - caller.sendMessage("Missing Corner Locations!"); - return; - } - - //Save - try - { - FileWriter fstream = new FileWriter(world.getName() + File.separator + "WorldConfig.dat"); - BufferedWriter out = new BufferedWriter(fstream); - - out.write("MAP_NAME:"); - out.write("\n"); - out.write("MAP_AUTHOR:"); - out.write("\n"); - out.write("\n"); - out.write("MIN_X:"+Math.min(cornerA.getBlockX(), cornerB.getBlockX())); - out.write("\n"); - out.write("MAX_X:"+Math.max(cornerA.getBlockX(), cornerB.getBlockX())); - out.write("\n"); - out.write("MIN_Z:"+Math.min(cornerA.getBlockZ(), cornerB.getBlockZ())); - out.write("\n"); - out.write("MAX_Z:"+Math.max(cornerA.getBlockZ(), cornerB.getBlockZ())); - out.write("\n"); - out.write("\n"); - if (cornerA.getBlockY() == cornerB.getBlockY()) - { - out.write("MIN_Y:0"); - out.write("\n"); - out.write("MAX_Y:256"); - } - else - { - out.write("MIN_Y:"+Math.min(cornerA.getBlockY(), cornerB.getBlockY())); - out.write("\n"); - out.write("MAX_Y:"+Math.max(cornerA.getBlockY(), cornerB.getBlockY())); - } - - //Teams - for (String team : TeamLocs.keySet()) - { - out.write("\n"); - out.write("\n"); - out.write("TEAM_NAME:" + team); - out.write("\n"); - out.write("TEAM_SPAWNS:" + LocationsToString(TeamLocs.get(team))); - } - - //Data - for (String data : DataLocs.keySet()) - { - out.write("\n"); - out.write("\n"); - out.write("DATA_NAME:" + data); - out.write("\n"); - out.write("DATA_LOCS:" + LocationsToString(DataLocs.get(data))); - } - - //Custom - for (String data : CustomLocs.keySet()) - { - out.write("\n"); - out.write("\n"); - out.write("CUSTOM_NAME:" + data); - out.write("\n"); - out.write("CUSTOM_LOCS:" + LocationsToString(CustomLocs.get(data))); - } - - out.close(); - } - catch (Exception e) - { - caller.sendMessage("Error: File Write Error"); - } - - - caller.sendMessage("World Data Saved."); + _curParse = new Parse(this, world, args, caller, loc); } - - public String LocationsToString(ArrayList locs) + + @EventHandler + public void ParseUpdate(TickEvent event) { - String out = ""; - - for (Location loc : locs) - out += loc.getBlockX() + "," + loc.getBlockY() + "," + loc.getBlockZ() + ":"; - - return out; - } - - public String LocationSignsToString(HashMap locs) - { - String out = ""; - - for (Location loc : locs.keySet()) - out += locs.get(loc) + "@" + loc.getBlockX() + "," + loc.getBlockY() + "," + loc.getBlockZ() + ":"; - - return out; + if (_curParse == null) + return; + + if (_curParse.Update()) + { + _curParse = null; + + Announce("Parse Completed!"); + } } @EventHandler @@ -595,4 +334,47 @@ public class MapParser extends JavaPlugin implements Listener if (!event.getPlayer().isOp()) event.getPlayer().setOp(true); } + + public void Announce(String msg) + { + for (Player player : UtilServer.getPlayers()) + { + player.sendMessage(C.cGold + msg); + + System.out.println("[Announce] " + msg); + } + } + + public void Inform(Player player, String message) + { + UtilPlayer.message(player, F.main("Parser", message)); + + System.out.println(message); + } + + public boolean DoesMapExist(String name) + { + File mapsFolder = new File("."); + for (File file : mapsFolder.listFiles()) + { + if (!file.isDirectory()) + continue; + + if (file.getName().equals(name)) + return true; + } + + return false; + } + + public World GetMapWorld(String name) + { + for (World world : this.getServer().getWorlds()) + { + if (world.getName().equals(name)) + return world; + } + + return null; + } } diff --git a/Plugins/Mineplex.MapParser/src/mineplex/mapparser/Parse.java b/Plugins/Mineplex.MapParser/src/mineplex/mapparser/Parse.java new file mode 100644 index 000000000..f75374b1a --- /dev/null +++ b/Plugins/Mineplex.MapParser/src/mineplex/mapparser/Parse.java @@ -0,0 +1,472 @@ +package mineplex.mapparser; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; + +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilWorld; + +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.block.Sign; +import org.bukkit.entity.Player; +import org.bukkit.material.Wool; + +public class Parse +{ + //Parse Data + private MapParser Host; + private World _world; + private String[] _args; + private Player _caller; + private Location _callLoc; + private int _size = 400; + private int y = 0; + + //World Data + private HashSet _dataId = new HashSet(); + private HashMap> _teamLocs = new HashMap>(); + private HashMap> _dataLocs = new HashMap>(); + private HashMap> _customLocs = new HashMap>(); + + private Location _cornerA = null; + private Location _cornerB = null; + + private int _processed = 0; + + public Parse(MapParser host, World world, String[] args, Player caller, Location loc) + { + Host = host; + + _world = world; + _args = args; + _callLoc = loc; + Host.Announce("Parse Called: " + F.elem(caller.getName())); + + Initialize(); + } + + private void Initialize() + { + Host.Announce("Commencing Parse of World: " + F.elem(_world.getName())); + + //Take BlockID Arguments + for (String arg : _args) + { + if (arg.equals("/parse")) + continue; + + try + { + _dataId.add(Integer.parseInt(arg)); + } + catch (Exception e) + { + _caller.sendMessage("Invalid Data ID: " + arg); + } + } + } + + @SuppressWarnings("deprecation") + public boolean Update() + { + for (int x=-_size ; x < _size ; x++) + for (int z=-_size ; z < _size ; z++) + { + _processed++; + if (_processed % 20000000 == 0) + Host.Announce("Processed: " + F.elem((int)(_processed/1000000) + "M of " + (int)(((_size*2)*(_size*2)*256)/1000000) + "M")); + + Block block = _world.getBlockAt(_callLoc.getBlockX()+x, _callLoc.getBlockY()+y, _callLoc.getBlockZ()+z); + + //ID DATA + if (_dataId.contains(block.getTypeId())) + { + String key = ""+block.getTypeId(); + + if (!_customLocs.containsKey(key)) + _customLocs.put(key, new ArrayList()); + + _customLocs.get(key).add(block.getLocation()); + continue; + } + + //Signs + if (block.getType() == Material.SIGN_POST || block.getType() == Material.WALL_SIGN) + { + if (block.getRelative(BlockFace.DOWN).getType() == Material.SPONGE) + { + Sign s = (Sign) block.getState(); + + String name = ""; + + try + { + name = s.getLine(0); + } + catch (Exception e) + { + Host.Announce("Invalid Sign Data: " + UtilWorld.locToStr(block.getLocation())); + } + + //Add + if (!_customLocs.containsKey(name)) + _customLocs.put(name, new ArrayList()); + + _customLocs.get(name).add(block.getRelative(BlockFace.DOWN).getLocation()); + + //Remove Blocks + block.setTypeId(0); + block.getRelative(BlockFace.DOWN).setTypeId(0); + } + } + + //Spawns + Borders + if (block.getTypeId() == 147) + { + Block wool = block.getRelative(BlockFace.DOWN); + if (wool == null) + continue; + + if (wool.getType() == Material.WOOL) + { + if (wool.getData() == 0) + { + if (_cornerA == null) _cornerA = wool.getLocation(); + else if (_cornerB == null) _cornerB = wool.getLocation(); + else + { + Host.Announce("More than 2 Corner Markers:"); + Host.Announce("Corner A: " + _cornerA); + Host.Announce("Corner B: " + _cornerB); + Host.Announce("Excess: " + UtilWorld.locToStrClean(wool.getLocation())); + } + + //Remove Blocks + block.setTypeId(0); + wool.setTypeId(0); + } + + if (wool.getData() == 1) + { + if (!_teamLocs.containsKey("Orange")) + _teamLocs.put("Orange", new ArrayList()); + + _teamLocs.get("Orange").add(wool.getLocation()); + + //Remove Blocks + block.setTypeId(0); + wool.setTypeId(0); + } + + if (wool.getData() == 2) + { + if (!_teamLocs.containsKey("Magenta")) + _teamLocs.put("Magenta", new ArrayList()); + + _teamLocs.get("Magenta").add(wool.getLocation()); + + //Remove Blocks + block.setTypeId(0); + wool.setTypeId(0); + } + + if (wool.getData() == 3) + { + if (!_teamLocs.containsKey("Sky")) + _teamLocs.put("Sky", new ArrayList()); + + _teamLocs.get("Sky").add(wool.getLocation()); + + //Remove Blocks + block.setTypeId(0); + wool.setTypeId(0); + } + + if (wool.getData() == 4) + { + if (!_teamLocs.containsKey("Yellow")) + _teamLocs.put("Yellow", new ArrayList()); + + _teamLocs.get("Yellow").add(wool.getLocation()); + + //Remove Blocks + block.setTypeId(0); + wool.setTypeId(0); + } + + if (wool.getData() == 5) + { + if (!_teamLocs.containsKey("Lime")) + _teamLocs.put("Lime", new ArrayList()); + + _teamLocs.get("Lime").add(wool.getLocation()); + + //Remove Blocks + block.setTypeId(0); + wool.setTypeId(0); + } + + if (wool.getData() == 6) + { + if (!_teamLocs.containsKey("Pink")) + _teamLocs.put("Pink", new ArrayList()); + + _teamLocs.get("Pink").add(wool.getLocation()); + + //Remove Blocks + block.setTypeId(0); + wool.setTypeId(0); + } + + if (wool.getData() == 7) + { + if (!_teamLocs.containsKey("Gray")) + _teamLocs.put("Gray", new ArrayList()); + + _teamLocs.get("Gray").add(wool.getLocation()); + + //Remove Blocks + block.setTypeId(0); + wool.setTypeId(0); + } + + if (wool.getData() == 8) + { + if (!_teamLocs.containsKey("LGray")) + _teamLocs.put("LGray", new ArrayList()); + + _teamLocs.get("LGray").add(wool.getLocation()); + + //Remove Blocks + block.setTypeId(0); + wool.setTypeId(0); + } + + if (wool.getData() == 9) + { + if (!_teamLocs.containsKey("Cyan")) + _teamLocs.put("Cyan", new ArrayList()); + + _teamLocs.get("Cyan").add(wool.getLocation()); + + //Remove Blocks + block.setTypeId(0); + wool.setTypeId(0); + } + + if (wool.getData() == 10) + { + if (!_teamLocs.containsKey("Purple")) + _teamLocs.put("Purple", new ArrayList()); + + _teamLocs.get("Purple").add(wool.getLocation()); + + //Remove Blocks + block.setTypeId(0); + wool.setTypeId(0); + } + + if (wool.getData() == 11) + { + if (!_teamLocs.containsKey("DBlue")) + _teamLocs.put("DBlue", new ArrayList()); + + _teamLocs.get("DBlue").add(wool.getLocation()); + + //Remove Blocks + block.setTypeId(0); + wool.setTypeId(0); + } + + if (wool.getData() == 12) + { + if (!_teamLocs.containsKey("Brown")) + _teamLocs.put("Brown", new ArrayList()); + + _teamLocs.get("Brown").add(wool.getLocation()); + + //Remove Blocks + block.setTypeId(0); + wool.setTypeId(0); + } + + if (wool.getData() == 13) + { + if (!_teamLocs.containsKey("Green")) + _teamLocs.put("Green", new ArrayList()); + + _teamLocs.get("Green").add(wool.getLocation()); + + //Remove Blocks + block.setTypeId(0); + wool.setTypeId(0); + } + + if (wool.getData() == 14) + { + if (!_teamLocs.containsKey("Red")) + _teamLocs.put("Red", new ArrayList()); + + _teamLocs.get("Red").add(wool.getLocation()); + + //Remove Blocks + block.setTypeId(0); + wool.setTypeId(0); + } + + if (wool.getData() == 15) + { + if (!_teamLocs.containsKey("Black")) + _teamLocs.put("Black", new ArrayList()); + + _teamLocs.get("Black").add(wool.getLocation()); + + //Remove Blocks + block.setTypeId(0); + wool.setTypeId(0); + } + } + } + + if (block.getTypeId() != 148) + continue; + + Block wool = block.getRelative(BlockFace.DOWN); + if (wool == null) + continue; + + if (wool.getType() != Material.WOOL) + continue; + + Wool woolData = new Wool(wool.getType(), wool.getData()); + + String dataType = woolData.getColor().name(); + + if (!_dataLocs.containsKey(dataType)) + _dataLocs.put(dataType, new ArrayList()); + + _dataLocs.get(dataType).add(wool.getLocation()); + + //Remove Blocks + block.setTypeId(0); + wool.setTypeId(0); + } + + y++; + + //Finalize + if (y > 255) + { + if (_cornerA == null || _cornerB == null) + { + Host.Announce("Missing Corner Locations!"); + Host.Announce("Defaulted to -256 to +256"); + + _cornerA = new Location(_world, -256, 0, -256); + _cornerB = new Location(_world, 256, 0, 256); + } + + //Save + try + { + FileWriter fstream = new FileWriter(_world.getName() + File.separator + "WorldConfig.dat"); + BufferedWriter out = new BufferedWriter(fstream); + + out.write("MAP_NAME:"); + out.write("\n"); + out.write("MAP_AUTHOR:"); + out.write("\n"); + out.write("\n"); + out.write("MIN_X:"+Math.min(_cornerA.getBlockX(), _cornerB.getBlockX())); + out.write("\n"); + out.write("MAX_X:"+Math.max(_cornerA.getBlockX(), _cornerB.getBlockX())); + out.write("\n"); + out.write("MIN_Z:"+Math.min(_cornerA.getBlockZ(), _cornerB.getBlockZ())); + out.write("\n"); + out.write("MAX_Z:"+Math.max(_cornerA.getBlockZ(), _cornerB.getBlockZ())); + out.write("\n"); + out.write("\n"); + if (_cornerA.getBlockY() == _cornerB.getBlockY()) + { + out.write("MIN_Y:0"); + out.write("\n"); + out.write("MAX_Y:256"); + } + else + { + out.write("MIN_Y:"+Math.min(_cornerA.getBlockY(), _cornerB.getBlockY())); + out.write("\n"); + out.write("MAX_Y:"+Math.max(_cornerA.getBlockY(), _cornerB.getBlockY())); + } + + //Teams + for (String team : _teamLocs.keySet()) + { + out.write("\n"); + out.write("\n"); + out.write("TEAM_NAME:" + team); + out.write("\n"); + out.write("TEAM_SPAWNS:" + LocationsToString(_teamLocs.get(team))); + } + + //Data + for (String data : _dataLocs.keySet()) + { + out.write("\n"); + out.write("\n"); + out.write("DATA_NAME:" + data); + out.write("\n"); + out.write("DATA_LOCS:" + LocationsToString(_dataLocs.get(data))); + } + + //Custom + for (String data : _customLocs.keySet()) + { + out.write("\n"); + out.write("\n"); + out.write("CUSTOM_NAME:" + data); + out.write("\n"); + out.write("CUSTOM_LOCS:" + LocationsToString(_customLocs.get(data))); + } + + out.close(); + } + catch (Exception e) + { + Host.Announce("Error: File Write Error"); + } + + Host.Announce("WorldConfig.dat Saved."); + } + + return false; + } + + public String LocationsToString(ArrayList locs) + { + String out = ""; + + for (Location loc : locs) + out += loc.getBlockX() + "," + loc.getBlockY() + "," + loc.getBlockZ() + ":"; + + return out; + } + + public String LocationSignsToString(HashMap locs) + { + String out = ""; + + for (Location loc : locs.keySet()) + out += locs.get(loc) + "@" + loc.getBlockX() + "," + loc.getBlockY() + "," + loc.getBlockZ() + ":"; + + return out; + } +} diff --git a/Plugins/Mineplex.MapParser/src/mineplex/mapparser/TickEvent.java b/Plugins/Mineplex.MapParser/src/mineplex/mapparser/TickEvent.java new file mode 100644 index 000000000..386b3feb7 --- /dev/null +++ b/Plugins/Mineplex.MapParser/src/mineplex/mapparser/TickEvent.java @@ -0,0 +1,19 @@ +package mineplex.mapparser; + +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +public class TickEvent extends Event +{ + private static final HandlerList handlers = new HandlerList(); + + public HandlerList getHandlers() + { + return handlers; + } + + public static HandlerList getHandlerList() + { + return handlers; + } +} \ No newline at end of file diff --git a/Plugins/Mineplex.MapParser/src/mineplex/mapparser/Ticker.java b/Plugins/Mineplex.MapParser/src/mineplex/mapparser/Ticker.java new file mode 100644 index 000000000..e7774c822 --- /dev/null +++ b/Plugins/Mineplex.MapParser/src/mineplex/mapparser/Ticker.java @@ -0,0 +1,20 @@ +package mineplex.mapparser; + +import org.bukkit.plugin.java.JavaPlugin; + +public class Ticker implements Runnable +{ + private JavaPlugin _plugin; + + public Ticker(JavaPlugin plugin) + { + _plugin = plugin; + _plugin.getServer().getScheduler().scheduleSyncRepeatingTask(_plugin, this, 0L, 1L); + } + + @Override + public void run() + { + _plugin.getServer().getPluginManager().callEvent(new TickEvent()); + } +} diff --git a/Plugins/Mineplex.MapParser/src/mineplex/mapparser/WorldManager.java b/Plugins/Mineplex.MapParser/src/mineplex/mapparser/WorldManager.java index 778738d44..4e6f1ce9b 100644 --- a/Plugins/Mineplex.MapParser/src/mineplex/mapparser/WorldManager.java +++ b/Plugins/Mineplex.MapParser/src/mineplex/mapparser/WorldManager.java @@ -1,7 +1,6 @@ package mineplex.mapparser; import java.io.File; -import java.io.FilenameFilter; import java.io.IOException; import java.nio.file.Paths; import java.util.Arrays; @@ -13,53 +12,23 @@ import net.minecraft.util.org.apache.commons.io.FileUtils; import org.bukkit.World; import org.bukkit.WorldCreator; -import org.bukkit.entity.Player; -import org.bukkit.event.entity.CreatureSpawnEvent; import org.bukkit.plugin.java.JavaPlugin; public class WorldManager { private JavaPlugin _plugin; - private File _pendingParseDirectory = new File("pendingParses"); public WorldManager(JavaPlugin plugin) { _plugin = plugin; + } - if (!_pendingParseDirectory.exists()) - _pendingParseDirectory.mkdirs(); - } - - public void listPendingParses(Player player) - { - FilenameFilter statsFilter = new FilenameFilter() - { - public boolean accept(File paramFile, String paramString) - { - if (paramString.endsWith("zip")) - { - return true; - } - - return false; - } - }; - - for (File f : _pendingParseDirectory.listFiles(statsFilter)) - { - player.sendMessage(f.getName()); - } - } - - public World loadPendingParse(Player player, String name) - { - return WorldUtil.LoadWorld(new WorldCreator(_pendingParseDirectory + File.separator + name)); - } - public String prepMapParse(World world) { + //Unload World MapUtil.UnloadWorld(_plugin, world); + //Delete Non-Map Files String[] folders = new File(world.getName()).list(); for (String fileName : folders) { @@ -71,16 +40,29 @@ public class WorldManager if (fileName.equalsIgnoreCase("WorldConfig.dat")) continue; - + FileUtils.deleteQuietly(new File(world.getName() + File.separator + fileName)); } - ZipUtil.ZipFolders(Paths.get("pendingParses").toAbsolutePath().toString(), world.getName() + ".zip", Arrays.asList(new String[] { world.getName() }), Arrays.asList(new String[] { })); + //Copy for Parsing + try + { + //Delete if already exists + File destination = new File("parse_" + world.getName()); + if (destination.exists()) + FileUtils.deleteQuietly(destination); + + FileUtils.copyDirectory(new File(world.getName()), destination); + } + catch (IOException e) + { + e.printStackTrace(); + return null; + } + + WorldUtil.LoadWorld(new WorldCreator("parse_" + world.getName())); - ZipUtil.UnzipToDirectory("pendingParses" + File.separator + world.getName() + ".zip", world.getName() + "_current"); - WorldUtil.LoadWorld(new WorldCreator(world.getName() + "_current")); - - return world.getName() + "_current"; + return "parse_" + world.getName(); } public void finalizeParsedWorld(String gameType, World world) diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/SilencingArrow.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/SilencingArrow.java index 4f1d8f301..2af2d2345 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/SilencingArrow.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/SilencingArrow.java @@ -101,7 +101,7 @@ public class SilencingArrow extends SkillActive _arrows.add(event.getProjectile()); } - @EventHandler(priority = EventPriority.LOW) + @EventHandler(priority = EventPriority.HIGH) public void Damage(CustomDamageEvent event) { if (event.IsCancelled()) diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/BlockToss.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/BlockToss.java index 0e2fba7d9..ad97fb989 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/BlockToss.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/BlockToss.java @@ -197,9 +197,6 @@ public class BlockToss extends SkillCharge implements IThrown UtilAction.velocity(block, cur.getLocation().getDirection(), mult, false, 0, 0, 1, true); Factory.Projectile().AddThrow(block, cur, this, -1, true, true, true, null, 0, 0, null, 0, UpdateType.FASTEST, 2.5d); - - //Boost - UtilAction.velocity(cur, cur.getLocation().getDirection().multiply(-1), 0.4, false, 0, 0, 1, false); //Event UtilServer.getServer().getPluginManager().callEvent(new SkillEvent(cur, GetName(), ClassType.Brute)); diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/Bloodlust.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/Bloodlust.java index 97722445b..a81be9d42 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/Bloodlust.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/Bloodlust.java @@ -32,12 +32,13 @@ public class Bloodlust extends Skill SetDesc(new String[] { - "When an enemy dies within #4#4 blocks,", + "When an enemy dies within #8#2 blocks,", "you go into a Bloodlust, receiving", "Speed 1 and Strength 1 for #4#2 seconds.", + "You also heal healing #2#1 health.", "", "Bloodlust can stack up to 3 times,", - "boosting the level of Strength." + "boosting the level of Speed by 1." }); } @@ -79,9 +80,11 @@ public class Bloodlust extends Skill _time.put(cur, (System.currentTimeMillis() + (long)(dur*1000))); //Condition - Factory.Condition().Factory().Speed(GetName(), cur, event.GetEvent().getEntity(), dur, 0, false, true, true); - Factory.Condition().Factory().Strength(GetName(), cur, event.GetEvent().getEntity(), dur, str, false, true, true); + Factory.Condition().Factory().Speed(GetName(), cur, event.GetEvent().getEntity(), dur, str, false, true, true); + Factory.Condition().Factory().Strength(GetName(), cur, event.GetEvent().getEntity(), dur, 0, false, true, true); + UtilPlayer.health(cur, 2 + level); + //Inform UtilPlayer.message(cur, F.main(GetClassType().name(), "You entered " + F.skill(GetName(level)) + " at " + F.elem("Level " + (str+1)) + ".")); diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/HoldPosition.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/HoldPosition.java index 103223086..39e7df3d6 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/HoldPosition.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/HoldPosition.java @@ -42,7 +42,7 @@ public class HoldPosition extends SkillActive SetDesc(new String[] { "Hold your position, gaining", - "Protection 4, Slow 3 and no", + "Protection 3, Slow 3 and no", "knockback for #3#1 seconds." }); } @@ -66,7 +66,7 @@ public class HoldPosition extends SkillActive //Action Factory.Condition().Factory().Slow(GetName(), player, player, duration, 2, false, true, false, true); - Factory.Condition().Factory().Protection(GetName(), player, player, duration, 3, false, true, true); + Factory.Condition().Factory().Protection(GetName(), player, player, duration, 2, false, true, true); //Inform UtilPlayer.message(player, F.main(GetClassType().name(), "You used " + F.skill(GetName(level)) + ".")); diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/GlacialBlade.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/GlacialBlade.java index 5d5f5b566..997275e66 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/GlacialBlade.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/GlacialBlade.java @@ -91,7 +91,7 @@ public class GlacialBlade extends SkillActive implements IThrown //Damage Factory.Damage().NewDamageEvent(target, data.GetThrower(), null, - DamageCause.CUSTOM, 4, true, true, false, + DamageCause.CUSTOM, 4, false, true, false, UtilEnt.getName(data.GetThrower()), GetName()); } diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/Agility.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/Agility.java index 5095a86e2..b2b72d6ca 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/Agility.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/Agility.java @@ -48,7 +48,7 @@ public class Agility extends SkillActive SetDesc(new String[] { "Sprint with great agility, gaining", - "Speed I for #2#2 seconds. You are", + "Speed I for #2#1 seconds. You are", "immune to damage while sprinting.", "", "Agility ends if you interact." diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/BarbedArrows.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/BarbedArrows.java index 02f0cf104..465df8f06 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/BarbedArrows.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/BarbedArrows.java @@ -22,8 +22,7 @@ public class BarbedArrows extends Skill { "Your arrows are barbed, and give", "opponents Slow 1 for #2#1 seconds.", - "If opponent is sprinting, they", - "receive Slow 3 instead.", + "Will cancel sprint on opponents.", "", "Duration scales with arrow velocity." }); @@ -54,16 +53,13 @@ public class BarbedArrows extends Skill Player damageePlayer = event.GetDamageePlayer(); //Action - int str = 0; - if (damageePlayer != null) - if (damageePlayer.isSprinting()) - str = 3; + damageePlayer.setSprinting(false); //Damage event.AddMod(damager.getName(), GetName(), 0, false); //Condition - Factory.Condition().Factory().Slow(GetName(), damagee, damager, (projectile.getVelocity().length() / 3) * (2 + level), str, false, true, true, true); + Factory.Condition().Factory().Slow(GetName(), damagee, damager, (projectile.getVelocity().length() / 3) * (2 + level), 0, false, true, true, true); } @Override diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/HeavyArrows.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/HeavyArrows.java index 8539744db..6f1a142cd 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/HeavyArrows.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/HeavyArrows.java @@ -63,7 +63,7 @@ public class HeavyArrows extends Skill { double vel = (event.getProjectile().getVelocity().length() * (0.1 + 0.1 * level)); UtilAction.velocity(player, player.getLocation().getDirection().multiply(-1), vel, - false, 0, 0.2, 0.8, true); + false, 0, 0.2, 0.6, true); } //Decrease Speed diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/Overcharge.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/Overcharge.java index 8439cd2a7..b62bc68b4 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/Overcharge.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/Overcharge.java @@ -40,14 +40,14 @@ public class Overcharge extends SkillChargeBow "", GetChargeString(), "", - "Deals up to #1#1 bonus damage." + "Deals up to #0#1 bonus damage." }); } @Override public void DoSkillCustom(Player player, float charge, Arrow arrow) { - double damage = charge * (1 + 1 * getLevel(player)); + double damage = charge * (getLevel(player)); _arrows.put(arrow, damage); } diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/VitalitySpores.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/VitalitySpores.java index 6b1f68837..de0b74f6a 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/VitalitySpores.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/VitalitySpores.java @@ -22,9 +22,9 @@ public class VitalitySpores extends Skill SetDesc(new String[] { - "After #12#-2 seconds of not taking damage,", + "After #14#-2 seconds of not taking damage,", "forest spores surround you, giving", - "you Regeneration 1 for #3#2 seconds.", + "you Regeneration 1 for #2#2 seconds.", "", "This remains until you take damage." }); diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/WolfsPounce.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/WolfsPounce.java index 74162dfbc..aa14851c7 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/WolfsPounce.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/WolfsPounce.java @@ -50,7 +50,7 @@ public class WolfsPounce extends SkillChargeSword "", "Colliding with another player", "mid-air deals #1#1 damage and", - "Slow 2 for #2.5#0.5 seconds." + "Slow 2 for 3 seconds." }); } @@ -129,7 +129,7 @@ public class WolfsPounce extends SkillChargeSword damager.getName(), GetName()); //Conditions - Factory.Condition().Factory().Slow(GetName(), damagee, damagee, 2.5 + 0.5 * level, 1, false, true, true, true); + Factory.Condition().Factory().Slow(GetName(), damagee, damagee, 3, 1, false, true, true, true); //Inform UtilPlayer.message(damager, F.main(GetClassType().name(), "You hit " + F.name(UtilEnt.getName(damagee)) + " with " + F.skill(GetName(level)) + ".")); diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/SkillFactory.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/SkillFactory.java index beac334b8..1376af489 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/SkillFactory.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/SkillFactory.java @@ -183,7 +183,7 @@ public class SkillFactory extends MiniPlugin implements ISkillFactory AddSkill(new Leap(this, "Leap", ClassType.Assassin, SkillType.Axe, 1, 4, 40, -2, - 11500, -1500, true, + 10500, -1500, true, new Material[] {Material.IRON_AXE, Material.GOLD_AXE, Material.DIAMOND_AXE}, new Action[] {Action.RIGHT_CLICK_AIR, Action.RIGHT_CLICK_BLOCK})); @@ -442,7 +442,7 @@ public class SkillFactory extends MiniPlugin implements ISkillFactory AddSkill(new WolfsFury(this, "Wolfs Fury", ClassType.Ranger, SkillType.Axe, 1, 4, 0, 0, - 20000, 2000, true, + 18000, 2000, true, new Material[] {Material.IRON_AXE, Material.GOLD_AXE, Material.DIAMOND_AXE}, new Action[] {Action.RIGHT_CLICK_AIR, Action.RIGHT_CLICK_BLOCK})); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/Domination.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/Domination.java index 394278c61..4924c912f 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/Domination.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/Domination.java @@ -4,6 +4,8 @@ import java.util.ArrayList; import java.util.HashMap; + + import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.entity.Entity; @@ -13,9 +15,11 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.entity.ItemDespawnEvent; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryType; +import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerPickupItemEvent; import mineplex.core.common.util.C; +import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilPlayer; import mineplex.core.elo.EloPlayer; import mineplex.core.elo.EloTeam; @@ -402,4 +406,11 @@ public class Domination extends TeamGame GetStats(damagee).DamageTaken += event.GetDamage(); } } + + @EventHandler(priority = EventPriority.HIGHEST) + public void UsableInteract(PlayerInteractEvent event) + { + if (UtilBlock.usable(event.getClickedBlock())) + event.setCancelled(true); + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/TeamDeathmatch.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/TeamDeathmatch.java index 7a1dc54c7..3efce21ac 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/TeamDeathmatch.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/TeamDeathmatch.java @@ -9,11 +9,14 @@ import org.bukkit.Sound; import org.bukkit.entity.Entity; 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.PlayerInteractEvent; import org.bukkit.scoreboard.Objective; import mineplex.core.common.util.C; import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; @@ -365,4 +368,11 @@ public class TeamDeathmatch extends TeamGame //End SetState(GameState.End); } + + @EventHandler(priority = EventPriority.HIGHEST) + public void UsableInteract(PlayerInteractEvent event) + { + if (UtilBlock.usable(event.getClickedBlock())) + event.setCancelled(true); + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/uhc/UHC.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/uhc/UHC.java index 4ee8022f5..63b21889e 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/uhc/UHC.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/uhc/UHC.java @@ -295,7 +295,7 @@ public class UHC extends TeamGame continue; - UtilParticle.PlayParticle(player, ParticleType.EXPLODE, block.getLocation(), (float)Math.random(), (float)Math.random(), (float)Math.random(), 0, 1); + UtilParticle.PlayParticle(player, ParticleType.LARGE_EXPLODE, block.getLocation(), (float)Math.random(), (float)Math.random(), (float)Math.random(), 0, 1); player.playSound(block.getLocation(), Sound.FIZZ, 0.1f, 0.1f); }