Removing trailing whitespace

Adding this everywhere
Adding annotations
Use the block-style for if and consorts
This commit is contained in:
Tim Düsterhus 2011-07-16 19:07:00 +02:00
parent ba30e6ca42
commit 88b2e5051d
45 changed files with 2773 additions and 2674 deletions

File diff suppressed because it is too large Load Diff

View File

@ -17,7 +17,7 @@ import com.tommytony.war.Team;
import com.tommytony.war.Warzone;
/**
*
*
* @author tommytony
*
*/
@ -28,15 +28,16 @@ public class WarBlockListener extends BlockListener {
public WarBlockListener(War war) {
this.war = war;
}
@Override
public void onBlockPlace(BlockPlaceEvent event) {
if (war.isLoaded()) {
if (this.war.isLoaded()) {
Player player = event.getPlayer();
Block block = event.getBlock();
if (player != null && block != null) {
Team team = war.getPlayerTeam(player.getName());
Warzone zone = war.warzone(player.getLocation());
if (team != null && block != null && zone != null
Team team = this.war.getPlayerTeam(player.getName());
Warzone zone = this.war.warzone(player.getLocation());
if (team != null && block != null && zone != null
&& zone.isMonumentCenterBlock(block)
&& block.getType() == team.getKind().getMaterial()
&& block.getData() == team.getKind().getData()) {
@ -50,98 +51,99 @@ public class WarBlockListener extends BlockListener {
event.setCancelled(false);
return; // important otherwise cancelled down a few line by isImportantblock
} else {
war.badMsg(player, "You can't capture a monument without a block of your team's material. Get one from your team spawn.");
this.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 = war.isZoneMaker(player);
boolean isZoneMaker = this.war.isZoneMaker(player);
if (zone != null && zone.isImportantBlock(block) && (!isZoneMaker || (isZoneMaker && team != null))) {
war.badMsg(player, "Can't build here.");
this.war.badMsg(player, "Can't build here.");
event.setCancelled(true);
return;
}
// protect warzone lobbies
for (Warzone wz: war.getWarzones()) {
for (Warzone wz: this.war.getWarzones()) {
if (wz.getLobby() != null && wz.getLobby().getVolume() != null && wz.getLobby().getVolume().contains(block)) {
war.badMsg(player, "Can't build here.");
this.war.badMsg(player, "Can't build here.");
event.setCancelled(true);
return;
}
}
// protect the hub
if (war.getWarHub() != null && war.getWarHub().getVolume().contains(block)) {
war.badMsg(player, "Can't build here.");
if (this.war.getWarHub() != null && this.war.getWarHub().getVolume().contains(block)) {
this.war.badMsg(player, "Can't build here.");
event.setCancelled(true);
return;
}
// buildInZonesOnly
if (zone == null && war.isBuildInZonesOnly() && !war.canBuildOutsideZone(player)) {
war.badMsg(player, "You can only build inside warzones. Ask for the 'war.build' permission to build outside.");
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.");
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()) {
war.badMsg(player, "You can only use your team's blocks to capture monuments.");
this.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
war.badMsg(player, "Can't drop the flag. What are you doing? Run!");
this.war.badMsg(player, "Can't drop the flag. What are you doing? Run!");
event.setCancelled(true);
}
// unbreakableZoneBlocks
if (zone != null && zone.isUnbreakableZoneBlocks()
if (zone != null && zone.isUnbreakableZoneBlocks()
&& (!isZoneMaker
|| (isZoneMaker && team != null))
|| (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)
war.badMsg(player, "The blocks in this zone are unbreakable - this also means you can't build!");
this.war.badMsg(player, "The blocks in this zone are unbreakable - this also means you can't build!");
event.setCancelled(true);
return;
}
}
}
}
@Override
public void onBlockBreak(BlockBreakEvent event) {
if (war.isLoaded()) {
if (this.war.isLoaded()) {
Player player = event.getPlayer();
Block block = event.getBlock();
if (player != null && block != null) {
handleBreakOrDamage(player, block, event);
this.handleBreakOrDamage(player, block, event);
}
}
}
// public void onBlockDamage(BlockDamageEvent event) {
// Player player = event.getPlayer();
// Block block = event.getBlock();
// if (player != null && block != null && event.getDamageLevel() == BlockDamageLevel.BROKEN) {
// handleBreakOrDamage(player,block, event);
//
//
// }
// }
private void handleBreakOrDamage(Player player, Block block, Cancellable event) {
Warzone warzone = war.warzone(player.getLocation());
Team team = war.getPlayerTeam(player.getName());
boolean isZoneMaker = war.isZoneMaker(player);
Warzone warzone = this.war.warzone(player.getLocation());
Team team = this.war.getPlayerTeam(player.getName());
boolean isZoneMaker = this.war.isZoneMaker(player);
if (warzone != null && team == null && !isZoneMaker) {
// can't actually destroy blocks in a warzone if not part of a team
war.badMsg(player, "Can't destroy part of a warzone if you're not in a team.");
this.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
} else if (team != null && block != null && warzone != null
&& warzone.isMonumentCenterBlock(block)){
Monument monument = warzone.getMonumentFromCenterBlock(block);
if (monument.hasOwner()) {
@ -155,11 +157,11 @@ public class WarBlockListener extends BlockListener {
event.setCancelled(false);
return;
}else if (warzone != null && warzone.isImportantBlock(block) && (!isZoneMaker || (isZoneMaker && team != null))) {
if (team != null && team.getSpawnVolume().contains(block)) {
ItemStack teamKindBlock = new ItemStack(team.getKind().getMaterial(), team.getKind().getData());
if (player.getInventory().contains(teamKindBlock)) {
war.badMsg(player, "You already have a " + team.getName() + " block.");
this.war.badMsg(player, "You already have a " + team.getName() + " block.");
event.setCancelled(true);
return;
} else {
@ -170,7 +172,7 @@ public class WarBlockListener extends BlockListener {
} else if (team != null && warzone.isEnemyTeamFlagBlock(team, block)) {
if (warzone.isFlagThief(player.getName())) {
// detect audacious thieves
war.badMsg(player, "You can only steal one flag at a time!");
this.war.badMsg(player, "You can only steal one flag at a time!");
} else {
Team lostFlagTeam = warzone.getTeamForFlagBlock(block);
if (lostFlagTeam.getPlayers().size() != 0) {
@ -180,63 +182,63 @@ public class WarBlockListener extends BlockListener {
player.getInventory().addItem(teamKindBlock);
warzone.addFlagThief(lostFlagTeam, player.getName());
block.setType(Material.AIR);
for (Team t : warzone.getTeams()) {
t.teamcast(player.getName() + " stole team " + lostFlagTeam.getName() + "'s flag.");
if (t.getName().equals(lostFlagTeam.getName())){
t.teamcast("Prevent " + player.getName() + " from reaching team " + team.getName() + "'s spawn or flag.");
}
}
war.msg(player, "You have team " + lostFlagTeam.getName() + "'s flag. Reach your team spawn or flag to capture it!");
this.war.msg(player, "You have team " + lostFlagTeam.getName() + "'s flag. Reach your team spawn or flag to capture it!");
} else {
war.msg(player, "You can't steal team " + lostFlagTeam.getName() + "'s flag since no players are on that team.");
this.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)){
war.badMsg(player, "Can't destroy this.");
this.war.badMsg(player, "Can't destroy this.");
event.setCancelled(true);
return;
}
}
// protect warzone lobbies
if (block != null) {
for (Warzone zone: war.getWarzones()) {
for (Warzone zone: this.war.getWarzones()) {
if (zone.getLobby() != null && zone.getLobby().getVolume() != null &&
zone.getLobby().getVolume().contains(block)) {
war.badMsg(player, "Can't destroy this.");
this.war.badMsg(player, "Can't destroy this.");
event.setCancelled(true);
return;
}
}
}
// protect the hub
if (war.getWarHub() != null && war.getWarHub().getVolume().contains(block)) {
war.badMsg(player, "Can't destroy this.");
if (this.war.getWarHub() != null && this.war.getWarHub().getVolume().contains(block)) {
this.war.badMsg(player, "Can't destroy this.");
event.setCancelled(true);
return;
}
// buildInZonesOnly
Warzone blockZone = war.warzone(new Location(block.getWorld(), block.getX(), block.getY(), block.getZ()));
if (blockZone == null
&& war.isBuildInZonesOnly()
&& !war.canBuildOutsideZone(player)) {
war.badMsg(player, "You can only build inside warzones. Ask for the 'war.build' permission to build outside.");
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.");
event.setCancelled(true);
return;
}
// unbreakableZoneBlocks
if (blockZone != null && blockZone.isUnbreakableZoneBlocks()
if (blockZone != null && blockZone.isUnbreakableZoneBlocks()
&& (!isZoneMaker
|| (isZoneMaker && team != null))
|| (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
war.badMsg(player, "The blocks in this zone are unbreakable!");
this.war.badMsg(player, "The blocks in this zone are unbreakable!");
event.setCancelled(true);
return;
}

View File

@ -22,7 +22,7 @@ import com.tommytony.war.Team;
import com.tommytony.war.Warzone;
/**
*
*
* @author tommytony
*
*/
@ -33,105 +33,106 @@ public class WarEntityListener extends EntityListener {
public WarEntityListener(War war) {
this.war = war;
}
@Override
public void onEntityDeath(EntityDeathEvent event) {
if (war.isLoaded()) {
if (this.war.isLoaded()) {
Entity e = event.getEntity();
if (e instanceof Player) {
Player player = (Player)e;
Team team = war.getPlayerTeam(player.getName());
Team team = this.war.getPlayerTeam(player.getName());
if (team != null) {
Warzone zone = war.getPlayerTeamWarzone(player.getName());
Warzone zone = this.war.getPlayerTeamWarzone(player.getName());
zone.handleDeath(player);
// if (zone.isDropLootOnDeath()) {
// war.getServer().getScheduler().scheduleAsyncDelayedTask(war,
// new LootDropperTask(player.getLocation(), event.getDrops()),
// war.getServer().getScheduler().scheduleAsyncDelayedTask(war,
// new LootDropperTask(player.getLocation(), event.getDrops()),
// 750);
// }
// }
event.getDrops().clear(); // no loot
}
}
}
}
private void handlerAttackDefend(EntityDamageByEntityEvent event) {
Entity attacker = event.getDamager();
Entity defender = event.getEntity();
if (attacker != null && defender != null && attacker instanceof Player && defender instanceof Player) {
// only let adversaries (same warzone, different team) attack each other
Player a = (Player)attacker;
Player d = (Player)defender;
Warzone attackerWarzone = war.getPlayerTeamWarzone(a.getName());
Team attackerTeam = war.getPlayerTeam(a.getName());
Warzone defenderWarzone = war.getPlayerTeamWarzone(d.getName());
Team defenderTeam = war.getPlayerTeam(d.getName());
if (attackerTeam != null && defenderTeam != null
&& attackerTeam != defenderTeam
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());
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
war.badMsg(a, "Can't attack a player that's inside his team's spawn.");
this.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
war.badMsg(a, "Can't attack a player from inside your spawn.");
this.war.badMsg(a, "Can't attack a player from inside your spawn.");
event.setCancelled(true);
}
}
// Detect death, prevent it and respawn the player
if (event.getDamage() >= d.getHealth()) {
defenderWarzone.handleDeath(d);
if (war.getServer().getPluginManager().getPlugin("HeroicDeath") != null) {
if (this.war.getServer().getPluginManager().getPlugin("HeroicDeath") != null) {
}
event.setCancelled(true);
}
} else if (attackerTeam != null && defenderTeam != null
&& attackerTeam == defenderTeam
} else if (attackerTeam != null && defenderTeam != null
&& attackerTeam == defenderTeam
&& attackerWarzone == defenderWarzone
&& attacker.getEntityId() != defender.getEntityId()) {
// same team, but not same person
if (attackerWarzone.getFriendlyFire()) {
war.badMsg(a, "Friendly fire is on! Please, don't hurt your teammates."); // if ff is on, let the attack go through
this.war.badMsg(a, "Friendly fire is on! Please, don't hurt your teammates."); // if ff is on, let the attack go through
} else {
war.badMsg(a, "Your attack missed! Your target is on your team.");
this.war.badMsg(a, "Your attack missed! Your target is on your team.");
event.setCancelled(true); // ff is off
}
} else if (attackerTeam == null && defenderTeam == null && war.canPvpOutsideZones(a)){
} else if (attackerTeam == null && defenderTeam == null && this.war.canPvpOutsideZones(a)){
// let normal PVP through is its not turned off or if you have perms
} else if (attackerTeam == null && defenderTeam == null && !war.canPvpOutsideZones(a)) {
if (!war.isDisablePvpMessage()) {
war.badMsg(a, "You need the 'war.pvp' permission to attack players outside warzones.");
} 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.");
}
event.setCancelled(true); // global pvp is off
} else {
war.badMsg(a, "Your attack missed!");
this.war.badMsg(a, "Your attack missed!");
if (attackerTeam == null) {
war.badMsg(a, "You must join a team " +
this.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) {
war.badMsg(a, "Your target is not in a team.");
this.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) {
war.badMsg(a, "Your target is on your team.");
this.war.badMsg(a, "Your target is on your team.");
} else if (attackerWarzone != defenderWarzone) {
war.badMsg(a, "Your target is playing in another warzone.");
this.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
}
} else if (defender instanceof Player && event instanceof EntityDamageByProjectileEvent) {
// attacked by dispenser arrow most probably
// Detect death, prevent it and respawn the player
Player d = (Player) defender;
Warzone defenderWarzone = war.getPlayerTeamWarzone(d.getName());
Warzone defenderWarzone = this.war.getPlayerTeamWarzone(d.getName());
if (d != null && defenderWarzone != null && event.getDamage() >= d.getHealth()) {
defenderWarzone.handleDeath(d);
event.setCancelled(true);
@ -139,46 +140,48 @@ public class WarEntityListener extends EntityListener {
}
}
@Override
public void onEntityExplode(EntityExplodeEvent event) {
if (war.isLoaded()) {
if (this.war.isLoaded()) {
// protect zones elements, lobbies and warhub from creepers
List<Block> explodedBlocks = event.blockList();
for (Block block : explodedBlocks) {
if (war.getWarHub() != null && war.getWarHub().getVolume().contains(block)) {
if (this.war.getWarHub() != null && this.war.getWarHub().getVolume().contains(block)) {
event.setCancelled(true);
war.logInfo("Explosion prevented at warhub.");
this.war.logInfo("Explosion prevented at warhub.");
return;
}
for (Warzone zone : war.getWarzones()) {
for (Warzone zone : this.war.getWarzones()) {
if (zone.isImportantBlock(block)) {
event.setCancelled(true);
war.logInfo("Explosion prevented in zone " + zone.getName() + ".");
this.war.logInfo("Explosion prevented in zone " + zone.getName() + ".");
return;
} else if (zone.getLobby() != null && zone.getLobby().getVolume().contains(block)) {
event.setCancelled(true);
war.logInfo("Explosion prevented at zone " + zone.getName() + " lobby.");
this.war.logInfo("Explosion prevented at zone " + zone.getName() + " lobby.");
return;
}
}
}
}
}
@Override
public void onEntityDamage(EntityDamageEvent event) {
if (war.isLoaded()) {
if (this.war.isLoaded()) {
Entity entity = event.getEntity();
if (entity instanceof Player && war.getPlayerTeamWarzone(((Player) entity).getName()) != null) {
if (entity instanceof Player && this.war.getPlayerTeamWarzone(((Player) entity).getName()) != null) {
event.setCancelled(false);
}
if (event instanceof EntityDamageByEntityEvent ||
if (event instanceof EntityDamageByEntityEvent ||
event instanceof EntityDamageByProjectileEvent) {
handlerAttackDefend((EntityDamageByEntityEvent)event);
this.handlerAttackDefend((EntityDamageByEntityEvent)event);
} else {
// Detect death (from , prevent it and respawn the player
if (entity instanceof Player) {
Player player = (Player) entity;
Warzone zone = war.getPlayerTeamWarzone(player.getName());
Warzone zone = this.war.getPlayerTeamWarzone(player.getName());
if (zone != null && event.getDamage() >= player.getHealth()) {
zone.handleDeath(player);
event.setCancelled(true);
@ -188,12 +191,13 @@ public class WarEntityListener extends EntityListener {
}
}
@Override
public void onEntityCombust(EntityCombustEvent event) {
if (war.isLoaded()) {
if (this.war.isLoaded()) {
Entity entity = event.getEntity();
if (entity instanceof Player) {
Player player = (Player) entity;
Team team = war.getPlayerTeam(player.getName());
Team team = this.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!)
@ -201,30 +205,32 @@ public class WarEntityListener extends EntityListener {
net.minecraft.server.Entity playerEntity = ((CraftPlayer)player).getHandle();
playerEntity.fireTicks = 0;
}
event.setCancelled(true);
event.setCancelled(true);
}
}
}
}
@Override
public void onCreatureSpawn(CreatureSpawnEvent event) {
if (war.isLoaded()) {
if (this.war.isLoaded()) {
Location location = event.getLocation();
Warzone zone = war.warzone(location);
Warzone zone = this.war.warzone(location);
if (zone != null && zone.isNoCreatures()) {
event.setCancelled(true);
//war.logInfo("Prevented " + event.getMobType().getName() + " from spawning in zone " + zone.getName());
}
}
}
@Override
public void onEntityRegainHealth(EntityRegainHealthEvent event) {
if (war.isLoaded() && event.getRegainReason() == RegainReason.REGEN) {
if (this.war.isLoaded() && event.getRegainReason() == RegainReason.REGEN) {
Entity entity = event.getEntity();
if (entity instanceof Player) {
Player player = (Player) entity;
Location location = player.getLocation();
Warzone zone = war.warzone(location);
Warzone zone = this.war.warzone(location);
if (zone != null) {
event.setCancelled(true);
}

View File

@ -41,35 +41,37 @@ public class WarPlayerListener extends PlayerListener {
public WarPlayerListener(War war) {
this.war = war;
random = new Random();
this.random = new Random();
}
@Override
public void onPlayerQuit(PlayerQuitEvent event) {
if (war.isLoaded()) {
if (this.war.isLoaded()) {
Player player = event.getPlayer();
Team team = war.getPlayerTeam(player.getName());
Team team = this.war.getPlayerTeam(player.getName());
if (team != null) {
Warzone zone = war.getPlayerTeamWarzone(player.getName());
Warzone zone = this.war.getPlayerTeamWarzone(player.getName());
if (zone != null) {
zone.handlePlayerLeave(player, zone.getTeleport(), true);
}
}
if (war.isWandBearer(player)) {
war.removeWandBearer(player);
if (this.war.isWandBearer(player)) {
this.war.removeWandBearer(player);
}
}
}
@Override
public void onPlayerDropItem(PlayerDropItemEvent event) {
if (war.isLoaded()) {
if (this.war.isLoaded()) {
Player player = event.getPlayer();
Team team = war.getPlayerTeam(player.getName());
Team team = this.war.getPlayerTeam(player.getName());
if (team != null) {
Warzone zone = war.getPlayerTeamWarzone(player.getName());
Warzone zone = this.war.getPlayerTeamWarzone(player.getName());
if (zone.isFlagThief(player.getName())) {
// a flag thief can't drop his flag
war.badMsg(player, "Can't drop items while stealing flag. What are you doing?! Run!");
this.war.badMsg(player, "Can't drop items while stealing flag. What are you doing?! Run!");
event.setCancelled(true);
} else {
@ -80,36 +82,37 @@ public class WarPlayerListener extends PlayerListener {
&& itemStack.getType() == team.getKind().getMaterial()
&& itemStack.getData().getData() == team.getKind().getData()) {
// Can't drop your team's kind block
war.badMsg(player, "Can't drop " + team.getName() + " block blocks.");
this.war.badMsg(player, "Can't drop " + team.getName() + " block blocks.");
event.setCancelled(true);
return;
}
if (zone.isNearWall(player.getLocation()) && itemStack != null) {
war.badMsg(player, "Can't drop items near the zone border!");
this.war.badMsg(player, "Can't drop items near the zone border!");
event.setCancelled(true);
return;
}
}
}
}
if (war.isWandBearer(player)) {
if (this.war.isWandBearer(player)) {
Item item = event.getItemDrop();
if (item.getItemStack().getType() == Material.WOOD_SWORD) {
String zoneName = war.getWandBearerZone(player);
war.removeWandBearer(player);
war.msg(player, "You dropped the zone " + zoneName + " wand.");
String zoneName = this.war.getWandBearerZone(player);
this.war.removeWandBearer(player);
this.war.msg(player, "You dropped the zone " + zoneName + " wand.");
}
}
}
}
@Override
public void onPlayerPickupItem(PlayerPickupItemEvent event) {
if (war.isLoaded()) {
if (this.war.isLoaded()) {
Player player = event.getPlayer();
Team team = war.getPlayerTeam(player.getName());
Team team = this.war.getPlayerTeam(player.getName());
if (team != null) {
Warzone zone = war.getPlayerTeamWarzone(player.getName());
Warzone zone = this.war.getPlayerTeamWarzone(player.getName());
if (zone.isFlagThief(player.getName())) {
// a flag thief can't pick up anything
@ -134,11 +137,12 @@ public class WarPlayerListener extends PlayerListener {
}
}
@Override
public void onInventoryOpen(PlayerInventoryEvent event) {
if (war.isLoaded()) {
if (this.war.isLoaded()) {
Player player = event.getPlayer();
Inventory inventory = event.getInventory();
Team team = war.getPlayerTeam(player.getName());
Team team = this.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)
@ -147,20 +151,21 @@ public class WarPlayerListener extends PlayerListener {
if (playerInv.contains(teamKindBlock, 2)) {
playerInv.remove(teamKindBlock);
playerInv.addItem(teamKindBlock);
war.badMsg(player, "All that " + team.getName() + " must have been heavy!");
this.war.badMsg(player, "All that " + team.getName() + " must have been heavy!");
}
}
}
}
@Override
public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) {
if (war.isLoaded()) {
if (this.war.isLoaded()) {
Player player = event.getPlayer();
Team talkingPlayerTeam = war.getPlayerTeam(player.getName());
Team talkingPlayerTeam = this.war.getPlayerTeam(player.getName());
if (talkingPlayerTeam != null) {
String msg = event.getMessage();
String[] split = msg.split(" ");
if (!war.isZoneMaker(player) && split.length > 0 && split[0].startsWith("/")) {
if (!this.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")
@ -170,7 +175,7 @@ public class WarPlayerListener extends PlayerListener {
&& !command.equals("team")
&& !command.equals("warhub")
&& !command.equals("zonemaker")) {
war.badMsg(player, "Can't use anything but War commands (e.g. /leave, /warhub) while you're playing in a warzone.");
this.war.badMsg(player, "Can't use anything but War commands (e.g. /leave, /warhub) while you're playing in a warzone.");
event.setCancelled(true);
}
}
@ -178,33 +183,35 @@ public class WarPlayerListener extends PlayerListener {
}
}
@Override
public void onPlayerKick(PlayerKickEvent event) {
if (war.isLoaded()) {
if (this.war.isLoaded()) {
Player player = event.getPlayer();
String reason = event.getReason();
if (reason.contains("moved") || reason.contains("too quickly") || reason.contains("Hacking")) {
boolean inWarzone = war.inAnyWarzone(player.getLocation());
boolean inLobby = war.inAnyWarzone(player.getLocation());
boolean inWarzone = this.war.inAnyWarzone(player.getLocation());
boolean inLobby = this.war.inAnyWarzone(player.getLocation());
boolean inWarhub = false;
if (war.getWarHub() != null && war.getWarHub().getVolume().contains(player.getLocation())) {
if (this.war.getWarHub() != null && this.war.getWarHub().getVolume().contains(player.getLocation())) {
inWarhub = true;
}
if (inWarzone || inLobby || inWarhub) {
event.setCancelled(true);
war.logWarn("Prevented " + player.getName() + " from getting kicked.");
this.war.logWarn("Prevented " + player.getName() + " from getting kicked.");
}
}
}
}
@Override
public void onPlayerInteract(PlayerInteractEvent event) {
if (war.isLoaded()) {
if (this.war.isLoaded()) {
Player player = event.getPlayer();
if (player.getItemInHand().getType() == Material.WOOD_SWORD && war.isWandBearer(player)) {
String zoneName = war.getWandBearerZone(player);
ZoneSetter setter = new ZoneSetter(war, player, zoneName);
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 (event.getAction() == Action.LEFT_CLICK_AIR || event.getAction() == Action.LEFT_CLICK_AIR) {
war.badMsg(player, "Too far.");
this.war.badMsg(player, "Too far.");
} else if (event.getAction() == Action.LEFT_CLICK_BLOCK) {
setter.placeCorner1(event.getClickedBlock());
event.setUseItemInHand(Result.ALLOW);
@ -216,26 +223,27 @@ public class WarPlayerListener extends PlayerListener {
}
}
@Override
public void onPlayerMove(PlayerMoveEvent event) {
if (war.isLoaded()) {
if (this.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 = war.warzone(playerLoc);
locLobby = war.lobby(playerLoc);
boolean canPlay = war.canPlayWar(player);
boolean isMaker = war.isZoneMaker(player);
locZone = this.war.warzone(playerLoc);
locLobby = this.war.lobby(playerLoc);
boolean canPlay = this.war.canPlayWar(player);
boolean isMaker = this.war.isZoneMaker(player);
// Zone walls
Team currentTeam = war.getPlayerTeam(player.getName());
Warzone playerWarzone = war.getPlayerTeamWarzone(player.getName()); // this uses the teams, so it asks: get the player's team's warzone
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
boolean protecting = false;
if (currentTeam != null) {
//Warzone nearbyZone = war.zoneOfZoneWallAtProximity(playerLoc);
protecting = playerWarzone.protectZoneWallAgainstPlayer(player);
} else {
Warzone nearbyZone = war.zoneOfZoneWallAtProximity(playerLoc);
Warzone nearbyZone = this.war.zoneOfZoneWallAtProximity(playerLoc);
if (nearbyZone != null && !isMaker) {
protecting = nearbyZone.protectZoneWallAgainstPlayer(player);
}
@ -244,7 +252,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 : war.getWarzones()) {
for (Warzone zone : this.war.getWarzones()) {
zone.dropZoneWallGuardIfAny(player);
}
}
@ -252,15 +260,15 @@ public class WarPlayerListener extends PlayerListener {
// Warzone lobby gates
if (locLobby != null) {
Warzone zone = locLobby.getZone();
Team oldTeam = war.getPlayerTeam(player.getName());
Team oldTeam = this.war.getPlayerTeam(player.getName());
boolean isAutoAssignGate = false;
if (oldTeam == null && canPlay) { // trying to counter spammy player move
isAutoAssignGate = zone.getLobby().isAutoAssignGate(playerLoc);
if (isAutoAssignGate) {
if (zone.isDisabled()){
handleDisabledZone(event, player, zone);
this.handleDisabledZone(event, player, zone);
} else {
dropFromOldTeamIfAny(player);
this.dropFromOldTeamIfAny(player);
int noOfPlayers = 0;
for (Team t : zone.getTeams()) {
noOfPlayers += t.getPlayers().size();
@ -268,13 +276,13 @@ public class WarPlayerListener extends PlayerListener {
if (noOfPlayers < zone.getTeams().size() * zone.getTeamCap()) {
zone.autoAssign(player);
if (war.getWarHub() != null) {
war.getWarHub().resetZoneSign(zone);
if (this.war.getWarHub() != null) {
this.war.getWarHub().resetZoneSign(zone);
}
} else {
event.setTo(zone.getTeleport());
//player.teleport(zone.getTeleport());
war.badMsg(player, "All teams are full.");
this.war.badMsg(player, "All teams are full.");
}
}
return;
@ -283,35 +291,35 @@ public class WarPlayerListener extends PlayerListener {
// go through all the team gates
for (Team team : zone.getTeams()){
if (zone.getLobby().isInTeamGate(team, playerLoc)) {
dropFromOldTeamIfAny(player);
this.dropFromOldTeamIfAny(player);
if (zone.isDisabled()){
handleDisabledZone(event, player, zone);
this.handleDisabledZone(event, player, zone);
} else if (team.getPlayers().size() < zone.getTeamCap()) {
team.addPlayer(player);
team.resetSign();
if (war.getWarHub() != null) {
war.getWarHub().resetZoneSign(zone);
if (this.war.getWarHub() != null) {
this.war.getWarHub().resetZoneSign(zone);
}
zone.keepPlayerInventory(player);
war.msg(player, "Your inventory is in storage until you /leave.");
this.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());
war.badMsg(player, "Team " + team.getName() + " is full.");
this.war.badMsg(player, "Team " + team.getName() + " is full.");
}
return;
}
}
if (war.getWarHub() != null && zone.getLobby().isInWarHubLinkGate(playerLoc)
&& !war.getWarHub().getVolume().contains(player.getLocation())){
dropFromOldTeamIfAny(player);
event.setTo(war.getWarHub().getLocation());
if (this.war.getWarHub() != null && zone.getLobby().isInWarHubLinkGate(playerLoc)
&& !this.war.getWarHub().getVolume().contains(player.getLocation())){
this.dropFromOldTeamIfAny(player);
event.setTo(this.war.getWarHub().getLocation());
//player.teleport(war.getWarHub().getLocation());
war.msg(player, "Welcome to the War hub.");
this.war.msg(player, "Welcome to the War hub.");
return;
}
}
@ -319,19 +327,19 @@ public class WarPlayerListener extends PlayerListener {
}
// Warhub zone gates
WarHub hub = war.getWarHub();
WarHub hub = this.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());
war.msg(player, "Welcome to warzone " + zone.getName() + ".");
this.war.msg(player, "Welcome to warzone " + zone.getName() + ".");
return;
}
}
boolean isLeaving = playerWarzone != null && playerWarzone.getLobby().isLeavingZone(playerLoc);
Team playerTeam = war.getPlayerTeam(player.getName());
Team playerTeam = this.war.getPlayerTeam(player.getName());
if (isLeaving) { // already in a team and in warzone, leaving
// same as leave
if (playerTeam != null) {
@ -350,7 +358,7 @@ public class WarPlayerListener extends PlayerListener {
if (locZone == null && playerTeam != null && playerWarzone.getLobby() != null
&& !playerWarzone.getLobby().getVolume().contains(playerLoc)
&& !isLeaving) {
war.badMsg(player, "Use /leave to exit the zone.");
this.war.badMsg(player, "Use /leave to exit the zone.");
event.setTo(playerTeam.getTeamSpawn());
return;
}
@ -360,21 +368,26 @@ public class WarPlayerListener extends PlayerListener {
&& playerWarzone.nearAnyOwnedMonument(playerLoc, playerTeam)
&& player.getHealth() < 20
&& player.getHealth() > 0 // don't heal the dead
&& random.nextInt(77) == 3 ) { // one chance out of many of getting healed
&& this.random.nextInt(77) == 3 ) { // one chance out of many of getting healed
int currentHp = player.getHealth();
int newHp = currentHp + locZone.getMonumentHeal();
if (newHp > 20) newHp = 20;
if (newHp > 20) {
newHp = 20;
}
player.setHealth(newHp);
String isS = "s"; // no 's' in 'hearts' when it's just one heart
if (newHp-currentHp==2) isS="";
if (newHp-currentHp==2) {
isS="";
}
String heartNum = ""; // since (newHp-currentHp)/2 won't give the right amount
if (newHp-currentHp==2)
heartNum="1 ";
else if (newHp-currentHp%2==0) // for some reason
heartNum=((newHp-currentHp)/2)+" ";
else
heartNum=((newHp-currentHp-1)/2)+".5 ";
war.msg(player, "Your dance pleases the monument's voodoo. You gain "+heartNum+"heart"+isS+"!");
if (newHp-currentHp==2) {
heartNum="1 ";
} else if (newHp-currentHp%2==0) {
heartNum=((newHp-currentHp)/2)+" ";
} else {
heartNum=((newHp-currentHp-1)/2)+".5 ";
}
this.war.msg(player, "Your dance pleases the monument's voodoo. You gain "+heartNum+"heart"+isS+"!");
return;
}
@ -383,7 +396,7 @@ public class WarPlayerListener extends PlayerListener {
&& (playerTeam.getSpawnVolume().contains(player.getLocation())
|| (playerTeam.getFlagVolume() != null && playerTeam.getFlagVolume().contains(player.getLocation())))) {
if (playerWarzone.isTeamFlagStolen(playerTeam)) {
war.badMsg(player, "You can't capture the enemy flag until your team's flag is returned.");
this.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
@ -416,10 +429,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 = war.warzone(playerLoc);
Warzone zone = this.war.warzone(playerLoc);
event.setTo(zone.getTeleport());
//player.teleport(zone.getTeleport());
war.badMsg(player, "You can't be inside a warzone without a team.");
this.war.badMsg(player, "You can't be inside a warzone without a team.");
return;
}
}
@ -427,25 +440,25 @@ public class WarPlayerListener extends PlayerListener {
private void handleDisabledZone(PlayerMoveEvent event, Player player, Warzone zone) {
if (zone.getLobby() != null) {
war.badMsg(player, "This warzone is disabled.");
this.war.badMsg(player, "This warzone is disabled.");
event.setTo(zone.getTeleport());
}
}
private void dropFromOldTeamIfAny(Player player) {
// drop from old team if any
Team previousTeam = war.getPlayerTeam(player.getName());
Team previousTeam = this.war.getPlayerTeam(player.getName());
if (previousTeam != null) {
if (!previousTeam.removePlayer(player.getName())){
war.logWarn("Could not remove player " + player.getName() + " from team " + previousTeam.getName());
this.war.logWarn("Could not remove player " + player.getName() + " from team " + previousTeam.getName());
}
}
}
public String getAllTeamsMsg(Player player){
String teamsMessage = "Teams: ";
Warzone warzone = war.warzone(player.getLocation());
ZoneLobby lobby = war.lobby(player.getLocation());
Warzone warzone = this.war.warzone(player.getLocation());
ZoneLobby lobby = this.war.lobby(player.getLocation());
if (warzone == null && lobby != null) {
warzone = lobby.getZone();
} else {

View File

@ -10,156 +10,154 @@ import bukkit.tommytony.war.War;
import com.tommytony.war.volumes.Volume;
/**
*
*
* @author tommytony
*
*/
public class Monument {
private Location location;
private Volume volume;
private Team ownerTeam = null;
private final String name;
private Warzone warzone;
public Monument(String name, War war, Warzone warzone, Location location) {
this.name = name;
this.location = location;
this.warzone = warzone;
volume = new Volume(name, war, warzone.getWorld());
this.volume = new Volume(name, war, warzone.getWorld());
this.setLocation(location);
this.addMonumentBlocks();
}
public void addMonumentBlocks() {
this.volume.setToMaterial(Material.AIR);
this.ownerTeam = null;
int x = location.getBlockX();
int y = location.getBlockY();
int z = location.getBlockZ();
int x = this.location.getBlockX();
int y = this.location.getBlockY();
int z = this.location.getBlockZ();
// center
warzone.getWorld().getBlockAt(x, y-1, z).getState().setType(Material.OBSIDIAN);
this.warzone.getWorld().getBlockAt(x, y-1, z).getState().setType(Material.OBSIDIAN);
// inner ring
warzone.getWorld().getBlockAt(x+1, y-1, z+1).setType(Material.OBSIDIAN);
warzone.getWorld().getBlockAt(x+1, y-1, z).setType(Material.OBSIDIAN);
warzone.getWorld().getBlockAt(x+1, y-1, z-1).setType(Material.OBSIDIAN);
warzone.getWorld().getBlockAt(x, y-1, z+1).setType(Material.OBSIDIAN);
warzone.getWorld().getBlockAt(x, y-1, z-1).setType(Material.OBSIDIAN);
warzone.getWorld().getBlockAt(x-1, y-1, z+1).setType(Material.OBSIDIAN);
warzone.getWorld().getBlockAt(x-1, y-1, z).setType(Material.OBSIDIAN);
warzone.getWorld().getBlockAt(x-1, y-1, z-1).setType(Material.OBSIDIAN);
this.warzone.getWorld().getBlockAt(x+1, y-1, z+1).setType(Material.OBSIDIAN);
this.warzone.getWorld().getBlockAt(x+1, y-1, z).setType(Material.OBSIDIAN);
this.warzone.getWorld().getBlockAt(x+1, y-1, z-1).setType(Material.OBSIDIAN);
this.warzone.getWorld().getBlockAt(x, y-1, z+1).setType(Material.OBSIDIAN);
this.warzone.getWorld().getBlockAt(x, y-1, z-1).setType(Material.OBSIDIAN);
this.warzone.getWorld().getBlockAt(x-1, y-1, z+1).setType(Material.OBSIDIAN);
this.warzone.getWorld().getBlockAt(x-1, y-1, z).setType(Material.OBSIDIAN);
this.warzone.getWorld().getBlockAt(x-1, y-1, z-1).setType(Material.OBSIDIAN);
// outer ring
warzone.getWorld().getBlockAt(x+2, y-1, z+2).setType(Material.GLOWSTONE);
warzone.getWorld().getBlockAt(x+2, y-1, z+1).setType(Material.OBSIDIAN);
warzone.getWorld().getBlockAt(x+2, y-1, z).setType(Material.OBSIDIAN);
warzone.getWorld().getBlockAt(x+2, y-1, z-1).setType(Material.OBSIDIAN);
warzone.getWorld().getBlockAt(x+2, y-1, z-2).setType(Material.GLOWSTONE);
warzone.getWorld().getBlockAt(x-1, y-1, z+2).setType(Material.OBSIDIAN);
warzone.getWorld().getBlockAt(x-1, y-1, z-2).setType(Material.OBSIDIAN);
warzone.getWorld().getBlockAt(x, y-1, z+2).setType(Material.OBSIDIAN);
warzone.getWorld().getBlockAt(x, y-1, z-2).setType(Material.OBSIDIAN);
warzone.getWorld().getBlockAt(x+1, y-1, z+2).setType(Material.OBSIDIAN);
warzone.getWorld().getBlockAt(x+1, y-1, z-2).setType(Material.OBSIDIAN);
warzone.getWorld().getBlockAt(x-2, y-1, z+2).setType(Material.GLOWSTONE);
warzone.getWorld().getBlockAt(x-2, y-1, z+1).setType(Material.OBSIDIAN);
warzone.getWorld().getBlockAt(x-2, y-1, z).setType(Material.OBSIDIAN);
warzone.getWorld().getBlockAt(x-2, y-1, z-1).setType(Material.OBSIDIAN);
warzone.getWorld().getBlockAt(x-2, y-1, z-2).setType(Material.GLOWSTONE);
this.warzone.getWorld().getBlockAt(x+2, y-1, z+2).setType(Material.GLOWSTONE);
this.warzone.getWorld().getBlockAt(x+2, y-1, z+1).setType(Material.OBSIDIAN);
this.warzone.getWorld().getBlockAt(x+2, y-1, z).setType(Material.OBSIDIAN);
this.warzone.getWorld().getBlockAt(x+2, y-1, z-1).setType(Material.OBSIDIAN);
this.warzone.getWorld().getBlockAt(x+2, y-1, z-2).setType(Material.GLOWSTONE);
this.warzone.getWorld().getBlockAt(x-1, y-1, z+2).setType(Material.OBSIDIAN);
this.warzone.getWorld().getBlockAt(x-1, y-1, z-2).setType(Material.OBSIDIAN);
this.warzone.getWorld().getBlockAt(x, y-1, z+2).setType(Material.OBSIDIAN);
this.warzone.getWorld().getBlockAt(x, y-1, z-2).setType(Material.OBSIDIAN);
this.warzone.getWorld().getBlockAt(x+1, y-1, z+2).setType(Material.OBSIDIAN);
this.warzone.getWorld().getBlockAt(x+1, y-1, z-2).setType(Material.OBSIDIAN);
this.warzone.getWorld().getBlockAt(x-2, y-1, z+2).setType(Material.GLOWSTONE);
this.warzone.getWorld().getBlockAt(x-2, y-1, z+1).setType(Material.OBSIDIAN);
this.warzone.getWorld().getBlockAt(x-2, y-1, z).setType(Material.OBSIDIAN);
this.warzone.getWorld().getBlockAt(x-2, y-1, z-1).setType(Material.OBSIDIAN);
this.warzone.getWorld().getBlockAt(x-2, y-1, z-2).setType(Material.GLOWSTONE);
// block holder
warzone.getWorld().getBlockAt(x, y, z).setType(Material.OBSIDIAN);
warzone.getWorld().getBlockAt(x, y, z-1).setType(Material.OBSIDIAN);
warzone.getWorld().getBlockAt(x, y, z+1).setType(Material.OBSIDIAN);
warzone.getWorld().getBlockAt(x, y+1, z-1).setType(Material.OBSIDIAN);
warzone.getWorld().getBlockAt(x, y+1, z+1).setType(Material.OBSIDIAN);
warzone.getWorld().getBlockAt(x, y+2, z).setType(Material.OBSIDIAN);
warzone.getWorld().getBlockAt(x, y+2, z-1).setType(Material.OBSIDIAN);
warzone.getWorld().getBlockAt(x, y+2, z+1).setType(Material.OBSIDIAN);
this.warzone.getWorld().getBlockAt(x, y, z).setType(Material.OBSIDIAN);
this.warzone.getWorld().getBlockAt(x, y, z-1).setType(Material.OBSIDIAN);
this.warzone.getWorld().getBlockAt(x, y, z+1).setType(Material.OBSIDIAN);
this.warzone.getWorld().getBlockAt(x, y+1, z-1).setType(Material.OBSIDIAN);
this.warzone.getWorld().getBlockAt(x, y+1, z+1).setType(Material.OBSIDIAN);
this.warzone.getWorld().getBlockAt(x, y+2, z).setType(Material.OBSIDIAN);
this.warzone.getWorld().getBlockAt(x, y+2, z-1).setType(Material.OBSIDIAN);
this.warzone.getWorld().getBlockAt(x, y+2, z+1).setType(Material.OBSIDIAN);
}
public boolean isNear(Location playerLocation) {
int x = location.getBlockX();
int y = location.getBlockY();
int z = location.getBlockZ();
int playerX = (int)playerLocation.getBlockX();
int playerY = (int)playerLocation.getBlockY();
int playerZ = (int)playerLocation.getBlockZ();
int x = this.location.getBlockX();
int y = this.location.getBlockY();
int z = this.location.getBlockZ();
int playerX = playerLocation.getBlockX();
int playerY = playerLocation.getBlockY();
int playerZ = playerLocation.getBlockZ();
int diffX = Math.abs(playerX - x);
int diffY = Math.abs(playerY - y);
int diffZ = Math.abs(playerZ - z);
if (diffX < 6 && diffY < 6 && diffZ < 6) {
return true;
}
if (diffX < 6 && diffY < 6 && diffZ < 6)
return true;
return false;
}
public boolean isOwner(Team team) {
if (team == ownerTeam) {
return true;
}
if (team == this.ownerTeam)
return true;
return false;
}
public boolean hasOwner() {
return ownerTeam != null;
return this.ownerTeam != null;
}
public void capture(Team team) {
ownerTeam = team;
this.ownerTeam = team;
}
public void uncapture() {
ownerTeam = null;
this.ownerTeam = null;
}
public Location getLocation() {
return location;
return this.location;
}
public void setOwnerTeam(Team team) {
this.ownerTeam = team;
}
public String getName() {
return name;
return this.name;
}
public void setLocation(Location location) {
Block locationBlock = warzone.getWorld().getBlockAt(location.getBlockX(), location.getBlockY(), location.getBlockZ());
volume.setCornerOne(locationBlock.getFace(BlockFace.DOWN).getFace(BlockFace.EAST, 2).getFace(BlockFace.SOUTH, 2));
volume.setCornerTwo(locationBlock.getFace(BlockFace.UP, 2).getFace(BlockFace.WEST, 2).getFace(BlockFace.NORTH, 2));
volume.saveBlocks();
public void setLocation(Location location) {
Block locationBlock = this.warzone.getWorld().getBlockAt(location.getBlockX(), location.getBlockY(), location.getBlockZ());
this.volume.setCornerOne(locationBlock.getFace(BlockFace.DOWN).getFace(BlockFace.EAST, 2).getFace(BlockFace.SOUTH, 2));
this.volume.setCornerTwo(locationBlock.getFace(BlockFace.UP, 2).getFace(BlockFace.WEST, 2).getFace(BlockFace.NORTH, 2));
this.volume.saveBlocks();
this.location = location;
this.addMonumentBlocks();
}
public Volume getVolume() {
return volume;
return this.volume;
}
public void setVolume(Volume newVolume) {
this.volume = newVolume;
}
public Team getOwnerTeam() {
return ownerTeam;
}
return this.ownerTeam;
}
}

View File

@ -15,7 +15,7 @@ import com.tommytony.war.utils.SignHelper;
import com.tommytony.war.volumes.Volume;
/**
*
*
* @author tommytony
*
*/
@ -31,7 +31,7 @@ public class Team {
private final Warzone warzone;
private TeamKind kind;
private War war;
public Team(String name, TeamKind kind, Location teamSpawn, War war, Warzone warzone) {
this.warzone = warzone;
this.setName(name);
@ -41,69 +41,71 @@ public class Team {
this.kind = kind;
this.setFlagVolume(null); // no flag at the start
}
public TeamKind getKind() {
return kind;
}
private void setSpawnVolume() {
if (spawnVolume.isSaved()) spawnVolume.resetBlocks();
int x = teamSpawn.getBlockX();
int y = teamSpawn.getBlockY();
int z = teamSpawn.getBlockZ();
if (warzone.getSpawnStyle().equals(TeamSpawnStyles.INVISIBLE)) {
this.spawnVolume.setCornerOne(warzone.getWorld().getBlockAt(x, y-1, z));
this.spawnVolume.setCornerTwo(warzone.getWorld().getBlockAt(x, y+3, z));
} else if (warzone.getSpawnStyle().equals(TeamSpawnStyles.SMALL)) {
this.spawnVolume.setCornerOne(warzone.getWorld().getBlockAt(x-1, y-1, z-1));
this.spawnVolume.setCornerTwo(warzone.getWorld().getBlockAt(x+1, y+3, z+1));
public TeamKind getKind() {
return this.kind;
}
private void setSpawnVolume() {
if (this.spawnVolume.isSaved()) {
this.spawnVolume.resetBlocks();
}
int x = this.teamSpawn.getBlockX();
int y = this.teamSpawn.getBlockY();
int z = this.teamSpawn.getBlockZ();
if (this.warzone.getSpawnStyle().equals(TeamSpawnStyles.INVISIBLE)) {
this.spawnVolume.setCornerOne(this.warzone.getWorld().getBlockAt(x, y-1, z));
this.spawnVolume.setCornerTwo(this.warzone.getWorld().getBlockAt(x, y+3, z));
} else if (this.warzone.getSpawnStyle().equals(TeamSpawnStyles.SMALL)) {
this.spawnVolume.setCornerOne(this.warzone.getWorld().getBlockAt(x-1, y-1, z-1));
this.spawnVolume.setCornerTwo(this.warzone.getWorld().getBlockAt(x+1, y+3, z+1));
} else {
// flat or big
this.spawnVolume.setCornerOne(warzone.getWorld().getBlockAt(x-2, y-1, z-2));
this.spawnVolume.setCornerTwo(warzone.getWorld().getBlockAt(x+2, y+3, z+2));
this.spawnVolume.setCornerOne(this.warzone.getWorld().getBlockAt(x-2, y-1, z-2));
this.spawnVolume.setCornerTwo(this.warzone.getWorld().getBlockAt(x+2, y+3, z+2));
}
}
@SuppressWarnings("unused")
public void initializeTeamSpawn() {
// make air
this.spawnVolume.setToMaterial(Material.AIR);
// Set the spawn
int x = teamSpawn.getBlockX();
int y = teamSpawn.getBlockY();
int z = teamSpawn.getBlockZ();
if (warzone.getSpawnStyle().equals(TeamSpawnStyles.INVISIBLE)) {
// Set the spawn
int x = this.teamSpawn.getBlockX();
int y = this.teamSpawn.getBlockY();
int z = this.teamSpawn.getBlockZ();
if (this.warzone.getSpawnStyle().equals(TeamSpawnStyles.INVISIBLE)) {
// nothing but glowstone
warzone.getWorld().getBlockAt(x, y-1, z).setType(Material.GLOWSTONE);
this.warzone.getWorld().getBlockAt(x, y-1, z).setType(Material.GLOWSTONE);
} else {
// first ring
setBlock(x+1, y-1, z+1, kind);
setBlock(x+1, y-1, z, kind);
setBlock(x+1, y-1, z-1, kind);
setBlock(x, y-1, z+1, kind);
warzone.getWorld().getBlockAt(x, y-1, z).setType(Material.GLOWSTONE);
setBlock(x, y-1, z-1, kind);
setBlock(x-1, y-1, z+1, kind);
setBlock(x-1, y-1, z, kind);
setBlock(x-1, y-1, z-1, kind);
this.setBlock(x+1, y-1, z+1, this.kind);
this.setBlock(x+1, y-1, z, this.kind);
this.setBlock(x+1, y-1, z-1, this.kind);
this.setBlock(x, y-1, z+1, this.kind);
this.warzone.getWorld().getBlockAt(x, y-1, z).setType(Material.GLOWSTONE);
this.setBlock(x, y-1, z-1, this.kind);
this.setBlock(x-1, y-1, z+1, this.kind);
this.setBlock(x-1, y-1, z, this.kind);
this.setBlock(x-1, y-1, z-1, this.kind);
}
// Orientation
int yaw = 0;
if (teamSpawn.getYaw() >= 0){
yaw = (int)(teamSpawn.getYaw() % 360);
if (this.teamSpawn.getYaw() >= 0){
yaw = (int)(this.teamSpawn.getYaw() % 360);
} else {
yaw = (int)(360 + (teamSpawn.getYaw() % 360));
yaw = (int)(360 + (this.teamSpawn.getYaw() % 360));
}
Block signBlock = null;
int signData = 0;
if (warzone.getSpawnStyle().equals(TeamSpawnStyles.INVISIBLE)){
if (this.warzone.getSpawnStyle().equals(TeamSpawnStyles.INVISIBLE)){
// INVISIBLE style
signBlock = warzone.getWorld().getBlockAt(x, y, z);
signBlock = this.warzone.getWorld().getBlockAt(x, y, z);
if (yaw >= 0 && yaw < 90) {
signData = 10;
}else if (yaw >= 90 && yaw <= 180) {
@ -113,234 +115,234 @@ public class Team {
} else if (yaw >= 270 && yaw <= 360) {
signData = 6;
}
} else if (warzone.getSpawnStyle().equals(TeamSpawnStyles.SMALL)){
} else if (this.warzone.getSpawnStyle().equals(TeamSpawnStyles.SMALL)){
// SMALL style
if (yaw >= 0 && yaw < 90) {
signData = 10;
signBlock = warzone.getWorld().getBlockAt(x, y, z).getFace(BlockFace.NORTH).getFace(BlockFace.WEST);
signBlock = this.warzone.getWorld().getBlockAt(x, y, z).getFace(BlockFace.NORTH).getFace(BlockFace.WEST);
}else if (yaw >= 90 && yaw <= 180) {
signData = 14;
signBlock = warzone.getWorld().getBlockAt(x, y, z).getFace(BlockFace.NORTH).getFace(BlockFace.EAST);
signBlock = this.warzone.getWorld().getBlockAt(x, y, z).getFace(BlockFace.NORTH).getFace(BlockFace.EAST);
} else if (yaw >= 180 && yaw < 270) {
signData = 2;
signBlock = warzone.getWorld().getBlockAt(x, y, z).getFace(BlockFace.SOUTH).getFace(BlockFace.EAST);
signBlock = this.warzone.getWorld().getBlockAt(x, y, z).getFace(BlockFace.SOUTH).getFace(BlockFace.EAST);
} else if (yaw >= 270 && yaw <= 360) {
signData = 6;
signBlock = warzone.getWorld().getBlockAt(x, y, z).getFace(BlockFace.SOUTH).getFace(BlockFace.WEST);
signBlock = this.warzone.getWorld().getBlockAt(x, y, z).getFace(BlockFace.SOUTH).getFace(BlockFace.WEST);
}
} else {
// outer ring (FLAT or BIG)
setBlock(x+2, y-1, z+2, kind);
setBlock(x+2, y-1, z+1, kind);
setBlock(x+2, y-1, z, kind);
setBlock(x+2, y-1, z-1, kind);
setBlock(x+2, y-1, z-2, kind);
setBlock(x-1, y-1, z+2, kind);
setBlock(x-1, y-1, z-2, kind);
setBlock(x, y-1, z+2, kind);
setBlock(x, y-1, z-2, kind);
setBlock(x+1, y-1, z+2, kind);
setBlock(x+1, y-1, z-2, kind);
setBlock(x-2, y-1, z+2, kind);
setBlock(x-2, y-1, z+1, kind);
setBlock(x-2, y-1, z, kind);
setBlock(x-2, y-1, z-1, kind);
setBlock(x-2, y-1, z-2, kind);
this.setBlock(x+2, y-1, z+2, this.kind);
this.setBlock(x+2, y-1, z+1, this.kind);
this.setBlock(x+2, y-1, z, this.kind);
this.setBlock(x+2, y-1, z-1, this.kind);
this.setBlock(x+2, y-1, z-2, this.kind);
this.setBlock(x-1, y-1, z+2, this.kind);
this.setBlock(x-1, y-1, z-2, this.kind);
this.setBlock(x, y-1, z+2, this.kind);
this.setBlock(x, y-1, z-2, this.kind);
this.setBlock(x+1, y-1, z+2, this.kind);
this.setBlock(x+1, y-1, z-2, this.kind);
this.setBlock(x-2, y-1, z+2, this.kind);
this.setBlock(x-2, y-1, z+1, this.kind);
this.setBlock(x-2, y-1, z, this.kind);
this.setBlock(x-2, y-1, z-1, this.kind);
this.setBlock(x-2, y-1, z-2, this.kind);
BlockFace facing = null;
BlockFace opposite = null;
if (yaw >= 0 && yaw < 90) {
facing = BlockFace.NORTH_WEST;
opposite = BlockFace.SOUTH_EAST;
signData = 10;
signBlock = warzone.getWorld().getBlockAt(x, y, z).getFace(BlockFace.NORTH, 2).getFace(BlockFace.WEST, 2);
if (warzone.getSpawnStyle().equals(TeamSpawnStyles.BIG)) {
signBlock = this.warzone.getWorld().getBlockAt(x, y, z).getFace(BlockFace.NORTH, 2).getFace(BlockFace.WEST, 2);
if (this.warzone.getSpawnStyle().equals(TeamSpawnStyles.BIG)) {
// rim
setBlock(x-2, y, z-1, kind);
setBlock(x-2, y, z-2, kind);
setBlock(x-1, y, z-2, kind);
setBlock(x, y, z-2, kind);
setBlock(x+1, y, z-2, kind);
setBlock(x+2, y, z-2, kind);
setBlock(x+2, y, z-1, kind);
setBlock(x+2, y, z, kind);
setBlock(x+2, y, z+1, kind);
setBlock(x+2, y, z+2, kind);
setBlock(x+1, y, z+2, kind);
this.setBlock(x-2, y, z-1, this.kind);
this.setBlock(x-2, y, z-2, this.kind);
this.setBlock(x-1, y, z-2, this.kind);
this.setBlock(x, y, z-2, this.kind);
this.setBlock(x+1, y, z-2, this.kind);
this.setBlock(x+2, y, z-2, this.kind);
this.setBlock(x+2, y, z-1, this.kind);
this.setBlock(x+2, y, z, this.kind);
this.setBlock(x+2, y, z+1, this.kind);
this.setBlock(x+2, y, z+2, this.kind);
this.setBlock(x+1, y, z+2, this.kind);
// tower
setBlock(x, y+1, z-2, kind);
setBlock(x+1, y+1, z-2, kind);
setBlock(x+2, y+1, z-2, kind);
setBlock(x+2, y+1, z-1, kind);
setBlock(x+2, y+1, z, kind);
setBlock(x+1, y+2, z-2, kind);
setBlock(x+2, y+2, z-2, kind);
setBlock(x+2, y+2, z-1, kind);
setBlock(x+2, y+3, z-2, kind);
this.setBlock(x, y+1, z-2, this.kind);
this.setBlock(x+1, y+1, z-2, this.kind);
this.setBlock(x+2, y+1, z-2, this.kind);
this.setBlock(x+2, y+1, z-1, this.kind);
this.setBlock(x+2, y+1, z, this.kind);
this.setBlock(x+1, y+2, z-2, this.kind);
this.setBlock(x+2, y+2, z-2, this.kind);
this.setBlock(x+2, y+2, z-1, this.kind);
this.setBlock(x+2, y+3, z-2, this.kind);
}
} else if (yaw >= 90 && yaw <= 180) {
facing = BlockFace.NORTH_EAST;
opposite = BlockFace.SOUTH_WEST;
signData = 14;
signBlock = warzone.getWorld().getBlockAt(x, y, z).getFace(BlockFace.NORTH, 2).getFace(BlockFace.EAST, 2);
if (warzone.getSpawnStyle().equals(TeamSpawnStyles.BIG)) {
signBlock = this.warzone.getWorld().getBlockAt(x, y, z).getFace(BlockFace.NORTH, 2).getFace(BlockFace.EAST, 2);
if (this.warzone.getSpawnStyle().equals(TeamSpawnStyles.BIG)) {
// rim
setBlock(x+1, y, z-2, kind);
setBlock(x+2, y, z-2, kind);
setBlock(x+2, y, z-1, kind);
setBlock(x+2, y, z, kind);
setBlock(x+2, y, z+1, kind);
setBlock(x+2, y, z+2, kind);
setBlock(x+1, y, z+2, kind);
setBlock(x, y, z+2, kind);
setBlock(x-1, y, z+2, kind);
setBlock(x-2, y, z+2, kind);
setBlock(x-2, y, z+1, kind);
this.setBlock(x+1, y, z-2, this.kind);
this.setBlock(x+2, y, z-2, this.kind);
this.setBlock(x+2, y, z-1, this.kind);
this.setBlock(x+2, y, z, this.kind);
this.setBlock(x+2, y, z+1, this.kind);
this.setBlock(x+2, y, z+2, this.kind);
this.setBlock(x+1, y, z+2, this.kind);
this.setBlock(x, y, z+2, this.kind);
this.setBlock(x-1, y, z+2, this.kind);
this.setBlock(x-2, y, z+2, this.kind);
this.setBlock(x-2, y, z+1, this.kind);
// tower
setBlock(x+2, y+1, z, kind);
setBlock(x+2, y+1, z+1, kind);
setBlock(x+2, y+1, z+2, kind);
setBlock(x+1, y+1, z+2, kind);
setBlock(x, y+1, z+2, kind);
setBlock(x+2, y+2, z+1, kind);
setBlock(x+2, y+2, z+2, kind);
setBlock(x+1, y+2, z+2, kind);
setBlock(x+2, y+3, z+2, kind);
this.setBlock(x+2, y+1, z, this.kind);
this.setBlock(x+2, y+1, z+1, this.kind);
this.setBlock(x+2, y+1, z+2, this.kind);
this.setBlock(x+1, y+1, z+2, this.kind);
this.setBlock(x, y+1, z+2, this.kind);
this.setBlock(x+2, y+2, z+1, this.kind);
this.setBlock(x+2, y+2, z+2, this.kind);
this.setBlock(x+1, y+2, z+2, this.kind);
this.setBlock(x+2, y+3, z+2, this.kind);
}
} else if (yaw >= 180 && yaw < 270) {
facing = BlockFace.SOUTH_EAST;
opposite = BlockFace.NORTH_WEST;
signData = 2;
signBlock = warzone.getWorld().getBlockAt(x, y, z).getFace(BlockFace.SOUTH, 2).getFace(BlockFace.EAST, 2);
if (warzone.getSpawnStyle().equals(TeamSpawnStyles.BIG)) {
signBlock = this.warzone.getWorld().getBlockAt(x, y, z).getFace(BlockFace.SOUTH, 2).getFace(BlockFace.EAST, 2);
if (this.warzone.getSpawnStyle().equals(TeamSpawnStyles.BIG)) {
// rim
setBlock(x+2, y, z+1, kind);
setBlock(x+2, y, z+2, kind);
setBlock(x+1, y, z+2, kind);
setBlock(x, y, z+2, kind);
setBlock(x-1, y, z+2, kind);
setBlock(x-2, y, z+2, kind);
setBlock(x-2, y, z+1, kind);
setBlock(x-2, y, z, kind);
setBlock(x-2, y, z-1, kind);
setBlock(x-2, y, z-2, kind);
setBlock(x-1, y, z-2, kind);
this.setBlock(x+2, y, z+1, this.kind);
this.setBlock(x+2, y, z+2, this.kind);
this.setBlock(x+1, y, z+2, this.kind);
this.setBlock(x, y, z+2, this.kind);
this.setBlock(x-1, y, z+2, this.kind);
this.setBlock(x-2, y, z+2, this.kind);
this.setBlock(x-2, y, z+1, this.kind);
this.setBlock(x-2, y, z, this.kind);
this.setBlock(x-2, y, z-1, this.kind);
this.setBlock(x-2, y, z-2, this.kind);
this.setBlock(x-1, y, z-2, this.kind);
// tower
setBlock(x, y+1, z+2, kind);
setBlock(x-1, y+1, z+2, kind);
setBlock(x-2, y+1, z+2, kind);
setBlock(x-2, y+1, z+1, kind);
setBlock(x-2, y+1, z, kind);
setBlock(x-1, y+2, z+2, kind);
setBlock(x-2, y+2, z+2, kind);
setBlock(x-2, y+2, z+1, kind);
setBlock(x-2, y+3, z+2, kind);
this.setBlock(x, y+1, z+2, this.kind);
this.setBlock(x-1, y+1, z+2, this.kind);
this.setBlock(x-2, y+1, z+2, this.kind);
this.setBlock(x-2, y+1, z+1, this.kind);
this.setBlock(x-2, y+1, z, this.kind);
this.setBlock(x-1, y+2, z+2, this.kind);
this.setBlock(x-2, y+2, z+2, this.kind);
this.setBlock(x-2, y+2, z+1, this.kind);
this.setBlock(x-2, y+3, z+2, this.kind);
}
} else if (yaw >= 270 && yaw <= 360) {
facing = BlockFace.SOUTH_WEST;
opposite = BlockFace.NORTH_EAST;
signData = 6;
signBlock = warzone.getWorld().getBlockAt(x, y, z).getFace(BlockFace.SOUTH, 2).getFace(BlockFace.WEST, 2);
if (warzone.getSpawnStyle().equals(TeamSpawnStyles.BIG)) {
signBlock = this.warzone.getWorld().getBlockAt(x, y, z).getFace(BlockFace.SOUTH, 2).getFace(BlockFace.WEST, 2);
if (this.warzone.getSpawnStyle().equals(TeamSpawnStyles.BIG)) {
// rim
setBlock(x-1, y, z+2, kind);
setBlock(x-2, y, z+2, kind);
setBlock(x-2, y, z+1, kind);
setBlock(x-2, y, z, kind);
setBlock(x-2, y, z-1, kind);
setBlock(x-2, y, z-2, kind);
setBlock(x-1, y, z-2, kind);
setBlock(x, y, z-2, kind);
setBlock(x+1, y, z-2, kind);
setBlock(x+2, y, z-2, kind);
setBlock(x+2, y, z-1, kind);
this.setBlock(x-1, y, z+2, this.kind);
this.setBlock(x-2, y, z+2, this.kind);
this.setBlock(x-2, y, z+1, this.kind);
this.setBlock(x-2, y, z, this.kind);
this.setBlock(x-2, y, z-1, this.kind);
this.setBlock(x-2, y, z-2, this.kind);
this.setBlock(x-1, y, z-2, this.kind);
this.setBlock(x, y, z-2, this.kind);
this.setBlock(x+1, y, z-2, this.kind);
this.setBlock(x+2, y, z-2, this.kind);
this.setBlock(x+2, y, z-1, this.kind);
// tower
setBlock(x-2, y+1, z, kind);
setBlock(x-2, y+1, z-1, kind);
setBlock(x-2, y+1, z-2, kind);
setBlock(x-1, y+1, z-2, kind);
setBlock(x, y+1, z-2, kind);
setBlock(x-2, y+2, z-1, kind);
setBlock(x-2, y+2, z-2, kind);
setBlock(x-1, y+2, z-2, kind);
setBlock(x-2, y+3, z-2, kind);
this.setBlock(x-2, y+1, z, this.kind);
this.setBlock(x-2, y+1, z-1, this.kind);
this.setBlock(x-2, y+1, z-2, this.kind);
this.setBlock(x-1, y+1, z-2, this.kind);
this.setBlock(x, y+1, z-2, this.kind);
this.setBlock(x-2, y+2, z-1, this.kind);
this.setBlock(x-2, y+2, z-2, this.kind);
this.setBlock(x-1, y+2, z-2, this.kind);
this.setBlock(x-2, y+3, z-2, this.kind);
}
}
}
}
}
if (signBlock != null) {
// if (signBlock.getType() != Material.SIGN_POST) {
// if (signBlock.getType() != Material.SIGN_POST) {
// signBlock.setType(Material.SIGN_POST);
// }
// }
// else {
// // already a signpost, gotta delete it and create a new one
// signBlock.setType(Material.AIR);
// signBlock.setType(Material.SIGN_POST);
// }
String[] lines = new String[4];
lines[0] = "Team " + name;
lines[1] = players.size() + "/" + warzone.getTeamCap() + " players";
lines[2] = points + "/" + warzone.getScoreCap() + " pts";
if (warzone.getLifePool() == -1) {
lines[0] = "Team " + this.name;
lines[1] = this.players.size() + "/" + this.warzone.getTeamCap() + " players";
lines[2] = this.points + "/" + this.warzone.getScoreCap() + " pts";
if (this.warzone.getLifePool() == -1) {
lines[3] = "unlimited lives";
} else {
lines[3] = remainingLives + "/" + warzone.getLifePool() + " lives left";
lines[3] = this.remainingLives + "/" + this.warzone.getLifePool() + " lives left";
}
SignHelper.setToSign(war, signBlock, (byte)signData, lines);
SignHelper.setToSign(this.war, signBlock, (byte)signData, lines);
}
}
private void setBlock(int x, int y, int z, TeamKind kind) {
Block block = warzone.getWorld().getBlockAt(x, y, z);
Block block = this.warzone.getWorld().getBlockAt(x, y, z);
block.setType(kind.getMaterial());
block.setData(kind.getData());
block.setData(kind.getData());
}
public void setTeamSpawn(Location teamSpawn) {
this.teamSpawn = teamSpawn;
// this resets the block to old state
this.setSpawnVolume();
getSpawnVolume().saveBlocks();
initializeTeamSpawn();
this.getSpawnVolume().saveBlocks();
this.initializeTeamSpawn();
}
public Location getTeamSpawn() {
return teamSpawn;
return this.teamSpawn;
}
public void addPlayer(Player player) {
this.players.add(player);
}
public List<Player> getPlayers() {
return players;
return this.players;
}
public void teamcast(String message) {
for (Player player : players) {
war.msg(player, message);
for (Player player : this.players) {
this.war.msg(player, message);
}
}
@ -349,76 +351,76 @@ public class Team {
}
public String getName() {
return name;
return this.name;
}
public boolean removePlayer(String name) {
Player thePlayer = null;
for (Player player : players) {
for (Player player : this.players) {
if (player.getName().equals(name)) {
thePlayer = player;
thePlayer = player;
}
}
if (thePlayer != null) {
players.remove(thePlayer);
this.players.remove(thePlayer);
return true;
}
return false;
}
public void setRemainingLives(int remainingLives) {
this.remainingLives = remainingLives;
this.remainingLives = remainingLives;
}
public int getRemainingLifes() {
return remainingLives;
return this.remainingLives;
}
public void addPoint() {
boolean atLeastOnePlayerOnTeam = players.size() != 0;
boolean atLeastOnePlayerOnTeam = this.players.size() != 0;
boolean atLeastOnePlayerOnOtherTeam = false;
for (Team team : warzone.getTeams()) {
for (Team team : this.warzone.getTeams()) {
if (!team.getName().equals(this.getName())
&& team.getPlayers().size() > 0) {
atLeastOnePlayerOnOtherTeam = true;
}
}
if (atLeastOnePlayerOnTeam && atLeastOnePlayerOnOtherTeam) {
points++;
if (atLeastOnePlayerOnTeam && atLeastOnePlayerOnOtherTeam) {
this.points++;
} else if (!atLeastOnePlayerOnOtherTeam) {
this.teamcast("Can't score until at least one player joins another team.");
}
}
public int getPoints() {
return points;
return this.points;
}
public Volume getSpawnVolume() {
return spawnVolume;
return this.spawnVolume;
}
public void resetSign(){
this.getSpawnVolume().resetBlocks();
this.initializeTeamSpawn(); // reset everything instead of just sign
// BUKKIT
// int x = teamSpawn.getBlockX();
// int y = teamSpawn.getBlockY();
// int z = teamSpawn.getBlockZ();
//
//
// Block block = warzone.getWorld().getBlockAt(x, y, z).getFace(BlockFace.SOUTH, 2).getFace(BlockFace.WEST, 2);
// if (block.getType() != Material.SIGN_POST) {
// if (block.getType() != Material.SIGN_POST) {
// block.setType(Material.SIGN_POST);
// }
// }
//// else {
//// // already a signpost, gotta delete it and create a new one
//// block.setType(Material.AIR);
//// block.setType(Material.SIGN_POST);
//// }
//// block.setData((byte)6);
//
//
// BlockState state = block.getState();
// if (state instanceof Sign) {
// Sign sign = (Sign) state;
@ -430,9 +432,9 @@ public class Team {
// sign.setLine(3, players.size() + "/" + warzone.getTeamCap() + " players");
// state.update(true);
// }
if (warzone.getLobby() != null) {
warzone.getLobby().resetTeamGateSign(this);
if (this.warzone.getLobby() != null) {
this.warzone.getLobby().resetTeamGateSign(this);
}
}
@ -449,108 +451,111 @@ public class Team {
}
public Volume getFlagVolume() {
return flagVolume;
return this.flagVolume;
}
private void setFlagVolume() {
if (flagVolume == null) flagVolume = new Volume(getName() + "flag", war, warzone.getWorld());
if (flagVolume.isSaved()) flagVolume.resetBlocks();
int x = teamFlag.getBlockX();
int y = teamFlag.getBlockY();
int z = teamFlag.getBlockZ();
this.flagVolume.setCornerOne(warzone.getWorld().getBlockAt(x-1, y-1, z-1));
this.flagVolume.setCornerTwo(warzone.getWorld().getBlockAt(x+1, y+3, z+1));
if (this.flagVolume == null) {
this.flagVolume = new Volume(this.getName() + "flag", this.war, this.warzone.getWorld());
}
if (this.flagVolume.isSaved()) {
this.flagVolume.resetBlocks();
}
int x = this.teamFlag.getBlockX();
int y = this.teamFlag.getBlockY();
int z = this.teamFlag.getBlockZ();
this.flagVolume.setCornerOne(this.warzone.getWorld().getBlockAt(x-1, y-1, z-1));
this.flagVolume.setCornerTwo(this.warzone.getWorld().getBlockAt(x+1, y+3, z+1));
}
@SuppressWarnings("unused")
public void initializeTeamFlag() {
// make air
this.flagVolume.setToMaterial(Material.AIR);
// Set the flag blocks
int x = teamFlag.getBlockX();
int y = teamFlag.getBlockY();
int z = teamFlag.getBlockZ();
int x = this.teamFlag.getBlockX();
int y = this.teamFlag.getBlockY();
int z = this.teamFlag.getBlockZ();
// first ring
warzone.getWorld().getBlockAt(x+1, y-1, z+1).setType(Material.OBSIDIAN);
warzone.getWorld().getBlockAt(x+1, y-1, z).setType(Material.OBSIDIAN);
warzone.getWorld().getBlockAt(x+1, y-1, z-1).setType(Material.OBSIDIAN);
warzone.getWorld().getBlockAt(x, y-1, z+1).setType(Material.OBSIDIAN);
warzone.getWorld().getBlockAt(x, y-1, z).setType(Material.GLOWSTONE);
warzone.getWorld().getBlockAt(x, y-1, z-1).setType(Material.OBSIDIAN);
warzone.getWorld().getBlockAt(x-1, y-1, z+1).setType(Material.OBSIDIAN);
warzone.getWorld().getBlockAt(x-1, y-1, z).setType(Material.OBSIDIAN);
warzone.getWorld().getBlockAt(x-1, y-1, z-1).setType(Material.OBSIDIAN);
this.warzone.getWorld().getBlockAt(x+1, y-1, z+1).setType(Material.OBSIDIAN);
this.warzone.getWorld().getBlockAt(x+1, y-1, z).setType(Material.OBSIDIAN);
this.warzone.getWorld().getBlockAt(x+1, y-1, z-1).setType(Material.OBSIDIAN);
this.warzone.getWorld().getBlockAt(x, y-1, z+1).setType(Material.OBSIDIAN);
this.warzone.getWorld().getBlockAt(x, y-1, z).setType(Material.GLOWSTONE);
this.warzone.getWorld().getBlockAt(x, y-1, z-1).setType(Material.OBSIDIAN);
this.warzone.getWorld().getBlockAt(x-1, y-1, z+1).setType(Material.OBSIDIAN);
this.warzone.getWorld().getBlockAt(x-1, y-1, z).setType(Material.OBSIDIAN);
this.warzone.getWorld().getBlockAt(x-1, y-1, z-1).setType(Material.OBSIDIAN);
// flag
warzone.getWorld().getBlockAt(x, y+1, z).setType(kind.getMaterial());
warzone.getWorld().getBlockAt(x, y+1, z).setData(kind.getData());
warzone.getWorld().getBlockAt(x, y+2, z).setType(Material.FENCE);
this.warzone.getWorld().getBlockAt(x, y+1, z).setType(this.kind.getMaterial());
this.warzone.getWorld().getBlockAt(x, y+1, z).setData(this.kind.getData());
this.warzone.getWorld().getBlockAt(x, y+2, z).setType(Material.FENCE);
// Flag post using Orientation
int yaw = 0;
if (teamFlag.getYaw() >= 0){
yaw = (int)(teamFlag.getYaw() % 360);
if (this.teamFlag.getYaw() >= 0){
yaw = (int)(this.teamFlag.getYaw() % 360);
} else {
yaw = (int)(360 + (teamFlag.getYaw() % 360));
yaw = (int)(360 + (this.teamFlag.getYaw() % 360));
}
BlockFace facing = null;
BlockFace opposite = null;
if ((yaw >= 0 && yaw < 45) || (yaw >= 315 && yaw <= 360)) {
facing = BlockFace.WEST;
opposite = BlockFace.EAST;
warzone.getWorld().getBlockAt(x, y, z-1).setType(Material.FENCE);
warzone.getWorld().getBlockAt(x, y+1, z-1).setType(Material.FENCE);
warzone.getWorld().getBlockAt(x, y+2, z-1).setType(Material.FENCE);
this.warzone.getWorld().getBlockAt(x, y, z-1).setType(Material.FENCE);
this.warzone.getWorld().getBlockAt(x, y+1, z-1).setType(Material.FENCE);
this.warzone.getWorld().getBlockAt(x, y+2, z-1).setType(Material.FENCE);
} else if (yaw >= 45 && yaw < 135) {
facing = BlockFace.NORTH;
opposite = BlockFace.SOUTH;
warzone.getWorld().getBlockAt(x+1, y, z).setType(Material.FENCE);
warzone.getWorld().getBlockAt(x+1, y+1, z).setType(Material.FENCE);
warzone.getWorld().getBlockAt(x+1, y+2, z).setType(Material.FENCE);
this.warzone.getWorld().getBlockAt(x+1, y, z).setType(Material.FENCE);
this.warzone.getWorld().getBlockAt(x+1, y+1, z).setType(Material.FENCE);
this.warzone.getWorld().getBlockAt(x+1, y+2, z).setType(Material.FENCE);
} else if (yaw >= 135 && yaw < 225) {
facing = BlockFace.EAST;
opposite = BlockFace.WEST;
warzone.getWorld().getBlockAt(x, y, z+1).setType(Material.FENCE);
warzone.getWorld().getBlockAt(x, y+1, z+1).setType(Material.FENCE);
warzone.getWorld().getBlockAt(x, y+2, z+1).setType(Material.FENCE);
this.warzone.getWorld().getBlockAt(x, y, z+1).setType(Material.FENCE);
this.warzone.getWorld().getBlockAt(x, y+1, z+1).setType(Material.FENCE);
this.warzone.getWorld().getBlockAt(x, y+2, z+1).setType(Material.FENCE);
} else if (yaw >= 225 && yaw < 315) {
facing = BlockFace.SOUTH;
opposite = BlockFace.NORTH;
warzone.getWorld().getBlockAt(x-1, y, z).setType(Material.FENCE);
warzone.getWorld().getBlockAt(x-1, y+1, z).setType(Material.FENCE);
warzone.getWorld().getBlockAt(x-1, y+2, z).setType(Material.FENCE);
this.warzone.getWorld().getBlockAt(x-1, y, z).setType(Material.FENCE);
this.warzone.getWorld().getBlockAt(x-1, y+1, z).setType(Material.FENCE);
this.warzone.getWorld().getBlockAt(x-1, y+2, z).setType(Material.FENCE);
}
}
public void setTeamFlag(Location teamFlag) {
this.teamFlag = teamFlag;
// this resets the block to old state
this.setFlagVolume();
getFlagVolume().saveBlocks();
initializeTeamFlag();
this.getFlagVolume().saveBlocks();
this.initializeTeamFlag();
}
public boolean isTeamFlagBlock(Block block) {
if (teamFlag != null) {
int flagX = teamFlag.getBlockX();
int flagY = teamFlag.getBlockY() + 1;
int flagZ = teamFlag.getBlockZ();
if (this.teamFlag != null) {
int flagX = this.teamFlag.getBlockX();
int flagY = this.teamFlag.getBlockY() + 1;
int flagZ = this.teamFlag.getBlockZ();
if (block.getX() == flagX
&& block.getY() == flagY
&& block.getZ() == flagZ) {
return true;
}
&& block.getZ() == flagZ)
return true;
}
return false;
}
public Location getTeamFlag() {
return teamFlag;
return this.teamFlag;
}
}

View File

@ -14,22 +14,22 @@ public class TeamKind {
this.material = material;
this.data = data;
this.color = color;
}
public Material getMaterial() {
return material;
return this.material;
}
public byte getData() {
return data;
return this.data;
}
public String getDefaultName() {
return defaultName;
return this.defaultName;
}
public ChatColor getColor() {
return color;
return this.color;
}
}

View File

@ -7,44 +7,43 @@ import org.bukkit.ChatColor;
import org.bukkit.Material;
/**
*
*
* @author tommytony
*
*/
public class TeamKinds {
private static final List<TeamKind> teamKinds = new ArrayList<TeamKind>();
private static final List<TeamKind> teamKinds = new ArrayList<TeamKind>();
static {
getTeamkinds().add(new TeamKind("white", Material.WOOL, (byte) 0, ChatColor.WHITE));
getTeamkinds().add(new TeamKind("orange", Material.WOOL, (byte) 1, ChatColor.GOLD));
getTeamkinds().add(new TeamKind("magenta", Material.WOOL, (byte) 2, ChatColor.LIGHT_PURPLE));
getTeamkinds().add(new TeamKind("blue", Material.WOOL, (byte) 3, ChatColor.BLUE));
getTeamkinds().add(new TeamKind("gold", Material.WOOL, (byte) 4, ChatColor.YELLOW)); // yellow = gold
getTeamkinds().add(new TeamKind("green", Material.WOOL, (byte) 5, ChatColor.GREEN));
getTeamkinds().add(new TeamKind("pink", Material.WOOL, (byte) 6, ChatColor.WHITE));
getTeamkinds().add(new TeamKind("gray", Material.WOOL, (byte) 7, ChatColor.DARK_GRAY));
getTeamkinds().add(new TeamKind("iron", Material.WOOL, (byte) 8, ChatColor.GRAY)); // lightgrey = iron
getTeamkinds().add(new TeamKind("diamond", Material.WOOL, (byte) 9, ChatColor.DARK_AQUA)); // cyan = diamond
getTeamkinds().add(new TeamKind("purple", Material.WOOL, (byte) 10, ChatColor.DARK_PURPLE));
getTeamkinds().add(new TeamKind("navy", Material.WOOL, (byte) 11, ChatColor.DARK_BLUE));
getTeamkinds().add(new TeamKind("brown", Material.WOOL, (byte) 12, ChatColor.DARK_RED));
getTeamkinds().add(new TeamKind("darkgreen", Material.WOOL, (byte) 13, ChatColor.DARK_GREEN));
getTeamkinds().add(new TeamKind("red", Material.WOOL, (byte) 14, ChatColor.RED));
getTeamkinds().add(new TeamKind("black", Material.WOOL, (byte) 15, ChatColor.BLACK));
TeamKinds.getTeamkinds().add(new TeamKind("white", Material.WOOL, (byte) 0, ChatColor.WHITE));
TeamKinds.getTeamkinds().add(new TeamKind("orange", Material.WOOL, (byte) 1, ChatColor.GOLD));
TeamKinds.getTeamkinds().add(new TeamKind("magenta", Material.WOOL, (byte) 2, ChatColor.LIGHT_PURPLE));
TeamKinds.getTeamkinds().add(new TeamKind("blue", Material.WOOL, (byte) 3, ChatColor.BLUE));
TeamKinds.getTeamkinds().add(new TeamKind("gold", Material.WOOL, (byte) 4, ChatColor.YELLOW)); // yellow = gold
TeamKinds.getTeamkinds().add(new TeamKind("green", Material.WOOL, (byte) 5, ChatColor.GREEN));
TeamKinds.getTeamkinds().add(new TeamKind("pink", Material.WOOL, (byte) 6, ChatColor.WHITE));
TeamKinds.getTeamkinds().add(new TeamKind("gray", Material.WOOL, (byte) 7, ChatColor.DARK_GRAY));
TeamKinds.getTeamkinds().add(new TeamKind("iron", Material.WOOL, (byte) 8, ChatColor.GRAY)); // lightgrey = iron
TeamKinds.getTeamkinds().add(new TeamKind("diamond", Material.WOOL, (byte) 9, ChatColor.DARK_AQUA)); // cyan = diamond
TeamKinds.getTeamkinds().add(new TeamKind("purple", Material.WOOL, (byte) 10, ChatColor.DARK_PURPLE));
TeamKinds.getTeamkinds().add(new TeamKind("navy", Material.WOOL, (byte) 11, ChatColor.DARK_BLUE));
TeamKinds.getTeamkinds().add(new TeamKind("brown", Material.WOOL, (byte) 12, ChatColor.DARK_RED));
TeamKinds.getTeamkinds().add(new TeamKind("darkgreen", Material.WOOL, (byte) 13, ChatColor.DARK_GREEN));
TeamKinds.getTeamkinds().add(new TeamKind("red", Material.WOOL, (byte) 14, ChatColor.RED));
TeamKinds.getTeamkinds().add(new TeamKind("black", Material.WOOL, (byte) 15, ChatColor.BLACK));
}
public static TeamKind teamKindFromString(String str) {
String lowered = str.toLowerCase();
for (TeamKind kind : getTeamkinds()) {
if (kind.getDefaultName().startsWith(lowered)) {
return kind;
}
for (TeamKind kind : TeamKinds.getTeamkinds()) {
if (kind.getDefaultName().startsWith(lowered))
return kind;
}
return null;
}
public static List<TeamKind> getTeamkinds() {
return teamKinds;
return TeamKinds.teamKinds;
}
}

View File

@ -1,7 +1,7 @@
package com.tommytony.war;
/**
*
*
* @author tommytony
*
*/

View File

@ -15,7 +15,7 @@ import com.tommytony.war.volumes.BlockInfo;
import com.tommytony.war.volumes.Volume;
/**
*
*
* @author tommytony
*
*/
@ -24,7 +24,7 @@ public class WarHub {
private Location location;
private Volume volume;
private Map<String, Block> zoneGateBlocks = new HashMap<String, Block>();
public WarHub(War war, Location location) {
this.war = war;
this.location = location;
@ -32,25 +32,25 @@ public class WarHub {
}
public Volume getVolume() {
return volume;
return this.volume;
}
public void setLocation(Location loc) {
this.location = loc;
}
public Location getLocation() {
return this.location;
}
public Warzone getDestinationWarzoneForLocation(Location playerLocation) {
Warzone zone = null;
for (String zoneName : zoneGateBlocks.keySet()) {
Block gate = zoneGateBlocks.get(zoneName);
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 = war.findWarzone(zoneName);
zone = this.war.findWarzone(zoneName);
}
}
return zone;
@ -58,34 +58,36 @@ public class WarHub {
public void initialize() {
// for now, draw the wall of gates to the west
zoneGateBlocks.clear();
this.zoneGateBlocks.clear();
int disabled = 0;
for (Warzone zone : war.getWarzones()) {
if (zone.isDisabled()) disabled++;
for (Warzone zone : this.war.getWarzones()) {
if (zone.isDisabled()) {
disabled++;
}
}
int noOfWarzones = war.getWarzones().size() - disabled;
int noOfWarzones = this.war.getWarzones().size() - disabled;
if (noOfWarzones > 0) {
int hubWidth = noOfWarzones * 4 + 2;
int halfHubWidth = hubWidth / 2;
int hubDepth = 6;
int hubHeigth = 4;
Block locationBlock = location.getWorld().getBlockAt(location.getBlockX(), location.getBlockY(), location.getBlockZ());
volume.setCornerOne(locationBlock.getFace(BlockFace.EAST).getFace(BlockFace.SOUTH, halfHubWidth).getFace(BlockFace.DOWN));
volume.setCornerTwo(locationBlock.getFace(BlockFace.NORTH, halfHubWidth).getFace(BlockFace.WEST, hubDepth).getFace(BlockFace.UP, hubHeigth));
volume.saveBlocks();
Block locationBlock = this.location.getWorld().getBlockAt(this.location.getBlockX(), this.location.getBlockY(), this.location.getBlockZ());
this.volume.setCornerOne(locationBlock.getFace(BlockFace.EAST).getFace(BlockFace.SOUTH, halfHubWidth).getFace(BlockFace.DOWN));
this.volume.setCornerTwo(locationBlock.getFace(BlockFace.NORTH, halfHubWidth).getFace(BlockFace.WEST, hubDepth).getFace(BlockFace.UP, hubHeigth));
this.volume.saveBlocks();
// glass floor
volume.clearBlocksThatDontFloat();
volume.setToMaterial(Material.AIR);
volume.setFaceMaterial(BlockFace.DOWN, Material.GLASS);
this.volume.clearBlocksThatDontFloat();
this.volume.setToMaterial(Material.AIR);
this.volume.setFaceMaterial(BlockFace.DOWN, Material.GLASS);
// draw gates
Block currentGateBlock = BlockInfo.getBlock(location.getWorld(), volume.getCornerOne()).getFace(BlockFace.UP).getFace(BlockFace.WEST, hubDepth).getFace(BlockFace.NORTH, 2);
for (Warzone zone : war.getWarzones()) { // gonna use the index to find it again
Block currentGateBlock = BlockInfo.getBlock(this.location.getWorld(), this.volume.getCornerOne()).getFace(BlockFace.UP).getFace(BlockFace.WEST, hubDepth).getFace(BlockFace.NORTH, 2);
for (Warzone zone : this.war.getWarzones()) { // gonna use the index to find it again
if (!zone.isDisabled()) {
zoneGateBlocks.put(zone.getName(), currentGateBlock);
this.zoneGateBlocks.put(zone.getName(), currentGateBlock);
currentGateBlock.getFace(BlockFace.DOWN).setType(Material.GLOWSTONE);
currentGateBlock.setType(Material.PORTAL);
currentGateBlock.getFace(BlockFace.UP).setType(Material.PORTAL);
@ -97,36 +99,38 @@ public class WarHub {
currentGateBlock.getFace(BlockFace.NORTH).getFace(BlockFace.UP).getFace(BlockFace.UP).setType(Material.OBSIDIAN);
currentGateBlock.getFace(BlockFace.UP).getFace(BlockFace.UP).setType(Material.OBSIDIAN);
currentGateBlock = currentGateBlock.getFace(BlockFace.NORTH, 4);
}
}
// War hub sign
Block signBlock = locationBlock.getFace(BlockFace.WEST);
String[] lines = new String[4];
lines[0] = "War hub";
lines[1] = "(/warhub)";
lines[2] = "Pick your";
lines[3] = "battle!";
SignHelper.setToSign(war, signBlock, (byte)8, lines);
SignHelper.setToSign(this.war, signBlock, (byte)8, lines);
// Warzone signs
for (Warzone zone : war.getWarzones()) {
for (Warzone zone : this.war.getWarzones()) {
if (!zone.isDisabled() && zone.ready()) {
this.resetZoneSign(zone);
}
}
}
}
public void resetZoneSign(Warzone zone) {
Block zoneGate = zoneGateBlocks.get(zone.getName());
Block zoneGate = this.zoneGateBlocks.get(zone.getName());
Block block = zoneGate.getFace(BlockFace.SOUTH).getFace(BlockFace.EAST, 1);
if (block.getType() != Material.SIGN_POST) block.setType(Material.SIGN_POST);
if (block.getType() != Material.SIGN_POST) {
block.setType(Material.SIGN_POST);
}
block.setData((byte)8);
int zoneCap = 0;
int zonePlayers = 0;
for (Team t : zone.getTeams()) {
@ -138,7 +142,7 @@ public class WarHub {
lines[1] = zone.getName();
lines[2] = zonePlayers + "/" + zoneCap + " players";
lines[3] = zone.getTeams().size() + " teams";
SignHelper.setToSign(war, block, (byte)8, lines);
SignHelper.setToSign(this.war, block, (byte)8, lines);
}
public void setVolume(Volume vol) {

File diff suppressed because it is too large Load Diff

View File

@ -17,7 +17,7 @@ import com.tommytony.war.volumes.Volume;
import com.tommytony.war.volumes.ZoneVolume;
/**
*
*
* @author tommytony
*
*/
@ -27,18 +27,18 @@ public class ZoneLobby {
private BlockFace wall;
private Volume volume;
BlockInfo lobbyMiddleWallBlock = null; // on the zone wall, one above the zone lobby floor
BlockInfo warHubLinkGate = null;
Map<String, BlockInfo> teamGateBlocks = new HashMap<String, BlockInfo>();
Map<String, BlockInfo> teamGateBlocks = new HashMap<String, BlockInfo>();
BlockInfo autoAssignGate = null;
BlockInfo zoneTeleportBlock = null;
private final int lobbyHeight = 3;
private int lobbyHalfSide;
private final int lobbyDepth = 10;
/**
* Use this constructor with /setzonelobby <n/s/e/w>
* @param war
@ -49,13 +49,13 @@ public class ZoneLobby {
this.war = war;
this.warzone = warzone;
int lobbyWidth = warzone.getTeams().size() * 4 + 5;
lobbyHalfSide = lobbyWidth / 2;
if (lobbyHalfSide < 7) {
lobbyHalfSide = 7;
this.lobbyHalfSide = lobbyWidth / 2;
if (this.lobbyHalfSide < 7) {
this.lobbyHalfSide = 7;
}
this.setWall(wall);
}
/**
* Use this constructor with /setzonelobby <zonename>.
* Makes sure the lobby is not sticking inside the zone.
@ -67,50 +67,50 @@ public class ZoneLobby {
this.war = war;
this.warzone = warzone;
int lobbyWidth = warzone.getTeams().size() * 4 + 5;
lobbyHalfSide = lobbyWidth / 2;
if (lobbyHalfSide < 7) {
lobbyHalfSide = 7;
this.lobbyHalfSide = lobbyWidth / 2;
if (this.lobbyHalfSide < 7) {
this.lobbyHalfSide = 7;
}
setLocation(playerLocation);
this.setLocation(playerLocation);
}
/**
* Convenience ctor when loading form disk.
* This figures out the middle wall block of the lobby from the volume instead
* 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;
this.warzone = warzone;
int lobbyWidth = warzone.getTeams().size() * 4 + 5;
lobbyHalfSide = lobbyWidth / 2;
if (lobbyHalfSide < 7) {
lobbyHalfSide = 7;
this.lobbyHalfSide = lobbyWidth / 2;
if (this.lobbyHalfSide < 7) {
this.lobbyHalfSide = 7;
}
this.wall = wall;
this.setVolume(volume);
// we're setting the zoneVolume directly, so we need to figure out the lobbyMiddleWallBlock on our own
if (wall == BlockFace.NORTH) {
lobbyMiddleWallBlock = new BlockInfo(BlockInfo.getBlock(warzone.getWorld(), volume.getCornerOne()).getFace(BlockFace.UP).getFace(BlockFace.EAST, lobbyHalfSide));
this.lobbyMiddleWallBlock = new BlockInfo(BlockInfo.getBlock(warzone.getWorld(), volume.getCornerOne()).getFace(BlockFace.UP).getFace(BlockFace.EAST, this.lobbyHalfSide));
} else if (wall == BlockFace.EAST){
lobbyMiddleWallBlock = new BlockInfo(BlockInfo.getBlock(warzone.getWorld(), volume.getCornerOne()).getFace(BlockFace.UP).getFace(BlockFace.SOUTH, lobbyHalfSide));
this.lobbyMiddleWallBlock = new BlockInfo(BlockInfo.getBlock(warzone.getWorld(), volume.getCornerOne()).getFace(BlockFace.UP).getFace(BlockFace.SOUTH, this.lobbyHalfSide));
} else if (wall == BlockFace.SOUTH){
lobbyMiddleWallBlock = new BlockInfo(BlockInfo.getBlock(warzone.getWorld(), volume.getCornerOne()).getFace(BlockFace.UP).getFace(BlockFace.WEST, lobbyHalfSide));
this.lobbyMiddleWallBlock = new BlockInfo(BlockInfo.getBlock(warzone.getWorld(), volume.getCornerOne()).getFace(BlockFace.UP).getFace(BlockFace.WEST, this.lobbyHalfSide));
} else if (wall == BlockFace.WEST){
lobbyMiddleWallBlock = new BlockInfo(BlockInfo.getBlock(warzone.getWorld(), volume.getCornerOne()).getFace(BlockFace.UP).getFace(BlockFace.NORTH, lobbyHalfSide));
this.lobbyMiddleWallBlock = new BlockInfo(BlockInfo.getBlock(warzone.getWorld(), volume.getCornerOne()).getFace(BlockFace.UP).getFace(BlockFace.NORTH, this.lobbyHalfSide));
}
}
/**
* 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) {
createVolumeOrReset();
this.createVolumeOrReset();
// Lobby orientation
int yaw = 0;
if (playerLocation.getYaw() >= 0){
@ -133,7 +133,7 @@ public class ZoneLobby {
facing = BlockFace.SOUTH;
opposite = BlockFace.NORTH;
}
// float yaw = playerLocation.getYaw() % 360;
// if (yaw >= 45 && yaw < 135) {
// facing = BlockFace.NORTH;
@ -147,118 +147,118 @@ public class ZoneLobby {
// } else if (yaw >= 315 || yaw < 45) {
// facing = BlockFace.WEST;
// opposite = BlockFace.EAST;
// }
this.wall = opposite; // a player facing south places a lobby that looks just like a lobby stuck to the north wall
calculateLobbyWidth();
lobbyMiddleWallBlock = new BlockInfo(warzone.getWorld().getBlockAt(playerLocation.getBlockX(),
playerLocation.getBlockY(),
// }
this.wall = opposite; // a player facing south places a lobby that looks just like a lobby stuck to the north wall
this.calculateLobbyWidth();
this.lobbyMiddleWallBlock = new BlockInfo(this.warzone.getWorld().getBlockAt(playerLocation.getBlockX(),
playerLocation.getBlockY(),
playerLocation.getBlockZ())
.getFace(facing, 6));
Block corner1 = null;
Block corner2 = null;
int x = lobbyMiddleWallBlock.getX();
int y = lobbyMiddleWallBlock.getY();
int z = lobbyMiddleWallBlock.getZ();
if (wall == BlockFace.NORTH) {
int x = this.lobbyMiddleWallBlock.getX();
int y = this.lobbyMiddleWallBlock.getY();
int z = this.lobbyMiddleWallBlock.getZ();
if (this.wall == BlockFace.NORTH) {
//lobbyMiddleWallBlock = new BlockInfo(warzone.getWorld().getBlockAt(x, y, wallCenterPos));
corner1 = warzone.getWorld().getBlockAt(x, y - 1, z + lobbyHalfSide);
corner2 = warzone.getWorld().getBlockAt(x - lobbyDepth, y + 1 + lobbyHeight, z - lobbyHalfSide);
} else if (wall == BlockFace.EAST){
corner1 = warzone.getWorld().getBlockAt(x - lobbyHalfSide, y - 1, z);
corner2 = warzone.getWorld().getBlockAt(x + lobbyHalfSide, y + 1 + lobbyHeight, z - lobbyDepth);
} else if (wall == BlockFace.SOUTH){
corner1 = warzone.getWorld().getBlockAt(x, y -1 , z - lobbyHalfSide);
corner2 = warzone.getWorld().getBlockAt(x + lobbyDepth, y + 1 + lobbyHeight, z + lobbyHalfSide);
} else if (wall == BlockFace.WEST){
corner1 = warzone.getWorld().getBlockAt(x + lobbyHalfSide, y - 1, z);
corner2 = warzone.getWorld().getBlockAt(x - lobbyHalfSide, y + 1 + lobbyHeight, z + lobbyDepth);
corner1 = this.warzone.getWorld().getBlockAt(x, y - 1, z + this.lobbyHalfSide);
corner2 = this.warzone.getWorld().getBlockAt(x - this.lobbyDepth, y + 1 + this.lobbyHeight, z - this.lobbyHalfSide);
} else if (this.wall == BlockFace.EAST){
corner1 = this.warzone.getWorld().getBlockAt(x - this.lobbyHalfSide, y - 1, z);
corner2 = this.warzone.getWorld().getBlockAt(x + this.lobbyHalfSide, y + 1 + this.lobbyHeight, z - this.lobbyDepth);
} else if (this.wall == BlockFace.SOUTH){
corner1 = this.warzone.getWorld().getBlockAt(x, y -1 , z - this.lobbyHalfSide);
corner2 = this.warzone.getWorld().getBlockAt(x + this.lobbyDepth, y + 1 + this.lobbyHeight, z + this.lobbyHalfSide);
} else if (this.wall == BlockFace.WEST){
corner1 = this.warzone.getWorld().getBlockAt(x + this.lobbyHalfSide, y - 1, z);
corner2 = this.warzone.getWorld().getBlockAt(x - this.lobbyHalfSide, y + 1 + this.lobbyHeight, z + this.lobbyDepth);
}
saveLobbyBlocks(corner1, corner2);
this.saveLobbyBlocks(corner1, corner2);
}
/**
* 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) {
createVolumeOrReset();
this.createVolumeOrReset();
this.wall = newWall;
ZoneVolume zoneVolume = warzone.getVolume();
calculateLobbyWidth();
ZoneVolume zoneVolume = this.warzone.getVolume();
this.calculateLobbyWidth();
Block corner1 = null;
Block corner2 = null;
if (wall == BlockFace.NORTH) {
if (this.wall == BlockFace.NORTH) {
int wallStart = zoneVolume.getMinZ();
int wallEnd = zoneVolume.getMaxZ();
int x = zoneVolume.getMinX();
int wallLength = wallEnd - wallStart + 1;
int wallCenterPos = wallStart + wallLength / 2;
int y = zoneVolume.getCenterY();
lobbyMiddleWallBlock = new BlockInfo(warzone.getWorld().getBlockAt(x, y, wallCenterPos));
corner1 = warzone.getWorld().getBlockAt(x, y - 1, wallCenterPos + lobbyHalfSide);
corner2 = warzone.getWorld().getBlockAt(x - lobbyDepth, y + 1 + lobbyHeight, wallCenterPos - lobbyHalfSide);
} else if (wall == BlockFace.EAST){
this.lobbyMiddleWallBlock = new BlockInfo(this.warzone.getWorld().getBlockAt(x, y, wallCenterPos));
corner1 = this.warzone.getWorld().getBlockAt(x, y - 1, wallCenterPos + this.lobbyHalfSide);
corner2 = this.warzone.getWorld().getBlockAt(x - this.lobbyDepth, y + 1 + this.lobbyHeight, wallCenterPos - this.lobbyHalfSide);
} else if (this.wall == BlockFace.EAST){
int wallStart = zoneVolume.getMinX();
int wallEnd = zoneVolume.getMaxX();
int z = zoneVolume.getMinZ();
int wallLength = wallEnd - wallStart + 1;
int wallCenterPos = wallStart + wallLength / 2;
int y = zoneVolume.getCenterY();
lobbyMiddleWallBlock = new BlockInfo(warzone.getWorld().getBlockAt(wallCenterPos, y, z));
corner1 = warzone.getWorld().getBlockAt(wallCenterPos - lobbyHalfSide, y - 1, z);
corner2 = warzone.getWorld().getBlockAt(wallCenterPos + lobbyHalfSide,
y + 1 + lobbyHeight, z - lobbyDepth);
} else if (wall == BlockFace.SOUTH){
this.lobbyMiddleWallBlock = new BlockInfo(this.warzone.getWorld().getBlockAt(wallCenterPos, y, z));
corner1 = this.warzone.getWorld().getBlockAt(wallCenterPos - this.lobbyHalfSide, y - 1, z);
corner2 = this.warzone.getWorld().getBlockAt(wallCenterPos + this.lobbyHalfSide,
y + 1 + this.lobbyHeight, z - this.lobbyDepth);
} else if (this.wall == BlockFace.SOUTH){
int wallStart = zoneVolume.getMinZ();
int wallEnd = zoneVolume.getMaxZ();
int x = zoneVolume.getMaxX();
int wallLength = wallEnd - wallStart + 1;
int wallCenterPos = wallStart + wallLength / 2;
int y = zoneVolume.getCenterY();
lobbyMiddleWallBlock = new BlockInfo(warzone.getWorld().getBlockAt(x, y, wallCenterPos));
corner1 = warzone.getWorld().getBlockAt(x, y -1 , wallCenterPos - lobbyHalfSide);
corner2 = warzone.getWorld().getBlockAt(x + lobbyDepth,
y + 1 + lobbyHeight, wallCenterPos + lobbyHalfSide);
} else if (wall == BlockFace.WEST){
this.lobbyMiddleWallBlock = new BlockInfo(this.warzone.getWorld().getBlockAt(x, y, wallCenterPos));
corner1 = this.warzone.getWorld().getBlockAt(x, y -1 , wallCenterPos - this.lobbyHalfSide);
corner2 = this.warzone.getWorld().getBlockAt(x + this.lobbyDepth,
y + 1 + this.lobbyHeight, wallCenterPos + this.lobbyHalfSide);
} else if (this.wall == BlockFace.WEST){
int wallStart = zoneVolume.getMinX();
int wallEnd = zoneVolume.getMaxX();
int z = zoneVolume.getMaxZ();
int wallLength = wallEnd - wallStart + 1;
int wallCenterPos = wallStart + wallLength / 2;
int y = zoneVolume.getCenterY();
lobbyMiddleWallBlock = new BlockInfo(warzone.getWorld().getBlockAt(wallCenterPos, y, z));
corner1 = warzone.getWorld().getBlockAt(wallCenterPos + lobbyHalfSide, y - 1, z);
corner2 = warzone.getWorld().getBlockAt(wallCenterPos - lobbyHalfSide, y + 1 + lobbyHeight, z + lobbyDepth);
this.lobbyMiddleWallBlock = new BlockInfo(this.warzone.getWorld().getBlockAt(wallCenterPos, y, z));
corner1 = this.warzone.getWorld().getBlockAt(wallCenterPos + this.lobbyHalfSide, y - 1, z);
corner2 = this.warzone.getWorld().getBlockAt(wallCenterPos - this.lobbyHalfSide, y + 1 + this.lobbyHeight, z + this.lobbyDepth);
}
saveLobbyBlocks(corner1, corner2);
this.saveLobbyBlocks(corner1, corner2);
}
private void createVolumeOrReset() {
if (volume == null) {
if (this.volume == null) {
// no previous wall
this.volume = new Volume("lobby", war, warzone.getWorld());
} else if (volume.isSaved()) {
volume.resetBlocks();
this.volume = new Volume("lobby", this.war, this.warzone.getWorld());
} else if (this.volume.isSaved()) {
this.volume.resetBlocks();
}
}
private void calculateLobbyWidth() {
int lobbyWidth = warzone.getTeams().size() * 4 + 5;
lobbyHalfSide = lobbyWidth / 2;
if (lobbyHalfSide < 7) {
lobbyHalfSide = 7;
int lobbyWidth = this.warzone.getTeams().size() * 4 + 5;
this.lobbyHalfSide = lobbyWidth / 2;
if (this.lobbyHalfSide < 7) {
this.lobbyHalfSide = 7;
}
}
private void saveLobbyBlocks(Block corner1, Block corner2) {
if (corner1 != null && corner2 != null) {
// save the blocks, wide enough for three team gates, 3+1 high and 10 deep, extruding out from the zone wall.
@ -267,135 +267,135 @@ public class ZoneLobby {
this.volume.saveBlocks();
}
}
public void initialize() {
public void initialize() {
// maybe the number of teams change, now reset the gate positions
if (lobbyMiddleWallBlock != null && volume != null /*&& volume.isSaved()*/) {
setGatePositions(BlockInfo.getBlock(warzone.getWorld(), lobbyMiddleWallBlock));
if (this.lobbyMiddleWallBlock != null && this.volume != null /*&& volume.isSaved()*/) {
this.setGatePositions(BlockInfo.getBlock(this.warzone.getWorld(), this.lobbyMiddleWallBlock));
// flatten the area (set all but floor to air, then replace any floor air blocks with glass)
this.volume.clearBlocksThatDontFloat();
this.volume.setToMaterial(Material.AIR);
this.volume.setFaceMaterial(BlockFace.DOWN, Material.GLASS); // beautiful
// add war hub link gate
if (war.getWarHub() != null) {
Block linkGateBlock = BlockInfo.getBlock(warzone.getWorld(), warHubLinkGate);
placeGate(linkGateBlock, Material.OBSIDIAN);
if (this.war.getWarHub() != null) {
Block linkGateBlock = BlockInfo.getBlock(this.warzone.getWorld(), this.warHubLinkGate);
this.placeGate(linkGateBlock, Material.OBSIDIAN);
// add warhub sign
String[] lines = new String[4];
lines[0] = "";
lines[1] = "To War hub";
lines[2] = "";
lines[3] = "";
resetGateSign(linkGateBlock, lines, false);
this.resetGateSign(linkGateBlock, lines, false);
}
// add team gates or single auto assign gate
placeAutoAssignGate();
for (String teamName : teamGateBlocks.keySet()) {
BlockInfo gateInfo = teamGateBlocks.get(teamName);
placeGate(BlockInfo.getBlock(warzone.getWorld(), gateInfo), TeamKinds.teamKindFromString(teamName));
this.placeAutoAssignGate();
for (String teamName : this.teamGateBlocks.keySet()) {
BlockInfo gateInfo = this.teamGateBlocks.get(teamName);
this.placeGate(BlockInfo.getBlock(this.warzone.getWorld(), gateInfo), TeamKinds.teamKindFromString(teamName));
}
for (Team t : warzone.getTeams()) {
resetTeamGateSign(t);
for (Team t : this.warzone.getTeams()) {
this.resetTeamGateSign(t);
}
// set zone tp
zoneTeleportBlock = new BlockInfo(BlockInfo.getBlock(warzone.getWorld(), lobbyMiddleWallBlock).getFace(wall, 6));
this.zoneTeleportBlock = new BlockInfo(BlockInfo.getBlock(this.warzone.getWorld(), this.lobbyMiddleWallBlock).getFace(this.wall, 6));
int yaw = 0;
if (wall == BlockFace.WEST) {
if (this.wall == BlockFace.WEST) {
yaw = 180;
} else if (wall == BlockFace.SOUTH) {
} else if (this.wall == BlockFace.SOUTH) {
yaw = 90;
} else if (wall == BlockFace.EAST) {
} else if (this.wall == BlockFace.EAST) {
yaw = 0;
} else if (wall == BlockFace.NORTH) {
} else if (this.wall == BlockFace.NORTH) {
yaw = 270;
}
warzone.setTeleport(new Location(warzone.getWorld(), zoneTeleportBlock.getX(), zoneTeleportBlock.getY(), zoneTeleportBlock.getZ(), yaw, 0));
this.warzone.setTeleport(new Location(this.warzone.getWorld(), this.zoneTeleportBlock.getX(), this.zoneTeleportBlock.getY(), this.zoneTeleportBlock.getZ(), yaw, 0));
// set zone sign
Block zoneSignBlock = BlockInfo.getBlock(warzone.getWorld(), lobbyMiddleWallBlock).getFace(wall, 4);
Block zoneSignBlock = BlockInfo.getBlock(this.warzone.getWorld(), this.lobbyMiddleWallBlock).getFace(this.wall, 4);
byte data = 0;
if (wall == BlockFace.NORTH) {
if (this.wall == BlockFace.NORTH) {
data = (byte)4;
} else if (wall == BlockFace.EAST) {
} else if (this.wall == BlockFace.EAST) {
data = (byte)8;
} else if (wall == BlockFace.SOUTH) {
} else if (this.wall == BlockFace.SOUTH) {
data = (byte)12;
} else if (wall == BlockFace.WEST) {
} else if (this.wall == BlockFace.WEST) {
data = (byte)0;
}
String[] lines = new String[4];
lines[0] = "Warzone";
lines[1] = warzone.getName();
if (autoAssignGate != null) {
lines[1] = this.warzone.getName();
if (this.autoAssignGate != null) {
lines[2] = "Walk in the";
lines[3] = "auto-assign gate.";
} else {
lines[2] = "";
lines[3] = "Pick your team.";
}
SignHelper.setToSign(war, zoneSignBlock, data, lines);
SignHelper.setToSign(this.war, zoneSignBlock, data, lines);
// lets get some light in here
if (wall == BlockFace.NORTH || wall == BlockFace.SOUTH) {
BlockInfo.getBlock(warzone.getWorld(), lobbyMiddleWallBlock).getFace(BlockFace.DOWN).getFace(BlockFace.WEST, lobbyHalfSide - 1).getFace(wall, 9).setType(Material.GLOWSTONE);
BlockInfo.getBlock(warzone.getWorld(), lobbyMiddleWallBlock).getFace(BlockFace.DOWN).getFace(BlockFace.EAST, lobbyHalfSide - 1).getFace(wall, 9).setType(Material.GLOWSTONE);
if (this.wall == BlockFace.NORTH || this.wall == BlockFace.SOUTH) {
BlockInfo.getBlock(this.warzone.getWorld(), this.lobbyMiddleWallBlock).getFace(BlockFace.DOWN).getFace(BlockFace.WEST, this.lobbyHalfSide - 1).getFace(this.wall, 9).setType(Material.GLOWSTONE);
BlockInfo.getBlock(this.warzone.getWorld(), this.lobbyMiddleWallBlock).getFace(BlockFace.DOWN).getFace(BlockFace.EAST, this.lobbyHalfSide - 1).getFace(this.wall, 9).setType(Material.GLOWSTONE);
} else {
BlockInfo.getBlock(warzone.getWorld(), lobbyMiddleWallBlock).getFace(BlockFace.DOWN).getFace(BlockFace.NORTH, lobbyHalfSide - 1).getFace(wall, 9).setType(Material.GLOWSTONE);
BlockInfo.getBlock(warzone.getWorld(), lobbyMiddleWallBlock).getFace(BlockFace.DOWN).getFace(BlockFace.SOUTH, lobbyHalfSide - 1).getFace(wall, 9).setType(Material.GLOWSTONE);
BlockInfo.getBlock(this.warzone.getWorld(), this.lobbyMiddleWallBlock).getFace(BlockFace.DOWN).getFace(BlockFace.NORTH, this.lobbyHalfSide - 1).getFace(this.wall, 9).setType(Material.GLOWSTONE);
BlockInfo.getBlock(this.warzone.getWorld(), this.lobbyMiddleWallBlock).getFace(BlockFace.DOWN).getFace(BlockFace.SOUTH, this.lobbyHalfSide - 1).getFace(this.wall, 9).setType(Material.GLOWSTONE);
}
} else {
war.logWarn("Failed to initalize zone lobby for zone " + warzone.getName());
this.war.logWarn("Failed to initalize zone lobby for zone " + this.warzone.getName());
}
}
private void setGatePositions(Block lobbyMiddleWallBlock) {
BlockFace leftSide = null; // look at the zone
BlockFace rightSide = null;
if (wall == BlockFace.NORTH) {
if (this.wall == BlockFace.NORTH) {
leftSide = BlockFace.EAST;
rightSide = BlockFace.WEST;
} else if (wall == BlockFace.EAST) {
} else if (this.wall == BlockFace.EAST) {
leftSide = BlockFace.SOUTH;
rightSide = BlockFace.NORTH;
} else if (wall == BlockFace.SOUTH) {
} else if (this.wall == BlockFace.SOUTH) {
leftSide = BlockFace.WEST;
rightSide = BlockFace.EAST;
} else if (wall == BlockFace.WEST) {
} else if (this.wall == BlockFace.WEST) {
leftSide = BlockFace.NORTH;
rightSide = BlockFace.SOUTH;
}
teamGateBlocks.clear();
if (warzone.getAutoAssignOnly()){
autoAssignGate = new BlockInfo(lobbyMiddleWallBlock);
}
this.teamGateBlocks.clear();
if (this.warzone.getAutoAssignOnly()){
this.autoAssignGate = new BlockInfo(lobbyMiddleWallBlock);
} else {
autoAssignGate = null;
for (int doorIndex = 0; doorIndex < warzone.getTeams().size(); doorIndex++) {
this.autoAssignGate = null;
for (int doorIndex = 0; doorIndex < this.warzone.getTeams().size(); doorIndex++) {
// 0 at center, 1 to the left, 2 to the right, 3 to the left, etc
Team team = warzone.getTeams().get(doorIndex);
if (warzone.getTeams().size() % 2 == 0) {
Team team = this.warzone.getTeams().get(doorIndex);
if (this.warzone.getTeams().size() % 2 == 0) {
// even number of teams
if (doorIndex % 2 == 0) {
teamGateBlocks.put(team.getName(), new BlockInfo(lobbyMiddleWallBlock.getFace(rightSide, doorIndex * 2 + 2)));
this.teamGateBlocks.put(team.getName(), new BlockInfo(lobbyMiddleWallBlock.getFace(rightSide, doorIndex * 2 + 2)));
} else {
teamGateBlocks.put(team.getName(), new BlockInfo(lobbyMiddleWallBlock.getFace(leftSide, doorIndex * 2)));
this.teamGateBlocks.put(team.getName(), new BlockInfo(lobbyMiddleWallBlock.getFace(leftSide, doorIndex * 2)));
}
} else {
if (doorIndex == 0) {
teamGateBlocks.put(team.getName(), new BlockInfo(lobbyMiddleWallBlock));
this.teamGateBlocks.put(team.getName(), new BlockInfo(lobbyMiddleWallBlock));
}
else if (doorIndex % 2 == 0) {
teamGateBlocks.put(team.getName(), new BlockInfo(lobbyMiddleWallBlock.getFace(rightSide, doorIndex * 2)));
this.teamGateBlocks.put(team.getName(), new BlockInfo(lobbyMiddleWallBlock.getFace(rightSide, doorIndex * 2)));
} else {
teamGateBlocks.put(team.getName(), new BlockInfo(lobbyMiddleWallBlock.getFace(leftSide, doorIndex * 2 + 2)));
this.teamGateBlocks.put(team.getName(), new BlockInfo(lobbyMiddleWallBlock.getFace(leftSide, doorIndex * 2 + 2)));
}
}
}
}
}
warHubLinkGate = new BlockInfo(lobbyMiddleWallBlock.getFace(wall, 9));
this.warHubLinkGate = new BlockInfo(lobbyMiddleWallBlock.getFace(this.wall, 9));
}
private void placeGate(Block block,
@ -403,179 +403,194 @@ public class ZoneLobby {
if (block != null) {
BlockFace leftSide = null; // look at the zone
BlockFace rightSide = null;
if (wall == BlockFace.NORTH) {
if (this.wall == BlockFace.NORTH) {
leftSide = BlockFace.EAST;
rightSide = BlockFace.WEST;
} else if (wall == BlockFace.EAST) {
} else if (this.wall == BlockFace.EAST) {
leftSide = BlockFace.SOUTH;
rightSide = BlockFace.NORTH;
} else if (wall == BlockFace.SOUTH) {
} else if (this.wall == BlockFace.SOUTH) {
leftSide = BlockFace.WEST;
rightSide = BlockFace.EAST;
} else if (wall == BlockFace.WEST) {
} else if (this.wall == BlockFace.WEST) {
leftSide = BlockFace.NORTH;
rightSide = BlockFace.SOUTH;
}
}
block.getFace(BlockFace.DOWN).setType(Material.GLOWSTONE);
setBlock(block.getFace(leftSide), teamKind);
setBlock(block.getFace(rightSide).getFace(BlockFace.UP), teamKind);
setBlock(block.getFace(leftSide).getFace(BlockFace.UP).getFace(BlockFace.UP), teamKind);
setBlock(block.getFace(rightSide), teamKind);
setBlock(block.getFace(leftSide).getFace(BlockFace.UP), teamKind);
setBlock(block.getFace(rightSide).getFace(BlockFace.UP).getFace(BlockFace.UP), teamKind);
setBlock(block.getFace(BlockFace.UP).getFace(BlockFace.UP), teamKind);
this.setBlock(block.getFace(leftSide), teamKind);
this.setBlock(block.getFace(rightSide).getFace(BlockFace.UP), teamKind);
this.setBlock(block.getFace(leftSide).getFace(BlockFace.UP).getFace(BlockFace.UP), teamKind);
this.setBlock(block.getFace(rightSide), teamKind);
this.setBlock(block.getFace(leftSide).getFace(BlockFace.UP), teamKind);
this.setBlock(block.getFace(rightSide).getFace(BlockFace.UP).getFace(BlockFace.UP), teamKind);
this.setBlock(block.getFace(BlockFace.UP).getFace(BlockFace.UP), teamKind);
}
}
private void placeGate(Block block,
Material material) {
if (block != null) {
BlockFace leftSide = null; // look at the zone
BlockFace rightSide = null;
if (wall == BlockFace.NORTH) {
if (this.wall == BlockFace.NORTH) {
leftSide = BlockFace.EAST;
rightSide = BlockFace.WEST;
} else if (wall == BlockFace.EAST) {
} else if (this.wall == BlockFace.EAST) {
leftSide = BlockFace.SOUTH;
rightSide = BlockFace.NORTH;
} else if (wall == BlockFace.SOUTH) {
} else if (this.wall == BlockFace.SOUTH) {
leftSide = BlockFace.WEST;
rightSide = BlockFace.EAST;
} else if (wall == BlockFace.WEST) {
} else if (this.wall == BlockFace.WEST) {
leftSide = BlockFace.NORTH;
rightSide = BlockFace.SOUTH;
}
}
block.getFace(BlockFace.DOWN).setType(Material.GLOWSTONE);
setBlock(block.getFace(leftSide), material);
setBlock(block.getFace(rightSide).getFace(BlockFace.UP), material);
setBlock(block.getFace(leftSide).getFace(BlockFace.UP).getFace(BlockFace.UP), material);
setBlock(block.getFace(rightSide), material);
setBlock(block.getFace(leftSide).getFace(BlockFace.UP), material);
setBlock(block.getFace(rightSide).getFace(BlockFace.UP).getFace(BlockFace.UP), material);
setBlock(block.getFace(BlockFace.UP).getFace(BlockFace.UP), material);
this.setBlock(block.getFace(leftSide), material);
this.setBlock(block.getFace(rightSide).getFace(BlockFace.UP), material);
this.setBlock(block.getFace(leftSide).getFace(BlockFace.UP).getFace(BlockFace.UP), material);
this.setBlock(block.getFace(rightSide), material);
this.setBlock(block.getFace(leftSide).getFace(BlockFace.UP), material);
this.setBlock(block.getFace(rightSide).getFace(BlockFace.UP).getFace(BlockFace.UP), material);
this.setBlock(block.getFace(BlockFace.UP).getFace(BlockFace.UP), material);
}
}
private void setBlock(Block block, TeamKind kind) {
block.setType(kind.getMaterial());
block.setData(kind.getData());
}
private void setBlock(Block block, Material material) {
block.setType(material);
}
private void placeAutoAssignGate() {
if (autoAssignGate != null) {
if (this.autoAssignGate != null) {
BlockFace leftSide = null; // look at the zone
BlockFace rightSide = null;
if (wall == BlockFace.NORTH) {
if (this.wall == BlockFace.NORTH) {
leftSide = BlockFace.EAST;
rightSide = BlockFace.WEST;
} else if (wall == BlockFace.EAST) {
} else if (this.wall == BlockFace.EAST) {
leftSide = BlockFace.SOUTH;
rightSide = BlockFace.NORTH;
} else if (wall == BlockFace.SOUTH) {
} else if (this.wall == BlockFace.SOUTH) {
leftSide = BlockFace.WEST;
rightSide = BlockFace.EAST;
} else if (wall == BlockFace.WEST) {
} else if (this.wall == BlockFace.WEST) {
leftSide = BlockFace.NORTH;
rightSide = BlockFace.SOUTH;
}
List<Team> teams = warzone.getTeams();
Block autoAssignGateBlock = BlockInfo.getBlock(warzone.getWorld(), autoAssignGate);
setBlock(autoAssignGateBlock.getFace(BlockFace.DOWN), (Material.GLOWSTONE));
}
List<Team> teams = this.warzone.getTeams();
Block autoAssignGateBlock = BlockInfo.getBlock(this.warzone.getWorld(), this.autoAssignGate);
this.setBlock(autoAssignGateBlock.getFace(BlockFace.DOWN), (Material.GLOWSTONE));
int size = teams.size();
int index = 0;
TeamKind kind = null;
if (index >= size) kind = TeamKinds.teamKindFromString("diamond");
else kind = teams.get(index).getKind();
setBlock(autoAssignGateBlock.getFace(leftSide), kind);
TeamKind kind = null;
if (index >= size) {
kind = TeamKinds.teamKindFromString("diamond");
} else {
kind = teams.get(index).getKind();
}
this.setBlock(autoAssignGateBlock.getFace(leftSide), kind);
index++;
if (index >= size) kind = TeamKinds.teamKindFromString("iron");
else kind = teams.get(index).getKind();
setBlock(autoAssignGateBlock.getFace(leftSide).getFace(BlockFace.UP), kind);
if (index >= size) {
kind = TeamKinds.teamKindFromString("iron");
} else {
kind = teams.get(index).getKind();
}
this.setBlock(autoAssignGateBlock.getFace(leftSide).getFace(BlockFace.UP), kind);
index++;
if (index >= size) kind = TeamKinds.teamKindFromString("gold");
else kind = teams.get(index).getKind();
setBlock(autoAssignGateBlock.getFace(leftSide).getFace(BlockFace.UP).getFace(BlockFace.UP), kind);
if (index >= size) {
kind = TeamKinds.teamKindFromString("gold");
} else {
kind = teams.get(index).getKind();
}
this.setBlock(autoAssignGateBlock.getFace(leftSide).getFace(BlockFace.UP).getFace(BlockFace.UP), kind);
index++;
if (index >= size) kind = TeamKinds.teamKindFromString("diamond");
else kind = teams.get(index).getKind();
setBlock(autoAssignGateBlock.getFace(BlockFace.UP).getFace(BlockFace.UP), kind);
if (index >= size) {
kind = TeamKinds.teamKindFromString("diamond");
} else {
kind = teams.get(index).getKind();
}
this.setBlock(autoAssignGateBlock.getFace(BlockFace.UP).getFace(BlockFace.UP), kind);
index++;
if (index >= size) kind = TeamKinds.teamKindFromString("iron");
else kind = teams.get(index).getKind();
setBlock(autoAssignGateBlock.getFace(rightSide).getFace(BlockFace.UP).getFace(BlockFace.UP), kind);
if (index >= size) {
kind = TeamKinds.teamKindFromString("iron");
} else {
kind = teams.get(index).getKind();
}
this.setBlock(autoAssignGateBlock.getFace(rightSide).getFace(BlockFace.UP).getFace(BlockFace.UP), kind);
index++;
if (index >= size) kind = TeamKinds.teamKindFromString("gold");
else kind = teams.get(index).getKind();
setBlock(autoAssignGateBlock.getFace(rightSide).getFace(BlockFace.UP), kind);
if (index >= size) {
kind = TeamKinds.teamKindFromString("gold");
} else {
kind = teams.get(index).getKind();
}
this.setBlock(autoAssignGateBlock.getFace(rightSide).getFace(BlockFace.UP), kind);
index++;
if (index >= size) kind = TeamKinds.teamKindFromString("diamond");
else kind = teams.get(index).getKind();
setBlock(autoAssignGateBlock.getFace(rightSide), kind);
if (index >= size) {
kind = TeamKinds.teamKindFromString("diamond");
} else {
kind = teams.get(index).getKind();
}
this.setBlock(autoAssignGateBlock.getFace(rightSide), kind);
}
}
public boolean isInTeamGate(Team team, Location location) {
BlockInfo info = teamGateBlocks.get(team.getName());
BlockInfo info = this.teamGateBlocks.get(team.getName());
if (info != null) {
if (location.getBlockX() == info.getX()
&& location.getBlockY() == info.getY()
&& location.getBlockZ() == info.getZ()) {
return true;
}
&& location.getBlockZ() == info.getZ())
return true;
}
return false;
}
public boolean isAutoAssignGate(Location location) {
if (autoAssignGate != null
&& (location.getBlockX() == autoAssignGate.getX()
&& location.getBlockY() == autoAssignGate.getY()
&& location.getBlockZ() == autoAssignGate.getZ()) )
{
return true;
}
if (this.autoAssignGate != null
&& (location.getBlockX() == this.autoAssignGate.getX()
&& location.getBlockY() == this.autoAssignGate.getY()
&& location.getBlockZ() == this.autoAssignGate.getZ()) )
return true;
return false;
}
public Volume getVolume() {
return this.volume;
}
public void setVolume(Volume volume) {
this.volume = volume;
}
public BlockFace getWall() {
return wall;
return this.wall;
}
public boolean isInWarHubLinkGate(Location location) {
if (warHubLinkGate != null
&& location.getBlockX() == warHubLinkGate.getX()
&& location.getBlockY() == warHubLinkGate.getY()
&& location.getBlockZ() == warHubLinkGate.getZ()) {
return true;
}
if (this.warHubLinkGate != null
&& location.getBlockX() == this.warHubLinkGate.getX()
&& location.getBlockY() == this.warHubLinkGate.getY()
&& location.getBlockZ() == this.warHubLinkGate.getZ())
return true;
return false;
}
public boolean blockIsAGateBlock(Block block, BlockFace blockWall) {
if (blockWall == wall) {
for (String teamName: teamGateBlocks.keySet()) {
BlockInfo gateInfo = teamGateBlocks.get(teamName);
if (isPartOfGate(BlockInfo.getBlock(warzone.getWorld(), gateInfo), block)) {
return true;
}
}
if (autoAssignGate != null && isPartOfGate(BlockInfo.getBlock(warzone.getWorld(), autoAssignGate), block)) {
// auto assign
return true;
if (blockWall == this.wall) {
for (String teamName: this.teamGateBlocks.keySet()) {
BlockInfo gateInfo = this.teamGateBlocks.get(teamName);
if (this.isPartOfGate(BlockInfo.getBlock(this.warzone.getWorld(), gateInfo), block))
return true;
}
if (this.autoAssignGate != null && this.isPartOfGate(BlockInfo.getBlock(this.warzone.getWorld(), this.autoAssignGate), block))
// auto assign
return true;
}
return false;
}
@ -584,16 +599,16 @@ public class ZoneLobby {
if (gateBlock != null) {
BlockFace leftSide = null; // look at the zone
BlockFace rightSide = null;
if (wall == BlockFace.NORTH) {
if (this.wall == BlockFace.NORTH) {
leftSide = BlockFace.EAST;
rightSide = BlockFace.WEST;
} else if (wall == BlockFace.EAST) {
} else if (this.wall == BlockFace.EAST) {
leftSide = BlockFace.SOUTH;
rightSide = BlockFace.NORTH;
} else if (wall == BlockFace.SOUTH) {
} else if (this.wall == BlockFace.SOUTH) {
leftSide = BlockFace.WEST;
rightSide = BlockFace.EAST;
} else if (wall == BlockFace.WEST) {
} else if (this.wall == BlockFace.WEST) {
leftSide = BlockFace.NORTH;
rightSide = BlockFace.SOUTH;
}
@ -646,9 +661,9 @@ public class ZoneLobby {
}
public void resetTeamGateSign(Team team) {
BlockInfo info = teamGateBlocks.get(team.getName());
BlockInfo info = this.teamGateBlocks.get(team.getName());
if (info != null) {
resetTeamGateSign(team, BlockInfo.getBlock(warzone.getWorld(), info));
this.resetTeamGateSign(team, BlockInfo.getBlock(this.warzone.getWorld(), info));
}
}
@ -656,82 +671,94 @@ public class ZoneLobby {
if (gate != null) {
String[] lines = new String[4];
lines[0] = "Team " + team.getName();
lines[1] = team.getPlayers().size() + "/" + warzone.getTeamCap() + " players";
lines[2] = team.getPoints() + "/" + warzone.getScoreCap() + " pts";
if (warzone.getLifePool() == -1) {
lines[1] = team.getPlayers().size() + "/" + this.warzone.getTeamCap() + " players";
lines[2] = team.getPoints() + "/" + this.warzone.getScoreCap() + " pts";
if (this.warzone.getLifePool() == -1) {
lines[3] = "unlimited lives";
} else {
lines[3] = team.getRemainingLifes() + "/" + warzone.getLifePool() + " lives left";
lines[3] = team.getRemainingLifes() + "/" + this.warzone.getLifePool() + " lives left";
}
resetGateSign(gate, lines, true);
this.resetGateSign(gate, lines, true);
}
}
private void resetGateSign(Block gate, String[] lines, boolean awayFromWall) {
Block block = null;
BlockFace direction = null;
if (awayFromWall) {
direction = wall;
} else if (wall == BlockFace.NORTH) {
direction = this.wall;
} else if (this.wall == BlockFace.NORTH) {
direction = BlockFace.SOUTH;
} else if (wall == BlockFace.EAST) {
} else if (this.wall == BlockFace.EAST) {
direction = BlockFace.WEST;
} else if (wall == BlockFace.SOUTH) {
} else if (this.wall == BlockFace.SOUTH) {
direction = BlockFace.NORTH;
} else if (wall == BlockFace.WEST) {
} else if (this.wall == BlockFace.WEST) {
direction = BlockFace.EAST;
}
byte data = 0;
if (wall == BlockFace.NORTH) {
if (this.wall == BlockFace.NORTH) {
block = gate.getFace(direction).getFace(BlockFace.EAST);
if (awayFromWall) data = (byte)4;
else data = (byte)12;
} else if (wall == BlockFace.EAST) {
if (awayFromWall) {
data = (byte)4;
} else {
data = (byte)12;
}
} else if (this.wall == BlockFace.EAST) {
block = gate.getFace(direction).getFace(BlockFace.SOUTH);
if (awayFromWall) data = (byte)8;
else data = (byte)0;
} else if (wall == BlockFace.SOUTH) {
if (awayFromWall) {
data = (byte)8;
} else {
data = (byte)0;
}
} else if (this.wall == BlockFace.SOUTH) {
block = gate.getFace(direction).getFace(BlockFace.WEST);
if (awayFromWall) data = (byte)12;
else data = (byte)4;
} else if (wall == BlockFace.WEST) {
if (awayFromWall) {
data = (byte)12;
} else {
data = (byte)4;
}
} else if (this.wall == BlockFace.WEST) {
block = gate.getFace(direction).getFace(BlockFace.NORTH);
if (awayFromWall) data = (byte)0;
else data = (byte)8;
}
SignHelper.setToSign(war, block, data, lines);
if (awayFromWall) {
data = (byte)0;
} else {
data = (byte)8;
}
}
SignHelper.setToSign(this.war, block, data, lines);
}
public boolean isLeavingZone(Location location) {
BlockFace inside = null;
BlockFace left = null;
BlockFace right = null;
if (wall == BlockFace.NORTH) {
if (this.wall == BlockFace.NORTH) {
inside = BlockFace.SOUTH;
left = BlockFace.WEST;
right = BlockFace.EAST;
} else if (wall == BlockFace.EAST) {
} else if (this.wall == BlockFace.EAST) {
inside = BlockFace.WEST;
left = BlockFace.NORTH;
right = BlockFace.SOUTH;
} else if (wall == BlockFace.SOUTH) {
} else if (this.wall == BlockFace.SOUTH) {
inside = BlockFace.NORTH;
left = BlockFace.EAST;
right = BlockFace.WEST;
} else if (wall == BlockFace.WEST) {
} else if (this.wall == BlockFace.WEST) {
inside = BlockFace.EAST;
left = BlockFace.SOUTH;
right = BlockFace.NORTH;
}
if (autoAssignGate != null){
if (leaving(location, BlockInfo.getBlock(warzone.getWorld(), autoAssignGate), inside, left, right)) return true;
}
for (String teamName : teamGateBlocks.keySet()) {
BlockInfo info = teamGateBlocks.get(teamName);
if (leaving(location, BlockInfo.getBlock(warzone.getWorld(), info), inside, left, right)) return true;
if (this.autoAssignGate != null){
if (this.leaving(location, BlockInfo.getBlock(this.warzone.getWorld(), this.autoAssignGate), inside, left, right)) return true;
}
for (String teamName : this.teamGateBlocks.keySet()) {
BlockInfo info = this.teamGateBlocks.get(teamName);
if (this.leaving(location, BlockInfo.getBlock(this.warzone.getWorld(), info), inside, left, right)) return true;
}
return false;
}
@ -741,17 +768,16 @@ public class ZoneLobby {
// int x = location.getBlockX();
// int y = location.getBlockY();
// int z = location.getBlockZ();
//
//
// 3x4x1 deep
Volume gateExitVolume = new Volume("tempGateExit", war, location.getWorld());
Volume gateExitVolume = new Volume("tempGateExit", this.war, 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));
if (gateExitVolume.contains(location)) {
return true;
}
if (gateExitVolume.contains(location))
return true;
// 1 block thick arrow like detection grid:
// Block out = gate.getFace(inside);
// Block outL = out.getFace(left);

View File

@ -24,144 +24,166 @@ public class ZoneSetter {
this.player = player;
this.zoneName = zoneName;
}
public void placeNorthwest() {
Warzone warzone = war.findWarzone(zoneName);
Block northwestBlock = player.getLocation().getWorld().getBlockAt(player.getLocation());
Warzone warzone = this.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(war, player.getLocation().getWorld(), zoneName);
war.getIncompleteZones().add(warzone);
warzone = new Warzone(this.war, this.player.getLocation().getWorld(), this.zoneName);
this.war.getIncompleteZones().add(warzone);
warzone.getVolume().setNorthwest(northwestBlock);
war.msg(player, "Warzone " + warzone.getName() + " created. Northwesternmost point set to x:"
+ (int)warzone.getVolume().getNorthwestX() + " z:" + (int)warzone.getVolume().getNorthwestZ() + ". ");
this.war.msg(this.player, "Warzone " + warzone.getName() + " created. Northwesternmost point set to x:"
+ warzone.getVolume().getNorthwestX() + " z:" + warzone.getVolume().getNorthwestZ() + ". ");
} else {
// change existing warzone
resetWarzone(warzone, msgString);
this.resetWarzone(warzone, msgString);
warzone.getVolume().setNorthwest(northwestBlock);
msgString.append("Warzone " + warzone.getName() + " modified. Northwesternmost point set to x:"
+ (int)warzone.getVolume().getNorthwestX() + " z:" + (int)warzone.getVolume().getNorthwestZ() + ". ");
msgString.append("Warzone " + warzone.getName() + " modified. Northwesternmost point set to x:"
+ warzone.getVolume().getNorthwestX() + " z:" + warzone.getVolume().getNorthwestZ() + ". ");
}
saveIfReady(warzone, msgString);
this.saveIfReady(warzone, msgString);
} catch (NotNorthwestException e) {
war.badMsg(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
this.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
}
} catch (TooSmallException e) {
handleTooSmall();
if (warzone.getVolume().isSaved()) warzone.initializeZone();
this.handleTooSmall();
if (warzone.getVolume().isSaved()) {
warzone.initializeZone();
}
} catch (TooBigException e) {
handleTooBig();
if (warzone.getVolume().isSaved()) warzone.initializeZone();
this.handleTooBig();
if (warzone.getVolume().isSaved()) {
warzone.initializeZone();
}
}
}
public void placeSoutheast() {
Warzone warzone = war.findWarzone(zoneName);
Block southeastBlock = player.getLocation().getWorld().getBlockAt(player.getLocation());
Warzone warzone = this.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(war, player.getLocation().getWorld(), zoneName);
war.getIncompleteZones().add(warzone);
warzone = new Warzone(this.war, this.player.getLocation().getWorld(), this.zoneName);
this.war.getIncompleteZones().add(warzone);
warzone.getVolume().setSoutheast(southeastBlock);
war.msg(player, "Warzone " + warzone.getName() + " created. Southeasternmost point set to x:"
+ (int)warzone.getVolume().getSoutheastX() + " z:" + (int)warzone.getVolume().getSoutheastZ() + ". ");
this.war.msg(this.player, "Warzone " + warzone.getName() + " created. Southeasternmost point set to x:"
+ warzone.getVolume().getSoutheastX() + " z:" + warzone.getVolume().getSoutheastZ() + ". ");
} else {
// change existing warzone
resetWarzone(warzone, msgString);
this.resetWarzone(warzone, msgString);
warzone.getVolume().setSoutheast(southeastBlock);
msgString.append("Warzone " + warzone.getName() + " modified. Southeasternmost point set to x:"
+ (int)warzone.getVolume().getSoutheastX() + " z:" + (int)warzone.getVolume().getSoutheastZ() + ". ");
msgString.append("Warzone " + warzone.getName() + " modified. Southeasternmost point set to x:"
+ warzone.getVolume().getSoutheastX() + " z:" + warzone.getVolume().getSoutheastZ() + ". ");
}
saveIfReady(warzone, msgString);
this.saveIfReady(warzone, msgString);
} catch (NotSoutheastException e) {
war.badMsg(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
this.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
}
} catch (TooSmallException e) {
handleTooSmall();
if (warzone.getVolume().isSaved()) warzone.initializeZone();
this.handleTooSmall();
if (warzone.getVolume().isSaved()) {
warzone.initializeZone();
}
} catch (TooBigException e) {
handleTooBig();
if (warzone.getVolume().isSaved()) warzone.initializeZone();
this.handleTooBig();
if (warzone.getVolume().isSaved()) {
warzone.initializeZone();
}
}
}
public void placeCorner1() {
Block corner1Block = player.getLocation().getWorld().getBlockAt(player.getLocation());
placeCorner1(corner1Block);
Block corner1Block = this.player.getLocation().getWorld().getBlockAt(this.player.getLocation());
this.placeCorner1(corner1Block);
}
public void placeCorner1(Block corner1Block) {
Warzone warzone = war.findWarzone(zoneName);
Warzone warzone = this.war.findWarzone(this.zoneName);
StringBuilder msgString = new StringBuilder();
try
{
if (warzone == null) {
// create the warzone
warzone = new Warzone(war, player.getLocation().getWorld(), zoneName);
war.getIncompleteZones().add(warzone);
warzone = new Warzone(this.war, this.player.getLocation().getWorld(), this.zoneName);
this.war.getIncompleteZones().add(warzone);
warzone.getVolume().setZoneCornerOne(corner1Block);
war.msg(player, "Warzone " + warzone.getName() + " created. Corner 1 set to x:"
+ (int)corner1Block.getX() + " y:" + (int)corner1Block.getY() + " z:" + (int)corner1Block.getZ() + ". ");
this.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
resetWarzone(warzone, msgString);
this.resetWarzone(warzone, msgString);
warzone.getVolume().setZoneCornerOne(corner1Block);
msgString.append("Warzone " + warzone.getName() + " modified. Corner 1 set to x:"
+ (int)corner1Block.getX() + " y:" + (int)corner1Block.getY() + " z:" + (int)corner1Block.getZ() + ". ");
msgString.append("Warzone " + warzone.getName() + " modified. Corner 1 set to x:"
+ corner1Block.getX() + " y:" + corner1Block.getY() + " z:" + corner1Block.getZ() + ". ");
}
saveIfReady(warzone, msgString);
this.saveIfReady(warzone, msgString);
} catch (TooSmallException e) {
handleTooSmall();
if (warzone.getVolume().isSaved()) warzone.initializeZone();
this.handleTooSmall();
if (warzone.getVolume().isSaved()) {
warzone.initializeZone();
}
} catch (TooBigException e) {
handleTooBig();
if (warzone.getVolume().isSaved()) warzone.initializeZone();
this.handleTooBig();
if (warzone.getVolume().isSaved()) {
warzone.initializeZone();
}
}
}
public void placeCorner2() {
Block corner2Block = player.getLocation().getWorld().getBlockAt(player.getLocation());
placeCorner2(corner2Block);
Block corner2Block = this.player.getLocation().getWorld().getBlockAt(this.player.getLocation());
this.placeCorner2(corner2Block);
}
public void placeCorner2(Block corner2Block) {
Warzone warzone = war.findWarzone(zoneName);
Warzone warzone = this.war.findWarzone(this.zoneName);
StringBuilder msgString = new StringBuilder();
try
{
if (warzone == null) {
// create the warzone
warzone = new Warzone(war, player.getLocation().getWorld(), zoneName);
war.getIncompleteZones().add(warzone);
warzone = new Warzone(this.war, this.player.getLocation().getWorld(), this.zoneName);
this.war.getIncompleteZones().add(warzone);
warzone.getVolume().setZoneCornerTwo(corner2Block);
war.msg(player, "Warzone " + warzone.getName() + " created. Corner 2 set to x:"
+ (int)corner2Block.getX() + " y:" + (int)corner2Block.getY() + " z:" + (int)corner2Block.getZ() + ". ");
this.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
resetWarzone(warzone, msgString);
this.resetWarzone(warzone, msgString);
warzone.getVolume().setZoneCornerTwo(corner2Block);
msgString.append("Warzone " + warzone.getName() + " modified. Corner 2 set to x:"
+ (int)corner2Block.getX() + " y:" + (int)corner2Block.getY() + " z:" + (int)corner2Block.getZ() + ". ");
msgString.append("Warzone " + warzone.getName() + " modified. Corner 2 set to x:"
+ corner2Block.getX() + " y:" + corner2Block.getY() + " z:" + corner2Block.getZ() + ". ");
}
saveIfReady(warzone, msgString);
this.saveIfReady(warzone, msgString);
} catch (TooSmallException e) {
handleTooSmall();
if (warzone.getVolume().isSaved()) warzone.initializeZone();
this.handleTooSmall();
if (warzone.getVolume().isSaved()) {
warzone.initializeZone();
}
} catch (TooBigException e) {
handleTooBig();
if (warzone.getVolume().isSaved()) warzone.initializeZone();
this.handleTooBig();
if (warzone.getVolume().isSaved()) {
warzone.initializeZone();
}
}
}
private void resetWarzone(Warzone warzone, StringBuilder msgString) {
if (warzone.getVolume().isSaved()) {
war.msg(player, "Resetting " + warzone.getName() + " blocks.");
this.war.msg(this.player, "Resetting " + warzone.getName() + " blocks.");
if (warzone.getLobby() != null && warzone.getLobby().getVolume() != null) {
warzone.getLobby().getVolume().resetBlocks();
}
@ -169,51 +191,51 @@ public class ZoneSetter {
msgString.append(reset + " blocks reset. ");
}
}
private void handleTooSmall() {
war.badMsg(player, "That would make the " + zoneName + " warzone too small. Sides must be at least 10 blocks and all existing structures (spawns, flags, etc) must fit inside.");
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.");
}
private void handleTooBig() {
war.badMsg(player, "That would make the " + zoneName + " warzone too big. Sides must be less than 750 blocks.");
this.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 (!war.getWarzones().contains(warzone)) {
war.addWarzone(warzone);
if (!this.war.getWarzones().contains(warzone)) {
this.war.addWarzone(warzone);
}
if (war.getIncompleteZones().contains(warzone)) {
war.getIncompleteZones().remove(warzone);
if (this.war.getIncompleteZones().contains(warzone)) {
this.war.getIncompleteZones().remove(warzone);
}
WarMapper.save(war);
WarMapper.save(this.war);
msgString.append("Saving new warzone blocks...");
war.msg(player, msgString.toString());
warzone.saveState(false); // we just changed the volume, cant reset walls
this.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(war, warzone, BlockFace.SOUTH);
ZoneLobby lobby = new ZoneLobby(this.war, warzone, BlockFace.SOUTH);
warzone.setLobby(lobby);
if (war.getWarHub() != null) { // warhub has to change
war.getWarHub().getVolume().resetBlocks();
war.getWarHub().initialize();
if (this.war.getWarHub() != null) { // warhub has to change
this.war.getWarHub().getVolume().resetBlocks();
this.war.getWarHub().initialize();
}
war.msg(player, "Default lobby created on south side of zone. Use /setzonelobby <n/s/e/w> to change its position.");
this.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(war, warzone, true);
war.msg(player, "Warzone saved.");
WarzoneMapper.save(this.war, warzone, true);
this.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.");
}
war.msg(player, msgString.toString());
this.war.msg(this.player, msgString.toString());
}
}
}

View File

@ -14,7 +14,7 @@ import com.tommytony.war.volumes.BlockInfo;
import bukkit.tommytony.war.War;
/**
*
*
* @author tommytony
*
*/
@ -22,9 +22,9 @@ public class ZoneWallGuard {
private Player player;
private Warzone warzone;
private Location playerLocation;
private BlockFace wall;
private List<BlockInfo> glassified = new ArrayList<BlockInfo>();
private BlockFace wall;
private List<BlockInfo> glassified = new ArrayList<BlockInfo>();
public ZoneWallGuard(Player player, War war, Warzone warzone, BlockFace wall) {
this.player = player;
this.wall = wall;
@ -32,194 +32,194 @@ public class ZoneWallGuard {
this.warzone = warzone;
this.activate();
}
private void activate() {
List<Block> nearestWallBlocks = warzone.getNearestWallBlocks(playerLocation);
List<Block> nearestWallBlocks = this.warzone.getNearestWallBlocks(this.playerLocation);
// add wall guard blocks
for (Block block : nearestWallBlocks) {
glassify(block, wall);
this.glassify(block, this.wall);
if (this.wall != BlockFace.UP && this.wall != BlockFace.DOWN) {
glassify(block.getFace(BlockFace.UP), wall);
glassify(block.getFace(BlockFace.UP, 2), wall);
glassify(block.getFace(BlockFace.DOWN), wall);
glassify(block.getFace(BlockFace.DOWN, 2), wall);
this.glassify(block.getFace(BlockFace.UP), this.wall);
this.glassify(block.getFace(BlockFace.UP, 2), this.wall);
this.glassify(block.getFace(BlockFace.DOWN), this.wall);
this.glassify(block.getFace(BlockFace.DOWN, 2), this.wall);
}
if (this.wall == BlockFace.NORTH && warzone.getVolume().isNorthWallBlock(block)) {
glassify(block.getFace(BlockFace.EAST), BlockFace.NORTH);
glassify(block.getFace(BlockFace.EAST).getFace(BlockFace.UP), BlockFace.NORTH);
glassify(block.getFace(BlockFace.EAST).getFace(BlockFace.DOWN), BlockFace.NORTH);
glassify(block.getFace(BlockFace.EAST, 2), BlockFace.NORTH);
glassify(block.getFace(BlockFace.EAST, 2).getFace(BlockFace.UP), BlockFace.NORTH);
glassify(block.getFace(BlockFace.EAST, 2).getFace(BlockFace.DOWN), BlockFace.NORTH);
glassify(block.getFace(BlockFace.EAST).getFace(BlockFace.UP, 2), BlockFace.NORTH);
glassify(block.getFace(BlockFace.EAST).getFace(BlockFace.DOWN, 2), BlockFace.NORTH);
glassify(block.getFace(BlockFace.WEST), BlockFace.NORTH);
glassify(block.getFace(BlockFace.WEST).getFace(BlockFace.UP), BlockFace.NORTH);
glassify(block.getFace(BlockFace.WEST).getFace(BlockFace.DOWN), BlockFace.NORTH);
glassify(block.getFace(BlockFace.WEST, 2), BlockFace.NORTH);
glassify(block.getFace(BlockFace.WEST, 2).getFace(BlockFace.UP), BlockFace.NORTH);
glassify(block.getFace(BlockFace.WEST, 2).getFace(BlockFace.DOWN), BlockFace.NORTH);
glassify(block.getFace(BlockFace.WEST).getFace(BlockFace.UP, 2), BlockFace.NORTH);
glassify(block.getFace(BlockFace.WEST).getFace(BlockFace.DOWN, 2), BlockFace.NORTH);
} else if (this.wall == BlockFace.SOUTH && warzone.getVolume().isSouthWallBlock(block)) {
glassify(block.getFace(BlockFace.EAST), BlockFace.SOUTH);
glassify(block.getFace(BlockFace.EAST).getFace(BlockFace.UP), BlockFace.SOUTH);
glassify(block.getFace(BlockFace.EAST).getFace(BlockFace.DOWN), BlockFace.SOUTH);
glassify(block.getFace(BlockFace.EAST, 2), BlockFace.SOUTH);
glassify(block.getFace(BlockFace.EAST, 2).getFace(BlockFace.UP), BlockFace.SOUTH);
glassify(block.getFace(BlockFace.EAST, 2).getFace(BlockFace.DOWN), BlockFace.SOUTH);
glassify(block.getFace(BlockFace.EAST).getFace(BlockFace.UP, 2), BlockFace.SOUTH);
glassify(block.getFace(BlockFace.EAST).getFace(BlockFace.DOWN, 2), BlockFace.SOUTH);
glassify(block.getFace(BlockFace.WEST), BlockFace.SOUTH);
glassify(block.getFace(BlockFace.WEST).getFace(BlockFace.UP), BlockFace.SOUTH);
glassify(block.getFace(BlockFace.WEST).getFace(BlockFace.DOWN), BlockFace.SOUTH);
glassify(block.getFace(BlockFace.WEST, 2), BlockFace.SOUTH);
glassify(block.getFace(BlockFace.WEST, 2).getFace(BlockFace.UP), BlockFace.SOUTH);
glassify(block.getFace(BlockFace.WEST, 2).getFace(BlockFace.DOWN), BlockFace.SOUTH);
glassify(block.getFace(BlockFace.WEST).getFace(BlockFace.UP, 2), BlockFace.SOUTH);
glassify(block.getFace(BlockFace.WEST).getFace(BlockFace.DOWN, 2), BlockFace.SOUTH);
} else if (this.wall == BlockFace.EAST && warzone.getVolume().isEastWallBlock(block)) {
glassify(block.getFace(BlockFace.NORTH), BlockFace.EAST);
glassify(block.getFace(BlockFace.NORTH).getFace(BlockFace.UP), BlockFace.EAST);
glassify(block.getFace(BlockFace.NORTH).getFace(BlockFace.DOWN), BlockFace.EAST);
glassify(block.getFace(BlockFace.NORTH, 2), BlockFace.EAST);
glassify(block.getFace(BlockFace.NORTH, 2).getFace(BlockFace.UP), BlockFace.EAST);
glassify(block.getFace(BlockFace.NORTH, 2).getFace(BlockFace.DOWN), BlockFace.EAST);
glassify(block.getFace(BlockFace.NORTH).getFace(BlockFace.UP, 2), BlockFace.EAST);
glassify(block.getFace(BlockFace.NORTH).getFace(BlockFace.DOWN, 2), BlockFace.EAST);
glassify(block.getFace(BlockFace.SOUTH), BlockFace.EAST);
glassify(block.getFace(BlockFace.SOUTH).getFace(BlockFace.UP), BlockFace.EAST);
glassify(block.getFace(BlockFace.SOUTH).getFace(BlockFace.DOWN), BlockFace.EAST);
glassify(block.getFace(BlockFace.SOUTH, 2), BlockFace.EAST);
glassify(block.getFace(BlockFace.SOUTH, 2).getFace(BlockFace.UP), BlockFace.EAST);
glassify(block.getFace(BlockFace.SOUTH, 2).getFace(BlockFace.DOWN), BlockFace.EAST);
glassify(block.getFace(BlockFace.SOUTH).getFace(BlockFace.UP, 2), BlockFace.EAST);
glassify(block.getFace(BlockFace.SOUTH).getFace(BlockFace.DOWN, 2), BlockFace.EAST);
} else if (this.wall == BlockFace.WEST && warzone.getVolume().isWestWallBlock(block)) {
glassify(block.getFace(BlockFace.NORTH), BlockFace.WEST);
glassify(block.getFace(BlockFace.NORTH).getFace(BlockFace.UP), BlockFace.WEST);
glassify(block.getFace(BlockFace.NORTH).getFace(BlockFace.DOWN), BlockFace.WEST);
glassify(block.getFace(BlockFace.NORTH, 2), BlockFace.WEST);
glassify(block.getFace(BlockFace.NORTH, 2).getFace(BlockFace.UP), BlockFace.WEST);
glassify(block.getFace(BlockFace.NORTH, 2).getFace(BlockFace.DOWN), BlockFace.WEST);
glassify(block.getFace(BlockFace.NORTH).getFace(BlockFace.UP, 2), BlockFace.WEST);
glassify(block.getFace(BlockFace.NORTH).getFace(BlockFace.DOWN, 2), BlockFace.WEST);
glassify(block.getFace(BlockFace.SOUTH), BlockFace.WEST);
glassify(block.getFace(BlockFace.SOUTH).getFace(BlockFace.UP), BlockFace.WEST);
glassify(block.getFace(BlockFace.SOUTH).getFace(BlockFace.DOWN), BlockFace.WEST);
glassify(block.getFace(BlockFace.SOUTH, 2), BlockFace.WEST);
glassify(block.getFace(BlockFace.SOUTH, 2).getFace(BlockFace.UP), BlockFace.WEST);
glassify(block.getFace(BlockFace.SOUTH, 2).getFace(BlockFace.DOWN), BlockFace.WEST);
glassify(block.getFace(BlockFace.SOUTH).getFace(BlockFace.UP, 2), BlockFace.WEST);
glassify(block.getFace(BlockFace.SOUTH).getFace(BlockFace.DOWN, 2), BlockFace.WEST);
} else if (this.wall == BlockFace.UP && warzone.getVolume().isUpWallBlock(block)) {
glassify(block.getFace(BlockFace.EAST), BlockFace.UP);
glassify(block.getFace(BlockFace.EAST, 2), BlockFace.UP);
glassify(block.getFace(BlockFace.WEST), BlockFace.UP);
glassify(block.getFace(BlockFace.WEST, 2), BlockFace.UP);
glassify(block.getFace(BlockFace.NORTH), BlockFace.UP);
glassify(block.getFace(BlockFace.NORTH).getFace(BlockFace.EAST), BlockFace.UP);
glassify(block.getFace(BlockFace.NORTH).getFace(BlockFace.WEST), BlockFace.UP);
glassify(block.getFace(BlockFace.NORTH, 2), BlockFace.UP);
glassify(block.getFace(BlockFace.NORTH, 2).getFace(BlockFace.EAST), BlockFace.UP);
glassify(block.getFace(BlockFace.NORTH, 2).getFace(BlockFace.WEST), BlockFace.UP);
glassify(block.getFace(BlockFace.NORTH).getFace(BlockFace.EAST, 2), BlockFace.UP);
glassify(block.getFace(BlockFace.NORTH).getFace(BlockFace.WEST, 2), BlockFace.UP);
glassify(block.getFace(BlockFace.SOUTH), BlockFace.UP);
glassify(block.getFace(BlockFace.SOUTH).getFace(BlockFace.EAST), BlockFace.UP);
glassify(block.getFace(BlockFace.SOUTH).getFace(BlockFace.WEST), BlockFace.UP);
glassify(block.getFace(BlockFace.SOUTH, 2), BlockFace.UP);
glassify(block.getFace(BlockFace.SOUTH, 2).getFace(BlockFace.EAST), BlockFace.UP);
glassify(block.getFace(BlockFace.SOUTH, 2).getFace(BlockFace.WEST), BlockFace.UP);
glassify(block.getFace(BlockFace.SOUTH).getFace(BlockFace.UP, 2), BlockFace.UP);
glassify(block.getFace(BlockFace.SOUTH).getFace(BlockFace.DOWN, 2), BlockFace.UP);
} else if (this.wall == BlockFace.DOWN && warzone.getVolume().isDownWallBlock(block)) {
glassify(block.getFace(BlockFace.EAST), BlockFace.DOWN);
glassify(block.getFace(BlockFace.EAST, 2), BlockFace.DOWN);
glassify(block.getFace(BlockFace.WEST), BlockFace.DOWN);
glassify(block.getFace(BlockFace.WEST, 2), BlockFace.DOWN);
glassify(block.getFace(BlockFace.NORTH), BlockFace.DOWN);
glassify(block.getFace(BlockFace.NORTH).getFace(BlockFace.EAST), BlockFace.DOWN);
glassify(block.getFace(BlockFace.NORTH).getFace(BlockFace.WEST), BlockFace.DOWN);
glassify(block.getFace(BlockFace.NORTH, 2), BlockFace.DOWN);
glassify(block.getFace(BlockFace.NORTH, 2).getFace(BlockFace.EAST), BlockFace.DOWN);
glassify(block.getFace(BlockFace.NORTH, 2).getFace(BlockFace.WEST), BlockFace.DOWN);
glassify(block.getFace(BlockFace.NORTH).getFace(BlockFace.EAST, 2), BlockFace.DOWN);
glassify(block.getFace(BlockFace.NORTH).getFace(BlockFace.WEST, 2), BlockFace.DOWN);
glassify(block.getFace(BlockFace.SOUTH), BlockFace.DOWN);
glassify(block.getFace(BlockFace.SOUTH).getFace(BlockFace.EAST), BlockFace.DOWN);
glassify(block.getFace(BlockFace.SOUTH).getFace(BlockFace.WEST), BlockFace.DOWN);
glassify(block.getFace(BlockFace.SOUTH, 2), BlockFace.DOWN);
glassify(block.getFace(BlockFace.SOUTH, 2).getFace(BlockFace.EAST), BlockFace.DOWN);
glassify(block.getFace(BlockFace.SOUTH, 2).getFace(BlockFace.WEST), BlockFace.DOWN);
glassify(block.getFace(BlockFace.SOUTH).getFace(BlockFace.DOWN, 2), BlockFace.DOWN);
glassify(block.getFace(BlockFace.SOUTH).getFace(BlockFace.DOWN, 2), BlockFace.DOWN);
if (this.wall == BlockFace.NORTH && this.warzone.getVolume().isNorthWallBlock(block)) {
this.glassify(block.getFace(BlockFace.EAST), BlockFace.NORTH);
this.glassify(block.getFace(BlockFace.EAST).getFace(BlockFace.UP), BlockFace.NORTH);
this.glassify(block.getFace(BlockFace.EAST).getFace(BlockFace.DOWN), BlockFace.NORTH);
this.glassify(block.getFace(BlockFace.EAST, 2), BlockFace.NORTH);
this.glassify(block.getFace(BlockFace.EAST, 2).getFace(BlockFace.UP), BlockFace.NORTH);
this.glassify(block.getFace(BlockFace.EAST, 2).getFace(BlockFace.DOWN), BlockFace.NORTH);
this.glassify(block.getFace(BlockFace.EAST).getFace(BlockFace.UP, 2), BlockFace.NORTH);
this.glassify(block.getFace(BlockFace.EAST).getFace(BlockFace.DOWN, 2), BlockFace.NORTH);
this.glassify(block.getFace(BlockFace.WEST), BlockFace.NORTH);
this.glassify(block.getFace(BlockFace.WEST).getFace(BlockFace.UP), BlockFace.NORTH);
this.glassify(block.getFace(BlockFace.WEST).getFace(BlockFace.DOWN), BlockFace.NORTH);
this.glassify(block.getFace(BlockFace.WEST, 2), BlockFace.NORTH);
this.glassify(block.getFace(BlockFace.WEST, 2).getFace(BlockFace.UP), BlockFace.NORTH);
this.glassify(block.getFace(BlockFace.WEST, 2).getFace(BlockFace.DOWN), BlockFace.NORTH);
this.glassify(block.getFace(BlockFace.WEST).getFace(BlockFace.UP, 2), BlockFace.NORTH);
this.glassify(block.getFace(BlockFace.WEST).getFace(BlockFace.DOWN, 2), BlockFace.NORTH);
} else if (this.wall == BlockFace.SOUTH && this.warzone.getVolume().isSouthWallBlock(block)) {
this.glassify(block.getFace(BlockFace.EAST), BlockFace.SOUTH);
this.glassify(block.getFace(BlockFace.EAST).getFace(BlockFace.UP), BlockFace.SOUTH);
this.glassify(block.getFace(BlockFace.EAST).getFace(BlockFace.DOWN), BlockFace.SOUTH);
this.glassify(block.getFace(BlockFace.EAST, 2), BlockFace.SOUTH);
this.glassify(block.getFace(BlockFace.EAST, 2).getFace(BlockFace.UP), BlockFace.SOUTH);
this.glassify(block.getFace(BlockFace.EAST, 2).getFace(BlockFace.DOWN), BlockFace.SOUTH);
this.glassify(block.getFace(BlockFace.EAST).getFace(BlockFace.UP, 2), BlockFace.SOUTH);
this.glassify(block.getFace(BlockFace.EAST).getFace(BlockFace.DOWN, 2), BlockFace.SOUTH);
this.glassify(block.getFace(BlockFace.WEST), BlockFace.SOUTH);
this.glassify(block.getFace(BlockFace.WEST).getFace(BlockFace.UP), BlockFace.SOUTH);
this.glassify(block.getFace(BlockFace.WEST).getFace(BlockFace.DOWN), BlockFace.SOUTH);
this.glassify(block.getFace(BlockFace.WEST, 2), BlockFace.SOUTH);
this.glassify(block.getFace(BlockFace.WEST, 2).getFace(BlockFace.UP), BlockFace.SOUTH);
this.glassify(block.getFace(BlockFace.WEST, 2).getFace(BlockFace.DOWN), BlockFace.SOUTH);
this.glassify(block.getFace(BlockFace.WEST).getFace(BlockFace.UP, 2), BlockFace.SOUTH);
this.glassify(block.getFace(BlockFace.WEST).getFace(BlockFace.DOWN, 2), BlockFace.SOUTH);
} else if (this.wall == BlockFace.EAST && this.warzone.getVolume().isEastWallBlock(block)) {
this.glassify(block.getFace(BlockFace.NORTH), BlockFace.EAST);
this.glassify(block.getFace(BlockFace.NORTH).getFace(BlockFace.UP), BlockFace.EAST);
this.glassify(block.getFace(BlockFace.NORTH).getFace(BlockFace.DOWN), BlockFace.EAST);
this.glassify(block.getFace(BlockFace.NORTH, 2), BlockFace.EAST);
this.glassify(block.getFace(BlockFace.NORTH, 2).getFace(BlockFace.UP), BlockFace.EAST);
this.glassify(block.getFace(BlockFace.NORTH, 2).getFace(BlockFace.DOWN), BlockFace.EAST);
this.glassify(block.getFace(BlockFace.NORTH).getFace(BlockFace.UP, 2), BlockFace.EAST);
this.glassify(block.getFace(BlockFace.NORTH).getFace(BlockFace.DOWN, 2), BlockFace.EAST);
this.glassify(block.getFace(BlockFace.SOUTH), BlockFace.EAST);
this.glassify(block.getFace(BlockFace.SOUTH).getFace(BlockFace.UP), BlockFace.EAST);
this.glassify(block.getFace(BlockFace.SOUTH).getFace(BlockFace.DOWN), BlockFace.EAST);
this.glassify(block.getFace(BlockFace.SOUTH, 2), BlockFace.EAST);
this.glassify(block.getFace(BlockFace.SOUTH, 2).getFace(BlockFace.UP), BlockFace.EAST);
this.glassify(block.getFace(BlockFace.SOUTH, 2).getFace(BlockFace.DOWN), BlockFace.EAST);
this.glassify(block.getFace(BlockFace.SOUTH).getFace(BlockFace.UP, 2), BlockFace.EAST);
this.glassify(block.getFace(BlockFace.SOUTH).getFace(BlockFace.DOWN, 2), BlockFace.EAST);
} else if (this.wall == BlockFace.WEST && this.warzone.getVolume().isWestWallBlock(block)) {
this.glassify(block.getFace(BlockFace.NORTH), BlockFace.WEST);
this.glassify(block.getFace(BlockFace.NORTH).getFace(BlockFace.UP), BlockFace.WEST);
this.glassify(block.getFace(BlockFace.NORTH).getFace(BlockFace.DOWN), BlockFace.WEST);
this.glassify(block.getFace(BlockFace.NORTH, 2), BlockFace.WEST);
this.glassify(block.getFace(BlockFace.NORTH, 2).getFace(BlockFace.UP), BlockFace.WEST);
this.glassify(block.getFace(BlockFace.NORTH, 2).getFace(BlockFace.DOWN), BlockFace.WEST);
this.glassify(block.getFace(BlockFace.NORTH).getFace(BlockFace.UP, 2), BlockFace.WEST);
this.glassify(block.getFace(BlockFace.NORTH).getFace(BlockFace.DOWN, 2), BlockFace.WEST);
this.glassify(block.getFace(BlockFace.SOUTH), BlockFace.WEST);
this.glassify(block.getFace(BlockFace.SOUTH).getFace(BlockFace.UP), BlockFace.WEST);
this.glassify(block.getFace(BlockFace.SOUTH).getFace(BlockFace.DOWN), BlockFace.WEST);
this.glassify(block.getFace(BlockFace.SOUTH, 2), BlockFace.WEST);
this.glassify(block.getFace(BlockFace.SOUTH, 2).getFace(BlockFace.UP), BlockFace.WEST);
this.glassify(block.getFace(BlockFace.SOUTH, 2).getFace(BlockFace.DOWN), BlockFace.WEST);
this.glassify(block.getFace(BlockFace.SOUTH).getFace(BlockFace.UP, 2), BlockFace.WEST);
this.glassify(block.getFace(BlockFace.SOUTH).getFace(BlockFace.DOWN, 2), BlockFace.WEST);
} else if (this.wall == BlockFace.UP && this.warzone.getVolume().isUpWallBlock(block)) {
this.glassify(block.getFace(BlockFace.EAST), BlockFace.UP);
this.glassify(block.getFace(BlockFace.EAST, 2), BlockFace.UP);
this.glassify(block.getFace(BlockFace.WEST), BlockFace.UP);
this.glassify(block.getFace(BlockFace.WEST, 2), BlockFace.UP);
this.glassify(block.getFace(BlockFace.NORTH), BlockFace.UP);
this.glassify(block.getFace(BlockFace.NORTH).getFace(BlockFace.EAST), BlockFace.UP);
this.glassify(block.getFace(BlockFace.NORTH).getFace(BlockFace.WEST), BlockFace.UP);
this.glassify(block.getFace(BlockFace.NORTH, 2), BlockFace.UP);
this.glassify(block.getFace(BlockFace.NORTH, 2).getFace(BlockFace.EAST), BlockFace.UP);
this.glassify(block.getFace(BlockFace.NORTH, 2).getFace(BlockFace.WEST), BlockFace.UP);
this.glassify(block.getFace(BlockFace.NORTH).getFace(BlockFace.EAST, 2), BlockFace.UP);
this.glassify(block.getFace(BlockFace.NORTH).getFace(BlockFace.WEST, 2), BlockFace.UP);
this.glassify(block.getFace(BlockFace.SOUTH), BlockFace.UP);
this.glassify(block.getFace(BlockFace.SOUTH).getFace(BlockFace.EAST), BlockFace.UP);
this.glassify(block.getFace(BlockFace.SOUTH).getFace(BlockFace.WEST), BlockFace.UP);
this.glassify(block.getFace(BlockFace.SOUTH, 2), BlockFace.UP);
this.glassify(block.getFace(BlockFace.SOUTH, 2).getFace(BlockFace.EAST), BlockFace.UP);
this.glassify(block.getFace(BlockFace.SOUTH, 2).getFace(BlockFace.WEST), BlockFace.UP);
this.glassify(block.getFace(BlockFace.SOUTH).getFace(BlockFace.UP, 2), BlockFace.UP);
this.glassify(block.getFace(BlockFace.SOUTH).getFace(BlockFace.DOWN, 2), BlockFace.UP);
} else if (this.wall == BlockFace.DOWN && this.warzone.getVolume().isDownWallBlock(block)) {
this.glassify(block.getFace(BlockFace.EAST), BlockFace.DOWN);
this.glassify(block.getFace(BlockFace.EAST, 2), BlockFace.DOWN);
this.glassify(block.getFace(BlockFace.WEST), BlockFace.DOWN);
this.glassify(block.getFace(BlockFace.WEST, 2), BlockFace.DOWN);
this.glassify(block.getFace(BlockFace.NORTH), BlockFace.DOWN);
this.glassify(block.getFace(BlockFace.NORTH).getFace(BlockFace.EAST), BlockFace.DOWN);
this.glassify(block.getFace(BlockFace.NORTH).getFace(BlockFace.WEST), BlockFace.DOWN);
this.glassify(block.getFace(BlockFace.NORTH, 2), BlockFace.DOWN);
this.glassify(block.getFace(BlockFace.NORTH, 2).getFace(BlockFace.EAST), BlockFace.DOWN);
this.glassify(block.getFace(BlockFace.NORTH, 2).getFace(BlockFace.WEST), BlockFace.DOWN);
this.glassify(block.getFace(BlockFace.NORTH).getFace(BlockFace.EAST, 2), BlockFace.DOWN);
this.glassify(block.getFace(BlockFace.NORTH).getFace(BlockFace.WEST, 2), BlockFace.DOWN);
this.glassify(block.getFace(BlockFace.SOUTH), BlockFace.DOWN);
this.glassify(block.getFace(BlockFace.SOUTH).getFace(BlockFace.EAST), BlockFace.DOWN);
this.glassify(block.getFace(BlockFace.SOUTH).getFace(BlockFace.WEST), BlockFace.DOWN);
this.glassify(block.getFace(BlockFace.SOUTH, 2), BlockFace.DOWN);
this.glassify(block.getFace(BlockFace.SOUTH, 2).getFace(BlockFace.EAST), BlockFace.DOWN);
this.glassify(block.getFace(BlockFace.SOUTH, 2).getFace(BlockFace.WEST), BlockFace.DOWN);
this.glassify(block.getFace(BlockFace.SOUTH).getFace(BlockFace.DOWN, 2), BlockFace.DOWN);
this.glassify(block.getFace(BlockFace.SOUTH).getFace(BlockFace.DOWN, 2), BlockFace.DOWN);
}
}
}
private void glassify(Block block, BlockFace wall) {
// face here means which wall we are working on
if ((block.getTypeId() == Material.AIR.getId() || block.getTypeId() == Material.WATER.getId()) &&
(warzone.getLobby() == null || (warzone.getLobby() != null && !warzone.getLobby().blockIsAGateBlock(block, wall)))){
(this.warzone.getLobby() == null || (this.warzone.getLobby() != null && !this.warzone.getLobby().blockIsAGateBlock(block, wall)))){
if (wall == BlockFace.NORTH) {
if (warzone.getVolume().isNorthWallBlock(block)) {
glassified.add(new BlockInfo(block));
if (this.warzone.getVolume().isNorthWallBlock(block)) {
this.glassified.add(new BlockInfo(block));
block.setType(Material.GLASS);
}
} else if (wall == BlockFace.SOUTH) {
if (warzone.getVolume().isSouthWallBlock(block)) {
glassified.add(new BlockInfo(block));
if (this.warzone.getVolume().isSouthWallBlock(block)) {
this.glassified.add(new BlockInfo(block));
block.setType(Material.GLASS);
}
} else if (wall == BlockFace.EAST) {
if (warzone.getVolume().isEastWallBlock(block)) {
glassified.add(new BlockInfo(block));
if (this.warzone.getVolume().isEastWallBlock(block)) {
this.glassified.add(new BlockInfo(block));
block.setType(Material.GLASS);
}
} else if (wall == BlockFace.WEST) {
if (warzone.getVolume().isWestWallBlock(block)) {
glassified.add(new BlockInfo(block));
if (this.warzone.getVolume().isWestWallBlock(block)) {
this.glassified.add(new BlockInfo(block));
block.setType(Material.GLASS);
}
} else if (wall == BlockFace.UP) {
if (warzone.getVolume().isUpWallBlock(block)) {
glassified.add(new BlockInfo(block));
if (this.warzone.getVolume().isUpWallBlock(block)) {
this.glassified.add(new BlockInfo(block));
block.setType(Material.GLASS);
}
} else if (wall == BlockFace.DOWN) {
if (warzone.getVolume().isDownWallBlock(block)) {
glassified.add(new BlockInfo(block));
if (this.warzone.getVolume().isDownWallBlock(block)) {
this.glassified.add(new BlockInfo(block));
block.setType(Material.GLASS);
}
}
}
}
public void updatePlayerPosition(Location location) {
if (warzone.isNearWall(location)) {
if (this.warzone.isNearWall(location)) {
this.playerLocation = location;
deactivate();
activate();
this.deactivate();
this.activate();
}
}
public void deactivate() {
for (BlockInfo oldBlock : glassified) {
for (BlockInfo oldBlock : this.glassified) {
// return to original
Block glassifiedBlock = warzone.getWorld().getBlockAt(oldBlock.getX(), oldBlock.getY(), oldBlock.getZ());
Block glassifiedBlock = this.warzone.getWorld().getBlockAt(oldBlock.getX(), oldBlock.getY(), oldBlock.getZ());
glassifiedBlock.setTypeId(oldBlock.getTypeId());
glassifiedBlock.setData(oldBlock.getData());
}
}
public Player getPlayer() {
return player;
return this.player;
}
public BlockFace getWall() {
return wall;
return this.wall;
}
}

View File

@ -9,9 +9,9 @@ public class BlockResetJob implements Runnable {
public BlockResetJob(Volume volume) {
this.volume = volume;
}
public void run() {
volume.resetBlocks();
this.volume.resetBlocks();
}
}

View File

@ -22,17 +22,17 @@ public class DeferredBlockResetsJob implements Runnable {
}
public void add(DeferredBlockReset pleaseResetLater) {
deferred.add(pleaseResetLater);
this.deferred.add(pleaseResetLater);
}
public boolean isEmpty() {
return deferred.isEmpty();
return this.deferred.isEmpty();
}
public void run() {
for (DeferredBlockReset reset : deferred) {
Block worldBlock = world.getBlockAt(reset.getX(), reset.getY(), reset.getZ());
for (DeferredBlockReset reset : this.deferred) {
Block worldBlock = this.world.getBlockAt(reset.getX(), reset.getY(), reset.getZ());
worldBlock.setType(Material.getMaterial(reset.getBlockType()));
if (reset.getBlockType() == Material.SIGN_POST.getId()) {
@ -42,10 +42,18 @@ public class DeferredBlockResetsJob implements Runnable {
Sign sign = (Sign)state;
//String[] lines = this.getSignLines().get("sign-" + i + "-" + j + "-" + k);
if (reset.getLines() != null && sign.getLines() != null) {
if (reset.getLines().length>0)sign.setLine(0, reset.getLines()[0]);
if (reset.getLines().length>1)sign.setLine(1, reset.getLines()[1]);
if (reset.getLines().length>2)sign.setLine(2, reset.getLines()[2]);
if (reset.getLines().length>3)sign.setLine(3, reset.getLines()[3]);
if (reset.getLines().length>0) {
sign.setLine(0, reset.getLines()[0]);
}
if (reset.getLines().length>1) {
sign.setLine(1, reset.getLines()[1]);
}
if (reset.getLines().length>2) {
sign.setLine(2, reset.getLines()[2]);
}
if (reset.getLines().length>3) {
sign.setLine(3, reset.getLines()[3]);
}
sign.update(true);
}
}

View File

@ -11,16 +11,16 @@ public class InitZoneJob implements Runnable {
public InitZoneJob(Warzone zone) {
this.zone = zone;
respawnExempted = null;
this.respawnExempted = null;
}
public InitZoneJob(Warzone warzone, Player respawnExempted) {
zone = warzone;
this.zone = warzone;
this.respawnExempted = respawnExempted;
}
public void run() {
zone.initializeZone(respawnExempted);
this.zone.initializeZone(this.respawnExempted);
}
}

View File

@ -18,7 +18,7 @@ public class LoadoutResetJob implements Runnable {
}
public void run() {
zone.resetInventory(team, player);
this.zone.resetInventory(this.team, this.player);
}
}

View File

@ -14,11 +14,11 @@ public class LootDropperTask implements Runnable {
this.location = location;
this.drop = drop;
}
public void run() {
for (ItemStack item : drop) {
for (ItemStack item : this.drop) {
if (item != null) {
location.getWorld().dropItemNaturally(location, item);
this.location.getWorld().dropItemNaturally(this.location, item);
}
}
}

View File

@ -19,20 +19,20 @@ public class ResetCursorJob implements Runnable {
}
public void run() {
if (isSoutheast) {
cornerBlock.setType(originalCursorBlocks[0].getType());
cornerBlock.setData(originalCursorBlocks[0].getData());
cornerBlock.getFace(BlockFace.WEST).setType(originalCursorBlocks[1].getType());
cornerBlock.getFace(BlockFace.WEST).setData(originalCursorBlocks[1].getData());
cornerBlock.getFace(BlockFace.NORTH).setType(originalCursorBlocks[2].getType());
cornerBlock.getFace(BlockFace.NORTH).setData(originalCursorBlocks[2].getData());
if (this.isSoutheast) {
this.cornerBlock.setType(this.originalCursorBlocks[0].getType());
this.cornerBlock.setData(this.originalCursorBlocks[0].getData());
this.cornerBlock.getFace(BlockFace.WEST).setType(this.originalCursorBlocks[1].getType());
this.cornerBlock.getFace(BlockFace.WEST).setData(this.originalCursorBlocks[1].getData());
this.cornerBlock.getFace(BlockFace.NORTH).setType(this.originalCursorBlocks[2].getType());
this.cornerBlock.getFace(BlockFace.NORTH).setData(this.originalCursorBlocks[2].getData());
} else {
cornerBlock.setType(originalCursorBlocks[0].getType());
cornerBlock.setData(originalCursorBlocks[0].getData());
cornerBlock.getFace(BlockFace.EAST).setType(originalCursorBlocks[1].getType());
cornerBlock.getFace(BlockFace.EAST).setData(originalCursorBlocks[1].getData());
cornerBlock.getFace(BlockFace.SOUTH).setType(originalCursorBlocks[2].getType());
cornerBlock.getFace(BlockFace.SOUTH).setData(originalCursorBlocks[2].getData());
this.cornerBlock.setType(this.originalCursorBlocks[0].getType());
this.cornerBlock.setData(this.originalCursorBlocks[0].getData());
this.cornerBlock.getFace(BlockFace.EAST).setType(this.originalCursorBlocks[1].getType());
this.cornerBlock.getFace(BlockFace.EAST).setData(this.originalCursorBlocks[1].getData());
this.cornerBlock.getFace(BlockFace.SOUTH).setType(this.originalCursorBlocks[2].getType());
this.cornerBlock.getFace(BlockFace.SOUTH).setData(this.originalCursorBlocks[2].getData());
}
}
}

View File

@ -14,12 +14,12 @@ public class RespawnPlayerJob implements Runnable {
public RespawnPlayerJob(Warzone zone, Team playerTeam, Player player) {
this.zone = zone;
// TODO Auto-generated constructor stub
team = playerTeam;
this.team = playerTeam;
this.player = player;
}
public void run() {
zone.respawnPlayer(team, player);
this.zone.respawnPlayer(this.team, this.player);
}
}

View File

@ -15,7 +15,7 @@ public class RestoreDeadmanInventoryJob implements Runnable {
}
public void run() {
zone.restoreDeadmanInventory(player);
player.teleport(zone.getTeleport());
this.zone.restoreDeadmanInventory(this.player);
this.player.teleport(this.zone.getTeleport());
}
}

View File

@ -21,8 +21,8 @@ public class RestoreWarhubJob implements Runnable {
}
public void run() {
String[] hubStrSplit = hubStr.split(",");
String[] hubStrSplit = this.hubStr.split(",");
int hubX = Integer.parseInt(hubStrSplit[0]);
int hubY = Integer.parseInt(hubStrSplit[1]);
int hubZ = Integer.parseInt(hubStrSplit[2]);
@ -30,30 +30,30 @@ public class RestoreWarhubJob implements Runnable {
String worldName;
if (hubStrSplit.length > 3) {
worldName = hubStrSplit[3];
world = war.getServer().getWorld(worldName);
world = this.war.getServer().getWorld(worldName);
} else {
worldName = "DEFAULT";
world = war.getServer().getWorlds().get(0); // default to first world
world = this.war.getServer().getWorlds().get(0); // default to first world
}
if (world != null) {
Location hubLocation = new Location(world, hubX, hubY, hubZ);
WarHub hub = new WarHub(war, hubLocation);
war.setWarHub(hub);
Volume vol = VolumeMapper.loadVolume("warhub", "", war, world);
WarHub hub = new WarHub(this.war, hubLocation);
this.war.setWarHub(hub);
Volume vol = VolumeMapper.loadVolume("warhub", "", this.war, 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 : war.getWarzones()) {
for (Warzone zone : this.war.getWarzones()) {
if (zone.getLobby() != null) {
zone.getLobby().getVolume().resetBlocks();
zone.getLobby().initialize();
}
}
war.logInfo("Warhub ready.");
this.war.logInfo("Warhub ready.");
} else {
war.logWarn("Failed to restore warhub. The specified world (name: " + worldName + ") does not exist!");
this.war.logWarn("Failed to restore warhub. The specified world (name: " + worldName + ") does not exist!");
}
}
}

View File

@ -18,14 +18,14 @@ public class RestoreWarzonesJob implements Runnable {
}
public void run() {
String[] warzoneSplit = warzonesStr.split(",");
war.getWarzones().clear();
String[] warzoneSplit = this.warzonesStr.split(",");
this.war.getWarzones().clear();
for (String warzoneName : warzoneSplit) {
if (warzoneName != null && !warzoneName.equals("")){
war.logInfo("Loading zone " + warzoneName + "...");
Warzone zone = WarzoneMapper.load(war, warzoneName, !newWarInstall);
if (zone != null) { // could have failed, would've been logged already
war.getWarzones().add(zone);
this.war.logInfo("Loading zone " + warzoneName + "...");
Warzone zone = WarzoneMapper.load(this.war, warzoneName, !this.newWarInstall);
if (zone != null) { // could have failed, would've been logged already
this.war.getWarzones().add(zone);
//zone.getVolume().loadCorners();
zone.getVolume().loadCorners();
if (zone.getLobby() != null) {
@ -38,8 +38,8 @@ public class RestoreWarzonesJob implements Runnable {
}
}
}
if (war.getWarzones().size() > 0) {
war.logInfo("Warzones ready.");
if (this.war.getWarzones().size() > 0) {
this.war.logInfo("Warzones ready.");
}
}

View File

@ -17,21 +17,24 @@ public class ScoreCapReachedJob implements Runnable {
}
public void run() {
for (Team t : zone.getTeams()) {
t.teamcast(winnersStr);
for (Team t : this.zone.getTeams()) {
t.teamcast(this.winnersStr);
for (Player tp : t.getPlayers()) {
// Send everyone to rally point (or zone lobby if not rally point)
if (zone.getRallyPoint() != null) tp.teleport(zone.getRallyPoint());
else tp.teleport(zone.getTeleport());
if (this.zone.getRallyPoint() != null) {
tp.teleport(this.zone.getRallyPoint());
} else {
tp.teleport(this.zone.getTeleport());
}
tp.setFireTicks(0);
tp.setRemainingAir(300);
if (zone.hasPlayerInventory(tp.getName())){
zone.restorePlayerInventory(tp);
if (this.zone.hasPlayerInventory(tp.getName())){
this.zone.restorePlayerInventory(tp);
}
if (winnersStr.contains(t.getName())) {
if (this.winnersStr.contains(t.getName())) {
// give reward
for (Integer slot : zone.getReward().keySet()){
ItemStack item = zone.getReward().get(slot);
for (Integer slot : this.zone.getReward().keySet()){
ItemStack item = this.zone.getReward().get(slot);
if (item != null) {
tp.getInventory().addItem(item);
}

View File

@ -15,7 +15,8 @@ public class ZoneVolumeSaveJob extends Thread {
this.zoneName = zoneName;
this.war = war;
}
@Override
public void run() {
ZoneVolumeMapper.save(volume, zoneName, war);
ZoneVolumeMapper.save(this.volume, this.zoneName, this.war);
}
}

View File

@ -146,10 +146,18 @@ public class PreDeGaulleZoneVolumeMapper {
if (state instanceof Sign) {
Sign sign = (Sign)state;
if (lines != null && sign.getLines() != null) {
if (lines.length>0)sign.setLine(0, lines[0]);
if (lines.length>1)sign.setLine(1, lines[1]);
if (lines.length>2)sign.setLine(2, lines[2]);
if (lines.length>3)sign.setLine(3, lines[3]);
if (lines.length>0) {
sign.setLine(0, lines[0]);
}
if (lines.length>1) {
sign.setLine(1, lines[1]);
}
if (lines.length>2) {
sign.setLine(2, lines[2]);
}
if (lines.length>3) {
sign.setLine(3, lines[3]);
}
sign.update(true);
}
}
@ -160,7 +168,7 @@ public class PreDeGaulleZoneVolumeMapper {
List<ItemStack> items = null;
if (blockSplit.length > 2) {
String itemsStr = blockSplit[2];
items = readInventoryString(itemsStr);
items = PreDeGaulleZoneVolumeMapper.readInventoryString(itemsStr);
}
// Chests set
@ -187,7 +195,7 @@ public class PreDeGaulleZoneVolumeMapper {
if (blockSplit.length > 2) {
String itemsStr = blockSplit[2];
//String itemsStr = lineScanner.nextLine();
items = readInventoryString(itemsStr);
items = PreDeGaulleZoneVolumeMapper.readInventoryString(itemsStr);
}
// Dispensers set
@ -285,18 +293,19 @@ public class PreDeGaulleZoneVolumeMapper {
" for warzone " + volume.getName() + ". " + e.getClass().getName() + " " + e.getMessage());
e.printStackTrace();
} finally {
if (in != null)
//if (scanner != null)
try {
in.close();
in = null;
//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());
e.printStackTrace();
}
if (in != null) {
//if (scanner != null)
try {
in.close();
in = null;
//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());
e.printStackTrace();
}
}
}
return noOfResetBlocks;
}
@ -307,9 +316,12 @@ public class PreDeGaulleZoneVolumeMapper {
BufferedWriter out = null;
try {
(new File(war.getDataFolder().getPath() +"/dat/warzone-"+zoneName)).mkdir();
if (zoneName.equals("")) out = new BufferedWriter(new FileWriter(new File(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")));
if (zoneName.equals("")) {
out = new BufferedWriter(new FileWriter(new File(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.write("corner1"); out.newLine();
out.write(Integer.toString(volume.getCornerOne().getX())); out.newLine();
@ -372,8 +384,9 @@ public class PreDeGaulleZoneVolumeMapper {
extra += item.getTypeId() + ";"
+ item.getAmount() + ";"
+ item.getDurability();
if (item.getData() != null)
extra += ";" + item.getData().getData() ;
if (item.getData() != null) {
extra += ";" + item.getData().getData() ;
}
extra += ";;";
}
}
@ -398,8 +411,9 @@ public class PreDeGaulleZoneVolumeMapper {
extra += item.getTypeId() + ";"
+ item.getAmount() + ";"
+ item.getDurability();
if (item.getData() != null)
extra += ";" + item.getData().getData() ;
if (item.getData() != null) {
extra += ";" + item.getData().getData() ;
}
extra += ";;";
}
}
@ -432,14 +446,15 @@ public class PreDeGaulleZoneVolumeMapper {
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());
e.printStackTrace();
}
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());
e.printStackTrace();
}
}
}
}
return noOfSavedBlocks;

View File

@ -37,12 +37,12 @@ public final class PropertiesFile {
try {
if (file.exists()) {
load();
this.load();
} else {
save();
this.save();
}
} catch (IOException ex) {
log.severe("[PropertiesFile] Unable to load " + fileName + "!");
PropertiesFile.log.severe("[PropertiesFile] Unable to load " + fileName + "!");
}
}
@ -53,8 +53,8 @@ public final class PropertiesFile {
* @throws IOException
*/
public void load() throws IOException {
inputStream = new FileInputStream(fileName);
props.load(inputStream);
this.inputStream = new FileInputStream(this.fileName);
this.props.load(this.inputStream);
}
/**
@ -63,25 +63,25 @@ public final class PropertiesFile {
*/
public void save() {
try {
outputStream = new FileOutputStream(fileName);
props.store(outputStream, null);
this.outputStream = new FileOutputStream(this.fileName);
this.props.store(this.outputStream, null);
}catch(IOException ex) {
log.severe("[PropertiesFile] Unable to save " + fileName + "!");
PropertiesFile.log.severe("[PropertiesFile] Unable to save " + this.fileName + "!");
}
}
public void close() {
if (outputStream != null) {
if (this.outputStream != null) {
try {
outputStream.close();
this.outputStream.close();
} catch (IOException e) {
log.severe("[PropertiesFile] Failed to close " + fileName + " writer!");
PropertiesFile.log.severe("[PropertiesFile] Failed to close " + this.fileName + " writer!");
}
} else if (inputStream != null) {
} else if (this.inputStream != null) {
try {
inputStream.close();
this.inputStream.close();
} catch (IOException e) {
log.severe("[PropertiesFile] Failed to close " + fileName + " reader!");
PropertiesFile.log.severe("[PropertiesFile] Failed to close " + this.fileName + " reader!");
}
}
}
@ -93,7 +93,7 @@ public final class PropertiesFile {
* <blockquote><pre>
* PropertiesFile settings = new PropertiesFile("settings.properties");
* Map<String, String> mappedSettings;
*
*
* try {
* mappedSettings = settings.returnMap();
* } catch (Exception ex) {
@ -106,7 +106,7 @@ public final class PropertiesFile {
*/
@SuppressWarnings("unchecked")
public Map<String, String> returnMap() throws Exception {
return (Map<String, String>) props.clone();
return (Map<String, String>) this.props.clone();
}
/**
@ -116,7 +116,7 @@ public final class PropertiesFile {
* @return <code>Boolean</code> - True if the <code>key</code> exists, false if it cannot be found.
*/
public boolean containsKey(String var) {
return props.containsKey(var);
return this.props.containsKey(var);
}
/**
@ -126,7 +126,7 @@ public final class PropertiesFile {
* @return <code>java.lang.String</code> - True if the <code>key</code> exists, false if it cannot be found.
*/
public String getProperty(String var) {
return (String)props.getProperty(var);
return this.props.getProperty(var);
}
/**
@ -139,7 +139,7 @@ public final class PropertiesFile {
public void removeKey(String var) {
if (this.props.containsKey(var)) {
this.props.remove(var);
save();
this.save();
}
}
@ -151,7 +151,7 @@ public final class PropertiesFile {
* @return <code>Boolean</code> - True for existance, false for <code>key</code> found.
*/
public boolean keyExists(String key) {
return containsKey(key);
return this.containsKey(key);
}
/**
@ -162,9 +162,8 @@ public final class PropertiesFile {
* @param key The <code>key</code> we will retrieve the property from, if no <code>key</code> is found default to "" or empty.
*/
public String getString(String key) {
if (this.containsKey(key)) {
return this.getProperty(key);
}
if (this.containsKey(key))
return this.getProperty(key);
return "";
}
@ -180,11 +179,10 @@ public final class PropertiesFile {
* @return java.lang.String Either we will return the default value or a prior existing value depending on existance.
*/
public String getString(String key, String value) {
if (this.containsKey(key)) {
return this.getProperty(key);
}
if (this.containsKey(key))
return this.getProperty(key);
setString(key, value);
this.setString(key, value);
return value;
}
@ -196,8 +194,8 @@ public final class PropertiesFile {
* @param value The <code>value</code> we will be setting inside the <code>.[properties]</code> file.
*/
public void setString(String key, String value) {
props.put(key, value);
save();
this.props.put(key, value);
this.save();
}
/**
@ -208,9 +206,8 @@ public final class PropertiesFile {
* @param key The <code>key</code> we will retrieve the property from, if no <code>key</code> is found default to 0
*/
public int getInt(String key) {
if (this.containsKey(key)) {
return Integer.parseInt(this.getProperty(key));
}
if (this.containsKey(key))
return Integer.parseInt(this.getProperty(key));
return 0;
}
@ -224,11 +221,10 @@ public final class PropertiesFile {
* @return <code>Integer</code> - Either we will return the default value or a prior existing value depending on existance.
*/
public int getInt(String key, int value) {
if (this.containsKey(key)) {
return Integer.parseInt(this.getProperty(key));
}
if (this.containsKey(key))
return Integer.parseInt(this.getProperty(key));
setInt(key, value);
this.setInt(key, value);
return value;
}
@ -241,9 +237,9 @@ public final class PropertiesFile {
* @param value The <code>value</code> we will be setting inside the <code>.[properties]</code> file.
*/
public void setInt(String key, int value) {
props.put(key, String.valueOf(value));
this.props.put(key, String.valueOf(value));
save();
this.save();
}
/**
@ -254,9 +250,8 @@ public final class PropertiesFile {
* @param key The <code>key</code> we will retrieve the property from, if no <code>key</code> is found default to 0.0
*/
public double getDouble(String key) {
if (this.containsKey(key)) {
return Double.parseDouble(this.getProperty(key));
}
if (this.containsKey(key))
return Double.parseDouble(this.getProperty(key));
return 0;
}
@ -270,11 +265,10 @@ public final class PropertiesFile {
* @return <code>Double</code> - Either we will return the default value or a prior existing value depending on existance.
*/
public double getDouble(String key, double value) {
if (this.containsKey(key)) {
return Double.parseDouble(this.getProperty(key));
}
if (this.containsKey(key))
return Double.parseDouble(this.getProperty(key));
setDouble(key, value);
this.setDouble(key, value);
return value;
}
@ -286,9 +280,9 @@ public final class PropertiesFile {
* @param value The <code>value</code> we will be setting inside the <code>.[properties]</code> file.
*/
public void setDouble(String key, double value) {
props.put(key, String.valueOf(value));
this.props.put(key, String.valueOf(value));
save();
this.save();
}
/**
@ -299,9 +293,8 @@ public final class PropertiesFile {
* @param key The <code>key</code> we will retrieve the property from, if no <code>key</code> is found default to 0L
*/
public long getLong(String key) {
if (this.containsKey(key)) {
return Long.parseLong(this.getProperty(key));
}
if (this.containsKey(key))
return Long.parseLong(this.getProperty(key));
return 0;
}
@ -315,11 +308,10 @@ public final class PropertiesFile {
* @return <code>Long</code> - Either we will return the default value or a prior existing value depending on existance.
*/
public long getLong(String key, long value) {
if (this.containsKey(key)) {
return Long.parseLong(this.getProperty(key));
}
if (this.containsKey(key))
return Long.parseLong(this.getProperty(key));
setLong(key, value);
this.setLong(key, value);
return value;
}
@ -331,9 +323,9 @@ public final class PropertiesFile {
* @param value The <code>value</code> we will be setting inside the <code>.[properties]</code> file.
*/
public void setLong(String key, long value) {
props.put(key, String.valueOf(value));
this.props.put(key, String.valueOf(value));
save();
this.save();
}
/**
@ -344,9 +336,8 @@ public final class PropertiesFile {
* @param key The <code>key</code> we will retrieve the property from, if no <code>key</code> is found default to false
*/
public boolean getBoolean(String key) {
if (this.containsKey(key)) {
return Boolean.parseBoolean(this.getProperty(key));
}
if (this.containsKey(key))
return Boolean.parseBoolean(this.getProperty(key));
return false;
}
@ -360,11 +351,10 @@ public final class PropertiesFile {
* @return <code>Boolean</code> - Either we will return the default value or a prior existing value depending on existance.
*/
public boolean getBoolean(String key, boolean value) {
if (this.containsKey(key)) {
return Boolean.parseBoolean(this.getProperty(key));
}
if (this.containsKey(key))
return Boolean.parseBoolean(this.getProperty(key));
setBoolean(key, value);
this.setBoolean(key, value);
return value;
}
@ -376,8 +366,8 @@ public final class PropertiesFile {
* @param value The <code>value</code> we will be setting inside the <code>.[properties]</code> file.
*/
public void setBoolean(String key, boolean value) {
props.put(key, String.valueOf(value));
this.props.put(key, String.valueOf(value));
save();
this.save();
}
}

View File

@ -28,7 +28,7 @@ public class VolumeMapper {
public static Volume loadVolume(String volumeName, String zoneName,
War war, World world) {
Volume volume = new Volume(volumeName, war, world);
load(volume, zoneName, war, world);
VolumeMapper.load(volume, zoneName, war, world);
return volume;
}
@ -42,9 +42,12 @@ public class VolumeMapper {
public static void load(Volume volume, String zoneName, War war, 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
else in = new BufferedReader(new FileReader(new File(war.getDataFolder().getPath() + "/dat/warzone-" + zoneName + "/volume-" + volume.getName() + ".dat")));
if (zoneName.equals("")) {
in = new BufferedReader(new FileReader(new File(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")));
}
String firstLine = in.readLine();
if (firstLine != null && !firstLine.equals("")) {
boolean height129Fix = false;
@ -179,14 +182,15 @@ public class VolumeMapper {
" for warzone " + volume.getName() + ". " + e.getClass().getName() + " " + e.getMessage());
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());
e.printStackTrace();
}
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());
e.printStackTrace();
}
}
}
}
@ -194,9 +198,12 @@ public class VolumeMapper {
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")));
else out = new BufferedWriter(new FileWriter(new File(war.getDataFolder().getPath() +
"/dat/warzone-" + zoneName + "/volume-" + volume.getName() + ".dat")));
if (zoneName.equals("")) {
out = new BufferedWriter(new FileWriter(new File(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.write("corner1"); out.newLine();
out.write(Integer.toString(volume.getCornerOne().getX())); out.newLine();
@ -235,8 +242,9 @@ public class VolumeMapper {
extra += item.getTypeId() + ";"
+ item.getAmount() + ";"
+ item.getDurability();
if (item.getData() != null)
extra += ";" + item.getData().getData() ;
if (item.getData() != null) {
extra += ";" + item.getData().getData() ;
}
extra += ";;";
}
}
@ -252,8 +260,9 @@ public class VolumeMapper {
extra += item.getTypeId() + ";"
+ item.getAmount() + ";"
+ item.getDurability();
if (item.getData() != null)
extra += ";" + item.getData().getData() ;
if (item.getData() != null) {
extra += ";" + item.getData().getData() ;
}
extra += ";;";
}
}
@ -281,14 +290,15 @@ public class VolumeMapper {
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());
e.printStackTrace();
}
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());
e.printStackTrace();
}
}
}
}
}

View File

@ -14,12 +14,12 @@ import com.tommytony.war.jobs.RestoreWarhubJob;
import com.tommytony.war.jobs.RestoreWarzonesJob;
/**
*
*
* @author tommytony
*
*/
public class WarMapper {
public static void load(War war) {
//war.getLogger().info("Loading war config...");
(war.getDataFolder()).mkdir();
@ -31,7 +31,7 @@ public class WarMapper {
war.logWarn("Failed to load war.txt file.");
e.printStackTrace();
}
// Create file if need be
boolean newWar = false;
if (!warConfig.containsKey("warzones")) {
@ -45,14 +45,14 @@ public class WarMapper {
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.");
}
// zone makers
String makersStr = warConfig.getString("zoneMakers");
String[] makersSplit = makersStr.split(",");
@ -62,7 +62,7 @@ public class WarMapper {
war.getZoneMakerNames().add(makerName);
}
}
// defaultLoadout
String defaultLoadoutStr = warConfig.getString("defaultLoadout");
String[] defaultLoadoutSplit = defaultLoadoutStr.split(";");
@ -75,37 +75,37 @@ public class WarMapper {
war.getDefaultLoadout().put(Integer.parseInt(itemStrSplit[2]), item);
}
}
// defaultLifePool
war.setDefaultLifepool(warConfig.getInt("defaultLifePool"));
// defaultMonumentHeal
war.setDefaultMonumentHeal(warConfig.getInt("defaultMonumentHeal"));
// defaultFriendlyFire
war.setDefaultFriendlyFire(warConfig.getBoolean("defaultFriendlyFire"));
// defaultAutoAssignOnly
war.setDefaultAutoAssignOnly(warConfig.getBoolean("defaultAutoAssignOnly"));
// defaultTeamCap
war.setDefaultTeamCap(warConfig.getInt("defaultTeamCap"));
// defaultScoreCap
war.setDefaultScoreCap(warConfig.getInt("defaultScoreCap"));
// pvpInZonesOnly
war.setPvpInZonesOnly(warConfig.getBoolean("pvpInZonesOnly"));
// defaultBlockHeads
war.setDefaultBlockHeads(warConfig.getBoolean("defaultBlockHeads"));
// buildInZonesOnly
war.setBuildInZonesOnly(warConfig.getBoolean("buildInZonesOnly"));
// disablePVPMessage
war.setDisablePvpMessage(warConfig.getBoolean("disablePvpMessage"));
// defaultSpawnStyle
String spawnStyle = warConfig.getString("defaultspawnStyle");
if (spawnStyle != null && !spawnStyle.equals("")){
@ -117,9 +117,9 @@ public class WarMapper {
} else if (spawnStyle.equals(TeamSpawnStyles.INVISIBLE)){
war.setDefaultSpawnStyle(spawnStyle);
}
// default is already initialized to BIG (see Warzone)
// default is already initialized to BIG (see Warzone)
}
// defaultReward
String defaultRewardStr = warConfig.getString("defaultReward");
if (defaultRewardStr != null && !defaultRewardStr.equals("")) {
@ -134,25 +134,25 @@ public class WarMapper {
}
}
}
// defaultUnbreakableZoneBlocks
war.setDefaultUnbreakableZoneBlocks(warConfig.getBoolean("defaultUnbreakableZoneBlocks"));
// defaultNoCreatures
war.setDefaultNoCreatures(warConfig.getBoolean("defaultNoCreatures"));
// defaultDropLootOnDeath
//war.setDefaultDropLootOnDeath(warConfig.getBoolean("defaultDropLootOnDeath"));
// defaultResetOnEmpty
war.setDefaultResetOnEmpty(warConfig.getBoolean("defaultResetOnEmpty"));
// defaultResetOnLoad
war.setDefaultResetOnLoad(warConfig.getBoolean("defaultResetOnLoad"));
// defaultResetOnUnload
war.setDefaultResetOnUnload(warConfig.getBoolean("defaultResetOnUnload"));
// warhub
String hubStr = warConfig.getString("warhub");
if (hubStr != null && !hubStr.equals("")) {
@ -161,27 +161,27 @@ public class WarMapper {
war.logWarn("Failed to schedule warhub-restore job. War hub was not loaded.");
}
}
warConfig.close();
}
public static void save(War war) {
PropertiesFile warConfig = new PropertiesFile(war.getDataFolder().getPath() + "/war.txt");
String warzonesStr = "";
// warzones
for (Warzone zone : 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()) {
makersStr += name + ",";
}
warConfig.setString("zoneMakers", makersStr);
// defaultLoadout
String defaultLoadoutStr = "";
HashMap<Integer, ItemStack> items = war.getDefaultLoadout();
@ -192,40 +192,40 @@ public class WarMapper {
}
}
warConfig.setString("defaultLoadout", defaultLoadoutStr);
// defaultLifepool
warConfig.setInt("defaultLifePool", war.getDefaultLifepool());
// defaultMonumentHeal
warConfig.setInt("defaultMonumentHeal", war.getDefaultMonumentHeal());
// defaultFriendlyFire
warConfig.setBoolean("defaultFriendlyFire", war.getDefaultFriendlyFire());
// defaultAutoAssignOnly
warConfig.setBoolean("defaultAutoAssignOnly", war.getDefaultAutoAssignOnly());
// defaultTeamCap
warConfig.setInt("defaultTeamCap", war.getDefaultTeamCap());
// defaultScoreCap
warConfig.setInt("defaultScoreCap", war.getDefaultScoreCap());
// pvpInZonesOnly
warConfig.setBoolean("pvpInZonesOnly", war.isPvpInZonesOnly());
// defaultBlockHeads
warConfig.setBoolean("defaultBlockHeads", war.isDefaultBlockHeads());
// buildInZonesOnly
warConfig.setBoolean("buildInZonesOnly", war.isBuildInZonesOnly());
// disablePVPMessage
warConfig.setBoolean("disablePvpMessage", war.isDisablePvpMessage());
// spawnStyle
warConfig.setString("spawnStyle", war.getDefaultSpawnStyle());
// defaultReward
String defaultRewardStr = "";
HashMap<Integer, ItemStack> rewardItems = war.getDefaultReward();
@ -239,32 +239,32 @@ public class WarMapper {
// defaultUnbreakableZoneBlocks
warConfig.setBoolean("defaultUnbreakableZoneBlocks", war.isDefaultUnbreakableZoneBlocks());
// defaultNoCreatures
warConfig.setBoolean("defaultNoCreatures", war.isDefaultNoCreatures());
// defaultResetOnEmpty
warConfig.setBoolean("defaultResetOnEmpty", war.isDefaultResetOnEmpty());
// defaultResetOnLoad
warConfig.setBoolean("defaultResetOnLoad", war.isDefaultResetOnLoad());
// defaultResetOnUnload
warConfig.setBoolean("defaultResetOnUnload", war.isDefaultResetOnUnload());
// defaultDropLootOnDeath
//warConfig.setBoolean("defaultDropLootOnDeath", war.isDefaultDropLootOnDeath());
// warhub
String hubStr = "";
WarHub hub = war.getWarHub();
if (hub != null) {
hubStr = hub.getLocation().getBlockX() + "," + hub.getLocation().getBlockY() + "," + hub.getLocation().getBlockZ() + ","
hubStr = hub.getLocation().getBlockX() + "," + hub.getLocation().getBlockY() + "," + hub.getLocation().getBlockZ() + ","
+ hub.getLocation().getWorld().getName();
VolumeMapper.save(hub.getVolume(), "", war);
}
warConfig.setString("warhub", hubStr);
warConfig.save();
warConfig.close();
}

View File

@ -22,7 +22,7 @@ import com.tommytony.war.volumes.Volume;
import com.tommytony.war.volumes.ZoneVolume;
/**
*
*
* @author tommytony
*
*/
@ -37,7 +37,7 @@ public class WarzoneMapper {
war.getLogger().info("Failed to load warzone-" + name + ".txt file.");
e.printStackTrace();
}
// world
String worldStr = warzoneConfig.getProperty("world");
World world = null;
@ -46,14 +46,14 @@ public class WarzoneMapper {
} else {
world = war.getServer().getWorld(worldStr);
}
if (world == null) {
war.logWarn("Failed to restore warzone " + name + ". The specified world (name: " + worldStr + ") does not exist!");
} else {
// Create the zone
// Create the zone
Warzone warzone = new Warzone(war, world, name);
// Create file if needed
// Create file if needed
if (!warzoneConfig.containsKey("name")) {
WarzoneMapper.save(war, warzone, false);
war.getLogger().info("Warzone " + name + " config file created.");
@ -64,7 +64,7 @@ public class WarzoneMapper {
e.printStackTrace();
}
}
// teleport
String teleportStr = warzoneConfig.getString("teleport");
if (teleportStr != null && !teleportStr.equals("")) {
@ -75,7 +75,7 @@ public class WarzoneMapper {
int yaw = Integer.parseInt(teleportSplit[3]);
warzone.setTeleport(new Location(world, teleX, teleY, teleZ, yaw, 0));
}
// teams
String teamsStr = warzoneConfig.getString("teams");
if (teamsStr != null && !teamsStr.equals("")) {
@ -92,7 +92,7 @@ public class WarzoneMapper {
int yaw = Integer.parseInt(teamStrSplit[4]);
teamLocation.setYaw(yaw);
}
Team team = new Team(teamStrSplit[0],
Team team = new Team(teamStrSplit[0],
TeamKinds.teamKindFromString(teamStrSplit[0]),
teamLocation,
war, warzone );
@ -101,7 +101,7 @@ public class WarzoneMapper {
}
}
}
// teamFlags
String teamFlagsStr = warzoneConfig.getString("teamFlags");
if (teamFlagsStr != null && !teamFlagsStr.equals("")) {
@ -124,10 +124,10 @@ public class WarzoneMapper {
}
}
}
// ff
warzone.setFriendlyFire(warzoneConfig.getBoolean("friendlyFire"));
// loadout
String loadoutStr = warzoneConfig.getString("loadout");
if (loadoutStr != null && !loadoutStr.equals("")) {
@ -142,25 +142,25 @@ public class WarzoneMapper {
}
}
}
// life pool (always set after teams, so the teams' remaining lives get initialized properly by this setter)
warzone.setLifePool(warzoneConfig.getInt("lifePool"));
// monument heal
warzone.setMonumentHeal(warzoneConfig.getInt("monumentHeal"));
// autoAssignOnly
warzone.setAutoAssignOnly(warzoneConfig.getBoolean("autoAssignOnly"));
// team cap
warzone.setTeamCap(warzoneConfig.getInt("teamCap"));
// score cap
warzone.setScoreCap(warzoneConfig.getInt("scoreCap"));
// blockHeads
warzone.setBlockHeads(warzoneConfig.getBoolean("blockHeads"));
// spawnStyle
String spawnStyle = warzoneConfig.getString("spawnStyle");
if (spawnStyle != null && !spawnStyle.equals("")){
@ -172,9 +172,9 @@ public class WarzoneMapper {
} else if (spawnStyle.equals(TeamSpawnStyles.INVISIBLE)){
warzone.setSpawnStyle(spawnStyle);
}
// default is already initialized to BIG (see Warzone)
// default is already initialized to BIG (see Warzone)
}
// reward
String rewardStr = warzoneConfig.getString("reward");
if (rewardStr != null && !rewardStr.equals("")) {
@ -189,40 +189,40 @@ public class WarzoneMapper {
}
}
}
// unbreakableZoneBlocks
warzone.setUnbreakableZoneBlocks(warzoneConfig.getBoolean("unbreakableZoneBlocks"));
// disabled
warzone.setDisabled(warzoneConfig.getBoolean("disabled"));
// defaultNoCreatures
warzone.setNoCreatures(warzoneConfig.getBoolean("noCreatures"));
// resetOnEmpty
warzone.setResetOnEmpty(warzoneConfig.getBoolean("resetOnEmpty"));
// resetOnLoad
warzone.setResetOnLoad(warzoneConfig.getBoolean("resetOnLoad"));
// resetOnUnload
warzone.setResetOnUnload(warzoneConfig.getBoolean("resetOnUnload"));
// rallyPoint
String rallyPointStr = warzoneConfig.getString("rallyPoint");
if (rallyPointStr != null && !rallyPointStr.equals("")) {
String[] rallyPointStrSplit = rallyPointStr.split(",");
int rpX = Integer.parseInt(rallyPointStrSplit[0]);
int rpY = Integer.parseInt(rallyPointStrSplit[1]);
int rpZ = Integer.parseInt(rallyPointStrSplit[2]);
Location rallyPoint = new Location(world, rpX, rpY, rpZ);
warzone.setRallyPoint(rallyPoint);
}
// dropLootOnDeath
//warzone.setDropLootOnDeath(warzoneConfig.getBoolean("dropLootOnDeath"));
// monuments
String monumentsStr = warzoneConfig.getString("monuments");
if (monumentsStr != null && !monumentsStr.equals("")) {
@ -234,28 +234,28 @@ 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,
Monument monument = new Monument(monumentStrSplit[0], war, warzone,
new Location(world, monumentX, monumentY, monumentZ));
warzone.getMonuments().add(monument);
}
}
}
// lobby
String lobbyStr = warzoneConfig.getString("lobby");
warzoneConfig.close();
if (createNewVolume) {
ZoneVolume zoneVolume = new ZoneVolume(warzone.getName(), war, 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));
}
// team spawn blocks
for (Team team : warzone.getTeams()) {
team.setSpawnVolume(VolumeMapper.loadVolume(team.getName(), warzone.getName(), war, world));
@ -263,7 +263,7 @@ public class WarzoneMapper {
team.setFlagVolume(VolumeMapper.loadVolume(team.getName()+"flag", warzone.getName(), war, world));
}
}
// lobby
BlockFace lobbyFace = null;
if (lobbyStr != null && !lobbyStr.equals("")){
@ -280,23 +280,23 @@ public class WarzoneMapper {
ZoneLobby lobby = new ZoneLobby(war, warzone, lobbyFace, lobbyVolume);
warzone.setLobby(lobby);
}
return warzone;
}
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");
//war.getLogger().info("Saving warzone " + warzone.getName() + "...");
// name
warzoneConfig.setString("name", warzone.getName());
// world
warzoneConfig.setString("world", warzone.getWorld().getName()); // default for now
// teleport
String teleportStr = "";
Location tele = warzone.getTeleport();
@ -310,7 +310,7 @@ public class WarzoneMapper {
teleportStr = tele.getBlockX() + "," + tele.getBlockY() + "," + tele.getBlockZ() + "," + intYaw;
}
warzoneConfig.setString("teleport", teleportStr);
// teams
String teamsStr = "";
List<Team> teams = warzone.getTeams();
@ -325,7 +325,7 @@ public class WarzoneMapper {
teamsStr += team.getName() + "," + spawn.getBlockX() + "," + spawn.getBlockY() + "," + spawn.getBlockZ() + "," + intYaw + ";";
}
warzoneConfig.setString("teams", teamsStr);
// team flags
String teamFlagsStr = "";;
for (Team team : teams) {
@ -341,10 +341,10 @@ public class WarzoneMapper {
}
}
warzoneConfig.setString("teamFlags", teamFlagsStr);
// ff
warzoneConfig.setBoolean("friendlyFire", warzone.getFriendlyFire());
// loadout
String loadoutStr = "";
HashMap<Integer, ItemStack> items = warzone.getLoadout();
@ -355,28 +355,28 @@ public class WarzoneMapper {
}
}
warzoneConfig.setString("loadout", loadoutStr);
// life pool
warzoneConfig.setInt("lifePool", warzone.getLifePool());
// monument heal
warzoneConfig.setInt("monumentHeal", warzone.getMonumentHeal());
// autoAssignOnly
warzoneConfig.setBoolean("autoAssignOnly", warzone.isAutoAssignOnly());
// team cap
warzoneConfig.setInt("teamCap", warzone.getTeamCap());
// score cap
warzoneConfig.setInt("scoreCap", warzone.getScoreCap());
// blockHeads
warzoneConfig.setBoolean("blockHeads", warzone.isBlockHeads());
// spawnStyle
warzoneConfig.setString("spawnStyle", warzone.getSpawnStyle());
// reward
String rewardStr = "";
HashMap<Integer, ItemStack> rewardItems = warzone.getReward();
@ -387,25 +387,25 @@ public class WarzoneMapper {
}
}
warzoneConfig.setString("reward", rewardStr);
// unbreakableZoneBlocks
warzoneConfig.setBoolean("unbreakableZoneBlocks", warzone.isUnbreakableZoneBlocks());
// disabled
warzoneConfig.setBoolean("disabled", warzone.isDisabled());
// noCreatures
warzoneConfig.setBoolean("noCreatures", warzone.isNoCreatures());
// resetOnEmpty
warzoneConfig.setBoolean("resetOnEmpty", warzone.isResetOnEmpty());
// resetOnLoad
warzoneConfig.setBoolean("resetOnLoad", warzone.isResetOnLoad());
// resetOnUnload
warzoneConfig.setBoolean("resetOnUnload", warzone.isResetOnUnload());
// rallyPoint
String rpStr = "";
Location rp = warzone.getRallyPoint();
@ -413,10 +413,10 @@ public class WarzoneMapper {
rpStr = rp.getBlockX() + "," + rp.getBlockY() + "," + rp.getBlockZ();
}
warzoneConfig.setString("rallyPoint", rpStr);
// defaultDropLootOnDeath
//warzoneConfig.setBoolean("dropLootOnDeath", warzone.isDropLootOnDeath());
// monuments
String monumentsStr = "";
List<Monument> monuments = warzone.getMonuments();
@ -425,7 +425,7 @@ public class WarzoneMapper {
monumentsStr += monument.getName() + "," + monumentLoc.getBlockX() + "," + monumentLoc.getBlockY() + "," + monumentLoc.getBlockZ() + ";";
}
warzoneConfig.setString("monuments", monumentsStr);
// lobby
String lobbyStr = "";
if (warzone.getLobby() != null) {
@ -437,42 +437,42 @@ public class WarzoneMapper {
lobbyStr = "north";
} else if (BlockFace.WEST == warzone.getLobby().getWall()) {
lobbyStr = "west";
}
}
}
warzoneConfig.setString("lobby", lobbyStr);
warzoneConfig.save();
warzoneConfig.close();
if (saveAllBlocks) {
// zone blocks
//VolumeMapper.save(warzone.getVolume(), warzone.getName(), war);
}
// monument blocks
for (Monument monument: monuments) {
VolumeMapper.save(monument.getVolume(), warzone.getName(), war);
}
// team spawn & flag blocks
for (Team team : teams) {
VolumeMapper.save(team.getSpawnVolume(), warzone.getName(), war);
if (team.getFlagVolume() != null) {
VolumeMapper.save(team.getFlagVolume(), warzone.getName(), war);
}
}
}
if (warzone.getLobby() != null) {
VolumeMapper.save(warzone.getLobby().getVolume(), warzone.getName(), war);
}
// if (saveBlocks) {
// war.getLogger().info("Saved warzone " + warzone.getName() + " config and blocks.");
// } else {
// war.getLogger().info("Saved warzone " + warzone.getName() + " config.");
// }
}
public static void delete(War war, String name) {
File zoneFolder = new File(war.getDataFolder().getPath() + "/dat/warzone-" + name);
File[] files = zoneFolder.listFiles();

View File

@ -34,12 +34,12 @@ 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 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");
@ -50,12 +50,12 @@ public class ZoneVolumeMapper {
// 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);
// 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!");
return noOfResetBlocks;
} else {
// 1.6 file exist, so go ahead with reset
@ -68,7 +68,7 @@ public class ZoneVolumeMapper {
blocksStream = new FileInputStream(blocksFile);
signsReader = new BufferedReader(new FileReader(signsFile));
invsReader = new BufferedReader(new FileReader(invsFile));
// Get the corners
cornersReader.readLine();
int x1 = Integer.parseInt(cornersReader.readLine());
@ -78,16 +78,16 @@ public class ZoneVolumeMapper {
int x2 = Integer.parseInt(cornersReader.readLine());
int y2 = Integer.parseInt(cornersReader.readLine());
int z2 = Integer.parseInt(cornersReader.readLine());
volume.setCornerOne(world.getBlockAt(x1, y1, z1));
volume.setCornerTwo(world.getBlockAt(x2, y2, z2));
volume.setCornerTwo(world.getBlockAt(x2, y2, z2));
// Allocate block byte arrays
int noOfBlocks = volume.getSizeX()*volume.getSizeY()*volume.getSizeZ();
byte[] blockBytes = new byte[noOfBlocks*2]; // one byte for type, one for data
blocksStream.read(blockBytes); // read it all
// Now use the block bytes to reset the world blocks
if (!onlyLoadCorners) {
DeferredBlockResetsJob deferred = new DeferredBlockResetsJob(world);
@ -99,24 +99,24 @@ public class ZoneVolumeMapper {
volume.clearBlocksThatDontFloat();
x = volume.getMinX();
for (i = 0; i < volume.getSizeX(); i++){
y = volume.getMinY();
y = volume.getMinY();
for (j = 0; j < volume.getSizeY(); j++) {
z = volume.getMinZ();
for (k = 0; k < volume.getSizeZ(); k++) {
try {
diskBlockType = blockBytes[visitedBlocks*2];
diskBlockData = blockBytes[visitedBlocks*2+1];
worldBlock = volume.getWorld().getBlockAt(x, y, z);
worldBlockId = worldBlock.getTypeId();
if (worldBlockId != diskBlockType ||
(worldBlockId == diskBlockType && worldBlock.getData() != diskBlockData ) ||
(worldBlockId == diskBlockType && worldBlock.getData() == diskBlockData &&
(diskBlockType == Material.WALL_SIGN.getId() || diskBlockType == Material.SIGN_POST.getId()
(diskBlockType == Material.WALL_SIGN.getId() || diskBlockType == Material.SIGN_POST.getId()
|| diskBlockType == Material.CHEST.getId() || diskBlockType == Material.DISPENSER.getId())
)
) {
if (diskBlockType == Material.WALL_SIGN.getId()
if (diskBlockType == Material.WALL_SIGN.getId()
|| diskBlockType == Material.SIGN_POST.getId()) {
// Signs read
String linesStr = signsReader.readLine();
@ -134,18 +134,26 @@ public class ZoneVolumeMapper {
if (state instanceof Sign) {
Sign sign = (Sign)state;
if (lines != null && sign.getLines() != null) {
if (lines.length>0)sign.setLine(0, lines[0]);
if (lines.length>1)sign.setLine(1, lines[1]);
if (lines.length>2)sign.setLine(2, lines[2]);
if (lines.length>3)sign.setLine(3, lines[3]);
if (lines.length>0) {
sign.setLine(0, lines[0]);
}
if (lines.length>1) {
sign.setLine(1, lines[1]);
}
if (lines.length>2) {
sign.setLine(2, lines[2]);
}
if (lines.length>3) {
sign.setLine(3, lines[3]);
}
sign.update(true);
}
}
}
} else if (diskBlockType == Material.CHEST.getId()) {
// Chests read
List<ItemStack> items = readInventoryString(invsReader.readLine());
List<ItemStack> items = ZoneVolumeMapper.readInventoryString(invsReader.readLine());
// Chests set
worldBlock.setType(Material.getMaterial(diskBlockType));
worldBlock.setData(diskBlockData);
@ -166,8 +174,8 @@ public class ZoneVolumeMapper {
}
} else if (diskBlockType == Material.DISPENSER.getId()) {
// Dispensers read
List<ItemStack> items = readInventoryString(invsReader.readLine());
List<ItemStack> items = ZoneVolumeMapper.readInventoryString(invsReader.readLine());
// Dispensers set
worldBlock.setType(Material.getMaterial(diskBlockType));
worldBlock.setData(diskBlockData);
@ -188,7 +196,7 @@ public class ZoneVolumeMapper {
}
} else if (diskBlockType == Material.WOODEN_DOOR.getId() || diskBlockType == Material.IRON_DOOR_BLOCK.getId()){
// Door blocks
if (j-1 > 0) {
Block blockBelow = world.getBlockAt(x, y-1, z);
boolean belowIsGlass = blockBelow.getTypeId() == Material.GLASS.getId();
@ -204,7 +212,7 @@ public class ZoneVolumeMapper {
worldBlock.setType(Material.GLASS);
}
}
} else if (((diskBlockType == Material.TORCH.getId() && ((diskBlockData & 0x02) == 0x02))
} else if (((diskBlockType == Material.TORCH.getId() && ((diskBlockData & 0x02) == 0x02))
|| (diskBlockType == Material.REDSTONE_TORCH_OFF.getId() && ((diskBlockData & 0x02) == 0x02))
|| (diskBlockType == Material.REDSTONE_TORCH_ON.getId() && ((diskBlockData & 0x02) == 0x02))
|| (diskBlockType == Material.LEVER.getId() && ((diskBlockData & 0x02) == 0x02))
@ -223,14 +231,14 @@ public class ZoneVolumeMapper {
noOfResetBlocks++;
}
visitedBlocks++;
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 +
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());
e.printStackTrace();
} finally {
@ -244,31 +252,39 @@ public class ZoneVolumeMapper {
if (!deferred.isEmpty()) {
war.getServer().getScheduler().scheduleSyncDelayedTask(war, deferred, 1);
}
}
}
} catch (FileNotFoundException e) {
war.logWarn("Failed to find volume file " + volume.getName() +
war.logWarn("Failed to find volume file " + volume.getName() +
" for warzone " + zoneName + ". " + e.getClass().getName() + " " + e.getMessage());
e.printStackTrace();
} catch (IOException e) {
war.logWarn("Failed to read volume file " + volume.getName() +
war.logWarn("Failed to read volume file " + volume.getName() +
" for warzone " + zoneName + ". " + e.getClass().getName() + " " + e.getMessage());
e.printStackTrace();
} finally {
try {
if (cornersReader != null) cornersReader.close();
if (blocksStream != null) blocksStream.close();
if (signsReader != null) signsReader.close();
if (invsReader != null) invsReader.close();
if (cornersReader != null) {
cornersReader.close();
}
if (blocksStream != null) {
blocksStream.close();
}
if (signsReader != null) {
signsReader.close();
}
if (invsReader != null) {
invsReader.close();
}
} catch (IOException e) {
war.logWarn("Failed to close volume file " + volume.getName() +
war.logWarn("Failed to close volume file " + volume.getName() +
" for warzone " + zoneName + ". " + e.getClass().getName() + " " + e.getMessage());
e.printStackTrace();
}
}
return noOfResetBlocks;
return noOfResetBlocks;
}
}
private static List<ItemStack> readInventoryString(String invString) {
List<ItemStack> items = new ArrayList<ItemStack>();
if (invString != null && !invString.equals("")) {
@ -311,7 +327,7 @@ public class ZoneVolumeMapper {
blocksOutput = new FileOutputStream(new File(path + ".blocks"));
signsWriter = new BufferedWriter(new FileWriter(new File(path + ".signs")));
invsWriter = new BufferedWriter(new FileWriter(new File(path + ".invs")));
cornersWriter.write("corner1"); cornersWriter.newLine();
cornersWriter.write(Integer.toString(volume.getCornerOne().getX())); cornersWriter.newLine();
cornersWriter.write(Integer.toString(volume.getCornerOne().getY())); cornersWriter.newLine();
@ -320,7 +336,7 @@ public class ZoneVolumeMapper {
cornersWriter.write(Integer.toString(volume.getCornerTwo().getX())); cornersWriter.newLine();
cornersWriter.write(Integer.toString(volume.getCornerTwo().getY())); cornersWriter.newLine();
cornersWriter.write(Integer.toString(volume.getCornerTwo().getZ())); cornersWriter.newLine();
int x = 0;
int y = 0;
int z = 0;
@ -328,7 +344,7 @@ public class ZoneVolumeMapper {
int typeId;
byte data;
BlockState state;
x = volume.getMinX();
for (int i = 0; i < volume.getSizeX(); i++){
y = volume.getMinY();
@ -340,10 +356,10 @@ public class ZoneVolumeMapper {
typeId = block.getTypeId();
data = block.getData();
state = block.getState();
blocksOutput.write((byte)typeId);
blocksOutput.write(data);
if (state instanceof Sign) {
// Signs
String extra = "";
@ -371,11 +387,12 @@ public class ZoneVolumeMapper {
if (items != null) {
for (ItemStack item : items) {
if (item != null) {
extra += item.getTypeId() + ";"
+ item.getAmount() + ";"
+ item.getDurability();
if (item.getData() != null)
extra += ";" + item.getData().getData() ;
extra += item.getTypeId() + ";"
+ item.getAmount() + ";"
+ item.getDurability();
if (item.getData() != null) {
extra += ";" + item.getData().getData() ;
}
extra += ";;";
}
}
@ -383,7 +400,7 @@ public class ZoneVolumeMapper {
invsWriter.newLine();
}
} else if (state instanceof Dispenser) {
// Dispensers
// Dispensers
Dispenser dispenser = (Dispenser)state;
Inventory inv = dispenser.getInventory();
int size = inv.getSize();
@ -398,11 +415,12 @@ public class ZoneVolumeMapper {
if (items != null) {
for (ItemStack item : items) {
if (item != null) {
extra += item.getTypeId() + ";"
+ item.getAmount() + ";"
+ item.getDurability();
if (item.getData() != null)
extra += ";" + item.getData().getData() ;
extra += item.getTypeId() + ";"
+ item.getAmount() + ";"
+ item.getDurability();
if (item.getData() != null) {
extra += ";" + item.getData().getData() ;
}
extra += ";;";
}
}
@ -414,7 +432,7 @@ public class ZoneVolumeMapper {
}
catch (Exception e) {
war.logWarn("Unexpected error while saving a block to " +
" file for zone " + zoneName + ". Blocks saved so far: " + noOfSavedBlocks
" file for zone " + zoneName + ". Blocks saved so far: " + noOfSavedBlocks
+ "Position: x:" + x + " y:" + y + " z:" + z + ". " + e.getClass().getName() + " " + e.getMessage());
e.printStackTrace();
} finally {
@ -426,22 +444,30 @@ public class ZoneVolumeMapper {
x++;
}
} catch (IOException e) {
war.logWarn("Failed to write volume file " + zoneName +
war.logWarn("Failed to write volume file " + zoneName +
" for warzone " + volume.getName() + ". " + e.getClass().getName() + " " + e.getMessage());
e.printStackTrace();
} catch (Exception e) {
war.logWarn("Unexpected error caused failure to write volume file " + zoneName +
war.logWarn("Unexpected error caused failure to write volume file " + zoneName +
" for warzone " + volume.getName() + ". " + e.getClass().getName() + " " + e.getMessage());
e.printStackTrace();
}
}
finally {
try {
if (cornersWriter != null) cornersWriter.close();
if (blocksOutput != null) blocksOutput.close();
if (signsWriter != null) signsWriter.close();
if (invsWriter != null) invsWriter.close();
if (cornersWriter != null) {
cornersWriter.close();
}
if (blocksOutput != null) {
blocksOutput.close();
}
if (signsWriter != null) {
signsWriter.close();
}
if (invsWriter != null) {
invsWriter.close();
}
} catch (IOException e) {
war.logWarn("Failed to close volume file " + volume.getName() +
war.logWarn("Failed to close volume file " + volume.getName() +
" for warzone " + zoneName + ". " + e.getClass().getName() + " " + e.getMessage());
e.printStackTrace();
}
@ -454,15 +480,15 @@ public class ZoneVolumeMapper {
ZoneVolumeSaveJob job = new ZoneVolumeSaveJob(volume, zoneName, war);
war.getServer().getScheduler().scheduleSyncDelayedTask(war, job, tickDelay);
}
public static void delete(Volume volume, War war) {
deleteFile("War/dat/volume-" + volume.getName() + ".dat", war);
deleteFile("War/dat/volume-" + volume.getName() + ".corners", war);
deleteFile("War/dat/volume-" + volume.getName() + ".blocks", war);
deleteFile("War/dat/volume-" + volume.getName() + ".signs", war);
deleteFile("War/dat/volume-" + volume.getName() + ".invs", 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);
}
private static void deleteFile(String path, War war) {
File volFile= new File(path);
if (volFile.exists()) {

View File

@ -8,30 +8,30 @@ import org.bukkit.entity.Player;
* The purpose of this tool is twofold:
* 1: Avoid client crashes due to bad color formating.
* 2: Make color continue on word wrapping
*
*
* In minecraft the degree sign is used as a prefix to another char to create a color.
* For example the code for white is "\u00A7f".
* For example the code for white is "\u00A7f".
* The "\u00A7" is the unicode notation for the degree sign and the "f" means white.
*
*
* When does minecraft wrap the text? After how many chars?
* Answer:
* Answer:
* Because the font isn't monospace this differs depending on what you write.
* However we can fit 53 "M" without wrapping and the 54th char would then wrap (be at the beginning of the next line instead)
* As there is no broader char than "M" we can know for sure the minimum line length is 53.
* Note that this means the number of DISPLAYED chars per row is 53.
* A degree sign and the char after will NOT count, as they will not be displayed as chars.
*
*
* Good to know: Numbers have the same font width as an M.
*
*
* When does the client crash?
* Answer:
* Answer:
* When a row ends with a degree char and optionally another sign after.
* Another way to say the same: When a line ends with either a broken or valid color notation.
* AND
* The client will ALWAYS crash if the sign after the last displayed char in a row is a degree char.
* A goofy way to explatin it:
* For a line with only "M" and numbers, the fiftyfourth "displayed char" musn't be a degree sign.
*
*
* WARNING:
* Above is a hypothesis I have created based on what my experiments have shown.
* I am fairly sure it is correct but please help me test it further.
@ -39,53 +39,53 @@ import org.bukkit.entity.Player;
public class ChatFixUtil {
public final static char deg = '\u00A7';
public final static int lineLength = 53;
/**
* This method wraps the msg for you at row lengths of 53,
* avoids client crash scenarios and makes the previous color continue on
* the next line.
*
* The upsides with filtering your messages through this method are:
*
* The upsides with filtering your messages through this method are:
* - No client crashes.
* - Line wrapping with preserved color.
*
*
* The downsides are:
* - The width of the chat window will not be used to it's fullest.
* For example you can fit more that 53 commas (,) in a chatwindow row
* but the line would break after 53 displayed chars.
*
*
* Suggested usage:
* NO NEED TO USE the fix method for static help pages in your plugin.
* As the text is static you can make sure there is no client crash yourself
* and be able to use the full line length.
*
*
* DO USE in cases like where you output colored messages with playernames in your
* plugin. As the player names have different length there is potential for client crash.
*/
public static ArrayList<String> fix(String msg) {
// Make sure the end of msg is good
msg = cleanMsgEnding(msg);
msg = ChatFixUtil.cleanMsgEnding(msg);
ArrayList<String> ret = new ArrayList<String>();
int displen = 0; // The number of displayed chars in row so far.
String row = "";
String latestColor = null;
for (int i = 0; i < msg.length(); i++) {
if (displen == lineLength) {
if (displen == ChatFixUtil.lineLength) {
// it is time to start on the next row!
ret.add(row);
displen = 0;
row = "";
if (latestColor != null) {
row += deg+latestColor;
row += ChatFixUtil.deg+latestColor;
}
}
char c = msg.charAt(i);
if (c == deg) {
if (c == ChatFixUtil.deg) {
latestColor = String.valueOf(msg.charAt(i+1));
row += deg+latestColor;
row += ChatFixUtil.deg+latestColor;
i++;
} else {
displen += 1;
@ -95,26 +95,26 @@ public class ChatFixUtil {
ret.add(row);
return ret;
}
public static ArrayList<String> fix(List<String> messages) {
ArrayList<String> ret = new ArrayList<String>();
for (String message : messages) {
ret.addAll(fix(message));
ret.addAll(ChatFixUtil.fix(message));
}
return ret;
}
/**
* Removes the ending chars as long as they are deg or deg+'anychar' or a space
* As I see it we would never want those chars at the end of a msg.
*/
protected static String cleanMsgEnding (String msg) {
while (msg.length() > 0) {
if (msg.endsWith(String.valueOf(deg)) || msg.endsWith(" ")) {
if (msg.endsWith(String.valueOf(ChatFixUtil.deg)) || msg.endsWith(" ")) {
msg = msg.substring(0, msg.length()-1);
} else if (msg.length() >= 2 && msg.charAt(msg.length() - 2) == deg) {
} else if (msg.length() >= 2 && msg.charAt(msg.length() - 2) == ChatFixUtil.deg) {
msg = msg.substring(0, msg.length()-2);
} else {
break;
@ -122,7 +122,7 @@ public class ChatFixUtil {
}
return msg;
}
/**
* This test util assumes line break after 53 displayed chars.
* The fix method above breaks like that so this method should
@ -130,19 +130,18 @@ public class ChatFixUtil {
*/
public static String thisMsgWouldCrashClient(String str) {
// There would always be crash if we end with deg or deg+'anychar'
if (str.length() >= 1 && str.charAt(str.length() - 1) == deg) {
return "Crash: The str ends with deg.";
} else if (str.length() >= 2 && str.charAt(str.length() - 2) == deg) {
return "Crash: The str ends with deg+'anychar'.";
}
if (str.length() >= 1 && str.charAt(str.length() - 1) == ChatFixUtil.deg)
return "Crash: The str ends with deg.";
else if (str.length() >= 2 && str.charAt(str.length() - 2) == ChatFixUtil.deg)
return "Crash: The str ends with deg+'anychar'.";
int displayedChars = 0;
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (c == deg && displayedChars == lineLength) {
return "Crash: Deg as fiftyforth \"displayed\" char";
} else if (c == deg) {
if (c == ChatFixUtil.deg && displayedChars == ChatFixUtil.lineLength)
return "Crash: Deg as fiftyforth \"displayed\" char";
else if (c == ChatFixUtil.deg) {
i++; // this and next: they are not displayed... skip them...
} else {
displayedChars += 1;
@ -150,7 +149,7 @@ public class ChatFixUtil {
}
return "all ok";
}
//----------------------------------------------//
// Methods for effectively sending messages
//----------------------------------------------//
@ -160,7 +159,7 @@ public class ChatFixUtil {
public static void sendMessage(Player player, String message, boolean fix) {
if (fix) {
List<String> messages = ChatFixUtil.fix(message);
sendMessage(player, messages, false);
ChatFixUtil.sendMessage(player, messages, false);
} else {
if (player != null) {
player.sendMessage(message);
@ -172,14 +171,14 @@ public class ChatFixUtil {
messages = ChatFixUtil.fix(messages);
}
for (String message : messages) {
sendMessage(player, message, false);
ChatFixUtil.sendMessage(player, message, false);
}
}
public static void sendMessage(Player player, String message) {
sendMessage(player, message, true);
ChatFixUtil.sendMessage(player, message, true);
}
public static void sendMessage(Player player, List<String> messages) {
sendMessage(player, messages, true);
ChatFixUtil.sendMessage(player, messages, true);
}
//----------------------------------------------//
// Many Players
@ -187,10 +186,10 @@ public class ChatFixUtil {
public static void sendMessage(Collection<Player> players, String message, boolean fix) {
if (fix) {
List<String> messages = ChatFixUtil.fix(message);
sendMessage(players, messages, false);
ChatFixUtil.sendMessage(players, messages, false);
} else {
for (Player player : players) {
sendMessage(player, message, false);
ChatFixUtil.sendMessage(player, message, false);
}
}
}
@ -198,15 +197,15 @@ public class ChatFixUtil {
if (fix) {
messages = ChatFixUtil.fix(messages);
}
for (String message : messages) {
sendMessage(players, message, false);
ChatFixUtil.sendMessage(players, message, false);
}
}
public static void sendMessage(Collection<Player> players, String message) {
sendMessage(players, message, true);
ChatFixUtil.sendMessage(players, message, true);
}
public static void sendMessage(Collection<Player> players, List<String> messages) {
sendMessage(players, messages, true);
ChatFixUtil.sendMessage(players, messages, true);
}
}

View File

@ -24,30 +24,30 @@ public class DeferredBlockReset {
this.z = z;
this.blockType = blockType;
this.blockData = blockData;
lines = signLines;
this.lines = signLines;
}
public int getX() {
return x;
return this.x;
}
public int getY() {
return y;
return this.y;
}
public int getZ() {
return z;
return this.z;
}
public int getBlockType() {
return blockType;
return this.blockType;
}
public byte getBlockData() {
return blockData;
return this.blockData;
}
public String[] getLines() {
return lines;
return this.lines;
}
}

View File

@ -11,16 +11,16 @@ public class InventoryStash {
public InventoryStash(ItemStack[] contents) {
this.setContents(contents);
}
public InventoryStash(ItemStack[] contents, ItemStack helmet, ItemStack chest, ItemStack legs, ItemStack feet) {
this.setContents(contents);
this.setHelmet(helmet);
this.setChest(chest);
this.setLegs(legs);
this.setFeet(feet);
}
public void setContents(ItemStack[] contents) {
@ -28,7 +28,7 @@ public class InventoryStash {
}
public ItemStack[] getContents() {
return contents;
return this.contents;
}
public void setHelmet(ItemStack helmet) {
@ -36,7 +36,7 @@ public class InventoryStash {
}
public ItemStack getHelmet() {
return helmet;
return this.helmet;
}
public void setChest(ItemStack chest) {
@ -44,7 +44,7 @@ public class InventoryStash {
}
public ItemStack getChest() {
return chest;
return this.chest;
}
public void setLegs(ItemStack legs) {
@ -52,7 +52,7 @@ public class InventoryStash {
}
public ItemStack getLegs() {
return legs;
return this.legs;
}
public void setFeet(ItemStack feet) {
@ -60,8 +60,8 @@ public class InventoryStash {
}
public ItemStack getFeet() {
return feet;
return this.feet;
}
}

View File

@ -30,5 +30,5 @@ public class SignHelper {
}
}
}
}

View File

@ -5,7 +5,7 @@ import org.bukkit.World;
import org.bukkit.block.Block;
/**
*
*
* @author tommytony
*
*/
@ -20,7 +20,7 @@ public class BlockInfo {
public static Block getBlock(World world, BlockInfo info) {
return world.getBlockAt(info.getX(), info.getY(), info.getZ());
}
public BlockInfo(int x, int y, int z, int type, byte data)
{
this.x = x;
@ -29,7 +29,7 @@ public class BlockInfo {
this.type = type;
this.data = data;
}
public BlockInfo(Block block) {
this.x = block.getX();
this.y = block.getY();
@ -41,7 +41,7 @@ public class BlockInfo {
// this.signLines = sign.getLines();
// }
}
// public BlockInfo(BlockState blockState) {
// this.x = blockState.getX();
// this.y = blockState.getY();
@ -53,7 +53,7 @@ public class BlockInfo {
//// this.signLines = sign.getLines();
//// }
// }
// public BlockInfo(int typeID, byte data, String[] lines) {
// type = typeID;
// this.data = data;
@ -61,46 +61,46 @@ public class BlockInfo {
// }
public int getX() {
return x;
return this.x;
}
public int getY() {
return y;
return this.y;
}
public int getZ() {
return z;
return this.z;
}
// letting us mutate the BlockInfos might be a bad idea; use setters with care
public void setX(int x) {
this.x = x;
}
public void setY(int y) {
this.y = y;
}
public void setZ(int z) {
this.z = z;
}
public int getTypeId() {
return type;
return this.type;
}
public Material getType() {
return Material.getMaterial(type);
}
return Material.getMaterial(this.type);
}
public byte getData() {
return data;
return this.data;
}
public boolean is(Material material) {
return getType() == material;
return this.getType() == material;
}
// public String[] getSignLines() {
// if (is(Material.SIGN) || is(Material.SIGN_POST)){
// return new String[4] {"", ""};

View File

@ -7,9 +7,9 @@ import org.bukkit.block.Block;
import bukkit.tommytony.war.War;
/**
*
*
* @author tommytony
*
*
* Broken, don't use.
*
*/
@ -23,50 +23,50 @@ public class CenteredVolume extends Volume {
public CenteredVolume(String name, Block center, int sideSize, War war, World world) {
super(name, war, world);
this.world = world;
setCenter(center);
setSideSize(sideSize);
this.setCenter(center);
this.setSideSize(sideSize);
}
public void changeCenter(Location newCenter) {
changeCenter(world.getBlockAt(newCenter.getBlockX(),
newCenter.getBlockY(),
newCenter.getBlockZ()),
this.changeCenter(this.world.getBlockAt(newCenter.getBlockX(),
newCenter.getBlockY(),
newCenter.getBlockZ()),
this.sideSize);
}
public void changeCenter(Block newCenter, int sideSize) {
this.resetBlocks();
this.center = newCenter;
this.sideSize = sideSize;
this.calculateCorners();
}
public void setCenter(Block block) {
this.center = block;
}
public void calculateCorners() {
int topHalfOfSide = sideSize / 2;
int x = center.getX() + topHalfOfSide;
int y = center.getY() + topHalfOfSide;
int z = center.getZ() + topHalfOfSide;
Block cornerOne = world.getBlockAt(x, y, z);
setCornerOne(cornerOne);
if (sideSize % 2 == 0) { // not a real center, bottom half is larger by 1
int bottomHalfOfSide = sideSize - topHalfOfSide;
x = center.getX() - bottomHalfOfSide;
y = center.getY() - bottomHalfOfSide;
z = center.getZ() - bottomHalfOfSide;
Block cornerTwo = world.getBlockAt(x, y, z);
setCornerTwo(cornerTwo);
int topHalfOfSide = this.sideSize / 2;
int x = this.center.getX() + topHalfOfSide;
int y = this.center.getY() + topHalfOfSide;
int z = this.center.getZ() + topHalfOfSide;
Block cornerOne = this.world.getBlockAt(x, y, z);
this.setCornerOne(cornerOne);
if (this.sideSize % 2 == 0) { // not a real center, bottom half is larger by 1
int bottomHalfOfSide = this.sideSize - topHalfOfSide;
x = this.center.getX() - bottomHalfOfSide;
y = this.center.getY() - bottomHalfOfSide;
z = this.center.getZ() - bottomHalfOfSide;
Block cornerTwo = this.world.getBlockAt(x, y, z);
this.setCornerTwo(cornerTwo);
} else {
x = center.getX() - topHalfOfSide;
y = center.getY() - topHalfOfSide;
z = center.getZ() - topHalfOfSide;
Block cornerTwo = world.getBlockAt(x, y, z);
setCornerTwo(cornerTwo);
x = this.center.getX() - topHalfOfSide;
y = this.center.getY() - topHalfOfSide;
z = this.center.getZ() - topHalfOfSide;
Block cornerTwo = this.world.getBlockAt(x, y, z);
this.setCornerTwo(cornerTwo);
}
}

View File

@ -4,5 +4,5 @@ public class NotNorthwestException extends Exception {
private static final long serialVersionUID = -5736463256274556866L;
}

View File

@ -3,7 +3,7 @@ package com.tommytony.war.volumes;
public class NotSoutheastException extends Exception {
/**
*
*
*/
private static final long serialVersionUID = -4347064837067648341L;

View File

@ -3,7 +3,7 @@ package com.tommytony.war.volumes;
public class TooBigException extends Exception {
/**
*
*
*/
private static final long serialVersionUID = 61793179891881015L;

View File

@ -3,7 +3,7 @@ package com.tommytony.war.volumes;
public class TooSmallException extends Exception {
/**
*
*
*/
private static final long serialVersionUID = -1641366536434076088L;

View File

@ -8,7 +8,7 @@ import org.bukkit.block.BlockFace;
import bukkit.tommytony.war.War;
/**
*
*
* @author tommytony
*
*/
@ -19,93 +19,89 @@ public class VerticalVolume extends Volume{
super(name, war, world);
}
@Override
public void setCornerOne(Block block){
// corner one defaults to topmost corner
Block topBlock = getWorld().getBlockAt(block.getX(), 127, block.getZ());
Block topBlock = this.getWorld().getBlockAt(block.getX(), 127, block.getZ());
super.setCornerOne(topBlock);
}
@Override
public void setCornerTwo(Block block){
// corner two defaults to bottom most corner
Block bottomBlock = getWorld().getBlockAt(block.getX(), 0, block.getZ());
Block bottomBlock = this.getWorld().getBlockAt(block.getX(), 0, block.getZ());
super.setCornerTwo(bottomBlock);
}
public boolean isWallBlock(Block block){
return isEastWallBlock(block) || isNorthWallBlock(block) || isSouthWallBlock(block) || isWestWallBlock(block);
return this.isEastWallBlock(block) || this.isNorthWallBlock(block) || this.isSouthWallBlock(block) || this.isWestWallBlock(block);
}
public boolean isEastWallBlock(Block block) {
if (getMinZ() == block.getZ()
&& block.getX() <= getMaxX()
&& block.getX() >= getMinX()) {
return true; // east wall
}
if (this.getMinZ() == block.getZ()
&& block.getX() <= this.getMaxX()
&& block.getX() >= this.getMinX())
return true; // east wall
return false;
}
public boolean isSouthWallBlock(Block block) {
if (getMaxX() == block.getX()
&& block.getZ() <= getMaxZ()
&& block.getZ() >= getMinZ()) {
return true; // south wall
}
if (this.getMaxX() == block.getX()
&& block.getZ() <= this.getMaxZ()
&& block.getZ() >= this.getMinZ())
return true; // south wall
return false;
}
public boolean isNorthWallBlock(Block block) {
if (getMinX() == block.getX()
&& block.getZ() <= getMaxZ()
&& block.getZ() >= getMinZ()) {
return true; // north wall
}
if (this.getMinX() == block.getX()
&& block.getZ() <= this.getMaxZ()
&& block.getZ() >= this.getMinZ())
return true; // north wall
return false;
}
public boolean isWestWallBlock(Block block) {
if (getMaxZ() == block.getZ()
&& block.getX() <= getMaxX()
&& block.getX() >= getMinX()) {
return true; // west wall
}
if (this.getMaxZ() == block.getZ()
&& block.getX() <= this.getMaxX()
&& block.getX() >= this.getMinX())
return true; // west wall
return false;
}
public int resetWallBlocks(BlockFace wall) {
int noOfResetBlocks = 0;
try {
if (hasTwoCorners() && getBlockTypes() != null) {
if (this.hasTwoCorners() && this.getBlockTypes() != null) {
if (wall == BlockFace.EAST) {
int z = getMinZ();
int z = this.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)) {
int y = this.getMinY();
for (int j = 0; j < this.getSizeY(); j++) {
int x = this.getMinX();
for (int i = 0; i < this.getSizeX(); i++) {
int oldBlockType = this.getBlockTypes()[i][j][k];
byte oldBlockData = this.getBlockDatas()[i][j][k];
Block currentBlock = this.getWorld().getBlockAt(x, y, z);
if (this.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)) {
int z = this.getMaxZ();
int k = this.getSizeZ()-1;
int y = this.getMinY();
for (int j = 0; j < this.getSizeY(); j++) {
int x = this.getMinX();
for (int i = 0; i < this.getSizeX(); i++) {
int oldBlockType = this.getBlockTypes()[i][j][k];
byte oldBlockData = this.getBlockDatas()[i][j][k];
Block currentBlock = this.getWorld().getBlockAt(x, y, z);
if (this.resetBlock(oldBlockType, oldBlockData, currentBlock)) {
noOfResetBlocks++;
}
x++;
@ -113,16 +109,16 @@ public class VerticalVolume extends Volume{
y++;
}
} else if (wall == BlockFace.NORTH) {
int x = getMinX();
int x = this.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)) {
int y = this.getMinY();
for (int j = 0; j < this.getSizeY(); j++) {
int z = this.getMinZ();
for (int k = 0; k < this.getSizeZ(); k++) {
int oldBlockType = this.getBlockTypes()[i][j][k];
byte oldBlockData = this.getBlockDatas()[i][j][k];
Block currentBlock = this.getWorld().getBlockAt(x, y, z);
if (this.resetBlock(oldBlockType, oldBlockData, currentBlock)) {
noOfResetBlocks++;
}
z++;
@ -130,16 +126,16 @@ public class VerticalVolume extends Volume{
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)) {
int x = this.getMaxX();
int i = this.getSizeX()-1;
int y = this.getMinY();
for (int j = 0; j < this.getSizeY(); j++) {
int z = this.getMinZ();
for (int k = 0; k < this.getSizeZ(); k++) {
int oldBlockType = this.getBlockTypes()[i][j][k];
byte oldBlockData = this.getBlockDatas()[i][j][k];
Block currentBlock = this.getWorld().getBlockAt(x, y, z);
if (this.resetBlock(oldBlockType, oldBlockData, currentBlock)) {
noOfResetBlocks++;
}
z++;
@ -147,13 +143,13 @@ public class VerticalVolume extends Volume{
y++;
}
}
}
}
} catch (Exception e) {
this.getWar().logWarn("Failed to reset wall " + wall + " in volume " + getName() + ". " + e.getClass().toString() + " " + e.getMessage());
this.getWar().logWarn("Failed to reset wall " + wall + " in volume " + this.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) ||
@ -176,5 +172,5 @@ public class VerticalVolume extends Volume{
}
return false;
}
}

View File

@ -21,7 +21,7 @@ import bukkit.tommytony.war.War;
import com.tommytony.war.jobs.BlockResetJob;
/**
*
*
* @author tommytony
*
*/
@ -35,30 +35,30 @@ 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;
private War war;
public Volume(String name, War war, World world) {
this.name = name;
this.war = war;
this.world = world;
}
public World getWorld() {
return world;
return this.world;
}
public boolean hasTwoCorners() {
return cornerOne != null && cornerTwo != null;
return this.cornerOne != null && this.cornerTwo != null;
}
public void setCornerOne(Block block) {
this.cornerOne = new BlockInfo(block);
}
public void setCornerOne(BlockInfo blockInfo) {
this.cornerOne = blockInfo;
}
public int saveBlocks() {
// BlockSaveJob job = new BlockSaveJob(this);
// war.getServer().getScheduler().scheduleSyncDelayedTask(war, job);
@ -68,19 +68,19 @@ public class Volume {
int y = 0;
int z = 0;
try {
if (hasTwoCorners()) {
this.setBlockTypes(new int[getSizeX()][getSizeY()][getSizeZ()]);
this.setBlockDatas(new byte[getSizeX()][getSizeY()][getSizeZ()]);
if (this.hasTwoCorners()) {
this.setBlockTypes(new int[this.getSizeX()][this.getSizeY()][this.getSizeZ()]);
this.setBlockDatas(new byte[this.getSizeX()][this.getSizeY()][this.getSizeZ()]);
this.getSignLines().clear();
this.getInvBlockContents().clear();
x = getMinX();
for (int i = 0; i < getSizeX(); i++){
y = getMinY();
for (int j = 0; j < getSizeY(); j++){
z = getMinZ();
for (int k = 0;k < getSizeZ(); k++) {
x = this.getMinX();
for (int i = 0; i < this.getSizeX(); i++){
y = this.getMinY();
for (int j = 0; j < this.getSizeY(); j++){
z = this.getMinZ();
for (int k = 0;k < this.getSizeZ(); k++) {
try {
Block block = getWorld().getBlockAt(x, y, z);
Block block = this.getWorld().getBlockAt(x, y, z);
this.getBlockTypes()[i][j][k] = block.getTypeId();
this.getBlockDatas()[i][j][k] = block.getData();
BlockState state = block.getState();
@ -90,7 +90,7 @@ public class Volume {
if (sign.getLines() != null) {
this.getSignLines().put("sign-" + i + "-" + j + "-" + k, sign.getLines());
}
} else if (state instanceof Chest) {
// Chests
Chest chest = (Chest)state;
@ -105,7 +105,7 @@ public class Volume {
}
this.getInvBlockContents().put("chest-" + i + "-" + j + "-" + k, items);
} else if (state instanceof Dispenser) {
// Dispensers
// Dispensers
Dispenser dispenser = (Dispenser)state;
Inventory inv = dispenser.getInventory();
int size = inv.getSize();
@ -118,10 +118,10 @@ public class Volume {
}
this.getInvBlockContents().put("dispenser-" + i + "-" + j + "-" + k, items);
}
noOfSavedBlocks++;
} catch (Exception e) {
this.getWar().getLogger().warning("Failed to save block in volume " + getName() + ". Saved blocks so far:" + noOfSavedBlocks
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());
e.printStackTrace();
} finally {
@ -132,53 +132,53 @@ public class Volume {
}
x++;
}
}
}
} catch (Exception e) {
this.getWar().getLogger().warning("Failed to save volume " + getName() + " blocks. Saved blocks:" + noOfSavedBlocks
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());
e.printStackTrace();
}
return noOfSavedBlocks;
}
public void resetBlocksAsJob() {
BlockResetJob job = new BlockResetJob(this);
war.getServer().getScheduler().scheduleSyncDelayedTask(war, job);
this.war.getServer().getScheduler().scheduleSyncDelayedTask(this.war, job);
}
public int resetBlocks() {
int visitedBlocks = 0, noOfResetBlocks = 0, x = 0, y = 0, z = 0;
int currentBlockId = 0;
int oldBlockType = 0;
clearBlocksThatDontFloat();
this.clearBlocksThatDontFloat();
try {
if (hasTwoCorners() && isSaved()) {
x = getMinX();
for (int i = 0; i < getSizeX(); i++){
y = getMinY();
for (int j = 0; j < getSizeY(); j++){
z = getMinZ();
for (int k = 0;k < getSizeZ(); k++) {
if (this.hasTwoCorners() && this.isSaved()) {
x = this.getMinX();
for (int i = 0; i < this.getSizeX(); i++){
y = this.getMinY();
for (int j = 0; j < this.getSizeY(); j++){
z = this.getMinZ();
for (int k = 0;k < this.getSizeZ(); k++) {
try {
oldBlockType = getBlockTypes()[i][j][k];
byte oldBlockData = getBlockDatas()[i][j][k];
Block currentBlock = getWorld().getBlockAt(x, y, z);
oldBlockType = this.getBlockTypes()[i][j][k];
byte oldBlockData = this.getBlockDatas()[i][j][k];
Block currentBlock = this.getWorld().getBlockAt(x, y, z);
currentBlockId = currentBlock.getTypeId();
if (currentBlockId != oldBlockType ||
(currentBlockId == oldBlockType && currentBlock.getData() != oldBlockData ) ||
(currentBlockId == oldBlockType && currentBlock.getData() == oldBlockData &&
(oldBlockType == Material.WALL_SIGN.getId() || oldBlockType == Material.SIGN_POST.getId()
(oldBlockType == Material.WALL_SIGN.getId() || oldBlockType == Material.SIGN_POST.getId()
|| oldBlockType == Material.CHEST.getId() || oldBlockType == Material.DISPENSER.getId())
)
) {
if (oldBlockType == Material.WALL_SIGN.getId()
if (oldBlockType == Material.WALL_SIGN.getId()
|| oldBlockType == Material.SIGN_POST.getId()) {
// Signs
if (oldBlockType == Material.SIGN_POST.getId() && ((oldBlockData & 0x04) == 0x04)
&& i+1 != getSizeX()) {
&& i+1 != this.getSizeX()) {
Block southBlock = currentBlock.getFace(BlockFace.SOUTH);
int oldSouthBlockType = getBlockTypes()[i+1][j][k];
byte oldSouthBlockData = getBlockDatas()[i+1][j][k];
int oldSouthBlockType = this.getBlockTypes()[i+1][j][k];
byte oldSouthBlockData = this.getBlockDatas()[i+1][j][k];
if (southBlock.getTypeId() != oldSouthBlockType) {
southBlock.setTypeId(oldSouthBlockType);
southBlock.setData(oldSouthBlockData);
@ -191,10 +191,18 @@ public class Volume {
Sign sign = (Sign)state;
String[] lines = this.getSignLines().get("sign-" + i + "-" + j + "-" + k);
if (lines != null && sign.getLines() != null) {
if (lines.length>0)sign.setLine(0, lines[0]);
if (lines.length>1)sign.setLine(1, lines[1]);
if (lines.length>2)sign.setLine(2, lines[2]);
if (lines.length>3)sign.setLine(3, lines[3]);
if (lines.length>0) {
sign.setLine(0, lines[0]);
}
if (lines.length>1) {
sign.setLine(1, lines[1]);
}
if (lines.length>2) {
sign.setLine(2, lines[2]);
}
if (lines.length>3) {
sign.setLine(3, lines[3]);
}
sign.update(true);
}
}
@ -219,7 +227,7 @@ public class Volume {
}
}
} else if (oldBlockType == Material.DISPENSER.getId()) {
// Dispensers
// Dispensers
currentBlock.setType(Material.getMaterial(oldBlockType));
currentBlock.setData(oldBlockData);
BlockState state = currentBlock.getState();
@ -240,28 +248,28 @@ public class Volume {
}
} else if (oldBlockType == Material.WOODEN_DOOR.getId() || oldBlockType == Material.IRON_DOOR_BLOCK.getId()){
// Door blocks
// Check if is bottom door block
if (j+1 < getSizeY() && getBlockTypes()[i][j+1][k] == oldBlockType) {
if (j+1 < this.getSizeY() && this.getBlockTypes()[i][j+1][k] == oldBlockType) {
// set both door blocks right away
currentBlock.setType(Material.getMaterial(oldBlockType));
currentBlock.setData(oldBlockData);
Block blockAbove = getWorld().getBlockAt(x, y+1, z);
Block blockAbove = this.getWorld().getBlockAt(x, y+1, z);
blockAbove.setType(Material.getMaterial(oldBlockType));
blockAbove.setData(getBlockDatas()[i][j+1][k]);
blockAbove.setData(this.getBlockDatas()[i][j+1][k]);
}
} else if (((oldBlockType == Material.TORCH.getId() && ((oldBlockData & 0x02) == 0x02))
} else if (((oldBlockType == Material.TORCH.getId() && ((oldBlockData & 0x02) == 0x02))
|| (oldBlockType == Material.REDSTONE_TORCH_OFF.getId() && ((oldBlockData & 0x02) == 0x02))
|| (oldBlockType == Material.REDSTONE_TORCH_ON.getId() && ((oldBlockData & 0x02) == 0x02))
|| (oldBlockType == Material.LEVER.getId() && ((oldBlockData & 0x02) == 0x02))
|| (oldBlockType == Material.STONE_BUTTON.getId() && ((oldBlockData & 0x02) == 0x02))
|| (oldBlockType == Material.LADDER.getId() && ((oldBlockData & 0x04) == 0x04))
|| (oldBlockType == Material.RAILS.getId() && ((oldBlockData & 0x02) == 0x02)))
&& i+1 != getSizeX()){
&& i+1 != this.getSizeX()){
// Blocks that hang on a block south of themselves need to make sure that block is there before placing themselves... lol
Block southBlock = currentBlock.getFace(BlockFace.SOUTH);
int oldSouthBlockType = getBlockTypes()[i+1][j][k];
byte oldSouthBlockData = getBlockDatas()[i+1][j][k];
int oldSouthBlockType = this.getBlockTypes()[i+1][j][k];
byte oldSouthBlockData = this.getBlockDatas()[i+1][j][k];
if (southBlock.getTypeId() != oldSouthBlockType) {
southBlock.setTypeId(oldSouthBlockType);
southBlock.setData(oldSouthBlockData);
@ -278,8 +286,8 @@ public class Volume {
}
visitedBlocks++;
} catch (Exception e) {
this.getWar().getLogger().warning("Failed to reset block in volume " + getName() + ". Visited blocks so far:" + visitedBlocks
+ ". Blocks reset: "+ noOfResetBlocks +
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());
e.printStackTrace();
} finally {
@ -290,10 +298,10 @@ public class Volume {
}
x++;
}
}
}
} catch (Exception e) {
this.getWar().logWarn("Failed to reset volume " + getName() + " blocks. Blocks visited: " + visitedBlocks
+ ". Blocks reset: "+ noOfResetBlocks + ". Error at x:" + x + " y:" + y + " z:" + z
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());
e.printStackTrace();
}
@ -304,122 +312,122 @@ public class Volume {
// TODO Auto-generated method stub
return this.blockDatas;
}
public void setBlockDatas(byte[][][] data) {
this.blockDatas = data;
}
public void setCornerTwo(Block block) {
this.cornerTwo = new BlockInfo(block);
}
public void setCornerTwo(BlockInfo blockInfo) {
this.cornerTwo = blockInfo;
}
public BlockInfo getMinXBlock() {
if (cornerOne.getX() < cornerTwo.getX()) return cornerOne;
return cornerTwo;
if (this.cornerOne.getX() < this.cornerTwo.getX()) return this.cornerOne;
return this.cornerTwo;
}
public BlockInfo getMinYBlock() {
if (cornerOne.getY() < cornerTwo.getY()) return cornerOne;
return cornerTwo;
if (this.cornerOne.getY() < this.cornerTwo.getY()) return this.cornerOne;
return this.cornerTwo;
}
public BlockInfo getMinZBlock() {
if (cornerOne.getZ() < cornerTwo.getZ()) return cornerOne;
return cornerTwo;
if (this.cornerOne.getZ() < this.cornerTwo.getZ()) return this.cornerOne;
return this.cornerTwo;
}
public int getMinX() {
return getMinXBlock().getX();
return this.getMinXBlock().getX();
}
public int getMinY() {
return getMinYBlock().getY();
return this.getMinYBlock().getY();
}
public int getMinZ() {
return getMinZBlock().getZ();
return this.getMinZBlock().getZ();
}
public BlockInfo getMaxXBlock() {
if (cornerOne.getX() < cornerTwo.getX()) return cornerTwo;
return cornerOne;
if (this.cornerOne.getX() < this.cornerTwo.getX()) return this.cornerTwo;
return this.cornerOne;
}
public BlockInfo getMaxYBlock() {
if (cornerOne.getY() < cornerTwo.getY()) return cornerTwo;
return cornerOne;
if (this.cornerOne.getY() < this.cornerTwo.getY()) return this.cornerTwo;
return this.cornerOne;
}
public BlockInfo getMaxZBlock() {
if (cornerOne.getZ() < cornerTwo.getZ()) return cornerTwo;
return cornerOne;
if (this.cornerOne.getZ() < this.cornerTwo.getZ()) return this.cornerTwo;
return this.cornerOne;
}
public int getMaxX() {
return getMaxXBlock().getX();
return this.getMaxXBlock().getX();
}
public int getMaxY() {
return getMaxYBlock().getY();
return this.getMaxYBlock().getY();
}
public int getMaxZ() {
return getMaxZBlock().getZ();
return this.getMaxZBlock().getZ();
}
public int getSizeX() {
return getMaxX() - getMinX() + 1;
return this.getMaxX() - this.getMinX() + 1;
}
public int getSizeY() {
return getMaxY() - getMinY() + 1;
return this.getMaxY() - this.getMinY() + 1;
}
public int getSizeZ() {
return getMaxZ() - getMinZ() + 1;
}
return this.getMaxZ() - this.getMinZ() + 1;
}
public boolean isSaved() {
return getBlockTypes() != null;
return this.getBlockTypes() != null;
}
public int[][][] getBlockTypes() {
return blockTypes;
return this.blockTypes;
}
public BlockInfo getCornerOne() {
return cornerOne;
return this.cornerOne;
}
public BlockInfo getCornerTwo() {
return cornerTwo;
return this.cornerTwo;
}
public boolean contains(Location location) {
int x = location.getBlockX();
int y = location.getBlockY();
int z = location.getBlockZ();
return hasTwoCorners() &&
location.getWorld().getName().equals(world.getName()) &&
x <= getMaxX() && x >= getMinX() &&
y <= getMaxY() && y >= getMinY() &&
z <= getMaxZ() && z >= getMinZ();
return this.hasTwoCorners() &&
location.getWorld().getName().equals(this.world.getName()) &&
x <= this.getMaxX() && x >= this.getMinX() &&
y <= this.getMaxY() && y >= this.getMinY() &&
z <= this.getMaxZ() && z >= this.getMinZ();
}
public boolean contains(Block block) {
int x = block.getX();
int y = block.getY();
int z = block.getZ();
return hasTwoCorners() &&
block.getWorld().getName().equals(world.getName()) &&
x <= getMaxX() && x >= getMinX() &&
y <= getMaxY() && y >= getMinY() &&
z <= getMaxZ() && z >= getMinZ();
return this.hasTwoCorners() &&
block.getWorld().getName().equals(this.world.getName()) &&
x <= this.getMaxX() && x >= this.getMinX() &&
y <= this.getMaxY() && y >= this.getMinY() &&
z <= this.getMaxZ() && z >= this.getMinZ();
}
public void setBlockTypes(int[][][] blockTypes) {
@ -427,23 +435,23 @@ public class Volume {
}
public War getWar() {
return war;
return this.war;
}
public String getName() {
return name;
return this.name;
}
public void setToMaterial(Material material) {
try {
if (hasTwoCorners() && isSaved()) {
int x = getMinX();
for (int i = 0; i < getSizeX(); i++){
int y = getMaxY();
for (int j = getSizeY(); j > 0; j--){
int z = getMinZ();
for (int k = 0;k < getSizeZ(); k++) {
Block currentBlock = getWorld().getBlockAt(x, y, z);
if (this.hasTwoCorners() && this.isSaved()) {
int x = this.getMinX();
for (int i = 0; i < this.getSizeX(); i++){
int y = this.getMaxY();
for (int j = this.getSizeY(); j > 0; j--){
int z = this.getMinZ();
for (int k = 0;k < this.getSizeZ(); k++) {
Block currentBlock = this.getWorld().getBlockAt(x, y, z);
currentBlock.setType(material);
z++;
}
@ -451,28 +459,28 @@ public class Volume {
}
x++;
}
}
}
} catch (Exception e) {
this.getWar().logWarn("Failed to set block to " + material + "in volume " + name + "." + e.getClass().toString() + " " + e.getMessage());
this.getWar().logWarn("Failed to set block to " + material + "in volume " + this.name + "." + e.getClass().toString() + " " + e.getMessage());
}
}
public void setFaceMaterial(BlockFace face, Material material) {
try {
if (hasTwoCorners() && isSaved()) {
int x = getMinX();
for (int i = 0; i < getSizeX(); i++){
int y = getMinY();
for (int j = 0; j < getSizeY(); j++){
int z = getMinZ();
for (int k = 0;k < getSizeZ(); k++) {
if ((face == BlockFace.DOWN && y == getMinY())
|| (face == BlockFace.UP && y == getMaxY())
|| (face == BlockFace.NORTH && x == getMinX())
|| (face == BlockFace.EAST && z == getMinZ())
|| (face == BlockFace.SOUTH && x == getMaxX())
|| (face == BlockFace.WEST && z == getMaxZ())) {
Block currentBlock = getWorld().getBlockAt(x, y, z);
if (this.hasTwoCorners() && this.isSaved()) {
int x = this.getMinX();
for (int i = 0; i < this.getSizeX(); i++){
int y = this.getMinY();
for (int j = 0; j < this.getSizeY(); j++){
int z = this.getMinZ();
for (int k = 0;k < this.getSizeZ(); k++) {
if ((face == BlockFace.DOWN && y == this.getMinY())
|| (face == BlockFace.UP && y == this.getMaxY())
|| (face == BlockFace.NORTH && x == this.getMinX())
|| (face == BlockFace.EAST && z == this.getMinZ())
|| (face == BlockFace.SOUTH && x == this.getMaxX())
|| (face == BlockFace.WEST && z == this.getMaxZ())) {
Block currentBlock = this.getWorld().getBlockAt(x, y, z);
currentBlock.setType(material);
}
z++;
@ -481,25 +489,25 @@ public class Volume {
}
x++;
}
}
}
} catch (Exception e) {
this.getWar().logWarn("Failed to set block to " + material + "in volume " + name + "." + e.getClass().toString() + " " + e.getMessage());
this.getWar().logWarn("Failed to set block to " + material + "in volume " + this.name + "." + e.getClass().toString() + " " + e.getMessage());
}
}
private void switchMaterials(Material[] oldTypes, Material newType) {
try {
int i = 0, j = 0, k = 0;
int x, y, z;
Block currentBlock = null;
if (hasTwoCorners() && isSaved()) {
x = getMinX();
for (i = 0; i < getSizeX(); i++){
y = getMaxY();
for (j = getSizeY(); j > 0; j--){
z = getMinZ();
for (k = 0;k < getSizeZ(); k++) {
currentBlock = getWorld().getBlockAt(x, y, z);
if (this.hasTwoCorners() && this.isSaved()) {
x = this.getMinX();
for (i = 0; i < this.getSizeX(); i++){
y = this.getMaxY();
for (j = this.getSizeY(); j > 0; j--){
z = this.getMinZ();
for (k = 0;k < this.getSizeZ(); k++) {
currentBlock = this.getWorld().getBlockAt(x, y, z);
for (Material oldType : oldTypes) {
if (currentBlock.getType().getId() == oldType.getId()) {
currentBlock.setType(newType);
@ -516,9 +524,9 @@ public class Volume {
}
x++;
}
}
}
} catch (Exception e) {
this.getWar().logWarn("Failed to switch block to " + newType + "in volume " + name + "." + e.getClass().toString() + " " + e.getMessage());
this.getWar().logWarn("Failed to switch block to " + newType + "in volume " + this.name + "." + e.getClass().toString() + " " + e.getMessage());
}
}
@ -546,7 +554,7 @@ public class Volume {
toAirMaterials[19] = Material.CACTUS;
toAirMaterials[20] = Material.SNOW;
toAirMaterials[21] = Material.ICE;
switchMaterials(toAirMaterials, Material.AIR);
this.switchMaterials(toAirMaterials, Material.AIR);
}
public void setSignLines(HashMap<String, String[]> signLines) {
@ -554,7 +562,7 @@ public class Volume {
}
public HashMap<String, String[]> getSignLines() {
return signLines;
return this.signLines;
}
public void setInvBlockContents(HashMap<String, List<ItemStack>> invBlockContents) {
@ -562,9 +570,10 @@ public class Volume {
}
public HashMap<String, List<ItemStack>> getInvBlockContents() {
return invBlockContents;
return this.invBlockContents;
}
@Override
public void finalize() {
this.blockDatas = null;
this.blockTypes = null;

View File

@ -11,7 +11,7 @@ import com.tommytony.war.Warzone;
import com.tommytony.war.mappers.ZoneVolumeMapper;
/**
*
*
* @author tommytony
*
*/
@ -24,40 +24,40 @@ public class ZoneVolume extends Volume {
super(name, war, 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, zone.getName(), this.getWar());
getWar().logInfo("Saved " + saved + " blocks in warzone " + zone.getName() + ".");
isSaved = true;
int saved = ZoneVolumeMapper.save(this, this.zone.getName(), this.getWar());
this.getWar().logInfo("Saved " + saved + " blocks in warzone " + this.zone.getName() + ".");
this.isSaved = true;
return saved;
}
@Override
public boolean isSaved() {
return isSaved;
return this.isSaved;
}
public void loadCorners() {
ZoneVolumeMapper.load(this, zone.getName(), this.getWar(), this.getWorld(), true);
isSaved = true;
ZoneVolumeMapper.load(this, this.zone.getName(), this.getWar(), 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, zone.getName(), this.getWar(), this.getWorld(), false);
getWar().logInfo("Reset " + reset + " blocks in warzone " + zone.getName() + ".");
isSaved = true;
int reset = ZoneVolumeMapper.load(this, this.zone.getName(), this.getWar(), this.getWorld(), false);
this.getWar().logInfo("Reset " + reset + " blocks in warzone " + this.zone.getName() + ".");
this.isSaved = true;
return reset;
}
@Override
public void setBlockTypes(int[][][] blockTypes) {
return;
}
@Override
public void setBlockDatas(byte[][][] blockData) {
return;
@ -66,268 +66,255 @@ public class ZoneVolume extends Volume {
public void setNorthwest(Block block) throws NotNorthwestException, TooSmallException, TooBigException {
// northwest defaults to top block
BlockInfo topBlock = new BlockInfo(block.getX(), 127, block.getZ(), block.getTypeId(), block.getData());
BlockInfo oldCornerOne = getCornerOne();
BlockInfo oldCornerTwo = getCornerTwo();
if (getCornerOne() == null)
BlockInfo oldCornerOne = this.getCornerOne();
BlockInfo oldCornerTwo = this.getCornerTwo();
if (this.getCornerOne() == null)
{
if (getCornerTwo() == null) {
// northwest defaults to corner 1
if (this.getCornerTwo() == null) {
// northwest defaults to corner 1
super.setCornerOne(topBlock);
} else if (getCornerTwo().getX() <= block.getX() || getCornerTwo().getZ() >= block.getZ()) {
throw new NotNorthwestException();
} else {
} else if (this.getCornerTwo().getX() <= block.getX() || this.getCornerTwo().getZ() >= block.getZ())
throw new NotNorthwestException();
else {
// corner 2 already set, but we're sure we're located at the northwest of it
super.setCornerOne(topBlock);
}
} else if (getCornerTwo() == null){
} else if (this.getCornerTwo() == null){
// corner 1 already exists, set northwest as corner 2 (only if it's at the northwest of corner 1)
if (getCornerOne().getX() <= block.getX() || getCornerOne().getZ() >= block.getZ()) {
throw new NotNorthwestException();
}
if (this.getCornerOne().getX() <= block.getX() || this.getCornerOne().getZ() >= block.getZ())
throw new NotNorthwestException();
super.setCornerTwo(topBlock);
} else {
// both corners already set: we are resizing (only if the new block is northwest relative to the southeasternmost block)
if (getSoutheastX() <= block.getX() || getSoutheastZ() >= block.getZ()) {
throw new NotNorthwestException();
}
BlockInfo minXBlock = getMinXBlock(); // north means min X
if (this.getSoutheastX() <= block.getX() || this.getSoutheastZ() >= block.getZ())
throw new NotNorthwestException();
BlockInfo minXBlock = this.getMinXBlock(); // north means min X
minXBlock.setX(block.getX()); // mutating, argh!
BlockInfo maxZBlock = getMaxZBlock(); // west means max Z
BlockInfo maxZBlock = this.getMaxZBlock(); // west means max Z
maxZBlock.setZ(block.getZ());
}
if (tooSmall() || zoneStructuresAreOutside()) {
if (this.tooSmall() || this.zoneStructuresAreOutside()) {
super.setCornerOne(oldCornerOne);
super.setCornerTwo(oldCornerTwo);
throw new TooSmallException();
} else if (tooBig()) {
} else if (this.tooBig()) {
super.setCornerOne(oldCornerOne);
super.setCornerTwo(oldCornerTwo);
throw new TooBigException();
}
}
public int getNorthwestX() {
if (!hasTwoCorners())
if (!this.hasTwoCorners())
return 0;
else
return getMinX();
return this.getMinX();
}
public int getNorthwestZ() {
if (!hasTwoCorners())
if (!this.hasTwoCorners())
return 0;
else
return getMaxZ();
return this.getMaxZ();
}
public void setSoutheast(Block block) throws NotSoutheastException, TooSmallException, TooBigException {
// southeast defaults to bottom block
BlockInfo bottomBlock = new BlockInfo(block.getX(), 0, block.getZ(), block.getTypeId(), block.getData());
BlockInfo oldCornerOne = getCornerOne();
BlockInfo oldCornerTwo = getCornerTwo();
if (getCornerTwo() == null)
BlockInfo oldCornerOne = this.getCornerOne();
BlockInfo oldCornerTwo = this.getCornerTwo();
if (this.getCornerTwo() == null)
{
if (getCornerOne() == null) {
// southeast defaults to corner 2
if (this.getCornerOne() == null) {
// southeast defaults to corner 2
super.setCornerTwo(bottomBlock);
} else if (getCornerOne().getX() >= block.getX() || getCornerOne().getZ() <= block.getZ()) {
throw new NotSoutheastException();
} else {
} else if (this.getCornerOne().getX() >= block.getX() || this.getCornerOne().getZ() <= block.getZ())
throw new NotSoutheastException();
else {
// corner 1 already set, but we're sure we're located at the southeast of it
super.setCornerTwo(bottomBlock);
}
} else if (getCornerOne() == null){
} else if (this.getCornerOne() == null){
// corner 2 already exists, set northwest as corner 1 (only if it's at the southeast of corner 2)
if (getCornerTwo().getX() >= block.getX() || getCornerTwo().getZ() <= block.getZ()) {
throw new NotSoutheastException();
}
if (this.getCornerTwo().getX() >= block.getX() || this.getCornerTwo().getZ() <= block.getZ())
throw new NotSoutheastException();
super.setCornerOne(bottomBlock);
} else {
// both corners already set: we are resizing (only if the new block is southeast relative to the northwesternmost block)
if (getNorthwestX() >= block.getX() || getNorthwestZ() <= block.getZ()) {
throw new NotSoutheastException();
}
BlockInfo maxXBlock = getMaxXBlock(); // south means max X
if (this.getNorthwestX() >= block.getX() || this.getNorthwestZ() <= block.getZ())
throw new NotSoutheastException();
BlockInfo maxXBlock = this.getMaxXBlock(); // south means max X
maxXBlock.setX(block.getX()); // mutating, argh!
BlockInfo minZBlock = getMinZBlock(); // east means min Z
BlockInfo minZBlock = this.getMinZBlock(); // east means min Z
minZBlock.setZ(block.getZ());
}
if (tooSmall() || zoneStructuresAreOutside()) {
if (this.tooSmall() || this.zoneStructuresAreOutside()) {
super.setCornerOne(oldCornerOne);
super.setCornerTwo(oldCornerTwo);
throw new TooSmallException();
} else if (tooBig()) {
} else if (this.tooBig()) {
super.setCornerOne(oldCornerOne);
super.setCornerTwo(oldCornerTwo);
throw new TooBigException();
}
}
public int getSoutheastX() {
if (!hasTwoCorners())
if (!this.hasTwoCorners())
return 0;
else
return getMaxX();
return this.getMaxX();
}
public int getSoutheastZ() {
if (!hasTwoCorners())
if (!this.hasTwoCorners())
return 0;
else
return getMinZ();
return this.getMinZ();
}
public int getCenterY() {
if (!hasTwoCorners())
if (!this.hasTwoCorners())
return 0;
else
return getMinY() + (getMaxY() - getMinY())/2;
return this.getMinY() + (this.getMaxY() - this.getMinY())/2;
}
public void setZoneCornerOne(Block block) throws TooSmallException, TooBigException {
BlockInfo oldCornerOne = getCornerOne();
BlockInfo oldCornerOne = this.getCornerOne();
super.setCornerOne(block);
if (tooSmall() || zoneStructuresAreOutside()) {
if (this.tooSmall() || this.zoneStructuresAreOutside()) {
super.setCornerOne(oldCornerOne);
throw new TooSmallException();
} else if (tooBig()) {
} else if (this.tooBig()) {
super.setCornerOne(oldCornerOne);
throw new TooBigException();
}
}
public void setZoneCornerTwo(Block block) throws TooSmallException, TooBigException {
BlockInfo oldCornerTwo = getCornerTwo();
BlockInfo oldCornerTwo = this.getCornerTwo();
super.setCornerTwo(block);
if (tooSmall() || zoneStructuresAreOutside()) {
if (this.tooSmall() || this.zoneStructuresAreOutside()) {
super.setCornerTwo(oldCornerTwo);
throw new TooSmallException();
} else if (tooBig()) {
} else if (this.tooBig()) {
super.setCornerTwo(oldCornerTwo);
throw new TooBigException();
}
}
public boolean tooSmall() {
if (hasTwoCorners() && ((getMaxX() - getMinX() < 10)
|| (getMaxY() - getMinY() < 10)
|| (getMaxZ() - getMinZ() < 10))) return true;
if (this.hasTwoCorners() && ((this.getMaxX() - this.getMinX() < 10)
|| (this.getMaxY() - this.getMinY() < 10)
|| (this.getMaxZ() - this.getMinZ() < 10))) return true;
return false;
}
public boolean tooBig() {
if (hasTwoCorners() && ((getMaxX() - getMinX() > 750)
|| (getMaxY() - getMinY() > 750)
|| (getMaxZ() - getMinZ() > 750))) return true;
if (this.hasTwoCorners() && ((this.getMaxX() - this.getMinX() > 750)
|| (this.getMaxY() - this.getMinY() > 750)
|| (this.getMaxZ() - this.getMinZ() > 750))) return true;
return false;
}
public boolean zoneStructuresAreOutside() {
// check team spawns & flags
for (Team team : zone.getTeams()) {
for (Team team : this.zone.getTeams()) {
if (team.getTeamSpawn() != null) {
if (!isInside(team.getSpawnVolume().getCornerOne())
|| !isInside(team.getSpawnVolume().getCornerTwo())) {
return true;
}
if (!this.isInside(team.getSpawnVolume().getCornerOne())
|| !this.isInside(team.getSpawnVolume().getCornerTwo()))
return true;
}
if (team.getTeamFlag() != null) {
if (!isInside(team.getFlagVolume().getCornerOne())
|| !isInside(team.getFlagVolume().getCornerTwo())) {
return true;
}
if (!this.isInside(team.getFlagVolume().getCornerOne())
|| !this.isInside(team.getFlagVolume().getCornerTwo()))
return true;
}
}
// check monuments
for (Monument monument : zone.getMonuments()) {
for (Monument monument : this.zone.getMonuments()) {
if (monument.getVolume() != null) {
if (!isInside(monument.getVolume().getCornerOne())
|| !isInside(monument.getVolume().getCornerTwo())) {
return true;
}
if (!this.isInside(monument.getVolume().getCornerOne())
|| !this.isInside(monument.getVolume().getCornerTwo()))
return true;
}
}
return false;
}
private boolean isInside(BlockInfo info) {
if (info.getX() <= getMaxX() && info.getX() >= getMinX() &&
info.getY() <= getMaxY() && info.getY() >= getMinY() &&
info.getZ() <= getMaxZ() && info.getZ() >= getMinZ())
if (info.getX() <= this.getMaxX() && info.getX() >= this.getMinX() &&
info.getY() <= this.getMaxY() && info.getY() >= this.getMinY() &&
info.getZ() <= this.getMaxZ() && info.getZ() >= this.getMinZ())
return true;
return false;
}
public boolean isWallBlock(Block block){
return isEastWallBlock(block) || isNorthWallBlock(block)
|| isSouthWallBlock(block) || isWestWallBlock(block)
|| isUpWallBlock(block) || isDownWallBlock(block);
return this.isEastWallBlock(block) || this.isNorthWallBlock(block)
|| this.isSouthWallBlock(block) || this.isWestWallBlock(block)
|| this.isUpWallBlock(block) || this.isDownWallBlock(block);
}
public boolean isEastWallBlock(Block block) {
if (getMinZ() == block.getZ()
&& block.getX() <= getMaxX()
&& block.getX() >= getMinX()
&& block.getY() >= getMinY()
&& block.getY() <= getMaxY()) {
return true; // east wall
}
if (this.getMinZ() == block.getZ()
&& block.getX() <= this.getMaxX()
&& block.getX() >= this.getMinX()
&& block.getY() >= this.getMinY()
&& block.getY() <= this.getMaxY())
return true; // east wall
return false;
}
public boolean isSouthWallBlock(Block block) {
if (getMaxX() == block.getX()
&& block.getZ() <= getMaxZ()
&& block.getZ() >= getMinZ()
&& block.getY() >= getMinY()
&& block.getY() <= getMaxY()) {
return true; // south wall
}
if (this.getMaxX() == block.getX()
&& block.getZ() <= this.getMaxZ()
&& block.getZ() >= this.getMinZ()
&& block.getY() >= this.getMinY()
&& block.getY() <= this.getMaxY())
return true; // south wall
return false;
}
public boolean isNorthWallBlock(Block block) {
if (getMinX() == block.getX()
&& block.getZ() <= getMaxZ()
&& block.getZ() >= getMinZ()
&& block.getY() >= getMinY()
&& block.getY() <= getMaxY()) {
return true; // north wall
}
if (this.getMinX() == block.getX()
&& block.getZ() <= this.getMaxZ()
&& block.getZ() >= this.getMinZ()
&& block.getY() >= this.getMinY()
&& block.getY() <= this.getMaxY())
return true; // north wall
return false;
}
public boolean isWestWallBlock(Block block) {
if (getMaxZ() == block.getZ()
&& block.getX() <= getMaxX()
&& block.getX() >= getMinX()
&& block.getY() >= getMinY()
&& block.getY() <= getMaxY()) {
return true; // west wall
}
if (this.getMaxZ() == block.getZ()
&& block.getX() <= this.getMaxX()
&& block.getX() >= this.getMinX()
&& block.getY() >= this.getMinY()
&& block.getY() <= this.getMaxY())
return true; // west wall
return false;
}
public boolean isUpWallBlock(Block block) {
if (getMaxY() == block.getY()
&& block.getX() <= getMaxX()
&& block.getX() >= getMinX()
&& block.getZ() >= getMinZ()
&& block.getZ() <= getMaxZ()) {
return true; // top wall
}
if (this.getMaxY() == block.getY()
&& block.getX() <= this.getMaxX()
&& block.getX() >= this.getMinX()
&& block.getZ() >= this.getMinZ()
&& block.getZ() <= this.getMaxZ())
return true; // top wall
return false;
}
public boolean isDownWallBlock(Block block) {
if (getMinY() == block.getY()
&& block.getX() <= getMaxX()
&& block.getX() >= getMinX()
&& block.getZ() >= getMinZ()
&& block.getZ() <= getMaxZ()) {
return true; // bottom wall
}
if (this.getMinY() == block.getY()
&& block.getX() <= this.getMaxX()
&& block.getX() >= this.getMinX()
&& block.getZ() >= this.getMinZ()
&& block.getZ() <= this.getMaxZ())
return true; // bottom wall
return false;
}
@ -347,7 +334,7 @@ public class ZoneVolume extends Volume {
Block currentBlock = getWorld().getBlockAt(x, y, z);
if (resetBlock(oldBlockType, oldBlockData, currentBlock)) {
noOfResetBlocks++;
}
}
x++;
}
y++;
@ -415,7 +402,7 @@ public class ZoneVolume extends Volume {
Block currentBlock = getWorld().getBlockAt(x, y, z);
if (resetBlock(oldBlockType, oldBlockData, currentBlock)) {
noOfResetBlocks++;
}
}
z++;
}
x++;
@ -432,20 +419,20 @@ public class ZoneVolume extends Volume {
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) ||