Merge pull request #635 from cmastudios/multiworld-loadout-hotfix

Fix incompabilities with per-world inventories.
This commit is contained in:
taoneill 2013-05-20 15:24:23 -07:00
commit da14a8fc4d
4 changed files with 93 additions and 14 deletions

View File

@ -838,6 +838,9 @@ public class Warzone {
}
}
if (lowestNoOfPlayers != null) {
if (player.getWorld() != this.getWorld()) {
player.teleport(this.getWorld().getSpawnLocation());
}
lowestNoOfPlayers.addPlayer(player);
lowestNoOfPlayers.resetSign();
if (!this.hasPlayerState(player.getName())) {

View File

@ -87,6 +87,9 @@ public class JoinCommand extends AbstractWarCommand {
this.badMsg("You don't have permission to join this team.");
return true;
}
if (player.getWorld() != zone.getWorld()) {
player.teleport(zone.getWorld().getSpawnLocation());
}
if (!zone.hasPlayerState(player.getName())) {
zone.keepPlayerState(player);
this.msg("Your inventory is in storage until you use '/war leave'.");

View File

@ -9,6 +9,7 @@ import com.tommytony.war.Team;
import com.tommytony.war.War;
import com.tommytony.war.Warzone;
import com.tommytony.war.structure.ZoneLobby;
import java.util.Iterator;
public class ResetZoneCommand extends AbstractZoneMakerCommand {
@ -46,7 +47,9 @@ public class ResetZoneCommand extends AbstractZoneMakerCommand {
zone.clearThieves();
for (Team team : zone.getTeams()) {
team.teamcast("The war has ended. " + zone.getTeamInformation() + " Resetting warzone " + zone.getName() + " and teams...");
for (Player p : team.getPlayers()) {
for (Iterator<Player> it = team.getPlayers().iterator(); it.hasNext();) {
Player p = it.next();
it.remove();
zone.restorePlayerState(p);
p.teleport(zone.getTeleport());
War.war.msg(p, "You have left the warzone. Your inventory is being restored.");

View File

@ -45,6 +45,7 @@ import com.tommytony.war.utility.Loadout;
import com.tommytony.war.utility.LoadoutSelection;
import java.util.ArrayList;
import java.util.Iterator;
import org.bukkit.event.player.PlayerTeleportEvent;
/**
* @author tommytony, Tim Düsterhus
@ -335,6 +336,9 @@ public class WarPlayerListener implements Listener {
this.handleDisabledZone(event, player, zone);
} else if (team.getPlayers().size() < team.getTeamConfig().resolveInt(TeamConfig.TEAMSIZE)
&& War.war.canPlayWar(player, team)) {
if (player.getWorld() != zone.getWorld()) {
player.teleport(zone.getWorld().getSpawnLocation());
}
team.addPlayer(player);
team.resetSign();
if (War.war.getWarHub() != null) {
@ -484,6 +488,10 @@ public class WarPlayerListener implements Listener {
team.teamcast(player.getName() + " dropped the " + bomb.getName() + " bomb!");
}
return;
} else {
// Get player back to spawn
playerWarzone.respawnPlayer(event, playerTeam, player);
return;
}
}
@ -879,6 +887,68 @@ public class WarPlayerListener implements Listener {
}
}
@EventHandler
public void onPlayerTeleport(final PlayerTeleportEvent event) {
if (War.war.isLoaded()) {
Warzone playerWarzone = Warzone.getZoneByPlayerName(event.getPlayer().getName());
Team playerTeam = Team.getTeamByPlayerName(event.getPlayer().getName());
if (playerWarzone != null) {
if (!playerWarzone.getVolume().contains(event.getTo())) {
// Prevent teleporting out of the warzone
if (!playerWarzone.getWarzoneConfig().getBoolean(WarzoneConfig.REALDEATHS)) {
War.war.badMsg(event.getPlayer(), "Use /leave (or /war leave) to exit the zone.");
}
if (playerWarzone.isFlagThief(event.getPlayer().getName())) {
Team victimTeam = playerWarzone.getVictimTeamForFlagThief(event.getPlayer().getName());
// Get event.getPlayer() back to spawn
playerWarzone.respawnPlayer(event, playerTeam, event.getPlayer());
playerWarzone.removeFlagThief(event.getPlayer().getName());
// Bring back flag of victim team
victimTeam.getFlagVolume().resetBlocks();
victimTeam.initializeTeamFlag();
for (Team team : playerWarzone.getTeams()) {
team.teamcast(event.getPlayer().getName() + " dropped the " + victimTeam.getName() + " flag!");
}
} else if (playerWarzone.isCakeThief(event.getPlayer().getName())) {
Cake cake = playerWarzone.getCakeForThief(event.getPlayer().getName());
// Get event.getPlayer() back to spawn
playerWarzone.respawnPlayer(event, playerTeam, event.getPlayer());
playerWarzone.removeCakeThief(event.getPlayer().getName());
// Bring back cake
cake.getVolume().resetBlocks();
cake.addCakeBlocks();
for (Team team : playerWarzone.getTeams()) {
team.teamcast(event.getPlayer().getName() + " dropped the " + cake.getName() + " cake!");
}
} else if (playerWarzone.isBombThief(event.getPlayer().getName())) {
Bomb bomb = playerWarzone.getBombForThief(event.getPlayer().getName());
// Get event.getPlayer() back to spawn
playerWarzone.respawnPlayer(event, playerTeam, event.getPlayer());
playerWarzone.removeBombThief(event.getPlayer().getName());
// Bring back bomb
bomb.getVolume().resetBlocks();
bomb.addBombBlocks();
for (Team team : playerWarzone.getTeams()) {
team.teamcast(event.getPlayer().getName() + " dropped the " + bomb.getName() + " bomb!");
}
} else {
// Get event.getPlayer() back to spawn
playerWarzone.respawnPlayer(event, playerTeam, event.getPlayer());
}
}
}
}
}
public void purgeLatestPositions() {
this.latestLocations.clear();
}