diff --git a/war/src/main/java/com/tommytony/war/Monument.java b/war/src/main/java/com/tommytony/war/Monument.java index 1f4bfef..19fa89d 100644 --- a/war/src/main/java/com/tommytony/war/Monument.java +++ b/war/src/main/java/com/tommytony/war/Monument.java @@ -21,8 +21,7 @@ public class Monument { int x = location.getBlockX(); int y = location.getBlockY(); int z = location.getBlockZ(); - volume = new CenteredVolume("name", location, war, warzone); - volume.setSideSize(5); + volume = new CenteredVolume("name", location, 5, war, warzone); volume.saveBlocks(); this.addMonumentBlocks(); diff --git a/war/src/main/java/com/tommytony/war/Team.java b/war/src/main/java/com/tommytony/war/Team.java index f5759a6..7fbd4e3 100644 --- a/war/src/main/java/com/tommytony/war/Team.java +++ b/war/src/main/java/com/tommytony/war/Team.java @@ -1,21 +1,22 @@ package com.tommytony.war; -import org.bukkit.*; +import java.util.ArrayList; +import java.util.List; + +import org.bukkit.Block; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Player; import org.bukkit.block.BlockState; import org.bukkit.block.Sign; import com.tommytony.war.volumes.CenteredVolume; -import com.tommytony.war.volumes.Volume; - -import java.util.ArrayList; -import java.util.List; public class Team { private List players = new ArrayList(); private Location teamSpawn = null; private String name; private int remainingTickets; - private int startTickets; private int points = 0; private CenteredVolume volume; private final War war; @@ -26,14 +27,16 @@ public class Team { this.warzone = warzone; this.setName(name); this.teamSpawn = teamSpawn; - this.volume = new CenteredVolume(name, teamSpawn, war, warzone); + this.volume = new CenteredVolume(name, teamSpawn, 5, war, warzone); } public void setTeamSpawn(Location teamSpawn) { - if(teamSpawn != null) volume.resetBlocks(); this.teamSpawn = teamSpawn; - Volume newTeamSpawn = new CenteredVolume(name, teamSpawn, war, warzone); + + // this resets the block to old state + volume.setCenter(warzone.getWorld().getBlockAt(teamSpawn.getBlockX(), teamSpawn.getBlockY(), teamSpawn.getBlockZ())); + volume.setSideSize(5); volume.saveBlocks(); // Set the spawn diff --git a/war/src/main/java/com/tommytony/war/War.java b/war/src/main/java/com/tommytony/war/War.java index 99d83e4..185b87f 100644 --- a/war/src/main/java/com/tommytony/war/War.java +++ b/war/src/main/java/com/tommytony/war/War.java @@ -105,7 +105,7 @@ public class War extends JavaPlugin { public Warzone warzone(Location location) { for(Warzone warzone : warzones) { - if(warzone.getVolume().contains(location)) return warzone; + if(warzone.getVolume() != null && warzone.getVolume().contains(location)) return warzone; } return null; } diff --git a/war/src/main/java/com/tommytony/war/WarPlayerListener.java b/war/src/main/java/com/tommytony/war/WarPlayerListener.java index 760e048..4e07493 100644 --- a/war/src/main/java/com/tommytony/war/WarPlayerListener.java +++ b/war/src/main/java/com/tommytony/war/WarPlayerListener.java @@ -74,7 +74,7 @@ public class WarPlayerListener extends PlayerListener { } else { boolean warped = false; for(Warzone warzone : war.getWarzones()) { - if(warzone.getName().equals(split[1])){ + if(warzone.getName().equals(split[1]) && warzone.getTeleport() != null){ player.teleportTo(warzone.getTeleport()); warped = true; player.sendMessage(war.str("You've landed in warzone " + warzone.getName() + @@ -209,7 +209,7 @@ public class WarPlayerListener extends PlayerListener { Team newTeam = new Team(name, player.getLocation(), war, warzone); newTeam.setRemainingTickets(warzone.getLifePool()); warzone.getTeams().add(newTeam); - newTeam.setTeamSpawn(player.getLocation()); + newTeam.setTeamSpawn(player.getLocation()); player.sendMessage(war.str("Team " + name + " created with spawn here.")); WarzoneMapper.save(war, warzone, false); } @@ -232,8 +232,6 @@ public class WarPlayerListener extends PlayerListener { } } if(team != null) { - team.getVolume().resetBlocks(); - team.setTeamSpawn(player.getLocation()); team.setTeamSpawn(player.getLocation()); player.sendMessage(war.str("Team " + team.getName() + " spawn relocated.")); } else { @@ -463,43 +461,45 @@ public class WarPlayerListener extends PlayerListener { Location to = event.getTo(); Warzone playerWarzone = war.getPlayerWarzone(player.getName()); - Team playerTeam = war.getPlayerTeam(player.getName()); - if(player != null && from != null && to != null && - playerTeam != null && !playerWarzone.getVolume().contains(to)) { - player.sendMessage(war.str("Can't go outside the warzone boundary! Use /leave to exit the battle.")); - if(playerWarzone.getVolume().contains(from)){ - player.teleportTo(from); - } else { - // somehow the player made it out of the zone - player.teleportTo(playerTeam.getTeamSpawn()); - player.sendMessage(war.str("Brought you back to your team spawn. Use /leave to exit the battle.")); + if(playerWarzone != null) { + Team playerTeam = war.getPlayerTeam(player.getName()); + if(player != null && from != null && to != null && + playerTeam != null && !playerWarzone.getVolume().contains(to)) { + player.sendMessage(war.str("Can't go outside the warzone boundary! Use /leave to exit the battle.")); + if(playerWarzone.getVolume().contains(from)){ + player.teleportTo(from); + } else { + // somehow the player made it out of the zone + player.teleportTo(playerTeam.getTeamSpawn()); + player.sendMessage(war.str("Brought you back to your team spawn. Use /leave to exit the battle.")); + } + } + + if(player != null && from != null && to != null && + playerTeam == null + && war.inAnyWarzone(from) + && !war.inAnyWarzone(to)) { + // leaving + Warzone zone = war.warzone(from); + player.sendMessage(war.str("Leaving warzone " + zone.getName() + ".")); + } + + if(player != null && from != null && to != null && + playerTeam == null + && !war.inAnyWarzone(from) + && war.inAnyWarzone(to)) { + // entering + Warzone zone = war.warzone(to); + player.sendMessage(war.str("Entering warzone " + zone.getName() + ". Tip: use /teams.")); + } + + if(to != null && playerTeam != null + && playerWarzone.nearAnyOwnedMonument(to, playerTeam) + && player.getHealth() < 20 + && random.nextInt(42) == 3 ) { // one chance out of many of getting healed + player.setHealth(20); + player.sendMessage(war.str("Your dance pleases the monument's voodoo. You gain full health!")); } - } - - if(player != null && from != null && to != null && - playerTeam == null - && war.inAnyWarzone(from) - && !war.inAnyWarzone(to)) { - // leaving - Warzone zone = war.warzone(from); - player.sendMessage(war.str("Leaving warzone " + zone.getName() + ".")); - } - - if(player != null && from != null && to != null && - playerTeam == null - && !war.inAnyWarzone(from) - && war.inAnyWarzone(to)) { - // entering - Warzone zone = war.warzone(to); - player.sendMessage(war.str("Entering warzone " + zone.getName() + ". Tip: use /teams.")); - } - - if(to != null && playerTeam != null - && playerWarzone.nearAnyOwnedMonument(to, playerTeam) - && player.getHealth() < 20 - && random.nextInt(42) == 3 ) { // one chance out of many of getting healed - player.setHealth(20); - player.sendMessage(war.str("Your dance pleases the monument's voodoo. You gain full health!")); } } diff --git a/war/src/main/java/com/tommytony/war/Warzone.java b/war/src/main/java/com/tommytony/war/Warzone.java index ad53725..a8d1273 100644 --- a/war/src/main/java/com/tommytony/war/Warzone.java +++ b/war/src/main/java/com/tommytony/war/Warzone.java @@ -1,15 +1,20 @@ package com.tommytony.war; -import org.bukkit.*; -import org.bukkit.block.Sign; - -import com.tommytony.war.volumes.CenteredVolume; -import com.tommytony.war.volumes.VerticalVolume; -import com.tommytony.war.volumes.Volume; - import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import org.bukkit.Block; +import org.bukkit.ItemStack; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Player; +import org.bukkit.World; +import org.bukkit.block.BlockState; +import org.bukkit.block.Sign; + +import com.tommytony.war.volumes.VerticalVolume; +import com.tommytony.war.volumes.Volume; + public class Warzone { private String name; private VerticalVolume volume; @@ -34,6 +39,7 @@ public class Warzone { this.friendlyFire = war.getDefaultFriendlyFire(); this.setLifePool(war.getDefaultLifepool()); this.setLoadout(war.getDefaultLoadout()); + this.volume = new VerticalVolume(name, war, this); } public boolean ready() { @@ -90,11 +96,13 @@ public class Warzone { block.setType(Material.SignPost); block.setData((byte)10); // towards southeast - Sign sign = (Sign)block; + BlockState state = block.getState(); + Sign sign = (Sign)state; sign.setLine(0, "Northwest"); sign.setLine(1, "corner of"); sign.setLine(2, "warzone"); sign.setLine(3, name); + state.update(); saveState(); } @@ -116,7 +124,7 @@ public class Warzone { removeSoutheast(); } this.southeast = southeast; - this.volume.setCornerOne(world.getBlockAt(southeast.getBlockX(), southeast.getBlockY(), southeast.getBlockZ())); + this.volume.setCornerTwo(world.getBlockAt(southeast.getBlockX(), southeast.getBlockY(), southeast.getBlockZ())); // add sign int x = southeast.getBlockX(); int y = southeast.getBlockY(); @@ -125,11 +133,13 @@ public class Warzone { block.setType(Material.SignPost); block.setData((byte)2);; - Sign sign = (Sign)block; + BlockState state = block.getState(); + Sign sign = (Sign)state; sign.setLine(0, "Southeast"); sign.setLine(1, "corner of"); sign.setLine(2, "warzone"); sign.setLine(3, name); + state.update(); saveState(); } @@ -175,6 +185,7 @@ public class Warzone { respawnPlayer(team, player); } team.setRemainingTickets(lifePool); + team.getVolume().resetBlocks(); team.resetSign(); } diff --git a/war/src/main/java/com/tommytony/war/volumes/CenteredVolume.java b/war/src/main/java/com/tommytony/war/volumes/CenteredVolume.java index 68ff9da..a2ddcf5 100644 --- a/war/src/main/java/com/tommytony/war/volumes/CenteredVolume.java +++ b/war/src/main/java/com/tommytony/war/volumes/CenteredVolume.java @@ -11,9 +11,10 @@ public class CenteredVolume extends Volume { private Block center; private int sideSize = -1; - public CenteredVolume(String name, Location center, War war, Warzone warzone) { + public CenteredVolume(String name, Location center, int sideSize, War war, Warzone warzone) { super(name, war, warzone); setCenter(warzone.getWorld().getBlockAt(center.getBlockX(), center.getBlockY(), center.getBlockZ())); + setSideSize(sideSize); } public void setCenter(Block block) { diff --git a/war/src/main/java/com/tommytony/war/volumes/Volume.java b/war/src/main/java/com/tommytony/war/volumes/Volume.java index 5de3869..c7f084f 100644 --- a/war/src/main/java/com/tommytony/war/volumes/Volume.java +++ b/war/src/main/java/com/tommytony/war/volumes/Volume.java @@ -6,6 +6,7 @@ import org.bukkit.Block; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.World; +import org.bukkit.block.BlockState; import org.bukkit.block.Sign; import com.tommytony.war.War; @@ -86,11 +87,13 @@ public class Volume { currentBlock.setType(oldBlockInfo.getType()); currentBlock.setData(oldBlockInfo.getData()); if(oldBlockInfo.is(Material.Sign) || oldBlockInfo.is(Material.SignPost)) { - Sign currentSign = (Sign) currentBlock; + BlockState state = currentBlock.getState(); + Sign currentSign = (Sign) state; currentSign.setLine(0, oldBlockInfo.getSignLines()[0]); currentSign.setLine(1, oldBlockInfo.getSignLines()[0]); currentSign.setLine(2, oldBlockInfo.getSignLines()[0]); currentSign.setLine(3, oldBlockInfo.getSignLines()[0]); + state.update(); } noOfResetBlocks++; } @@ -258,7 +261,7 @@ public class Volume { int x = location.getBlockX(); int y = location.getBlockY(); int z = location.getBlockZ(); - return x <= getMaxX() && x >= getMinX() && + return hasTwoCorners() && x <= getMaxX() && x >= getMinX() && y <= getMaxY() && y >= getMinY() && z <= getMaxZ() && z >= getMinZ(); } @@ -267,7 +270,7 @@ public class Volume { int x = block.getX(); int y = block.getY(); int z = block.getZ(); - return x <= getMaxX() && x >= getMinX() && + return hasTwoCorners() && x <= getMaxX() && x >= getMinX() && y <= getMaxY() && y >= getMinY() && z <= getMaxZ() && z >= getMinZ(); }