Damn, I thought I'd pulled from origin. Oh well, fixing pull merge.

This commit is contained in:
taoneill 2011-07-17 19:23:03 -04:00
commit b205feb937
23 changed files with 764 additions and 696 deletions

View File

@ -31,25 +31,26 @@ import com.tommytony.war.mappers.*;
import com.tommytony.war.utils.*;
/**
* Main class of War
*
* @author tommytony
*
* @author tommytony, Tim Düsterhus
* @package bukkit.tommytony.war
*/
public class War extends JavaPlugin {
public static PermissionHandler permissionHandler;
public static War war;
public War() {
super();
}
private WarPlayerListener playerListener = new WarPlayerListener(this);
private WarEntityListener entityListener = new WarEntityListener(this);
private WarBlockListener blockListener = new WarBlockListener(this);
// general
private WarPlayerListener playerListener = new WarPlayerListener();
private WarEntityListener entityListener = new WarEntityListener();
private WarBlockListener blockListener = new WarBlockListener();
private Logger log;
private PluginDescriptionFile desc = null;
private boolean loaded = false;
// Zones and hub
private List<Warzone> warzones;
private WarHub warHub;
private final List<Warzone> incompleteZones = new ArrayList<Warzone>();
private final List<String> zoneMakerNames = new ArrayList<String>();
private final List<String> commandWhitelist = new ArrayList<String>();
@ -59,7 +60,7 @@ public class War extends JavaPlugin {
// Default warzone settings
private final HashMap<Integer, ItemStack> defaultLoadout = new HashMap<Integer, ItemStack>();
private int defaultLifepool = 21;
private int defaultLifepool = 7;
private boolean defaultFriendlyFire = false;
private boolean defaultAutoAssignOnly = false;
private int defaultTeamCap = 7;
@ -80,12 +81,66 @@ public class War extends JavaPlugin {
private boolean disablePvpMessage = false;
private boolean buildInZonesOnly = false;
private WarHub warHub;
public War() {
super();
War.war = this;
}
public void onEnable() {
this.loadWar();
}
public void onDisable() {
this.unloadWar();
}
/**
* Initializes war
*/
public void loadWar() {
this.setLoaded(true);
this.warzones = new ArrayList<Warzone>();
this.desc = this.getDescription();
this.log = this.getServer().getLogger();
this.setupPermissions();
// Register hooks
PluginManager pm = this.getServer().getPluginManager();
pm.registerEvent(Event.Type.PLAYER_QUIT, this.playerListener, Priority.Normal, this);
pm.registerEvent(Event.Type.PLAYER_KICK, this.playerListener, Priority.Normal, this);
pm.registerEvent(Event.Type.PLAYER_MOVE, this.playerListener, Priority.Normal, this);
pm.registerEvent(Event.Type.PLAYER_PICKUP_ITEM, this.playerListener, Priority.Normal, this);
pm.registerEvent(Event.Type.INVENTORY_OPEN, this.playerListener, Priority.Normal, this);
pm.registerEvent(Event.Type.PLAYER_DROP_ITEM, this.playerListener, Priority.Normal, this);
pm.registerEvent(Event.Type.PLAYER_COMMAND_PREPROCESS, this.playerListener, Priority.Normal, this);
pm.registerEvent(Event.Type.PLAYER_INTERACT, this.playerListener, Priority.Normal, this);
pm.registerEvent(Event.Type.ENTITY_EXPLODE, this.entityListener, Priority.Normal, this);
pm.registerEvent(Event.Type.ENTITY_DAMAGE, this.entityListener, Priority.High, this);
pm.registerEvent(Event.Type.ENTITY_COMBUST, this.entityListener, Priority.Normal, this);
pm.registerEvent(Event.Type.CREATURE_SPAWN, this.entityListener, Priority.Normal, this);
pm.registerEvent(Event.Type.ENTITY_REGAIN_HEALTH, this.entityListener, Priority.Normal, this);
pm.registerEvent(Event.Type.BLOCK_PLACE, this.blockListener, Priority.Normal, this);
pm.registerEvent(Event.Type.BLOCK_BREAK, this.blockListener, Priority.Normal, this);
// Load files from disk or create them (using these defaults)
this.getDefaultLoadout().put(0, new ItemStack(Material.STONE_SWORD, 1, (byte) 8));
this.getDefaultLoadout().put(1, new ItemStack(Material.BOW, 1, (byte) 8));
this.getDefaultLoadout().put(2, new ItemStack(Material.ARROW, 7));
this.getDefaultLoadout().put(3, new ItemStack(Material.IRON_PICKAXE, 1, (byte) 8));
this.getDefaultLoadout().put(4, new ItemStack(Material.STONE_SPADE, 1, (byte) 8));
this.getDefaultReward().put(0, new ItemStack(Material.CAKE, 1));
WarMapper.load();
this.log("War v" + this.desc.getVersion() + " is on.", Level.INFO);
}
/**
* Cleans up war
*/
public void unloadWar() {
this.setLoaded(false);
for (Warzone warzone : this.warzones) {
@ -97,58 +152,26 @@ public class War extends JavaPlugin {
this.warHub.getVolume().resetBlocks();
}
this.logInfo("Done. War v" + this.desc.getVersion() + " is off.");
this.log("Done. War v" + this.desc.getVersion() + " is off.", Level.INFO);
}
public void onEnable() {
this.loadWar();
}
public void loadWar() {
this.setLoaded(true);
this.warzones = new ArrayList<Warzone>();
this.desc = this.getDescription();
this.log = this.getServer().getLogger();
this.setupPermissions();
// Register hooks
PluginManager pm = this.getServer().getPluginManager();
pm.registerEvent(Event.Type.PLAYER_QUIT, this.playerListener, Priority.Normal, this);
pm.registerEvent(Event.Type.PLAYER_KICK, this.playerListener, Priority.Normal, this);
pm.registerEvent(Event.Type.PLAYER_MOVE, this.playerListener, Priority.Normal, this);
pm.registerEvent(Event.Type.PLAYER_PICKUP_ITEM, this.playerListener, Priority.Normal, this);
pm.registerEvent(Event.Type.INVENTORY_OPEN, this.playerListener, Priority.Normal, this);
pm.registerEvent(Event.Type.PLAYER_DROP_ITEM, this.playerListener, Priority.Normal, this);
pm.registerEvent(Event.Type.PLAYER_COMMAND_PREPROCESS, this.playerListener, Priority.Normal, this);
pm.registerEvent(Event.Type.PLAYER_INTERACT, this.playerListener, Priority.Normal, this);
pm.registerEvent(Event.Type.ENTITY_EXPLODE, this.entityListener, Priority.Normal, this);
// pm.registerEvent(Event.Type.ENTITY_DEATH, entityListener, Priority.Normal, this);
pm.registerEvent(Event.Type.ENTITY_DAMAGE, this.entityListener, Priority.High, this);
pm.registerEvent(Event.Type.ENTITY_COMBUST, this.entityListener, Priority.Normal, this);
pm.registerEvent(Event.Type.CREATURE_SPAWN, this.entityListener, Priority.Normal, this);
pm.registerEvent(Event.Type.ENTITY_REGAIN_HEALTH, this.entityListener, Priority.Normal, this);
pm.registerEvent(Event.Type.BLOCK_PLACE, this.blockListener, Priority.Normal, this);
pm.registerEvent(Event.Type.BLOCK_BREAK, this.blockListener, Priority.Normal, this);
// pm.registerEvent(Event.Type.CHUNK_UNLOADED, blockListener, Priority.Normal, this);
// Load files from disk or create them (using these defaults)
this.defaultLoadout.put(0, new ItemStack(Material.STONE_SWORD, 1, (byte) 8));
this.defaultLoadout.put(1, new ItemStack(Material.BOW, 1, (byte) 8));
this.defaultLoadout.put(2, new ItemStack(Material.ARROW, 7));
this.defaultLoadout.put(3, new ItemStack(Material.IRON_PICKAXE, 1, (byte) 8));
this.defaultLoadout.put(4, new ItemStack(Material.STONE_SPADE, 1, (byte) 8));
this.defaultLifepool = 7;
this.defaultFriendlyFire = false;
this.defaultAutoAssignOnly = false;
this.getDefaultReward().put(0, new ItemStack(Material.CAKE, 1));
WarMapper.load(this);
this.logInfo("War v" + this.desc.getVersion() + " is on.");
/**
* Initializes Permissions
*/
public void setupPermissions() {
Plugin permissionsPlugin = this.getServer().getPluginManager().getPlugin("Permissions");
if (War.permissionHandler == null) {
if (permissionsPlugin != null) {
War.permissionHandler = ((Permissions) permissionsPlugin).getHandler();
} else {
this.log("Permissions system not enabled. Defaulting to regular War config.", Level.INFO);
}
}
}
/**
* Handles war commands
*/
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
if (sender instanceof Player) {
Player player = (Player) sender;
@ -237,9 +260,14 @@ public class War extends JavaPlugin {
return true;
}
private void inventoryToLoadout(Player player, HashMap<Integer, ItemStack> loadout) {
/**
* Converts the player-inventory to a loadout hashmap
*
* @param PlayerInventory inv inventory to get the items from
* @param HashMap<Integer, ItemStack> loadout the hashmap to save to
*/
private void inventoryToLoadout(PlayerInventory inv, HashMap<Integer, ItemStack> loadout) {
loadout.clear();
PlayerInventory inv = player.getInventory();
int i = 0;
for (ItemStack stack : inv.getContents()) {
if (stack != null && stack.getType() != Material.AIR) {
@ -259,6 +287,16 @@ public class War extends JavaPlugin {
}
}
/**
* Converts the player-inventory to a loadout hashmap
*
* @param Player player player to get the inventory to get the items from
* @param HashMap<Integer, ItemStack> loadout the hashmap to save to
*/
private void inventoryToLoadout(Player player, HashMap<Integer, ItemStack> loadout) {
this.inventoryToLoadout(player.getInventory(), loadout);
}
public void performZonemakerAsPlayer(Player player) {
boolean wasImpersonating = false;
for (String name : this.getZoneMakersImpersonatingPlayers()) {
@ -270,7 +308,7 @@ public class War extends JavaPlugin {
this.getZoneMakersImpersonatingPlayers().remove(player.getName());
this.msg(player, "You are back as a zone maker.");
}
WarMapper.save(this);
WarMapper.save();
}
public void performZonemakerAsZonemaker(Player player, String[] arguments) {
@ -304,7 +342,7 @@ public class War extends JavaPlugin {
this.msg(player, "You are now impersonating a regular player. Type /zonemaker again to toggle back to war maker mode.");
}
WarMapper.save(this);
WarMapper.save();
}
}
@ -313,7 +351,7 @@ public class War extends JavaPlugin {
this.badMsg(player, "Usage: /setwarconfig pvpinzonesonly:on lifepool:8 teamsize:5 maxscore:7 autoassign:on outline:off ff:on " + "Changes the server defaults for new warzones. Please give at leaset one named parameter.");
} else {
if (this.updateFromNamedParams(player, arguments)) {
WarMapper.save(this);
WarMapper.save();
this.msg(player, "War config saved.");
} else {
this.badMsg(player, "Failed to read named parameters.");
@ -338,7 +376,7 @@ public class War extends JavaPlugin {
} else {
this.badMsg(player, "No War hub to delete.");
}
WarMapper.save(this);
WarMapper.save();
}
public void performSetWarhub(Player player) {
@ -350,7 +388,7 @@ public class War extends JavaPlugin {
this.warHub.initialize();
this.msg(player, "War hub moved.");
} else {
this.warHub = new WarHub(this, player.getLocation());
this.warHub = new WarHub(player.getLocation());
this.warHub.initialize();
for (Warzone zone : this.warzones) {
if (zone.getLobby() != null) {
@ -360,7 +398,7 @@ public class War extends JavaPlugin {
}
this.msg(player, "War hub created.");
}
WarMapper.save(this);
WarMapper.save();
} else {
this.badMsg(player, "No warzones yet.");
}
@ -382,7 +420,7 @@ public class War extends JavaPlugin {
if (monument != null) {
monument.getVolume().resetBlocks();
warzone.getMonuments().remove(monument);
WarzoneMapper.save(this, warzone, false);
WarzoneMapper.save(warzone, false);
this.msg(player, "Monument " + monument.getName() + " removed.");
} else {
this.badMsg(player, "No such monument.");
@ -404,11 +442,11 @@ public class War extends JavaPlugin {
this.msg(player, "Monument " + monument.getName() + " was moved.");
} else {
// create a new monument
Monument monument = new Monument(arguments[0], this, warzone, player.getLocation());
Monument monument = new Monument(arguments[0], warzone, player.getLocation());
warzone.getMonuments().add(monument);
this.msg(player, "Monument " + monument.getName() + " created.");
}
WarzoneMapper.save(this, warzone, false);
WarzoneMapper.save(warzone, false);
}
}
@ -437,7 +475,7 @@ public class War extends JavaPlugin {
// warzone.addZoneOutline(warzone.getLobby().getWall());
warzone.getLobby().initialize();
}
WarzoneMapper.save(this, warzone, false);
WarzoneMapper.save(warzone, false);
this.msg(player, "Team " + team.getName() + " removed.");
} else {
this.badMsg(player, "No such team.");
@ -461,7 +499,7 @@ public class War extends JavaPlugin {
Location playerLoc = player.getLocation();
player.teleport(new Location(playerLoc.getWorld(), playerLoc.getBlockX() + 1, playerLoc.getBlockY(), playerLoc.getBlockZ()));
this.msg(player, "Team " + team.getName() + " flag added here.");
WarzoneMapper.save(this, warzone, false);
WarzoneMapper.save(warzone, false);
} else {
// relocate flag
team.getFlagVolume().resetBlocks();
@ -469,7 +507,7 @@ public class War extends JavaPlugin {
Location playerLoc = player.getLocation();
player.teleport(new Location(playerLoc.getWorld(), playerLoc.getBlockX() + 1, playerLoc.getBlockY(), playerLoc.getBlockZ() + 1));
this.msg(player, "Team " + team.getName() + " flag moved.");
WarzoneMapper.save(this, warzone, false);
WarzoneMapper.save(warzone, false);
}
}
}
@ -487,7 +525,7 @@ public class War extends JavaPlugin {
this.msg(player, "Team " + existingTeam.getName() + " spawn relocated.");
} else {
// new team (use default TeamKind name for now)
Team newTeam = new Team(teamKind.getDefaultName(), teamKind, player.getLocation(), this, warzone);
Team newTeam = new Team(teamKind.getDefaultName(), teamKind, player.getLocation(), warzone);
newTeam.setRemainingLives(warzone.getLifePool());
warzone.getTeams().add(newTeam);
if (warzone.getLobby() != null) {
@ -500,7 +538,7 @@ public class War extends JavaPlugin {
this.msg(player, "Team " + newTeam.getName() + " created with spawn here.");
}
WarzoneMapper.save(this, warzone, false);
WarzoneMapper.save(warzone, false);
}
}
@ -551,8 +589,8 @@ public class War extends JavaPlugin {
}
warzone.getVolume().resetBlocks();
this.getWarzones().remove(warzone);
WarMapper.save(this);
WarzoneMapper.delete(this, warzone.getName());
WarMapper.save();
WarzoneMapper.delete(warzone.getName());
if (this.warHub != null) { // warhub has to change
this.warHub.getVolume().resetBlocks();
this.warHub.initialize();
@ -606,7 +644,7 @@ public class War extends JavaPlugin {
}
if (this.updateZoneFromNamedParams(warzone, player, arguments)) {
this.msg(player, "Saving config and resetting warzone " + warzone.getName() + ".");
WarzoneMapper.save(this, warzone, false);
WarzoneMapper.save(warzone, false);
warzone.getVolume().resetBlocks();
if (lobby != null) {
lobby.getVolume().resetBlocks();
@ -640,7 +678,7 @@ public class War extends JavaPlugin {
if (arguments.length > 0) {
// changed settings: must reinitialize with new settings
this.updateZoneFromNamedParams(warzone, player, arguments);
WarzoneMapper.save(this, warzone, true);
WarzoneMapper.save(warzone, true);
warzone.getVolume().resetBlocks();
if (lobby != null) {
lobby.getVolume().resetBlocks();
@ -697,7 +735,7 @@ public class War extends JavaPlugin {
this.msg(player, "Warzone lobby moved to " + wallStr + " side of zone.");
} else {
// new lobby
lobby = new ZoneLobby(this, warzone, wall);
lobby = new ZoneLobby(warzone, wall);
warzone.setLobby(lobby);
lobby.initialize();
if (this.warHub != null) { // warhub has to change
@ -706,7 +744,7 @@ public class War extends JavaPlugin {
}
this.msg(player, "Warzone lobby created on " + wallStr + "side of zone.");
}
WarzoneMapper.save(this, warzone, false);
WarzoneMapper.save(warzone, false);
} else {
// Not in a warzone: set the lobby position to where the player is standing
Warzone warzone = this.matchWarzone(arguments[0]);
@ -723,7 +761,7 @@ public class War extends JavaPlugin {
this.msg(player, "Warzone lobby moved to your location.");
} else {
// new lobby
lobby = new ZoneLobby(this, warzone, player.getLocation());
lobby = new ZoneLobby(warzone, player.getLocation());
warzone.setLobby(lobby);
lobby.initialize();
if (this.warHub != null) { // warhub has to change
@ -732,7 +770,7 @@ public class War extends JavaPlugin {
}
this.msg(player, "Warzone lobby moved to your location.");
}
WarzoneMapper.save(this, warzone, false);
WarzoneMapper.save(warzone, false);
}
}
}
@ -746,7 +784,7 @@ public class War extends JavaPlugin {
this.badMsg(player, "Usage: =<Classic mode>= /setzone <warzone-name> <'northwest'/'southeast'/'nw'/'se'> (NW defaults to top block, SE to bottom). " + "=<Wand Cuboid mode>= /setzone <warzone-name> wand (gives you a wooden sword to right and left click, drop to disable). " + "=<Wandless Cuboid mode>= /setzone <warzone-name> <'corner1'/'corner2'/'c1'/'c2'/'pos1'/'pos2'> (block where you're standing). " + "Set one corner, then the next. Defines the outline of the warzone, which will be reset at the start of every battle. " + "Saves the zone blocks if the outline is valid.");
}
} else {
ZoneSetter setter = new ZoneSetter(this, player, arguments[0]);
ZoneSetter setter = new ZoneSetter(player, arguments[0]);
if (arguments[1].equals("northwest") || arguments[1].equals("nw")) {
setter.placeNorthwest();
} else if (arguments[1].equals("southeast") || arguments[1].equals("se")) {
@ -1010,10 +1048,7 @@ public class War extends JavaPlugin {
String onOff = namedParams.get("resetonunload");
warzone.setResetOnUnload(onOff.equals("on") || onOff.equals("true"));
}
// if (namedParams.containsKey("dropLootOnDeath")){
// String onOff = namedParams.get("dropLootOnDeath");
// warzone.setDropLootOnDeath(onOff.equals("on") || onOff.equals("true"));
// }
return true;
} catch (Exception e) {
return false;
@ -1107,10 +1142,7 @@ public class War extends JavaPlugin {
// String rewardType = namedParams.get("reward");
this.setZoneRallyPoint(namedParams.get("rallypoint"), player);
}
// if (namedParams.containsKey("dropLootOnDeath")){
// String onOff = namedParams.get("dropLootOnDeath");
// setDefaultDropLootOnDeath(onOff.equals("on") || onOff.equals("true"));
// }
return true;
} catch (Exception e) {
return false;
@ -1123,7 +1155,7 @@ public class War extends JavaPlugin {
this.badMsg(player, "Can't set rally point. No such warzone.");
} else {
zone.setRallyPoint(player.getLocation());
WarzoneMapper.save(this, zone, false);
WarzoneMapper.save(zone, false);
}
}
@ -1199,6 +1231,13 @@ public class War extends JavaPlugin {
ChatFixUtil.sendMessage(player, out);
}
/**
* Colors the teams in messages
*
* @param String str message-string
* @param String msgColor current message-color
* @return String Message with colored teams
*/
private String colorTeams(String str, ChatColor msgColor) {
for (TeamKind kind : TeamKinds.getTeamkinds()) {
str = str.replaceAll(" " + kind.getDefaultName(), " " + kind.getColor() + kind.getDefaultName() + msgColor);
@ -1206,12 +1245,36 @@ public class War extends JavaPlugin {
return str;
}
/**
* Sends a message of Level Info to the logger
*
* @param String str message to send
* @deprecated Use War.log() now
*/
@Deprecated
public void logInfo(String str) {
this.getLogger().log(Level.INFO, "War> " + str);
this.log(str, Level.INFO);
}
/**
* Sends a message of Level Warning to the logger
*
* @param String str message to send
* @deprecated Use War.log() now
*/
@Deprecated
public void logWarn(String str) {
this.getLogger().log(Level.WARNING, "War> " + str);
this.log(str, Level.WARNING);
}
/**
* Logs a specified message with a specified level
*
* @param String str message to log
* @param Level lvl level to use
*/
public void log(String str, Level lvl) {
this.getLogger().log(lvl, "War> " + str);
}
// the only way to find a zone that has only one corner
@ -1472,17 +1535,6 @@ public class War extends JavaPlugin {
return this.zoneMakersImpersonatingPlayers;
}
public void setupPermissions() {
Plugin permissionsPlugin = this.getServer().getPluginManager().getPlugin("Permissions");
if (War.permissionHandler == null) {
if (permissionsPlugin != null) {
War.permissionHandler = ((Permissions) permissionsPlugin).getHandler();
} else {
this.logInfo("Permissions system not enabled. Defaulting to regular War config.");
}
}
}
public void setDefaultBlockHeads(boolean defaultBlockHeads) {
this.defaultBlockHeads = defaultBlockHeads;
}
@ -1590,5 +1642,4 @@ public class War extends JavaPlugin {
public boolean isDefaultResetOnUnload() {
return this.defaultResetOnUnload;
}
}

View File

@ -18,26 +18,20 @@ import com.tommytony.war.Team;
import com.tommytony.war.Warzone;
/**
*
*
* @author tommytony
*
*
*/
public class WarBlockListener extends BlockListener {
private War war;
public WarBlockListener(War war) {
this.war = war;
}
@Override
public void onBlockPlace(BlockPlaceEvent event) {
if (this.war.isLoaded()) {
if (War.war.isLoaded()) {
Player player = event.getPlayer();
Block block = event.getBlock();
if (player != null && block != null) {
Team team = this.war.getPlayerTeam(player.getName());
Warzone zone = this.war.warzone(player.getLocation());
Team team = War.war.getPlayerTeam(player.getName());
Warzone zone = War.war.warzone(player.getLocation());
if (team != null && block != null && zone != null && zone.isMonumentCenterBlock(block) && block.getType() == team.getKind().getMaterial() && block.getData() == team.getKind().getData()) {
Monument monument = zone.getMonumentFromCenterBlock(block);
if (monument != null && !monument.hasOwner()) {
@ -49,49 +43,49 @@ public class WarBlockListener extends BlockListener {
event.setCancelled(false);
return; // important otherwise cancelled down a few line by isImportantblock
} else {
this.war.badMsg(player, "You can't capture a monument without a block of your team's material. Get one from your team spawn.");
War.war.badMsg(player, "You can't capture a monument without a block of your team's material. Get one from your team spawn.");
event.setCancelled(true);
return;
}
}
boolean isZoneMaker = this.war.isZoneMaker(player);
boolean isZoneMaker = War.war.isZoneMaker(player);
if (zone != null && zone.isImportantBlock(block) && (!isZoneMaker || (isZoneMaker && team != null))) {
this.war.badMsg(player, "Can't build here.");
War.war.badMsg(player, "Can't build here.");
event.setCancelled(true);
return;
}
// protect warzone lobbies
for (Warzone wz : this.war.getWarzones()) {
for (Warzone wz : War.war.getWarzones()) {
if (wz.getLobby() != null && wz.getLobby().getVolume() != null && wz.getLobby().getVolume().contains(block)) {
this.war.badMsg(player, "Can't build here.");
War.war.badMsg(player, "Can't build here.");
event.setCancelled(true);
return;
}
}
// protect the hub
if (this.war.getWarHub() != null && this.war.getWarHub().getVolume().contains(block)) {
this.war.badMsg(player, "Can't build here.");
if (War.war.getWarHub() != null && War.war.getWarHub().getVolume().contains(block)) {
War.war.badMsg(player, "Can't build here.");
event.setCancelled(true);
return;
}
// buildInZonesOnly
if (zone == null && this.war.isBuildInZonesOnly() && !this.war.canBuildOutsideZone(player)) {
this.war.badMsg(player, "You can only build inside warzones. Ask for the 'war.build' permission to build outside.");
if (zone == null && War.war.isBuildInZonesOnly() && !War.war.canBuildOutsideZone(player)) {
War.war.badMsg(player, "You can only build inside warzones. Ask for the 'war.build' permission to build outside.");
event.setCancelled(true);
return;
}
// can't place a block of your team's color
if (team != null && block.getType() == team.getKind().getMaterial() && block.getData() == team.getKind().getData()) {
this.war.badMsg(player, "You can only use your team's blocks to capture monuments.");
War.war.badMsg(player, "You can only use your team's blocks to capture monuments.");
event.setCancelled(true);
return;
}
if (team != null && zone != null && zone.isFlagThief(player.getName())) {
// a flag thief can't drop his flag
this.war.badMsg(player, "Can't drop the flag. What are you doing? Run!");
War.war.badMsg(player, "Can't drop the flag. What are you doing? Run!");
event.setCancelled(true);
}
@ -99,7 +93,7 @@ public class WarBlockListener extends BlockListener {
// unbreakableZoneBlocks
if (zone != null && zone.isUnbreakableZoneBlocks() && (!isZoneMaker || (isZoneMaker && team != null))) {
// if the zone is unbreakable, no one but zone makers can break blocks (even then, zone makers in a team can't break blocks)
this.war.badMsg(player, "The blocks in this zone are unbreakable - this also means you can't build!");
War.war.badMsg(player, "The blocks in this zone are unbreakable - this also means you can't build!");
event.setCancelled(true);
return;
}
@ -109,7 +103,7 @@ public class WarBlockListener extends BlockListener {
@Override
public void onBlockBreak(BlockBreakEvent event) {
if (this.war.isLoaded()) {
if (War.war.isLoaded()) {
Player player = event.getPlayer();
Block block = event.getBlock();
if (player != null && block != null) {
@ -119,13 +113,13 @@ public class WarBlockListener extends BlockListener {
}
private void handleBreakOrDamage(Player player, Block block, Cancellable event) {
Warzone warzone = this.war.warzone(player.getLocation());
Team team = this.war.getPlayerTeam(player.getName());
boolean isZoneMaker = this.war.isZoneMaker(player);
Warzone warzone = War.war.warzone(player.getLocation());
Team team = War.war.getPlayerTeam(player.getName());
boolean isZoneMaker = War.war.isZoneMaker(player);
if (warzone != null && team == null && !isZoneMaker) {
// can't actually destroy blocks in a warzone if not part of a team
this.war.badMsg(player, "Can't destroy part of a warzone if you're not in a team.");
War.war.badMsg(player, "Can't destroy part of a warzone if you're not in a team.");
event.setCancelled(true);
return;
} else if (team != null && block != null && warzone != null && warzone.isMonumentCenterBlock(block)) {
@ -145,7 +139,7 @@ public class WarBlockListener extends BlockListener {
if (team != null && team.getSpawnVolume().contains(block)) {
ItemStack teamKindBlock = new ItemStack(team.getKind().getMaterial(), team.getKind().getData());
if (player.getInventory().contains(teamKindBlock)) {
this.war.badMsg(player, "You already have a " + team.getName() + " block.");
War.war.badMsg(player, "You already have a " + team.getName() + " block.");
event.setCancelled(true);
return;
} else {
@ -156,7 +150,7 @@ public class WarBlockListener extends BlockListener {
} else if (team != null && warzone.isEnemyTeamFlagBlock(team, block)) {
if (warzone.isFlagThief(player.getName())) {
// detect audacious thieves
this.war.badMsg(player, "You can only steal one flag at a time!");
War.war.badMsg(player, "You can only steal one flag at a time!");
} else {
Team lostFlagTeam = warzone.getTeamForFlagBlock(block);
if (lostFlagTeam.getPlayers().size() != 0) {
@ -174,15 +168,15 @@ public class WarBlockListener extends BlockListener {
+ " from reaching team " + team.getName() + "'s spawn or flag.");
}
}
this.war.msg(player, "You have team " + lostFlagTeam.getName() + "'s flag. Reach your team spawn or flag to capture it!");
War.war.msg(player, "You have team " + lostFlagTeam.getName() + "'s flag. Reach your team spawn or flag to capture it!");
} else {
this.war.msg(player, "You can't steal team " + lostFlagTeam.getName() + "'s flag since no players are on that team.");
War.war.msg(player, "You can't steal team " + lostFlagTeam.getName() + "'s flag since no players are on that team.");
}
}
event.setCancelled(true);
return;
} else if (!warzone.isMonumentCenterBlock(block)) {
this.war.badMsg(player, "Can't destroy this.");
War.war.badMsg(player, "Can't destroy this.");
event.setCancelled(true);
return;
}
@ -190,9 +184,9 @@ public class WarBlockListener extends BlockListener {
// protect warzone lobbies
if (block != null) {
for (Warzone zone : this.war.getWarzones()) {
for (Warzone zone : War.war.getWarzones()) {
if (zone.getLobby() != null && zone.getLobby().getVolume() != null && zone.getLobby().getVolume().contains(block)) {
this.war.badMsg(player, "Can't destroy this.");
War.war.badMsg(player, "Can't destroy this.");
event.setCancelled(true);
return;
}
@ -200,16 +194,16 @@ public class WarBlockListener extends BlockListener {
}
// protect the hub
if (this.war.getWarHub() != null && this.war.getWarHub().getVolume().contains(block)) {
this.war.badMsg(player, "Can't destroy this.");
if (War.war.getWarHub() != null && War.war.getWarHub().getVolume().contains(block)) {
War.war.badMsg(player, "Can't destroy this.");
event.setCancelled(true);
return;
}
// buildInZonesOnly
Warzone blockZone = this.war.warzone(new Location(block.getWorld(), block.getX(), block.getY(), block.getZ()));
if (blockZone == null && this.war.isBuildInZonesOnly() && !this.war.canBuildOutsideZone(player)) {
this.war.badMsg(player, "You can only build inside warzones. Ask for the 'war.build' permission to build outside.");
Warzone blockZone = War.war.warzone(new Location(block.getWorld(), block.getX(), block.getY(), block.getZ()));
if (blockZone == null && War.war.isBuildInZonesOnly() && !War.war.canBuildOutsideZone(player)) {
War.war.badMsg(player, "You can only build inside warzones. Ask for the 'war.build' permission to build outside.");
event.setCancelled(true);
return;
}
@ -217,7 +211,7 @@ public class WarBlockListener extends BlockListener {
// unbreakableZoneBlocks
if (blockZone != null && blockZone.isUnbreakableZoneBlocks() && (!isZoneMaker || (isZoneMaker && team != null))) {
// if the zone is unbreakable, no one but zone makers can break blocks (even then, zone makers in a team can't break blocks
this.war.badMsg(player, "The blocks in this zone are unbreakable!");
War.war.badMsg(player, "The blocks in this zone are unbreakable!");
event.setCancelled(true);
return;
}

View File

@ -1,6 +1,7 @@
package bukkit.tommytony.war;
import java.util.List;
import java.util.logging.Level;
import org.bukkit.ChatColor;
import org.bukkit.Location;
@ -14,7 +15,6 @@ import org.bukkit.event.entity.EntityCombustEvent;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageByProjectileEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityDeathEvent;
import org.bukkit.event.entity.EntityExplodeEvent;
import org.bukkit.event.entity.EntityListener;
import org.bukkit.event.entity.EntityRegainHealthEvent;
@ -24,18 +24,18 @@ import com.tommytony.war.Team;
import com.tommytony.war.Warzone;
/**
*
* @author tommytony
*
* Handles Entity-Events
*
* @author tommytony, Tim Düsterhus
* @package bukkit.tommytony.war
*/
public class WarEntityListener extends EntityListener {
private final War war;
public WarEntityListener(War war) {
this.war = war;
}
/**
* Handles PVP-Damage
*
* @param EntityDamageByEntityEvent event fired event
*/
private void handlerAttackDefend(EntityDamageByEntityEvent event) {
Entity attacker = event.getDamager();
Entity defender = event.getEntity();
@ -44,21 +44,21 @@ public class WarEntityListener extends EntityListener {
// only let adversaries (same warzone, different team) attack each other
Player a = (Player) attacker;
Player d = (Player) defender;
Warzone attackerWarzone = this.war.getPlayerTeamWarzone(a.getName());
Team attackerTeam = this.war.getPlayerTeam(a.getName());
Warzone defenderWarzone = this.war.getPlayerTeamWarzone(d.getName());
Team defenderTeam = this.war.getPlayerTeam(d.getName());
Warzone attackerWarzone = War.war.getPlayerTeamWarzone(a.getName());
Team attackerTeam = War.war.getPlayerTeam(a.getName());
Warzone defenderWarzone = War.war.getPlayerTeamWarzone(d.getName());
Team defenderTeam = War.war.getPlayerTeam(d.getName());
if (attackerTeam != null && defenderTeam != null && attackerTeam != defenderTeam && attackerWarzone == defenderWarzone) {
// Make sure one of the players isn't in the spawn
if (defenderTeam.getSpawnVolume().contains(d.getLocation())) { // attacking person in spawn
if (!defenderWarzone.isFlagThief(d.getName())) { // thiefs can always be attacked
this.war.badMsg(a, "Can't attack a player that's inside his team's spawn.");
War.war.badMsg(a, "Can't attack a player that's inside his team's spawn.");
event.setCancelled(true);
}
} else if (attackerTeam.getSpawnVolume().contains(a.getLocation()) && !attackerTeam.getSpawnVolume().contains(d.getLocation())) {
// only let a player inside spawn attack an enemy player if that player enters the spawn
if (!attackerWarzone.isFlagThief(a.getName())) { // thiefs can always attack
this.war.badMsg(a, "Can't attack a player from inside your spawn.");
War.war.badMsg(a, "Can't attack a player from inside your spawn.");
event.setCancelled(true);
}
}
@ -77,30 +77,30 @@ public class WarEntityListener extends EntityListener {
} else if (attackerTeam != null && defenderTeam != null && attackerTeam == defenderTeam && attackerWarzone == defenderWarzone && attacker.getEntityId() != defender.getEntityId()) {
// same team, but not same person
if (attackerWarzone.getFriendlyFire()) {
this.war.badMsg(a, "Friendly fire is on! Please, don't hurt your teammates."); // if ff is on, let the attack go through
War.war.badMsg(a, "Friendly fire is on! Please, don't hurt your teammates."); // if ff is on, let the attack go through
} else {
this.war.badMsg(a, "Your attack missed! Your target is on your team.");
War.war.badMsg(a, "Your attack missed! Your target is on your team.");
event.setCancelled(true); // ff is off
}
} else if (attackerTeam == null && defenderTeam == null && this.war.canPvpOutsideZones(a)) {
} else if (attackerTeam == null && defenderTeam == null && War.war.canPvpOutsideZones(a)) {
// let normal PVP through is its not turned off or if you have perms
} else if (attackerTeam == null && defenderTeam == null && !this.war.canPvpOutsideZones(a)) {
if (!this.war.isDisablePvpMessage()) {
this.war.badMsg(a, "You need the 'war.pvp' permission to attack players outside warzones.");
} else if (attackerTeam == null && defenderTeam == null && !War.war.canPvpOutsideZones(a)) {
if (!War.war.isDisablePvpMessage()) {
War.war.badMsg(a, "You need the 'war.pvp' permission to attack players outside warzones.");
}
event.setCancelled(true); // global pvp is off
} else {
this.war.badMsg(a, "Your attack missed!");
War.war.badMsg(a, "Your attack missed!");
if (attackerTeam == null) {
this.war.badMsg(a, "You must join a team " + ", then you'll be able to damage people " + "in the other teams in that warzone.");
War.war.badMsg(a, "You must join a team " + ", then you'll be able to damage people " + "in the other teams in that warzone.");
} else if (defenderTeam == null) {
this.war.badMsg(a, "Your target is not in a team.");
War.war.badMsg(a, "Your target is not in a team.");
} else if (attacker != null && defender != null && attacker.getEntityId() == defender.getEntityId()) {
// You just hit yourself, probably with a bouncing arrow
} else if (attackerTeam == defenderTeam) {
this.war.badMsg(a, "Your target is on your team.");
War.war.badMsg(a, "Your target is on your team.");
} else if (attackerWarzone != defenderWarzone) {
this.war.badMsg(a, "Your target is playing in another warzone.");
War.war.badMsg(a, "Your target is playing in another warzone.");
}
event.setCancelled(true); // can't attack someone inside a warzone if you're not in a team
}
@ -109,15 +109,15 @@ public class WarEntityListener extends EntityListener {
// attacked by dispenser arrow most probably
// Detect death, prevent it and respawn the player
Player d = (Player) defender;
Warzone defenderWarzone = this.war.getPlayerTeamWarzone(d.getName());
Warzone defenderWarzone = War.war.getPlayerTeamWarzone(d.getName());
if (d != null && defenderWarzone != null && event.getDamage() >= d.getHealth()) {
String deathMessage = "";
if (event instanceof EntityDamageByProjectileEvent)
deathMessage = "A dispenser killed " + this.war.getPlayerTeam(d.getName()).getKind().getColor() + d.getDisplayName();
deathMessage = "A dispenser killed " + War.war.getPlayerTeam(d.getName()).getKind().getColor() + d.getDisplayName();
else if (event.getDamager() instanceof CraftTNTPrimed)
deathMessage = this.war.getPlayerTeam(d.getName()).getKind().getColor() + d.getDisplayName() + ChatColor.WHITE + " exploded";
else
deathMessage = this.war.getPlayerTeam(d.getName()).getKind().getColor() + d.getDisplayName() + ChatColor.WHITE + " died";
deathMessage = War.war.getPlayerTeam(d.getName()).getKind().getColor() + d.getDisplayName() + ChatColor.WHITE + " exploded";
else
deathMessage = War.war.getPlayerTeam(d.getName()).getKind().getColor() + d.getDisplayName() + ChatColor.WHITE + " died";
for (Team team : defenderWarzone.getTeams()) {
team.teamcast(deathMessage);
}
@ -127,25 +127,28 @@ public class WarEntityListener extends EntityListener {
}
}
/**
* Protects important structures from explosions
*/
@Override
public void onEntityExplode(EntityExplodeEvent event) {
if (this.war.isLoaded()) {
if (War.war.isLoaded()) {
// protect zones elements, lobbies and warhub from creepers
List<Block> explodedBlocks = event.blockList();
for (Block block : explodedBlocks) {
if (this.war.getWarHub() != null && this.war.getWarHub().getVolume().contains(block)) {
if (War.war.getWarHub() != null && War.war.getWarHub().getVolume().contains(block)) {
event.setCancelled(true);
this.war.logInfo("Explosion prevented at warhub.");
War.war.log("Explosion prevented at warhub.", Level.INFO);
return;
}
for (Warzone zone : this.war.getWarzones()) {
for (Warzone zone : War.war.getWarzones()) {
if (zone.isImportantBlock(block)) {
event.setCancelled(true);
this.war.logInfo("Explosion prevented in zone " + zone.getName() + ".");
War.war.log("Explosion prevented in zone " + zone.getName() + ".", Level.INFO);
return;
} else if (zone.getLobby() != null && zone.getLobby().getVolume().contains(block)) {
event.setCancelled(true);
this.war.logInfo("Explosion prevented at zone " + zone.getName() + " lobby.");
War.war.log("Explosion prevented at zone " + zone.getName() + " lobby.", Level.INFO);
return;
}
}
@ -153,24 +156,29 @@ public class WarEntityListener extends EntityListener {
}
}
/**
* Handles damage on Players
*/
@Override
public void onEntityDamage(EntityDamageEvent event) {
if (this.war.isLoaded()) {
if (War.war.isLoaded()) {
Entity entity = event.getEntity();
if (entity instanceof Player && this.war.getPlayerTeamWarzone(((Player) entity).getName()) != null) {
// prevent godmode
if (entity instanceof Player && War.war.getPlayerTeamWarzone(((Player) entity).getName()) != null) {
event.setCancelled(false);
}
// pass pvp-damage
if (event instanceof EntityDamageByEntityEvent || event instanceof EntityDamageByProjectileEvent) {
this.handlerAttackDefend((EntityDamageByEntityEvent) event);
} else {
// Detect death (from , prevent it and respawn the player
// Detect death, prevent it and respawn the player
if (entity instanceof Player) {
Player player = (Player) entity;
Warzone zone = this.war.getPlayerTeamWarzone(player.getName());
Warzone zone = War.war.getPlayerTeamWarzone(player.getName());
if (zone != null && event.getDamage() >= player.getHealth()) {
String deathMessage = "";
deathMessage = this.war.getPlayerTeam(player.getName()).getKind().getColor() + player.getDisplayName() + ChatColor.WHITE + " died";
deathMessage = War.war.getPlayerTeam(player.getName()).getKind().getColor() + player.getDisplayName() + ChatColor.WHITE + " died";
for (Team team : zone.getTeams()) {
team.teamcast(deathMessage);
}
@ -184,11 +192,11 @@ public class WarEntityListener extends EntityListener {
@Override
public void onEntityCombust(EntityCombustEvent event) {
if (this.war.isLoaded()) {
if (War.war.isLoaded()) {
Entity entity = event.getEntity();
if (entity instanceof Player) {
Player player = (Player) entity;
Team team = this.war.getPlayerTeam(player.getName());
Team team = War.war.getPlayerTeam(player.getName());
if (team != null && team.getSpawnVolume().contains(player.getLocation())) {
// smother out the fire that didn't burn out when you respawned
// Stop fire (upcast, watch out!)
@ -202,11 +210,14 @@ public class WarEntityListener extends EntityListener {
}
}
/**
* Prevents creatures from spawning in warzones if no creatures is active
*/
@Override
public void onCreatureSpawn(CreatureSpawnEvent event) {
if (this.war.isLoaded()) {
if (War.war.isLoaded()) {
Location location = event.getLocation();
Warzone zone = this.war.warzone(location);
Warzone zone = War.war.warzone(location);
if (zone != null && zone.isNoCreatures()) {
event.setCancelled(true);
// war.logInfo("Prevented " + event.getMobType().getName() + " from spawning in zone " + zone.getName());
@ -214,14 +225,17 @@ public class WarEntityListener extends EntityListener {
}
}
/**
* Prevents health regaining caused by peaceful mode
*/
@Override
public void onEntityRegainHealth(EntityRegainHealthEvent event) {
if (this.war.isLoaded() && event.getRegainReason() == RegainReason.REGEN) {
if (War.war.isLoaded() && event.getRegainReason() == RegainReason.REGEN) {
Entity entity = event.getEntity();
if (entity instanceof Player) {
Player player = (Player) entity;
Location location = player.getLocation();
Warzone zone = this.war.warzone(location);
Warzone zone = War.war.warzone(location);
if (zone != null) {
event.setCancelled(true);
}

View File

@ -1,7 +1,5 @@
package bukkit.tommytony.war;
import java.util.Random;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Material;
@ -30,48 +28,41 @@ import com.tommytony.war.ZoneLobby;
import com.tommytony.war.ZoneSetter;
/**
*
* @author tommytony
*
* @author tommytony, Tim Düsterhus
* @package bukkit.tommytony.war
*/
public class WarPlayerListener extends PlayerListener {
private final War war;
private Random random = null;
public WarPlayerListener(War war) {
this.war = war;
this.random = new Random();
}
private java.util.Random random = new java.util.Random();
@Override
public void onPlayerQuit(PlayerQuitEvent event) {
if (this.war.isLoaded()) {
if (War.war.isLoaded()) {
Player player = event.getPlayer();
Team team = this.war.getPlayerTeam(player.getName());
Team team = War.war.getPlayerTeam(player.getName());
if (team != null) {
Warzone zone = this.war.getPlayerTeamWarzone(player.getName());
Warzone zone = War.war.getPlayerTeamWarzone(player.getName());
if (zone != null) {
zone.handlePlayerLeave(player, zone.getTeleport(), true);
}
}
if (this.war.isWandBearer(player)) {
this.war.removeWandBearer(player);
if (War.war.isWandBearer(player)) {
War.war.removeWandBearer(player);
}
}
}
@Override
public void onPlayerDropItem(PlayerDropItemEvent event) {
if (this.war.isLoaded()) {
if (War.war.isLoaded()) {
Player player = event.getPlayer();
Team team = this.war.getPlayerTeam(player.getName());
Team team = War.war.getPlayerTeam(player.getName());
if (team != null) {
Warzone zone = this.war.getPlayerTeamWarzone(player.getName());
Warzone zone = War.war.getPlayerTeamWarzone(player.getName());
if (zone.isFlagThief(player.getName())) {
// a flag thief can't drop his flag
this.war.badMsg(player, "Can't drop items while stealing flag. What are you doing?! Run!");
War.war.badMsg(player, "Can't drop items while stealing flag. What are you doing?! Run!");
event.setCancelled(true);
} else {
@ -80,25 +71,25 @@ public class WarPlayerListener extends PlayerListener {
ItemStack itemStack = item.getItemStack();
if (itemStack != null && itemStack.getType() == team.getKind().getMaterial() && itemStack.getData().getData() == team.getKind().getData()) {
// Can't drop your team's kind block
this.war.badMsg(player, "Can't drop " + team.getName() + " block blocks.");
War.war.badMsg(player, "Can't drop " + team.getName() + " block blocks.");
event.setCancelled(true);
return;
}
if (zone.isNearWall(player.getLocation()) && itemStack != null) {
this.war.badMsg(player, "Can't drop items near the zone border!");
War.war.badMsg(player, "Can't drop items near the zone border!");
event.setCancelled(true);
return;
}
}
}
}
if (this.war.isWandBearer(player)) {
if (War.war.isWandBearer(player)) {
Item item = event.getItemDrop();
if (item.getItemStack().getType() == Material.WOOD_SWORD) {
String zoneName = this.war.getWandBearerZone(player);
this.war.removeWandBearer(player);
this.war.msg(player, "You dropped the zone " + zoneName + " wand.");
String zoneName = War.war.getWandBearerZone(player);
War.war.removeWandBearer(player);
War.war.msg(player, "You dropped the zone " + zoneName + " wand.");
}
}
}
@ -106,11 +97,11 @@ public class WarPlayerListener extends PlayerListener {
@Override
public void onPlayerPickupItem(PlayerPickupItemEvent event) {
if (this.war.isLoaded()) {
if (War.war.isLoaded()) {
Player player = event.getPlayer();
Team team = this.war.getPlayerTeam(player.getName());
Team team = War.war.getPlayerTeam(player.getName());
if (team != null) {
Warzone zone = this.war.getPlayerTeamWarzone(player.getName());
Warzone zone = War.war.getPlayerTeamWarzone(player.getName());
if (zone.isFlagThief(player.getName())) {
// a flag thief can't pick up anything
@ -136,10 +127,10 @@ public class WarPlayerListener extends PlayerListener {
@Override
public void onInventoryOpen(PlayerInventoryEvent event) {
if (this.war.isLoaded()) {
if (War.war.isLoaded()) {
Player player = event.getPlayer();
Inventory inventory = event.getInventory();
Team team = this.war.getPlayerTeam(player.getName());
Team team = War.war.getPlayerTeam(player.getName());
if (team != null && inventory instanceof PlayerInventory) {
// make sure the player doesn't have too many precious blocks
// or illegal armor (i.e. armor not found in loadout)
@ -148,7 +139,7 @@ public class WarPlayerListener extends PlayerListener {
if (playerInv.contains(teamKindBlock, 2)) {
playerInv.remove(teamKindBlock);
playerInv.addItem(teamKindBlock);
this.war.badMsg(player, "All that " + team.getName() + " must have been heavy!");
War.war.badMsg(player, "All that " + team.getName() + " must have been heavy!");
}
}
}
@ -156,21 +147,21 @@ public class WarPlayerListener extends PlayerListener {
@Override
public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) {
if (this.war.isLoaded()) {
if (War.war.isLoaded()) {
Player player = event.getPlayer();
Team talkingPlayerTeam = this.war.getPlayerTeam(player.getName());
Team talkingPlayerTeam = War.war.getPlayerTeam(player.getName());
if (talkingPlayerTeam != null) {
String msg = event.getMessage();
String[] split = msg.split(" ");
if (!this.war.isZoneMaker(player) && split.length > 0 && split[0].startsWith("/")) {
if (!War.war.isZoneMaker(player) && split.length > 0 && split[0].startsWith("/")) {
String command = split[0].substring(1);
if (!command.equals("war") && !command.equals("zones") && !command.equals("warzones") && !command.equals("zone") && !command.equals("warzone") && !command.equals("teams") && !command.equals("join") && !command.equals("leave") && !command.equals("team") && !command.equals("warhub") && !command.equals("zonemaker")) {
for (String whiteCommand : this.war.getCommandWhitelist()) {
for (String whiteCommand : War.war.getCommandWhitelist()) {
if (whiteCommand.equals(command)) {
return;
}
}
this.war.badMsg(player, "Can't use anything but War commands (e.g. /leave, /warhub) while you're playing in a warzone.");
War.war.badMsg(player, "Can't use anything but War commands (e.g. /leave, /warhub) while you're playing in a warzone.");
event.setCancelled(true);
}
}
@ -180,19 +171,19 @@ public class WarPlayerListener extends PlayerListener {
@Override
public void onPlayerKick(PlayerKickEvent event) {
if (this.war.isLoaded()) {
if (War.war.isLoaded()) {
Player player = event.getPlayer();
String reason = event.getReason();
if (reason.contains("moved") || reason.contains("too quickly") || reason.contains("Hacking")) {
boolean inWarzone = this.war.inAnyWarzone(player.getLocation());
boolean inLobby = this.war.inAnyWarzone(player.getLocation());
boolean inWarzone = War.war.inAnyWarzone(player.getLocation());
boolean inLobby = War.war.inAnyWarzone(player.getLocation());
boolean inWarhub = false;
if (this.war.getWarHub() != null && this.war.getWarHub().getVolume().contains(player.getLocation())) {
if (War.war.getWarHub() != null && War.war.getWarHub().getVolume().contains(player.getLocation())) {
inWarhub = true;
}
if (inWarzone || inLobby || inWarhub) {
event.setCancelled(true);
this.war.logWarn("Prevented " + player.getName() + " from getting kicked.");
War.war.log("Prevented " + player.getName() + " from getting kicked.", java.util.logging.Level.WARNING);
}
}
}
@ -200,13 +191,13 @@ public class WarPlayerListener extends PlayerListener {
@Override
public void onPlayerInteract(PlayerInteractEvent event) {
if (this.war.isLoaded()) {
if (War.war.isLoaded()) {
Player player = event.getPlayer();
if (player.getItemInHand().getType() == Material.WOOD_SWORD && this.war.isWandBearer(player)) {
String zoneName = this.war.getWandBearerZone(player);
ZoneSetter setter = new ZoneSetter(this.war, player, zoneName);
if (player.getItemInHand().getType() == Material.WOOD_SWORD && War.war.isWandBearer(player)) {
String zoneName = War.war.getWandBearerZone(player);
ZoneSetter setter = new ZoneSetter(player, zoneName);
if (event.getAction() == Action.LEFT_CLICK_AIR || event.getAction() == Action.LEFT_CLICK_AIR) {
this.war.badMsg(player, "Too far.");
War.war.badMsg(player, "Too far.");
} else if (event.getAction() == Action.LEFT_CLICK_BLOCK) {
setter.placeCorner1(event.getClickedBlock());
event.setUseItemInHand(Result.ALLOW);
@ -220,25 +211,25 @@ public class WarPlayerListener extends PlayerListener {
@Override
public void onPlayerMove(PlayerMoveEvent event) {
if (this.war.isLoaded()) {
if (War.war.isLoaded()) {
Player player = event.getPlayer();
Location playerLoc = event.getFrom(); // same as player.getLoc. Don't call again we need same result.
Warzone locZone = null;
ZoneLobby locLobby = null;
locZone = this.war.warzone(playerLoc);
locLobby = this.war.lobby(playerLoc);
boolean canPlay = this.war.canPlayWar(player);
boolean isMaker = this.war.isZoneMaker(player);
locZone = War.war.warzone(playerLoc);
locLobby = War.war.lobby(playerLoc);
boolean canPlay = War.war.canPlayWar(player);
boolean isMaker = War.war.isZoneMaker(player);
// Zone walls
Team currentTeam = this.war.getPlayerTeam(player.getName());
Warzone playerWarzone = this.war.getPlayerTeamWarzone(player.getName()); // this uses the teams, so it asks: get the player's team's warzone
Team currentTeam = War.war.getPlayerTeam(player.getName());
Warzone playerWarzone = War.war.getPlayerTeamWarzone(player.getName()); // this uses the teams, so it asks: get the player's team's warzone
boolean protecting = false;
if (currentTeam != null) {
// Warzone nearbyZone = war.zoneOfZoneWallAtProximity(playerLoc);
protecting = playerWarzone.protectZoneWallAgainstPlayer(player);
} else {
Warzone nearbyZone = this.war.zoneOfZoneWallAtProximity(playerLoc);
Warzone nearbyZone = War.war.zoneOfZoneWallAtProximity(playerLoc);
if (nearbyZone != null && !isMaker) {
protecting = nearbyZone.protectZoneWallAgainstPlayer(player);
}
@ -247,7 +238,7 @@ public class WarPlayerListener extends PlayerListener {
if (!protecting) {
// zone makers still need to delete their walls
// make sure to delete any wall guards as you leave
for (Warzone zone : this.war.getWarzones()) {
for (Warzone zone : War.war.getWarzones()) {
zone.dropZoneWallGuardIfAny(player);
}
}
@ -255,7 +246,7 @@ public class WarPlayerListener extends PlayerListener {
// Warzone lobby gates
if (locLobby != null) {
Warzone zone = locLobby.getZone();
Team oldTeam = this.war.getPlayerTeam(player.getName());
Team oldTeam = War.war.getPlayerTeam(player.getName());
boolean isAutoAssignGate = false;
if (oldTeam == null && canPlay) { // trying to counter spammy player move
isAutoAssignGate = zone.getLobby().isAutoAssignGate(playerLoc);
@ -271,13 +262,13 @@ public class WarPlayerListener extends PlayerListener {
if (noOfPlayers < zone.getTeams().size() * zone.getTeamCap()) {
zone.autoAssign(player);
if (this.war.getWarHub() != null) {
this.war.getWarHub().resetZoneSign(zone);
if (War.war.getWarHub() != null) {
War.war.getWarHub().resetZoneSign(zone);
}
} else {
event.setTo(zone.getTeleport());
// player.teleport(zone.getTeleport());
this.war.badMsg(player, "All teams are full.");
War.war.badMsg(player, "All teams are full.");
}
}
return;
@ -292,28 +283,28 @@ public class WarPlayerListener extends PlayerListener {
} else if (team.getPlayers().size() < zone.getTeamCap()) {
team.addPlayer(player);
team.resetSign();
if (this.war.getWarHub() != null) {
this.war.getWarHub().resetZoneSign(zone);
if (War.war.getWarHub() != null) {
War.war.getWarHub().resetZoneSign(zone);
}
zone.keepPlayerInventory(player);
this.war.msg(player, "Your inventory is in storage until you /leave.");
War.war.msg(player, "Your inventory is in storage until you /leave.");
zone.respawnPlayer(event, team, player);
for (Team t : zone.getTeams()) {
t.teamcast("" + player.getName() + " joined team " + team.getName() + ".");
}
} else {
event.setTo(zone.getTeleport());
this.war.badMsg(player, "Team " + team.getName() + " is full.");
War.war.badMsg(player, "Team " + team.getName() + " is full.");
}
return;
}
}
if (this.war.getWarHub() != null && zone.getLobby().isInWarHubLinkGate(playerLoc) && !this.war.getWarHub().getVolume().contains(player.getLocation())) {
if (War.war.getWarHub() != null && zone.getLobby().isInWarHubLinkGate(playerLoc) && !War.war.getWarHub().getVolume().contains(player.getLocation())) {
this.dropFromOldTeamIfAny(player);
event.setTo(this.war.getWarHub().getLocation());
event.setTo(War.war.getWarHub().getLocation());
// player.teleport(war.getWarHub().getLocation());
this.war.msg(player, "Welcome to the War hub.");
War.war.msg(player, "Welcome to the War hub.");
return;
}
}
@ -321,19 +312,19 @@ public class WarPlayerListener extends PlayerListener {
}
// Warhub zone gates
WarHub hub = this.war.getWarHub();
WarHub hub = War.war.getWarHub();
if (hub != null && hub.getVolume().contains(player.getLocation())) {
Warzone zone = hub.getDestinationWarzoneForLocation(playerLoc);
if (zone != null && zone.getTeleport() != null) {
event.setTo(zone.getTeleport());
// player.teleport(zone.getTeleport());
this.war.msg(player, "Welcome to warzone " + zone.getName() + ".");
War.war.msg(player, "Welcome to warzone " + zone.getName() + ".");
return;
}
}
boolean isLeaving = playerWarzone != null && playerWarzone.getLobby().isLeavingZone(playerLoc);
Team playerTeam = this.war.getPlayerTeam(player.getName());
Team playerTeam = War.war.getPlayerTeam(player.getName());
if (isLeaving) { // already in a team and in warzone, leaving
// same as leave
if (playerTeam != null) {
@ -348,7 +339,7 @@ public class WarPlayerListener extends PlayerListener {
if (playerWarzone != null) {
// Player belongs to a warzone team but is outside: he snuck out or is at spawn and died
if (locZone == null && playerTeam != null && playerWarzone.getLobby() != null && !playerWarzone.getLobby().getVolume().contains(playerLoc) && !isLeaving) {
this.war.badMsg(player, "Use /leave to exit the zone.");
War.war.badMsg(player, "Use /leave to exit the zone.");
event.setTo(playerTeam.getTeamSpawn());
return;
}
@ -374,14 +365,14 @@ public class WarPlayerListener extends PlayerListener {
} else {
heartNum = ((newHp - currentHp - 1) / 2) + ".5 ";
}
this.war.msg(player, "Your dance pleases the monument's voodoo. You gain " + heartNum + "heart" + isS + "!");
War.war.msg(player, "Your dance pleases the monument's voodoo. You gain " + heartNum + "heart" + isS + "!");
return;
}
// Flag capture
if (playerWarzone.isFlagThief(player.getName()) && (playerTeam.getSpawnVolume().contains(player.getLocation()) || (playerTeam.getFlagVolume() != null && playerTeam.getFlagVolume().contains(player.getLocation())))) {
if (playerWarzone.isTeamFlagStolen(playerTeam)) {
this.war.badMsg(player, "You can't capture the enemy flag until your team's flag is returned.");
War.war.badMsg(player, "You can't capture the enemy flag until your team's flag is returned.");
} else {
synchronized (playerWarzone) {
// flags can be captured at own spawn or own flag pole
@ -399,7 +390,7 @@ public class WarPlayerListener extends PlayerListener {
victim.getFlagVolume().resetBlocks(); // bring back flag to team that lost it
victim.initializeTeamFlag();
for (Team t : playerWarzone.getTeams()) {
t.teamcast(playerTeam.getKind().getColor() + player.getName() + ChatColor.WHITE
t.teamcast(playerTeam.getKind().getColor() + player.getName() + ChatColor.WHITE
+ " captured team " + victim.getName() + "'s flag. Team " + playerTeam.getName() + " scores one point.");
}
playerWarzone.respawnPlayer(event, playerTeam, player);
@ -413,10 +404,10 @@ public class WarPlayerListener extends PlayerListener {
}
} else if (locZone != null && locZone.getLobby() != null && !locZone.getLobby().isLeavingZone(playerLoc) && !isMaker) {
// player is not in any team, but inside warzone boundaries, get him out
Warzone zone = this.war.warzone(playerLoc);
Warzone zone = War.war.warzone(playerLoc);
event.setTo(zone.getTeleport());
// player.teleport(zone.getTeleport());
this.war.badMsg(player, "You can't be inside a warzone without a team.");
War.war.badMsg(player, "You can't be inside a warzone without a team.");
return;
}
}
@ -424,25 +415,25 @@ public class WarPlayerListener extends PlayerListener {
private void handleDisabledZone(PlayerMoveEvent event, Player player, Warzone zone) {
if (zone.getLobby() != null) {
this.war.badMsg(player, "This warzone is disabled.");
War.war.badMsg(player, "This warzone is disabled.");
event.setTo(zone.getTeleport());
}
}
private void dropFromOldTeamIfAny(Player player) {
// drop from old team if any
Team previousTeam = this.war.getPlayerTeam(player.getName());
Team previousTeam = War.war.getPlayerTeam(player.getName());
if (previousTeam != null) {
if (!previousTeam.removePlayer(player.getName())) {
this.war.logWarn("Could not remove player " + player.getName() + " from team " + previousTeam.getName());
War.war.log("Could not remove player " + player.getName() + " from team " + previousTeam.getName(), java.util.logging.Level.WARNING);
}
}
}
public String getAllTeamsMsg(Player player) {
String teamsMessage = "Teams: ";
Warzone warzone = this.war.warzone(player.getLocation());
ZoneLobby lobby = this.war.lobby(player.getLocation());
Warzone warzone = War.war.warzone(player.getLocation());
ZoneLobby lobby = War.war.lobby(player.getLocation());
if (warzone == null && lobby != null) {
warzone = lobby.getZone();
} else {

View File

@ -5,14 +5,12 @@ import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import bukkit.tommytony.war.War;
import com.tommytony.war.volumes.Volume;
/**
*
*
* @author tommytony
*
*
*/
public class Monument {
private Location location;
@ -22,11 +20,11 @@ public class Monument {
private final String name;
private Warzone warzone;
public Monument(String name, War war, Warzone warzone, Location location) {
public Monument(String name, Warzone warzone, Location location) {
this.name = name;
this.location = location;
this.warzone = warzone;
this.volume = new Volume(name, war, warzone.getWorld());
this.volume = new Volume(name, warzone.getWorld());
this.setLocation(location);
this.addMonumentBlocks();

View File

@ -30,14 +30,12 @@ public class Team {
private Volume flagVolume;
private final Warzone warzone;
private TeamKind kind;
private War war;
public Team(String name, TeamKind kind, Location teamSpawn, War war, Warzone warzone) {
public Team(String name, TeamKind kind, Location teamSpawn, Warzone warzone) {
this.warzone = warzone;
this.setName(name);
this.teamSpawn = teamSpawn;
this.war = war;
this.setSpawnVolume(new Volume(name, war, warzone.getWorld()));
this.setSpawnVolume(new Volume(name, warzone.getWorld()));
this.kind = kind;
this.setFlagVolume(null); // no flag at the start
}
@ -298,7 +296,7 @@ public class Team {
lines[3] = this.remainingLives + "/" + this.warzone.getLifePool() + " lives left";
}
SignHelper.setToSign(this.war, signBlock, (byte) signData, lines);
SignHelper.setToSign(War.war, signBlock, (byte) signData, lines);
}
}
@ -333,7 +331,7 @@ public class Team {
public void teamcast(String message) {
for (Player player : this.players) {
this.war.msg(player, message);
War.war.msg(player, message);
}
}
@ -418,7 +416,7 @@ public class Team {
private void setFlagVolume() {
if (this.flagVolume == null) {
this.flagVolume = new Volume(this.getName() + "flag", this.war, this.warzone.getWorld());
this.flagVolume = new Volume(this.getName() + "flag", this.warzone.getWorld());
}
if (this.flagVolume.isSaved()) {
this.flagVolume.resetBlocks();

View File

@ -15,19 +15,17 @@ import com.tommytony.war.volumes.BlockInfo;
import com.tommytony.war.volumes.Volume;
/**
*
* @author tommytony
*
*
* @author tommytony, Tim Düsterhus
* @package com.tommytony.war
*/
public class WarHub {
private final War war;
private Location location;
private Volume volume;
private Map<String, Block> zoneGateBlocks = new HashMap<String, Block>();
private BlockFace orientation;
public WarHub(War war, Location location, String hubOrientation) {
this.war = war;
public WarHub(Location location, String hubOrientation) {
int yaw = 0;
if (hubOrientation.equals("south")) {
yaw = 270;
@ -48,15 +46,14 @@ public class WarHub {
location.getY(),
location.getZ(),
yaw, 0);
this.volume = new Volume("warhub", war, location.getWorld());
this.volume = new Volume("warhub", location.getWorld());
}
// Use when creating from player location (with yaw)
public WarHub(War war, Location location) {
this.war = war;
public WarHub(Location location) {
this.location = location;
this.volume = new Volume("warhub", war, location.getWorld());
this.volume = new Volume("warhub", location.getWorld());
setLocation(location);
}
@ -73,6 +70,7 @@ public class WarHub {
} else {
yaw = (int) (360 + (location.getYaw() % 360));
}
BlockFace facing = null;
if ((yaw >= 0 && yaw < 45) || (yaw >= 315 && yaw <= 360)) {
facing = BlockFace.WEST;
@ -95,7 +93,7 @@ public class WarHub {
for (String zoneName : this.zoneGateBlocks.keySet()) {
Block gate = this.zoneGateBlocks.get(zoneName);
if (gate.getX() == playerLocation.getBlockX() && gate.getY() == playerLocation.getBlockY() && gate.getZ() == playerLocation.getBlockZ()) {
zone = this.war.findWarzone(zoneName);
zone = War.war.findWarzone(zoneName);
}
}
return zone;
@ -105,18 +103,18 @@ public class WarHub {
// for now, draw the wall of gates to the west
this.zoneGateBlocks.clear();
int disabled = 0;
for (Warzone zone : this.war.getWarzones()) {
for (Warzone zone : War.war.getWarzones()) {
if (zone.isDisabled()) {
disabled++;
}
}
int noOfWarzones = this.war.getWarzones().size() - disabled;
int noOfWarzones = War.war.getWarzones().size() - disabled;
if (noOfWarzones > 0) {
int hubWidth = noOfWarzones * 4 + 2;
int halfHubWidth = hubWidth / 2;
int hubDepth = 6;
int hubHeigth = 4;
BlockFace left;
BlockFace right;
BlockFace front = this.getOrientation();
@ -157,7 +155,7 @@ public class WarHub {
// draw gates
Block currentGateBlock = BlockInfo.getBlock(this.location.getWorld(), this.volume.getCornerOne()).getFace(BlockFace.UP).getFace(front, hubDepth).getFace(right, 2);
for (Warzone zone : this.war.getWarzones()) { // gonna use the index to find it again
for (Warzone zone : War.war.getWarzones()) { // gonna use the index to find it again
if (!zone.isDisabled()) {
this.zoneGateBlocks.put(zone.getName(), currentGateBlock);
currentGateBlock.getFace(BlockFace.DOWN).setType(Material.GLOWSTONE);
@ -183,10 +181,10 @@ public class WarHub {
lines[1] = "(/warhub)";
lines[2] = "Pick your";
lines[3] = "battle!";
SignHelper.setToSign(this.war, signBlock, data, lines);
SignHelper.setToSign(War.war, signBlock, data, lines);
// Warzone signs
for (Warzone zone : this.war.getWarzones()) {
for (Warzone zone : War.war.getWarzones()) {
if (!zone.isDisabled() && zone.ready()) {
this.resetZoneSign(zone);
}
@ -194,6 +192,11 @@ public class WarHub {
}
}
/**
* Resets the sign of the given warzone
*
* @param Warzone zone
*/
public void resetZoneSign(Warzone zone) {
BlockFace left;
BlockFace back;
@ -215,7 +218,7 @@ public class WarHub {
left = BlockFace.SOUTH;
back = BlockFace.EAST;
}
Block zoneGate = this.zoneGateBlocks.get(zone.getName());
Block block = zoneGate.getFace(left).getFace(back, 1);
if (block.getType() != Material.SIGN_POST) {
@ -234,7 +237,7 @@ public class WarHub {
lines[1] = zone.getName();
lines[2] = zonePlayers + "/" + zoneCap + " players";
lines[3] = zone.getTeams().size() + " teams";
SignHelper.setToSign(this.war, block, data, lines);
SignHelper.setToSign(War.war, block, data, lines);
}
public void setVolume(Volume vol) {

View File

@ -3,6 +3,7 @@ package com.tommytony.war;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.logging.Level;
import org.bukkit.ChatColor;
import org.bukkit.Location;
@ -25,9 +26,9 @@ import com.tommytony.war.utils.InventoryStash;
import com.tommytony.war.volumes.ZoneVolume;
/**
*
* @author tommytony
*
*
* @author tommytony
* @package com.tommytony.war
*/
public class Warzone {
private String name;
@ -50,7 +51,6 @@ public class Warzone {
private World world;
private final int minSafeDistanceFromWall = 6;
private List<ZoneWallGuard> zoneWallGuards = new ArrayList<ZoneWallGuard>();
private War war;
private ZoneLobby lobby;
private boolean autoAssignOnly;
private boolean blockHeads;
@ -66,25 +66,24 @@ public class Warzone {
private HashMap<String, InventoryStash> deadMenInventories = new HashMap<String, InventoryStash>();
private Location rallyPoint;
public Warzone(War war, World world, String name) {
public Warzone(World world, String name) {
this.world = world;
this.war = war;
this.name = name;
this.friendlyFire = war.getDefaultFriendlyFire();
this.setLifePool(war.getDefaultLifepool());
this.setLoadout(war.getDefaultLoadout());
this.setAutoAssignOnly(war.getDefaultAutoAssignOnly());
this.teamCap = war.getDefaultTeamCap();
this.scoreCap = war.getDefaultScoreCap();
this.monumentHeal = war.getDefaultMonumentHeal();
this.setBlockHeads(war.isDefaultBlockHeads());
this.setDropLootOnDeath(war.isDefaultDropLootOnDeath());
this.setUnbreakableZoneBlocks(war.isDefaultUnbreakableZoneBlocks());
this.setNoCreatures(war.getDefaultNoCreatures());
this.setResetOnEmpty(war.isDefaultResetOnEmpty());
this.setResetOnLoad(war.isDefaultResetOnLoad());
this.setResetOnUnload(war.isDefaultResetOnUnload());
this.volume = new ZoneVolume(name, war, this.getWorld(), this);
this.friendlyFire = War.war.getDefaultFriendlyFire();
this.setLifePool(War.war.getDefaultLifepool());
this.setLoadout(War.war.getDefaultLoadout());
this.setAutoAssignOnly(War.war.getDefaultAutoAssignOnly());
this.teamCap = War.war.getDefaultTeamCap();
this.scoreCap = War.war.getDefaultScoreCap();
this.monumentHeal = War.war.getDefaultMonumentHeal();
this.setBlockHeads(War.war.isDefaultBlockHeads());
this.setDropLootOnDeath(War.war.isDefaultDropLootOnDeath());
this.setUnbreakableZoneBlocks(War.war.isDefaultUnbreakableZoneBlocks());
this.setNoCreatures(War.war.getDefaultNoCreatures());
this.setResetOnEmpty(War.war.isDefaultResetOnEmpty());
this.setResetOnLoad(War.war.isDefaultResetOnLoad());
this.setResetOnUnload(War.war.isDefaultResetOnUnload());
this.volume = new ZoneVolume(name, this.getWorld(), this);
}
public boolean ready() {
@ -157,7 +156,7 @@ public class Warzone {
/**
* Goes back to the saved state of the warzone (resets only block types, not physics). Also teleports all players back to their respective spawns.
*
*
* @return
*/
public void initializeZone() {
@ -187,12 +186,12 @@ public class Warzone {
public void initializeZoneAsJob(Player respawnExempted) {
InitZoneJob job = new InitZoneJob(this, respawnExempted);
this.war.getServer().getScheduler().scheduleSyncDelayedTask(this.war, job);
War.war.getServer().getScheduler().scheduleSyncDelayedTask(War.war, job);
}
public void initializeZoneAsJob() {
InitZoneJob job = new InitZoneJob(this);
this.war.getServer().getScheduler().scheduleSyncDelayedTask(this.war, job);
War.war.getServer().getScheduler().scheduleSyncDelayedTask(War.war, job);
}
private void initZone() {
@ -234,7 +233,7 @@ public class Warzone {
player.setHealth(20);
LoadoutResetJob job = new LoadoutResetJob(this, team, player);
this.war.getServer().getScheduler().scheduleSyncDelayedTask(this.war, job);
War.war.getServer().getScheduler().scheduleSyncDelayedTask(War.war, job);
}
public void resetInventory(Team team, Player player) {
@ -580,7 +579,7 @@ public class Warzone {
guard.updatePlayerPosition(player.getLocation());
} else {
// new guard
guard = new ZoneWallGuard(player, this.war, this, wall);
guard = new ZoneWallGuard(player, War.war, this, wall);
this.zoneWallGuards.add(guard);
}
protecting = true;
@ -638,7 +637,7 @@ public class Warzone {
if (!this.hasPlayerInventory(player.getName())) {
this.keepPlayerInventory(player);
}
this.war.msg(player, "Your inventory is in storage until you /leave.");
War.war.msg(player, "Your inventory is in storage until you /leave.");
this.respawnPlayer(lowestNoOfPlayers, player);
for (Team team : this.teams) {
team.teamcast("" + player.getName() + " joined team " + lowestNoOfPlayers.getName() + ".");
@ -675,10 +674,11 @@ public class Warzone {
}
public void handleDeath(Player player) {
Team playerTeam = this.war.getPlayerTeam(player.getName());
Warzone playerWarzone = this.war.getPlayerTeamWarzone(player.getName());
Team playerTeam = War.war.getPlayerTeam(player.getName());
Warzone playerWarzone = War.war.getPlayerTeamWarzone(player.getName());
if (playerTeam != null && playerWarzone != null) {
// teleport to team spawn upon death
playerWarzone.respawnPlayer(playerTeam, player);
int remaining = playerTeam.getRemainingLifes();
if (remaining == 0) { // your death caused your team to lose
@ -750,7 +750,7 @@ public class Warzone {
}
}
playerTeam.resetSign();
Plugin heroicDeath = this.war.getServer().getPluginManager().getPlugin("HeroicDeath");
Plugin heroicDeath = War.war.getServer().getPluginManager().getPlugin("HeroicDeath");
if (heroicDeath != null) {
}
@ -768,7 +768,7 @@ public class Warzone {
}
private void handlePlayerLeave(Player player, boolean removeFromTeam) {
Team playerTeam = this.war.getPlayerTeam(player.getName());
Team playerTeam = War.war.getPlayerTeam(player.getName());
if (playerTeam != null) {
if (removeFromTeam) {
playerTeam.removePlayer(player.getName());
@ -796,9 +796,9 @@ public class Warzone {
player.setFireTicks(0);
player.setRemainingAir(300);
this.war.msg(player, "Left the zone. Your inventory has been restored.");
if (this.war.getWarHub() != null) {
this.war.getWarHub().resetZoneSign(this);
War.war.msg(player, "Left the zone. Your inventory has been restored.");
if (War.war.getWarHub() != null) {
War.war.getWarHub().resetZoneSign(this);
}
boolean zoneEmpty = true;
@ -816,7 +816,7 @@ public class Warzone {
}
this.getVolume().resetBlocksAsJob();
this.initializeZoneAsJob();
this.war.logInfo("Last player left warzone " + this.getName() + ". Warzone blocks resetting automatically...");
War.war.log("Last player left warzone " + this.getName() + ". Warzone blocks resetting automatically...", Level.INFO);
}
}
}
@ -876,15 +876,15 @@ public class Warzone {
winnersStr += ". Resetting warzone and your inventory...";
// Score cap reached. Reset everything.
ScoreCapReachedJob job = new ScoreCapReachedJob(this, winnersStr);
this.war.getServer().getScheduler().scheduleSyncDelayedTask(this.war, job);
War.war.getServer().getScheduler().scheduleSyncDelayedTask(War.war, job);
if (this.getLobby() != null) {
this.getLobby().getVolume().resetBlocksAsJob();
}
this.getVolume().resetBlocksAsJob();
this.initializeZoneAsJob(player);
if (this.war.getWarHub() != null) {
if (War.war.getWarHub() != null) {
// TODO: test if warhub sign give the correct info despite the jobs
this.war.getWarHub().resetZoneSign(this);
War.war.getWarHub().resetZoneSign(this);
}
}
@ -971,7 +971,7 @@ public class Warzone {
}
public void unload() {
this.war.logInfo("Unloading zone " + this.getName() + "...");
War.war.log("Unloading zone " + this.getName() + "...", Level.INFO);
for (Team team : this.getTeams()) {
for (Player player : team.getPlayers()) {
this.handlePlayerLeave(player, this.getTeleport(), false);

View File

@ -17,12 +17,11 @@ import com.tommytony.war.volumes.Volume;
import com.tommytony.war.volumes.ZoneVolume;
/**
*
*
* @author tommytony
*
*
*/
public class ZoneLobby {
private final War war;
private final Warzone warzone;
private BlockFace wall;
private Volume volume;
@ -41,14 +40,13 @@ public class ZoneLobby {
/**
* Use this constructor with /setzonelobby <n/s/e/w>
*
*
* @param war
* @param warzone
* @param wall
* On which wall of the warzone will the lobby be stuck to at mid-weight
*/
public ZoneLobby(War war, Warzone warzone, BlockFace wall) {
this.war = war;
public ZoneLobby(Warzone warzone, BlockFace wall) {
this.warzone = warzone;
int lobbyWidth = warzone.getTeams().size() * 4 + 5;
this.lobbyHalfSide = lobbyWidth / 2;
@ -60,14 +58,13 @@ public class ZoneLobby {
/**
* Use this constructor with /setzonelobby <zonename>. Makes sure the lobby is not sticking inside the zone.
*
*
* @param war
* @param warzone
* @param wall
* On which wall of the warzone will the lobby be stuck to at mid-weight
*/
public ZoneLobby(War war, Warzone warzone, Location playerLocation) {
this.war = war;
public ZoneLobby(Warzone warzone, Location playerLocation) {
this.warzone = warzone;
int lobbyWidth = warzone.getTeams().size() * 4 + 5;
this.lobbyHalfSide = lobbyWidth / 2;
@ -80,8 +77,7 @@ public class ZoneLobby {
/**
* Convenience ctor when loading form disk. This figures out the middle wall block of the lobby from the volume instead of the other way around.
*/
public ZoneLobby(War war, Warzone warzone, BlockFace wall, Volume volume) {
this.war = war;
public ZoneLobby(Warzone warzone, BlockFace wall, Volume volume) {
this.warzone = warzone;
int lobbyWidth = warzone.getTeams().size() * 4 + 5;
this.lobbyHalfSide = lobbyWidth / 2;
@ -105,7 +101,7 @@ public class ZoneLobby {
/**
* Changes the lobby's position. Orientation is determined from the player location. Creates volume or resets. Saves new lobby blocks.
*
*
* @param playerLocation
*/
public void setLocation(Location playerLocation) {
@ -164,7 +160,7 @@ public class ZoneLobby {
/**
* Classic way of creating a lobby. Lobby position goes to middle of zone wall. Creates volume or resets. Saves new lobby blocks.
*
*
* @param newWall
*/
public void setWall(BlockFace newWall) {
@ -225,7 +221,7 @@ public class ZoneLobby {
private void createVolumeOrReset() {
if (this.volume == null) {
// no previous wall
this.volume = new Volume("lobby", this.war, this.warzone.getWorld());
this.volume = new Volume("lobby", this.warzone.getWorld());
} else if (this.volume.isSaved()) {
this.volume.resetBlocks();
}
@ -261,7 +257,7 @@ public class ZoneLobby {
this.volume.setFaceMaterial(BlockFace.DOWN, Material.GLASS); // beautiful
// add war hub link gate
if (this.war.getWarHub() != null) {
if (War.war.getWarHub() != null) {
Block linkGateBlock = BlockInfo.getBlock(this.warzone.getWorld(), this.warHubLinkGate);
this.placeGate(linkGateBlock, Material.OBSIDIAN);
// add warhub sign
@ -319,7 +315,7 @@ public class ZoneLobby {
lines[2] = "";
lines[3] = "Pick your team.";
}
SignHelper.setToSign(this.war, zoneSignBlock, data, lines);
SignHelper.setToSign(War.war, zoneSignBlock, data, lines);
// lets get some light in here
if (this.wall == BlockFace.NORTH || this.wall == BlockFace.SOUTH) {
@ -330,7 +326,7 @@ public class ZoneLobby {
BlockInfo.getBlock(this.warzone.getWorld(), this.lobbyMiddleWallBlock).getFace(BlockFace.DOWN).getFace(BlockFace.SOUTH, this.lobbyHalfSide - 1).getFace(this.wall, 9).setType(Material.GLOWSTONE);
}
} else {
this.war.logWarn("Failed to initalize zone lobby for zone " + this.warzone.getName());
War.war.log("Failed to initalize zone lobby for zone " + this.warzone.getName(), java.util.logging.Level.WARNING);
}
}
@ -627,7 +623,7 @@ public class ZoneLobby {
}
}
SignHelper.setToSign(this.war, block, data, lines);
SignHelper.setToSign(War.war, block, data, lines);
}
public boolean isLeavingZone(Location location) {
@ -668,7 +664,7 @@ public class ZoneLobby {
private boolean leaving(Location location, Block gate, BlockFace inside, BlockFace left, BlockFace right) {
// 3x4x1 deep
Volume gateExitVolume = new Volume("tempGateExit", this.war, location.getWorld());
Volume gateExitVolume = new Volume("tempGateExit", location.getWorld());
Block out = gate.getFace(inside);
gateExitVolume.setCornerOne(out.getFace(left).getFace(BlockFace.DOWN));
gateExitVolume.setCornerTwo(gate.getFace(right, 1).getFace(BlockFace.UP, 3));

View File

@ -15,27 +15,25 @@ import bukkit.tommytony.war.War;
public class ZoneSetter {
private final War war;
private final Player player;
private final String zoneName;
public ZoneSetter(War war, Player player, String zoneName) {
this.war = war;
public ZoneSetter(Player player, String zoneName) {
this.player = player;
this.zoneName = zoneName;
}
public void placeNorthwest() {
Warzone warzone = this.war.findWarzone(this.zoneName);
Warzone warzone = War.war.findWarzone(this.zoneName);
Block northwestBlock = this.player.getLocation().getWorld().getBlockAt(this.player.getLocation());
StringBuilder msgString = new StringBuilder();
try {
if (warzone == null) {
// create the warzone
warzone = new Warzone(this.war, this.player.getLocation().getWorld(), this.zoneName);
this.war.getIncompleteZones().add(warzone);
warzone = new Warzone(this.player.getLocation().getWorld(), this.zoneName);
War.war.getIncompleteZones().add(warzone);
warzone.getVolume().setNorthwest(northwestBlock);
this.war.msg(this.player, "Warzone " + warzone.getName() + " created. Northwesternmost point set to x:" + warzone.getVolume().getNorthwestX() + " z:" + warzone.getVolume().getNorthwestZ() + ". ");
War.war.msg(this.player, "Warzone " + warzone.getName() + " created. Northwesternmost point set to x:" + warzone.getVolume().getNorthwestX() + " z:" + warzone.getVolume().getNorthwestZ() + ". ");
} else {
// change existing warzone
this.resetWarzone(warzone, msgString);
@ -44,7 +42,7 @@ public class ZoneSetter {
}
this.saveIfReady(warzone, msgString);
} catch (NotNorthwestException e) {
this.war.badMsg(this.player, "The block you selected is not to the northwest of the existing southeasternmost block.");
War.war.badMsg(this.player, "The block you selected is not to the northwest of the existing southeasternmost block.");
if (warzone.getVolume().isSaved()) {
warzone.initializeZone(); // was reset before changing
}
@ -62,16 +60,16 @@ public class ZoneSetter {
}
public void placeSoutheast() {
Warzone warzone = this.war.findWarzone(this.zoneName);
Warzone warzone = War.war.findWarzone(this.zoneName);
Block southeastBlock = this.player.getLocation().getWorld().getBlockAt(this.player.getLocation());
StringBuilder msgString = new StringBuilder();
try {
if (warzone == null) {
// create the warzone
warzone = new Warzone(this.war, this.player.getLocation().getWorld(), this.zoneName);
this.war.getIncompleteZones().add(warzone);
warzone = new Warzone(this.player.getLocation().getWorld(), this.zoneName);
War.war.getIncompleteZones().add(warzone);
warzone.getVolume().setSoutheast(southeastBlock);
this.war.msg(this.player, "Warzone " + warzone.getName() + " created. Southeasternmost point set to x:" + warzone.getVolume().getSoutheastX() + " z:" + warzone.getVolume().getSoutheastZ() + ". ");
War.war.msg(this.player, "Warzone " + warzone.getName() + " created. Southeasternmost point set to x:" + warzone.getVolume().getSoutheastX() + " z:" + warzone.getVolume().getSoutheastZ() + ". ");
} else {
// change existing warzone
this.resetWarzone(warzone, msgString);
@ -80,7 +78,7 @@ public class ZoneSetter {
}
this.saveIfReady(warzone, msgString);
} catch (NotSoutheastException e) {
this.war.badMsg(this.player, "The block you selected is not to the southeast of the existing northwestnmost block.");
War.war.badMsg(this.player, "The block you selected is not to the southeast of the existing northwestnmost block.");
if (warzone.getVolume().isSaved()) {
warzone.initializeZone(); // was reset before changing
}
@ -103,15 +101,15 @@ public class ZoneSetter {
}
public void placeCorner1(Block corner1Block) {
Warzone warzone = this.war.findWarzone(this.zoneName);
Warzone warzone = War.war.findWarzone(this.zoneName);
StringBuilder msgString = new StringBuilder();
try {
if (warzone == null) {
// create the warzone
warzone = new Warzone(this.war, this.player.getLocation().getWorld(), this.zoneName);
this.war.getIncompleteZones().add(warzone);
warzone = new Warzone(this.player.getLocation().getWorld(), this.zoneName);
War.war.getIncompleteZones().add(warzone);
warzone.getVolume().setZoneCornerOne(corner1Block);
this.war.msg(this.player, "Warzone " + warzone.getName() + " created. Corner 1 set to x:" + corner1Block.getX() + " y:" + corner1Block.getY() + " z:" + corner1Block.getZ() + ". ");
War.war.msg(this.player, "Warzone " + warzone.getName() + " created. Corner 1 set to x:" + corner1Block.getX() + " y:" + corner1Block.getY() + " z:" + corner1Block.getZ() + ". ");
} else {
// change existing warzone
this.resetWarzone(warzone, msgString);
@ -138,15 +136,15 @@ public class ZoneSetter {
}
public void placeCorner2(Block corner2Block) {
Warzone warzone = this.war.findWarzone(this.zoneName);
Warzone warzone = War.war.findWarzone(this.zoneName);
StringBuilder msgString = new StringBuilder();
try {
if (warzone == null) {
// create the warzone
warzone = new Warzone(this.war, this.player.getLocation().getWorld(), this.zoneName);
this.war.getIncompleteZones().add(warzone);
warzone = new Warzone(this.player.getLocation().getWorld(), this.zoneName);
War.war.getIncompleteZones().add(warzone);
warzone.getVolume().setZoneCornerTwo(corner2Block);
this.war.msg(this.player, "Warzone " + warzone.getName() + " created. Corner 2 set to x:" + corner2Block.getX() + " y:" + corner2Block.getY() + " z:" + corner2Block.getZ() + ". ");
War.war.msg(this.player, "Warzone " + warzone.getName() + " created. Corner 2 set to x:" + corner2Block.getX() + " y:" + corner2Block.getY() + " z:" + corner2Block.getZ() + ". ");
} else {
// change existing warzone
this.resetWarzone(warzone, msgString);
@ -169,7 +167,7 @@ public class ZoneSetter {
private void resetWarzone(Warzone warzone, StringBuilder msgString) {
if (warzone.getVolume().isSaved()) {
this.war.msg(this.player, "Resetting " + warzone.getName() + " blocks.");
War.war.msg(this.player, "Resetting " + warzone.getName() + " blocks.");
if (warzone.getLobby() != null && warzone.getLobby().getVolume() != null) {
warzone.getLobby().getVolume().resetBlocks();
}
@ -179,48 +177,48 @@ public class ZoneSetter {
}
private void handleTooSmall() {
this.war.badMsg(this.player, "That would make the " + this.zoneName + " warzone too small. Sides must be at least 10 blocks and all existing structures (spawns, flags, etc) must fit inside.");
War.war.badMsg(this.player, "That would make the " + this.zoneName + " warzone too small. Sides must be at least 10 blocks and all existing structures (spawns, flags, etc) must fit inside.");
}
private void handleTooBig() {
this.war.badMsg(this.player, "That would make the " + this.zoneName + " warzone too big. Sides must be less than 750 blocks.");
War.war.badMsg(this.player, "That would make the " + this.zoneName + " warzone too big. Sides must be less than 750 blocks.");
}
private void saveIfReady(Warzone warzone, StringBuilder msgString) {
if (warzone.ready()) {
if (!this.war.getWarzones().contains(warzone)) {
this.war.addWarzone(warzone);
if (!War.war.getWarzones().contains(warzone)) {
War.war.addWarzone(warzone);
}
if (this.war.getIncompleteZones().contains(warzone)) {
this.war.getIncompleteZones().remove(warzone);
if (War.war.getIncompleteZones().contains(warzone)) {
War.war.getIncompleteZones().remove(warzone);
}
WarMapper.save(this.war);
WarMapper.save();
msgString.append("Saving new warzone blocks...");
this.war.msg(this.player, msgString.toString());
War.war.msg(this.player, msgString.toString());
warzone.saveState(false); // we just changed the volume, cant reset walls
if (warzone.getLobby() == null) {
// Set default lobby on south side
ZoneLobby lobby = new ZoneLobby(this.war, warzone, BlockFace.SOUTH);
ZoneLobby lobby = new ZoneLobby(warzone, BlockFace.SOUTH);
warzone.setLobby(lobby);
if (this.war.getWarHub() != null) { // warhub has to change
this.war.getWarHub().getVolume().resetBlocks();
this.war.getWarHub().initialize();
if (War.war.getWarHub() != null) { // warhub has to change
War.war.getWarHub().getVolume().resetBlocks();
War.war.getWarHub().initialize();
}
this.war.msg(this.player, "Default lobby created on south side of zone. Use /setzonelobby <n/s/e/w> to change its position.");
War.war.msg(this.player, "Default lobby created on south side of zone. Use /setzonelobby <n/s/e/w> to change its position.");
} // else {
// gotta move the lobby (or dont because zone.initzon does it for you)
// warzone.getLobby().changeWall(warzone.getLobby().getWall());
// }
warzone.initializeZone();
WarzoneMapper.save(this.war, warzone, true);
this.war.msg(this.player, "Warzone saved.");
WarzoneMapper.save(warzone, true);
War.war.msg(this.player, "Warzone saved.");
} else {
if (warzone.getVolume().getCornerOne() == null) {
msgString.append("Still missing corner 1.");
} else if (warzone.getVolume().getCornerTwo() == null) {
msgString.append("Still missing corner 2.");
}
this.war.msg(this.player, msgString.toString());
War.war.msg(this.player, msgString.toString());
}
}

View File

@ -1,5 +1,7 @@
package com.tommytony.war.jobs;
import java.util.logging.Level;
import org.bukkit.Location;
import org.bukkit.World;
@ -12,11 +14,9 @@ import com.tommytony.war.volumes.Volume;
public class RestoreWarhubJob implements Runnable {
private final War war;
private final String hubStr;
public RestoreWarhubJob(War war, String hubStr) {
this.war = war;
public RestoreWarhubJob(String hubStr) {
this.hubStr = hubStr;
}
@ -31,33 +31,33 @@ public class RestoreWarhubJob implements Runnable {
String hubOrientation = "west";
if (hubStrSplit.length > 3) {
worldName = hubStrSplit[3];
world = this.war.getServer().getWorld(worldName);
world = War.war.getServer().getWorld(worldName);
if(hubStrSplit.length > 4) {
hubOrientation = hubStrSplit[4];
}
} else {
worldName = "DEFAULT";
world = this.war.getServer().getWorlds().get(0); // default to first world
world = War.war.getServer().getWorlds().get(0); // default to first world
}
if (world != null) {
Location hubLocation = new Location(world, hubX, hubY, hubZ);
WarHub hub = new WarHub(this.war, hubLocation, hubOrientation);
this.war.setWarHub(hub);
Volume vol = VolumeMapper.loadVolume("warhub", "", this.war, world);
WarHub hub = new WarHub(hubLocation, hubOrientation);
War.war.setWarHub(hub);
Volume vol = VolumeMapper.loadVolume("warhub", "", world);
hub.setVolume(vol);
hub.getVolume().resetBlocks();
hub.initialize();
// In the previous job started by the mapper, warzones were created, but their lobbies are missing the war hub gate (because it didn't exist yet)
for (Warzone zone : this.war.getWarzones()) {
for (Warzone zone : War.war.getWarzones()) {
if (zone.getLobby() != null) {
zone.getLobby().getVolume().resetBlocks();
zone.getLobby().initialize();
}
}
this.war.logInfo("Warhub ready.");
War.war.log("Warhub ready.", Level.INFO);
} else {
this.war.logWarn("Failed to restore warhub. The specified world (name: " + worldName + ") does not exist!");
War.war.log("Failed to restore warhub. The specified world (name: " + worldName + ") does not exist!", Level.WARNING);
}
}
}

View File

@ -1,5 +1,7 @@
package com.tommytony.war.jobs;
import java.util.logging.Level;
import bukkit.tommytony.war.War;
import com.tommytony.war.Warzone;
@ -7,25 +9,23 @@ import com.tommytony.war.mappers.WarzoneMapper;
public class RestoreWarzonesJob implements Runnable {
private final War war;
private final String warzonesStr;
private final boolean newWarInstall;
public RestoreWarzonesJob(War war, String warzonesStr, boolean newWarInstall) {
this.war = war;
public RestoreWarzonesJob(String warzonesStr, boolean newWarInstall) {
this.warzonesStr = warzonesStr;
this.newWarInstall = newWarInstall;
}
public void run() {
String[] warzoneSplit = this.warzonesStr.split(",");
this.war.getWarzones().clear();
War.war.getWarzones().clear();
for (String warzoneName : warzoneSplit) {
if (warzoneName != null && !warzoneName.equals("")) {
this.war.logInfo("Loading zone " + warzoneName + "...");
Warzone zone = WarzoneMapper.load(this.war, warzoneName, !this.newWarInstall);
War.war.log("Loading zone " + warzoneName + "...", Level.INFO);
Warzone zone = WarzoneMapper.load(warzoneName, !this.newWarInstall);
if (zone != null) { // could have failed, would've been logged already
this.war.getWarzones().add(zone);
War.war.getWarzones().add(zone);
// zone.getVolume().loadCorners();
zone.getVolume().loadCorners();
if (zone.getLobby() != null) {
@ -38,8 +38,8 @@ public class RestoreWarzonesJob implements Runnable {
}
}
}
if (this.war.getWarzones().size() > 0) {
this.war.logInfo("Warzones ready.");
if (War.war.getWarzones().size() > 0) {
War.war.log("Warzones ready.", Level.INFO);
}
}

View File

@ -1,23 +1,19 @@
package com.tommytony.war.jobs;
import bukkit.tommytony.war.War;
import com.tommytony.war.mappers.ZoneVolumeMapper;
import com.tommytony.war.volumes.Volume;
public class ZoneVolumeSaveJob extends Thread {
private final Volume volume;
private final String zoneName;
private final War war;
public ZoneVolumeSaveJob(Volume volume, String zoneName, War war) {
public ZoneVolumeSaveJob(Volume volume, String zoneName) {
this.volume = volume;
this.zoneName = zoneName;
this.war = war;
}
@Override
public void run() {
ZoneVolumeMapper.save(this.volume, this.zoneName, this.war);
ZoneVolumeMapper.save(this.volume, this.zoneName);
}
}

View File

@ -8,6 +8,7 @@ import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import org.bukkit.Material;
import org.bukkit.World;
@ -29,9 +30,9 @@ import com.tommytony.war.volumes.ZoneVolume;
/**
* The ZoneVolumeMapper take the blocks from disk and sets them in the worlds, since the ZoneVolume doesn't hold its blocks in memory like regular Volumes.
*
*
* @author tommytony
*
*
*/
public class PreDeGaulleZoneVolumeMapper {
@ -58,11 +59,11 @@ public class PreDeGaulleZoneVolumeMapper {
return items;
}
public static int load(ZoneVolume volume, String zoneName, War war, World world, boolean onlyLoadCorners) {
public static int load(ZoneVolume volume, String zoneName, World world, boolean onlyLoadCorners) {
BufferedReader in = null;
int noOfResetBlocks = 0;
try {
in = new BufferedReader(new FileReader(new File(war.getDataFolder().getPath() + "/dat/warzone-" + zoneName + "/volume-" + volume.getName() + ".dat")));
in = new BufferedReader(new FileReader(new File(War.war.getDataFolder().getPath() + "/dat/warzone-" + zoneName + "/volume-" + volume.getName() + ".dat")));
String firstLine = in.readLine();
if (firstLine != null && !firstLine.equals("")) {
@ -239,7 +240,7 @@ public class PreDeGaulleZoneVolumeMapper {
}
} catch (Exception e) {
volume.getWar().getLogger().warning("Failed to reset block in zone volume " + volume.getName() + ". " + "Blocks read: " + blockReads + ". Visited blocks so far:" + visitedBlocks + ". Blocks reset: " + noOfResetBlocks + ". Error at x:" + x + " y:" + y + " z:" + z + ". Exception:" + e.getClass().toString() + " " + e.getMessage());
War.war.getLogger().warning("Failed to reset block in zone volume " + volume.getName() + ". " + "Blocks read: " + blockReads + ". Visited blocks so far:" + visitedBlocks + ". Blocks reset: " + noOfResetBlocks + ". Error at x:" + x + " y:" + y + " z:" + z + ". Exception:" + e.getClass().toString() + " " + e.getMessage());
e.printStackTrace();
} finally {
z++;
@ -256,15 +257,15 @@ public class PreDeGaulleZoneVolumeMapper {
x++;
}
if (!deferred.isEmpty()) {
war.getServer().getScheduler().scheduleSyncDelayedTask(war, deferred, 1);
War.war.getServer().getScheduler().scheduleSyncDelayedTask(War.war, deferred, 1);
}
}
}
} catch (IOException e) {
war.logWarn("Failed to read volume file " + volume.getName() + " for warzone " + zoneName + ". " + e.getClass().getName() + " " + e.getMessage());
War.war.log("Failed to read volume file " + volume.getName() + " for warzone " + zoneName + ". " + e.getClass().getName() + " " + e.getMessage(), Level.WARNING);
e.printStackTrace();
} catch (Exception e) {
war.logWarn("Unexpected error caused failure to read volume file " + zoneName + " for warzone " + volume.getName() + ". " + e.getClass().getName() + " " + e.getMessage());
War.war.log("Unexpected error caused failure to read volume file " + zoneName + " for warzone " + volume.getName() + ". " + e.getClass().getName() + " " + e.getMessage(), Level.WARNING);
e.printStackTrace();
} finally {
if (in != null) {
@ -275,7 +276,7 @@ public class PreDeGaulleZoneVolumeMapper {
// scanner.close();
// scanner = null;
} catch (IOException e) {
war.logWarn("Failed to close file reader for volume " + volume.getName() + " for warzone " + zoneName + ". " + e.getClass().getName() + " " + e.getMessage());
War.war.log("Failed to close file reader for volume " + volume.getName() + " for warzone " + zoneName + ". " + e.getClass().getName() + " " + e.getMessage(), Level.WARNING);
e.printStackTrace();
}
}
@ -399,7 +400,7 @@ public class PreDeGaulleZoneVolumeMapper {
noOfSavedBlocks++;
out.newLine();
} catch (Exception e) {
war.logWarn("Unexpected error while saving a block to " + " file for zone " + zoneName + ". Blocks saved so far: " + noOfSavedBlocks + "Position: x:" + x + " y:" + y + " z:" + z + ". " + e.getClass().getName() + " " + e.getMessage());
war.log("Unexpected error while saving a block to " + " file for zone " + zoneName + ". Blocks saved so far: " + noOfSavedBlocks + "Position: x:" + x + " y:" + y + " z:" + z + ". " + e.getClass().getName() + " " + e.getMessage(), Level.WARNING);
e.printStackTrace();
} finally {
z++;
@ -410,17 +411,17 @@ public class PreDeGaulleZoneVolumeMapper {
x++;
}
} catch (IOException e) {
war.logWarn("Failed to write volume file " + zoneName + " for warzone " + volume.getName() + ". " + e.getClass().getName() + " " + e.getMessage());
war.log("Failed to write volume file " + zoneName + " for warzone " + volume.getName() + ". " + e.getClass().getName() + " " + e.getMessage(), Level.WARNING);
e.printStackTrace();
} catch (Exception e) {
war.logWarn("Unexpected error caused failure to write volume file " + zoneName + " for warzone " + volume.getName() + ". " + e.getClass().getName() + " " + e.getMessage());
war.log("Unexpected error caused failure to write volume file " + zoneName + " for warzone " + volume.getName() + ". " + e.getClass().getName() + " " + e.getMessage(), Level.WARNING);
e.printStackTrace();
} finally {
if (out != null) {
try {
out.close();
} catch (IOException e) {
war.logWarn("Failed to close file writer for volume " + volume.getName() + " for warzone " + zoneName + ". " + e.getClass().getName() + " " + e.getMessage());
war.log("Failed to close file writer for volume " + volume.getName() + " for warzone " + zoneName + ". " + e.getClass().getName() + " " + e.getMessage(), Level.WARNING);
e.printStackTrace();
}
}

View File

@ -8,6 +8,7 @@ import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import org.bukkit.Material;
import org.bukkit.World;
@ -19,15 +20,15 @@ import bukkit.tommytony.war.War;
import com.tommytony.war.volumes.Volume;
/**
*
*
* @author tommytony
*
*
*/
public class VolumeMapper {
public static Volume loadVolume(String volumeName, String zoneName, War war, World world) {
Volume volume = new Volume(volumeName, war, world);
VolumeMapper.load(volume, zoneName, war, world);
public static Volume loadVolume(String volumeName, String zoneName, World world) {
Volume volume = new Volume(volumeName, world);
VolumeMapper.load(volume, zoneName, world);
return volume;
}
@ -38,13 +39,13 @@ public class VolumeMapper {
// return volume;
// }
public static void load(Volume volume, String zoneName, War war, World world) {
public static void load(Volume volume, String zoneName, World world) {
BufferedReader in = null;
try {
if (zoneName.equals("")) {
in = new BufferedReader(new FileReader(new File(war.getDataFolder().getPath() + "/dat/volume-" + volume.getName() + ".dat"))); // for the warhub
in = new BufferedReader(new FileReader(new File(War.war.getDataFolder().getPath() + "/dat/volume-" + volume.getName() + ".dat"))); // for the warhub
} else {
in = new BufferedReader(new FileReader(new File(war.getDataFolder().getPath() + "/dat/warzone-" + zoneName + "/volume-" + volume.getName() + ".dat")));
in = new BufferedReader(new FileReader(new File(War.war.getDataFolder().getPath() + "/dat/warzone-" + zoneName + "/volume-" + volume.getName() + ".dat")));
}
String firstLine = in.readLine();
if (firstLine != null && !firstLine.equals("")) {
@ -150,7 +151,7 @@ public class VolumeMapper {
blockReads++;
}
} catch (Exception e) {
war.logWarn("Unexpected error while reading block from volume " + volume.getName() + " file for zone " + zoneName + ". Blocks read so far: " + blockReads + "Position: x:" + i + " y:" + j + " z:" + k + ". " + e.getClass().getName() + " " + e.getMessage());
War.war.log("Unexpected error while reading block from volume " + volume.getName() + " file for zone " + zoneName + ". Blocks read so far: " + blockReads + "Position: x:" + i + " y:" + j + " z:" + k + ". " + e.getClass().getName() + " " + e.getMessage(), Level.WARNING);
e.printStackTrace();
}
}
@ -163,31 +164,31 @@ public class VolumeMapper {
}
}
} catch (IOException e) {
war.logWarn("Failed to read volume file " + volume.getName() + " for warzone " + zoneName + ". " + e.getClass().getName() + " " + e.getMessage());
War.war.log("Failed to read volume file " + volume.getName() + " for warzone " + zoneName + ". " + e.getClass().getName() + " " + e.getMessage(), Level.WARNING);
e.printStackTrace();
} catch (Exception e) {
war.logWarn("Unexpected error caused failure to read volume file " + zoneName + " for warzone " + volume.getName() + ". " + e.getClass().getName() + " " + e.getMessage());
War.war.log("Unexpected error caused failure to read volume file " + zoneName + " for warzone " + volume.getName() + ". " + e.getClass().getName() + " " + e.getMessage(), Level.WARNING);
e.printStackTrace();
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
war.logWarn("Failed to close file reader for volume " + volume.getName() + " for warzone " + zoneName + ". " + e.getClass().getName() + " " + e.getMessage());
War.war.log("Failed to close file reader for volume " + volume.getName() + " for warzone " + zoneName + ". " + e.getClass().getName() + " " + e.getMessage(), Level.WARNING);
e.printStackTrace();
}
}
}
}
public static void save(Volume volume, String zoneName, War war) {
public static void save(Volume volume, String zoneName) {
if (volume.hasTwoCorners()) {
BufferedWriter out = null;
try {
if (zoneName.equals("")) {
out = new BufferedWriter(new FileWriter(new File(war.getDataFolder().getPath() + "/dat/volume-" + volume.getName() + ".dat")));
out = new BufferedWriter(new FileWriter(new File(War.war.getDataFolder().getPath() + "/dat/volume-" + volume.getName() + ".dat")));
} else {
out = new BufferedWriter(new FileWriter(new File(war.getDataFolder().getPath() + "/dat/warzone-" + zoneName + "/volume-" + volume.getName() + ".dat")));
out = new BufferedWriter(new FileWriter(new File(War.war.getDataFolder().getPath() + "/dat/warzone-" + zoneName + "/volume-" + volume.getName() + ".dat")));
}
out.write("corner1");
@ -259,24 +260,24 @@ public class VolumeMapper {
}
out.newLine();
} catch (Exception e) {
war.logWarn("Unexpected error while writing block into volume " + volume.getName() + " file for zone " + zoneName + ". Blocks written so far: " + blockWrites + "Position: x:" + i + " y:" + j + " z:" + k + ". " + e.getClass().getName() + " " + e.getMessage());
War.war.log("Unexpected error while writing block into volume " + volume.getName() + " file for zone " + zoneName + ". Blocks written so far: " + blockWrites + "Position: x:" + i + " y:" + j + " z:" + k + ". " + e.getClass().getName() + " " + e.getMessage(), Level.WARNING);
e.printStackTrace();
}
}
}
}
} catch (IOException e) {
war.logWarn("Failed to write volume file " + zoneName + " for warzone " + volume.getName() + ". " + e.getClass().getName() + " " + e.getMessage());
War.war.log("Failed to write volume file " + zoneName + " for warzone " + volume.getName() + ". " + e.getClass().getName() + " " + e.getMessage(), Level.WARNING);
e.printStackTrace();
} catch (Exception e) {
war.logWarn("Unexpected error caused failure to write volume file " + zoneName + " for warzone " + volume.getName() + ". " + e.getClass().getName() + " " + e.getMessage());
War.war.log("Unexpected error caused failure to write volume file " + zoneName + " for warzone " + volume.getName() + ". " + e.getClass().getName() + " " + e.getMessage(), Level.WARNING);
e.printStackTrace();
} finally {
if (out != null) {
try {
out.close();
} catch (IOException e) {
war.logWarn("Failed to close file writer for volume " + volume.getName() + " for warzone " + zoneName + ". " + e.getClass().getName() + " " + e.getMessage());
War.war.log("Failed to close file writer for volume " + volume.getName() + " for warzone " + zoneName + ". " + e.getClass().getName() + " " + e.getMessage(), Level.WARNING);
e.printStackTrace();
}
}
@ -288,7 +289,7 @@ public class VolumeMapper {
File volFile = new File("War/dat/volume-" + volume.getName());
boolean deletedData = volFile.delete();
if (!deletedData) {
war.logWarn("Failed to delete file " + volFile.getName());
war.log("Failed to delete file " + volFile.getName(), Level.WARNING);
}
}

View File

@ -3,6 +3,7 @@ package com.tommytony.war.mappers;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.logging.Level;
import org.bukkit.block.BlockFace;
import org.bukkit.inventory.ItemStack;
@ -22,15 +23,15 @@ import com.tommytony.war.jobs.RestoreWarzonesJob;
*/
public class WarMapper {
public static void load(War war) {
public static void load() {
// war.getLogger().info("Loading war config...");
(war.getDataFolder()).mkdir();
(new File(war.getDataFolder().getPath() + "/dat")).mkdir();
PropertiesFile warConfig = new PropertiesFile(war.getDataFolder().getPath() + "/war.txt");
(War.war.getDataFolder()).mkdir();
(new File(War.war.getDataFolder().getPath() + "/dat")).mkdir();
PropertiesFile warConfig = new PropertiesFile(War.war.getDataFolder().getPath() + "/war.txt");
try {
warConfig.load();
} catch (IOException e) {
war.logWarn("Failed to load war.txt file.");
War.war.log("Failed to load war.txt file.", Level.WARNING);
e.printStackTrace();
}
@ -38,93 +39,93 @@ public class WarMapper {
boolean newWar = false;
if (!warConfig.containsKey("warzones")) {
newWar = true;
WarMapper.save(war);
war.logInfo("war.txt settings file created.");
WarMapper.save();
War.war.log("war.txt settings file created.", Level.INFO);
try {
warConfig.load();
} catch (IOException e) {
war.logWarn("Failed to reload war.txt file after creating it.");
War.war.log("Failed to reload war.txt file after creating it.", Level.WARNING);
e.printStackTrace();
}
}
// warzones
String warzonesStr = warConfig.getString("warzones");
RestoreWarzonesJob restoreWarzones = new RestoreWarzonesJob(war, warzonesStr, newWar);
if (war.getServer().getScheduler().scheduleSyncDelayedTask(war, restoreWarzones) == -1) {
war.logWarn("Failed to schedule warzone-restore job. No warzone was loaded.");
RestoreWarzonesJob restoreWarzones = new RestoreWarzonesJob(warzonesStr, newWar);
if (War.war.getServer().getScheduler().scheduleSyncDelayedTask(War.war, restoreWarzones) == -1) {
War.war.log("Failed to schedule warzone-restore job. No warzone was loaded.", Level.WARNING);
}
// zone makers
String[] makers = warConfig.getString("zoneMakers").split(",");
war.getZoneMakerNames().clear();
War.war.getZoneMakerNames().clear();
for (String makerName : makers) {
if (makerName != null && !makerName.equals("")) {
war.getZoneMakerNames().add(makerName);
War.war.getZoneMakerNames().add(makerName);
}
}
// command whitelist
String[] whitelist = warConfig.getString("commandWhitelist").split(",");
war.getCommandWhitelist().clear();
War.war.getCommandWhitelist().clear();
for (String command : whitelist) {
if (command != null && !command.equals("")) {
war.getCommandWhitelist().add(command);
War.war.getCommandWhitelist().add(command);
}
}
// defaultLoadout
String defaultLoadoutStr = warConfig.getString("defaultLoadout");
String[] defaultLoadoutSplit = defaultLoadoutStr.split(";");
war.getDefaultLoadout().clear();
War.war.getDefaultLoadout().clear();
for (String itemStr : defaultLoadoutSplit) {
if (itemStr != null && !itemStr.equals("")) {
String[] itemStrSplit = itemStr.split(",");
ItemStack item = new ItemStack(Integer.parseInt(itemStrSplit[0]), Integer.parseInt(itemStrSplit[1]));
war.getDefaultLoadout().put(Integer.parseInt(itemStrSplit[2]), item);
War.war.getDefaultLoadout().put(Integer.parseInt(itemStrSplit[2]), item);
}
}
// defaultLifePool
war.setDefaultLifepool(warConfig.getInt("defaultLifePool"));
War.war.setDefaultLifepool(warConfig.getInt("defaultLifePool"));
// defaultMonumentHeal
war.setDefaultMonumentHeal(warConfig.getInt("defaultMonumentHeal"));
War.war.setDefaultMonumentHeal(warConfig.getInt("defaultMonumentHeal"));
// defaultFriendlyFire
war.setDefaultFriendlyFire(warConfig.getBoolean("defaultFriendlyFire"));
War.war.setDefaultFriendlyFire(warConfig.getBoolean("defaultFriendlyFire"));
// defaultAutoAssignOnly
war.setDefaultAutoAssignOnly(warConfig.getBoolean("defaultAutoAssignOnly"));
War.war.setDefaultAutoAssignOnly(warConfig.getBoolean("defaultAutoAssignOnly"));
// defaultTeamCap
war.setDefaultTeamCap(warConfig.getInt("defaultTeamCap"));
War.war.setDefaultTeamCap(warConfig.getInt("defaultTeamCap"));
// defaultScoreCap
war.setDefaultScoreCap(warConfig.getInt("defaultScoreCap"));
War.war.setDefaultScoreCap(warConfig.getInt("defaultScoreCap"));
// pvpInZonesOnly
war.setPvpInZonesOnly(warConfig.getBoolean("pvpInZonesOnly"));
War.war.setPvpInZonesOnly(warConfig.getBoolean("pvpInZonesOnly"));
// defaultBlockHeads
war.setDefaultBlockHeads(warConfig.getBoolean("defaultBlockHeads"));
War.war.setDefaultBlockHeads(warConfig.getBoolean("defaultBlockHeads"));
// buildInZonesOnly
war.setBuildInZonesOnly(warConfig.getBoolean("buildInZonesOnly"));
War.war.setBuildInZonesOnly(warConfig.getBoolean("buildInZonesOnly"));
// disablePVPMessage
war.setDisablePvpMessage(warConfig.getBoolean("disablePvpMessage"));
War.war.setDisablePvpMessage(warConfig.getBoolean("disablePvpMessage"));
// defaultSpawnStyle
String spawnStyle = warConfig.getString("defaultspawnStyle");
if (spawnStyle != null && !spawnStyle.equals("")) {
spawnStyle = spawnStyle.toLowerCase();
if (spawnStyle.equals(TeamSpawnStyles.SMALL)) {
war.setDefaultSpawnStyle(spawnStyle);
War.war.setDefaultSpawnStyle(spawnStyle);
} else if (spawnStyle.equals(TeamSpawnStyles.FLAT)) {
war.setDefaultSpawnStyle(spawnStyle);
War.war.setDefaultSpawnStyle(spawnStyle);
} else if (spawnStyle.equals(TeamSpawnStyles.INVISIBLE)) {
war.setDefaultSpawnStyle(spawnStyle);
War.war.setDefaultSpawnStyle(spawnStyle);
}
// default is already initialized to BIG (see Warzone)
}
@ -133,73 +134,73 @@ public class WarMapper {
String defaultRewardStr = warConfig.getString("defaultReward");
if (defaultRewardStr != null && !defaultRewardStr.equals("")) {
String[] defaultRewardStrSplit = defaultRewardStr.split(";");
war.getDefaultReward().clear();
War.war.getDefaultReward().clear();
for (String itemStr : defaultRewardStrSplit) {
if (itemStr != null && !itemStr.equals("")) {
String[] itemStrSplit = itemStr.split(",");
ItemStack item = new ItemStack(Integer.parseInt(itemStrSplit[0]), Integer.parseInt(itemStrSplit[1]));
war.getDefaultReward().put(Integer.parseInt(itemStrSplit[2]), item);
War.war.getDefaultReward().put(Integer.parseInt(itemStrSplit[2]), item);
}
}
}
// defaultUnbreakableZoneBlocks
war.setDefaultUnbreakableZoneBlocks(warConfig.getBoolean("defaultUnbreakableZoneBlocks"));
War.war.setDefaultUnbreakableZoneBlocks(warConfig.getBoolean("defaultUnbreakableZoneBlocks"));
// defaultNoCreatures
war.setDefaultNoCreatures(warConfig.getBoolean("defaultNoCreatures"));
War.war.setDefaultNoCreatures(warConfig.getBoolean("defaultNoCreatures"));
// defaultDropLootOnDeath
// war.setDefaultDropLootOnDeath(warConfig.getBoolean("defaultDropLootOnDeath"));
// defaultResetOnEmpty
war.setDefaultResetOnEmpty(warConfig.getBoolean("defaultResetOnEmpty"));
War.war.setDefaultResetOnEmpty(warConfig.getBoolean("defaultResetOnEmpty"));
// defaultResetOnLoad
war.setDefaultResetOnLoad(warConfig.getBoolean("defaultResetOnLoad"));
War.war.setDefaultResetOnLoad(warConfig.getBoolean("defaultResetOnLoad"));
// defaultResetOnUnload
war.setDefaultResetOnUnload(warConfig.getBoolean("defaultResetOnUnload"));
War.war.setDefaultResetOnUnload(warConfig.getBoolean("defaultResetOnUnload"));
// warhub
String hubStr = warConfig.getString("warhub");
if (hubStr != null && !hubStr.equals("")) {
RestoreWarhubJob restoreWarhub = new RestoreWarhubJob(war, hubStr);
if (war.getServer().getScheduler().scheduleSyncDelayedTask(war, restoreWarhub) == -1) {
war.logWarn("Failed to schedule warhub-restore job. War hub was not loaded.");
RestoreWarhubJob restoreWarhub = new RestoreWarhubJob(hubStr);
if (War.war.getServer().getScheduler().scheduleSyncDelayedTask(War.war, restoreWarhub) == -1) {
War.war.log("Failed to schedule warhub-restore job. War hub was not loaded.", Level.WARNING);
}
}
warConfig.close();
}
public static void save(War war) {
PropertiesFile warConfig = new PropertiesFile(war.getDataFolder().getPath() + "/war.txt");
public static void save() {
PropertiesFile warConfig = new PropertiesFile(War.war.getDataFolder().getPath() + "/war.txt");
String warzonesStr = "";
// warzones
for (Warzone zone : war.getWarzones()) {
for (Warzone zone : War.war.getWarzones()) {
warzonesStr += zone.getName() + ",";
}
warConfig.setString("warzones", warzonesStr);
// zone makers: default is none and it means everyone can use /setzone
String makersStr = ""; // everyone
for (String name : war.getZoneMakerNames()) {
for (String name : War.war.getZoneMakerNames()) {
makersStr += name + ",";
}
warConfig.setString("zoneMakers", makersStr);
// whitelisted commands during a game
String commandWhitelistStr = ""; // everyone
for (String command : war.getCommandWhitelist()) {
for (String command : War.war.getCommandWhitelist()) {
commandWhitelistStr += command + ",";
}
warConfig.setString("commandWhitelist", makersStr);
// defaultLoadout
String defaultLoadoutStr = "";
HashMap<Integer, ItemStack> items = war.getDefaultLoadout();
HashMap<Integer, ItemStack> items = War.war.getDefaultLoadout();
for (Integer slot : items.keySet()) {
ItemStack item = items.get(slot);
if (item != null) {
@ -209,41 +210,41 @@ public class WarMapper {
warConfig.setString("defaultLoadout", defaultLoadoutStr);
// defaultLifepool
warConfig.setInt("defaultLifePool", war.getDefaultLifepool());
warConfig.setInt("defaultLifePool", War.war.getDefaultLifepool());
// defaultMonumentHeal
warConfig.setInt("defaultMonumentHeal", war.getDefaultMonumentHeal());
warConfig.setInt("defaultMonumentHeal", War.war.getDefaultMonumentHeal());
// defaultFriendlyFire
warConfig.setBoolean("defaultFriendlyFire", war.getDefaultFriendlyFire());
warConfig.setBoolean("defaultFriendlyFire", War.war.getDefaultFriendlyFire());
// defaultAutoAssignOnly
warConfig.setBoolean("defaultAutoAssignOnly", war.getDefaultAutoAssignOnly());
warConfig.setBoolean("defaultAutoAssignOnly", War.war.getDefaultAutoAssignOnly());
// defaultTeamCap
warConfig.setInt("defaultTeamCap", war.getDefaultTeamCap());
warConfig.setInt("defaultTeamCap", War.war.getDefaultTeamCap());
// defaultScoreCap
warConfig.setInt("defaultScoreCap", war.getDefaultScoreCap());
warConfig.setInt("defaultScoreCap", War.war.getDefaultScoreCap());
// pvpInZonesOnly
warConfig.setBoolean("pvpInZonesOnly", war.isPvpInZonesOnly());
warConfig.setBoolean("pvpInZonesOnly", War.war.isPvpInZonesOnly());
// defaultBlockHeads
warConfig.setBoolean("defaultBlockHeads", war.isDefaultBlockHeads());
warConfig.setBoolean("defaultBlockHeads", War.war.isDefaultBlockHeads());
// buildInZonesOnly
warConfig.setBoolean("buildInZonesOnly", war.isBuildInZonesOnly());
warConfig.setBoolean("buildInZonesOnly", War.war.isBuildInZonesOnly());
// disablePVPMessage
warConfig.setBoolean("disablePvpMessage", war.isDisablePvpMessage());
warConfig.setBoolean("disablePvpMessage", War.war.isDisablePvpMessage());
// spawnStyle
warConfig.setString("spawnStyle", war.getDefaultSpawnStyle());
warConfig.setString("spawnStyle", War.war.getDefaultSpawnStyle());
// defaultReward
String defaultRewardStr = "";
HashMap<Integer, ItemStack> rewardItems = war.getDefaultReward();
HashMap<Integer, ItemStack> rewardItems = War.war.getDefaultReward();
for (Integer slot : rewardItems.keySet()) {
ItemStack item = items.get(slot);
if (item != null) {
@ -253,26 +254,26 @@ public class WarMapper {
warConfig.setString("defaultReward", defaultRewardStr);
// defaultUnbreakableZoneBlocks
warConfig.setBoolean("defaultUnbreakableZoneBlocks", war.isDefaultUnbreakableZoneBlocks());
warConfig.setBoolean("defaultUnbreakableZoneBlocks", War.war.isDefaultUnbreakableZoneBlocks());
// defaultNoCreatures
warConfig.setBoolean("defaultNoCreatures", war.isDefaultNoCreatures());
warConfig.setBoolean("defaultNoCreatures", War.war.isDefaultNoCreatures());
// defaultResetOnEmpty
warConfig.setBoolean("defaultResetOnEmpty", war.isDefaultResetOnEmpty());
warConfig.setBoolean("defaultResetOnEmpty", War.war.isDefaultResetOnEmpty());
// defaultResetOnLoad
warConfig.setBoolean("defaultResetOnLoad", war.isDefaultResetOnLoad());
warConfig.setBoolean("defaultResetOnLoad", War.war.isDefaultResetOnLoad());
// defaultResetOnUnload
warConfig.setBoolean("defaultResetOnUnload", war.isDefaultResetOnUnload());
warConfig.setBoolean("defaultResetOnUnload", War.war.isDefaultResetOnUnload());
// defaultDropLootOnDeath
// warConfig.setBoolean("defaultDropLootOnDeath", war.isDefaultDropLootOnDeath());
// warhub
String hubStr = "";
WarHub hub = war.getWarHub();
WarHub hub = War.war.getWarHub();
if (hub != null) {
String orientationStr = "";
if (BlockFace.SOUTH == hub.getOrientation()) {
@ -284,9 +285,9 @@ public class WarMapper {
} else {
orientationStr = "west";
}
hubStr = hub.getLocation().getBlockX() + "," + hub.getLocation().getBlockY() + "," + hub.getLocation().getBlockZ() + ","
hubStr = hub.getLocation().getBlockX() + "," + hub.getLocation().getBlockY() + "," + hub.getLocation().getBlockZ() + ","
+ hub.getLocation().getWorld().getName() + "," + orientationStr;
VolumeMapper.save(hub.getVolume(), "", war);
VolumeMapper.save(hub.getVolume(), "");
}
warConfig.setString("warhub", hubStr);

View File

@ -4,6 +4,7 @@ import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.logging.Level;
import org.bukkit.Location;
import org.bukkit.World;
@ -22,19 +23,19 @@ import com.tommytony.war.volumes.Volume;
import com.tommytony.war.volumes.ZoneVolume;
/**
*
*
* @author tommytony
*
*
*/
public class WarzoneMapper {
public static Warzone load(War war, String name, boolean createNewVolume) {
public static Warzone load(String name, boolean createNewVolume) {
// war.getLogger().info("Loading warzone " + name + " config and blocks...");
PropertiesFile warzoneConfig = new PropertiesFile(war.getDataFolder().getPath() + "/warzone-" + name + ".txt");
PropertiesFile warzoneConfig = new PropertiesFile(War.war.getDataFolder().getPath() + "/warzone-" + name + ".txt");
try {
warzoneConfig.load();
} catch (IOException e) {
war.getLogger().info("Failed to load warzone-" + name + ".txt file.");
War.war.getLogger().info("Failed to load warzone-" + name + ".txt file.");
e.printStackTrace();
}
@ -42,21 +43,21 @@ public class WarzoneMapper {
String worldStr = warzoneConfig.getProperty("world");
World world = null;
if (worldStr == null || worldStr.equals("")) {
world = war.getServer().getWorlds().get(0); // default to first world
world = War.war.getServer().getWorlds().get(0); // default to first world
} else {
world = war.getServer().getWorld(worldStr);
world = War.war.getServer().getWorld(worldStr);
}
if (world == null) {
war.logWarn("Failed to restore warzone " + name + ". The specified world (name: " + worldStr + ") does not exist!");
War.war.log("Failed to restore warzone " + name + ". The specified world (name: " + worldStr + ") does not exist!", Level.WARNING);
} else {
// Create the zone
Warzone warzone = new Warzone(war, world, name);
Warzone warzone = new Warzone(world, name);
// Create file if needed
if (!warzoneConfig.containsKey("name")) {
WarzoneMapper.save(war, warzone, false);
war.getLogger().info("Warzone " + name + " config file created.");
WarzoneMapper.save(warzone, false);
War.war.getLogger().info("Warzone " + name + " config file created.");
try {
warzoneConfig.load();
} catch (IOException e) {
@ -92,7 +93,7 @@ public class WarzoneMapper {
int yaw = Integer.parseInt(teamStrSplit[4]);
teamLocation.setYaw(yaw);
}
Team team = new Team(teamStrSplit[0], TeamKinds.teamKindFromString(teamStrSplit[0]), teamLocation, war, warzone);
Team team = new Team(teamStrSplit[0], TeamKinds.teamKindFromString(teamStrSplit[0]), teamLocation, warzone);
team.setRemainingLives(warzone.getLifePool());
warzone.getTeams().add(team);
}
@ -229,7 +230,7 @@ public class WarzoneMapper {
int monumentX = Integer.parseInt(monumentStrSplit[1]);
int monumentY = Integer.parseInt(monumentStrSplit[2]);
int monumentZ = Integer.parseInt(monumentStrSplit[3]);
Monument monument = new Monument(monumentStrSplit[0], war, warzone, new Location(world, monumentX, monumentY, monumentZ));
Monument monument = new Monument(monumentStrSplit[0], warzone, new Location(world, monumentX, monumentY, monumentZ));
warzone.getMonuments().add(monument);
}
}
@ -241,20 +242,20 @@ public class WarzoneMapper {
warzoneConfig.close();
if (createNewVolume) {
ZoneVolume zoneVolume = new ZoneVolume(warzone.getName(), war, world, warzone); // VolumeMapper.loadZoneVolume(warzone.getName(), warzone.getName(), war, warzone.getWorld(), warzone);
ZoneVolume zoneVolume = new ZoneVolume(warzone.getName(), world, warzone); // VolumeMapper.loadZoneVolume(warzone.getName(), warzone.getName(), war, warzone.getWorld(), warzone);
warzone.setVolume(zoneVolume);
}
// monument blocks
for (Monument monument : warzone.getMonuments()) {
monument.setVolume(VolumeMapper.loadVolume(monument.getName(), warzone.getName(), war, world));
monument.setVolume(VolumeMapper.loadVolume(monument.getName(), warzone.getName(), world));
}
// team spawn blocks
for (Team team : warzone.getTeams()) {
team.setSpawnVolume(VolumeMapper.loadVolume(team.getName(), warzone.getName(), war, world));
team.setSpawnVolume(VolumeMapper.loadVolume(team.getName(), warzone.getName(), world));
if (team.getTeamFlag() != null) {
team.setFlagVolume(VolumeMapper.loadVolume(team.getName() + "flag", warzone.getName(), war, world));
team.setFlagVolume(VolumeMapper.loadVolume(team.getName() + "flag", warzone.getName(), world));
}
}
@ -270,8 +271,8 @@ public class WarzoneMapper {
} else if (lobbyStr.equals("west")) {
lobbyFace = BlockFace.WEST;
}
Volume lobbyVolume = VolumeMapper.loadVolume("lobby", warzone.getName(), war, world);
ZoneLobby lobby = new ZoneLobby(war, warzone, lobbyFace, lobbyVolume);
Volume lobbyVolume = VolumeMapper.loadVolume("lobby", warzone.getName(), world);
ZoneLobby lobby = new ZoneLobby(warzone, lobbyFace, lobbyVolume);
warzone.setLobby(lobby);
}
@ -280,9 +281,9 @@ public class WarzoneMapper {
return null;
}
public static void save(War war, Warzone warzone, boolean saveAllBlocks) {
(new File(war.getDataFolder().getPath() + "/dat/warzone-" + warzone.getName())).mkdir();
PropertiesFile warzoneConfig = new PropertiesFile(war.getDataFolder().getPath() + "/warzone-" + warzone.getName() + ".txt");
public static void save(Warzone warzone, boolean saveAllBlocks) {
(new File(War.war.getDataFolder().getPath() + "/dat/warzone-" + warzone.getName())).mkdir();
PropertiesFile warzoneConfig = new PropertiesFile(War.war.getDataFolder().getPath() + "/warzone-" + warzone.getName() + ".txt");
// war.getLogger().info("Saving warzone " + warzone.getName() + "...");
// name
@ -445,19 +446,19 @@ public class WarzoneMapper {
// monument blocks
for (Monument monument : monuments) {
VolumeMapper.save(monument.getVolume(), warzone.getName(), war);
VolumeMapper.save(monument.getVolume(), warzone.getName());
}
// team spawn & flag blocks
for (Team team : teams) {
VolumeMapper.save(team.getSpawnVolume(), warzone.getName(), war);
VolumeMapper.save(team.getSpawnVolume(), warzone.getName());
if (team.getFlagVolume() != null) {
VolumeMapper.save(team.getFlagVolume(), warzone.getName(), war);
VolumeMapper.save(team.getFlagVolume(), warzone.getName());
}
}
if (warzone.getLobby() != null) {
VolumeMapper.save(warzone.getLobby().getVolume(), warzone.getName(), war);
VolumeMapper.save(warzone.getLobby().getVolume(), warzone.getName());
}
// if (saveBlocks) {
@ -467,23 +468,23 @@ public class WarzoneMapper {
// }
}
public static void delete(War war, String name) {
File zoneFolder = new File(war.getDataFolder().getPath() + "/dat/warzone-" + name);
public static void delete(String name) {
File zoneFolder = new File(War.war.getDataFolder().getPath() + "/dat/warzone-" + name);
File[] files = zoneFolder.listFiles();
for (File file : files) {
boolean deletedData = file.delete();
if (!deletedData) {
war.logWarn("Failed to delete file " + file.getName());
War.war.log("Failed to delete file " + file.getName(), Level.WARNING);
}
}
boolean deletedData = zoneFolder.delete();
if (!deletedData) {
war.logWarn("Failed to delete folder " + zoneFolder.getName());
War.war.log("Failed to delete folder " + zoneFolder.getName(), Level.WARNING);
}
File zoneFile = new File(war.getDataFolder().getPath() + "/warzone-" + name + ".txt");
File zoneFile = new File(War.war.getDataFolder().getPath() + "/warzone-" + name + ".txt");
deletedData = zoneFile.delete();
if (!deletedData) {
war.logWarn("Failed to delete file " + zoneFile.getName());
War.war.log("Failed to delete file " + zoneFile.getName(), Level.WARNING);
}
}

View File

@ -11,6 +11,7 @@ import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import org.bukkit.Material;
import org.bukkit.World;
@ -33,27 +34,36 @@ import com.tommytony.war.volumes.ZoneVolume;
/**
* The ZoneVolumeMapper take the blocks from disk and sets them in the worlds, since the ZoneVolume doesn't hold its blocks in memory like regular Volumes.
*
* @author tommytony
*
*
* @author tommytony, Tim Düsterhus
* @package com.tommytony.war.mappers
*/
public class ZoneVolumeMapper {
public static int load(ZoneVolume volume, String zoneName, War war, World world, boolean onlyLoadCorners) {
File cornersFile = new File(war.getDataFolder().getPath() + "/dat/warzone-" + zoneName + "/volume-" + volume.getName() + ".corners");
File blocksFile = new File(war.getDataFolder().getPath() + "/dat/warzone-" + zoneName + "/volume-" + volume.getName() + ".blocks");
File signsFile = new File(war.getDataFolder().getPath() + "/dat/warzone-" + zoneName + "/volume-" + volume.getName() + ".signs");
File invsFile = new File(war.getDataFolder().getPath() + "/dat/warzone-" + zoneName + "/volume-" + volume.getName() + ".invs");
/**
* Loads the given volume
*
* @param ZoneVolume volume Volume to load
* @param String zoneName Zone to load the volume from
* @param World world The world the zone is located
* @param boolean onlyLoadCorners Should only the corners be loaded
* @return integer Changed blocks
*/
public static int load(ZoneVolume volume, String zoneName, World world, boolean onlyLoadCorners) {
File cornersFile = new File(War.war.getDataFolder().getPath() + "/dat/warzone-" + zoneName + "/volume-" + volume.getName() + ".corners");
File blocksFile = new File(War.war.getDataFolder().getPath() + "/dat/warzone-" + zoneName + "/volume-" + volume.getName() + ".blocks");
File signsFile = new File(War.war.getDataFolder().getPath() + "/dat/warzone-" + zoneName + "/volume-" + volume.getName() + ".signs");
File invsFile = new File(War.war.getDataFolder().getPath() + "/dat/warzone-" + zoneName + "/volume-" + volume.getName() + ".invs");
int noOfResetBlocks = 0;
if (!blocksFile.exists()) {
// The post 1.6 formatted files haven't been created yet so
// we need to use the old load.
noOfResetBlocks = PreDeGaulleZoneVolumeMapper.load(volume, zoneName, war, world, onlyLoadCorners);
noOfResetBlocks = PreDeGaulleZoneVolumeMapper.load(volume, zoneName, world, onlyLoadCorners);
// The new 1.6 files aren't created yet. We just reset the zone (except deferred blocks which will soon execute on main thread ),
// so let's save to the new format as soon as the zone is fully reset.
ZoneVolumeMapper.saveAsJob(volume, zoneName, war, 2);
war.logInfo("Warzone " + zoneName + " file converted!");
ZoneVolumeMapper.saveAsJob(volume, zoneName, 2);
War.war.log("Warzone " + zoneName + " file converted!", Level.INFO);
return noOfResetBlocks;
} else {
@ -219,7 +229,7 @@ public class ZoneVolumeMapper {
blockReads++;
} catch (Exception e) {
volume.getWar().getLogger().warning("Failed to reset block in zone volume " + volume.getName() + ". " + "Blocks read: " + blockReads + ". Visited blocks so far:" + visitedBlocks + ". Blocks reset: " + noOfResetBlocks + ". Error at x:" + x + " y:" + y + " z:" + z + ". Exception:" + e.getClass().toString() + " " + e.getMessage());
War.war.getLogger().warning("Failed to reset block in zone volume " + volume.getName() + ". " + "Blocks read: " + blockReads + ". Visited blocks so far:" + visitedBlocks + ". Blocks reset: " + noOfResetBlocks + ". Error at x:" + x + " y:" + y + " z:" + z + ". Exception:" + e.getClass().toString() + " " + e.getMessage());
e.printStackTrace();
} finally {
z++;
@ -230,14 +240,14 @@ public class ZoneVolumeMapper {
x++;
}
if (!deferred.isEmpty()) {
war.getServer().getScheduler().scheduleSyncDelayedTask(war, deferred, 1);
War.war.getServer().getScheduler().scheduleSyncDelayedTask(War.war, deferred, 1);
}
}
} catch (FileNotFoundException e) {
war.logWarn("Failed to find volume file " + volume.getName() + " for warzone " + zoneName + ". " + e.getClass().getName() + " " + e.getMessage());
War.war.log("Failed to find volume file " + volume.getName() + " for warzone " + zoneName + ". " + e.getClass().getName() + " " + e.getMessage(), Level.WARNING);
e.printStackTrace();
} catch (IOException e) {
war.logWarn("Failed to read volume file " + volume.getName() + " for warzone " + zoneName + ". " + e.getClass().getName() + " " + e.getMessage());
War.war.log("Failed to read volume file " + volume.getName() + " for warzone " + zoneName + ". " + e.getClass().getName() + " " + e.getMessage(), Level.WARNING);
e.printStackTrace();
} finally {
try {
@ -254,7 +264,7 @@ public class ZoneVolumeMapper {
invsReader.close();
}
} catch (IOException e) {
war.logWarn("Failed to close volume file " + volume.getName() + " for warzone " + zoneName + ". " + e.getClass().getName() + " " + e.getMessage());
War.war.log("Failed to close volume file " + volume.getName() + " for warzone " + zoneName + ". " + e.getClass().getName() + " " + e.getMessage(), Level.WARNING);
e.printStackTrace();
}
}
@ -262,6 +272,12 @@ public class ZoneVolumeMapper {
}
}
/**
* Parses an inventory string
*
* @param String invString string to parse
* @return List<ItemStack> Parsed items
*/
private static List<ItemStack> readInventoryString(String invString) {
List<ItemStack> items = new ArrayList<ItemStack>();
if (invString != null && !invString.equals("")) {
@ -287,7 +303,14 @@ public class ZoneVolumeMapper {
return items;
}
public static int save(Volume volume, String zoneName, War war) {
/**
* Saves the given volume
*
* @param Volume volume Volume to save
* @param String zoneName The warzone the volume is located
* @return integer Number of written blocks
*/
public static int save(Volume volume, String zoneName) {
int noOfSavedBlocks = 0;
if (volume.hasTwoCorners()) {
BufferedWriter cornersWriter = null;
@ -295,8 +318,8 @@ public class ZoneVolumeMapper {
BufferedWriter signsWriter = null;
BufferedWriter invsWriter = null;
try {
(new File(war.getDataFolder().getPath() + "/dat/warzone-" + zoneName)).mkdir();
String path = war.getDataFolder().getPath() + "/dat/warzone-" + zoneName + "/volume-" + volume.getName();
(new File(War.war.getDataFolder().getPath() + "/dat/warzone-" + zoneName)).mkdir();
String path = War.war.getDataFolder().getPath() + "/dat/warzone-" + zoneName + "/volume-" + volume.getName();
cornersWriter = new BufferedWriter(new FileWriter(new File(path + ".corners")));
blocksOutput = new FileOutputStream(new File(path + ".blocks"));
signsWriter = new BufferedWriter(new FileWriter(new File(path + ".signs")));
@ -408,7 +431,7 @@ public class ZoneVolumeMapper {
}
noOfSavedBlocks++;
} catch (Exception e) {
war.logWarn("Unexpected error while saving a block to " + " file for zone " + zoneName + ". Blocks saved so far: " + noOfSavedBlocks + "Position: x:" + x + " y:" + y + " z:" + z + ". " + e.getClass().getName() + " " + e.getMessage());
War.war.log("Unexpected error while saving a block to " + " file for zone " + zoneName + ". Blocks saved so far: " + noOfSavedBlocks + "Position: x:" + x + " y:" + y + " z:" + z + ". " + e.getClass().getName() + " " + e.getMessage(), Level.WARNING);
e.printStackTrace();
} finally {
z++;
@ -419,10 +442,10 @@ public class ZoneVolumeMapper {
x++;
}
} catch (IOException e) {
war.logWarn("Failed to write volume file " + zoneName + " for warzone " + volume.getName() + ". " + e.getClass().getName() + " " + e.getMessage());
War.war.log("Failed to write volume file " + zoneName + " for warzone " + volume.getName() + ". " + e.getClass().getName() + " " + e.getMessage(), Level.WARNING);
e.printStackTrace();
} catch (Exception e) {
war.logWarn("Unexpected error caused failure to write volume file " + zoneName + " for warzone " + volume.getName() + ". " + e.getClass().getName() + " " + e.getMessage());
War.war.log("Unexpected error caused failure to write volume file " + zoneName + " for warzone " + volume.getName() + ". " + e.getClass().getName() + " " + e.getMessage(), Level.WARNING);
e.printStackTrace();
} finally {
try {
@ -439,7 +462,7 @@ public class ZoneVolumeMapper {
invsWriter.close();
}
} catch (IOException e) {
war.logWarn("Failed to close volume file " + volume.getName() + " for warzone " + zoneName + ". " + e.getClass().getName() + " " + e.getMessage());
War.war.log("Failed to close volume file " + volume.getName() + " for warzone " + zoneName + ". " + e.getClass().getName() + " " + e.getMessage(), Level.WARNING);
e.printStackTrace();
}
}
@ -447,27 +470,46 @@ public class ZoneVolumeMapper {
return noOfSavedBlocks;
}
private static void saveAsJob(ZoneVolume volume, String zoneName, War war, long tickDelay) {
ZoneVolumeSaveJob job = new ZoneVolumeSaveJob(volume, zoneName, war);
war.getServer().getScheduler().scheduleSyncDelayedTask(war, job, tickDelay);
/**
* Saves the Volume as a background-job
*
* @param ZoneVolme volume volume to save
* @param String zoneName The zone the volume is located
* @param War war Instance of war
* @param long tickDelay delay before beginning the task
*/
private static void saveAsJob(ZoneVolume volume, String zoneName, long tickDelay) {
ZoneVolumeSaveJob job = new ZoneVolumeSaveJob(volume, zoneName);
War.war.getServer().getScheduler().scheduleSyncDelayedTask(War.war, job, tickDelay);
}
public static void delete(Volume volume, War war) {
ZoneVolumeMapper.deleteFile("War/dat/volume-" + volume.getName() + ".dat", war);
ZoneVolumeMapper.deleteFile("War/dat/volume-" + volume.getName() + ".corners", war);
ZoneVolumeMapper.deleteFile("War/dat/volume-" + volume.getName() + ".blocks", war);
ZoneVolumeMapper.deleteFile("War/dat/volume-" + volume.getName() + ".signs", war);
ZoneVolumeMapper.deleteFile("War/dat/volume-" + volume.getName() + ".invs", war);
/**
* Deletes the given volume
*
* @param Volume volume volume to delete
* @param War war Instance of war
*/
public static void delete(Volume volume) {
ZoneVolumeMapper.deleteFile("War/dat/volume-" + volume.getName() + ".dat");
ZoneVolumeMapper.deleteFile("War/dat/volume-" + volume.getName() + ".corners");
ZoneVolumeMapper.deleteFile("War/dat/volume-" + volume.getName() + ".blocks");
ZoneVolumeMapper.deleteFile("War/dat/volume-" + volume.getName() + ".signs");
ZoneVolumeMapper.deleteFile("War/dat/volume-" + volume.getName() + ".invs");
}
private static void deleteFile(String path, War war) {
/**
* Deletes a volume file
*
* @param String path path of file
* @param War war Instance of war
*/
private static void deleteFile(String path) {
File volFile = new File(path);
if (volFile.exists()) {
boolean deletedData = volFile.delete();
if (!deletedData) {
war.logWarn("Failed to delete file " + volFile.getName());
War.war.log("Failed to delete file " + volFile.getName(), Level.WARNING);
}
}
}
}
}

View File

@ -4,14 +4,10 @@ import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.block.Block;
import bukkit.tommytony.war.War;
/**
*
* @author tommytony
*
* Broken, don't use.
*
*
* @author tommytony
* @deprecated Broken, don't use.
*/
@Deprecated
public class CenteredVolume extends Volume {
@ -20,8 +16,8 @@ public class CenteredVolume extends Volume {
private int sideSize = -1;
private final World world;
public CenteredVolume(String name, Block center, int sideSize, War war, World world) {
super(name, war, world);
public CenteredVolume(String name, Block center, int sideSize, World world) {
super(name, world);
this.world = world;
this.setCenter(center);
this.setSideSize(sideSize);

View File

@ -1,5 +1,7 @@
package com.tommytony.war.volumes;
import java.util.logging.Level;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.block.Block;
@ -8,15 +10,15 @@ import org.bukkit.block.BlockFace;
import bukkit.tommytony.war.War;
/**
*
*
* @author tommytony
*
*
*/
@Deprecated
public class VerticalVolume extends Volume {
public VerticalVolume(String name, War war, World world) {
super(name, war, world);
public VerticalVolume(String name, World world) {
super(name, world);
}
@ -141,7 +143,7 @@ public class VerticalVolume extends Volume {
}
}
} catch (Exception e) {
this.getWar().logWarn("Failed to reset wall " + wall + " in volume " + this.getName() + ". " + e.getClass().toString() + " " + e.getMessage());
War.war.log("Failed to reset wall " + wall + " in volume " + this.getName() + ". " + e.getClass().toString() + " " + e.getMessage(), Level.WARNING);
}
return noOfResetBlocks;
}

View File

@ -3,6 +3,7 @@ package com.tommytony.war.volumes;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.logging.Level;
import org.bukkit.Location;
import org.bukkit.Material;
@ -21,9 +22,9 @@ import bukkit.tommytony.war.War;
import com.tommytony.war.jobs.BlockResetJob;
/**
*
*
* @author tommytony
*
*
*/
public class Volume {
private final String name;
@ -35,11 +36,9 @@ public class Volume {
private byte[][][] blockDatas = null;
private HashMap<String, String[]> signLines = new HashMap<String, String[]>();
private HashMap<String, List<ItemStack>> invBlockContents = new HashMap<String, List<ItemStack>>();
private War war;
public Volume(String name, War war, World world) {
public Volume(String name, World world) {
this.name = name;
this.war = war;
this.world = world;
}
@ -121,7 +120,7 @@ public class Volume {
noOfSavedBlocks++;
} catch (Exception e) {
this.getWar().getLogger().warning("Failed to save block in volume " + this.getName() + ". Saved blocks so far:" + noOfSavedBlocks + ". Error at x:" + x + " y:" + y + " z:" + z + ". Exception:" + e.getClass().toString() + e.getMessage());
War.war.getLogger().warning("Failed to save block in volume " + this.getName() + ". Saved blocks so far:" + noOfSavedBlocks + ". Error at x:" + x + " y:" + y + " z:" + z + ". Exception:" + e.getClass().toString() + e.getMessage());
e.printStackTrace();
} finally {
z++;
@ -133,7 +132,7 @@ public class Volume {
}
}
} catch (Exception e) {
this.getWar().getLogger().warning("Failed to save volume " + this.getName() + " blocks. Saved blocks:" + noOfSavedBlocks + ". Error at x:" + x + " y:" + y + " z:" + z + ". Exception:" + e.getClass().toString() + " " + e.getMessage());
War.war.getLogger().warning("Failed to save volume " + this.getName() + " blocks. Saved blocks:" + noOfSavedBlocks + ". Error at x:" + x + " y:" + y + " z:" + z + ". Exception:" + e.getClass().toString() + " " + e.getMessage());
e.printStackTrace();
}
return noOfSavedBlocks;
@ -141,7 +140,7 @@ public class Volume {
public void resetBlocksAsJob() {
BlockResetJob job = new BlockResetJob(this);
this.war.getServer().getScheduler().scheduleSyncDelayedTask(this.war, job);
War.war.getServer().getScheduler().scheduleSyncDelayedTask(War.war, job);
}
public int resetBlocks() {
@ -269,7 +268,7 @@ public class Volume {
}
visitedBlocks++;
} catch (Exception e) {
this.getWar().getLogger().warning("Failed to reset block in volume " + this.getName() + ". Visited blocks so far:" + visitedBlocks + ". Blocks reset: " + noOfResetBlocks + ". Error at x:" + x + " y:" + y + " z:" + z + ". Exception:" + e.getClass().toString() + " " + e.getMessage());
War.war.getLogger().warning("Failed to reset block in volume " + this.getName() + ". Visited blocks so far:" + visitedBlocks + ". Blocks reset: " + noOfResetBlocks + ". Error at x:" + x + " y:" + y + " z:" + z + ". Exception:" + e.getClass().toString() + " " + e.getMessage());
e.printStackTrace();
} finally {
z++;
@ -281,7 +280,7 @@ public class Volume {
}
}
} catch (Exception e) {
this.getWar().logWarn("Failed to reset volume " + this.getName() + " blocks. Blocks visited: " + visitedBlocks + ". Blocks reset: " + noOfResetBlocks + ". Error at x:" + x + " y:" + y + " z:" + z + ". Current block: " + currentBlockId + ". Old block: " + oldBlockType + ". Exception: " + e.getClass().toString() + " " + e.getMessage());
War.war.log("Failed to reset volume " + this.getName() + " blocks. Blocks visited: " + visitedBlocks + ". Blocks reset: " + noOfResetBlocks + ". Error at x:" + x + " y:" + y + " z:" + z + ". Current block: " + currentBlockId + ". Old block: " + oldBlockType + ". Exception: " + e.getClass().toString() + " " + e.getMessage(), Level.WARNING);
e.printStackTrace();
}
return noOfResetBlocks;
@ -416,10 +415,6 @@ public class Volume {
this.blockTypes = blockTypes;
}
public War getWar() {
return this.war;
}
public String getName() {
return this.name;
}
@ -443,7 +438,7 @@ public class Volume {
}
}
} catch (Exception e) {
this.getWar().logWarn("Failed to set block to " + material + "in volume " + this.name + "." + e.getClass().toString() + " " + e.getMessage());
War.war.log("Failed to set block to " + material + "in volume " + this.name + "." + e.getClass().toString() + " " + e.getMessage(), Level.WARNING);
}
}
@ -468,7 +463,7 @@ public class Volume {
}
}
} catch (Exception e) {
this.getWar().logWarn("Failed to set block to " + material + "in volume " + this.name + "." + e.getClass().toString() + " " + e.getMessage());
War.war.log("Failed to set block to " + material + "in volume " + this.name + "." + e.getClass().toString() + " " + e.getMessage(), Level.WARNING);
}
}
@ -503,7 +498,7 @@ public class Volume {
}
}
} catch (Exception e) {
this.getWar().logWarn("Failed to switch block to " + newType + "in volume " + this.name + "." + e.getClass().toString() + " " + e.getMessage());
War.war.log("Failed to switch block to " + newType + "in volume " + this.name + "." + e.getClass().toString() + " " + e.getMessage(), Level.WARNING);
}
}
@ -558,6 +553,6 @@ public class Volume {
this.signLines = null;
this.invBlockContents.clear();
this.invBlockContents = null;
this.war = null;
War.war = null;
}
}

View File

@ -11,25 +11,25 @@ import com.tommytony.war.Warzone;
import com.tommytony.war.mappers.ZoneVolumeMapper;
/**
*
*
* @author tommytony
*
*
*/
public class ZoneVolume extends Volume {
private Warzone zone;
private boolean isSaved = false;
public ZoneVolume(String name, War war, World world, Warzone zone) {
super(name, war, world);
public ZoneVolume(String name, World world, Warzone zone) {
super(name, world);
this.zone = zone;
}
@Override
public int saveBlocks() {
// Save blocks directly to disk (i.e. don't put everything in memory)
int saved = ZoneVolumeMapper.save(this, this.zone.getName(), this.getWar());
this.getWar().logInfo("Saved " + saved + " blocks in warzone " + this.zone.getName() + ".");
int saved = ZoneVolumeMapper.save(this, this.zone.getName());
War.war.log("Saved " + saved + " blocks in warzone " + this.zone.getName() + ".", java.util.logging.Level.INFO);
this.isSaved = true;
return saved;
}
@ -40,15 +40,15 @@ public class ZoneVolume extends Volume {
}
public void loadCorners() {
ZoneVolumeMapper.load(this, this.zone.getName(), this.getWar(), this.getWorld(), true);
ZoneVolumeMapper.load(this, this.zone.getName(), this.getWorld(), true);
this.isSaved = true;
}
@Override
public int resetBlocks() {
// Load blocks directly from disk and onto the map (i.e. no more in-memory warzone blocks)
int reset = ZoneVolumeMapper.load(this, this.zone.getName(), this.getWar(), this.getWorld(), false);
this.getWar().logInfo("Reset " + reset + " blocks in warzone " + this.zone.getName() + ".");
int reset = ZoneVolumeMapper.load(this, this.zone.getName(), this.getWorld(), false);
War.war.log("Reset " + reset + " blocks in warzone " + this.zone.getName() + ".", java.util.logging.Level.INFO);
this.isSaved = true;
return reset;
}
@ -303,12 +303,4 @@ public class ZoneVolume extends Volume {
}
return false;
}
/*
* public int resetWallBlocks(BlockFace wall) { int noOfResetBlocks = 0; try { if (hasTwoCorners() && getBlockTypes() != null) { if (wall == BlockFace.EAST) { int z = getMinZ(); int k = 0; int y = getMinY(); for (int j = 0; j < getSizeY(); j++) { int x = getMinX(); for (int i = 0; i < getSizeX(); i++) { int oldBlockType = getBlockTypes()[i][j][k]; byte oldBlockData = getBlockDatas()[i][j][k]; Block currentBlock = getWorld().getBlockAt(x, y, z); if (resetBlock(oldBlockType, oldBlockData, currentBlock)) { noOfResetBlocks++; } x++; } y++; } } else if (wall == BlockFace.WEST) { int z = getMaxZ(); int k = getSizeZ()-1; int y = getMinY(); for (int j = 0; j < getSizeY(); j++) { int x = getMinX(); for (int i = 0; i < getSizeX(); i++) { int oldBlockType = getBlockTypes()[i][j][k]; byte oldBlockData = getBlockDatas()[i][j][k]; Block currentBlock = getWorld().getBlockAt(x, y, z); if (resetBlock(oldBlockType, oldBlockData, currentBlock)) { noOfResetBlocks++; } x++; } y++; } } else if (wall == BlockFace.NORTH) { int x = getMinX(); int i = 0; int y = getMinY(); for (int j = 0; j < getSizeY(); j++) { int z = getMinZ(); for (int k = 0; k < getSizeZ(); k++) { int oldBlockType = getBlockTypes()[i][j][k]; byte oldBlockData = getBlockDatas()[i][j][k]; Block currentBlock = getWorld().getBlockAt(x, y, z); if (resetBlock(oldBlockType, oldBlockData, currentBlock)) { noOfResetBlocks++; } z++; } y++; } } else if (wall == BlockFace.SOUTH) { int x = getMaxX(); int i = getSizeX()-1; int y = getMinY(); for (int j = 0; j < getSizeY(); j++) { int z = getMinZ(); for (int k = 0; k < getSizeZ(); k++) { int oldBlockType = getBlockTypes()[i][j][k]; byte oldBlockData = getBlockDatas()[i][j][k]; Block currentBlock = getWorld().getBlockAt(x, y, z); if (resetBlock(oldBlockType, oldBlockData, currentBlock)) { noOfResetBlocks++; } z++; } y++; } } else if (wall == BlockFace.UP) { int x = getMinX(); int y = getMaxY(); int j = getSizeY()-1; for (int i = 0;i < getSizeX(); i++) { int z = getMinZ(); for (int k = 0; k < getSizeZ(); k++) { int oldBlockType = getBlockTypes()[i][j][k]; byte oldBlockData = getBlockDatas()[i][j][k]; Block currentBlock = getWorld().getBlockAt(x, y, z); if (resetBlock(oldBlockType, oldBlockData, currentBlock)) { noOfResetBlocks++; } z++; } x++; } } else if (wall == BlockFace.DOWN) { int x = getMinX(); int y = getMinY(); int j = 0; for (int i = 0;i < getSizeX(); i++) { int z = getMinZ(); for (int k = 0; k < getSizeZ(); k++) { int oldBlockType = getBlockTypes()[i][j][k]; byte oldBlockData = getBlockDatas()[i][j][k]; Block currentBlock = getWorld().getBlockAt(x, y, z); if (resetBlock(oldBlockType, oldBlockData, currentBlock)) { noOfResetBlocks++; } z++; } x++; } } } } catch (Exception e) { this.getWar().logWarn("Failed to reset wall " + wall + " in volume " + getName() + ". " + e.getClass().toString() + " " + e.getMessage()); } return noOfResetBlocks; }
*
*
* private boolean resetBlock(int oldBlockType, byte oldBlockData, Block currentBlock) { if (currentBlock.getTypeId() != oldBlockType || (currentBlock.getTypeId() == oldBlockType && currentBlock.getData() != oldBlockData) || (currentBlock.getTypeId() == oldBlockType && currentBlock.getData() == oldBlockData && (oldBlockType == Material.WALL_SIGN.getId() || oldBlockType == Material.SIGN_POST.getId()) ) ) { currentBlock.setTypeId(oldBlockType); currentBlock.setData(oldBlockData); // TODO: reset wall signs, chests and dispensers properly like in resetBlocks return true; } return false; }
*/
}

View File

@ -9,8 +9,6 @@ import org.junit.Test;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
import bukkit.tommytony.war.War;
import com.tommytony.war.*;
import com.tommytony.war.volumes.*;
@ -21,12 +19,12 @@ public class ZoneVolumeSpecTest {
@Test
public void setNorthwest_whenCreatingAndNoCornersAreSet_shouldSetCorner1AtTop() throws NotNorthwestException, TooSmallException, TooBigException{
// Arrange
War warMock = mock(War.class);
World worldMock = mock(World.class);
Warzone zoneMock = mock(Warzone.class);
when(zoneMock.getTeams()).thenReturn(new ArrayList<Team>());
when(zoneMock.getMonuments()).thenReturn(new ArrayList<Monument>());
ZoneVolume volume = new ZoneVolume("test", warMock, worldMock, zoneMock);
ZoneVolume volume = new ZoneVolume("test", worldMock, zoneMock);
Block blockMock = mock(Block.class);
when(blockMock.getX()).thenReturn(0);
when(blockMock.getY()).thenReturn(64); // at sea level
@ -49,12 +47,12 @@ public class ZoneVolumeSpecTest {
@Test
public void setNorthwest_whenCreating_AndNoCorner1IsSet_ButCorner2Set_AndNewCornerBlockIsToEastOfCorner2_shouldThrowNotNorthwestException() throws TooSmallException, TooBigException{
// Arrange
War warMock = mock(War.class);
World worldMock = mock(World.class);
Warzone zoneMock = mock(Warzone.class);
when(zoneMock.getTeams()).thenReturn(new ArrayList<Team>());
when(zoneMock.getMonuments()).thenReturn(new ArrayList<Monument>());
ZoneVolume volume = new ZoneVolume("test", warMock, worldMock, zoneMock);
ZoneVolume volume = new ZoneVolume("test", worldMock, zoneMock);
Block blockMock = mock(Block.class);
when(blockMock.getX()).thenReturn(-64); // further north
when(blockMock.getY()).thenReturn(64); // at sea level
@ -83,12 +81,12 @@ public class ZoneVolumeSpecTest {
@Test
public void setNorthwest_whenCreating_AndNoCorner1IsSet_ButCorner2Set_AndNewCornerBlockIsToSouthOfCorner2_shouldThrowNotNorthwestException() throws TooSmallException, TooBigException{
// Arrange
War warMock = mock(War.class);
World worldMock = mock(World.class);
Warzone zoneMock = mock(Warzone.class);
when(zoneMock.getTeams()).thenReturn(new ArrayList<Team>());
when(zoneMock.getMonuments()).thenReturn(new ArrayList<Monument>());
ZoneVolume volume = new ZoneVolume("test", warMock, worldMock, zoneMock);
ZoneVolume volume = new ZoneVolume("test", worldMock, zoneMock);
Block blockMock = mock(Block.class);
when(blockMock.getX()).thenReturn(64); // further south
when(blockMock.getY()).thenReturn(64); // at sea level
@ -117,12 +115,12 @@ public class ZoneVolumeSpecTest {
@Test
public void setNorthwest_whenCreating_AndNoCorner1IsSet_ButCorner2Set_AndNewCornerBlockIsTooCloseToCorner2_shouldThrowTooSmallException() throws NotNorthwestException, TooBigException{
// Arrange
War warMock = mock(War.class);
World worldMock = mock(World.class);
Warzone zoneMock = mock(Warzone.class);
when(zoneMock.getTeams()).thenReturn(new ArrayList<Team>());
when(zoneMock.getMonuments()).thenReturn(new ArrayList<Monument>());
ZoneVolume volume = new ZoneVolume("test", warMock, worldMock, zoneMock);
ZoneVolume volume = new ZoneVolume("test", worldMock, zoneMock);
Block blockMock = mock(Block.class);
when(blockMock.getX()).thenReturn(-5); // further south
when(blockMock.getY()).thenReturn(64); // at sea level
@ -151,12 +149,12 @@ public class ZoneVolumeSpecTest {
@Test
public void setNorthwest_whenCreating_AndNoCorner1IsSet_ButCorner2Set_AndNewCornerBlockIsTooFarFromCorner2_shouldThrowTooBigException() throws NotNorthwestException, TooSmallException{
// Arrange
War warMock = mock(War.class);
World worldMock = mock(World.class);
Warzone zoneMock = mock(Warzone.class);
when(zoneMock.getTeams()).thenReturn(new ArrayList<Team>());
when(zoneMock.getMonuments()).thenReturn(new ArrayList<Monument>());
ZoneVolume volume = new ZoneVolume("test", warMock, worldMock, zoneMock);
ZoneVolume volume = new ZoneVolume("test", worldMock, zoneMock);
Block blockMock = mock(Block.class);
when(blockMock.getX()).thenReturn(-1000); // further south
when(blockMock.getY()).thenReturn(64); // at sea level
@ -185,12 +183,12 @@ public class ZoneVolumeSpecTest {
@Test
public void setNorthwest_whenCreatingAndCorner1AlreadySet_shouldSetCorner2AtTop() throws NotNorthwestException, TooSmallException, TooBigException{ // nw always goes to top
// Arrange
War warMock = mock(War.class);
World worldMock = mock(World.class);
Warzone zoneMock = mock(Warzone.class);
when(zoneMock.getTeams()).thenReturn(new ArrayList<Team>());
when(zoneMock.getMonuments()).thenReturn(new ArrayList<Monument>());
ZoneVolume volume = new ZoneVolume("test", warMock, worldMock, zoneMock);
ZoneVolume volume = new ZoneVolume("test", worldMock, zoneMock);
Block blockMock = mock(Block.class);
when(blockMock.getX()).thenReturn(-64); // further north
when(blockMock.getY()).thenReturn(64); // at sea level
@ -221,12 +219,12 @@ public class ZoneVolumeSpecTest {
@Test
public void setNorthwest_whenCreating_AndCorner1AlreadySet_ButNewCornerBlockIsEastOfCorner1_shouldThrowNotNorthwestException() throws TooSmallException, TooBigException{
// Arrange
War warMock = mock(War.class);
World worldMock = mock(World.class);
Warzone zoneMock = mock(Warzone.class);
when(zoneMock.getTeams()).thenReturn(new ArrayList<Team>());
when(zoneMock.getMonuments()).thenReturn(new ArrayList<Monument>());
ZoneVolume volume = new ZoneVolume("test", warMock, worldMock, zoneMock);
ZoneVolume volume = new ZoneVolume("test", worldMock, zoneMock);
Block blockMock = mock(Block.class);
when(blockMock.getX()).thenReturn(-64); // further north
when(blockMock.getY()).thenReturn(64); // at sea level
@ -255,12 +253,12 @@ public class ZoneVolumeSpecTest {
@Test
public void setNorthwest_whenCreating_AndCorner1AlreadySet_ButNewCornerBlockIsSouthOfCorner1_shouldThrowNotNorthwestException() throws TooSmallException, TooBigException{
// Arrange
War warMock = mock(War.class);
World worldMock = mock(World.class);
Warzone zoneMock = mock(Warzone.class);
when(zoneMock.getTeams()).thenReturn(new ArrayList<Team>());
when(zoneMock.getMonuments()).thenReturn(new ArrayList<Monument>());
ZoneVolume volume = new ZoneVolume("test", warMock, worldMock, zoneMock);
ZoneVolume volume = new ZoneVolume("test", worldMock, zoneMock);
Block blockMock = mock(Block.class);
when(blockMock.getX()).thenReturn(64); // further south
when(blockMock.getY()).thenReturn(64); // at sea level
@ -289,12 +287,12 @@ public class ZoneVolumeSpecTest {
@Test
public void setNorthwest_whenChangingVolumeWithCorner1NwCorner2Se_shouldMoveCorner1() throws NotNorthwestException, TooSmallException, TooBigException{
// Arrange
War warMock = mock(War.class);
World worldMock = mock(World.class);
Warzone zoneMock = mock(Warzone.class);
when(zoneMock.getTeams()).thenReturn(new ArrayList<Team>());
when(zoneMock.getMonuments()).thenReturn(new ArrayList<Monument>());
ZoneVolume volume = new ZoneVolume("test", warMock, worldMock, zoneMock);
ZoneVolume volume = new ZoneVolume("test", worldMock, zoneMock);
Block blockMock = mock(Block.class);
when(blockMock.getX()).thenReturn(-64); // further north
when(blockMock.getY()).thenReturn(64); // at sea level
@ -328,12 +326,12 @@ public class ZoneVolumeSpecTest {
@Test
public void setNorthwest_whenChangingVolumeWithCorner1SeCorner2Nw_shouldMoveCorner2() throws NotNorthwestException, TooSmallException, TooBigException{
// Arrange
War warMock = mock(War.class);
World worldMock = mock(World.class);
Warzone zoneMock = mock(Warzone.class);
when(zoneMock.getTeams()).thenReturn(new ArrayList<Team>());
when(zoneMock.getMonuments()).thenReturn(new ArrayList<Monument>());
ZoneVolume volume = new ZoneVolume("test", warMock, worldMock, zoneMock);
ZoneVolume volume = new ZoneVolume("test", worldMock, zoneMock);
Block blockMock = mock(Block.class);
when(blockMock.getX()).thenReturn(-64); // further north
when(blockMock.getY()).thenReturn(64); // at sea level
@ -367,12 +365,12 @@ public class ZoneVolumeSpecTest {
@Test
public void setNorthwest_whenChangingVolumeWithCorner1NeCorner2Sw_shouldMoveCorner1XAndCorner2Z() throws NotNorthwestException, TooSmallException, TooBigException{
// Arrange
War warMock = mock(War.class);
World worldMock = mock(World.class);
Warzone zoneMock = mock(Warzone.class);
when(zoneMock.getTeams()).thenReturn(new ArrayList<Team>());
when(zoneMock.getMonuments()).thenReturn(new ArrayList<Monument>());
ZoneVolume volume = new ZoneVolume("test", warMock, worldMock, zoneMock);
ZoneVolume volume = new ZoneVolume("test", worldMock, zoneMock);
Block blockMock = mock(Block.class);
when(blockMock.getX()).thenReturn(-64); // further north
when(blockMock.getY()).thenReturn(64); // at sea level
@ -406,12 +404,12 @@ public class ZoneVolumeSpecTest {
@Test
public void setNorthwest_whenChangingVolumeWithCorner1SwCorner2Ne_shouldMoveCorner1ZAndCorner2X() throws NotNorthwestException, TooSmallException, TooBigException{
// Arrange
War warMock = mock(War.class);
World worldMock = mock(World.class);
Warzone zoneMock = mock(Warzone.class);
when(zoneMock.getTeams()).thenReturn(new ArrayList<Team>());
when(zoneMock.getMonuments()).thenReturn(new ArrayList<Monument>());
ZoneVolume volume = new ZoneVolume("test", warMock, worldMock, zoneMock);
ZoneVolume volume = new ZoneVolume("test", worldMock, zoneMock);
Block blockMock = mock(Block.class);
when(blockMock.getX()).thenReturn(-64); // further north
when(blockMock.getY()).thenReturn(64); // at sea level
@ -451,12 +449,12 @@ public class ZoneVolumeSpecTest {
@Test
public void setSoutheast_whenCreatingAndNoCornersAreSet_shouldSetCorner2AtBottom() throws NotSoutheastException, TooSmallException, TooBigException{
// Arrange
War warMock = mock(War.class);
World worldMock = mock(World.class);
Warzone zoneMock = mock(Warzone.class);
when(zoneMock.getTeams()).thenReturn(new ArrayList<Team>());
when(zoneMock.getMonuments()).thenReturn(new ArrayList<Monument>());
ZoneVolume volume = new ZoneVolume("test", warMock, worldMock, zoneMock);
ZoneVolume volume = new ZoneVolume("test", worldMock, zoneMock);
Block blockMock = mock(Block.class);
when(blockMock.getX()).thenReturn(0);
when(blockMock.getY()).thenReturn(64); // at sea level
@ -479,12 +477,12 @@ public class ZoneVolumeSpecTest {
@Test
public void setSoutheast_whenCreatingAndNoCorner2IsSet_ButCorner1IsAlreadySet_AndNewCornerBlockIsToWestOfCorner1_shouldThrowNotSoutheastException() throws TooSmallException, TooBigException{
// Arrange
War warMock = mock(War.class);
World worldMock = mock(World.class);
Warzone zoneMock = mock(Warzone.class);
when(zoneMock.getTeams()).thenReturn(new ArrayList<Team>());
when(zoneMock.getMonuments()).thenReturn(new ArrayList<Monument>());
ZoneVolume volume = new ZoneVolume("test", warMock, worldMock, zoneMock);
ZoneVolume volume = new ZoneVolume("test", worldMock, zoneMock);
Block blockMock = mock(Block.class);
when(blockMock.getX()).thenReturn(64); // further south
when(blockMock.getY()).thenReturn(64); // at sea level
@ -513,12 +511,12 @@ public class ZoneVolumeSpecTest {
@Test
public void setSoutheast_whenCreatingAndNoCorner2IsSet_ButCorner1IsAlreadySet_AndNewCornerBlockIsToNorthOfCorner1_shouldThrowNotSoutheastException() throws TooSmallException, TooBigException{
// Arrange
War warMock = mock(War.class);
World worldMock = mock(World.class);
Warzone zoneMock = mock(Warzone.class);
when(zoneMock.getTeams()).thenReturn(new ArrayList<Team>());
when(zoneMock.getMonuments()).thenReturn(new ArrayList<Monument>());
ZoneVolume volume = new ZoneVolume("test", warMock, worldMock, zoneMock);
ZoneVolume volume = new ZoneVolume("test", worldMock, zoneMock);
Block blockMock = mock(Block.class);
when(blockMock.getX()).thenReturn(-64); // further north
when(blockMock.getY()).thenReturn(64); // at sea level
@ -547,12 +545,12 @@ public class ZoneVolumeSpecTest {
@Test
public void setSoutheast_whenCreatingAndCorner2AlreadySet_shouldSetCorner1AtBottom() throws NotSoutheastException, TooSmallException, TooBigException{ // se always goes to bottom
// Arrange
War warMock = mock(War.class);
World worldMock = mock(World.class);
Warzone zoneMock = mock(Warzone.class);
when(zoneMock.getTeams()).thenReturn(new ArrayList<Team>());
when(zoneMock.getMonuments()).thenReturn(new ArrayList<Monument>());
ZoneVolume volume = new ZoneVolume("test", warMock, worldMock, zoneMock);
ZoneVolume volume = new ZoneVolume("test", worldMock, zoneMock);
Block blockMock = mock(Block.class);
when(blockMock.getX()).thenReturn(64); // further south
when(blockMock.getY()).thenReturn(64); // at sea level
@ -583,12 +581,12 @@ public class ZoneVolumeSpecTest {
@Test
public void setSoutheast_whenCreating_AndCorner2AlreadySet_ButNewCornerBlockIsToWestOfCorner2_shouldThrowNotSoutheastException() throws TooSmallException, TooBigException{
// Arrange
War warMock = mock(War.class);
World worldMock = mock(World.class);
Warzone zoneMock = mock(Warzone.class);
when(zoneMock.getTeams()).thenReturn(new ArrayList<Team>());
when(zoneMock.getMonuments()).thenReturn(new ArrayList<Monument>());
ZoneVolume volume = new ZoneVolume("test", warMock, worldMock, zoneMock);
ZoneVolume volume = new ZoneVolume("test", worldMock, zoneMock);
Block blockMock = mock(Block.class);
when(blockMock.getX()).thenReturn(64); // further south
when(blockMock.getY()).thenReturn(64); // at sea level
@ -617,12 +615,12 @@ public class ZoneVolumeSpecTest {
@Test
public void setSoutheast_whenCreating_AndCorner2AlreadySet_ButNewCornerBlockIsToNorthOfCorner2_shouldThrowNotSoutheastException() throws TooSmallException, TooBigException{
// Arrange
War warMock = mock(War.class);
World worldMock = mock(World.class);
Warzone zoneMock = mock(Warzone.class);
when(zoneMock.getTeams()).thenReturn(new ArrayList<Team>());
when(zoneMock.getMonuments()).thenReturn(new ArrayList<Monument>());
ZoneVolume volume = new ZoneVolume("test", warMock, worldMock, zoneMock);
ZoneVolume volume = new ZoneVolume("test", worldMock, zoneMock);
Block blockMock = mock(Block.class);
when(blockMock.getX()).thenReturn(-64); // further north
when(blockMock.getY()).thenReturn(64); // at sea level
@ -651,12 +649,12 @@ public class ZoneVolumeSpecTest {
@Test
public void setSoutheast_whenChangingVolumeWithCorner1NwCorner2Se_shouldMoveCorner2() throws NotSoutheastException, TooSmallException, TooBigException{
// Arrange
War warMock = mock(War.class);
World worldMock = mock(World.class);
Warzone zoneMock = mock(Warzone.class);
when(zoneMock.getTeams()).thenReturn(new ArrayList<Team>());
when(zoneMock.getMonuments()).thenReturn(new ArrayList<Monument>());
ZoneVolume volume = new ZoneVolume("test", warMock, worldMock, zoneMock);
ZoneVolume volume = new ZoneVolume("test", worldMock, zoneMock);
Block blockMock = mock(Block.class);
when(blockMock.getX()).thenReturn(64); // further south
when(blockMock.getY()).thenReturn(64); // at sea level
@ -690,12 +688,12 @@ public class ZoneVolumeSpecTest {
@Test
public void setSoutheast_whenChangingVolumeWithCorner1SeCorner2Nw_shouldMoveCorner1() throws NotSoutheastException, TooSmallException, TooBigException{
// Arrange
War warMock = mock(War.class);
World worldMock = mock(World.class);
Warzone zoneMock = mock(Warzone.class);
when(zoneMock.getTeams()).thenReturn(new ArrayList<Team>());
when(zoneMock.getMonuments()).thenReturn(new ArrayList<Monument>());
ZoneVolume volume = new ZoneVolume("test", warMock, worldMock, zoneMock);
ZoneVolume volume = new ZoneVolume("test", worldMock, zoneMock);
Block blockMock = mock(Block.class);
when(blockMock.getX()).thenReturn(64); // further south
when(blockMock.getY()).thenReturn(64); // at sea level
@ -729,12 +727,12 @@ public class ZoneVolumeSpecTest {
@Test
public void setSoutheast_whenChangingVolumeWithCorner1NeCorner2Sw_shouldMoveCorner1ZAndCorner2X() throws NotSoutheastException, TooSmallException, TooBigException{
// Arrange
War warMock = mock(War.class);
World worldMock = mock(World.class);
Warzone zoneMock = mock(Warzone.class);
when(zoneMock.getTeams()).thenReturn(new ArrayList<Team>());
when(zoneMock.getMonuments()).thenReturn(new ArrayList<Monument>());
ZoneVolume volume = new ZoneVolume("test", warMock, worldMock, zoneMock);
ZoneVolume volume = new ZoneVolume("test", worldMock, zoneMock);
Block blockMock = mock(Block.class);
when(blockMock.getX()).thenReturn(64); // further south
when(blockMock.getY()).thenReturn(64); // at sea level
@ -768,12 +766,12 @@ public class ZoneVolumeSpecTest {
@Test
public void setSoutheast_whenChangingVolumeWithCorner1SwCorner2Ne_shouldMoveCorner1XAndCorner2Z() throws NotSoutheastException, TooSmallException, TooBigException{
// Arrange
War warMock = mock(War.class);
World worldMock = mock(World.class);
Warzone zoneMock = mock(Warzone.class);
when(zoneMock.getTeams()).thenReturn(new ArrayList<Team>());
when(zoneMock.getMonuments()).thenReturn(new ArrayList<Monument>());
ZoneVolume volume = new ZoneVolume("test", warMock, worldMock, zoneMock);
ZoneVolume volume = new ZoneVolume("test", worldMock, zoneMock);
Block blockMock = mock(Block.class);
when(blockMock.getX()).thenReturn(64); // further south
when(blockMock.getY()).thenReturn(64); // at sea level