mirror of
https://github.com/taoneill/war.git
synced 2024-11-27 20:59:39 +01:00
Closes gh-42. No more unfinished warzones at the warhub. Warzone files don't get deleted though.
This commit is contained in:
parent
6b3d55f563
commit
03b987ee37
@ -63,6 +63,7 @@ public class War extends JavaPlugin {
|
|||||||
private PluginDescriptionFile desc = null;
|
private PluginDescriptionFile desc = null;
|
||||||
|
|
||||||
private final List<Warzone> warzones = new ArrayList<Warzone>();
|
private final List<Warzone> warzones = new ArrayList<Warzone>();
|
||||||
|
private final List<Warzone> incompleteZones = new ArrayList<Warzone>();
|
||||||
private final List<String> zoneMakerNames = new ArrayList<String>();
|
private final List<String> zoneMakerNames = new ArrayList<String>();
|
||||||
private final List<String> zoneMakersImpersonatingPlayers = new ArrayList<String>();
|
private final List<String> zoneMakersImpersonatingPlayers = new ArrayList<String>();
|
||||||
private final HashMap<Integer, ItemStack> defaultLoadout = new HashMap<Integer, ItemStack>();
|
private final HashMap<Integer, ItemStack> defaultLoadout = new HashMap<Integer, ItemStack>();
|
||||||
@ -705,8 +706,8 @@ public class War extends JavaPlugin {
|
|||||||
if(warzone == null) {
|
if(warzone == null) {
|
||||||
// create the warzone
|
// create the warzone
|
||||||
warzone = new Warzone(this, player.getLocation().getWorld(), arguments[0]);
|
warzone = new Warzone(this, player.getLocation().getWorld(), arguments[0]);
|
||||||
this.addWarzone(warzone);
|
this.getIncompleteZones().add(warzone);
|
||||||
WarMapper.save(this);
|
//WarMapper.save(this);
|
||||||
if(arguments[1].equals("northwest") || arguments[1].equals("nw")) {
|
if(arguments[1].equals("northwest") || arguments[1].equals("nw")) {
|
||||||
warzone.setNorthwest(player.getLocation());
|
warzone.setNorthwest(player.getLocation());
|
||||||
this.msg(player, "Warzone " + warzone.getName() + " created. Northwesternmost point set to x:"
|
this.msg(player, "Warzone " + warzone.getName() + " created. Northwesternmost point set to x:"
|
||||||
@ -716,7 +717,7 @@ public class War extends JavaPlugin {
|
|||||||
this.msg(player, "Warzone " + warzone.getName() + " created. Southeasternmost point set to x:"
|
this.msg(player, "Warzone " + warzone.getName() + " created. Southeasternmost point set to x:"
|
||||||
+ (int)warzone.getSoutheast().getBlockX() + " z:" + (int)warzone.getSoutheast().getBlockZ() + ".");
|
+ (int)warzone.getSoutheast().getBlockX() + " z:" + (int)warzone.getSoutheast().getBlockZ() + ".");
|
||||||
}
|
}
|
||||||
WarzoneMapper.save(this, warzone, false);
|
//WarzoneMapper.save(this, warzone, false);
|
||||||
} else {
|
} else {
|
||||||
// change existing warzone
|
// change existing warzone
|
||||||
if(arguments[1].equals("northwest") || arguments[1].equals("nw")) {
|
if(arguments[1].equals("northwest") || arguments[1].equals("nw")) {
|
||||||
@ -737,6 +738,10 @@ public class War extends JavaPlugin {
|
|||||||
int reset = warzone.getVolume().resetBlocks();
|
int reset = warzone.getVolume().resetBlocks();
|
||||||
|
|
||||||
msgString = reset + " blocks reset. ";
|
msgString = reset + " blocks reset. ";
|
||||||
|
} else {
|
||||||
|
this.addWarzone(warzone);
|
||||||
|
this.incompleteZones.remove(warzone);
|
||||||
|
WarMapper.save(this);
|
||||||
}
|
}
|
||||||
warzone.setNorthwest(player.getLocation());
|
warzone.setNorthwest(player.getLocation());
|
||||||
if(warzone.tooSmall()) {
|
if(warzone.tooSmall()) {
|
||||||
@ -748,6 +753,7 @@ public class War extends JavaPlugin {
|
|||||||
msgString += "New zone outline ok. Northwesternmost point of zone " + warzone.getName() + " set to x:" + (int)warzone.getNorthwest().getBlockX()
|
msgString += "New zone outline ok. Northwesternmost point of zone " + warzone.getName() + " set to x:" + (int)warzone.getNorthwest().getBlockX()
|
||||||
+ " z:" + (int)warzone.getNorthwest().getBlockZ()+ ". Saving new warzone blocks...";
|
+ " z:" + (int)warzone.getNorthwest().getBlockZ()+ ". Saving new warzone blocks...";
|
||||||
msg(player, msgString);
|
msg(player, msgString);
|
||||||
|
WarzoneMapper.save(this, warzone, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if(arguments[1].equals("southeast") || arguments[1].equals("se")) {
|
} else if(arguments[1].equals("southeast") || arguments[1].equals("se")) {
|
||||||
@ -768,6 +774,10 @@ public class War extends JavaPlugin {
|
|||||||
int reset = warzone.getVolume().resetBlocks();
|
int reset = warzone.getVolume().resetBlocks();
|
||||||
|
|
||||||
msgString = reset + " blocks reset. ";
|
msgString = reset + " blocks reset. ";
|
||||||
|
} else {
|
||||||
|
this.addWarzone(warzone);
|
||||||
|
this.incompleteZones.remove(warzone);
|
||||||
|
WarMapper.save(this);
|
||||||
}
|
}
|
||||||
warzone.setSoutheast(player.getLocation());
|
warzone.setSoutheast(player.getLocation());
|
||||||
if(warzone.tooSmall()) {
|
if(warzone.tooSmall()) {
|
||||||
@ -779,6 +789,7 @@ public class War extends JavaPlugin {
|
|||||||
msgString += "New zone outline ok. Southeasternmost point of zone " + warzone.getName() + " set to x:" + (int)warzone.getSoutheast().getBlockX()
|
msgString += "New zone outline ok. Southeasternmost point of zone " + warzone.getName() + " set to x:" + (int)warzone.getSoutheast().getBlockX()
|
||||||
+ " z:" + (int)warzone.getSoutheast().getBlockZ()+ ". Saving new warzone blocks...";
|
+ " z:" + (int)warzone.getSoutheast().getBlockZ()+ ". Saving new warzone blocks...";
|
||||||
msg(player, msgString);
|
msg(player, msgString);
|
||||||
|
WarzoneMapper.save(this, warzone, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1201,6 +1212,11 @@ public class War extends JavaPlugin {
|
|||||||
return warzone;
|
return warzone;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
for(Warzone warzone : incompleteZones) {
|
||||||
|
if(warzone.getName().equals(warzoneName)) {
|
||||||
|
return warzone;
|
||||||
|
}
|
||||||
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1412,4 +1428,8 @@ public class War extends JavaPlugin {
|
|||||||
return defaultReward;
|
return defaultReward;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<Warzone> getIncompleteZones() {
|
||||||
|
return incompleteZones;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -41,7 +41,7 @@ public class WarEntityListener extends EntityListener {
|
|||||||
Team team = war.getPlayerTeam(player.getName());
|
Team team = war.getPlayerTeam(player.getName());
|
||||||
if(team != null) {
|
if(team != null) {
|
||||||
Warzone zone = war.getPlayerTeamWarzone(player.getName());
|
Warzone zone = war.getPlayerTeamWarzone(player.getName());
|
||||||
handleDeath(player, zone, team);
|
zone.handleDeath(player);
|
||||||
// if(zone.isDropLootOnDeath()) {
|
// if(zone.isDropLootOnDeath()) {
|
||||||
// war.getServer().getScheduler().scheduleAsyncDelayedTask(war,
|
// war.getServer().getScheduler().scheduleAsyncDelayedTask(war,
|
||||||
// new LootDropperTask(player.getLocation(), event.getDrops()),
|
// new LootDropperTask(player.getLocation(), event.getDrops()),
|
||||||
@ -52,25 +52,6 @@ public class WarEntityListener extends EntityListener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// public void onEntityDamage(EntityDamageEvent event) {
|
|
||||||
//// Entity defender = event.getEntity();
|
|
||||||
////
|
|
||||||
//// if(defender instanceof Player) {
|
|
||||||
//// Player d = (Player)defender;
|
|
||||||
//// 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 onEntityDamageByEntity(EntityDamageByEntityEvent event) {
|
public void onEntityDamageByEntity(EntityDamageByEntityEvent event) {
|
||||||
handlerAttackDefend(event);
|
handlerAttackDefend(event);
|
||||||
}
|
}
|
||||||
@ -190,98 +171,6 @@ public class WarEntityListener extends EntityListener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleDeath(Player player, Warzone playerWarzone, Team playerTeam) {
|
|
||||||
// teleport to team spawn upon death
|
|
||||||
war.msg(player, "You died.");
|
|
||||||
boolean newBattle = false;
|
|
||||||
boolean scoreCapReached = false;
|
|
||||||
//synchronized(playerWarzone) {
|
|
||||||
//synchronized(player) {
|
|
||||||
int remaining = playerTeam.getRemainingLifes();
|
|
||||||
if(remaining == 0) { // your death caused your team to lose
|
|
||||||
List<Team> teams = playerWarzone.getTeams();
|
|
||||||
String scorers = "";
|
|
||||||
for(Team t : teams) {
|
|
||||||
t.teamcast("The battle is over. Team " + playerTeam.getName() + " lost: "
|
|
||||||
+ player.getName() + " died and there were no lives left in their life pool.");
|
|
||||||
|
|
||||||
if(!t.getName().equals(playerTeam.getName())) {
|
|
||||||
// all other teams get a point
|
|
||||||
t.addPoint();
|
|
||||||
t.resetSign();
|
|
||||||
scorers += "Team " + t.getName() + " scores one point. ";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(!scorers.equals("")){
|
|
||||||
for(Team t : teams) {
|
|
||||||
t.teamcast(scorers);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// detect score cap
|
|
||||||
List<Team> scoreCapTeams = new ArrayList<Team>();
|
|
||||||
for(Team t : teams) {
|
|
||||||
if(t.getPoints() == playerWarzone.getScoreCap()) {
|
|
||||||
scoreCapTeams.add(t);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(!scoreCapTeams.isEmpty()) {
|
|
||||||
String winnersStr = "";
|
|
||||||
for(Team winner : scoreCapTeams) {
|
|
||||||
winnersStr += winner.getName() + " ";
|
|
||||||
}
|
|
||||||
if(playerWarzone.hasPlayerInventory(player.getName())){
|
|
||||||
playerWarzone.restorePlayerInventory(player);
|
|
||||||
}
|
|
||||||
|
|
||||||
playerWarzone.handleScoreCapReached(player, winnersStr);
|
|
||||||
player.teleportTo(playerWarzone.getTeleport());
|
|
||||||
// player will die because it took too long :(
|
|
||||||
// we dont restore his inventory in handleScoreCapReached
|
|
||||||
// check out PLAYER_MOVE for the rest of the fix
|
|
||||||
|
|
||||||
scoreCapReached = true;
|
|
||||||
} else {
|
|
||||||
// A new battle starts. Reset the zone but not the teams.
|
|
||||||
for(Team t : teams) {
|
|
||||||
t.teamcast("A new battle begins. Warzone reset.");
|
|
||||||
}
|
|
||||||
playerWarzone.getVolume().resetBlocks();
|
|
||||||
playerWarzone.initializeZone();
|
|
||||||
newBattle = true;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// player died without causing his team's demise
|
|
||||||
if(playerWarzone.isFlagThief(player.getName())) {
|
|
||||||
// died while carrying flag.. dropped it
|
|
||||||
Team victim = playerWarzone.getVictimTeamForThief(player.getName());
|
|
||||||
victim.getFlagVolume().resetBlocks();
|
|
||||||
victim.initializeTeamFlag();
|
|
||||||
playerWarzone.removeThief(player.getName());
|
|
||||||
for(Team t : playerWarzone.getTeams()) {
|
|
||||||
t.teamcast(player.getName() + " died and dropped team " + victim.getName() + "'s flag.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
playerTeam.setRemainingLives(remaining - 1);
|
|
||||||
if(remaining - 1 == 0) {
|
|
||||||
for(Team t : playerWarzone.getTeams()) {
|
|
||||||
t.teamcast("Team " + playerTeam.getName() + "'s life pool is empty. One more death and they lose the battle!");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//}
|
|
||||||
//}
|
|
||||||
//synchronized(player) {
|
|
||||||
if(!newBattle && !scoreCapReached) {
|
|
||||||
playerTeam.resetSign();
|
|
||||||
playerWarzone.respawnPlayer(playerTeam, player);
|
|
||||||
}
|
|
||||||
// war.info(player.getName() + " died and enemy team reached score cap");
|
|
||||||
// } else if (newBattle){
|
|
||||||
// war.info(player.getName() + " died and battle ended in team " + playerTeam.getName() + "'s disfavor");
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onEntityDamage(EntityDamageEvent event) {
|
public void onEntityDamage(EntityDamageEvent event) {
|
||||||
if(event.getCause() == DamageCause.FIRE_TICK) {
|
if(event.getCause() == DamageCause.FIRE_TICK) {
|
||||||
Entity entity = event.getEntity();
|
Entity entity = event.getEntity();
|
||||||
@ -333,119 +222,4 @@ public class WarEntityListener extends EntityListener {
|
|||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// private void handleDeath(Player player, Warzone playerWarzone, Team playerTeam) {
|
|
||||||
// // teleport to team spawn upon death
|
|
||||||
// player.sendMessage(war.str("You died."));
|
|
||||||
// boolean newBattle = false;
|
|
||||||
// boolean scoreCapReached = false;
|
|
||||||
// synchronized(playerWarzone) {
|
|
||||||
// synchronized(player) {
|
|
||||||
// int remaining = playerTeam.getRemainingTickets();
|
|
||||||
// if(remaining == 0) { // your death caused your team to lose
|
|
||||||
// List<Team> teams = playerWarzone.getTeams();
|
|
||||||
// for(Team t : teams) {
|
|
||||||
// t.teamcast(war.str("The battle is over. Team " + playerTeam.getName() + " lost: "
|
|
||||||
// + player.getName() + " died and there were no lives left in their life pool." ));
|
|
||||||
//
|
|
||||||
// if(!t.getName().equals(playerTeam.getName())) {
|
|
||||||
// // all other teams get a point
|
|
||||||
// t.addPoint();
|
|
||||||
// t.resetSign();
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// // detect score cap
|
|
||||||
// List<Team> scoreCapTeams = new ArrayList<Team>();
|
|
||||||
// for(Team t : teams) {
|
|
||||||
// if(t.getPoints() == playerWarzone.getScoreCap()) {
|
|
||||||
// scoreCapTeams.add(t);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// if(!scoreCapTeams.isEmpty()) {
|
|
||||||
// String winnersStr = "Score cap reached! Winning team(s): ";
|
|
||||||
// for(Team winner : scoreCapTeams) {
|
|
||||||
// winnersStr += winner.getName() + " ";
|
|
||||||
// }
|
|
||||||
// winnersStr += ". The warzone is being reset... Please choose a new team.";
|
|
||||||
// // Score cap reached. Reset everything.
|
|
||||||
// for(Team t : teams) {
|
|
||||||
// t.teamcast(war.str(winnersStr));
|
|
||||||
// for(Player tp : t.getPlayers()) {
|
|
||||||
// if(tp.getName() != player.getName()) {
|
|
||||||
// tp.teleportTo(playerWarzone.getTeleport());
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// t.setPoints(0);
|
|
||||||
// t.getPlayers().clear(); // empty the team
|
|
||||||
// }
|
|
||||||
// playerWarzone.getVolume().resetBlocks();
|
|
||||||
// playerWarzone.initializeZone();
|
|
||||||
// scoreCapReached = true;
|
|
||||||
// } else {
|
|
||||||
// // We can keep going
|
|
||||||
// for(Team t : teams) {
|
|
||||||
// t.teamcast(war.str("A new battle begins. The warzone is being reset..."));
|
|
||||||
// }
|
|
||||||
// playerWarzone.getVolume().resetBlocks();
|
|
||||||
// playerWarzone.initializeZone();
|
|
||||||
// newBattle = true;
|
|
||||||
// playerTeam.setRemainingTickets(playerTeam.getRemainingTickets()); // TODO get rid of this dirty workaround for the twice move-on-death bug
|
|
||||||
// }
|
|
||||||
// } else {
|
|
||||||
// playerTeam.setRemainingTickets(remaining - 1);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// synchronized(player) {
|
|
||||||
// if(!newBattle && !scoreCapReached) {
|
|
||||||
// playerWarzone.respawnPlayer(playerTeam, player);
|
|
||||||
// playerTeam.resetSign();
|
|
||||||
// war.info(player.getName() + " died and was tp'd back to team " + playerTeam.getName() + "'s spawn");
|
|
||||||
// } else if (scoreCapReached) {
|
|
||||||
// player.teleportTo(playerWarzone.getTeleport());
|
|
||||||
// playerTeam.resetSign();
|
|
||||||
// war.info(player.getName() + " died and enemy team reached score cap");
|
|
||||||
// } else if (newBattle){
|
|
||||||
// war.info(player.getName() + " died and battle ended in team " + playerTeam.getName() + "'s disfavor");
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// old
|
|
||||||
// Team team = war.getPlayerTeam(player.getName());
|
|
||||||
// if(team != null){
|
|
||||||
// // teleport to team spawn upon death
|
|
||||||
// Warzone zone = war.warzone(player.getLocation());
|
|
||||||
// boolean roundOver = false;
|
|
||||||
// synchronized(zone) {
|
|
||||||
// int remaining = team.getRemainingTickets();
|
|
||||||
// if(remaining == 0) { // your death caused your team to lose
|
|
||||||
// List<Team> teams = zone.getTeams();
|
|
||||||
// for(Team t : teams) {
|
|
||||||
// t.teamcast(war.str("The battle is over. Team " + team.getName() + " lost: "
|
|
||||||
// + player.getName() + " hit the bottom of their life pool." ));
|
|
||||||
// t.teamcast(war.str("A new battle begins. The warzone is being reset..."));
|
|
||||||
// if(!t.getName().equals(team.getName())) {
|
|
||||||
// // all other teams get a point
|
|
||||||
// t.addPoint();
|
|
||||||
// t.resetSign();
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// zone.endRound();
|
|
||||||
// zone.getVolume().resetBlocks();
|
|
||||||
// zone.initializeZone();
|
|
||||||
// roundOver = true;
|
|
||||||
// } else {
|
|
||||||
// team.setRemainingTickets(remaining - 1);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// if(!roundOver) {
|
|
||||||
// zone.respawnPlayer(team, player);
|
|
||||||
// player.sendMessage(war.str("You died!"));
|
|
||||||
// team.resetSign();
|
|
||||||
// war.getLogger().log(Level.INFO, player.getName() + " died and was tp'd back to team " + team.getName() + "'s spawn");
|
|
||||||
// } else {
|
|
||||||
// war.getLogger().log(Level.INFO, player.getName() + " died and battle ended in team " + team.getName() + "'s disfavor");
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
}
|
}
|
||||||
|
@ -133,12 +133,12 @@ public class WarPlayerListener extends PlayerListener {
|
|||||||
noOfPlayers += t.getPlayers().size();
|
noOfPlayers += t.getPlayers().size();
|
||||||
}
|
}
|
||||||
if(noOfPlayers < zone.getTeams().size() * zone.getTeamCap()) {
|
if(noOfPlayers < zone.getTeams().size() * zone.getTeamCap()) {
|
||||||
zone.autoAssign(event, player);
|
Team team = zone.autoAssign(player);
|
||||||
|
event.setFrom(team.getTeamSpawn());
|
||||||
|
event.setCancelled(true);
|
||||||
if(war.getWarHub() != null) {
|
if(war.getWarHub() != null) {
|
||||||
war.getWarHub().resetZoneSign(zone);
|
war.getWarHub().resetZoneSign(zone);
|
||||||
}
|
}
|
||||||
//zone.autoAssign(player);
|
|
||||||
//event.setCancelled(true);
|
|
||||||
} else {
|
} else {
|
||||||
event.setFrom(zone.getTeleport());
|
event.setFrom(zone.getTeleport());
|
||||||
player.teleportTo(zone.getTeleport());
|
player.teleportTo(zone.getTeleport());
|
||||||
@ -283,11 +283,10 @@ public class WarPlayerListener extends PlayerListener {
|
|||||||
Team team = war.getPlayerTeam(player.getName());
|
Team team = war.getPlayerTeam(player.getName());
|
||||||
|
|
||||||
// Player belongs to a warzone team but is outside: he snuck out or is at spawn and died
|
// Player belongs to a warzone team but is outside: he snuck out or is at spawn and died
|
||||||
if(locZone == null && team != null) {
|
if(locZone == null && team != null) {;
|
||||||
handleDeath(event, player, playerWarzone, team);
|
|
||||||
war.badMsg(player, "You can't sneak out of a zone while in a team. Use /leave or walk out the lobby to exit the zone, please.");
|
war.badMsg(player, "You can't sneak out of a zone while in a team. Use /leave or walk out the lobby to exit the zone, please.");
|
||||||
event.setFrom(team.getTeamSpawn());
|
event.setFrom(team.getTeamSpawn());
|
||||||
//playerWarzone.respawnPlayer(team, player);
|
playerWarzone.handleDeath(player);
|
||||||
player.teleportTo(team.getTeamSpawn());
|
player.teleportTo(team.getTeamSpawn());
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
@ -398,95 +397,95 @@ public class WarPlayerListener extends PlayerListener {
|
|||||||
return teamsMessage;
|
return teamsMessage;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleDeath(PlayerMoveEvent event, Player player, Warzone playerWarzone, Team playerTeam) {
|
// private void handleDeath(PlayerMoveEvent event, Player player, Warzone playerWarzone, Team playerTeam) {
|
||||||
// teleport to team spawn upon death
|
// // teleport to team spawn upon death
|
||||||
war.msg(player, "You died.");
|
// war.msg(player, "You died.");
|
||||||
boolean newBattle = false;
|
// boolean newBattle = false;
|
||||||
boolean scoreCapReached = false;
|
// boolean scoreCapReached = false;
|
||||||
//synchronized(playerWarzone) {
|
// //synchronized(playerWarzone) {
|
||||||
//synchronized(player) {
|
// //synchronized(player) {
|
||||||
int remaining = playerTeam.getRemainingLifes();
|
// int remaining = playerTeam.getRemainingLifes();
|
||||||
if(remaining == 0) { // your death caused your team to lose
|
// if(remaining == 0) { // your death caused your team to lose
|
||||||
List<Team> teams = playerWarzone.getTeams();
|
// List<Team> teams = playerWarzone.getTeams();
|
||||||
String scorers = "";
|
// String scorers = "";
|
||||||
for(Team t : teams) {
|
// for(Team t : teams) {
|
||||||
t.teamcast("The battle is over. Team " + playerTeam.getName() + " lost: "
|
// t.teamcast("The battle is over. Team " + playerTeam.getName() + " lost: "
|
||||||
+ player.getName() + " died and there were no lives left in their life pool." );
|
// + player.getName() + " died and there were no lives left in their life pool." );
|
||||||
|
|
||||||
if(!t.getName().equals(playerTeam.getName())) {
|
|
||||||
// all other teams get a point
|
|
||||||
t.addPoint();
|
|
||||||
t.resetSign();
|
|
||||||
scorers += "Team " + t.getName() + " scores one point. ";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(!scorers.equals("")){
|
|
||||||
for(Team t : teams) {
|
|
||||||
t.teamcast(scorers);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// detect score cap
|
|
||||||
List<Team> scoreCapTeams = new ArrayList<Team>();
|
|
||||||
for(Team t : teams) {
|
|
||||||
if(t.getPoints() == playerWarzone.getScoreCap()) {
|
|
||||||
scoreCapTeams.add(t);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(!scoreCapTeams.isEmpty()) {
|
|
||||||
String winnersStr = "";
|
|
||||||
for(Team winner : scoreCapTeams) {
|
|
||||||
winnersStr += winner.getName() + " ";
|
|
||||||
}
|
|
||||||
if(playerWarzone.hasPlayerInventory(player.getName())){
|
|
||||||
playerWarzone.restorePlayerInventory(player);
|
|
||||||
}
|
|
||||||
|
|
||||||
playerWarzone.handleScoreCapReached(player, winnersStr);
|
|
||||||
event.setFrom(playerWarzone.getTeleport());
|
|
||||||
player.teleportTo(playerWarzone.getTeleport());
|
|
||||||
event.setCancelled(true);
|
|
||||||
scoreCapReached = true;
|
|
||||||
} else {
|
|
||||||
// A new battle starts. Reset the zone but not the teams.
|
|
||||||
for(Team t : teams) {
|
|
||||||
t.teamcast("A new battle begins. The warzone is being reset...");
|
|
||||||
}
|
|
||||||
playerWarzone.getVolume().resetBlocks();
|
|
||||||
playerWarzone.initializeZone(event);
|
|
||||||
newBattle = true;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// player died without causing his team's demise
|
|
||||||
if(playerWarzone.isFlagThief(player.getName())) {
|
|
||||||
// died while carrying flag.. dropped it
|
|
||||||
Team victim = playerWarzone.getVictimTeamForThief(player.getName());
|
|
||||||
victim.getFlagVolume().resetBlocks();
|
|
||||||
victim.initializeTeamFlag();
|
|
||||||
playerWarzone.removeThief(player.getName());
|
|
||||||
for(Team t : playerWarzone.getTeams()) {
|
|
||||||
t.teamcast(player.getName() + " died and dropped team " + victim.getName() + "'s flag.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
playerTeam.setRemainingLives(remaining - 1);
|
|
||||||
if(remaining - 1 == 0) {
|
|
||||||
for(Team t : playerWarzone.getTeams()) {
|
|
||||||
t.teamcast("Team " + t.getName() + "'s life pool is empty. One more death and they lose the battle!");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//}
|
|
||||||
//}
|
|
||||||
//synchronized(player) {
|
|
||||||
if(!newBattle && !scoreCapReached) {
|
|
||||||
playerTeam.resetSign();
|
|
||||||
playerWarzone.respawnPlayer(event, playerTeam, player);
|
|
||||||
}
|
|
||||||
// else if (scoreCapReached) {
|
|
||||||
//
|
//
|
||||||
// war.info(player.getName() + " died and enemy team reached score cap");
|
// if(!t.getName().equals(playerTeam.getName())) {
|
||||||
// } else if (newBattle){
|
// // all other teams get a point
|
||||||
// war.info(player.getName() + " died and battle ended in team " + playerTeam.getName() + "'s disfavor");
|
// t.addPoint();
|
||||||
|
// t.resetSign();
|
||||||
|
// scorers += "Team " + t.getName() + " scores one point. ";
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// if(!scorers.equals("")){
|
||||||
|
// for(Team t : teams) {
|
||||||
|
// t.teamcast(scorers);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// // detect score cap
|
||||||
|
// List<Team> scoreCapTeams = new ArrayList<Team>();
|
||||||
|
// for(Team t : teams) {
|
||||||
|
// if(t.getPoints() == playerWarzone.getScoreCap()) {
|
||||||
|
// scoreCapTeams.add(t);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// if(!scoreCapTeams.isEmpty()) {
|
||||||
|
// String winnersStr = "";
|
||||||
|
// for(Team winner : scoreCapTeams) {
|
||||||
|
// winnersStr += winner.getName() + " ";
|
||||||
|
// }
|
||||||
|
// if(playerWarzone.hasPlayerInventory(player.getName())){
|
||||||
|
// playerWarzone.restorePlayerInventory(player);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// playerWarzone.handleScoreCapReached(player, winnersStr);
|
||||||
|
// event.setFrom(playerWarzone.getTeleport());
|
||||||
|
// player.teleportTo(playerWarzone.getTeleport());
|
||||||
|
// event.setCancelled(true);
|
||||||
|
// scoreCapReached = true;
|
||||||
|
// } else {
|
||||||
|
// // A new battle starts. Reset the zone but not the teams.
|
||||||
|
// for(Team t : teams) {
|
||||||
|
// t.teamcast("A new battle begins. The warzone is being reset...");
|
||||||
|
// }
|
||||||
|
// playerWarzone.getVolume().resetBlocks();
|
||||||
|
// playerWarzone.initializeZone(event);
|
||||||
|
// newBattle = true;
|
||||||
|
// }
|
||||||
|
// } else {
|
||||||
|
// // player died without causing his team's demise
|
||||||
|
// if(playerWarzone.isFlagThief(player.getName())) {
|
||||||
|
// // died while carrying flag.. dropped it
|
||||||
|
// Team victim = playerWarzone.getVictimTeamForThief(player.getName());
|
||||||
|
// victim.getFlagVolume().resetBlocks();
|
||||||
|
// victim.initializeTeamFlag();
|
||||||
|
// playerWarzone.removeThief(player.getName());
|
||||||
|
// for(Team t : playerWarzone.getTeams()) {
|
||||||
|
// t.teamcast(player.getName() + " died and dropped team " + victim.getName() + "'s flag.");
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// playerTeam.setRemainingLives(remaining - 1);
|
||||||
|
// if(remaining - 1 == 0) {
|
||||||
|
// for(Team t : playerWarzone.getTeams()) {
|
||||||
|
// t.teamcast("Team " + t.getName() + "'s life pool is empty. One more death and they lose the battle!");
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// //}
|
||||||
|
// //}
|
||||||
|
// //synchronized(player) {
|
||||||
|
// if(!newBattle && !scoreCapReached) {
|
||||||
|
// playerTeam.resetSign();
|
||||||
|
// playerWarzone.respawnPlayer(event, playerTeam, player);
|
||||||
|
// }
|
||||||
|
//// else if (scoreCapReached) {
|
||||||
|
////
|
||||||
|
//// war.info(player.getName() + " died and enemy team reached score cap");
|
||||||
|
//// } else if (newBattle){
|
||||||
|
//// war.info(player.getName() + " died and battle ended in team " + playerTeam.getName() + "'s disfavor");
|
||||||
|
//// }
|
||||||
|
// //}
|
||||||
// }
|
// }
|
||||||
//}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -240,26 +240,26 @@ public class Warzone {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void initializeZone(PlayerMoveEvent event) {
|
// public void initializeZone(PlayerMoveEvent event) {
|
||||||
if(ready() && volume.isSaved()){
|
// if(ready() && volume.isSaved()){
|
||||||
// everyone back to team spawn with full health
|
// // everyone back to team spawn with full health
|
||||||
for(Team team : teams) {
|
// for(Team team : teams) {
|
||||||
for(Player p : team.getPlayers()) {
|
// for(Player p : team.getPlayers()) {
|
||||||
if(p.getName().equals(event.getPlayer().getName())) {
|
// if(p.getName().equals(event.getPlayer().getName())) {
|
||||||
respawnPlayer(event, team, event.getPlayer());
|
// respawnPlayer(event, team, event.getPlayer());
|
||||||
} else {
|
// } else {
|
||||||
respawnPlayer(team, p);
|
// respawnPlayer(team, p);
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
team.setRemainingLives(lifePool);
|
// team.setRemainingLives(lifePool);
|
||||||
team.setTeamSpawn(team.getTeamSpawn());
|
// team.setTeamSpawn(team.getTeamSpawn());
|
||||||
if(team.getTeamFlag() != null) team.setTeamFlag(team.getTeamFlag());
|
// if(team.getTeamFlag() != null) team.setTeamFlag(team.getTeamFlag());
|
||||||
team.resetSign();
|
// team.resetSign();
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
initZone();
|
// initZone();
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
private void initZone() {
|
private void initZone() {
|
||||||
// add wall outlines
|
// add wall outlines
|
||||||
@ -783,29 +783,29 @@ public class Warzone {
|
|||||||
return lobby;
|
return lobby;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void autoAssign(PlayerMoveEvent event, Player player) {
|
// public void autoAssign(PlayerMoveEvent event, Player player) {
|
||||||
Team lowestNoOfPlayers = null;
|
// Team lowestNoOfPlayers = null;
|
||||||
for(Team t : teams) {
|
// for(Team t : teams) {
|
||||||
if(lowestNoOfPlayers == null
|
// if(lowestNoOfPlayers == null
|
||||||
|| (lowestNoOfPlayers != null && lowestNoOfPlayers.getPlayers().size() > t.getPlayers().size())) {
|
// || (lowestNoOfPlayers != null && lowestNoOfPlayers.getPlayers().size() > t.getPlayers().size())) {
|
||||||
lowestNoOfPlayers = t;
|
// lowestNoOfPlayers = t;
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
if(lowestNoOfPlayers != null) {
|
// if(lowestNoOfPlayers != null) {
|
||||||
lowestNoOfPlayers.addPlayer(player);
|
// lowestNoOfPlayers.addPlayer(player);
|
||||||
lowestNoOfPlayers.resetSign();
|
// lowestNoOfPlayers.resetSign();
|
||||||
if(!hasPlayerInventory(player.getName())) {
|
// if(!hasPlayerInventory(player.getName())) {
|
||||||
keepPlayerInventory(player);
|
// keepPlayerInventory(player);
|
||||||
}
|
// }
|
||||||
war.msg(player, "Your inventory is is storage until you /leave.");
|
// war.msg(player, "Your inventory is is storage until you /leave.");
|
||||||
respawnPlayer(event, lowestNoOfPlayers, player);
|
// respawnPlayer(event, lowestNoOfPlayers, player);
|
||||||
for(Team team : teams){
|
// for(Team team : teams){
|
||||||
team.teamcast("" + player.getName() + " joined team " + lowestNoOfPlayers.getName() + ".");
|
// team.teamcast("" + player.getName() + " joined team " + lowestNoOfPlayers.getName() + ".");
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
public void autoAssign(Player player) {
|
public Team autoAssign(Player player) {
|
||||||
Team lowestNoOfPlayers = null;
|
Team lowestNoOfPlayers = null;
|
||||||
for(Team t : teams) {
|
for(Team t : teams) {
|
||||||
if(lowestNoOfPlayers == null
|
if(lowestNoOfPlayers == null
|
||||||
@ -825,6 +825,7 @@ public class Warzone {
|
|||||||
team.teamcast("" + player.getName() + " joined team " + team.getName() + ".");
|
team.teamcast("" + player.getName() + " joined team " + team.getName() + ".");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return lowestNoOfPlayers;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setTeamCap(int teamCap) {
|
public void setTeamCap(int teamCap) {
|
||||||
@ -859,6 +860,102 @@ public class Warzone {
|
|||||||
return drawZoneOutline;
|
return drawZoneOutline;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void handleDeath(Player player) {
|
||||||
|
Team playerTeam = war.getPlayerTeam(player.getName());
|
||||||
|
Warzone playerWarzone = war.getPlayerTeamWarzone(player.getName());
|
||||||
|
if(playerTeam != null && playerWarzone != null) {
|
||||||
|
// teleport to team spawn upon death
|
||||||
|
war.msg(player, "You died.");
|
||||||
|
boolean newBattle = false;
|
||||||
|
boolean scoreCapReached = false;
|
||||||
|
//synchronized(playerWarzone) {
|
||||||
|
//synchronized(player) {
|
||||||
|
int remaining = playerTeam.getRemainingLifes();
|
||||||
|
if(remaining == 0) { // your death caused your team to lose
|
||||||
|
List<Team> teams = playerWarzone.getTeams();
|
||||||
|
String scorers = "";
|
||||||
|
for(Team t : teams) {
|
||||||
|
t.teamcast("The battle is over. Team " + playerTeam.getName() + " lost: "
|
||||||
|
+ player.getName() + " died and there were no lives left in their life pool.");
|
||||||
|
|
||||||
|
if(!t.getName().equals(playerTeam.getName())) {
|
||||||
|
// all other teams get a point
|
||||||
|
t.addPoint();
|
||||||
|
t.resetSign();
|
||||||
|
scorers += "Team " + t.getName() + " scores one point. ";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!scorers.equals("")){
|
||||||
|
for(Team t : teams) {
|
||||||
|
t.teamcast(scorers);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// detect score cap
|
||||||
|
List<Team> scoreCapTeams = new ArrayList<Team>();
|
||||||
|
for(Team t : teams) {
|
||||||
|
if(t.getPoints() == playerWarzone.getScoreCap()) {
|
||||||
|
scoreCapTeams.add(t);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!scoreCapTeams.isEmpty()) {
|
||||||
|
String winnersStr = "";
|
||||||
|
for(Team winner : scoreCapTeams) {
|
||||||
|
winnersStr += winner.getName() + " ";
|
||||||
|
}
|
||||||
|
if(playerWarzone.hasPlayerInventory(player.getName())){
|
||||||
|
playerWarzone.restorePlayerInventory(player);
|
||||||
|
}
|
||||||
|
|
||||||
|
playerWarzone.handleScoreCapReached(player, winnersStr);
|
||||||
|
player.teleportTo(playerWarzone.getTeleport());
|
||||||
|
// player will die because it took too long :(
|
||||||
|
// we dont restore his inventory in handleScoreCapReached
|
||||||
|
// check out PLAYER_MOVE for the rest of the fix
|
||||||
|
|
||||||
|
scoreCapReached = true;
|
||||||
|
} else {
|
||||||
|
// A new battle starts. Reset the zone but not the teams.
|
||||||
|
for(Team t : teams) {
|
||||||
|
t.teamcast("A new battle begins. Warzone reset.");
|
||||||
|
}
|
||||||
|
playerWarzone.getVolume().resetBlocks();
|
||||||
|
playerWarzone.initializeZone();
|
||||||
|
newBattle = true;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// player died without causing his team's demise
|
||||||
|
if(playerWarzone.isFlagThief(player.getName())) {
|
||||||
|
// died while carrying flag.. dropped it
|
||||||
|
Team victim = playerWarzone.getVictimTeamForThief(player.getName());
|
||||||
|
victim.getFlagVolume().resetBlocks();
|
||||||
|
victim.initializeTeamFlag();
|
||||||
|
playerWarzone.removeThief(player.getName());
|
||||||
|
for(Team t : playerWarzone.getTeams()) {
|
||||||
|
t.teamcast(player.getName() + " died and dropped team " + victim.getName() + "'s flag.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
playerTeam.setRemainingLives(remaining - 1);
|
||||||
|
if(remaining - 1 == 0) {
|
||||||
|
for(Team t : playerWarzone.getTeams()) {
|
||||||
|
t.teamcast("Team " + playerTeam.getName() + "'s life pool is empty. One more death and they lose the battle!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//}
|
||||||
|
//}
|
||||||
|
//synchronized(player) {
|
||||||
|
if(!newBattle && !scoreCapReached) {
|
||||||
|
playerTeam.resetSign();
|
||||||
|
playerWarzone.respawnPlayer(playerTeam, player);
|
||||||
|
}
|
||||||
|
// war.info(player.getName() + " died and enemy team reached score cap");
|
||||||
|
// } else if (newBattle){
|
||||||
|
// war.info(player.getName() + " died and battle ended in team " + playerTeam.getName() + "'s disfavor");
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void handlePlayerLeave(Player player, Location destination) {
|
public void handlePlayerLeave(Player player, Location destination) {
|
||||||
Team playerTeam = war.getPlayerTeam(player.getName());
|
Team playerTeam = war.getPlayerTeam(player.getName());
|
||||||
if(playerTeam !=null) {
|
if(playerTeam !=null) {
|
||||||
|
@ -42,6 +42,7 @@ public class ZoneLobby {
|
|||||||
public ZoneLobby(War war, Warzone warzone, BlockFace wall) {
|
public ZoneLobby(War war, Warzone warzone, BlockFace wall) {
|
||||||
this.war = war;
|
this.war = war;
|
||||||
this.warzone = warzone;
|
this.warzone = warzone;
|
||||||
|
//this.changeWall(wall, false);
|
||||||
this.changeWall(wall);
|
this.changeWall(wall);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -68,6 +69,10 @@ public class ZoneLobby {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void changeWall(BlockFace newWall) {
|
public void changeWall(BlockFace newWall) {
|
||||||
|
// changeWall(newWall, true);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// public void changeWall(BlockFace newWall, boolean save) {
|
||||||
if(volume == null) {
|
if(volume == null) {
|
||||||
// no previous wall
|
// no previous wall
|
||||||
this.volume = new Volume("lobby", war, warzone.getWorld());
|
this.volume = new Volume("lobby", war, warzone.getWorld());
|
||||||
@ -128,7 +133,7 @@ public class ZoneLobby {
|
|||||||
corner2 = warzone.getWorld().getBlockAt(wallCenterPos - lobbyHalfSide, highestNonAirBlockAtCenter + 1 + lobbyHeight, z + lobbyDepth);
|
corner2 = warzone.getWorld().getBlockAt(wallCenterPos - lobbyHalfSide, highestNonAirBlockAtCenter + 1 + lobbyHeight, z + lobbyDepth);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(corner1 != null && corner2 != null) {
|
if(corner1 != null && corner2 != null/* && save*/) {
|
||||||
// save the blocks, wide enough for three team gates, 3+1 high and 10 deep, extruding out from the zone wall.
|
// save the blocks, wide enough for three team gates, 3+1 high and 10 deep, extruding out from the zone wall.
|
||||||
this.volume.setCornerOne(corner1);
|
this.volume.setCornerOne(corner1);
|
||||||
this.volume.setCornerTwo(corner2);
|
this.volume.setCornerTwo(corner2);
|
||||||
@ -141,7 +146,7 @@ public class ZoneLobby {
|
|||||||
// maybe the number of teams change, now reset the gate positions
|
// maybe the number of teams change, now reset the gate positions
|
||||||
setGatePositions(lobbyMiddleWallBlock);
|
setGatePositions(lobbyMiddleWallBlock);
|
||||||
|
|
||||||
if(lobbyMiddleWallBlock != null && volume != null && volume.isSaved()) {
|
if(lobbyMiddleWallBlock != null && volume != null /*&& volume.isSaved()*/) {
|
||||||
// flatten the area (set all but floor to air, then replace any floor air blocks with glass)
|
// flatten the area (set all but floor to air, then replace any floor air blocks with glass)
|
||||||
this.volume.clearBlocksThatDontFloat();
|
this.volume.clearBlocksThatDontFloat();
|
||||||
this.volume.setToMaterial(Material.AIR);
|
this.volume.setToMaterial(Material.AIR);
|
||||||
|
@ -154,7 +154,7 @@ public class VolumeMapper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void save(Volume volume, String zoneName, War war) {
|
public static void save(Volume volume, String zoneName, War war) {
|
||||||
if(volume.isSaved() && volume.getBlockTypes() != null) {
|
if(volume.hasTwoCorners()) {
|
||||||
BufferedWriter out = null;
|
BufferedWriter out = null;
|
||||||
try {
|
try {
|
||||||
if(zoneName.equals("")) out = new BufferedWriter(new FileWriter(new File(war.getDataFolder().getPath() + "/dat/volume-" + volume.getName() + ".dat")));
|
if(zoneName.equals("")) out = new BufferedWriter(new FileWriter(new File(war.getDataFolder().getPath() + "/dat/volume-" + volume.getName() + ".dat")));
|
||||||
|
Loading…
Reference in New Issue
Block a user