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());