diff --git a/war/.classpath b/war/.classpath
index af0eeff..9b0cd72 100644
--- a/war/.classpath
+++ b/war/.classpath
@@ -4,5 +4,6 @@
+
diff --git a/war/src/main/java/bukkit/tommytony/war/War.java b/war/src/main/java/bukkit/tommytony/war/War.java
index d43a9bd..848b2f8 100644
--- a/war/src/main/java/bukkit/tommytony/war/War.java
+++ b/war/src/main/java/bukkit/tommytony/war/War.java
@@ -8,6 +8,7 @@ import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import org.bukkit.event.Event.Priority;
import org.bukkit.inventory.ItemStack;
+import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.PluginDescriptionFile;
import org.bukkit.plugin.PluginLoader;
import org.bukkit.plugin.PluginManager;
@@ -31,12 +32,15 @@ import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
+import com.nijikokun.bukkit.Permissions.Permissions;
+
/**
*
* @author tommytony
*
*/
public class War extends JavaPlugin {
+ public static Permissions Permissions = null;
public War(PluginLoader pluginLoader, Server instance,
PluginDescriptionFile desc, File folder, File plugin, ClassLoader cLoader) {
@@ -44,7 +48,6 @@ public class War extends JavaPlugin {
// TODO: switch to bukkit config file
this.desc = desc;
}
-
private WarPlayerListener playerListener = new WarPlayerListener(this);
private WarEntityListener entityListener = new WarEntityListener(this);
@@ -88,7 +91,7 @@ public class War extends JavaPlugin {
public void onEnable() {
this.log = Logger.getLogger("Minecraft");
-
+ this.setupPermissions();
// Register hooks
PluginManager pm = getServer().getPluginManager();
@@ -185,7 +188,7 @@ public class War extends JavaPlugin {
}
// /join
- else if(command.equals("join")) {
+ else if(command.equals("join") && canPlayWar(player)) {
if(arguments.length < 1 || (!this.inAnyWarzone(player.getLocation()) && !this.inAnyWarzoneLobby(player.getLocation()))
|| (arguments.length > 0 && TeamMaterials.teamMaterialFromString(arguments[0]) == null)) {
player.sendMessage(this.str("Usage: /join ." +
@@ -267,11 +270,11 @@ public class War extends JavaPlugin {
// /team
else if(command.equals("team")) {
- if(!this.inAnyWarzone(player.getLocation())) {
+ Team playerTeam = this.getPlayerTeam(player.getName());
+ if(!this.inAnyWarzone(player.getLocation()) && playerTeam != null) {
player.sendMessage(this.str("Usage: /team . " +
"Sends a message only to your teammates."));
} else {
- Team playerTeam = this.getPlayerTeam(player.getName());
ChatColor color = null;
if(playerTeam.getMaterial() == TeamMaterials.TEAMDIAMOND) {
color = ChatColor.DARK_AQUA;
@@ -295,7 +298,7 @@ public class War extends JavaPlugin {
player.sendMessage("No warhub on this War server. Try /zones and /zone.");
} else {
Team playerTeam = this.getPlayerTeam(player.getName());
- Warzone playerWarzone = getPlayerWarzone(player.getName());
+ Warzone playerWarzone = getPlayerTeamWarzone(player.getName());
if(playerTeam != null) { // was in zone
playerTeam.removePlayer(player.getName());
}
@@ -306,7 +309,7 @@ public class War extends JavaPlugin {
player.teleportTo(this.getWarHub().getLocation());
}
- } else if(this.isZoneMaker(player.getName())) {
+ } else if(this.isZoneMaker(player)) {
// Mod commands : /nextbattle
// /nextbattle
@@ -988,7 +991,7 @@ public class War extends JavaPlugin {
return null;
}
- public Warzone getPlayerWarzone(String playerName) {
+ public Warzone getPlayerTeamWarzone(String playerName) {
for(Warzone warzone : warzones) {
Team team = warzone.getPlayerTeam(playerName);
if(team != null) return warzone;
@@ -1093,9 +1096,23 @@ public class War extends JavaPlugin {
return zoneMakerNames;
}
- public boolean isZoneMaker(String playerName) {
+ public boolean canPlayWar(Player player) {
+ if(Permissions != null && Permissions.Security.permission(player, "war.player")) {
+ return true;
+ }
+ if(Permissions == null) {
+ // w/o Permissions, everyone can play
+ return true;
+ }
+ return false;
+ }
+
+ public boolean isZoneMaker(Player player) {
for(String zoneMaker : zoneMakerNames) {
- if(zoneMaker.equals(playerName)) return true;
+ if(zoneMaker.equals(player.getName())) return true;
+ }
+ if(Permissions != null && Permissions.Security.permission(player, "war.*")) {
+ return true;
}
return false;
}
@@ -1184,4 +1201,16 @@ public class War extends JavaPlugin {
return zoneMakersImpersonatingPlayers;
}
+ public void setupPermissions() {
+ Plugin test = this.getServer().getPluginManager().getPlugin("Permissions");
+
+ if(this.Permissions == null) {
+ if(test != null) {
+ this.Permissions = (Permissions)test;
+ } else {
+ info(str("Permission system not enabled. Defaulting to regular War config."));
+ }
+ }
+ }
+
}
diff --git a/war/src/main/java/bukkit/tommytony/war/WarBlockListener.java b/war/src/main/java/bukkit/tommytony/war/WarBlockListener.java
index 028fccf..b0f6403 100644
--- a/war/src/main/java/bukkit/tommytony/war/WarBlockListener.java
+++ b/war/src/main/java/bukkit/tommytony/war/WarBlockListener.java
@@ -32,8 +32,8 @@ public class WarBlockListener extends BlockListener {
boolean captured = false;
if(player != null) {
Team team = war.getPlayerTeam(player.getName());
- Warzone zone = war.getPlayerWarzone(player.getName());
- boolean isZoneMaker = war.isZoneMaker(player.getName());
+ Warzone zone = war.getPlayerTeamWarzone(player.getName());
+ boolean isZoneMaker = war.isZoneMaker(player);
if(team != null && block != null && zone != null
&& zone.isMonumentCenterBlock(block)
&& block.getType() == team.getMaterial()) {
@@ -75,7 +75,7 @@ public class WarBlockListener extends BlockListener {
if(player != null && block != null && event.getDamageLevel() == BlockDamageLevel.BROKEN) {
Warzone warzone = war.warzone(player.getLocation());
Team team = war.getPlayerTeam(player.getName());
- boolean isZoneMaker = war.isZoneMaker(player.getName());
+ boolean isZoneMaker = war.isZoneMaker(player);
if(warzone != null && war.getPlayerTeam(player.getName()) == null && !isZoneMaker) {
// can't actually destroy blocks in a warzone if not part of a team
diff --git a/war/src/main/java/bukkit/tommytony/war/WarEntityListener.java b/war/src/main/java/bukkit/tommytony/war/WarEntityListener.java
index 93a9383..0b0462f 100644
--- a/war/src/main/java/bukkit/tommytony/war/WarEntityListener.java
+++ b/war/src/main/java/bukkit/tommytony/war/WarEntityListener.java
@@ -35,65 +35,20 @@ public class WarEntityListener extends EntityListener {
if(defender instanceof Player) {
Player d = (Player)defender;
- synchronized(defender) {
- if(event.getDamage() >= d.getHealth()) {
- // Player died
- Warzone defenderWarzone = war.getPlayerWarzone(d.getName());
- Team defenderTeam = war.getPlayerTeam(d.getName());
- if(defenderTeam != null) {
-
- handleDeath(d, defenderWarzone, defenderTeam);
- event.setCancelled(true); // Don't let the killing blow fall down.
- }
+ if(event.getDamage() >= d.getHealth()) {
+ // Player died
+ Warzone defenderWarzone = war.getPlayerTeamWarzone(d.getName());
+ Team defenderTeam = war.getPlayerTeam(d.getName());
+ if(defenderTeam != null) {
+
+ handleDeath(d, defenderWarzone, defenderTeam);
+ event.setCancelled(true); // Don't let the killing blow fall down.
}
}
}
}
-// public void onEntityDamaged(EntityDamagedEvent event) {
-// Entity damaged = event.getEntity();
-// DamageCause cause = event.getCause();
-// if(damaged != null && damaged instanceof Player){
-// Player player = (Player)damaged;
-// int damage = event.getDamage();
-// int currentPlayerHp = player.getHealth();
-// if(damage >= currentPlayerHp) {
-// Warzone zone = war.warzone(player.getLocation());
-// if(war.getPlayerTeam(player.getName()) != null) {
-// // player on a team killed himself
-// handleDeath(((Player)damaged));
-//
-// } else if (zone != null ) {
-// player.teleportTo(zone.getTeleport());
-// }
-// event.setCancelled(true); // Don't totally kill the player
-// }
-// }
-// }
-//
-// public void onEntityDamagedByBlock(EntityDamagedByBlockEvent event) {
-// Entity damaged = event.getEntity();
-//
-// if(damaged != null && damaged instanceof Player){
-// Player player = (Player)damaged;
-// int damage = event.getDamage();
-// int currentPlayerHp = player.getHealth();
-// if(damage >= currentPlayerHp) {
-// Warzone zone = war.warzone(player.getLocation());
-// if(war.getPlayerTeam(player.getName()) != null) {
-// // player on a team killed himself
-// handleDeath(((Player)damaged));
-//
-// } else if (zone != null ) {
-// player.teleportTo(zone.getTeleport());
-// }
-// event.setCancelled(true); // Don't let the block totally kill the player
-// }
-// }
-//
-// }
-
public void onEntityDamageByEntity(EntityDamageByEntityEvent event) {
Entity attacker = event.getDamager();
Entity defender = event.getEntity();
@@ -102,16 +57,16 @@ public class WarEntityListener extends EntityListener {
// only let adversaries (same warzone, different team) attack each other
Player a = (Player)attacker;
Player d = (Player)defender;
- Warzone attackerWarzone = war.getPlayerWarzone(a.getName());
+ Warzone attackerWarzone = war.getPlayerTeamWarzone(a.getName());
Team attackerTeam = war.getPlayerTeam(a.getName());
- Warzone defenderWarzone = war.getPlayerWarzone(d.getName());
+ Warzone defenderWarzone = war.getPlayerTeamWarzone(d.getName());
Team defenderTeam = war.getPlayerTeam(d.getName());
if(attackerTeam != null && defenderTeam != null
&& attackerTeam != defenderTeam
&& attackerWarzone == defenderWarzone) {
// A real attack: handle death scenario. ==> now handled in entity damage as well
- synchronized(d) {
- if(event.getDamage() >= d.getHealth()) {
+ //synchronized(d) {
+ if(d.getHealth() <= 0) {
// // Player died, loot him!
// PlayerInventory attackerInv = a.getInventory();
// PlayerInventory defenderInv = d.getInventory();
@@ -132,7 +87,7 @@ public class WarEntityListener extends EntityListener {
handleDeath(d, defenderWarzone, defenderTeam);
event.setCancelled(true);
}
- }
+ //}
} else if (attackerTeam != null && defenderTeam != null
&& attackerTeam == defenderTeam
&& attackerWarzone == defenderWarzone) {
diff --git a/war/src/main/java/bukkit/tommytony/war/WarPlayerListener.java b/war/src/main/java/bukkit/tommytony/war/WarPlayerListener.java
index 8dbfcfe..19eeb5f 100644
--- a/war/src/main/java/bukkit/tommytony/war/WarPlayerListener.java
+++ b/war/src/main/java/bukkit/tommytony/war/WarPlayerListener.java
@@ -39,7 +39,7 @@ public class WarPlayerListener extends PlayerListener {
Player player = event.getPlayer();
Team team = war.getPlayerTeam(player.getName());
if(team != null) {
- Warzone zone = war.getPlayerWarzone(player.getName());
+ Warzone zone = war.getPlayerTeamWarzone(player.getName());
if(zone != null && zone.hasPlayerInventory(player.getName())) {
player.teleportTo(zone.getTeleport());
zone.restorePlayerInventory(player);
@@ -59,186 +59,230 @@ public class WarPlayerListener extends PlayerListener {
public void onPlayerMove(PlayerMoveEvent event) {
Player player = event.getPlayer();
- synchronized(player) {
- Location to = event.getTo();
-
- // Zone walls
- if(to != null && !war.isZoneMaker(player.getName())) { // zone makers don't get bothered with guard walls
- Warzone nearbyZone = war.zoneOfZoneWallAtProximity(to);
- if(nearbyZone != null) {
- nearbyZone.protectZoneWallAgainstPlayer(player);
- } else {
- // make sure to delete any wall guards as you leave
- for(Warzone zone : war.getWarzones()) {
- zone.dropZoneWallGuardIfAny(player);
- }
+ Location from = event.getFrom();
+ Warzone locZone = null;
+ ZoneLobby locLobby = null;
+ if(from != null) {
+ locZone = war.warzone(from);
+ locLobby = war.lobby(from);
+ }
+// synchronized(player) {
+ Location to = event.getTo();
+ boolean canPlay = war.canPlayWar(player);
+ boolean isMaker = war.isZoneMaker(player);
+
+ // Zone walls
+ if(!isMaker && to != null) { // zone makers don't get bothered with guard walls
+ Warzone nearbyZone = war.zoneOfZoneWallAtProximity(to);
+ if(nearbyZone != null) {
+ nearbyZone.protectZoneWallAgainstPlayer(player);
+ } else {
+ // make sure to delete any wall guards as you leave
+ for(Warzone zone : war.getWarzones()) {
+ zone.dropZoneWallGuardIfAny(player);
}
}
-
- Warzone playerWarzone = war.getPlayerWarzone(player.getName()); // this uses the teams, so it asks: get the player's team's warzone, to be clearer
-
- boolean enteredGate = false;
- if(to != null) {
- // Warzone lobby gates
- for(Warzone zone : war.getWarzones()){
- if(zone.getLobby() != null) {
- Team oldTeam = war.getPlayerTeam(player.getName());
- if(oldTeam == null) { // trying to counter spammy player move
- if(zone.getLobby().isAutoAssignGate(to)) {
- enteredGate = true;
- dropFromOldTeamIfAny(player);
- int noOfPlayers = 0;
- for(Team t : zone.getTeams()) {
- noOfPlayers += t.getPlayers().size();
- }
- if(noOfPlayers < zone.getTeams().size() * zone.getTeamCap()) {
- //zone.autoAssign(event, player);
- zone.autoAssign(player);
- event.setCancelled(true);
- } else {
- //event.setTo(zone.getTeleport());
- player.teleportTo(zone.getTeleport());
- event.setCancelled(true);
- player.sendMessage("All teams are full.");
- }
- } else if (zone.getLobby().isInTeamGate(TeamMaterials.TEAMDIAMOND, to)){
- enteredGate = true;
- dropFromOldTeamIfAny(player);
- Team diamondTeam = zone.getTeamByMaterial(TeamMaterials.TEAMDIAMOND);
- if(diamondTeam.getPlayers().size() < zone.getTeamCap()) {
- diamondTeam.addPlayer(player);
- diamondTeam.resetSign();
- zone.keepPlayerInventory(player);
- player.sendMessage(war.str("Your inventory is is storage until you /leave."));
- //zone.respawnPlayer(event, diamondTeam, player);
- zone.respawnPlayer(diamondTeam, player);
- event.setCancelled(true);
- for(Team team : zone.getTeams()){
- team.teamcast(war.str("" + player.getName() + " joined team diamond."));
- }
- } else {
- //event.setTo(zone.getTeleport());
- player.teleportTo(zone.getTeleport());
- event.setCancelled(true);
- player.sendMessage("Team diamond is full.");
- }
- } else if (zone.getLobby().isInTeamGate(TeamMaterials.TEAMIRON, to)){
- enteredGate = true;
- dropFromOldTeamIfAny(player);
- Team ironTeam = zone.getTeamByMaterial(TeamMaterials.TEAMIRON);
- if(ironTeam.getPlayers().size() < zone.getTeamCap()) {
- ironTeam.addPlayer(player);
- ironTeam.resetSign();
- zone.keepPlayerInventory(player);
- player.sendMessage(war.str("Your inventory is is storage until you /leave."));
- //zone.respawnPlayer(event, ironTeam, player);
- zone.respawnPlayer(ironTeam, player);
- event.setCancelled(true);
- for(Team team : zone.getTeams()){
- team.teamcast(war.str("" + player.getName() + " joined team iron."));
- }
- } else {
- //event.setTo(zone.getTeleport());
- player.teleportTo(zone.getTeleport());
- event.setCancelled(true);
- player.sendMessage("Team iron is full.");
- }
- } else if (zone.getLobby().isInTeamGate(TeamMaterials.TEAMGOLD, to)){
- enteredGate = true;
- dropFromOldTeamIfAny(player);
- Team goldTeam = zone.getTeamByMaterial(TeamMaterials.TEAMGOLD);
- if(goldTeam.getPlayers().size() < zone.getTeamCap()) {
- goldTeam.addPlayer(player);
- goldTeam.resetSign();
- zone.keepPlayerInventory(player);
- player.sendMessage(war.str("Your inventory is is storage until you /leave."));
- //zone.respawnPlayer(event, goldTeam, player);
- zone.respawnPlayer(goldTeam, player);
- event.setCancelled(true);
- for(Team team : zone.getTeams()){
- team.teamcast(war.str("" + player.getName() + " joined team gold."));
- }
- } else {
- //event.setTo(zone.getTeleport());
- player.teleportTo(zone.getTeleport());
- event.setCancelled(true);
- player.sendMessage("Team gold is full.");
- }
- } else if (zone.getLobby().isInWarHubLinkGate(to)){
- enteredGate = true;
- dropFromOldTeamIfAny(player);
- //event.setTo(war.getWarHub().getLocation());
- player.teleportTo(war.getWarHub().getLocation());
- event.setCancelled(true);
- player.sendMessage(war.str("Welcome to the War hub."));
- }
- } else if(zone.getLobby().isLeavingZone(to)) { // already in a team and in warzone, leaving
- enteredGate = true;
- // same as leave, except event.setTo
- Team playerTeam = war.getPlayerTeam(player.getName());
- playerTeam.removePlayer(player.getName());
- playerTeam.resetSign();
- //event.setTo(playerWarzone.getTeleport());
- player.teleportTo(zone.getTeleport());
- event.setCancelled(true);
- playerWarzone.restorePlayerInventory(player);
- if(playerWarzone.getLobby() != null) {
- playerWarzone.getLobby().resetTeamGateSign(playerTeam);
- }
- player.sendMessage(war.str("Left the zone. Your inventory has (hopefully) been restored."));
- if(war.getWarHub() != null) {
- war.getWarHub().resetZoneSign(zone);
- }
- }
+ }
+
+ Warzone playerWarzone = war.getPlayerTeamWarzone(player.getName());
+ // this uses the teams, so it asks: get the player's team's warzone, to be clearer
+
+ boolean enteredGate = false;
+ // Warzone lobby gates
+ if(locLobby != null && to != null) {
+ Warzone zone = locLobby.getZone();
+ Team oldTeam = war.getPlayerTeam(player.getName());
+ boolean isAutoAssignGate = false;
+ boolean isDiamondGate = false;
+ boolean isIronGate = false;
+ boolean isGoldGate = false;
+ if(oldTeam == null && canPlay) { // trying to counter spammy player move
+ isAutoAssignGate = zone.getLobby().isAutoAssignGate(to);
+ if(isAutoAssignGate) {
+ enteredGate = true;
+ dropFromOldTeamIfAny(player);
+ int noOfPlayers = 0;
+ for(Team t : zone.getTeams()) {
+ noOfPlayers += t.getPlayers().size();
}
+ if(noOfPlayers < zone.getTeams().size() * zone.getTeamCap()) {
+ zone.autoAssign(event, player);
+ //zone.autoAssign(player);
+ //event.setCancelled(true);
+ } else {
+ event.setTo(zone.getTeleport());
+ //player.teleportTo(zone.getTeleport());
+ //event.setCancelled(true);
+ player.sendMessage("All teams are full.");
+ }
+ return;
+ }
+
+ isDiamondGate = zone.getLobby().isInTeamGate(TeamMaterials.TEAMDIAMOND, to);
+ if (isDiamondGate){
+ enteredGate = true;
+ dropFromOldTeamIfAny(player);
+ Team diamondTeam = zone.getTeamByMaterial(TeamMaterials.TEAMDIAMOND);
+ if(diamondTeam.getPlayers().size() < zone.getTeamCap()) {
+ diamondTeam.addPlayer(player);
+ diamondTeam.resetSign();
+ zone.keepPlayerInventory(player);
+ player.sendMessage(war.str("Your inventory is is storage until you /leave."));
+ zone.respawnPlayer(event, diamondTeam, player);
+ //zone.respawnPlayer(diamondTeam, player);
+ //event.setCancelled(true);
+ for(Team team : zone.getTeams()){
+ team.teamcast(war.str("" + player.getName() + " joined team diamond."));
+ }
+ } else {
+ event.setTo(zone.getTeleport());
+ //player.teleportTo(zone.getTeleport());
+ //event.setCancelled(true);
+ player.sendMessage("Team diamond is full.");
+ }
+ return;
}
- // Warhub zone gates
- WarHub hub = war.getWarHub();
- if(hub != null) {
- Warzone zone = hub.getDestinationWarzoneForLocation(to);
- synchronized(player) {
- if(zone != null) {
- enteredGate = true;
- event.setTo(zone.getTeleport());
+ isIronGate = zone.getLobby().isInTeamGate(TeamMaterials.TEAMIRON, to);
+ if (isIronGate){
+ enteredGate = true;
+ dropFromOldTeamIfAny(player);
+ Team ironTeam = zone.getTeamByMaterial(TeamMaterials.TEAMIRON);
+ if(ironTeam.getPlayers().size() < zone.getTeamCap()) {
+ ironTeam.addPlayer(player);
+ ironTeam.resetSign();
+ zone.keepPlayerInventory(player);
+ player.sendMessage(war.str("Your inventory is is storage until you /leave."));
+ zone.respawnPlayer(event, ironTeam, player);
+// zone.respawnPlayer(ironTeam, player);
+// event.setCancelled(true);
+ for(Team team : zone.getTeams()){
+ team.teamcast(war.str("" + player.getName() + " joined team iron."));
+ }
+ } else {
+ event.setTo(zone.getTeleport());
+// player.teleportTo(zone.getTeleport());
+// event.setCancelled(true);
+ player.sendMessage("Team iron is full.");
+ }
+ return;
+ }
+
+ isGoldGate = zone.getLobby().isInTeamGate(TeamMaterials.TEAMGOLD, to);
+ if (isGoldGate){
+ enteredGate = true;
+ dropFromOldTeamIfAny(player);
+ Team goldTeam = zone.getTeamByMaterial(TeamMaterials.TEAMGOLD);
+ if(goldTeam.getPlayers().size() < zone.getTeamCap()) {
+ goldTeam.addPlayer(player);
+ goldTeam.resetSign();
+ zone.keepPlayerInventory(player);
+ player.sendMessage(war.str("Your inventory is is storage until you /leave."));
+ zone.respawnPlayer(event, goldTeam, player);
+ //zone.respawnPlayer(goldTeam, player);
+ //event.setCancelled(true);
+ for(Team team : zone.getTeams()){
+ team.teamcast(war.str("" + player.getName() + " joined team gold."));
+ }
+ } else {
+ event.setTo(zone.getTeleport());
+// player.teleportTo(zone.getTeleport());
+// event.setCancelled(true);
+ player.sendMessage("Team gold is full.");
+ }
+ return;
+ }
+
+ if (zone.getLobby().isInWarHubLinkGate(to)){
+ enteredGate = true;
+ dropFromOldTeamIfAny(player);
+ event.setTo(war.getWarHub().getLocation());
+// player.teleportTo(war.getWarHub().getLocation());
+// event.setCancelled(true);
+ player.sendMessage(war.str("Welcome to the War hub."));
+ return;
+ }
+ } else if ((isAutoAssignGate || isDiamondGate || isGoldGate || isIronGate) &&
+ !canPlay) {
+ event.setTo(zone.getTeleport());
+// player.teleportTo(zone.getTeleport());
+// event.setCancelled(true);
+ player.sendMessage(war.str("You don't have permission to play War. Ask a mod, please."));
+ return;
+ }
+
+ }
+
+ // Warhub zone gates
+ WarHub hub = war.getWarHub();
+ if(hub != null && from != null && to != null && hub.getVolume().contains(from)) {
+ Warzone zone = hub.getDestinationWarzoneForLocation(to);
+ //synchronized(player) {
+ if(zone != null) {
+ enteredGate = true;
+ event.setTo(zone.getTeleport());
// player.teleportTo(zone.getTeleport());
//
// event.setCancelled(true);
- player.sendMessage(war.str("Welcome to warzone " + zone.getName() + "."));
- }
- }
+ player.sendMessage(war.str("Welcome to warzone " + zone.getName() + "."));
+ return;
}
-
- if(playerWarzone != null && !enteredGate) {
- Team team = war.getPlayerTeam(player.getName());
-
- // Player belongs to a warzone team but is outside: he snuck out!.
- if(war.warzone(to) == null && team != null) {
- //player.sendMessage(war.str("Teleporting you back to spawn. Please /leave your team if you want to exit the zone."));
- //event.setTo(team.getTeamSpawn());
- playerWarzone.respawnPlayer(team, player);
- //player.teleportTo(team.getTeamSpawn());
- event.setCancelled(true);
- }
+ //}
+ }
- // Monuments
- if(to != null && team != null
- && playerWarzone.nearAnyOwnedMonument(to, team)
- && 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!"));
- }
- } else if (!enteredGate && war.inAnyWarzone(to) && !war.warzone(to).getLobby().isLeavingZone(to) && !war.isZoneMaker(player.getName())) { // player is not in any team, but inside warzone boundaries, get him out
- Warzone zone = war.warzone(to);
- //event.setTo(zone.getTeleport());
- player.teleportTo(zone.getTeleport());
- event.setCancelled(true);
- //player.sendMessage(war.str("You can't be inside a warzone without a team."));
+ if(locZone != null && to != null && locZone.getLobby() != null
+ && locZone.getLobby().isLeavingZone(to)) { // already in a team and in warzone, leaving
+ enteredGate = true;
+ // same as leave, except event.setTo
+ Team playerTeam = war.getPlayerTeam(player.getName());
+ if(playerTeam != null) {
+ playerTeam.removePlayer(player.getName());
+ playerTeam.resetSign();
+ event.setTo(playerWarzone.getTeleport());
+ // player.teleportTo(zone.getTeleport());
+ // event.setCancelled(true);
+ playerWarzone.restorePlayerInventory(player);
+ if(playerWarzone.getLobby() != null) {
+ playerWarzone.getLobby().resetTeamGateSign(playerTeam);
}
-
+ player.sendMessage(war.str("Left the zone. Your inventory has (hopefully) been restored."));
+ if(war.getWarHub() != null) {
+ war.getWarHub().resetZoneSign(locZone);
+ }
+ return;
}
}
+
+ if(playerWarzone != null && !enteredGate) {
+ Team team = war.getPlayerTeam(player.getName());
+
+ // Player belongs to a warzone team but is outside: he snuck out!.
+ if(locZone == null && team != null) {
+ //player.sendMessage(war.str("Teleporting you back to spawn. Please /leave your team if you want to exit the zone."));
+ event.setTo(team.getTeamSpawn());
+ //playerWarzone.respawnPlayer(team, player);
+ //player.teleportTo(team.getTeamSpawn());
+ //event.setCancelled(true);
+ }
+
+ // Monuments
+ if(to != null && team != null
+ && playerWarzone.nearAnyOwnedMonument(to, team)
+ && 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!"));
+ }
+ } else if (locZone != null && locZone.getLobby() != null
+ && locZone.getLobby().isLeavingZone(to) && !isMaker) {
+ // player is not in any team, but inside warzone boundaries, get him out
+ Warzone zone = war.warzone(to);
+ event.setTo(zone.getTeleport());
+// player.teleportTo(zone.getTeleport());
+// event.setCancelled(true);
+ //player.sendMessage(war.str("You can't be inside a warzone without a team."));
+ }
+
}
private void dropFromOldTeamIfAny(Player player) {
diff --git a/war/src/main/java/com/tommytony/war/mappers/VolumeMapper.java b/war/src/main/java/com/tommytony/war/mappers/VolumeMapper.java
index 448139f..09ea1ce 100644
--- a/war/src/main/java/com/tommytony/war/mappers/VolumeMapper.java
+++ b/war/src/main/java/com/tommytony/war/mappers/VolumeMapper.java
@@ -40,8 +40,9 @@ 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/dat/volume-" + volume.getName() + ".dat"))); // for the warhub
- else in = new BufferedReader(new FileReader(new File("War/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("")) {
int x1 = Integer.parseInt(in.readLine());
@@ -109,8 +110,9 @@ public class VolumeMapper {
if(volume.isSaved() && volume.getBlockTypes() != null) {
BufferedWriter out = null;
try {
- if(zoneName.equals("")) out = new BufferedWriter(new FileWriter(new File("War/dat/volume-" + volume.getName() + ".dat")));
- else out = new BufferedWriter(new FileWriter(new File("War/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();
diff --git a/war/src/main/java/com/tommytony/war/mappers/WarMapper.java b/war/src/main/java/com/tommytony/war/mappers/WarMapper.java
index 2829f54..41b7b69 100644
--- a/war/src/main/java/com/tommytony/war/mappers/WarMapper.java
+++ b/war/src/main/java/com/tommytony/war/mappers/WarMapper.java
@@ -22,9 +22,9 @@ public class WarMapper {
public static void load(War war, World world) {
//war.getLogger().info("Loading war config...");
- (new File("War")).mkdir();
- (new File("War/dat")).mkdir();
- PropertiesFile warConfig = new PropertiesFile(war.getName() + "/war.txt");
+ (war.getDataFolder()).mkdir();
+ (new File(war.getDataFolder().getPath() + "/dat")).mkdir();
+ PropertiesFile warConfig = new PropertiesFile(war.getDataFolder().getPath() + "/war.txt");
try {
warConfig.load();
} catch (IOException e) {
@@ -138,7 +138,7 @@ public class WarMapper {
public static void save(War war) {
//war.getLogger().info("Saving war config...");
- PropertiesFile warConfig = new PropertiesFile(war.getName() + "/war.txt");
+ PropertiesFile warConfig = new PropertiesFile(war.getDataFolder().getPath() + "/war.txt");
String warzonesStr = "";
// warzones
diff --git a/war/src/main/java/com/tommytony/war/mappers/WarzoneMapper.java b/war/src/main/java/com/tommytony/war/mappers/WarzoneMapper.java
index 0f722a4..975ae96 100644
--- a/war/src/main/java/com/tommytony/war/mappers/WarzoneMapper.java
+++ b/war/src/main/java/com/tommytony/war/mappers/WarzoneMapper.java
@@ -29,7 +29,7 @@ public class WarzoneMapper {
public static Warzone load(War war, String name, boolean loadBlocks) {
//war.getLogger().info("Loading warzone " + name + " config and blocks...");
- PropertiesFile warzoneConfig = new PropertiesFile(war.getName() + "/warzone-" + name + ".txt");
+ PropertiesFile warzoneConfig = new PropertiesFile(war.getDataFolder().getPath() + "/warzone-" + name + ".txt");
try {
warzoneConfig.load();
} catch (IOException e) {
@@ -208,8 +208,8 @@ public class WarzoneMapper {
}
public static void save(War war, Warzone warzone, boolean saveAllBlocks) {
- (new File(war.getName()+"/dat/warzone-"+warzone.getName())).mkdir();
- PropertiesFile warzoneConfig = new PropertiesFile(war.getName() + "/warzone-" + warzone.getName() + ".txt");
+ (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
@@ -332,7 +332,7 @@ public class WarzoneMapper {
}
public static void delete(War war, String name) {
- File zoneFolder = new File(war.getName() + "/dat/warzone-" + name);
+ File zoneFolder = new File(war.getDataFolder().getPath() + "/dat/warzone-" + name);
File[] files = zoneFolder.listFiles();
for(File file : files) {
boolean deletedData = file.delete();
@@ -344,7 +344,7 @@ public class WarzoneMapper {
if(!deletedData) {
war.warn("Failed to delete folder " + zoneFolder.getName());
}
- File zoneFile = new File(war.getName() + "/warzone-" + name + ".txt");
+ File zoneFile = new File(war.getDataFolder().getPath() + "/warzone-" + name + ".txt");
deletedData = zoneFile.delete();
if(!deletedData) {
war.warn("Failed to delete file " + zoneFile.getName());