mirror of
https://github.com/taoneill/war.git
synced 2024-12-04 08:03:26 +01:00
Subroutines for join/leave zone boilerplate & thief removal
Warzone now contains a few new methods to make adding and removing players from the zone easier. This was made in response to every join mechanism having to rewrite the same ~25 lines of code to handle adding players to a team. This was also done to replace the even more bulky code used to return stolen structures. This also removes a few unused jobs as I am trying to transition away from them, as they don't really help if they are not being used for async tasks, batches, or timers. A better way of managing teleports at the end of a game or when leaving normally has been added.
This commit is contained in:
parent
3791a027a0
commit
ceeea15794
@ -33,8 +33,6 @@ import com.tommytony.war.config.TeamConfig;
|
|||||||
import com.tommytony.war.config.TeamConfigBag;
|
import com.tommytony.war.config.TeamConfigBag;
|
||||||
import com.tommytony.war.config.TeamKind;
|
import com.tommytony.war.config.TeamKind;
|
||||||
import com.tommytony.war.config.TeamSpawnStyle;
|
import com.tommytony.war.config.TeamSpawnStyle;
|
||||||
import com.tommytony.war.structure.Bomb;
|
|
||||||
import com.tommytony.war.structure.Cake;
|
|
||||||
import com.tommytony.war.utility.Direction;
|
import com.tommytony.war.utility.Direction;
|
||||||
import com.tommytony.war.volume.Volume;
|
import com.tommytony.war.volume.Volume;
|
||||||
|
|
||||||
@ -446,46 +444,19 @@ public class Team {
|
|||||||
return this.name;
|
return this.name;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean removePlayer(String name) {
|
public void removePlayer(Player thePlayer) {
|
||||||
Player thePlayer = null;
|
this.players.remove(thePlayer);
|
||||||
for (Player player : this.players) {
|
this.warzone.dropAllStolenObjects(thePlayer, false);
|
||||||
if (player.getName().equals(name)) {
|
if (War.war.isTagServer()) {
|
||||||
thePlayer = player;
|
TagAPI.refreshPlayer(thePlayer);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (thePlayer != null) {
|
if (War.war.isSpoutServer()) {
|
||||||
this.players.remove(thePlayer);
|
War.war.getSpoutDisplayer().updateStats(thePlayer);
|
||||||
|
|
||||||
if (this.warzone.isFlagThief(thePlayer.getName())) {
|
|
||||||
Team victim = this.warzone.getVictimTeamForFlagThief(thePlayer.getName());
|
|
||||||
victim.getFlagVolume().resetBlocks();
|
|
||||||
victim.initializeTeamFlag();
|
|
||||||
this.warzone.removeFlagThief(thePlayer.getName());
|
|
||||||
this.warzone.broadcast("drop.flag.broadcast", thePlayer.getName(), ChatColor.GREEN + victim.getName() + ChatColor.WHITE);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.warzone.isBombThief(thePlayer.getName())) {
|
|
||||||
Bomb bomb = this.warzone.getBombForThief(thePlayer.getName());
|
|
||||||
bomb.getVolume().resetBlocks();
|
|
||||||
bomb.addBombBlocks();
|
|
||||||
this.warzone.removeBombThief(thePlayer.getName());
|
|
||||||
this.warzone.broadcast("drop.bomb.broadcast", thePlayer.getName(), ChatColor.GREEN + bomb.getName() + ChatColor.WHITE);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.warzone.isCakeThief(thePlayer.getName())) {
|
|
||||||
Cake cake = this.warzone.getCakeForThief(thePlayer.getName());
|
|
||||||
cake.getVolume().resetBlocks();
|
|
||||||
cake.addCakeBlocks();
|
|
||||||
this.warzone.removeCakeThief(thePlayer.getName());
|
|
||||||
this.warzone.broadcast("drop.cake.broadcast", thePlayer.getName(), ChatColor.GREEN + cake.getName() + ChatColor.WHITE);
|
|
||||||
}
|
|
||||||
if (War.war.isTagServer()) {
|
|
||||||
TagAPI.refreshPlayer(thePlayer);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
thePlayer.setFireTicks(0);
|
||||||
return false;
|
thePlayer.setRemainingAir(300);
|
||||||
|
this.warzone.restorePlayerState(thePlayer);
|
||||||
|
this.warzone.getLoadoutSelections().remove(thePlayer);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setRemainingLives(int remainingLives) {
|
public void setRemainingLives(int remainingLives) {
|
||||||
@ -536,10 +507,12 @@ public class Team {
|
|||||||
spawnEntry.getValue().resetBlocks();
|
spawnEntry.getValue().resetBlocks();
|
||||||
this.initializeTeamSpawn(spawnEntry.getKey()); // reset everything instead of just sign
|
this.initializeTeamSpawn(spawnEntry.getKey()); // reset everything instead of just sign
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.warzone.getLobby() != null) {
|
if (this.warzone.getLobby() != null) {
|
||||||
this.warzone.getLobby().resetTeamGateSign(this);
|
this.warzone.getLobby().resetTeamGateSign(this);
|
||||||
}
|
}
|
||||||
|
if (War.war.getWarHub() != null) {
|
||||||
|
War.war.getWarHub().resetZoneSign(warzone);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setSpawnVolume(Location spawnLocation, Volume volume) {
|
public void setSpawnVolume(Location spawnLocation, Volume volume) {
|
||||||
|
@ -2,9 +2,12 @@ package com.tommytony.war;
|
|||||||
|
|
||||||
import java.text.MessageFormat;
|
import java.text.MessageFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Comparator;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
@ -25,6 +28,7 @@ import org.bukkit.event.player.PlayerMoveEvent;
|
|||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.PlayerInventory;
|
import org.bukkit.inventory.PlayerInventory;
|
||||||
import org.bukkit.inventory.meta.LeatherArmorMeta;
|
import org.bukkit.inventory.meta.LeatherArmorMeta;
|
||||||
|
import org.bukkit.permissions.Permissible;
|
||||||
import org.bukkit.scoreboard.DisplaySlot;
|
import org.bukkit.scoreboard.DisplaySlot;
|
||||||
import org.bukkit.scoreboard.Objective;
|
import org.bukkit.scoreboard.Objective;
|
||||||
import org.bukkit.scoreboard.Scoreboard;
|
import org.bukkit.scoreboard.Scoreboard;
|
||||||
@ -47,7 +51,6 @@ import com.tommytony.war.job.InitZoneJob;
|
|||||||
import com.tommytony.war.job.LoadoutResetJob;
|
import com.tommytony.war.job.LoadoutResetJob;
|
||||||
import com.tommytony.war.job.LogKillsDeathsJob;
|
import com.tommytony.war.job.LogKillsDeathsJob;
|
||||||
import com.tommytony.war.job.LogKillsDeathsJob.KillsDeathsRecord;
|
import com.tommytony.war.job.LogKillsDeathsJob.KillsDeathsRecord;
|
||||||
import com.tommytony.war.job.ScoreCapReachedJob;
|
|
||||||
import com.tommytony.war.mapper.LoadoutYmlMapper;
|
import com.tommytony.war.mapper.LoadoutYmlMapper;
|
||||||
import com.tommytony.war.spout.SpoutDisplayer;
|
import com.tommytony.war.spout.SpoutDisplayer;
|
||||||
import com.tommytony.war.structure.Bomb;
|
import com.tommytony.war.structure.Bomb;
|
||||||
@ -71,6 +74,13 @@ import com.tommytony.war.volume.ZoneVolume;
|
|||||||
* @package com.tommytony.war
|
* @package com.tommytony.war
|
||||||
*/
|
*/
|
||||||
public class Warzone {
|
public class Warzone {
|
||||||
|
public enum LeaveCause {
|
||||||
|
COMMAND, DISCONNECT, SCORECAP, RESET;
|
||||||
|
public boolean useRallyPoint() {
|
||||||
|
return this == SCORECAP ? true : false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private String name;
|
private String name;
|
||||||
private ZoneVolume volume;
|
private ZoneVolume volume;
|
||||||
private World world;
|
private World world;
|
||||||
@ -474,7 +484,7 @@ public class Warzone {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void resetInventory(Team team, Player player, HashMap<Integer, ItemStack> loadout) {
|
public void resetInventory(Team team, Player player, Map<Integer, ItemStack> loadout) {
|
||||||
// Reset inventory to loadout
|
// Reset inventory to loadout
|
||||||
PlayerInventory playerInv = player.getInventory();
|
PlayerInventory playerInv = player.getInventory();
|
||||||
playerInv.clear();
|
playerInv.clear();
|
||||||
@ -502,14 +512,12 @@ public class Warzone {
|
|||||||
}
|
}
|
||||||
if (this.getWarzoneConfig().getBoolean(WarzoneConfig.BLOCKHEADS)) {
|
if (this.getWarzoneConfig().getBoolean(WarzoneConfig.BLOCKHEADS)) {
|
||||||
playerInv.setHelmet(team.getKind().getBlockHead());
|
playerInv.setHelmet(team.getKind().getBlockHead());
|
||||||
} else {
|
} else if (!helmetIsInLoadout) {
|
||||||
if (!helmetIsInLoadout) {
|
ItemStack helmet = new ItemStack(Material.LEATHER_HELMET);
|
||||||
ItemStack helmet = new ItemStack(Material.LEATHER_HELMET);
|
LeatherArmorMeta meta = (LeatherArmorMeta) helmet.getItemMeta();
|
||||||
LeatherArmorMeta meta = (LeatherArmorMeta) helmet.getItemMeta();
|
meta.setColor(team.getKind().getBukkitColor());
|
||||||
meta.setColor(team.getKind().getBukkitColor());
|
helmet.setItemMeta(meta);
|
||||||
helmet.setItemMeta(meta);
|
playerInv.setHelmet(helmet);
|
||||||
playerInv.setHelmet(helmet);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -885,31 +893,56 @@ public class Warzone {
|
|||||||
return this.lobby;
|
return this.lobby;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static final Comparator<Team> LEAST_PLAYER_COUNT_ORDER = new Comparator<Team>() {
|
||||||
|
@Override
|
||||||
|
public int compare(Team arg0, Team arg1) {
|
||||||
|
return arg0.getPlayers().size() - arg1.getPlayers().size();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
public Team autoAssign(Player player) {
|
public Team autoAssign(Player player) {
|
||||||
|
Collections.sort(teams, LEAST_PLAYER_COUNT_ORDER);
|
||||||
Team lowestNoOfPlayers = null;
|
Team lowestNoOfPlayers = null;
|
||||||
for (Team t : this.teams) {
|
for (Team team : this.teams) {
|
||||||
if (lowestNoOfPlayers == null || (lowestNoOfPlayers != null && lowestNoOfPlayers.getPlayers().size() > t.getPlayers().size())) {
|
if (War.war.canPlayWar(player, team)) {
|
||||||
if (War.war.canPlayWar(player, t)) {
|
lowestNoOfPlayers = team;
|
||||||
lowestNoOfPlayers = t;
|
break;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (lowestNoOfPlayers != null) {
|
if (lowestNoOfPlayers != null) {
|
||||||
if (player.getWorld() != this.getWorld()) {
|
this.assign(player, lowestNoOfPlayers);
|
||||||
player.teleport(this.getWorld().getSpawnLocation());
|
|
||||||
}
|
|
||||||
lowestNoOfPlayers.addPlayer(player);
|
|
||||||
lowestNoOfPlayers.resetSign();
|
|
||||||
if (!this.hasPlayerState(player.getName())) {
|
|
||||||
this.keepPlayerState(player);
|
|
||||||
}
|
|
||||||
War.war.msg(player, "join.inventorystored");
|
|
||||||
this.respawnPlayer(lowestNoOfPlayers, player);
|
|
||||||
this.broadcast("join.broadcast", player.getName(), lowestNoOfPlayers.getName());
|
|
||||||
}
|
}
|
||||||
return lowestNoOfPlayers;
|
return lowestNoOfPlayers;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Assign a player to a specific team.
|
||||||
|
*
|
||||||
|
* @param player
|
||||||
|
* Player to assign to team.
|
||||||
|
* @param team
|
||||||
|
* Team to add the player to.
|
||||||
|
* @return false if player does not have permission to join this team.
|
||||||
|
*/
|
||||||
|
public boolean assign(Player player, Team team) {
|
||||||
|
if (!War.war.canPlayWar(player, team)) {
|
||||||
|
War.war.badMsg(player, "join.permission.single");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (player.getWorld() != this.getWorld()) {
|
||||||
|
player.teleport(this.getWorld().getSpawnLocation());
|
||||||
|
}
|
||||||
|
team.addPlayer(player);
|
||||||
|
team.resetSign();
|
||||||
|
if (!this.hasPlayerState(player.getName())) {
|
||||||
|
this.keepPlayerState(player);
|
||||||
|
War.war.msg(player, "join.inventorystored");
|
||||||
|
}
|
||||||
|
this.respawnPlayer(team, player);
|
||||||
|
this.broadcast("join.broadcast", player.getName(), player.getName());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
public void handleDeath(Player player) {
|
public void handleDeath(Player player) {
|
||||||
// THIS ISN'T THREAD SAFE
|
// THIS ISN'T THREAD SAFE
|
||||||
// Every death and player movement should ideally occur in sequence because
|
// Every death and player movement should ideally occur in sequence because
|
||||||
@ -1104,55 +1137,22 @@ public class Warzone {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void handlePlayerLeave(Player player, Location destination, PlayerMoveEvent event, boolean removeFromTeam) {
|
public void handlePlayerLeave(Player player, Location destination, PlayerMoveEvent event, boolean removeFromTeam) {
|
||||||
this.handlePlayerLeave(player, removeFromTeam);
|
this.handlePlayerLeave(player);
|
||||||
event.setTo(destination);
|
event.setTo(destination);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void handlePlayerLeave(Player player, Location destination, boolean removeFromTeam) {
|
public void handlePlayerLeave(Player player, Location destination, boolean removeFromTeam) {
|
||||||
this.handlePlayerLeave(player, removeFromTeam);
|
this.handlePlayerLeave(player);
|
||||||
player.teleport(destination);
|
player.teleport(destination);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handlePlayerLeave(Player player, boolean removeFromTeam) {
|
private void handlePlayerLeave(Player player) {
|
||||||
Team playerTeam = Team.getTeamByPlayerName(player.getName());
|
Team playerTeam = Team.getTeamByPlayerName(player.getName());
|
||||||
if (playerTeam != null) {
|
if (playerTeam != null) {
|
||||||
if (removeFromTeam) {
|
playerTeam.removePlayer(player);
|
||||||
playerTeam.removePlayer(player.getName());
|
|
||||||
}
|
|
||||||
this.broadcast("leave.broadcast", playerTeam.getKind().getColor() + player.getName() + ChatColor.WHITE);
|
this.broadcast("leave.broadcast", playerTeam.getKind().getColor() + player.getName() + ChatColor.WHITE);
|
||||||
playerTeam.resetSign();
|
playerTeam.resetSign();
|
||||||
|
if (this.getPlayerCount() == 0 && this.getWarzoneConfig().getBoolean(WarzoneConfig.RESETONEMPTY)) {
|
||||||
if (this.getLobby() != null) {
|
|
||||||
this.getLobby().resetTeamGateSign(playerTeam);
|
|
||||||
}
|
|
||||||
if (this.hasPlayerState(player.getName())) {
|
|
||||||
this.restorePlayerState(player);
|
|
||||||
}
|
|
||||||
if (this.getLoadoutSelections().containsKey(player.getName())) {
|
|
||||||
// clear inventory selection
|
|
||||||
this.getLoadoutSelections().remove(player.getName());
|
|
||||||
}
|
|
||||||
player.setFireTicks(0);
|
|
||||||
player.setRemainingAir(300);
|
|
||||||
|
|
||||||
// To hide stats
|
|
||||||
if (War.war.isSpoutServer()) {
|
|
||||||
War.war.getSpoutDisplayer().updateStats(player);
|
|
||||||
}
|
|
||||||
|
|
||||||
War.war.msg(player, "leave.inventoryrestore");
|
|
||||||
if (War.war.getWarHub() != null) {
|
|
||||||
War.war.getWarHub().resetZoneSign(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
boolean zoneEmpty = true;
|
|
||||||
for (Team team : this.getTeams()) {
|
|
||||||
if (team.getPlayers().size() > 0) {
|
|
||||||
zoneEmpty = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (zoneEmpty && this.getWarzoneConfig().getBoolean(WarzoneConfig.RESETONEMPTY)) {
|
|
||||||
// reset the zone for a new game when the last player leaves
|
// reset the zone for a new game when the last player leaves
|
||||||
for (Team team : this.getTeams()) {
|
for (Team team : this.getTeams()) {
|
||||||
team.resetPoints();
|
team.resetPoints();
|
||||||
@ -1323,10 +1323,49 @@ public class Warzone {
|
|||||||
WarScoreCapEvent event1 = new WarScoreCapEvent(winningTeams);
|
WarScoreCapEvent event1 = new WarScoreCapEvent(winningTeams);
|
||||||
War.war.getServer().getPluginManager().callEvent(event1);
|
War.war.getServer().getPluginManager().callEvent(event1);
|
||||||
|
|
||||||
new ScoreCapReachedJob(this, winnersStr).run(); // run inventory and teleports immediately to avoid inv reset problems
|
for (Team t : this.getTeams()) {
|
||||||
|
if (War.war.isSpoutServer()) {
|
||||||
|
for (Player p : t.getPlayers()) {
|
||||||
|
SpoutPlayer sp = SpoutManager.getPlayer(p);
|
||||||
|
if (sp.isSpoutCraftEnabled()) {
|
||||||
|
sp.sendNotification(
|
||||||
|
SpoutDisplayer.cleanForNotification("Match won! " + ChatColor.WHITE + "Winners:"),
|
||||||
|
SpoutDisplayer.cleanForNotification(SpoutDisplayer.addMissingColor(winnersStr, this)),
|
||||||
|
Material.CAKE,
|
||||||
|
(short)0,
|
||||||
|
10000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
String winnersStrAndExtra = "Score cap reached. Game is over! Winning team(s): " + winnersStr;
|
||||||
|
winnersStrAndExtra += ". Resetting warzone and your inventory...";
|
||||||
|
t.teamcast(winnersStrAndExtra);
|
||||||
|
for (Iterator<Player> it = t.getPlayers().iterator(); it.hasNext();) {
|
||||||
|
Player tp = it.next();
|
||||||
|
it.remove(); // Remove player from team first to prevent anti-tp
|
||||||
|
t.removePlayer(tp);
|
||||||
|
tp.teleport(this.getEndTeleport(LeaveCause.SCORECAP));
|
||||||
|
if (winnersStr.contains(t.getName())) {
|
||||||
|
// give reward
|
||||||
|
rewardPlayer(tp, t.getInventories().resolveReward());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
t.resetPoints();
|
||||||
|
t.getPlayers().clear(); // empty the team
|
||||||
|
t.resetSign();
|
||||||
|
}
|
||||||
this.reinitialize();
|
this.reinitialize();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void rewardPlayer(Player player, Map<Integer, ItemStack> reward) {
|
||||||
|
for (Integer slot : reward.keySet()) {
|
||||||
|
ItemStack item = reward.get(slot);
|
||||||
|
if (item != null) {
|
||||||
|
player.getInventory().addItem(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isDeadMan(String playerName) {
|
public boolean isDeadMan(String playerName) {
|
||||||
if (this.deadMenInventories.containsKey(playerName)) {
|
if (this.deadMenInventories.containsKey(playerName)) {
|
||||||
return true;
|
return true;
|
||||||
@ -1352,10 +1391,12 @@ public class Warzone {
|
|||||||
public void unload() {
|
public void unload() {
|
||||||
War.war.log("Unloading zone " + this.getName() + "...", Level.INFO);
|
War.war.log("Unloading zone " + this.getName() + "...", Level.INFO);
|
||||||
for (Team team : this.getTeams()) {
|
for (Team team : this.getTeams()) {
|
||||||
for (Player player : team.getPlayers()) {
|
for (Iterator<Player> it = team.getPlayers().iterator(); it.hasNext(); ) {
|
||||||
this.handlePlayerLeave(player, this.getTeleport(), false);
|
final Player player = it.next();
|
||||||
|
it.remove();
|
||||||
|
team.removePlayer(player);
|
||||||
|
player.teleport(this.getTeleport());
|
||||||
}
|
}
|
||||||
team.getPlayers().clear();
|
|
||||||
}
|
}
|
||||||
if (this.getLobby() != null) {
|
if (this.getLobby() != null) {
|
||||||
this.getLobby().getVolume().resetBlocks();
|
this.getLobby().getVolume().resetBlocks();
|
||||||
@ -1420,8 +1461,8 @@ public class Warzone {
|
|||||||
}
|
}
|
||||||
if (sortedNames.isEmpty()) {
|
if (sortedNames.isEmpty()) {
|
||||||
// Fix for zones that mistakenly only specify a `first' loadout, but do not add any others.
|
// Fix for zones that mistakenly only specify a `first' loadout, but do not add any others.
|
||||||
this.handlePlayerLeave(player, this.getTeleport(), true);
|
this.resetInventory(playerTeam, player, Collections.<Integer, ItemStack>emptyMap());
|
||||||
War.war.badMsg(player, "We couldn't find a loadout for you! Please alert the warzone maker to add a `default' loadout to this warzone.");
|
War.war.msg(player, "404 No loadouts found");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
int currentIndex = selection.getSelectedIndex();
|
int currentIndex = selection.getSelectedIndex();
|
||||||
@ -1509,22 +1550,6 @@ public class Warzone {
|
|||||||
return this.reallyDeadFighters ;
|
return this.reallyDeadFighters ;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void gameEndTeleport(Player tp) {
|
|
||||||
if (this.getRallyPoint() != null) {
|
|
||||||
tp.teleport(this.getRallyPoint());
|
|
||||||
} else if (this.getWarzoneConfig().getBoolean(WarzoneConfig.AUTOJOIN)) {
|
|
||||||
tp.teleport(War.war.getWarHub().getLocation());
|
|
||||||
} else {
|
|
||||||
tp.teleport(this.getTeleport());
|
|
||||||
}
|
|
||||||
tp.setFireTicks(0);
|
|
||||||
tp.setRemainingAir(300);
|
|
||||||
|
|
||||||
if (this.hasPlayerState(tp.getName())) {
|
|
||||||
this.restorePlayerState(tp);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isEndOfGame() {
|
public boolean isEndOfGame() {
|
||||||
return this.isEndOfGame;
|
return this.isEndOfGame;
|
||||||
}
|
}
|
||||||
@ -1647,6 +1672,12 @@ public class Warzone {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a list of all players in the warzone. The list is immutable. If you
|
||||||
|
* need to modify the player list, you must use the per-team lists
|
||||||
|
*
|
||||||
|
* @return list containing all team players.
|
||||||
|
*/
|
||||||
public List<Player> getPlayers() {
|
public List<Player> getPlayers() {
|
||||||
List<Player> players = new ArrayList<Player>();
|
List<Player> players = new ArrayList<Player>();
|
||||||
for (Team team : this.teams) {
|
for (Team team : this.teams) {
|
||||||
@ -1655,6 +1686,11 @@ public class Warzone {
|
|||||||
return players;
|
return players;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the amount of players in all teams in this warzone.
|
||||||
|
*
|
||||||
|
* @return total player count
|
||||||
|
*/
|
||||||
public int getPlayerCount() {
|
public int getPlayerCount() {
|
||||||
int count = 0;
|
int count = 0;
|
||||||
for (Team team : this.teams) {
|
for (Team team : this.teams) {
|
||||||
@ -1662,4 +1698,144 @@ public class Warzone {
|
|||||||
}
|
}
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the amount of players in all teams in this warzone. Same as
|
||||||
|
* {@link #getPlayerCount()}, except only checks teams that the specified
|
||||||
|
* player has permission to join.
|
||||||
|
*
|
||||||
|
* @param target
|
||||||
|
* Player to check for permissions.
|
||||||
|
* @return total player count in teams the player has access to.
|
||||||
|
*/
|
||||||
|
public int getPlayerCount(Permissible target) {
|
||||||
|
int playerCount = 0;
|
||||||
|
for (Team team : this.teams) {
|
||||||
|
if (target.hasPermission(team.getTeamConfig().resolveString(
|
||||||
|
TeamConfig.PERMISSION))) {
|
||||||
|
playerCount += team.getPlayers().size();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return playerCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the total capacity of all teams in this zone. This should be
|
||||||
|
* preferred over {@link TeamConfig#TEAMSIZE} as that can differ per team.
|
||||||
|
*
|
||||||
|
* @return capacity of all teams in this zone
|
||||||
|
*/
|
||||||
|
public int getTotalCapacity() {
|
||||||
|
int capacity = 0;
|
||||||
|
for (Team team : this.teams) {
|
||||||
|
capacity += team.getTeamConfig().resolveInt(TeamConfig.TEAMSIZE);
|
||||||
|
}
|
||||||
|
return capacity;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the total capacity of all teams in this zone. Same as
|
||||||
|
* {@link #getTotalCapacity()}, except only checks teams that the specified
|
||||||
|
* player has permission to join.
|
||||||
|
*
|
||||||
|
* @param target
|
||||||
|
* Player to check for permissions.
|
||||||
|
* @return capacity of teams the player has access to.
|
||||||
|
*/
|
||||||
|
public int getTotalCapacity(Permissible target) {
|
||||||
|
int capacity = 0;
|
||||||
|
for (Team team : this.teams) {
|
||||||
|
if (target.hasPermission(team.getTeamConfig().resolveString(
|
||||||
|
TeamConfig.PERMISSION))) {
|
||||||
|
capacity += team.getTeamConfig()
|
||||||
|
.resolveInt(TeamConfig.TEAMSIZE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return capacity;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if all teams are full.
|
||||||
|
*
|
||||||
|
* @return true if all teams are full, false otherwise.
|
||||||
|
*/
|
||||||
|
public boolean isFull() {
|
||||||
|
return this.getPlayerCount() == this.getTotalCapacity();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if all teams are full. Same as {@link #isFull()}, except only
|
||||||
|
* checks teams that the specified player has permission to join.
|
||||||
|
*
|
||||||
|
* @param target
|
||||||
|
* Player to check for permissions.
|
||||||
|
* @return true if all teams are full, false otherwise.
|
||||||
|
*/
|
||||||
|
public boolean isFull(Permissible target) {
|
||||||
|
return this.getPlayerCount(target) == this.getTotalCapacity(target);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void dropAllStolenObjects(Player player, boolean quiet) {
|
||||||
|
if (this.isFlagThief(player.getName())) {
|
||||||
|
Team victimTeam = this.getVictimTeamForFlagThief(player.getName());
|
||||||
|
|
||||||
|
this.removeFlagThief(player.getName());
|
||||||
|
|
||||||
|
// Bring back flag of victim team
|
||||||
|
victimTeam.getFlagVolume().resetBlocks();
|
||||||
|
victimTeam.initializeTeamFlag();
|
||||||
|
|
||||||
|
if (!quiet) {
|
||||||
|
this.broadcast("drop.flag.broadcast", player.getName(), ChatColor.GREEN + victimTeam.getName() + ChatColor.WHITE);
|
||||||
|
}
|
||||||
|
} else if (this.isCakeThief(player.getName())) {
|
||||||
|
Cake cake = this.getCakeForThief(player.getName());
|
||||||
|
|
||||||
|
this.removeCakeThief(player.getName());
|
||||||
|
|
||||||
|
// Bring back cake
|
||||||
|
cake.getVolume().resetBlocks();
|
||||||
|
cake.addCakeBlocks();
|
||||||
|
|
||||||
|
if (!quiet) {
|
||||||
|
this.broadcast("drop.cake.broadcast", player.getName(), ChatColor.GREEN + cake.getName() + ChatColor.WHITE);
|
||||||
|
}
|
||||||
|
} else if (this.isBombThief(player.getName())) {
|
||||||
|
Bomb bomb = this.getBombForThief(player.getName());
|
||||||
|
|
||||||
|
this.removeBombThief(player.getName());
|
||||||
|
|
||||||
|
// Bring back bomb
|
||||||
|
bomb.getVolume().resetBlocks();
|
||||||
|
bomb.addBombBlocks();
|
||||||
|
|
||||||
|
if (!quiet) {
|
||||||
|
this.broadcast("drop.bomb.broadcast", player.getName(), ChatColor.GREEN + bomb.getName() + ChatColor.WHITE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the proper ending teleport location for players leaving the warzone.
|
||||||
|
* <p>
|
||||||
|
* Specifically, it gets teleports in this order:
|
||||||
|
* <ul>
|
||||||
|
* <li>Rally point (if scorecap)
|
||||||
|
* <li>Warhub (if autojoin)
|
||||||
|
* <li>Lobby
|
||||||
|
* </ul>
|
||||||
|
* </p>
|
||||||
|
* @param reason Reason for leaving zone
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public Location getEndTeleport(LeaveCause reason) {
|
||||||
|
if (reason.useRallyPoint() && this.getRallyPoint() != null) {
|
||||||
|
return this.getRallyPoint();
|
||||||
|
}
|
||||||
|
if (this.getWarzoneConfig().getBoolean(WarzoneConfig.AUTOJOIN)
|
||||||
|
&& War.war.getWarHub() != null) {
|
||||||
|
return War.war.getWarHub().getLocation();
|
||||||
|
}
|
||||||
|
return this.getTeleport();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -30,13 +30,11 @@ public class JoinCommand extends AbstractWarCommand {
|
|||||||
Player player = (Player) this.getSender();
|
Player player = (Player) this.getSender();
|
||||||
|
|
||||||
Warzone zone;
|
Warzone zone;
|
||||||
if (this.args.length == 0) {
|
TeamKind kind;
|
||||||
return false;
|
if (this.args.length == 2) {
|
||||||
} else if (this.args.length == 2) {
|
|
||||||
// zone by name
|
// zone by name
|
||||||
zone = Warzone.getZoneByName(this.args[0]);
|
zone = Warzone.getZoneByName(this.args[0]);
|
||||||
// move the team-name to first place :)
|
kind = TeamKind.teamKindFromString(this.args[1]);
|
||||||
this.args[0] = this.args[1];
|
|
||||||
} else if (this.args.length == 1) {
|
} else if (this.args.length == 1) {
|
||||||
zone = Warzone.getZoneByLocation((Player) this.getSender());
|
zone = Warzone.getZoneByLocation((Player) this.getSender());
|
||||||
if (zone == null) {
|
if (zone == null) {
|
||||||
@ -46,15 +44,13 @@ public class JoinCommand extends AbstractWarCommand {
|
|||||||
}
|
}
|
||||||
zone = lobby.getZone();
|
zone = lobby.getZone();
|
||||||
}
|
}
|
||||||
|
kind = TeamKind.teamKindFromString(this.args[0]);
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (zone == null) {
|
if (zone == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
TeamKind kind = TeamKind.teamKindFromString(this.args[0]);
|
|
||||||
|
|
||||||
if (zone.getWarzoneConfig().getBoolean(WarzoneConfig.DISABLED)) {
|
if (zone.getWarzoneConfig().getBoolean(WarzoneConfig.DISABLED)) {
|
||||||
this.badMsg("join.disabled");
|
this.badMsg("join.disabled");
|
||||||
} else if (zone.getWarzoneConfig().getBoolean(WarzoneConfig.AUTOASSIGN)) {
|
} else if (zone.getWarzoneConfig().getBoolean(WarzoneConfig.AUTOASSIGN)) {
|
||||||
@ -76,25 +72,10 @@ public class JoinCommand extends AbstractWarCommand {
|
|||||||
this.badMsg("join.selfteam");
|
this.badMsg("join.selfteam");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (!previousTeam.removePlayer(player.getName())) {
|
previousTeam.removePlayer(player);
|
||||||
War.war.log("Could not remove player " + player.getName() + " from team " + previousTeam.getName(), java.util.logging.Level.WARNING);
|
|
||||||
}
|
|
||||||
previousTeam.resetSign();
|
previousTeam.resetSign();
|
||||||
}
|
}
|
||||||
if (player.getWorld() != zone.getWorld()) {
|
zone.assign(player, team);
|
||||||
player.teleport(zone.getWorld().getSpawnLocation());
|
|
||||||
}
|
|
||||||
if (!zone.hasPlayerState(player.getName())) {
|
|
||||||
zone.keepPlayerState(player);
|
|
||||||
this.msg("join.inventorystored");
|
|
||||||
}
|
|
||||||
team.addPlayer(player);
|
|
||||||
team.resetSign();
|
|
||||||
zone.respawnPlayer(team, player);
|
|
||||||
if (War.war.getWarHub() != null) {
|
|
||||||
War.war.getWarHub().resetZoneSign(zone);
|
|
||||||
}
|
|
||||||
zone.broadcast("join.broadcast", player.getName(), team.getName());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@ -3,10 +3,8 @@ package com.tommytony.war.command;
|
|||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
|
||||||
import com.tommytony.war.War;
|
|
||||||
import com.tommytony.war.Warzone;
|
import com.tommytony.war.Warzone;
|
||||||
import com.tommytony.war.config.WarzoneConfig;
|
import com.tommytony.war.Warzone.LeaveCause;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Leaves a game.
|
* Leaves a game.
|
||||||
@ -35,8 +33,7 @@ public class LeaveCommand extends AbstractWarCommand {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
zone.handlePlayerLeave(player, zone.getWarzoneConfig().getBoolean(WarzoneConfig.AUTOJOIN) ?
|
zone.handlePlayerLeave(player, zone.getEndTeleport(LeaveCause.COMMAND), true);
|
||||||
War.war.getWarHub().getLocation() : zone.getTeleport(), true);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package com.tommytony.war.command;
|
package com.tommytony.war.command;
|
||||||
|
|
||||||
|
import java.util.Iterator;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
@ -8,10 +9,8 @@ import org.bukkit.entity.Player;
|
|||||||
import com.tommytony.war.Team;
|
import com.tommytony.war.Team;
|
||||||
import com.tommytony.war.War;
|
import com.tommytony.war.War;
|
||||||
import com.tommytony.war.Warzone;
|
import com.tommytony.war.Warzone;
|
||||||
import com.tommytony.war.config.WarzoneConfig;
|
import com.tommytony.war.Warzone.LeaveCause;
|
||||||
import com.tommytony.war.structure.ZoneLobby;
|
import com.tommytony.war.structure.ZoneLobby;
|
||||||
import java.util.Iterator;
|
|
||||||
import org.kitteh.tag.TagAPI;
|
|
||||||
|
|
||||||
|
|
||||||
public class ResetZoneCommand extends AbstractZoneMakerCommand {
|
public class ResetZoneCommand extends AbstractZoneMakerCommand {
|
||||||
@ -52,13 +51,8 @@ public class ResetZoneCommand extends AbstractZoneMakerCommand {
|
|||||||
for (Iterator<Player> it = team.getPlayers().iterator(); it.hasNext();) {
|
for (Iterator<Player> it = team.getPlayers().iterator(); it.hasNext();) {
|
||||||
Player p = it.next();
|
Player p = it.next();
|
||||||
it.remove();
|
it.remove();
|
||||||
if (War.war.isTagServer()) {
|
team.removePlayer(p);
|
||||||
TagAPI.refreshPlayer(p);
|
p.teleport(zone.getEndTeleport(LeaveCause.RESET));
|
||||||
}
|
|
||||||
zone.restorePlayerState(p);
|
|
||||||
p.teleport(zone.getWarzoneConfig().getBoolean(WarzoneConfig.AUTOJOIN) ?
|
|
||||||
War.war.getWarHub().getLocation() : zone.getTeleport());
|
|
||||||
War.war.msg(p, "You have left the warzone. Your inventory is being restored.");
|
|
||||||
}
|
}
|
||||||
team.resetPoints();
|
team.resetPoints();
|
||||||
team.getPlayers().clear();
|
team.getPlayers().clear();
|
||||||
|
@ -175,4 +175,14 @@ public enum TeamKind {
|
|||||||
Wool wool = (Wool) item.getData();
|
Wool wool = (Wool) item.getData();
|
||||||
return wool.getColor() == dyeColor;
|
return wool.getColor() == dyeColor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if a block data is this team's block data.
|
||||||
|
*
|
||||||
|
* @param data Wool block data.
|
||||||
|
* @return true if data is this team's data.
|
||||||
|
*/
|
||||||
|
public boolean isTeamBlock(MaterialData data) {
|
||||||
|
return data instanceof Wool && ((Wool)data).getColor() == this.dyeColor;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,12 +7,14 @@ import org.bukkit.ChatColor;
|
|||||||
import org.bukkit.Effect;
|
import org.bukkit.Effect;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.Sound;
|
||||||
import org.bukkit.block.BlockFace;
|
import org.bukkit.block.BlockFace;
|
||||||
import org.bukkit.block.Sign;
|
import org.bukkit.block.Sign;
|
||||||
import org.bukkit.entity.Item;
|
import org.bukkit.entity.Item;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.Event.Result;
|
import org.bukkit.event.Event.Result;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.block.Action;
|
import org.bukkit.event.block.Action;
|
||||||
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
|
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
|
||||||
@ -31,6 +33,7 @@ import org.getspout.spoutapi.player.SpoutPlayer;
|
|||||||
import com.tommytony.war.Team;
|
import com.tommytony.war.Team;
|
||||||
import com.tommytony.war.War;
|
import com.tommytony.war.War;
|
||||||
import com.tommytony.war.Warzone;
|
import com.tommytony.war.Warzone;
|
||||||
|
import com.tommytony.war.Warzone.LeaveCause;
|
||||||
import com.tommytony.war.command.ZoneSetter;
|
import com.tommytony.war.command.ZoneSetter;
|
||||||
import com.tommytony.war.config.FlagReturn;
|
import com.tommytony.war.config.FlagReturn;
|
||||||
import com.tommytony.war.config.TeamConfig;
|
import com.tommytony.war.config.TeamConfig;
|
||||||
@ -46,6 +49,8 @@ import com.tommytony.war.utility.LoadoutSelection;
|
|||||||
import com.tommytony.war.volume.Volume;
|
import com.tommytony.war.volume.Volume;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
|
||||||
import org.bukkit.event.player.PlayerTeleportEvent;
|
import org.bukkit.event.player.PlayerTeleportEvent;
|
||||||
import org.bukkit.event.player.PlayerExpChangeEvent;
|
import org.bukkit.event.player.PlayerExpChangeEvent;
|
||||||
|
|
||||||
@ -68,8 +73,7 @@ public class WarPlayerListener implements Listener {
|
|||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
Warzone zone = Warzone.getZoneByPlayerName(player.getName());
|
Warzone zone = Warzone.getZoneByPlayerName(player.getName());
|
||||||
if (zone != null) {
|
if (zone != null) {
|
||||||
zone.handlePlayerLeave(player, zone.getWarzoneConfig().getBoolean(WarzoneConfig.AUTOJOIN) ?
|
zone.handlePlayerLeave(player, zone.getEndTeleport(LeaveCause.DISCONNECT), true);
|
||||||
War.war.getWarHub().getLocation() : zone.getTeleport(), true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (War.war.isWandBearer(player)) {
|
if (War.war.isWandBearer(player)) {
|
||||||
@ -105,7 +109,7 @@ public class WarPlayerListener implements Listener {
|
|||||||
Item item = event.getItemDrop();
|
Item item = event.getItemDrop();
|
||||||
if (item != null) {
|
if (item != null) {
|
||||||
ItemStack itemStack = item.getItemStack();
|
ItemStack itemStack = item.getItemStack();
|
||||||
if (itemStack != null && itemStack.getType() == team.getKind().getMaterial() && itemStack.getData() == team.getKind().getBlockData()) {
|
if (itemStack != null && team.getKind().isTeamItem(itemStack)) {
|
||||||
// Can't drop your team's kind block
|
// Can't drop your team's kind block
|
||||||
War.war.badMsg(player, "drop.team", team.getName());
|
War.war.badMsg(player, "drop.team", team.getName());
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
@ -140,6 +144,7 @@ public class WarPlayerListener implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static final int MINIMUM_TEAM_BLOCKS = 1;
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onPlayerPickupItem(final PlayerPickupItemEvent event) {
|
public void onPlayerPickupItem(final PlayerPickupItemEvent event) {
|
||||||
if (War.war.isLoaded()) {
|
if (War.war.isLoaded()) {
|
||||||
@ -155,7 +160,8 @@ public class WarPlayerListener implements Listener {
|
|||||||
Item item = event.getItem();
|
Item item = event.getItem();
|
||||||
if (item != null) {
|
if (item != null) {
|
||||||
ItemStack itemStack = item.getItemStack();
|
ItemStack itemStack = item.getItemStack();
|
||||||
if (itemStack != null && itemStack.getType() == team.getKind().getMaterial() && player.getInventory().contains(new ItemStack(team.getKind().getMaterial(), team.getKind().getData()))) {
|
if (itemStack != null && team.getKind().isTeamItem(itemStack) &&
|
||||||
|
player.getInventory().containsAtLeast(team.getKind().getBlockHead(), MINIMUM_TEAM_BLOCKS)) {
|
||||||
// Can't pick up a second precious block
|
// Can't pick up a second precious block
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
@ -200,8 +206,7 @@ public class WarPlayerListener implements Listener {
|
|||||||
|
|
||||||
if (warzone != null) {
|
if (warzone != null) {
|
||||||
// kick player from warzone as well
|
// kick player from warzone as well
|
||||||
warzone.handlePlayerLeave(player, warzone.getWarzoneConfig().getBoolean(WarzoneConfig.AUTOJOIN) ?
|
warzone.handlePlayerLeave(player, warzone.getEndTeleport(LeaveCause.DISCONNECT), true);
|
||||||
War.war.getWarHub().getLocation() : warzone.getTeleport(), true);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -229,7 +234,11 @@ public class WarPlayerListener implements Listener {
|
|||||||
&& zone.getLoadoutSelections().get(player.getName()).isStillInSpawn()) {
|
&& zone.getLoadoutSelections().get(player.getName()).isStillInSpawn()) {
|
||||||
event.setUseItemInHand(Result.DENY);
|
event.setUseItemInHand(Result.DENY);
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
War.war.badMsg(player, "use.item.spawn");
|
// Replace message with sound to reduce spamminess.
|
||||||
|
// Whenever a player dies in the middle of conflict they will
|
||||||
|
// likely respawn still trying to use their items to attack
|
||||||
|
// another player.
|
||||||
|
player.playSound(player.getLocation(), Sound.ITEM_BREAK, 1, 0);
|
||||||
}
|
}
|
||||||
if (zone != null && event.getAction() == Action.RIGHT_CLICK_BLOCK && event.getClickedBlock().getType() == Material.ENDER_CHEST) {
|
if (zone != null && event.getAction() == Action.RIGHT_CLICK_BLOCK && event.getClickedBlock().getType() == Material.ENDER_CHEST) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
@ -334,88 +343,39 @@ public class WarPlayerListener implements Listener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Warzone lobby gates
|
// Warzone lobby gates
|
||||||
if (locLobby != null) {
|
if (locLobby != null && currentTeam == null && locLobby.isInAnyGate(playerLoc)) {
|
||||||
Warzone zone = locLobby.getZone();
|
Warzone zone = locLobby.getZone();
|
||||||
Team oldTeam = Team.getTeamByPlayerName(player.getName());
|
Team locTeamGate = locLobby.getTeamGate(playerLoc);
|
||||||
boolean isAutoAssignGate = false;
|
if (zone.getWarzoneConfig().getBoolean(WarzoneConfig.DISABLED)) {
|
||||||
if (oldTeam == null) { // trying to counter spammy player move
|
War.war.badMsg(player, "join.disabled");
|
||||||
isAutoAssignGate = zone.getLobby().isAutoAssignGate(playerLoc);
|
event.setTo(zone.getTeleport());
|
||||||
if (isAutoAssignGate) {
|
} else if (!zone.getWarzoneConfig().getBoolean(WarzoneConfig.JOINMIDBATTLE) && zone.isEnoughPlayers()) {
|
||||||
if (zone.getWarzoneConfig().getBoolean(WarzoneConfig.DISABLED)) {
|
War.war.badMsg(player, "join.progress");
|
||||||
this.handleDisabledZone(event, player, zone);
|
event.setTo(zone.getTeleport());
|
||||||
} else if (!zone.getWarzoneConfig().getBoolean(WarzoneConfig.JOINMIDBATTLE) && zone.isEnoughPlayers()) {
|
} else if (zone.isFull()) {
|
||||||
event.setTo(zone.getTeleport());
|
War.war.badMsg(player, "join.full.all");
|
||||||
War.war.badMsg(player, "join.progress");
|
event.setTo(zone.getTeleport());
|
||||||
} else {
|
} else if (zone.isFull(player)) {
|
||||||
this.dropFromOldTeamIfAny(player);
|
War.war.badMsg(player, "join.permission.all");
|
||||||
int noOfPlayers = 0;
|
event.setTo(zone.getTeleport());
|
||||||
int totalCap = 0;
|
} else if (locTeamGate != null && locTeamGate.isFull()) {
|
||||||
for (Team t : zone.getTeams()) {
|
War.war.badMsg(player, "join.full.single", locTeamGate.getName());
|
||||||
noOfPlayers += t.getPlayers().size();
|
event.setTo(zone.getTeleport());
|
||||||
totalCap += t.getTeamConfig().resolveInt(TeamConfig.TEAMSIZE);
|
} else if (locTeamGate != null && !War.war.canPlayWar(player, locTeamGate)) {
|
||||||
}
|
War.war.badMsg(player, "join.permission.single", locTeamGate.getName());
|
||||||
|
event.setTo(zone.getTeleport());
|
||||||
if (noOfPlayers < totalCap) {
|
} else if (zone.getLobby().isAutoAssignGate(playerLoc)) {
|
||||||
boolean assigned = zone.autoAssign(player) != null ? true : false;
|
zone.autoAssign(player);
|
||||||
if (!assigned) {
|
} else if (locTeamGate != null) {
|
||||||
event.setTo(zone.getTeleport());
|
zone.assign(player, locTeamGate);
|
||||||
War.war.badMsg(player, "join.permission.all");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (War.war.getWarHub() != null && assigned) {
|
|
||||||
War.war.getWarHub().resetZoneSign(zone);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
event.setTo(zone.getTeleport());
|
|
||||||
War.war.badMsg(player, "join.full.all");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// go through all the team gates
|
|
||||||
for (Team team : zone.getTeams()) {
|
|
||||||
if (zone.getLobby().isInTeamGate(team, playerLoc)) {
|
|
||||||
this.dropFromOldTeamIfAny(player);
|
|
||||||
if (zone.getWarzoneConfig().getBoolean(WarzoneConfig.DISABLED)) {
|
|
||||||
this.handleDisabledZone(event, player, zone);
|
|
||||||
} else if (!zone.getWarzoneConfig().getBoolean(WarzoneConfig.JOINMIDBATTLE) && zone.isEnoughPlayers()) {
|
|
||||||
event.setTo(zone.getTeleport());
|
|
||||||
War.war.badMsg(player, "join.progress");
|
|
||||||
} 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) {
|
|
||||||
War.war.getWarHub().resetZoneSign(zone);
|
|
||||||
}
|
|
||||||
zone.keepPlayerState(player);
|
|
||||||
War.war.msg(player, "join.inventorystored");
|
|
||||||
zone.respawnPlayer(event, team, player);
|
|
||||||
zone.broadcast("join.broadcast", player.getName(), team.getName());
|
|
||||||
} else if (!War.war.canPlayWar(player, team)) {
|
|
||||||
event.setTo(zone.getTeleport());
|
|
||||||
War.war.badMsg(player, "join.permission.single", team.getName());
|
|
||||||
} else {
|
|
||||||
event.setTo(zone.getTeleport());
|
|
||||||
War.war.badMsg(player, "join.full.single", team.getName());
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (War.war.getWarHub() != null && zone.getLobby().isInWarHubLinkGate(playerLoc) && !War.war.getWarHub().getVolume().contains(player.getLocation())) {
|
|
||||||
this.dropFromOldTeamIfAny(player);
|
|
||||||
event.setTo(War.war.getWarHub().getLocation());
|
|
||||||
// player.teleport(war.getWarHub().getLocation());
|
|
||||||
War.war.msg(player, "warhub.teleport");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
return;
|
||||||
|
} else if (locLobby != null && currentTeam == null
|
||||||
|
&& locLobby.isInWarHubLinkGate(playerLoc)
|
||||||
|
&& War.war.getWarHub() != null) {
|
||||||
|
War.war.msg(player, "warhub.teleport");
|
||||||
|
event.setTo(War.war.getWarHub().getLocation());
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Warhub zone gates
|
// Warhub zone gates
|
||||||
@ -424,37 +384,21 @@ public class WarPlayerListener implements Listener {
|
|||||||
Warzone zone = hub.getDestinationWarzoneForLocation(playerLoc);
|
Warzone zone = hub.getDestinationWarzoneForLocation(playerLoc);
|
||||||
if (zone != null && zone.getTeleport() != null) {
|
if (zone != null && zone.getTeleport() != null) {
|
||||||
if (zone.getWarzoneConfig().getBoolean(WarzoneConfig.AUTOJOIN)
|
if (zone.getWarzoneConfig().getBoolean(WarzoneConfig.AUTOJOIN)
|
||||||
&& zone.getWarzoneConfig().getBoolean(WarzoneConfig.AUTOASSIGN)
|
&& zone.getTeams().size() >= 1 && currentTeam == null) {
|
||||||
&& zone.getTeams().size() >= 1) {
|
|
||||||
if (zone.getWarzoneConfig().getBoolean(WarzoneConfig.DISABLED)) {
|
if (zone.getWarzoneConfig().getBoolean(WarzoneConfig.DISABLED)) {
|
||||||
event.setTo(hub.getLocation());
|
|
||||||
War.war.badMsg(player, "join.disabled");
|
War.war.badMsg(player, "join.disabled");
|
||||||
} else if (!zone.getWarzoneConfig().getBoolean(WarzoneConfig.JOINMIDBATTLE) && zone.isEnoughPlayers()) {
|
|
||||||
event.setTo(hub.getLocation());
|
event.setTo(hub.getLocation());
|
||||||
|
} else if (!zone.getWarzoneConfig().getBoolean(WarzoneConfig.JOINMIDBATTLE) && zone.isEnoughPlayers()) {
|
||||||
War.war.badMsg(player, "join.progress");
|
War.war.badMsg(player, "join.progress");
|
||||||
|
event.setTo(hub.getLocation());
|
||||||
|
} else if (zone.isFull()) {
|
||||||
|
War.war.badMsg(player, "join.full.all");
|
||||||
|
event.setTo(hub.getLocation());
|
||||||
|
} else if (zone.isFull(player)) {
|
||||||
|
War.war.badMsg(player, "join.permission.all");
|
||||||
|
event.setTo(hub.getLocation());
|
||||||
} else {
|
} else {
|
||||||
this.dropFromOldTeamIfAny(player);
|
zone.autoAssign(player);
|
||||||
int noOfPlayers = 0;
|
|
||||||
int totalCap = 0;
|
|
||||||
for (Team t : zone.getTeams()) {
|
|
||||||
noOfPlayers += t.getPlayers().size();
|
|
||||||
totalCap += t.getTeamConfig().resolveInt(TeamConfig.TEAMSIZE);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (noOfPlayers < totalCap) {
|
|
||||||
boolean assigned = zone.autoAssign(player) != null ? true : false;
|
|
||||||
if (!assigned) {
|
|
||||||
event.setTo(hub.getLocation());
|
|
||||||
War.war.badMsg(player, "join.permission.all");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (War.war.getWarHub() != null && assigned) {
|
|
||||||
War.war.getWarHub().resetZoneSign(zone);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
event.setTo(hub.getLocation());
|
|
||||||
War.war.badMsg(player, "join.full.all");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -511,8 +455,9 @@ public class WarPlayerListener implements Listener {
|
|||||||
if (nearestWalls.contains(BlockFace.UP)) {
|
if (nearestWalls.contains(BlockFace.UP)) {
|
||||||
upDownMove -= moveDistance;
|
upDownMove -= moveDistance;
|
||||||
} else if (nearestWalls.contains(BlockFace.DOWN)) {
|
} else if (nearestWalls.contains(BlockFace.DOWN)) {
|
||||||
// fell off the map, back to spawn
|
// fell off the map, back to spawn (still need to drop objects)
|
||||||
event.setTo(playerTeam.getRandomSpawn());
|
playerWarzone.dropAllStolenObjects(event.getPlayer(), false);
|
||||||
|
playerWarzone.respawnPlayer(event, playerTeam, event.getPlayer());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -525,47 +470,9 @@ public class WarPlayerListener implements Listener {
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
// Otherwise, send him to spawn (first make sure he drops his flag/cake/bomb to prevent auto-cap and as punishment)
|
// Otherwise, send him to spawn (first make sure he drops his flag/cake/bomb to prevent auto-cap and as punishment)
|
||||||
} else if (playerWarzone.isFlagThief(player.getName())) {
|
|
||||||
Team victimTeam = playerWarzone.getVictimTeamForFlagThief(player.getName());
|
|
||||||
|
|
||||||
// Get player back to spawn
|
|
||||||
playerWarzone.respawnPlayer(event, playerTeam, player);
|
|
||||||
playerWarzone.removeFlagThief(player.getName());
|
|
||||||
|
|
||||||
// Bring back flag of victim team
|
|
||||||
victimTeam.getFlagVolume().resetBlocks();
|
|
||||||
victimTeam.initializeTeamFlag();
|
|
||||||
playerWarzone.broadcast("drop.flag.broadcast", player.getName(), victimTeam.getName());
|
|
||||||
return;
|
|
||||||
} else if (playerWarzone.isCakeThief(player.getName())) {
|
|
||||||
Cake cake = playerWarzone.getCakeForThief(player.getName());
|
|
||||||
|
|
||||||
// Get player back to spawn
|
|
||||||
playerWarzone.respawnPlayer(event, playerTeam, player);
|
|
||||||
playerWarzone.removeCakeThief(player.getName());
|
|
||||||
|
|
||||||
// Bring back cake
|
|
||||||
cake.getVolume().resetBlocks();
|
|
||||||
cake.addCakeBlocks();
|
|
||||||
|
|
||||||
playerWarzone.broadcast("drop.cake.broadcast", player.getName(), cake.getName());
|
|
||||||
return;
|
|
||||||
} else if (playerWarzone.isBombThief(player.getName())) {
|
|
||||||
Bomb bomb = playerWarzone.getBombForThief(player.getName());
|
|
||||||
|
|
||||||
// Get player back to spawn
|
|
||||||
playerWarzone.respawnPlayer(event, playerTeam, player);
|
|
||||||
playerWarzone.removeBombThief(player.getName());
|
|
||||||
|
|
||||||
// Bring back bomb
|
|
||||||
bomb.getVolume().resetBlocks();
|
|
||||||
bomb.addBombBlocks();
|
|
||||||
|
|
||||||
playerWarzone.broadcast("drop.bomb.broadcast", player.getName(), bomb.getName());
|
|
||||||
return;
|
|
||||||
} else {
|
} else {
|
||||||
// Get player back to spawn
|
playerWarzone.dropAllStolenObjects(event.getPlayer(), false);
|
||||||
playerWarzone.respawnPlayer(event, playerTeam, player);
|
playerWarzone.respawnPlayer(event, playerTeam, event.getPlayer());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -924,7 +831,7 @@ public class WarPlayerListener implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler(priority = EventPriority.HIGHEST)
|
||||||
public void onPlayerRespawn(PlayerRespawnEvent event) {
|
public void onPlayerRespawn(PlayerRespawnEvent event) {
|
||||||
if (War.war.isLoaded()) {
|
if (War.war.isLoaded()) {
|
||||||
// Anyone who died in warzones needs to go back there pronto!
|
// Anyone who died in warzones needs to go back there pronto!
|
||||||
@ -941,9 +848,8 @@ public class WarPlayerListener implements Listener {
|
|||||||
|
|
||||||
if (zone.hasPlayerState(event.getPlayer().getName())) {
|
if (zone.hasPlayerState(event.getPlayer().getName())) {
|
||||||
// If not member of a team and zone has your state, then game ended while you were dead
|
// If not member of a team and zone has your state, then game ended while you were dead
|
||||||
zone.gameEndTeleport(event.getPlayer());
|
War.war.log("Failed to restore game state to dead player.", Level.WARNING);
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -961,46 +867,8 @@ public class WarPlayerListener implements Listener {
|
|||||||
if (!playerWarzone.getWarzoneConfig().getBoolean(WarzoneConfig.REALDEATHS)) {
|
if (!playerWarzone.getWarzoneConfig().getBoolean(WarzoneConfig.REALDEATHS)) {
|
||||||
War.war.badMsg(event.getPlayer(), "Use /leave (or /war leave) to exit the zone.");
|
War.war.badMsg(event.getPlayer(), "Use /leave (or /war leave) to exit the zone.");
|
||||||
}
|
}
|
||||||
if (playerWarzone.isFlagThief(event.getPlayer().getName())) {
|
playerWarzone.dropAllStolenObjects(event.getPlayer(), false);
|
||||||
Team victimTeam = playerWarzone.getVictimTeamForFlagThief(event.getPlayer().getName());
|
playerWarzone.respawnPlayer(event, playerTeam, event.getPlayer());
|
||||||
|
|
||||||
// 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();
|
|
||||||
|
|
||||||
playerWarzone.broadcast("drop.flag.broadcast", event.getPlayer().getName(), victimTeam.getName());
|
|
||||||
} 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();
|
|
||||||
|
|
||||||
playerWarzone.broadcast("drop.cake.broadcast", event.getPlayer().getName(), cake.getName());
|
|
||||||
} 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();
|
|
||||||
|
|
||||||
playerWarzone.broadcast("drop.bomb.broadcast", event.getPlayer().getName(), bomb.getName());
|
|
||||||
} else {
|
|
||||||
// Get event.getPlayer() back to spawn
|
|
||||||
playerWarzone.respawnPlayer(event, playerTeam, event.getPlayer());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1019,23 +887,4 @@ public class WarPlayerListener implements Listener {
|
|||||||
public void purgeLatestPositions() {
|
public void purgeLatestPositions() {
|
||||||
this.latestLocations.clear();
|
this.latestLocations.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleDisabledZone(PlayerMoveEvent event, Player player, Warzone zone) {
|
|
||||||
if (zone.getLobby() != null) {
|
|
||||||
War.war.badMsg(player, "join.disabled");
|
|
||||||
event.setTo(zone.getTeleport());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void dropFromOldTeamIfAny(Player player) {
|
|
||||||
// drop from old team if any
|
|
||||||
Team previousTeam = Team.getTeamByPlayerName(player.getName());
|
|
||||||
if (previousTeam != null) {
|
|
||||||
if (!previousTeam.removePlayer(player.getName())) {
|
|
||||||
War.war.log("Could not remove player " + player.getName() + " from team " + previousTeam.getName(), java.util.logging.Level.WARNING);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,25 +0,0 @@
|
|||||||
package com.tommytony.war.job;
|
|
||||||
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.tommytony.war.Team;
|
|
||||||
import com.tommytony.war.Warzone;
|
|
||||||
|
|
||||||
public class RespawnPlayerJob implements Runnable {
|
|
||||||
|
|
||||||
private final Team team;
|
|
||||||
private final Player player;
|
|
||||||
private final Warzone zone;
|
|
||||||
|
|
||||||
public RespawnPlayerJob(Warzone zone, Team playerTeam, Player player) {
|
|
||||||
this.zone = zone;
|
|
||||||
// TODO Auto-generated constructor stub
|
|
||||||
this.team = playerTeam;
|
|
||||||
this.player = player;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void run() {
|
|
||||||
this.zone.respawnPlayer(this.team, this.player);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,21 +0,0 @@
|
|||||||
package com.tommytony.war.job;
|
|
||||||
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.tommytony.war.Warzone;
|
|
||||||
|
|
||||||
public class RestoreDeadmanInventoryJob implements Runnable {
|
|
||||||
|
|
||||||
private final Player player;
|
|
||||||
private final Warzone zone;
|
|
||||||
|
|
||||||
public RestoreDeadmanInventoryJob(Player player, Warzone zone) {
|
|
||||||
this.player = player;
|
|
||||||
this.zone = zone;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void run() {
|
|
||||||
this.zone.restoreDeadmanInventory(this.player);
|
|
||||||
this.player.teleport(this.zone.getTeleport());
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,67 +0,0 @@
|
|||||||
package com.tommytony.war.job;
|
|
||||||
|
|
||||||
import java.util.Iterator;
|
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.Material;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
|
||||||
import org.getspout.spoutapi.SpoutManager;
|
|
||||||
import org.getspout.spoutapi.player.SpoutPlayer;
|
|
||||||
import org.kitteh.tag.TagAPI;
|
|
||||||
|
|
||||||
import com.tommytony.war.Team;
|
|
||||||
import com.tommytony.war.War;
|
|
||||||
import com.tommytony.war.Warzone;
|
|
||||||
import com.tommytony.war.spout.SpoutDisplayer;
|
|
||||||
|
|
||||||
public class ScoreCapReachedJob implements Runnable {
|
|
||||||
|
|
||||||
private final Warzone zone;
|
|
||||||
private final String winnersStr;
|
|
||||||
|
|
||||||
public ScoreCapReachedJob(Warzone zone, String winnersStr) {
|
|
||||||
this.zone = zone;
|
|
||||||
this.winnersStr = winnersStr;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void run() {
|
|
||||||
for (Team t : this.zone.getTeams()) {
|
|
||||||
if (War.war.isSpoutServer()) {
|
|
||||||
for (Player p : t.getPlayers()) {
|
|
||||||
SpoutPlayer sp = SpoutManager.getPlayer(p);
|
|
||||||
if (sp.isSpoutCraftEnabled()) {
|
|
||||||
sp.sendNotification(
|
|
||||||
SpoutDisplayer.cleanForNotification("Match won! " + ChatColor.WHITE + "Winners:"),
|
|
||||||
SpoutDisplayer.cleanForNotification(SpoutDisplayer.addMissingColor(winnersStr, zone)),
|
|
||||||
Material.CAKE,
|
|
||||||
(short)0,
|
|
||||||
10000);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
String winnersStrAndExtra = "Score cap reached. Game is over! Winning team(s): " + this.winnersStr;
|
|
||||||
winnersStrAndExtra += ". Resetting warzone and your inventory...";
|
|
||||||
t.teamcast(winnersStrAndExtra);
|
|
||||||
for (Iterator<Player> it = t.getPlayers().iterator(); it.hasNext();) {
|
|
||||||
Player tp = it.next();
|
|
||||||
it.remove(); // Remove player from team first to prevent anti-tp
|
|
||||||
if (War.war.isTagServer()) {
|
|
||||||
TagAPI.refreshPlayer(tp);
|
|
||||||
}
|
|
||||||
this.zone.gameEndTeleport(tp);
|
|
||||||
if (this.winnersStr.contains(t.getName())) {
|
|
||||||
// give reward
|
|
||||||
for (Integer slot : t.getInventories().resolveReward().keySet()) {
|
|
||||||
ItemStack item = t.getInventories().resolveReward().get(slot);
|
|
||||||
if (item != null) {
|
|
||||||
tp.getInventory().addItem(item);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
t.resetPoints();
|
|
||||||
t.getPlayers().clear(); // empty the team
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -613,14 +613,26 @@ public class ZoneLobby {
|
|||||||
public boolean isAutoAssignGate(Location location) {
|
public boolean isAutoAssignGate(Location location) {
|
||||||
if (this.autoAssignGate != null
|
if (this.autoAssignGate != null
|
||||||
&& (location.getBlockX() == this.autoAssignGate.getX()
|
&& (location.getBlockX() == this.autoAssignGate.getX()
|
||||||
&& location.getBlockY() == this.autoAssignGate.getY()
|
&& location.getBlockY() == this.autoAssignGate.getY()
|
||||||
&& location.getBlockZ() == this.autoAssignGate.getZ())) {
|
&& location.getBlockZ() == this.autoAssignGate.getZ())) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Team getTeamGate(Location location) {
|
||||||
|
for (Team team : this.warzone.getTeams()) {
|
||||||
|
if (this.isInTeamGate(team, location)) {
|
||||||
|
return team;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isInAnyGate(Location location) {
|
||||||
|
return this.isAutoAssignGate(location) || this.getTeamGate(location) != null;
|
||||||
|
}
|
||||||
|
|
||||||
public Volume getVolume() {
|
public Volume getVolume() {
|
||||||
return this.volume;
|
return this.volume;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user