Projects >> pvparena >>f710bc2f3d8903e8d6e1a2053973e76adcecf547

Chunk
Conflicting content
import java.io.File;
import java.io.IOException;

<<<<<<< HEAD
import net.milkbowl.vault.economy.Economy;
import net.milkbowl.vault.permission.Permission;
=======
import net.slipcor.pvparena.arena.Arena;
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
import net.slipcor.pvparena.core.Debug;
import net.slipcor.pvparena.core.Help;
import net.slipcor.pvparena.core.Language;
Solution content
import java.io.File;
import java.io.IOException;

import net.slipcor.pvparena.arena.Arena;
import net.slipcor.pvparena.core.Debug;
import net.slipcor.pvparena.core.Help;
import net.slipcor.pvparena.core.Language;
File
PVPArena.java
Developer's decision
Version 2
Kind of conflict
Import
Chunk
Conflicting content
 * 
 * @author slipcor
 * 
<<<<<<< HEAD
 * @version v0.6.36
=======
 * @version v0.7.9
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
 * 
 */
Solution content
 * 
 * @author slipcor
 * 
 * @version v0.7.9
 * 
 */
File
PVPArena.java
Developer's decision
Version 2
Kind of conflict
Comment
Chunk
Conflicting content
			Arenas.tellPlayer(player, Language.parse("removed", args[0]));
			return true;
		} else if (args[0].equalsIgnoreCase("debug")) {
<<<<<<< HEAD
			Arena arena = Arenas.getArenaByPlayer(player);
=======

			Arena arena = Arenas.getArenaByPlayer(player);

>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
			if (arena != null) {
				getConfig().set("debug", args[1]);
			}
Solution content
			Arenas.tellPlayer(player, Language.parse("removed", args[0]));
			return true;
		} else if (args[0].equalsIgnoreCase("debug")) {

			Arena arena = Arenas.getArenaByPlayer(player);

			if (arena != null) {
				getConfig().set("debug", args[1]);
			}
File
PVPArena.java
Developer's decision
Version 1
Kind of conflict
Method invocation
Variable
Chunk
Conflicting content
		new File(getDataFolder().getPath() + "/arenas").mkdir();
		new File(getDataFolder().getPath() + "/modules").mkdir();

<<<<<<< HEAD
		if (getServer().getPluginManager().getPlugin("Spout") != null) {
			spoutHandler = SpoutManager.getInstance().toString();
		}
=======
		atm = new ArenaTypeManager(this);
		amm = new ArenaModuleManager(this);
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b

		Language.init(getConfig().getString("language", "en"));
Solution content
		new File(getDataFolder().getPath() + "/arenas").mkdir();
		new File(getDataFolder().getPath() + "/modules").mkdir();

		atm = new ArenaTypeManager(this);
		amm = new ArenaModuleManager(this);

		Language.init(getConfig().getString("language", "en"));
File
PVPArena.java
Developer's decision
Version 2
Kind of conflict
Attribute
If statement
Method invocation
Chunk
Conflicting content
		getServer().getPluginManager().registerEvents(blockListener, this);
		getServer().getPluginManager().registerEvents(entityListener, this);
		getServer().getPluginManager().registerEvents(playerListener, this);
<<<<<<< HEAD
		getServer().getPluginManager().registerEvents(serverListener, this);
=======
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
		getServer().getPluginManager().registerEvents(customListener, this);

		if (getConfig().get("language") != null
Solution content
		getServer().getPluginManager().registerEvents(blockListener, this);
		getServer().getPluginManager().registerEvents(entityListener, this);
		getServer().getPluginManager().registerEvents(playerListener, this);
		getServer().getPluginManager().registerEvents(customListener, this);

		if (getConfig().get("language") != null
File
PVPArena.java
Developer's decision
Version 2
Kind of conflict
Method invocation
Chunk
Conflicting content
		cfg.save();

	}

	/**
	 */
package net.slipcor.pvparena.arena;

<<<<<<< HEAD
import java.util.ArrayList;
import java.util.List;

public final class Arena {
	
	// will integrate the following, hoping people don't disappear again
	
	private final List players;
	
	public Arena(String name, String type) {
		this.players = new ArrayList();
	}
	
	public List getPlayers() {
		return players;
=======
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Random;
import net.slipcor.pvparena.PVPArena;
import net.slipcor.pvparena.core.Config;
import net.slipcor.pvparena.core.Debug;
import net.slipcor.pvparena.core.Language;
import net.slipcor.pvparena.core.StringParser;
import net.slipcor.pvparena.definitions.ArenaClassSign;
import net.slipcor.pvparena.definitions.ArenaRegion;
import net.slipcor.pvparena.events.PAEndEvent;
import net.slipcor.pvparena.events.PAJoinEvent;
import net.slipcor.pvparena.events.PALeaveEvent;
import net.slipcor.pvparena.events.PAStartEvent;
import net.slipcor.pvparena.listeners.EntityListener;
import net.slipcor.pvparena.managers.Configs;
import net.slipcor.pvparena.managers.Arenas;
import net.slipcor.pvparena.managers.Inventories;
import net.slipcor.pvparena.managers.Settings;
import net.slipcor.pvparena.managers.Spawns;
import net.slipcor.pvparena.managers.Teams;
import net.slipcor.pvparena.neworder.ArenaType;
import net.slipcor.pvparena.runnables.SpawnCampRunnable;
import net.slipcor.pvparena.runnables.StartRunnable;
import net.slipcor.pvparena.runnables.TimedEndRunnable;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.GameMode;
import org.bukkit.Location;
import org.bukkit.block.Block;
import org.bukkit.block.Sign;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.event.entity.EntityRegainHealthEvent;
import org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason;
import org.bukkit.inventory.ItemStack;
import org.bukkit.potion.PotionEffect;
import org.bukkit.util.Vector;

/**
 * arena class
 * 
 * -
 * 
 * contains >general< arena methods and variables
 * 
 * @author slipcor
 * 
 * @version v0.7.9
 * 
 */

public class Arena {
	private Debug db = new Debug(8);
	private final HashSet players = new HashSet();
	private final HashSet teams = new HashSet();
	private final HashSet classes = new HashSet();

	public final HashSet signs = new HashSet();
	public final HashSet chatters = new HashSet();
	public final HashMap lives = new HashMap(); // flags
	public final HashMap regions = new HashMap();

	private ArenaType type;

	// global statics: region modify blocks all child arenas
	public static String regionmodify = "";

	public Settings sm;
	public String name = "default";
	public String prefix = "PVP Arena";
	public String owner = "%server%";

	public Location pos1; // temporary position 1 (region select)
	public Location pos2; // temporary position 2 (region select)

	// arena status
	public boolean fightInProgress = false;
	public boolean edit = false;

	// Runnable IDs
	public int END_ID = -1;
	public int START_ID = -1;
	public int SPAWNCAMP_ID = -1;

	public Config cfg;

	public boolean betPossible;

	public int playerCount = 0;
	public int teamCount = 0;

	/**
	 * arena constructor
	 * 
	 * @param name
	 *            the arena name
	 * @param type
	 *            the arena type
	 */
	public Arena(String name, String type) {
		this.name = name;

		db.i("loading Arena " + name);
		File file = new File("plugins/pvparena/config_" + name + ".yml");
		if (!file.exists()) {
			try {
				file.createNewFile();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		cfg = new Config(file);
		cfg.load();
		Configs.configParse(this, cfg, type);
	 * add an ArenaClass to the arena
	 * 
	 * @param className
	 *            the class name
	 * @param items
	 *            the class items
	 */
	public void addClass(String className, ItemStack[] items) {
		classes.add(new ArenaClass(className, items));
	}

	/**
	 * add a player to the arena
	 * 
	 * @param player
	 *            the player to add
	 */
	public void addPlayer(ArenaPlayer player) {
		this.players.add(player);
	}

	/**
	 * does a class exist?
	 * 
	 * @param className
	 *            the name to find
	 * @return true, if the class exists
	 */
	public boolean classExists(String className) {
		for (ArenaClass ac : classes) {
			if (ac.getName().equalsIgnoreCase(className)) {
				return true;
			}
		}
		return false;
	}

	/**
	 * restore an arena if region is set
	 */
	public void clearArena() {
		db.i("clearing arena");
		if (cfg.get("regions") == null) {
			db.i("Region not set, skipping!");
			return;
		} else if (regions.get("battlefield") == null) {
			db.i("Battlefield region not set, skipping!");
			return;
		}
		regions.get("battlefield").restore();
		Arenas.restoreChests(this);
	}

	/**
	 * is location inside one of our regions?
	 * 
	 * @param loc
	 *            the location to check
	 * @return true if the location is in one of our regions, false otherwise
	 */
	public boolean contains(Location loc) {
		Vector pt = loc.toVector();
		db.i("CONTAINS: checking for vector: x: " + pt.getBlockX() + ", y:"
				+ pt.getBlockY() + ", z: " + pt.getBlockZ());
		if (regions.get("battlefield") != null) {
			db.i("checking battlefield");
			if (regions.get("battlefield").contains(loc)) {
				return true;
			}
		}
		if (cfg.getBoolean("protection.checkExit", false)
				&& regions.get("exit") != null) {
			db.i("checking exit region");
			if (regions.get("exit").contains(loc)) {
				return true;
			}
		}
		if (cfg.getBoolean("protection.checkSpectator", false)
				&& regions.get("spectator") != null) {
			db.i("checking spectator region");
			if (regions.get("spectator").contains(loc)) {
				return true;
			}
		}
		if (!cfg.getBoolean("protection.checkLounges", false)) {
			return false;
		}
		db.i("checking regions:");
		for (ArenaRegion reg : regions.values()) {
			if (!reg.name.endsWith("lounge"))
				continue;

			db.i(" - " + reg.name);
			if (reg.contains(loc)) {
				return true;
			}
		}
		return false;
	}

	/**
	 * initiate the arena start countdown
	 */
	public void countDown() {
		if (START_ID != -1 || this.fightInProgress) {
			Bukkit.getScheduler().cancelTask(START_ID);
			START_ID = -1;
			return;
		}

		long duration = 20L * 5;
		START_ID = Bukkit.getScheduler().scheduleSyncDelayedTask(
				PVPArena.instance, new StartRunnable(this), duration);
		tellEveryone(Language.parse("starting"));
	}

	/**
	 * count all players being ready
	 * 
	 * @param arena
	 *            the arena to count
	 * @return the number of ready players
	 */
	public int countReadyPlayers() {
		int sum = 0;
		for (ArenaTeam team : getTeams()) {
			for (ArenaPlayer p : team.getTeamMembers()) {
				if (p.ready) {
					sum++;
				}
			}
		}
		db.i("ready players: " + sum);
		return sum;
	}

	/**
	 * force choose a player class
	 * 
	 * @param arena
	 *            the arena where this happens
	 * @param player
	 *            the player to set
	 * @param sign
	 *            the arena sign belonging to that class name
	 * @param className
	 *            the class name
	 */
	public void forceChooseClass(Player player, Sign sign, String className) {

		db.i("forcing player class");

		if (sign != null) {

			boolean classperms = false;
			if (cfg.get("general.classperms") != null) {
				classperms = cfg.getBoolean("general.classperms", false);
			}

			if (classperms) {
				db.i("checking class perms");
				if (!(PVPArena.hasPerms(player, "pvparena.class." + className))) {
					Arenas.tellPlayer(player, Language.parse("classperms"),
							this);
					return; // class permission desired and failed =>
							// announce and OUT
				}
			}

			if (cfg.getBoolean("general.signs")) {
				ArenaClassSign.remove(signs, player);
				Block block = sign.getBlock();
				ArenaClassSign as = ArenaClassSign.used(block.getLocation(),
						signs);
				if (as == null) {
					as = new ArenaClassSign(block.getLocation());
				}
				signs.add(as);
				if (!as.add(player)) {
					Arenas.tellPlayer(player, Language.parse("classfull"), this);
					return;
				}
			}
		}
		Inventories.clearInventory(player);
		ArenaPlayer ap = ArenaPlayer.parsePlayer(player);
		if (ap.getArena() == null) {
			System.out.print("[PA-debug] failed to set class " + className
					+ " to player " + player.getName());
			return;
		}
		ap.setClass(className);
		if (className.equalsIgnoreCase("custom")) {
			// if custom, give stuff back
			Inventories.loadInventory(this, player);
		} else {
			Inventories.givePlayerFightItems(this, player);
		}
	}

	/**
	 * force stop an arena
	 */
	public void forcestop() {
		db.i("forcing arena to stop");
		for (ArenaPlayer p : getPlayers()) {
			removePlayer(p.get(), "spectator");
			p.setSpectator(true);
		}
		reset(true);
	}

	/**
	 * get all classes
	 * 
	 * @return all ArenaClass instances
	 */
	public HashSet getClasses() {
		return classes;
	}

	/**
	 * get the respawn location of a dead player
	 * 
	 * @param player
	 *            the dead player
	 * @return the respawn location
	public Location getDeadLocation(Player player) {
		String string = null;
		db.i("fetching dead player's location");
		for (ArenaPlayer ap : ArenaPlayer.deadPlayers.keySet()) {
			db.i("checking player: " + ap.get().getName());
			if (ap.get().equals(player)) {
				db.i("there you are!");
				string = ArenaPlayer.deadPlayers.get(ap);
				db.i("plaayer will spawn at: " + string);
				if (string.equalsIgnoreCase("old")) {
					return ap.location;
				} else {
					return Spawns.getCoords(this, string);
				}
			}
		}
		return null;
	}

	/**
	 * fetch a dead arena player
	 * 
	 * @param player
	 *            the player to fetch
	 * @return the instance of the dead arena player
	 */
	public ArenaPlayer getDeadPlayer(Player player) {
		for (ArenaPlayer ap : ArenaPlayer.deadPlayers.keySet()) {
			if (ap.get().equals(player)) {
				db.i("successfully fetching dead player");
				return ap;
			}
		}
		return null;
	}

	/**
	 * read the saved player location
	 * 
	 * @param player
	 *            the player to check
	 * @return the saved location
	 */
	public Location getPlayerOldLocation(Player player) {
		db.i("reading old location of player " + player.getName());
		ArenaPlayer ap = ArenaPlayer.parsePlayer(player);
		return ap.location;
	}

	/**
	 * hand over all players
	 * 
	 * @return all players
	 */
	public HashSet getPlayers() {
		return players;
	}

	/**
	 * hand over all teams
	 * 
	 * @return the arena teams
	 */
	public HashSet getTeams() {
		return teams;
	}

	/**
	 * return the arena world
	 * 
	 * @return the world name
	 */
	public String getWorld() {
		return cfg.getString("general.world");
	}

	/**
	 * give customized rewards to players
	 * 
	 * @param player
	 *            the player to give the reward
	 */
	public void giveRewards(Player player) {
		db.i("giving rewards to " + player.getName());
		PVPArena.instance.getAmm().giveRewards(this, player);
		String sItems = cfg.getString("general.item-rewards", "none");
		if (sItems.equals("none"))
			return;
		String[] items = sItems.split(",");
		boolean random = cfg.getBoolean("general.random-reward");
		Random r = new Random();
		int randomItem = r.nextInt(items.length);
	 * @param arena
		for (int i = 0; i < items.length; ++i) {
			ItemStack stack = StringParser.getItemStackFromString(items[i]);
			if (stack == null) {
				db.w("unrecognized item: " + items[i]);
				continue;
			}
			if (random && i != randomItem) {
				continue;
			}
			try {
				player.getInventory().setItem(
						player.getInventory().firstEmpty(), stack);
			} catch (Exception e) {
				Arenas.tellPlayer(player, Language.parse("invfull"), this);
				return;
			}
		}
	}

	/**
					return -5;
	 * check if a custom class player is alive
	 * 
	 * @return true if there is a custom class player alive, false otherwise
	 */
	public boolean isCustomClassActive() {
		for (ArenaPlayer p : getPlayers()) {
			if (!p.isSpectator() && p.getClass().equals("custom")) {
				db.i("custom class active: true");
				return true;
			}
		}
		db.i("custom class active: false");
		return false;
	}

	/**
	 * check if a player is known
	 * 
	 * @param pPlayer
	 *            the player to find
	 * @return true if the player is known, false otherwise
	 */
	public boolean isPartOf(Player pPlayer) {
		ArenaPlayer ap = ArenaPlayer.parsePlayer(pPlayer);
		return getPlayers().contains(ap);
	}

	/**
	 * check for arena region quitters, make them leave if possible and
	 * necessary
	 */
	public void leaveCheck() {
		if (!this.regions.containsKey("battlefield")) {
			db.i("region battlefield not set, aborting quit check");
			return;
		}
		if (!this.regions.containsKey("spectator")) {
			db.i("region spectator not set, aborting quit check");
			return;
		}
		for (ArenaPlayer ap : getPlayers()) {
			if (!this.contains(ap.get().getLocation())) {
				playerLeave(ap.get());
			}
		}
	}

	/**
	 * return an understandable representation of a player's death cause
	 * 
	 * @param player
	 *            the dying player
	 * @param cause
	 *            the cause
	 * @param damager
	 *            an eventual damager entity
	 * @return a colored string
	 */
	public String parseDeathCause(Player player, DamageCause cause,
			Entity damager) {

		db.i("return a damage name for : " + cause.toString());
		ArenaPlayer ap = null;
		ArenaTeam team = null;

		db.i("damager: " + damager);

		if (damager instanceof Player) {
			ap = ArenaPlayer.parsePlayer((Player) damager);
			team = Teams.getTeam(this, ap);
		}

		switch (cause) {
		case ENTITY_ATTACK:
			if ((damager instanceof Player) && (team != null)) {
				return team.colorizePlayer(ap.get()) + ChatColor.YELLOW;
			}
			return Language.parse("custom");
		case PROJECTILE:
			if ((damager instanceof Player) && (team != null)) {
				return team.colorizePlayer(ap.get()) + ChatColor.YELLOW;
			}
			return Language.parse(cause.toString().toLowerCase());
		default:
			return Language.parse(cause.toString().toLowerCase());
		}
	}

	/**
	 * a player leaves from the arena
	 * 
	 *            the arena where this happens
	 * @param player
	 *            the leaving player
	 */
	public void playerLeave(Player player) {
		db.i("fully removing player from arena");
		ArenaPlayer ap = ArenaPlayer.parsePlayer(player);
		boolean spectator = ap.isSpectator();

		if (!spectator) {
			ArenaTeam team = Teams.getTeam(this, ap);
			PVPArena.instance.getAmm().playerLeave(this, player, team);

			tellEveryoneExcept(
					player,
					Language.parse("playerleave", team.colorizePlayer(player)
							+ ChatColor.YELLOW));

				}
			Arenas.tellPlayer(player, Language.parse("youleave"), this);
		}
		removePlayer(player, cfg.getString("tp.exit", "exit"));

		if (START_ID != -1) {
			Bukkit.getScheduler().cancelTask(START_ID);
			START_ID = -1;
		}
		ap.reset();
		removePlayer(ap);

		if (!spectator && fightInProgress) {
			Arenas.checkAndCommit(this);
		}
	}

	/**
	 * health setting method. Implemented for heroes to work right
	 * 
	 * @param p
	 *            the player to set
	 * @param value
	 *            the health value
	 */
	protected void playersetHealth(Player p, int value) {
		db.i("setting health to " + value + "/20");
		if (Bukkit.getServer().getPluginManager().getPlugin("Heroes") == null) {
			p.setHealth(value);
		}
		int current = p.getHealth();
		int regain = value - current;

		EntityRegainHealthEvent event = new EntityRegainHealthEvent(p, regain,
				RegainReason.CUSTOM);
		Bukkit.getPluginManager().callEvent(event);
	}

	/**
	 * prepare a player for fighting. Setting all values to start value
	 * 
	 * @param player
	 */
	public void prepare(Player player, boolean spectate) {
		PAJoinEvent event = new PAJoinEvent(this, player, spectate);
		Bukkit.getPluginManager().callEvent(event);

		db.i("preparing player: " + player.getName());

		ArenaPlayer ap = ArenaPlayer.parsePlayer(player);

		ap.setArena(this);
		this.addPlayer(ap);

		saveMisc(player); // save player health, fire tick, hunger etc
		playersetHealth(player, cfg.getInt("start.health", 0));
		player.setFireTicks(0);
		player.setFoodLevel(cfg.getInt("start.foodLevel", 20));
		player.setSaturation(cfg.getInt("start.saturation", 20));
		player.setExhaustion((float) cfg.getDouble("start.exhaustion", 0.0));
		player.setLevel(0);
		player.setExp(0);
		player.setGameMode(GameMode.getByValue(0));
		for (PotionEffect pe : player.getActivePotionEffects()) {
			player.addPotionEffect(new PotionEffect(pe.getType(), 0, 0));
		}

	}

	/**
	 * check if an arena is ready
	 * 
	 * @param arena
	 *            the arena to check
	 * @return 1 if the arena is ready 0 if at least one player not ready -1 if
	 *         player is the only player -2 if only one team active -3 if not
	 *         enough players in a team -4 if not enough players -5 if at least
	 *         one player not selected class, -6 if counting down
	 */
	public int ready() {
		int players = Teams.countPlayersInTeams(this);
		if (players < 2) {
			return -1;
		}
		if (players < cfg.getInt("ready.min")) {
			return -4;
		}

		if (cfg.getBoolean("ready.checkEach")) {
			for (ArenaTeam team : getTeams()) {
				for (ArenaPlayer ap : team.getTeamMembers())
					if (!ap.ready) {
						return 0;
					}
			}
		}

		int arenaTypeCheck = type.ready(this);
		if (arenaTypeCheck != 0) {
			return arenaTypeCheck;
		}

		for (ArenaTeam team : getTeams()) {
			for (ArenaPlayer p : team.getTeamMembers()) {
				db.i("checking class: " + p.get().getName());

				if (p.getaClass() == null) {
					db.i("player has no class");
					// player no class!
			}
		}

		if (cfg.getDouble("ready.startRatio") > 0) {
			double ratio = cfg.getDouble("ready.startRatio");

			int readyPlayers = countReadyPlayers();

			if (players > 0 && readyPlayers / players >= ratio) {
				return -6;
			}
		}
		return 1;
	}

	/**
	 * remove a player from the arena
	 * 
	 * @param player
	 *            the player to remove
	 */
	public void remove(Player player) {
		PALeaveEvent event = new PALeaveEvent(this, player, ArenaPlayer
				.parsePlayer(player).isSpectator());
		Bukkit.getPluginManager().callEvent(event);

		ArenaPlayer.parsePlayer(player).setArena(null);
	}

	/**
	 * remove the dead player from the map
	 * 
	 * @param player
	 *            the player to remove
	 */
	public void removeDeadPlayer(Player player) {
		resetPlayer(player, cfg.getString("tp.death", "spectator"));
		ArenaPlayer tempAP = null;
		for (ArenaPlayer ap : ArenaPlayer.deadPlayers.keySet()) {
			if (ap.get().equals(player)) {
				tempAP = ap;
				if (ap.getArena() != null) {
					ap.getArena().resetPlayer(
							player,
							ap.getArena().cfg
									.getString("tp.death", "spectator"));
					ap.setArena(null);
				} else {
					System.out.print("[PA-debug] Arena NULL: "
							+ player.getName());
				}
				break;
			}
		}
		ArenaPlayer.deadPlayers.remove(tempAP);
	}

	/**
	 * remove player from arena
	 * 
	 * @param player
	 *            the player to remove
	 */
	public void removePlayer(ArenaPlayer player) {
		this.players.remove(player);
	}

	/**
	 * remove a player from the arena
	 * 
	 * @param player
	 *            the player to reset
	 * @param tploc
	 *            the coord string to teleport the player to
	 */
	public void removePlayer(Player player, String tploc) {
		db.i("removing player " + player.getName() + " (soft), tp to " + tploc);
		resetPlayer(player, tploc);

		ArenaPlayer ap = ArenaPlayer.parsePlayer(player);
		Teams.removeTeam(this, ap);
		remove(player);
		if (cfg.getBoolean("general.signs")) {
			ArenaClassSign.remove(signs, player);
		}
	}

	/**
	 * reset an arena
	 * 
	 * @param force
	 */
	public void reset_players(boolean force) {
		db.i("resetting player manager");
		HashSet pa = new HashSet();
		for (ArenaPlayer p : players) {
			db.i("player: " + p.getName());
			if (p.getArena() == null || !p.getArena().equals(this)) {
				continue;
			}
			pa.add(p);
		}

		for (ArenaPlayer p : pa) {
			Player z = p.get();
			if (!force) {
				p.wins++;
			}
			resetPlayer(z, cfg.getString("tp.win", "old"));
			if (!force && !p.isSpectator() && fightInProgress) {
				giveRewards(z); // if we are the winning team, give
								// reward!
			}
			p.reset();
		}
	}

	/**
	 * reset an arena
	 */
	public void reset(boolean force) {

		PAEndEvent event = new PAEndEvent(this);
		Bukkit.getPluginManager().callEvent(event);

		db.i("resetting arena; force: " + String.valueOf(force));
		clearArena();
		chatters.clear();
		for (ArenaClassSign as : signs) {
			as.clear();
		}
		signs.clear();
		reset_players(force);
		fightInProgress = false;
		if (END_ID > -1)
			Bukkit.getScheduler().cancelTask(END_ID);
		END_ID = -1;

		PVPArena.instance.getAmm().reset(this, force);
		type.reset(force);

		this.playerCount = 0;
		this.teamCount = 0;
	}

	/**
	 * reset a player to his pre-join values
	 * 
	 * @param player
	 * @param string
	 */
	public void resetPlayer(Player player, String string) {
		db.i("resetting player: " + player.getName());

		ArenaPlayer ap = ArenaPlayer.parsePlayer(player);
		if (player.isDead() && !ap.isDead()) {
			db.i("player is dead");
			ap.addDeadPlayer(string);
			return;
		}

		ap.getState().unload();
		PVPArena.instance.getAmm().resetPlayer(this, player);

		db.i("string = " + string);
		ap.setTelePass(true);
		if (string.equalsIgnoreCase("old")) {
			player.teleport(ap.location);
		} else {
			Location l = Spawns.getCoords(this, string);
			player.teleport(l);
		}

		String sClass = "";
		if (ap.getClass() != null) {
			sClass = ap.getClass().getName();
		}
		if (!sClass.equalsIgnoreCase("custom")) {
			Inventories.clearInventory(player);
			Inventories.loadInventory(this, player);
		}
	}

	/**
	 * reset player variables and teleport again
	 * 
	 * @param player
	 *            the player to access
	 * @param lives
	 *            the lives to set and display
	 */
	public void respawnPlayer(Player player, int lives, DamageCause cause,
			Entity damager) {
		db.i("respawning player " + player.getName());
		playersetHealth(player, cfg.getInt("start.health", 0));
		player.setFoodLevel(cfg.getInt("start.foodLevel", 20));
		player.setSaturation(cfg.getInt("start.saturation", 20));
		player.setExhaustion((float) cfg.getDouble("start.exhaustion", 0.0));

		ArenaPlayer ap = ArenaPlayer.parsePlayer(player);
		if (cfg.getBoolean("game.refillInventory")
				&& !ap.getClass().equals("custom")) {
			Inventories.clearInventory(player);
			Inventories.givePlayerFightItems(this, player);
		}
		ArenaTeam team = Teams.getTeam(this, ap);

		if (team == null) {
			return;
		}

		type.parseRespawn(player, team, lives, cause, damager);

		if (!type.allowsRandomSpawns() && !team.getName().equals("free")) {
			tpPlayerToCoordName(player, team.getName() + "spawn");
		} else {
			tpPlayerToCoordName(player, "spawn");
		}
		player.setFireTicks(0);
		player.setNoDamageTicks(60);
		EntityListener.addBurningPlayer(player);
	}

	/**
	 * save player variables
	 * 
	 * @param player
	 *            the player to save
	 */
	public void saveMisc(Player player) {
		db.i("saving player vars: " + player.getName());

		ArenaPlayer.parsePlayer(player).createState(player);
	}

	/**
	 * set the ArenaType
	 * 
	 * @param type
	 *            the ArenaType to set
	 */
	public void setType(ArenaType type) {
		this.type = type;
	}

	/**
	 * set the arena world
	 * 
	 * @param sWorld
	 *            the world name
	 */
	public void setWorld(String sWorld) {
		cfg.set("general.world", sWorld);
		cfg.save();
	}

	/**
	 * damage every actively fighting player for being near a spawn
	 */
	public void spawnCampPunish() {

		HashMap players = new HashMap();

		for (ArenaPlayer ap : getPlayers()) {
			if (ap.isSpectator()) {
				continue;
			}
			players.put(ap.get().getLocation(), ap);
		}

		for (ArenaTeam team : teams) {
			if (team.getTeamMembers().size() < 1) {
				continue;
			}
			String sTeam = team.getName();
			for (Location spawnLoc : Spawns.getSpawns(this, sTeam)) {
				for (Location playerLoc : players.keySet()) {
					if (spawnLoc.distance(playerLoc) < 3) {
						players.get(playerLoc).get().damage(1);
					}
				}
			}
		}
	}

	/**
	 * initiate the arena start
	 */
	public void start() {
		START_ID = -1;

		teleportAllToSpawn();
		fightInProgress = true;
	}

	/**
	 * teleport all players to their respective spawn
	 */
	public void teleportAllToSpawn() {

		PAStartEvent event = new PAStartEvent(this);
		Bukkit.getPluginManager().callEvent(event);

		db.i("teleporting all players to their spawns");
		for (ArenaTeam team : teams) {
			for (ArenaPlayer ap : team.getTeamMembers()) {

				if (!type.allowsRandomSpawns()) {
					tpPlayerToCoordName(ap.get(), team.getName() + "spawn");
				} else {
					tpPlayerToCoordName(ap.get(), "spawn");
				}
				playerCount++;
			}
		}

		type.initiate();
		Arenas.saveChests(this);

		int timed = cfg.getInt("goal.timed");
		if (timed > 0) {
			db.i("arena timing!");
			// initiate autosave timer
			END_ID = Bukkit
					.getServer()
					.getScheduler()
					.scheduleSyncDelayedTask(PVPArena.instance,
							new TimedEndRunnable(this), timed * 20);
		}

		tellEveryone(Language.parse("begin"));

		PVPArena.instance.getAmm().teleportAllToSpawn(this);

		db.i("teleported everyone!");

		teamCount = Teams.countActiveTeams(this);
		SPAWNCAMP_ID = Bukkit.getScheduler().scheduleSyncRepeatingTask(
				PVPArena.instance, new SpawnCampRunnable(this), 100L, 20L);
	}

	/**
	 * send a message to every playery
	 * 
	 * @param msg
	 *            the message to send
	 */
	public void tellEveryone(String msg) {
		db.i("@all: " + msg);
		for (ArenaPlayer p : players) {
			if (p.getArena() == null || !p.getArena().equals(this)) {
				continue;
			}
			Arenas.tellPlayer(p.get(), msg, this);
		}
	}

	/**
	 * send a message to every player, prefix player name and ChatColor
	 * 
	 * @param player
	 *            the team to send to
	 * @param msg
	 *            the message to send
	 * @param player
	 */
	public void tellEveryoneColored(String msg, ChatColor c, Player player) {
		tellEveryone(c + player.getName() + ChatColor.WHITE + ": " + msg);
	}

	/**
	 * send a message to every player except the given one
	 * 
	 * @param player
	 *            the player to exclude
	 * @param msg
	 *            the message to send
	 */
	public void tellEveryoneExcept(Player player, String msg) {
		db.i("@all/" + player.getName() + ": " + msg);
		for (ArenaPlayer p : players) {
			if (p.getArena() == null || !p.getArena().equals(this)) {
				continue;
			}
			if (p.get().equals(player))
				continue;
			Arenas.tellPlayer(p.get(), msg, this);
		}
	}

	/**
	 * send a message to every player of a given team
	 * 
	 * @param player
	 *            the team to send to
	 * @param msg
	 *            the message to send
	 * @param player
	 */
	public void tellTeam(String sTeam, String msg, ChatColor c, Player player) {
		ArenaTeam team = Teams.getTeam(this, sTeam);
		if (team == null) {
			return;
		}
		sTeam = team.getName();
		db.i("@" + sTeam + ": " + msg);
		for (ArenaPlayer p : team.getTeamMembers()) {
			p.get().sendMessage(
					c + "[" + sTeam + "] " + player.getName() + ChatColor.WHITE
							+ ": " + msg);
		}
	}

	/**
	 * teleport a given player to the given coord string
	 * 
	 * @param player
	 *            the player to teleport
	 * @param place
	 *            the coord string
	 */
	public void tpPlayerToCoordName(Player player, String place) {
		db.i("teleporting " + player + " to coord " + place);
		if (place.endsWith("lounge")) {
			// at the start of the match
			if (cfg.getBoolean("messages.defaultChat")
					&& cfg.getBoolean("messages.chat")) {
				chatters.add(player.getName());
			}
		}

		PVPArena.instance.getAmm().tpPlayerToCoordName(this, player, place);

		ArenaPlayer ap = ArenaPlayer.parsePlayer(player);
		if (place.equals("spectator")) {
			ap.setSpectator(true);
		}
		Location loc = Spawns.getCoords(this, place);
		if (loc == null) {
			System.out.print("[PA-debug] Spawn null : " + place);
			return;
		}
		ap.setTelePass(true);
		player.teleport(loc);
		ap.setTelePass(false);
	}

	/**
	 * hand over the ArenaType
	 * 
	 * @return the ArenaType instance
	 */
	public ArenaType type() {
		return this.type;
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
	}
}
Solution content
package net.slipcor.pvparena.arena;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Random;
import net.slipcor.pvparena.PVPArena;
import net.slipcor.pvparena.core.Config;
import net.slipcor.pvparena.core.Debug;
import net.slipcor.pvparena.core.Language;
import net.slipcor.pvparena.core.StringParser;
import net.slipcor.pvparena.definitions.ArenaClassSign;
import net.slipcor.pvparena.definitions.ArenaRegion;
import net.slipcor.pvparena.events.PAEndEvent;
import net.slipcor.pvparena.events.PAJoinEvent;
import net.slipcor.pvparena.events.PALeaveEvent;
import net.slipcor.pvparena.events.PAStartEvent;
import net.slipcor.pvparena.listeners.EntityListener;
import net.slipcor.pvparena.managers.Configs;
import net.slipcor.pvparena.managers.Arenas;
import net.slipcor.pvparena.managers.Inventories;
import net.slipcor.pvparena.managers.Settings;
import net.slipcor.pvparena.managers.Spawns;
import net.slipcor.pvparena.managers.Teams;
import net.slipcor.pvparena.neworder.ArenaType;
import net.slipcor.pvparena.runnables.SpawnCampRunnable;
import net.slipcor.pvparena.runnables.StartRunnable;
import net.slipcor.pvparena.runnables.TimedEndRunnable;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.GameMode;
import org.bukkit.Location;
import org.bukkit.block.Block;
import org.bukkit.block.Sign;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.event.entity.EntityRegainHealthEvent;
import org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason;
import org.bukkit.inventory.ItemStack;
import org.bukkit.potion.PotionEffect;
import org.bukkit.util.Vector;

/**
 * arena class
 * 
 * -
 * 
 * contains >general< arena methods and variables
 * 
 * @author slipcor
 * 
 * @version v0.7.9
 * 
 */

public class Arena {
	private Debug db = new Debug(8);
	private final HashSet players = new HashSet();
	private final HashSet teams = new HashSet();
	private final HashSet classes = new HashSet();

	public final HashSet signs = new HashSet();
	public final HashSet chatters = new HashSet();
	public final HashMap lives = new HashMap(); // flags
	public final HashMap regions = new HashMap();

	private ArenaType type;

	// global statics: region modify blocks all child arenas
	public static String regionmodify = "";

	public Settings sm;
	public String name = "default";
	public String prefix = "PVP Arena";
	public String owner = "%server%";

	public Location pos1; // temporary position 1 (region select)
	public Location pos2; // temporary position 2 (region select)

	// arena status
	public boolean fightInProgress = false;
	public boolean edit = false;

	// Runnable IDs
	public int END_ID = -1;
	public int START_ID = -1;
	public int SPAWNCAMP_ID = -1;

	public Config cfg;

	public boolean betPossible;

	public int playerCount = 0;
	public int teamCount = 0;

	/**
	 * arena constructor
	 * 
	 * @param name
	 *            the arena name
	 * @param type
	 *            the arena type
	 */
	public Arena(String name, String type) {
		this.name = name;

		db.i("loading Arena " + name);
		File file = new File("plugins/pvparena/config_" + name + ".yml");
		if (!file.exists()) {
			try {
				file.createNewFile();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		cfg = new Config(file);
		cfg.load();
		Configs.configParse(this, cfg, type);

		cfg.save();

	}

	/**
	 * add an ArenaClass to the arena
	 * 
	 * @param className
	 *            the class name
	 * @param items
	 *            the class items
	 */
	public void addClass(String className, ItemStack[] items) {
		classes.add(new ArenaClass(className, items));
	}

	/**
	 * add a player to the arena
	 * 
	 * @param player
	 *            the player to add
	 */
	public void addPlayer(ArenaPlayer player) {
		this.players.add(player);
	}

	/**
	 * does a class exist?
	 * 
	 * @param className
	 *            the name to find
	 * @return true, if the class exists
	 */
	public boolean classExists(String className) {
		for (ArenaClass ac : classes) {
			if (ac.getName().equalsIgnoreCase(className)) {
				return true;
			}
		}
		return false;
	}

	/**
	 * restore an arena if region is set
	 */
	public void clearArena() {
		db.i("clearing arena");
		if (cfg.get("regions") == null) {
			db.i("Region not set, skipping!");
			return;
		} else if (regions.get("battlefield") == null) {
			db.i("Battlefield region not set, skipping!");
			return;
		}
		regions.get("battlefield").restore();
		Arenas.restoreChests(this);
	}

	/**
	 * is location inside one of our regions?
	 * 
	 * @param loc
	 *            the location to check
	 * @return true if the location is in one of our regions, false otherwise
	 */
	public boolean contains(Location loc) {
		Vector pt = loc.toVector();
		db.i("CONTAINS: checking for vector: x: " + pt.getBlockX() + ", y:"
				+ pt.getBlockY() + ", z: " + pt.getBlockZ());
		if (regions.get("battlefield") != null) {
			db.i("checking battlefield");
			if (regions.get("battlefield").contains(loc)) {
				return true;
			}
		}
		if (cfg.getBoolean("protection.checkExit", false)
				&& regions.get("exit") != null) {
			db.i("checking exit region");
			if (regions.get("exit").contains(loc)) {
				return true;
			}
		}
		if (cfg.getBoolean("protection.checkSpectator", false)
				&& regions.get("spectator") != null) {
			db.i("checking spectator region");
			if (regions.get("spectator").contains(loc)) {
				return true;
			}
		}
		if (!cfg.getBoolean("protection.checkLounges", false)) {
			return false;
		}
		db.i("checking regions:");
		for (ArenaRegion reg : regions.values()) {
			if (!reg.name.endsWith("lounge"))
				continue;

			db.i(" - " + reg.name);
			if (reg.contains(loc)) {
				return true;
			}
		}
		return false;
	}

	/**
	 * initiate the arena start countdown
	 */
	public void countDown() {
		if (START_ID != -1 || this.fightInProgress) {
			Bukkit.getScheduler().cancelTask(START_ID);
			START_ID = -1;
			return;
		}

		long duration = 20L * 5;
		START_ID = Bukkit.getScheduler().scheduleSyncDelayedTask(
				PVPArena.instance, new StartRunnable(this), duration);
		tellEveryone(Language.parse("starting"));
	}

	/**
	 * count all players being ready
	 * 
	 * @param arena
	 *            the arena to count
	 * @return the number of ready players
	 */
	public int countReadyPlayers() {
		int sum = 0;
		for (ArenaTeam team : getTeams()) {
			for (ArenaPlayer p : team.getTeamMembers()) {
				if (p.ready) {
					sum++;
				}
			}
		}
		db.i("ready players: " + sum);
		return sum;
	}

	/**
	 * force choose a player class
	 * 
	 * @param arena
	 *            the arena where this happens
	 * @param player
	 *            the player to set
	 * @param sign
	 *            the arena sign belonging to that class name
	 * @param className
	 *            the class name
	 */
	public void forceChooseClass(Player player, Sign sign, String className) {

		db.i("forcing player class");

		if (sign != null) {

			boolean classperms = false;
			if (cfg.get("general.classperms") != null) {
				classperms = cfg.getBoolean("general.classperms", false);
			}

			if (classperms) {
				db.i("checking class perms");
				if (!(PVPArena.hasPerms(player, "pvparena.class." + className))) {
					Arenas.tellPlayer(player, Language.parse("classperms"),
							this);
					return; // class permission desired and failed =>
							// announce and OUT
				}
			}

			if (cfg.getBoolean("general.signs")) {
				ArenaClassSign.remove(signs, player);
				Block block = sign.getBlock();
				ArenaClassSign as = ArenaClassSign.used(block.getLocation(),
						signs);
				if (as == null) {
					as = new ArenaClassSign(block.getLocation());
				}
				signs.add(as);
				if (!as.add(player)) {
					Arenas.tellPlayer(player, Language.parse("classfull"), this);
					return;
				}
			}
		}
		Inventories.clearInventory(player);
		ArenaPlayer ap = ArenaPlayer.parsePlayer(player);
		if (ap.getArena() == null) {
			System.out.print("[PA-debug] failed to set class " + className
					+ " to player " + player.getName());
			return;
		}
		ap.setClass(className);
		if (className.equalsIgnoreCase("custom")) {
			// if custom, give stuff back
			Inventories.loadInventory(this, player);
		} else {
			Inventories.givePlayerFightItems(this, player);
		}
	}

	/**
	 * force stop an arena
	 */
	public void forcestop() {
		db.i("forcing arena to stop");
		for (ArenaPlayer p : getPlayers()) {
			removePlayer(p.get(), "spectator");
			p.setSpectator(true);
		}
		reset(true);
	}

	/**
	 * get all classes
	 * 
	 * @return all ArenaClass instances
	 */
	public HashSet getClasses() {
		return classes;
	}

	/**
	 * get the respawn location of a dead player
	 * 
	 * @param player
	 *            the dead player
	 * @return the respawn location
	 */
	public Location getDeadLocation(Player player) {
		String string = null;
		db.i("fetching dead player's location");
		for (ArenaPlayer ap : ArenaPlayer.deadPlayers.keySet()) {
			db.i("checking player: " + ap.get().getName());
			if (ap.get().equals(player)) {
				db.i("there you are!");
				string = ArenaPlayer.deadPlayers.get(ap);
				db.i("plaayer will spawn at: " + string);
				if (string.equalsIgnoreCase("old")) {
					return ap.location;
				} else {
					return Spawns.getCoords(this, string);
				}
			}
		}
		return null;
	}

	/**
	 * fetch a dead arena player
	 * 
	 * @param player
	 *            the player to fetch
	 * @return the instance of the dead arena player
	 */
	public ArenaPlayer getDeadPlayer(Player player) {
		for (ArenaPlayer ap : ArenaPlayer.deadPlayers.keySet()) {
			if (ap.get().equals(player)) {
				db.i("successfully fetching dead player");
				return ap;
			}
		}
		return null;
	}

	/**
	 * read the saved player location
	 * 
	 * @param player
	 *            the player to check
	 * @return the saved location
	 */
	public Location getPlayerOldLocation(Player player) {
		db.i("reading old location of player " + player.getName());
		ArenaPlayer ap = ArenaPlayer.parsePlayer(player);
		return ap.location;
	}

	/**
	 * hand over all players
	 * 
	 * @return all players
	 */
	public HashSet getPlayers() {
		return players;
	}

	/**
	 * hand over all teams
	 * 
	 * @return the arena teams
	 */
	public HashSet getTeams() {
		return teams;
	}

	/**
	 * return the arena world
	 * 
	 * @return the world name
	 */
	public String getWorld() {
		return cfg.getString("general.world");
	}

	/**
	 * give customized rewards to players
	 * 
	 * @param player
	 *            the player to give the reward
	 */
	public void giveRewards(Player player) {
		db.i("giving rewards to " + player.getName());
		PVPArena.instance.getAmm().giveRewards(this, player);
		String sItems = cfg.getString("general.item-rewards", "none");
		if (sItems.equals("none"))
			return;
		String[] items = sItems.split(",");
		boolean random = cfg.getBoolean("general.random-reward");
		Random r = new Random();
		int randomItem = r.nextInt(items.length);
		for (int i = 0; i < items.length; ++i) {
			ItemStack stack = StringParser.getItemStackFromString(items[i]);
			if (stack == null) {
				db.w("unrecognized item: " + items[i]);
				continue;
			}
			if (random && i != randomItem) {
				continue;
			}
			try {
				player.getInventory().setItem(
						player.getInventory().firstEmpty(), stack);
			} catch (Exception e) {
				Arenas.tellPlayer(player, Language.parse("invfull"), this);
				return;
			}
		}
	}

	/**
	 * check if a custom class player is alive
	 * 
	 * @return true if there is a custom class player alive, false otherwise
	 */
	public boolean isCustomClassActive() {
		for (ArenaPlayer p : getPlayers()) {
			if (!p.isSpectator() && p.getClass().equals("custom")) {
				db.i("custom class active: true");
				return true;
			}
		}
		db.i("custom class active: false");
		return false;
	}

	/**
	 * check if a player is known
	 * 
	 * @param pPlayer
	 *            the player to find
	 * @return true if the player is known, false otherwise
	 */
	public boolean isPartOf(Player pPlayer) {
		ArenaPlayer ap = ArenaPlayer.parsePlayer(pPlayer);
		return getPlayers().contains(ap);
	}

	/**
	 * check for arena region quitters, make them leave if possible and
	 * necessary
	 */
	public void leaveCheck() {
		if (!this.regions.containsKey("battlefield")) {
			db.i("region battlefield not set, aborting quit check");
			return;
		}
		if (!this.regions.containsKey("spectator")) {
			db.i("region spectator not set, aborting quit check");
			return;
		}
		for (ArenaPlayer ap : getPlayers()) {
			if (!this.contains(ap.get().getLocation())) {
				playerLeave(ap.get());
			}
		}
	}

	/**
	 * return an understandable representation of a player's death cause
	 * 
	 * @param player
	 *            the dying player
	 * @param cause
	 *            the cause
	 * @param damager
	 *            an eventual damager entity
	 * @return a colored string
	 */
	public String parseDeathCause(Player player, DamageCause cause,
			Entity damager) {

		db.i("return a damage name for : " + cause.toString());
		ArenaPlayer ap = null;
		ArenaTeam team = null;

		db.i("damager: " + damager);

		if (damager instanceof Player) {
			ap = ArenaPlayer.parsePlayer((Player) damager);
			team = Teams.getTeam(this, ap);
		}

		switch (cause) {
		case ENTITY_ATTACK:
			if ((damager instanceof Player) && (team != null)) {
				return team.colorizePlayer(ap.get()) + ChatColor.YELLOW;
			}
			return Language.parse("custom");
		case PROJECTILE:
			if ((damager instanceof Player) && (team != null)) {
				return team.colorizePlayer(ap.get()) + ChatColor.YELLOW;
			}
			return Language.parse(cause.toString().toLowerCase());
		default:
			return Language.parse(cause.toString().toLowerCase());
		}
	}

	/**
	 * a player leaves from the arena
	 * 
	 * @param arena
	 *            the arena where this happens
	 * @param player
	 *            the leaving player
	 */
	public void playerLeave(Player player) {
		db.i("fully removing player from arena");
		ArenaPlayer ap = ArenaPlayer.parsePlayer(player);
		boolean spectator = ap.isSpectator();

		if (!spectator) {
			ArenaTeam team = Teams.getTeam(this, ap);
			PVPArena.instance.getAmm().playerLeave(this, player, team);

			tellEveryoneExcept(
					player,
					Language.parse("playerleave", team.colorizePlayer(player)
							+ ChatColor.YELLOW));

			Arenas.tellPlayer(player, Language.parse("youleave"), this);
		}
		removePlayer(player, cfg.getString("tp.exit", "exit"));

		if (START_ID != -1) {
			Bukkit.getScheduler().cancelTask(START_ID);
			START_ID = -1;
		}
		ap.reset();
		removePlayer(ap);

		if (!spectator && fightInProgress) {
			Arenas.checkAndCommit(this);
		}
	}

	/**
	 * health setting method. Implemented for heroes to work right
	 * 
	 * @param p
	 *            the player to set
	 * @param value
	 *            the health value
	 */
	protected void playersetHealth(Player p, int value) {
		db.i("setting health to " + value + "/20");
		if (Bukkit.getServer().getPluginManager().getPlugin("Heroes") == null) {
			p.setHealth(value);
		}
		int current = p.getHealth();
		int regain = value - current;

		EntityRegainHealthEvent event = new EntityRegainHealthEvent(p, regain,
				RegainReason.CUSTOM);
		Bukkit.getPluginManager().callEvent(event);
	}

	/**
	 * prepare a player for fighting. Setting all values to start value
	 * 
	 * @param player
	 */
	public void prepare(Player player, boolean spectate) {
		PAJoinEvent event = new PAJoinEvent(this, player, spectate);
		Bukkit.getPluginManager().callEvent(event);

		db.i("preparing player: " + player.getName());

		ArenaPlayer ap = ArenaPlayer.parsePlayer(player);

		ap.setArena(this);
		this.addPlayer(ap);

		saveMisc(player); // save player health, fire tick, hunger etc
		playersetHealth(player, cfg.getInt("start.health", 0));
		player.setFireTicks(0);
		player.setFoodLevel(cfg.getInt("start.foodLevel", 20));
		player.setSaturation(cfg.getInt("start.saturation", 20));
		player.setExhaustion((float) cfg.getDouble("start.exhaustion", 0.0));
		player.setLevel(0);
		player.setExp(0);
		player.setGameMode(GameMode.getByValue(0));
		for (PotionEffect pe : player.getActivePotionEffects()) {
			player.addPotionEffect(new PotionEffect(pe.getType(), 0, 0));
		}

	}

	/**
	 * check if an arena is ready
	 * 
	 * @param arena
	 *            the arena to check
	 * @return 1 if the arena is ready 0 if at least one player not ready -1 if
	 *         player is the only player -2 if only one team active -3 if not
	 *         enough players in a team -4 if not enough players -5 if at least
	 *         one player not selected class, -6 if counting down
	 */
	public int ready() {
		int players = Teams.countPlayersInTeams(this);
		if (players < 2) {
			return -1;
		}
		if (players < cfg.getInt("ready.min")) {
			return -4;
		}

		if (cfg.getBoolean("ready.checkEach")) {
			for (ArenaTeam team : getTeams()) {
				for (ArenaPlayer ap : team.getTeamMembers())
					if (!ap.ready) {
						return 0;
					}
			}
		}

		int arenaTypeCheck = type.ready(this);
		if (arenaTypeCheck != 0) {
			return arenaTypeCheck;
		}

		for (ArenaTeam team : getTeams()) {
			for (ArenaPlayer p : team.getTeamMembers()) {
				db.i("checking class: " + p.get().getName());

				if (p.getaClass() == null) {
					db.i("player has no class");
					// player no class!
					return -5;
				}
			}
		}

		if (cfg.getDouble("ready.startRatio") > 0) {
			double ratio = cfg.getDouble("ready.startRatio");

			int readyPlayers = countReadyPlayers();

			if (players > 0 && readyPlayers / players >= ratio) {
				return -6;
			}
		}
		return 1;
	}

	/**
	 * remove a player from the arena
	 * 
	 * @param player
	 *            the player to remove
	 */
	public void remove(Player player) {
		PALeaveEvent event = new PALeaveEvent(this, player, ArenaPlayer
				.parsePlayer(player).isSpectator());
		Bukkit.getPluginManager().callEvent(event);

		ArenaPlayer.parsePlayer(player).setArena(null);
	}

	/**
	 * remove the dead player from the map
	 * 
	 * @param player
	 *            the player to remove
	 */
	public void removeDeadPlayer(Player player) {
		resetPlayer(player, cfg.getString("tp.death", "spectator"));
		ArenaPlayer tempAP = null;
		for (ArenaPlayer ap : ArenaPlayer.deadPlayers.keySet()) {
			if (ap.get().equals(player)) {
				tempAP = ap;
				if (ap.getArena() != null) {
					ap.getArena().resetPlayer(
							player,
							ap.getArena().cfg
									.getString("tp.death", "spectator"));
					ap.setArena(null);
				} else {
					System.out.print("[PA-debug] Arena NULL: "
							+ player.getName());
				}
				break;
			}
		}
		ArenaPlayer.deadPlayers.remove(tempAP);
	}

	/**
	 * remove player from arena
	 * 
	 * @param player
	 *            the player to remove
	 */
	public void removePlayer(ArenaPlayer player) {
		this.players.remove(player);
	}

	/**
	 * remove a player from the arena
	 * 
	 * @param player
	 *            the player to reset
	 * @param tploc
	 *            the coord string to teleport the player to
	 */
	public void removePlayer(Player player, String tploc) {
		db.i("removing player " + player.getName() + " (soft), tp to " + tploc);
		resetPlayer(player, tploc);

		ArenaPlayer ap = ArenaPlayer.parsePlayer(player);
		Teams.removeTeam(this, ap);
		remove(player);
		if (cfg.getBoolean("general.signs")) {
			ArenaClassSign.remove(signs, player);
		}
	}

	/**
	 * reset an arena
	 * 
	 * @param force
	 */
	public void reset_players(boolean force) {
		db.i("resetting player manager");
		HashSet pa = new HashSet();
		for (ArenaPlayer p : players) {
			db.i("player: " + p.getName());
			if (p.getArena() == null || !p.getArena().equals(this)) {
				continue;
			}
			pa.add(p);
		}

		for (ArenaPlayer p : pa) {
			Player z = p.get();
			if (!force) {
				p.wins++;
			}
			resetPlayer(z, cfg.getString("tp.win", "old"));
			if (!force && !p.isSpectator() && fightInProgress) {
				giveRewards(z); // if we are the winning team, give
								// reward!
			}
			p.reset();
		}
	}

	/**
	 * reset an arena
	 */
	public void reset(boolean force) {

		PAEndEvent event = new PAEndEvent(this);
		Bukkit.getPluginManager().callEvent(event);

		db.i("resetting arena; force: " + String.valueOf(force));
		clearArena();
		chatters.clear();
		for (ArenaClassSign as : signs) {
			as.clear();
		}
		signs.clear();
		reset_players(force);
		fightInProgress = false;
		if (END_ID > -1)
			Bukkit.getScheduler().cancelTask(END_ID);
		END_ID = -1;

		PVPArena.instance.getAmm().reset(this, force);
		type.reset(force);

		this.playerCount = 0;
		this.teamCount = 0;
	}

	/**
	 * reset a player to his pre-join values
	 * 
	 * @param player
	 * @param string
	 */
	public void resetPlayer(Player player, String string) {
		db.i("resetting player: " + player.getName());

		ArenaPlayer ap = ArenaPlayer.parsePlayer(player);
		if (player.isDead() && !ap.isDead()) {
			db.i("player is dead");
			ap.addDeadPlayer(string);
			return;
		}

		ap.getState().unload();
		PVPArena.instance.getAmm().resetPlayer(this, player);

		db.i("string = " + string);
		ap.setTelePass(true);
		if (string.equalsIgnoreCase("old")) {
			player.teleport(ap.location);
		} else {
			Location l = Spawns.getCoords(this, string);
			player.teleport(l);
		}

		String sClass = "";
		if (ap.getClass() != null) {
			sClass = ap.getClass().getName();
		}
		if (!sClass.equalsIgnoreCase("custom")) {
			Inventories.clearInventory(player);
			Inventories.loadInventory(this, player);
		}
	}

	/**
	 * reset player variables and teleport again
	 * 
	 * @param player
	 *            the player to access
	 * @param lives
	 *            the lives to set and display
	 */
	public void respawnPlayer(Player player, int lives, DamageCause cause,
			Entity damager) {
		db.i("respawning player " + player.getName());
		playersetHealth(player, cfg.getInt("start.health", 0));
		player.setFoodLevel(cfg.getInt("start.foodLevel", 20));
		player.setSaturation(cfg.getInt("start.saturation", 20));
		player.setExhaustion((float) cfg.getDouble("start.exhaustion", 0.0));

		ArenaPlayer ap = ArenaPlayer.parsePlayer(player);
		if (cfg.getBoolean("game.refillInventory")
				&& !ap.getClass().equals("custom")) {
			Inventories.clearInventory(player);
			Inventories.givePlayerFightItems(this, player);
		}
		ArenaTeam team = Teams.getTeam(this, ap);

		if (team == null) {
			return;
		}

		type.parseRespawn(player, team, lives, cause, damager);

		if (!type.allowsRandomSpawns() && !team.getName().equals("free")) {
			tpPlayerToCoordName(player, team.getName() + "spawn");
		} else {
			tpPlayerToCoordName(player, "spawn");
		}
		player.setFireTicks(0);
		player.setNoDamageTicks(60);
		EntityListener.addBurningPlayer(player);
	}

	/**
	 * save player variables
	 * 
	 * @param player
	 *            the player to save
	 */
	public void saveMisc(Player player) {
		db.i("saving player vars: " + player.getName());

		ArenaPlayer.parsePlayer(player).createState(player);
	}

	/**
	 * set the ArenaType
	 * 
	 * @param type
	 *            the ArenaType to set
	 */
	public void setType(ArenaType type) {
		this.type = type;
	}

	/**
	 * set the arena world
	 * 
	 * @param sWorld
	 *            the world name
	 */
	public void setWorld(String sWorld) {
		cfg.set("general.world", sWorld);
		cfg.save();
	}

	/**
	 * damage every actively fighting player for being near a spawn
	 */
	public void spawnCampPunish() {

		HashMap players = new HashMap();

		for (ArenaPlayer ap : getPlayers()) {
			if (ap.isSpectator()) {
				continue;
			}
			players.put(ap.get().getLocation(), ap);
		}

		for (ArenaTeam team : teams) {
			if (team.getTeamMembers().size() < 1) {
				continue;
			}
			String sTeam = team.getName();
			for (Location spawnLoc : Spawns.getSpawns(this, sTeam)) {
				for (Location playerLoc : players.keySet()) {
					if (spawnLoc.distance(playerLoc) < 3) {
						players.get(playerLoc).get().damage(1);
					}
				}
			}
		}
	}

	/**
	 * initiate the arena start
	 */
	public void start() {
		START_ID = -1;

		teleportAllToSpawn();
		fightInProgress = true;
	}

	/**
	 * teleport all players to their respective spawn
	 */
	public void teleportAllToSpawn() {

		PAStartEvent event = new PAStartEvent(this);
		Bukkit.getPluginManager().callEvent(event);

		db.i("teleporting all players to their spawns");
		for (ArenaTeam team : teams) {
			for (ArenaPlayer ap : team.getTeamMembers()) {

				if (!type.allowsRandomSpawns()) {
					tpPlayerToCoordName(ap.get(), team.getName() + "spawn");
				} else {
					tpPlayerToCoordName(ap.get(), "spawn");
				}
				playerCount++;
			}
		}

		type.initiate();
		Arenas.saveChests(this);

		int timed = cfg.getInt("goal.timed");
		if (timed > 0) {
			db.i("arena timing!");
			// initiate autosave timer
			END_ID = Bukkit
					.getServer()
					.getScheduler()
					.scheduleSyncDelayedTask(PVPArena.instance,
							new TimedEndRunnable(this), timed * 20);
		}

		tellEveryone(Language.parse("begin"));

		PVPArena.instance.getAmm().teleportAllToSpawn(this);

		db.i("teleported everyone!");

		teamCount = Teams.countActiveTeams(this);
		SPAWNCAMP_ID = Bukkit.getScheduler().scheduleSyncRepeatingTask(
				PVPArena.instance, new SpawnCampRunnable(this), 100L, 20L);
	}

	/**
	 * send a message to every playery
	 * 
	 * @param msg
	 *            the message to send
	 */
	public void tellEveryone(String msg) {
		db.i("@all: " + msg);
		for (ArenaPlayer p : players) {
			if (p.getArena() == null || !p.getArena().equals(this)) {
				continue;
			}
			Arenas.tellPlayer(p.get(), msg, this);
		}
	}

	/**
	 * send a message to every player, prefix player name and ChatColor
	 * 
	 * @param player
	 *            the team to send to
	 * @param msg
	 *            the message to send
	 * @param player
	 */
	public void tellEveryoneColored(String msg, ChatColor c, Player player) {
		tellEveryone(c + player.getName() + ChatColor.WHITE + ": " + msg);
	}

	/**
	 * send a message to every player except the given one
	 * 
	 * @param player
	 *            the player to exclude
	 * @param msg
	 *            the message to send
	 */
	public void tellEveryoneExcept(Player player, String msg) {
		db.i("@all/" + player.getName() + ": " + msg);
		for (ArenaPlayer p : players) {
			if (p.getArena() == null || !p.getArena().equals(this)) {
				continue;
			}
			if (p.get().equals(player))
				continue;
			Arenas.tellPlayer(p.get(), msg, this);
		}
	}

	/**
	 * send a message to every player of a given team
	 * 
	 * @param player
	 *            the team to send to
	 * @param msg
	 *            the message to send
	 * @param player
	 */
	public void tellTeam(String sTeam, String msg, ChatColor c, Player player) {
		ArenaTeam team = Teams.getTeam(this, sTeam);
		if (team == null) {
			return;
		}
		sTeam = team.getName();
		db.i("@" + sTeam + ": " + msg);
		for (ArenaPlayer p : team.getTeamMembers()) {
			p.get().sendMessage(
					c + "[" + sTeam + "] " + player.getName() + ChatColor.WHITE
							+ ": " + msg);
		}
	}

	/**
	 * teleport a given player to the given coord string
	 * 
	 * @param player
	 *            the player to teleport
	 * @param place
	 *            the coord string
	 */
	public void tpPlayerToCoordName(Player player, String place) {
		db.i("teleporting " + player + " to coord " + place);
		if (place.endsWith("lounge")) {
			// at the start of the match
			if (cfg.getBoolean("messages.defaultChat")
					&& cfg.getBoolean("messages.chat")) {
				chatters.add(player.getName());
			}
		}

		PVPArena.instance.getAmm().tpPlayerToCoordName(this, player, place);

		ArenaPlayer ap = ArenaPlayer.parsePlayer(player);
		if (place.equals("spectator")) {
			ap.setSpectator(true);
		}
		Location loc = Spawns.getCoords(this, place);
		if (loc == null) {
			System.out.print("[PA-debug] Spawn null : " + place);
			return;
		}
		ap.setTelePass(true);
		player.teleport(loc);
		ap.setTelePass(false);
	}

	/**
	 * hand over the ArenaType
	 * 
	 * @return the ArenaType instance
	 */
	public ArenaType type() {
		return this.type;
	}
File
Arena.java
Developer's decision
Version 2
Kind of conflict
Attribute
Class signature
Comment
Import
Method declaration
Method invocation
Method signature
Return statement
Chunk
Conflicting content
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
<<<<<<< HEAD
=======
import org.bukkit.inventory.PlayerInventory;

/**
 * arena class class
 * 
 * -
 * 
 * contains arena class methods and variables for quicker access
 * 
 * @author slipcor
 * 
 * @version v0.7.8
 * 
 */
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b

public final class ArenaClass {
Solution content
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.PlayerInventory;

/**
 * arena class class
 * 
 * -
 * 
 * contains arena class methods and variables for quicker access
 * 
 * @author slipcor
 * 
 * @version v0.7.8
 * 
 */

public final class ArenaClass {
File
ArenaClass.java
Developer's decision
Version 2
Kind of conflict
Comment
Import
Chunk
Conflicting content
public final class ArenaClass {

	private final String name;
<<<<<<< HEAD
	
	private final Material[] items;
	// ^^ vv this will be replaced by ItemStack[], my StringParse lib supports enchantments and data values :)
	private final Map amounts; 
	
	public ArenaClass(String name, Map amounts) {
		this.name = name;
		this.amounts = amounts;
		this.items = amounts.keySet().toArray(new Material[amounts.keySet().size()]);
	}
	
	public String getName() {
		return name;
	}
	
	public void load(Player player) {
		for (Material item : items) {
			player.getInventory().addItem(new ItemStack(item, amounts.get(item)));
=======
	private final ItemStack[] items;

	// private statics: item definitions
	private static final List ARMORS_TYPE = new LinkedList();
	private static final List HELMETS_TYPE = new LinkedList();
	private static final List CHESTPLATES_TYPE = new LinkedList();
	private static final List LEGGINGS_TYPE = new LinkedList();
	private static final List BOOTS_TYPE = new LinkedList();

	// static filling of the items array
	static {
		HELMETS_TYPE.add(Material.LEATHER_HELMET);
		HELMETS_TYPE.add(Material.GOLD_HELMET);
		HELMETS_TYPE.add(Material.CHAINMAIL_HELMET);
		HELMETS_TYPE.add(Material.IRON_HELMET);
		HELMETS_TYPE.add(Material.DIAMOND_HELMET);

		CHESTPLATES_TYPE.add(Material.LEATHER_CHESTPLATE);
		CHESTPLATES_TYPE.add(Material.GOLD_CHESTPLATE);
		CHESTPLATES_TYPE.add(Material.CHAINMAIL_CHESTPLATE);
		CHESTPLATES_TYPE.add(Material.IRON_CHESTPLATE);
		CHESTPLATES_TYPE.add(Material.DIAMOND_CHESTPLATE);

		LEGGINGS_TYPE.add(Material.LEATHER_LEGGINGS);
		LEGGINGS_TYPE.add(Material.GOLD_LEGGINGS);
		LEGGINGS_TYPE.add(Material.CHAINMAIL_LEGGINGS);
		LEGGINGS_TYPE.add(Material.IRON_LEGGINGS);
		LEGGINGS_TYPE.add(Material.DIAMOND_LEGGINGS);

		BOOTS_TYPE.add(Material.LEATHER_BOOTS);
		BOOTS_TYPE.add(Material.GOLD_BOOTS);
		BOOTS_TYPE.add(Material.CHAINMAIL_BOOTS);
		BOOTS_TYPE.add(Material.IRON_BOOTS);
		BOOTS_TYPE.add(Material.DIAMOND_BOOTS);

		ARMORS_TYPE.addAll(HELMETS_TYPE);
		ARMORS_TYPE.addAll(CHESTPLATES_TYPE);
		ARMORS_TYPE.addAll(LEGGINGS_TYPE);
		ARMORS_TYPE.addAll(BOOTS_TYPE);
	}

	/**
	 * equip an armor item to the respective slot
	 * 
	 * @param stack
	 *            the item to equip
	 * @param inv
	 *            the player's inventory
	 */
	private static void equipArmor(ItemStack stack, PlayerInventory inv) {
		Material type = stack.getType();
		if (HELMETS_TYPE.contains(type)) {
			inv.setHelmet(stack);
		} else if (CHESTPLATES_TYPE.contains(type)) {
			inv.setChestplate(stack);
		} else if (LEGGINGS_TYPE.contains(type)) {
			inv.setLeggings(stack);
		} else if (BOOTS_TYPE.contains(type)) {
			inv.setBoots(stack);
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
		}
	}
Solution content
public final class ArenaClass {

	private final String name;
	private final ItemStack[] items;

	// private statics: item definitions
	private static final List ARMORS_TYPE = new LinkedList();
	private static final List HELMETS_TYPE = new LinkedList();
	private static final List CHESTPLATES_TYPE = new LinkedList();
	private static final List LEGGINGS_TYPE = new LinkedList();
	private static final List BOOTS_TYPE = new LinkedList();

	// static filling of the items array
	static {
		HELMETS_TYPE.add(Material.LEATHER_HELMET);
		HELMETS_TYPE.add(Material.GOLD_HELMET);
		HELMETS_TYPE.add(Material.CHAINMAIL_HELMET);
		HELMETS_TYPE.add(Material.IRON_HELMET);
		HELMETS_TYPE.add(Material.DIAMOND_HELMET);

		CHESTPLATES_TYPE.add(Material.LEATHER_CHESTPLATE);
		CHESTPLATES_TYPE.add(Material.GOLD_CHESTPLATE);
		CHESTPLATES_TYPE.add(Material.CHAINMAIL_CHESTPLATE);
		CHESTPLATES_TYPE.add(Material.IRON_CHESTPLATE);
		CHESTPLATES_TYPE.add(Material.DIAMOND_CHESTPLATE);

		LEGGINGS_TYPE.add(Material.LEATHER_LEGGINGS);
		LEGGINGS_TYPE.add(Material.GOLD_LEGGINGS);
		LEGGINGS_TYPE.add(Material.CHAINMAIL_LEGGINGS);
		LEGGINGS_TYPE.add(Material.IRON_LEGGINGS);
		LEGGINGS_TYPE.add(Material.DIAMOND_LEGGINGS);

		BOOTS_TYPE.add(Material.LEATHER_BOOTS);
		BOOTS_TYPE.add(Material.GOLD_BOOTS);
		BOOTS_TYPE.add(Material.CHAINMAIL_BOOTS);
		BOOTS_TYPE.add(Material.IRON_BOOTS);
		BOOTS_TYPE.add(Material.DIAMOND_BOOTS);

		ARMORS_TYPE.addAll(HELMETS_TYPE);
		ARMORS_TYPE.addAll(CHESTPLATES_TYPE);
		ARMORS_TYPE.addAll(LEGGINGS_TYPE);
		ARMORS_TYPE.addAll(BOOTS_TYPE);
	}

	/**
	 * equip an armor item to the respective slot
	 * 
	 * @param stack
	 *            the item to equip
	 * @param inv
	 *            the player's inventory
	 */
	private static void equipArmor(ItemStack stack, PlayerInventory inv) {
		Material type = stack.getType();
		if (HELMETS_TYPE.contains(type)) {
			inv.setHelmet(stack);
		} else if (CHESTPLATES_TYPE.contains(type)) {
			inv.setChestplate(stack);
		} else if (LEGGINGS_TYPE.contains(type)) {
			inv.setLeggings(stack);
		} else if (BOOTS_TYPE.contains(type)) {
			inv.setBoots(stack);
		}
	}
File
ArenaClass.java
Developer's decision
Version 2
Kind of conflict
Attribute
Comment
For statement
If statement
Method declaration
Method invocation
Method signature
Static initializer
Variable
Chunk
Conflicting content
package net.slipcor.pvparena.arena;

import java.util.ArrayList;
<<<<<<< HEAD
=======
import java.util.HashMap;
import java.util.HashSet;
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
import java.util.List;

import net.slipcor.pvparena.PVPArena;
Solution content
package net.slipcor.pvparena.arena;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;

import net.slipcor.pvparena.PVPArena;
File
ArenaPlayer.java
Developer's decision
Manual
Kind of conflict
Import
Chunk
Conflicting content
import net.slipcor.pvparena.PVPArena;
import net.slipcor.pvparena.classes.Effect;
<<<<<<< HEAD

import org.bukkit.entity.Player;

public final class ArenaPlayer {
	
=======
import net.slipcor.pvparena.core.Debug;
import net.slipcor.pvparena.managers.Teams;

import org.bukkit.Location;
import org.bukkit.configuration.InvalidConfigurationException;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.entity.Projectile;
import org.bukkit.entity.Wolf;
import org.bukkit.event.Event;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.inventory.ItemStack;
import org.bukkit.permissions.PermissionAttachment;

/**
 * player class
 * 
 * -
 * 
 * contains player methods and variables for quicker access
 * 
 * @author slipcor
 * 
 * @version v0.7.9
 * 
 */

public class ArenaPlayer {
	private static Debug db = new Debug(14);
	private Player player = null;
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
	private final String name;
	
	private final Arena arena;
Solution content
import net.slipcor.pvparena.PVPArena;
import net.slipcor.pvparena.classes.Effect;
import net.slipcor.pvparena.core.Debug;
import net.slipcor.pvparena.managers.Teams;

import org.bukkit.Location;
import org.bukkit.configuration.InvalidConfigurationException;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.entity.Projectile;
import org.bukkit.entity.Wolf;
import org.bukkit.event.Event;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.inventory.ItemStack;
import org.bukkit.permissions.PermissionAttachment;

/**
 * player class
 * 
 * -
 * 
 * contains player methods and variables for quicker access
 * 
 * @author slipcor
 * 
 * @version v0.7.9
 * 
 */

public class ArenaPlayer {
	private static Debug db = new Debug(14);
	private Player player = null;
	private final String name;
File
ArenaPlayer.java
Developer's decision
Version 2
Kind of conflict
Attribute
Class signature
Comment
Import
Method invocation
Chunk
Conflicting content
	private final Arena arena;
	
	private ArenaClass aClass;
<<<<<<< HEAD
	
	private final PlayerState state;
	
	private final List effects;
	
	public ArenaPlayer(Player player, Arena arena) {
		this.name = player.getName();
		this.state = new PlayerState(player);
		this.arena = arena;
		this.effects = new ArrayList();
	}
	
	public void addEffect(Effect effect) {
		effects.add(effect);
	}
	
	public Arena getArena() {
		return arena;
	}
	
	public ArenaClass getArenaClass() {
		return aClass;
	}
	
	public List getEffects() {
		return effects;
	}
	
	public String getName() {
		return name;
	}
	
	public PlayerState getState() {
		return state;
	}
	
	public void setArenaClass(ArenaClass aClass) {
		this.aClass = aClass;
	}
	
=======
	private PlayerState state;
	private final List effects;

	public ItemStack[] savedInventory;
	public ItemStack[] savedArmor;

	public Location location;
	// public String respawn = "";
	public boolean telePass = false;

	public HashSet tempPermissions = new HashSet();
	private static HashMap totalPlayers = new HashMap();

	private boolean spectator = false;
	public boolean ready = false;

	public int losses = 0;
	public int wins = 0;
	public int kills = 0;
	public int deaths = 0;
	public int damage = 0;
	public int maxdamage = 0;
	public int damagetake = 0;
	public int maxdamagetake = 0;

	public static HashMap deadPlayers = new HashMap();

	/**
	 * create a PVP Arena player istance
	 * 
	 * @param p
	 *            the bukkit player
	 * @param a
	 *            arena instance
	 */
	public ArenaPlayer(Player p, Arena a) {
		db.i("creating arena player: " + p.getName());

		this.name = p.getName();
		this.setArena(a);
		this.effects = new ArrayList();
		this.player = p;

		YamlConfiguration cfg = new YamlConfiguration();
		try {
			cfg.load(PVPArena.instance.getDataFolder() + "/players.yml");

			losses = cfg.getInt(p.getName() + ".losses", 0);
			wins = cfg.getInt(p.getName() + ".wins", 0);
			kills = cfg.getInt(p.getName() + ".kills", 0);
			deaths = cfg.getInt(p.getName() + ".deaths", 0);
			damage = cfg.getInt(p.getName() + ".damage", 0);
			damagetake = cfg.getInt(p.getName() + ".damagetake", 0);
			maxdamage = cfg.getInt(p.getName() + ".maxdamage", 0);
			maxdamagetake = cfg.getInt(p.getName() + ".maxdamagetake", 0);

		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (InvalidConfigurationException e) {
			e.printStackTrace();
		}
	}

	/**
	 * add a kill to a player
	 */
	public void addKill() {
		kills++;
	}

	/**
	 * add a death to a player
	 */
	public void addDeath() {
		deaths++;
	}

	/**
	 * add a dead player to the dead player map
	 * 
	 * @param location
	 *            the location to respawn
	 */
	public void addDeadPlayer(String string) {
		deadPlayers.put(this, string);
	}

	/**
	 * add an Effect to the player
	 * 
	 * @param effect
	 */
	public void addEffect(Effect effect) {
		effects.add(effect);
	}

	/**
	 * save the player state
	 * 
	 * @param player
	 *            the player to save
	 */
	public void createState(Player player) {
		state = new PlayerState(player);
		location = player.getLocation();
	}

	/**
	 * return the PVP Arena bukkit player
	 * 
	 * @return the bukkit player instance
	 */
	public Player get() {
		return player;
	}

	/**
	 * return the arena class
	 * 
	 * @return the arena class
	 */
	public ArenaClass getaClass() {
		return aClass;
	}

	/**
	 * return the arena
	 * 
	 * @return the arena
	 */
	public Arena getArena() {
		return arena;
	}

	/**
	 * hand over a player's deaths
	 * 
	 * @return the player's death count
	 */
	public int getDeaths() {
		return deaths;
	}

	/**
	 * return the effects
	 * 
	 * @return the player effects
	 */
	public List getEffects() {
		return effects;
	}

	/**
	 * hand over a player's kills
	 * 
	 * @return the player's kill count
	 */
	public int getKills() {
		return kills;
	}

	/**
	 * try to find the last damaging player
	 * 
	 * @param eEvent
	 *            the Event
	 * @return the player instance if found, null otherwise
	 */
	public static Player getLastDamagingPlayer(Event eEvent) {
		db.i("trying to get the last damaging player");
		if (eEvent instanceof EntityDamageByEntityEvent) {
			db.i("there was an EDBEE");
			EntityDamageByEntityEvent event = (EntityDamageByEntityEvent) eEvent;

			Entity p1 = event.getDamager();

			if (event.getCause() == DamageCause.PROJECTILE) {
				p1 = ((Projectile) p1).getShooter();
				db.i("killed by projectile, shooter is found");
			}

			if (event.getEntity() instanceof Wolf) {
				Wolf wolf = (Wolf) event.getEntity();
				if (wolf.getOwner() != null) {
					try {
						p1 = (Entity) wolf.getOwner();
						db.i("tamed wolf is found");
					} catch (Exception e) {
						// wolf belongs to dead player or whatnot
					}
				}
			}

			if (p1 instanceof Player) {
				db.i("it was a player!");
				return (Player) p1;
			}
		}
		db.i("last damaging player is null");
		db.i("last damaging event: " + eEvent.getEventName());
		return null;
	}

	/**
	 * return the player name
	 * 
	 * @return the player name
	 */
	public String getName() {
		return name;
	}

	/**
	 * return the player state
	 * 
	 * @return the player state
	 */
	public PlayerState getState() {
		return state;
	}

	/**
	 * hand over a player's tele pass
	 * 
	 * @return true if may pass, false otherwise
	 */
	public boolean getTelePass() {
		return telePass;
	}

	/**
	 * has a player died in the arena?
	 * 
	 * @return true if the player has died, false otherwise
	 */
	public boolean isDead() {
		return deadPlayers.containsKey(this);
	}

	/**
	 * is the player spectating?
	 * 
	 * @return true if the player is spectating
	 */
	public boolean isSpectator() {
		return spectator;
	}

	/**
	 * get an ArenaPlayer from a player
	 * 
	 * @param player
	 *            the player to get
	 * @return an ArenaPlayer instance belonging to that player
	 */
	public static ArenaPlayer parsePlayer(Player player) {
		if (totalPlayers.get(player.getName()) == null) {
			totalPlayers.put(player.getName(), new ArenaPlayer(player, null));
		}
		return totalPlayers.get(player.getName());
	}

	/**
	 * save and reset a player instance
	 */
	public void reset() {
		db.i("destroying arena player " + player.getName());
		YamlConfiguration cfg = new YamlConfiguration();
		try {
			String file = PVPArena.instance.getDataFolder().toString()
					+ "/players.yml";
			cfg.load(file);

			cfg.set(player.getName() + ".losses", losses);
			cfg.set(player.getName() + ".wins", wins);
			cfg.set(player.getName() + ".kills", kills);
			cfg.set(player.getName() + ".deaths", deaths);
			cfg.set(player.getName() + ".damage", damage);
			cfg.set(player.getName() + ".maxdamage", maxdamage);
			cfg.set(player.getName() + ".damagetake", damagetake);
			cfg.set(player.getName() + ".maxdamagetake", maxdamagetake);

			cfg.save(file);

		} catch (Exception e) {
			e.printStackTrace();
		}
		if (player.isDead()) {
			return;
		}

		telePass = false;

		if (state != null) {
			state.reset();
		}
		location = null;
		savedInventory = null;
		savedArmor = null;

		spectator = false;
		ready = false;

		if (arena != null) {
			ArenaTeam team = Teams.getTeam(arena, this);
			if (team != null) {
				team.remove(this);
			}
			arena.removePlayer(this);
		}
		arena = null;
		aClass = null;
	}

	/**
	 * set the player's arena
	 * 
	 * @param arena
	 *            the arena to set
	 */
	public void setArena(Arena arena) {
		this.arena = arena;
	}

	/**
	 * set the player's arena class
	 * 
	 * @param aClass
	 *            the arena class to set
	 */
	public void setArenaClass(ArenaClass aClass) {
		this.aClass = aClass;
	}

	/**
	 * hand over a player class name
	 * 
	 * @param s
	 *            a player class name
	 */
	public void setClass(String s) {

		for (ArenaClass ac : getArena().getClasses()) {
			if (ac.getName().equalsIgnoreCase(s)) {
				setArenaClass(ac);
				return;
			}
		}
		System.out.print("[PA-debug] failed to set unknown class " + s
				+ " to player " + name);
	}

	/**
	 * set the spectator state
	 * 
	 * @param spectator
	 *            the state to set
	 */
	public void setSpectator(boolean spectator) {
		this.spectator = spectator;
	}

	/**
	 * hand over a player's tele pass
	 * 
	 * @param b
	 *            true if may pass, false otherwise
	 */
	public void setTelePass(boolean b) {
		telePass = b;
	}

	/**
	 * 
	 * a scheduler to reset the effects if they expired
	 * 
	 * @author NodinChan
	 * 
	 */
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
	public final class EffectScheduler implements Runnable {
		// one runnable for every player.. mhh... yeah... that might improve it
		// ^^
Solution content
	private ArenaClass aClass;
	private PlayerState state;
	private final List effects;

	public ItemStack[] savedInventory;
	public ItemStack[] savedArmor;

	public Location location;

	// public String respawn = "";
	public boolean telePass = false;

	public HashSet tempPermissions = new HashSet();
	private static HashMap totalPlayers = new HashMap();

	private boolean spectator = false;
	public boolean ready = false;

	public int losses = 0;
	public int wins = 0;
	public int kills = 0;
	public int deaths = 0;
	public int damage = 0;
	public int maxdamage = 0;
	public int damagetake = 0;
	public int maxdamagetake = 0;

	public static HashMap deadPlayers = new HashMap();

	/**
	 * create a PVP Arena player istance
	 * 
	 * @param p
	 *            the bukkit player
	 * @param a
	 *            arena instance
	 */
	public ArenaPlayer(Player p, Arena a) {
		db.i("creating arena player: " + p.getName());

		this.name = p.getName();
		this.setArena(a);
		this.effects = new ArrayList();
		this.player = p;

		YamlConfiguration cfg = new YamlConfiguration();
		try {
			cfg.load(PVPArena.instance.getDataFolder() + "/players.yml");

			losses = cfg.getInt(p.getName() + ".losses", 0);
			wins = cfg.getInt(p.getName() + ".wins", 0);
			kills = cfg.getInt(p.getName() + ".kills", 0);
			deaths = cfg.getInt(p.getName() + ".deaths", 0);
			damage = cfg.getInt(p.getName() + ".damage", 0);
			damagetake = cfg.getInt(p.getName() + ".damagetake", 0);
			maxdamage = cfg.getInt(p.getName() + ".maxdamage", 0);
			maxdamagetake = cfg.getInt(p.getName() + ".maxdamagetake", 0);

		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (InvalidConfigurationException e) {
			e.printStackTrace();
		}
	}

	/**
	 * add a kill to a player
	 */
	public void addKill() {
		kills++;
	}

	/**
	 * add a death to a player
	 */
	public void addDeath() {
		deaths++;
	}

	/**
	 * add a dead player to the dead player map
	 * 
	 * @param location
	 *            the location to respawn
	 */
	public void addDeadPlayer(String string) {
		deadPlayers.put(this, string);
	}

	/**
	 * add an Effect to the player
	 * 
	 * @param effect
	 */
	public void addEffect(Effect effect) {
		effects.add(effect);
	}

	/**
	 * save the player state
	 * 
	 * @param player
	 *            the player to save
	 */
	public void createState(Player player) {
		state = new PlayerState(player);
		location = player.getLocation();
	}

	/**
	 * return the PVP Arena bukkit player
	 * 
	 * @return the bukkit player instance
	 */
	public Player get() {
		return player;
	}

	/**
	 * return the arena class
	 * 
	 * @return the arena class
	 */
	public ArenaClass getaClass() {
		return aClass;
	}

	/**
	 * return the arena
	 * 
	 * @return the arena
	 */
	public Arena getArena() {
		return arena;
	}

	/**
	 * hand over a player's deaths
	 * 
	 * @return the player's death count
	 */
	public int getDeaths() {
		return deaths;
	}

	/**
	 * return the effects
	 * 
	 * @return the player effects
	 */
	public List getEffects() {
		return effects;
	}

	/**
	 * hand over a player's kills
	 * 
	 * @return the player's kill count
	 */
	public int getKills() {
		return kills;
	}

	/**
	 * try to find the last damaging player
	 * 
	 * @param eEvent
	 *            the Event
	 * @return the player instance if found, null otherwise
	 */
	public static Player getLastDamagingPlayer(Event eEvent) {
		db.i("trying to get the last damaging player");
		if (eEvent instanceof EntityDamageByEntityEvent) {
			db.i("there was an EDBEE");
			EntityDamageByEntityEvent event = (EntityDamageByEntityEvent) eEvent;

			Entity p1 = event.getDamager();

			if (event.getCause() == DamageCause.PROJECTILE) {
				p1 = ((Projectile) p1).getShooter();
				db.i("killed by projectile, shooter is found");
			}

			if (event.getEntity() instanceof Wolf) {
				Wolf wolf = (Wolf) event.getEntity();
				if (wolf.getOwner() != null) {
					try {
						p1 = (Entity) wolf.getOwner();
						db.i("tamed wolf is found");
					} catch (Exception e) {
						// wolf belongs to dead player or whatnot
					}
				}
			}

			if (p1 instanceof Player) {
				db.i("it was a player!");
				return (Player) p1;
			}
		}
		db.i("last damaging player is null");
		db.i("last damaging event: " + eEvent.getEventName());
		return null;
	}

	/**
	 * return the player name
	 * 
	 * @return the player name
	 */
	public String getName() {
		return name;
	}

	/**
	 * return the player state
	 * 
	 * @return the player state
	 */
	public PlayerState getState() {
		return state;
	}

	/**
	 * hand over a player's tele pass
	 * 
	 * @return true if may pass, false otherwise
	 */
	public boolean getTelePass() {
		return telePass;
	}

	/**
	 * has a player died in the arena?
	 * 
	 * @return true if the player has died, false otherwise
	 */
	public boolean isDead() {
		return deadPlayers.containsKey(this);
	}

	/**
	 * is the player spectating?
	 * 
	 * @return true if the player is spectating
	 */
	public boolean isSpectator() {
		return spectator;
	}

	/**
	 * get an ArenaPlayer from a player
	 * 
	 * @param player
	 *            the player to get
	 * @return an ArenaPlayer instance belonging to that player
	 */
	public static ArenaPlayer parsePlayer(Player player) {
		if (totalPlayers.get(player.getName()) == null) {
			totalPlayers.put(player.getName(), new ArenaPlayer(player, null));
		}
		return totalPlayers.get(player.getName());
	}

	/**
	 * save and reset a player instance
	 */
	public void reset() {
		db.i("destroying arena player " + player.getName());
		YamlConfiguration cfg = new YamlConfiguration();
		try {
			String file = PVPArena.instance.getDataFolder().toString()
					+ "/players.yml";
			cfg.load(file);

			cfg.set(player.getName() + ".losses", losses);
			cfg.set(player.getName() + ".wins", wins);
			cfg.set(player.getName() + ".kills", kills);
			cfg.set(player.getName() + ".deaths", deaths);
			cfg.set(player.getName() + ".damage", damage);
			cfg.set(player.getName() + ".maxdamage", maxdamage);
			cfg.set(player.getName() + ".damagetake", damagetake);
			cfg.set(player.getName() + ".maxdamagetake", maxdamagetake);

			cfg.save(file);

		} catch (Exception e) {
			e.printStackTrace();
		}
		if (player.isDead()) {
			return;
		}

		telePass = false;

		if (state != null) {
			state.reset();
		}
		location = null;
		savedInventory = null;
		savedArmor = null;

		spectator = false;
		ready = false;

		if (arena != null) {
			ArenaTeam team = Teams.getTeam(arena, this);
			if (team != null) {
				team.remove(this);
			}
			arena.removePlayer(this);
		}
		arena = null;
		aClass = null;
	}

	/**
	 * set the player's arena
	 * 
	 * @param arena
	 *            the arena to set
	 */
	public void setArena(Arena arena) {
		this.arena = arena;
	}

	/**
	 * set the player's arena class
	 * 
	 * @param aClass
	 *            the arena class to set
	 */
	public void setArenaClass(ArenaClass aClass) {
		this.aClass = aClass;
	}

	/**
	 * hand over a player class name
	 * 
	 * @param s
	 *            a player class name
	 */
	public void setClass(String s) {

		for (ArenaClass ac : getArena().getClasses()) {
			if (ac.getName().equalsIgnoreCase(s)) {
				setArenaClass(ac);
				return;
			}
		}
		System.out.print("[PA-debug] failed to set unknown class " + s
				+ " to player " + name);
	}

	/**
	 * set the spectator state
	 * 
	 * @param spectator
	 *            the state to set
	 */
	public void setSpectator(boolean spectator) {
		this.spectator = spectator;
	}

	/**
	 * hand over a player's tele pass
	 * 
	 * @param b
	 *            true if may pass, false otherwise
	 */
	public void setTelePass(boolean b) {
		telePass = b;
	}

	/**
	 * 
	 * a scheduler to reset the effects if they expired
	 * 
	 * @author NodinChan
	 * 
	 */
	public final class EffectScheduler implements Runnable {
		// one runnable for every player.. mhh... yeah... that might improve it
		// ^^
File
ArenaPlayer.java
Developer's decision
Version 2
Kind of conflict
Attribute
Comment
Method declaration
Method invocation
Chunk
Conflicting content
		return color + name;
package net.slipcor.pvparena.arena;

<<<<<<< HEAD
import java.util.ArrayList;
import java.util.List;

public class ArenaTeam {
	
	private final List players;
	
	// yeah, I thought about adding that... ^^ this class will feature some string functions
	// coloring etc
	
	public ArenaTeam(String name) {
		this.players = new ArrayList();
	}
	
	public List getTeamMembers() {
		return players;
	}
=======
import java.util.HashSet;

import org.bukkit.ChatColor;
import org.bukkit.entity.Player;

/**
 * arena team class
 * 
 * -
 * 
 * contains team methods and variables for quicker access
 * 
 * @author slipcor
 * 
 * @version v0.7.8
 * 
 */

public class ArenaTeam {

	private final HashSet players;
	private final ChatColor color;
	private final String name;

	/**
	 * create an arena team instance
	 * 
	 * @param name
	 *            the arena team name
	 * @param color
	 *            the arena team color string
	 */
	public ArenaTeam(String name, String color) {
		this.players = new HashSet();
		this.color = ChatColor.valueOf(color);
		this.name = name;
	}

	/**
	 * add an arena player to the arena team
	 * 
	 * @param player
	 *            the player to add
	 */
	public void add(ArenaPlayer player) {
		this.players.add(player);
	}

	/**
	 * colorize the team name
	 * 
	 * @return the colorized team name
	 */
	public String colorize() {
	}

	/**
	 * colorize a player name
	 * 
	 * @param player
	 *            the player to colorize
	 * @return the colorized player name
	 */
	public String colorizePlayer(Player player) {
		return color + player.getName();
	}

	/**
	 * return the team color
	 * 
	 * @return the team color
	 */
	public ChatColor getColor() {
		return color;
	}

	/**
	 * return the team color code
	 * 
	 * @return the team color code
	 */
	public String getColorString() {
		return "&" + Integer.toHexString(color.ordinal());
	}

	/**
	 * return the team name
	 * 
	 * @return the team name
	 */
	public String getName() {
		return name;
	}

	/**
	 * return the team members
	 * 
	 * @return a HashSet of all arena players
	 */
	public HashSet getTeamMembers() {
		return players;
	}

	/**
	 * remove a player from the team
	 * 
	 * @param player
	 *            the player to remove
	 */
	public void remove(ArenaPlayer player) {
		this.players.remove(player);
	}
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
}
Solution content
package net.slipcor.pvparena.arena;

import java.util.HashSet;

import org.bukkit.ChatColor;
import org.bukkit.entity.Player;

/**
 * arena team class
 * 
 * -
 * 
 * contains team methods and variables for quicker access
 * 
 * @author slipcor
 * 
 * @version v0.7.8
 * 
 */

public class ArenaTeam {

	private final HashSet players;
	private final ChatColor color;
	private final String name;

	/**
	 * create an arena team instance
	 * 
	 * @param name
	 *            the arena team name
	 * @param color
	 *            the arena team color string
	 */
	public ArenaTeam(String name, String color) {
		this.players = new HashSet();
		this.color = ChatColor.valueOf(color);
		this.name = name;
	}

	/**
	 * add an arena player to the arena team
	 * 
	 * @param player
	 *            the player to add
	 */
	public void add(ArenaPlayer player) {
		this.players.add(player);
	}

	/**
	 * colorize the team name
	 * 
	 * @return the colorized team name
	 */
	public String colorize() {
		return color + name;
	}

	/**
	 * colorize a player name
	 * 
	 * @param player
	 *            the player to colorize
	 * @return the colorized player name
	 */
	public String colorizePlayer(Player player) {
		return color + player.getName();
	}

	/**
	 * return the team color
	 * 
	 * @return the team color
	 */
	public ChatColor getColor() {
		return color;
	}

	/**
	 * return the team color code
	 * 
	 * @return the team color code
	 */
	public String getColorString() {
		return "&" + Integer.toHexString(color.ordinal());
	}

	/**
	 * return the team name
	 * 
	 * @return the team name
	 */
	public String getName() {
		return name;
	}

	/**
	 * return the team members
	 * 
	 * @return a HashSet of all arena players
	 */
	public HashSet getTeamMembers() {
		return players;
	}

	/**
	 * remove a player from the team
	 * 
	 * @param player
	 *            the player to remove
	 */
	public void remove(ArenaPlayer player) {
		this.players.remove(player);
	}
}
File
ArenaTeam.java
Developer's decision
Version 2
Kind of conflict
Attribute
Comment
Import
Method declaration
Chunk
Conflicting content
package net.slipcor.pvparena.arena;

<<<<<<< HEAD
import org.bukkit.GameMode;
import org.bukkit.entity.Player;
=======
import java.util.Collection;

import net.slipcor.pvparena.listeners.EntityListener;
import org.bukkit.GameMode;
import org.bukkit.entity.Player;
import org.bukkit.potion.PotionEffect;

/**
 * player state class
 * 
 * -
 * 
 * contains player state methods and variables in order to save and load a
 * player state
 * 
 * @author slipcor
 * 
 * @version v0.7.8
 * 
 */
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b

public final class PlayerState {
Solution content
package net.slipcor.pvparena.arena;

import java.util.Collection;

import net.slipcor.pvparena.listeners.EntityListener;
import org.bukkit.GameMode;
import org.bukkit.entity.Player;
import org.bukkit.potion.PotionEffect;

/**
 * player state class
 * 
 * -
 * 
 * contains player state methods and variables in order to save and load a
 * player state
 * 
 * @author slipcor
 * 
 * @version v0.7.8
 * 
 */

public final class PlayerState {
File
PlayerState.java
Developer's decision
Version 2
Kind of conflict
Comment
Import
Chunk
Conflicting content
	private int foodlevel;
	private int gamemode;
	private int health;
<<<<<<< HEAD
	
	public PlayerState(Player player) {
		this.player = player;
=======

	private float exhaustion;
	private float experience;
	private int explevel;
	private float saturation;
	private String displayname;
	private Collection potionEffects;

	public PlayerState(Player player) {
		this.player = player;

>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
		this.fireticks = player.getFireTicks();
		this.foodlevel = player.getFoodLevel();
		this.gamemode = player.getGameMode().getValue();
Solution content
	private int foodlevel;
	private int gamemode;
	private int health;

	private float exhaustion;
	private float experience;
	private int explevel;
	private float saturation;
	private String displayname;
	private Collection potionEffects;

	public PlayerState(Player player) {
		this.player = player;

		this.fireticks = player.getFireTicks();
		this.foodlevel = player.getFoodLevel();
		this.gamemode = player.getGameMode().getValue();
File
PlayerState.java
Developer's decision
Version 2
Kind of conflict
Attribute
Method signature
Chunk
Conflicting content
		this.foodlevel = player.getFoodLevel();
		this.gamemode = player.getGameMode().getValue();
		this.health = player.getHealth();
<<<<<<< HEAD
=======

		this.exhaustion = player.getExhaustion();
		this.experience = player.getExp();
		this.explevel = player.getLevel();
		this.saturation = player.getSaturation();

		this.potionEffects = player.getActivePotionEffects();

		ArenaPlayer ap = ArenaPlayer.parsePlayer(player);

		if (ap.getArena().cfg.getBoolean("messages.colorNick", true)) {
			this.displayname = player.getDisplayName();
		}
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
	}

	public void load() {
Solution content
		this.foodlevel = player.getFoodLevel();
		this.gamemode = player.getGameMode().getValue();
		this.health = player.getHealth();

		this.exhaustion = player.getExhaustion();
		this.experience = player.getExp();
		this.explevel = player.getLevel();
		this.saturation = player.getSaturation();

		this.potionEffects = player.getActivePotionEffects();

		ArenaPlayer ap = ArenaPlayer.parsePlayer(player);

		if (ap.getArena().cfg.getBoolean("messages.colorNick", true)) {
			this.displayname = player.getDisplayName();
		}
	}

	public void load() {
File
PlayerState.java
Developer's decision
Version 2
Kind of conflict
Attribute
If statement
Method invocation
Variable
Chunk
Conflicting content
		player.setFoodLevel(foodlevel);
		player.setGameMode(GameMode.getByValue(gamemode));
		player.setHealth(health);
<<<<<<< HEAD
=======

		ArenaPlayer ap = ArenaPlayer.parsePlayer(player);
		player.setFoodLevel(foodlevel);
		player.setHealth(health);
		player.setSaturation(saturation);
		player.setGameMode(GameMode.getByValue(gamemode));
		player.setLevel(explevel);
		player.setExp(experience);
		player.setExhaustion(exhaustion);
		if (ap.getArena().cfg.getBoolean("messages.colorNick", true)) {
			player.setDisplayName(displayname);
		}

		for (PotionEffect pe : player.getActivePotionEffects()) {
			player.addPotionEffect(new PotionEffect(pe.getType(), 0, 0));
		}

		player.addPotionEffects(potionEffects);

		ArenaPlayer.parsePlayer(player).setTelePass(false);
		EntityListener.addBurningPlayer(player);
		player.setFireTicks(fireticks);
		player.setNoDamageTicks(60);
	}

	public void reset() {
		fireticks = 0;
		foodlevel = 0;
		gamemode = 0;
		health = 0;

		exhaustion = 0;
		experience = 0;
		explevel = 0;
		saturation = 0;
		displayname = null;
		potionEffects = null;
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
	}
}
Solution content
		player.setFoodLevel(foodlevel);
		player.setGameMode(GameMode.getByValue(gamemode));
		player.setHealth(health);

		ArenaPlayer ap = ArenaPlayer.parsePlayer(player);
		player.setFoodLevel(foodlevel);
		player.setHealth(health);
		player.setSaturation(saturation);
		player.setGameMode(GameMode.getByValue(gamemode));
		player.setLevel(explevel);
		player.setExp(experience);
		player.setExhaustion(exhaustion);
		if (ap.getArena().cfg.getBoolean("messages.colorNick", true)) {
			player.setDisplayName(displayname);
		}

		for (PotionEffect pe : player.getActivePotionEffects()) {
			player.addPotionEffect(new PotionEffect(pe.getType(), 0, 0));
		}

		player.addPotionEffects(potionEffects);

		ArenaPlayer.parsePlayer(player).setTelePass(false);
		EntityListener.addBurningPlayer(player);
		player.setFireTicks(fireticks);
		player.setNoDamageTicks(60);
	}

	public void reset() {
		fireticks = 0;
		foodlevel = 0;
		gamemode = 0;
		health = 0;

		exhaustion = 0;
		experience = 0;
		explevel = 0;
		saturation = 0;
		displayname = null;
		potionEffects = null;
	}
}
File
PlayerState.java
Developer's decision
Version 2
Kind of conflict
Attribute
For statement
If statement
Method invocation
Method signature
Variable
Chunk
Conflicting content
 * 
 * @author slipcor
 * 
<<<<<<< HEAD
 * @version v0.6.40
=======
 * @version v0.7.0
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
 * 
 */
Solution content
 * 
 * @author slipcor
 * 
 * @version v0.7.0
 * 
 */
File
Debug.java
Developer's decision
Version 2
Kind of conflict
Comment
Chunk
Conflicting content
 * 
 * @author slipcor
 * 
<<<<<<< HEAD
 * @version v0.6.40
=======
 * @version v0.7.9
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
 * 
 */
public class Language {
Solution content
 * 
 * @author slipcor
 * 
 * @version v0.7.9
 * 
 */
public class Language {
File
Language.java
Developer's decision
Version 2
Kind of conflict
Comment
Chunk
Conflicting content
		config.addDefault("lang.spawnremoved", "Spawn removed: %1%");
		config.addDefault("lang.regionremoved", "Region removed: %1%");

<<<<<<< HEAD
		config.addDefault("lang.domscore",
				"Team %1% scored a point by holding a flag!");
		config.addDefault("lang.domclaiming",
				"Team %1% is claiming a flag!");
		config.addDefault("lang.domunclaiming",
				"A flag claimed by Team %1% is being unclaimed!");
		config.addDefault("lang.domunclaimingby",
				"A flag claimed by Team %1% is being unclaimed by %2%!");
		config.addDefault("lang.spawnremoved", "Spawn removed: %1%");
		config.addDefault("lang.regionremoved", "Region removed: %1%");

		config.addDefault("lang.select2", "Select two points before trying to save.");
=======
		config.addDefault("lang.select2",
				"Select two points before trying to save.");
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b

		config.addDefault("lang.joinarena",
				"Arena is starting! Type /pa %1% to join!");
Solution content
		config.addDefault("lang.spawnremoved", "Spawn removed: %1%");
		config.addDefault("lang.regionremoved", "Region removed: %1%");

		config.addDefault("lang.select2",
				"Select two points before trying to save.");

		config.addDefault("lang.joinarena",
				"Arena is starting! Type /pa %1% to join!");
File
Language.java
Developer's decision
Version 2
Kind of conflict
Method invocation
Chunk
Conflicting content
	protected World world;
	public String name;
	private regionType type;
<<<<<<< HEAD
=======
	private HashMap invs = new HashMap();
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b

	public static enum regionType {
		CUBOID, SPHERIC
Solution content
	protected World world;
	public String name;
	private regionType type;
	private HashMap invs = new HashMap();

	public static enum regionType {
		CUBOID, SPHERIC
File
ArenaRegion.java
Developer's decision
Version 2
Kind of conflict
Attribute
Method invocation
Chunk
Conflicting content
						Material.WOOL, (byte) 0);
			}
		} else {
<<<<<<< HEAD
			//TODO - sphere generation
		}
	}
	
	public regionType getTye() {
		return type;
	}
}
=======
			// TODO - sphere generation
		}
	}

	public regionType getType() {
		return type;
	}

	public void saveChests() {
		invs.clear();
		int x;
		int y;
		int z;
		if (type.equals(regionType.CUBOID)) {

			for (x = min.getBlockX(); x <= max.getBlockX(); x++) {
				for (y = min.getBlockY(); y <= max.getBlockY(); y++) {
					for (z = min.getBlockZ(); z <= max.getBlockZ(); z++) {
						Block b = world.getBlockAt(x, y, z);
						if (b.getType() != Material.CHEST) {
							continue;
						}
						Chest c = (Chest) b.getState();

						invs.put(b.getLocation(), c.getInventory()
								.getContents().clone());
					}
				}

			}
		} else if (type.equals(regionType.SPHERIC)) {
			for (x = min.getBlockX(); x <= max.getBlockX(); x++) {
				for (y = min.getBlockY(); y <= max.getBlockY(); y++) {
					for (z = min.getBlockZ(); z <= max.getBlockZ(); z++) {
						Block b = world.getBlockAt(x, y, z);
						if (b.getType() != Material.CHEST) {
							continue;
						}
						if (!contains(b.getLocation())) {
							continue;
						}
						Chest c = (Chest) b.getState();

						invs.put(b.getLocation(), c.getInventory()
								.getContents().clone());
					}
				}

			}
		}
	}

	public void restoreChests() {
		db.i("restoring chests");
		for (Location loc : invs.keySet()) {
			try {
				db.i("trying to restore chest: " + loc.toString());
				((Chest) world.getBlockAt(loc).getState()).getInventory()
						.setContents(invs.get(loc));
				db.i("success!");
			} catch (Exception e) {
				//
			}
		}
	}
}
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
Solution content
						Material.WOOL, (byte) 0);
			}
		} else {
			// TODO - sphere generation
		}
	}

	public regionType getType() {
		return type;
	}

	public void saveChests() {
		invs.clear();
		int x;
		int y;
		int z;
		if (type.equals(regionType.CUBOID)) {

			for (x = min.getBlockX(); x <= max.getBlockX(); x++) {
				for (y = min.getBlockY(); y <= max.getBlockY(); y++) {
					for (z = min.getBlockZ(); z <= max.getBlockZ(); z++) {
						Block b = world.getBlockAt(x, y, z);
						if (b.getType() != Material.CHEST) {
							continue;
						}
						Chest c = (Chest) b.getState();

						invs.put(b.getLocation(), c.getInventory()
								.getContents().clone());
					}
				}

			}
		} else if (type.equals(regionType.SPHERIC)) {
			for (x = min.getBlockX(); x <= max.getBlockX(); x++) {
				for (y = min.getBlockY(); y <= max.getBlockY(); y++) {
					for (z = min.getBlockZ(); z <= max.getBlockZ(); z++) {
						Block b = world.getBlockAt(x, y, z);
						if (b.getType() != Material.CHEST) {
							continue;
						}
						if (!contains(b.getLocation())) {
							continue;
						}
						Chest c = (Chest) b.getState();

						invs.put(b.getLocation(), c.getInventory()
								.getContents().clone());
					}
				}

			}
		}
	}

	public void restoreChests() {
		db.i("restoring chests");
		for (Location loc : invs.keySet()) {
			try {
				db.i("trying to restore chest: " + loc.toString());
				((Chest) world.getBlockAt(loc).getState()).getInventory()
						.setContents(invs.get(loc));
				db.i("success!");
			} catch (Exception e) {
				//
			}
		}
	}
}
File
ArenaRegion.java
Developer's decision
Version 2
Kind of conflict
Comment
Method declaration
Chunk
Conflicting content
 * 
 * is thrown when a player dies in the arena
 * 
<<<<<<< HEAD
 * @version 0.6.29
=======
 * @version v0.7.8
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
 * 
 * @author slipcor
 * 
Solution content
 * 
 * is thrown when a player dies in the arena
 * 
 * @version v0.7.8
 * 
 * @author slipcor
 * 
File
PADeathEvent.java
Developer's decision
Version 2
Kind of conflict
Comment
Chunk
Conflicting content
 * 
 * is thrown when an arena match ends
 * 
<<<<<<< HEAD
 * @version 0.6.29
=======
 * @version v0.7.8
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
 * 
 * @author slipcor
 * 
Solution content
 * 
 * is thrown when an arena match ends
 * 
 * @version v0.7.8
 * 
 * @author slipcor
 * 
File
PAEndEvent.java
Developer's decision
Version 2
Kind of conflict
Comment
Chunk
Conflicting content
 * 
 * is thrown when a player joins the arena
 * 
<<<<<<< HEAD
 * @version 0.6.29
=======
 * @version v0.7.8
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
 * 
 * @author slipcor
 * 
Solution content
 * 
 * is thrown when a player joins the arena
 * 
 * @version v0.7.8
 * 
 * @author slipcor
 * 
File
PAJoinEvent.java
Developer's decision
Version 2
Kind of conflict
Comment
Chunk
Conflicting content
 * 
 * is thrown when a player kills in the arena
 * 
<<<<<<< HEAD
 * @version 0.6.36
=======
 * @version v0.7.8
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
 * 
 * @author slipcor
 * 
Solution content
 * 
 * is thrown when a player kills in the arena
 * 
 * @version v0.7.8
 * 
 * @author slipcor
 * 
File
PAKillEvent.java
Developer's decision
Version 2
Kind of conflict
Comment
Chunk
Conflicting content
 * 
 * is thrown when a player leaves the arena
 * 
<<<<<<< HEAD
 * @version 0.6.29
=======
 * @version v0.7.8
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
 * 
 * @author slipcor
 * 
Solution content
 * 
 * is thrown when a player leaves the arena
 * 
 * @version v0.7.8
 * 
 * @author slipcor
 * 
File
PALeaveEvent.java
Developer's decision
Version 2
Kind of conflict
Comment
Chunk
Conflicting content
 * 
 * is thrown when an arena match starts
 * 
<<<<<<< HEAD
 * @version 0.6.29
=======
 * @version v0.7.8
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
 * 
 * @author slipcor
 * 
Solution content
 * 
 * is thrown when an arena match starts
 * 
 * @version v0.7.8
 * 
 * @author slipcor
 * 
File
PAStartEvent.java
Developer's decision
Version 2
Kind of conflict
Comment
Chunk
Conflicting content
import net.slipcor.pvparena.PVPArena;
import net.slipcor.pvparena.core.Debug;
<<<<<<< HEAD
import net.slipcor.pvparena.core.Language;
import net.slipcor.pvparena.definitions.Arena;
import net.slipcor.pvparena.definitions.ArenaBoard;
=======
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
import net.slipcor.pvparena.managers.Arenas;
import net.slipcor.pvparena.managers.Teams;
Solution content
import net.slipcor.pvparena.PVPArena;
import net.slipcor.pvparena.arena.Arena;
import net.slipcor.pvparena.core.Debug;
import net.slipcor.pvparena.managers.Arenas;
import net.slipcor.pvparena.managers.Teams;
File
BlockListener.java
Developer's decision
Manual
Kind of conflict
Import
Chunk
Conflicting content
 * 
 * @author slipcor
 * 
<<<<<<< HEAD
 * @version v0.6.29
=======
 * @version v0.7.9
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
 * 
 */
Solution content
 * 
 * @author slipcor
 * 
 * @version v0.7.9
 * 
 */
File
BlockListener.java
Developer's decision
Version 2
Kind of conflict
Comment
Chunk
Conflicting content
import net.slipcor.pvparena.PVPArena;
import net.slipcor.pvparena.core.Debug;
import net.slipcor.pvparena.core.Language;
<<<<<<< HEAD
import net.slipcor.pvparena.definitions.Announcement;
import net.slipcor.pvparena.definitions.Announcement.type;
import net.slipcor.pvparena.definitions.Arena;
import net.slipcor.pvparena.definitions.Powerup;
import net.slipcor.pvparena.definitions.PowerupEffect;
=======
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
import net.slipcor.pvparena.managers.Arenas;
import net.slipcor.pvparena.managers.Inventories;
import net.slipcor.pvparena.managers.Spawns;
Solution content
import net.slipcor.pvparena.PVPArena;
import net.slipcor.pvparena.arena.Arena;
import net.slipcor.pvparena.arena.ArenaPlayer;
import net.slipcor.pvparena.arena.ArenaTeam;
import net.slipcor.pvparena.core.Debug;
import net.slipcor.pvparena.core.Language;
import net.slipcor.pvparena.managers.Arenas;
import net.slipcor.pvparena.managers.Inventories;
import net.slipcor.pvparena.managers.Spawns;
File
EntityListener.java
Developer's decision
Manual
Kind of conflict
Import
Chunk
Conflicting content
 * 
 * @author slipcor
 * 
<<<<<<< HEAD
 * @version v0.6.40
=======
 * @version v0.7.9
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
 * 
 */
Solution content
 * 
 * @author slipcor
 * 
 * @version v0.7.9
 * 
 */
File
EntityListener.java
Developer's decision
Version 2
Kind of conflict
Comment
Chunk
Conflicting content
			cause = ((EntityDamageEvent) eEvent);
		}
		EntityListener.addBurningPlayer(player);
<<<<<<< HEAD
		String sTeam = Players.getTeam(player);
		Announcement.announce(arena, type.LOSER, Language.parse("killedby",
				player.getName(), Players.parseDeathCause(arena, player, player
						.getLastDamageCause().getCause(), Players.getLastDamagingPlayer(player.getLastDamageCause()))));
		Players.tellEveryone(arena, Language.parse("killedby",
				arena.colorizePlayerByTeam(player, sTeam) + ChatColor.YELLOW,
				Players.parseDeathCause(arena, player, player
						.getLastDamageCause().getCause(), Players.getLastDamagingPlayer(player.getLastDamageCause()))));

		Players.parsePlayer(player).losses++;
		Players.setTeam(player, ""); // needed so player does not
										// get found when dead
=======
		ArenaPlayer ap = ArenaPlayer.parsePlayer(player);
		ArenaTeam team = Teams.getTeam(arena, ap);
		PVPArena.instance.getAmm().commitPlayerDeath(arena, player, cause);
		arena.tellEveryone(Language.parse(
				"killedby",
				team.colorizePlayer(player) + ChatColor.YELLOW,
				arena.parseDeathCause(player, cause.getCause(),
						ArenaPlayer.getLastDamagingPlayer(cause))));

		ap.losses++;
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b

		if (arena.isCustomClassActive()
				&& arena.cfg.getBoolean("game.allowDrops")) {
Solution content
			cause = ((EntityDamageEvent) eEvent);
		}
		EntityListener.addBurningPlayer(player);
		ArenaPlayer ap = ArenaPlayer.parsePlayer(player);
		ArenaTeam team = Teams.getTeam(arena, ap);
		PVPArena.instance.getAmm().commitPlayerDeath(arena, player, cause);
		arena.tellEveryone(Language.parse(
				"killedby",
				team.colorizePlayer(player) + ChatColor.YELLOW,
				arena.parseDeathCause(player, cause.getCause(),
						ArenaPlayer.getLastDamagingPlayer(cause))));

		ap.losses++;

		if (arena.isCustomClassActive()
				&& arena.cfg.getBoolean("game.allowDrops")) {
File
EntityListener.java
Developer's decision
Version 2
Kind of conflict
Comment
Method invocation
Variable
Chunk
Conflicting content
			db.i("onEntityDamageByBLOCKDAMAGE: arena player");

<<<<<<< HEAD
			if (Players.getPlayerTeamMap(arena).get(defender.getName()) == null) {
=======
			boolean inTeam = false;
			ArenaPlayer ap = ArenaPlayer.parsePlayer(defender);

			for (ArenaTeam team : arena.getTeams()) {
				if (team.getTeamMembers().contains(ap)) {
					inTeam = true;
					break;
				}
			}

			if (!inTeam) {
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
				return;
			}
Solution content
			db.i("onEntityDamageByBLOCKDAMAGE: arena player");

			boolean inTeam = false;
			ArenaPlayer ap = ArenaPlayer.parsePlayer(defender);

			for (ArenaTeam team : arena.getTeams()) {
				if (team.getTeamMembers().contains(ap)) {
					inTeam = true;
					break;
				}
			}

			if (!inTeam) {
				return;
			}
File
EntityListener.java
Developer's decision
Version 2
Kind of conflict
For statement
If statement
Method invocation
Variable
Chunk
Conflicting content
		Player attacker = (Player) p1;
		Player defender = (Player) p2;

<<<<<<< HEAD
		if (Players.getTeam(defender).equals("")
				|| Players.parsePlayer(attacker) == null) {
=======
		boolean defTeam = false;
		boolean attTeam = false;
		ArenaPlayer apDefender = ArenaPlayer.parsePlayer(defender);
		ArenaPlayer apAttacker = ArenaPlayer.parsePlayer(attacker);

		for (ArenaTeam team : arena.getTeams()) {
			defTeam = defTeam ? true : team.getTeamMembers().contains(
					apDefender);
			attTeam = attTeam ? true : team.getTeamMembers().contains(
					apAttacker);
		}

		if (!defTeam || !attTeam) {
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
			event.setCancelled(true);
			return;
		}
Solution content
		Player attacker = (Player) p1;
		Player defender = (Player) p2;

		boolean defTeam = false;
		boolean attTeam = false;
		ArenaPlayer apDefender = ArenaPlayer.parsePlayer(defender);
		ArenaPlayer apAttacker = ArenaPlayer.parsePlayer(attacker);

		for (ArenaTeam team : arena.getTeams()) {
			defTeam = defTeam ? true : team.getTeamMembers().contains(
					apDefender);
			attTeam = attTeam ? true : team.getTeamMembers().contains(
					apAttacker);
		}

		if (!defTeam || !attTeam) {
			event.setCancelled(true);
			return;
		}
File
EntityListener.java
Developer's decision
Version 2
Kind of conflict
For statement
If statement
Method invocation
Variable
Chunk
Conflicting content
		}

		if ((!arena.cfg.getBoolean("game.teamKill", false))
<<<<<<< HEAD
				&& (Players.getTeam(attacker))
						.equals(Players.getTeam(defender))) {
=======
				&& (Teams.getTeam(arena, apAttacker)).equals(Teams.getTeam(
						arena, apDefender))) {
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
			// no team fights!
			db.i("team hit, cancel!");
			event.setCancelled(true);
Solution content
		}

		if ((!arena.cfg.getBoolean("game.teamKill", false))
				&& (Teams.getTeam(arena, apAttacker)).equals(Teams.getTeam(
						arena, apDefender))) {
			// no team fights!
			db.i("team hit, cancel!");
			event.setCancelled(true);
File
EntityListener.java
Developer's decision
Version 2
Kind of conflict
Method invocation
Chunk
Conflicting content
	public void onEntityExplode(EntityExplodeEvent event) {
		db.i("explosion");

<<<<<<< HEAD
		if (Players.getTeam(player).equals("")
				|| Players.parsePlayer(player).spectator) {
			event.setCancelled(true);
=======
		Arena arena = Arenas.getArenaByRegionLocation(event.getLocation());
		if (arena == null)
			return; // no arena => out

		db.i("explosion inside an arena");
		if ((!(arena.cfg.getBoolean("protection.enabled", true)))
				|| (!(arena.cfg.getBoolean("protection.blockdamage", true)))
				|| (!(event.getEntity() instanceof TNTPrimed))) {
			PVPArena.instance.getAmm().onEntityExplode(arena, event);
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
			return;
		}
Solution content
	public void onEntityExplode(EntityExplodeEvent event) {
		db.i("explosion");

		Arena arena = Arenas.getArenaByRegionLocation(event.getLocation());
		if (arena == null)
			return; // no arena => out

		db.i("explosion inside an arena");
		if ((!(arena.cfg.getBoolean("protection.enabled", true)))
				|| (!(arena.cfg.getBoolean("protection.blockdamage", true)))
				|| (!(event.getEntity() instanceof TNTPrimed))) {
			PVPArena.instance.getAmm().onEntityExplode(arena, event);
			return;
		}
File
EntityListener.java
Developer's decision
Version 2
Kind of conflict
Comment
If statement
Method invocation
Variable
Chunk
Conflicting content
		}

		Player player = (Player) p1;
<<<<<<< HEAD
		if (Players.getTeam(player).equals(""))
			return;
=======

		ArenaPlayer ap = ArenaPlayer.parsePlayer(player);
		ArenaTeam team = Teams.getTeam(arena, ap);
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b

		if (team == null) {
			return;
Solution content
		}

		Player player = (Player) p1;

		ArenaPlayer ap = ArenaPlayer.parsePlayer(player);
		ArenaTeam team = Teams.getTeam(arena, ap);

		if (team == null) {
			return;
File
EntityListener.java
Developer's decision
Version 2
Kind of conflict
If statement
Method invocation
Variable
Chunk
Conflicting content
import net.slipcor.pvparena.core.Debug;
import net.slipcor.pvparena.core.Language;
import net.slipcor.pvparena.core.Update;
<<<<<<< HEAD
import net.slipcor.pvparena.definitions.Arena;
import net.slipcor.pvparena.definitions.ArenaBoard;
import net.slipcor.pvparena.definitions.ArenaPlayer;
import net.slipcor.pvparena.definitions.Powerup;
import net.slipcor.pvparena.definitions.PowerupEffect;
=======
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
import net.slipcor.pvparena.managers.Arenas;
import net.slipcor.pvparena.managers.Regions;
import net.slipcor.pvparena.managers.Spawns;
Solution content
import net.slipcor.pvparena.core.Debug;
import net.slipcor.pvparena.core.Language;
import net.slipcor.pvparena.core.Update;
import net.slipcor.pvparena.managers.Arenas;
import net.slipcor.pvparena.managers.Regions;
import net.slipcor.pvparena.managers.Spawns;
File
PlayerListener.java
Developer's decision
Version 2
Kind of conflict
Import
Chunk
Conflicting content
 * 
 * @author slipcor
 * 
<<<<<<< HEAD
 * @version v0.6.41
=======
 * @version v0.7.9
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
 * 
 */
Solution content
 * 
 * @author slipcor
 * 
 * @version v0.7.9
 * 
 */
File
PlayerListener.java
Developer's decision
Version 2
Kind of conflict
Comment
Chunk
Conflicting content
		Player player = event.getPlayer();

		Arena arena = Arenas.getArenaByPlayer(player);
<<<<<<< HEAD
		if (arena == null || Players.getTeam(player).equals("")) {
=======
		ArenaPlayer ap = ArenaPlayer.parsePlayer(player);

		if (arena == null) {
			return; // no fighting player => OUT
		}
		ArenaTeam team = Teams.getTeam(arena, ap);
		if (team == null) {
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
			return; // no fighting player => OUT
		}
		db.i("fighting player chatting!");
Solution content
		Player player = event.getPlayer();

		Arena arena = Arenas.getArenaByPlayer(player);
		ArenaPlayer ap = ArenaPlayer.parsePlayer(player);

		if (arena == null) {
			return; // no fighting player => OUT
		}
		ArenaTeam team = Teams.getTeam(arena, ap);
		if (team == null) {
			return; // no fighting player => OUT
		}
		db.i("fighting player chatting!");
File
PlayerListener.java
Developer's decision
Version 2
Kind of conflict
If statement
Method invocation
Variable
Chunk
Conflicting content
				return; // player not chatting
			}

<<<<<<< HEAD
			String sTeam = Players.getTeam(player);
			Players.tellTeam(arena, sTeam, event.getMessage(),
					ChatColor.valueOf(arena.paTeams.get(sTeam)), event.getPlayer());
			event.setCancelled(true);
		}
		
		if (arena.cfg.getBoolean("messages.chat") && arena.paChat.contains(player.getName())) {
			String sTeam = Players.getTeam(player);
			Players.tellTeam(arena, sTeam, event.getMessage(),
					ChatColor.valueOf(arena.paTeams.get(sTeam)), event.getPlayer());
			event.setCancelled(true);
			return;
		}
		
		String sTeam = Players.getTeam(player);
		Players.tellEveryone(arena, event.getMessage(),
				ChatColor.valueOf(arena.paTeams.get(sTeam)), event.getPlayer());
=======
			arena.tellTeam(sTeam, event.getMessage(), team.getColor(),
					event.getPlayer());
			event.setCancelled(true);
		}

		if (arena.cfg.getBoolean("messages.chat")
				&& arena.chatters.contains(player.getName())) {
			arena.tellTeam(sTeam, event.getMessage(), team.getColor(),
					event.getPlayer());
			event.setCancelled(true);
			return;
		}

		arena.tellEveryoneColored(event.getMessage(), team.getColor(),
				event.getPlayer());
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
		event.setCancelled(true);
	}
Solution content
				return; // player not chatting
			}

			arena.tellTeam(sTeam, event.getMessage(), team.getColor(),
					event.getPlayer());
			event.setCancelled(true);
		}

		if (arena.cfg.getBoolean("messages.chat")
				&& arena.chatters.contains(player.getName())) {
			arena.tellTeam(sTeam, event.getMessage(), team.getColor(),
					event.getPlayer());
			event.setCancelled(true);
			return;
		}

		arena.tellEveryoneColored(event.getMessage(), team.getColor(),
				event.getPlayer());
		event.setCancelled(true);
	}
File
PlayerListener.java
Developer's decision
Version 2
Kind of conflict
If statement
Method invocation
Variable
Chunk
Conflicting content
			}
		}
		db.i("command blocked: " + event.getMessage());
<<<<<<< HEAD
		Arenas.tellPlayer(player, ChatColor.RED + event.getMessage(), arena.prefix);
=======
		Arenas.tellPlayer(player, ChatColor.RED + event.getMessage(), arena);
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
		event.setCancelled(true);
	}
Solution content
			}
		}
		db.i("command blocked: " + event.getMessage());
		Arenas.tellPlayer(player, ChatColor.RED + event.getMessage(), arena);
		event.setCancelled(true);
	}
File
PlayerListener.java
Developer's decision
Version 2
Kind of conflict
Method invocation
Chunk
Conflicting content
			return; // no fighting player => OUT

		db.i("onPlayerDropItem: fighting player");
<<<<<<< HEAD
		Arenas.tellPlayer(player, (Language.parse("dropitem")), arena.prefix);
=======
		Arenas.tellPlayer(player, (Language.parse("dropitem")), arena);
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
		event.setCancelled(true);
		// cancel the drop event for fighting players, with message
	}
Solution content
			return; // no fighting player => OUT

		db.i("onPlayerDropItem: fighting player");
		Arenas.tellPlayer(player, (Language.parse("dropitem")), arena);
		event.setCancelled(true);
		// cancel the drop event for fighting players, with message
	}
File
PlayerListener.java
Developer's decision
Version 2
Kind of conflict
Method invocation
Chunk
Conflicting content
			return;
		}

<<<<<<< HEAD
		/*
		 * //TODO
		 * 
		 * if (arena.cfg.getBoolean("arenatype.flags") &&
		 * arena.cfg.getBoolean("join.inbattle")) {
		 */
		
=======
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
		if (Regions.checkRegionSetPosition(event, player)) {
			return;
		}
Solution content
			return;
		}

		if (Regions.checkRegionSetPosition(event, player)) {
			return;
		}
File
PlayerListener.java
Developer's decision
Version 2
Kind of conflict
Comment
Chunk
Conflicting content
		// fighting player inside the lobby!
		event.setCancelled(true);
<<<<<<< HEAD
=======

		ArenaPlayer ap = ArenaPlayer.parsePlayer(player);
		ArenaTeam team = Teams.getTeam(arena, ap);

		if (team == null) {
			return;
		}
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b

		if (event.getAction().equals(Action.LEFT_CLICK_BLOCK)) {
			Block block = event.getClickedBlock();
Solution content
		// fighting player inside the lobby!
		event.setCancelled(true);

		ArenaPlayer ap = ArenaPlayer.parsePlayer(player);
		ArenaTeam team = Teams.getTeam(arena, ap);

		if (team == null) {
			return;
		}

		if (event.getAction().equals(Action.LEFT_CLICK_BLOCK)) {
			Block block = event.getClickedBlock();
File
PlayerListener.java
Developer's decision
Version 2
Kind of conflict
If statement
Method invocation
Variable
Chunk
Conflicting content
				db.i("sign click!");
				Sign sign = (Sign) block.getState();

<<<<<<< HEAD
				if ((arena.paClassItems.containsKey(sign.getLine(0)) || (sign
						.getLine(0).equalsIgnoreCase("custom")))
						&& (!Players.getTeam(player).equals(""))) {
=======
				if ((sign.getLine(0).equalsIgnoreCase("custom"))
						|| arena.classExists(sign.getLine(0)) && (team != null)) {
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b

					arena.forceChooseClass(player, sign, sign.getLine(0));
				}
Solution content
				db.i("sign click!");
				Sign sign = (Sign) block.getState();

				if ((sign.getLine(0).equalsIgnoreCase("custom"))
						|| arena.classExists(sign.getLine(0)) && (team != null)) {

					arena.forceChooseClass(player, sign, sign.getLine(0));
				}
File
PlayerListener.java
Developer's decision
Version 2
Kind of conflict
If statement
Chunk
Conflicting content
					+ "?");
			if (block.getTypeId() == mMat.getId()) {
				db.i("clicked ready block!");
<<<<<<< HEAD
				if (Players.getTeam(player).equals("")) {
					return; // not a fighting player => OUT
				}
				if (Players.getClass(player).equals("")) {
=======
				if (ap.getClass().equals("")) {
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
					return; // not chosen class => OUT
				}
				if (arena.START_ID != -1) {
Solution content
					+ "?");
			if (block.getTypeId() == mMat.getId()) {
				db.i("clicked ready block!");
				if (ap.getClass().equals("")) {
					return; // not chosen class => OUT
				}
				if (arena.START_ID != -1) {
File
PlayerListener.java
Developer's decision
Version 2
Kind of conflict
If statement
Chunk
Conflicting content
				if (arena.START_ID != -1) {
					return; // counting down => OUT
				}
<<<<<<< HEAD
=======

>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
				db.i("===============");
				db.i("===== class: " + ap.getClass() + " =====");
				db.i("===============");
Solution content
				if (arena.START_ID != -1) {
					return; // counting down => OUT
				}

				db.i("===============");
				db.i("===== class: " + ap.getClass() + " =====");
				db.i("===============");
File
PlayerListener.java
Developer's decision
Version 1
Kind of conflict
Blank
Chunk
Conflicting content
					if (arena.cfg.getBoolean("join.forceEven", false)) {
						if (!Teams.checkEven(arena)) {
							Arenas.tellPlayer(player,
<<<<<<< HEAD
									Language.parse("waitequal"), arena.prefix);
=======
									Language.parse("waitequal"), arena);
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
							return; // even teams desired, not done => announce
						}
					}
Solution content
					if (arena.cfg.getBoolean("join.forceEven", false)) {
						if (!Teams.checkEven(arena)) {
							Arenas.tellPlayer(player,
									Language.parse("waitequal"), arena);
							return; // even teams desired, not done => announce
						}
					}
File
PlayerListener.java
Developer's decision
Version 2
Kind of conflict
Method invocation
Variable
Chunk
Conflicting content
					if (!Regions.checkRegions(arena)) {
						Arenas.tellPlayer(player,
<<<<<<< HEAD
								Language.parse("checkregionerror"), arena.prefix);
=======
								Language.parse("checkregionerror"), arena);
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
						return;
					}
Solution content
					if (!Regions.checkRegions(arena)) {
						Arenas.tellPlayer(player,
								Language.parse("checkregionerror"), arena);
						return;
					}
File
PlayerListener.java
Developer's decision
Version 2
Kind of conflict
Method invocation
Variable
Chunk
Conflicting content
					db.i("===============");

					if (ready == 0) {
<<<<<<< HEAD
						Arenas.tellPlayer(player, Language.parse("notready"), arena.prefix);
						return; // team not ready => announce
					} else if (ready == -1) {
						Arenas.tellPlayer(player, Language.parse("notready1"), arena.prefix);
						return; // team not ready => announce
					} else if (ready == -2) {
						Arenas.tellPlayer(player, Language.parse("notready2"), arena.prefix);
						return; // team not ready => announce
					} else if (ready == -3) {
						Arenas.tellPlayer(player, Language.parse("notready3"), arena.prefix);
						return; // team not ready => announce
					} else if (ready == -4) {
						Arenas.tellPlayer(player, Language.parse("notready4"), arena.prefix);
						return; // arena not ready => announce
					} else if (ready == -5) {
						Arenas.tellPlayer(player, Language.parse("notready5"), arena.prefix);
=======
						Arenas.tellPlayer(player, Language.parse("notready"),
								arena);
						return; // team not ready => announce
					} else if (ready == -1) {
						Arenas.tellPlayer(player, Language.parse("notready1"),
								arena);
						return; // team not ready => announce
					} else if (ready == -2) {
						Arenas.tellPlayer(player, Language.parse("notready2"),
								arena);
						return; // team not ready => announce
					} else if (ready == -3) {
						Arenas.tellPlayer(player, Language.parse("notready3"),
								arena);
						return; // team not ready => announce
					} else if (ready == -4) {
						Arenas.tellPlayer(player, Language.parse("notready4"),
								arena);
						return; // arena not ready => announce
					} else if (ready == -5) {
						Arenas.tellPlayer(player, Language.parse("notready5"),
								arena);
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
						return; // arena not ready => announce
					} else if (ready == -6) {
						arena.countDown();
Solution content
					db.i("===============");

					if (ready == 0) {
						Arenas.tellPlayer(player, Language.parse("notready"),
								arena);
						return; // team not ready => announce
					} else if (ready == -1) {
						Arenas.tellPlayer(player, Language.parse("notready1"),
								arena);
						return; // team not ready => announce
					} else if (ready == -2) {
						Arenas.tellPlayer(player, Language.parse("notready2"),
								arena);
						return; // team not ready => announce
					} else if (ready == -3) {
						Arenas.tellPlayer(player, Language.parse("notready3"),
								arena);
						return; // team not ready => announce
					} else if (ready == -4) {
						Arenas.tellPlayer(player, Language.parse("notready4"),
								arena);
						return; // arena not ready => announce
					} else if (ready == -5) {
						Arenas.tellPlayer(player, Language.parse("notready5"),
								arena);
						return; // arena not ready => announce
					} else if (ready == -6) {
						arena.countDown();
File
PlayerListener.java
Developer's decision
Version 2
Kind of conflict
Comment
If statement
Method invocation
Return statement
Chunk
Conflicting content
					return;
				}

<<<<<<< HEAD
				if (!arena.cfg.getBoolean("arenatype.randomSpawn", false)) {
					arena.tpPlayerToCoordName(
							player,
							Players.getPlayerTeamMap(arena).get(
									player.getName())
									+ "spawn");
=======
				if (!arena.type().allowsRandomSpawns()) {
					arena.tpPlayerToCoordName(player, team.getName() + "spawn");
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
				} else {
					arena.tpPlayerToCoordName(player, "spawn");
				}
Solution content
					return;
				}

				if (!arena.type().allowsRandomSpawns()) {
					arena.tpPlayerToCoordName(player, team.getName() + "spawn");
				} else {
					arena.tpPlayerToCoordName(player, "spawn");
				}
File
PlayerListener.java
Developer's decision
Version 2
Kind of conflict
If statement
Method invocation
Chunk
Conflicting content
	@EventHandler(priority = EventPriority.LOWEST)
	public void onPlayerJoin(PlayerJoinEvent event) {
		Player player = event.getPlayer();
<<<<<<< HEAD
		
		Players.parsePlayer(player).arena = null;
		// instantiate and/or reset a player. This fixes issues with leaving players
=======

		ArenaPlayer.parsePlayer(player).setArena(null);
		// instantiate and/or reset a player. This fixes issues with leaving
		// players
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
		// and makes sure every player is an arenaplayer ^^

		if (!player.isOp()) {
Solution content
	@EventHandler(priority = EventPriority.LOWEST)
	public void onPlayerJoin(PlayerJoinEvent event) {
		Player player = event.getPlayer();

		ArenaPlayer.parsePlayer(player).setArena(null);
		// instantiate and/or reset a player. This fixes issues with leaving
		// players
		// and makes sure every player is an arenaplayer ^^

		if (!player.isOp()) {
File
PlayerListener.java
Developer's decision
Version 2
Kind of conflict
Comment
Method invocation
Variable
Chunk
Conflicting content
		db.i("onPlayerTeleport: no tele pass, cancelling!");
		event.setCancelled(true); // cancel and tell
<<<<<<< HEAD
		Arenas.tellPlayer(player, Language.parse("usepatoexit"), arena.prefix);
=======
		Arenas.tellPlayer(player, Language.parse("usepatoexit"), arena);
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
	}

	@EventHandler(priority = EventPriority.HIGHEST)
Solution content
		db.i("onPlayerTeleport: no tele pass, cancelling!");
		event.setCancelled(true); // cancel and tell
		Arenas.tellPlayer(player, Language.parse("usepatoexit"), arena);
	}

	@EventHandler(priority = EventPriority.HIGHEST)
File
PlayerListener.java
Developer's decision
Version 2
Kind of conflict
Method invocation
Chunk
Conflicting content
import java.util.HashMap;
import java.util.Map;

<<<<<<< HEAD
import net.slipcor.pvparena.core.Debug;
import net.slipcor.pvparena.core.Language;
import net.slipcor.pvparena.definitions.Arena;
import net.slipcor.pvparena.definitions.ArenaBoard;
=======
import net.slipcor.pvparena.PVPArena;
import net.slipcor.pvparena.arena.Arena;
import net.slipcor.pvparena.core.Config;
import net.slipcor.pvparena.core.Debug;
import net.slipcor.pvparena.core.Language;
import net.slipcor.pvparena.definitions.ArenaRegion;
import net.slipcor.pvparena.neworder.ArenaType;
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b

import org.bukkit.ChatColor;
import org.bukkit.Location;
Solution content
import java.util.HashMap;
import java.util.Map;

import net.slipcor.pvparena.PVPArena;
import net.slipcor.pvparena.arena.Arena;
import net.slipcor.pvparena.core.Config;
import net.slipcor.pvparena.core.Debug;
import net.slipcor.pvparena.core.Language;
import net.slipcor.pvparena.definitions.ArenaRegion;
import net.slipcor.pvparena.neworder.ArenaType;

import org.bukkit.ChatColor;
import org.bukkit.Location;
File
Arenas.java
Developer's decision
Version 2
Kind of conflict
Import
Chunk
Conflicting content
 * 
 * @author slipcor
 * 
<<<<<<< HEAD
 * @version v0.6.41
=======
 * @version v0.7.9
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
 * 
 */
Solution content
 * 
 * @author slipcor
 * 
 * @version v0.7.9
 * 
 */
File
Arenas.java
Developer's decision
Version 2
Kind of conflict
Comment
Chunk
Conflicting content
	 */
	 * @param a
	 *            the arena sending this message
<<<<<<< HEAD
	public static void tellPlayer(Player player, String msg) {
		tellPlayer(player, msg, "PVP Arena");
	}

	/**
	 * send a message to a single player
	 * 
	 * @param player
	 *            the player to send to
	 * @param msg
	 *            the message to send
	 */
	public static void tellPlayer(Player player, String msg, String prefix) {
		db.i("@" + player.getName() + ": " + msg);
		player.sendMessage(ChatColor.YELLOW + "[" + prefix + "] " + ChatColor.WHITE
				+ msg);
=======
	public static void tellPlayer(Player player, String msg, Arena a) {
		db.i("@" + player.getName() + ": " + msg);
		player.sendMessage(ChatColor.YELLOW + "[" + a.prefix + "] "
				+ ChatColor.WHITE + msg);
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
	}

	/**
Solution content
	 * @param a
	 *            the arena sending this message
	 */
	public static void tellPlayer(Player player, String msg, Arena a) {
		db.i("@" + player.getName() + ": " + msg);
		player.sendMessage(ChatColor.YELLOW + "[" + a.prefix + "] "
				+ ChatColor.WHITE + msg);
	}

	/**
File
Arenas.java
Developer's decision
Version 2
Kind of conflict
Comment
Method declaration
Method invocation
Method signature
Chunk
Conflicting content
					String sName = sign.getLine(1);
					String[] newArgs = null;
					Arena a = arenas.get(sName);
<<<<<<< HEAD
					if (sign.getLine(2) != null && a.paTeams.containsKey(sign.getLine(2))) {
=======
					if (sign.getLine(2) != null
							&& Teams.getTeam(a, sign.getLine(2)) != null) {
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
						newArgs = new String[1];
						newArgs[0] = sign.getLine(2);
					}
Solution content
					String sName = sign.getLine(1);
					String[] newArgs = null;
					Arena a = arenas.get(sName);
					if (sign.getLine(2) != null
							&& Teams.getTeam(a, sign.getLine(2)) != null) {
						newArgs = new String[1];
						newArgs[0] = sign.getLine(2);
					}
File
Arenas.java
Developer's decision
Version 2
Kind of conflict
If statement
Chunk
Conflicting content
import net.slipcor.pvparena.PVPArena;
import net.slipcor.pvparena.core.Debug;
import net.slipcor.pvparena.core.Language;
<<<<<<< HEAD
import net.slipcor.pvparena.definitions.Announcement;
import net.slipcor.pvparena.definitions.Announcement.type;
import net.slipcor.pvparena.definitions.Arena;
import net.slipcor.pvparena.definitions.ArenaPlayer;
=======
import net.slipcor.pvparena.core.StringParser;
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
import net.slipcor.pvparena.definitions.ArenaRegion;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
Solution content
import net.slipcor.pvparena.PVPArena;
import net.slipcor.pvparena.arena.Arena;
import net.slipcor.pvparena.arena.ArenaPlayer;
import net.slipcor.pvparena.arena.ArenaTeam;
import net.slipcor.pvparena.core.Debug;
import net.slipcor.pvparena.core.Language;
import net.slipcor.pvparena.core.StringParser;
import net.slipcor.pvparena.definitions.ArenaRegion;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
File
Commands.java
Developer's decision
Manual
Kind of conflict
Import
Chunk
Conflicting content
 * 
 * @author slipcor
 * 
<<<<<<< HEAD
 * @version v0.6.41
=======
 * @version v0.7.9
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
 * 
 */
Solution content
 * 
 * @author slipcor
 * 
 * @version v0.7.9
 * 
 */
File
Commands.java
Developer's decision
Version 2
Kind of conflict
Comment
Chunk
Conflicting content
	private static Debug db = new Debug(25);

	/**
<<<<<<< HEAD
	 * check and commit chat command
	 * 
	 * @param arena
	 *            the arena to join
	 * @param player
	 *            the player who joins
	 * @return false if the command help should be displayed, true otherwise
	 */
	public static boolean parseChat(Arena arena, Player player) {
		if (arena.paChat.contains(player.getName())) {
			arena.paChat.remove(player.getName());
			Arenas.tellPlayer(player, "You now talk to the public!", arena.prefix);
		} else {
			arena.paChat.add(player.getName());
			Arenas.tellPlayer(player, "You now talk to your team!", arena.prefix);
		}
		return true;
	}

	/**
	 * check and commit join command
	 * 
	 * @param arena
	 *            the arena to join
	 * @param player
	 *            the player who joins
	 * @return false if the command help should be displayed, true otherwise
	 */
	public static boolean parseJoin(Arena arena, Player player) {
		// just /pa or /pvparena

		if (!checkJoin(arena, player)) {
			return true;
		}
		if (!arena.cfg.getBoolean("join.random", true)) {
			Arenas.tellPlayer(player, Language.parse("selectteam"), arena.prefix);
			return true;
		}
		}
		int entryfee = arena.cfg.getInt("money.entry", 0);

		if (Teams.calcFreeTeam(arena) == null
				|| ((arena.cfg.getInt("ready.max") > 0) && (arena.cfg
						.getInt("ready.max") <= Players
						.countPlayersInTeams(arena)))) {

			Arenas.tellPlayer(player, Language.parse("arenafull"), arena.prefix);
			return true;
		}

		arena.prepare(player, false);
		arena.paLives.put(player.getName(), arena.cfg.getInt("game.lives", 3));

		if (entryfee > 0) {
			if (PVPArena.economy != null) {
				PVPArena.economy.withdrawPlayer(player.getName(), entryfee);
				Arenas.tellPlayer(
						player,
						Language.parse("joinpay",
								PVPArena.economy.format(entryfee)), arena.prefix);
			} else if (PVPArena.eco != null) {
				MethodAccount ma = PVPArena.eco.getAccount(player.getName());
				ma.subtract(entryfee);
				Arenas.tellPlayer(player, Language.parse("joinpay",
						PVPArena.eco.format(entryfee)), arena.prefix);
			}
		}

		Teams.choosePlayerTeam(arena, player);
		Inventories.prepareInventory(arena, player);

		// process auto classing
		String autoClass = arena.cfg.getString("ready.autoclass");
		if (autoClass != null && !autoClass.equals("none")) {
			if (arena.paClassItems.containsKey(autoClass)) {
				Players.chooseClass(arena, player, null, autoClass);
			} else {
				db.w("autoclass selected that does not exist: " + autoClass);
			}
		}
		return true;
	}

	/**
	 * check and commit team join command
	 * 
	 * @param arena
	 *            the arena to join
	 * @param player
	 *            the player that joins
	 * @param sTeam
	 *            the team to join
	 * @return false if the command help should be displayed, true otherwise
	 */
	public static boolean parseJoinTeam(Arena arena, Player player, String sTeam) {

		// /pa [team] or /pvparena [team]

		if (!checkJoin(arena, player)) {
			return true;
		}

		if (!(arena.cfg.getBoolean("join.manual", true))) {
			Arenas.tellPlayer(player, Language.parse("notselectteam"), arena.prefix);
			return true;
		}
		int entryfee = arena.cfg.getInt("money.entry", 0);

		if (arena.cfg.getInt("ready.max") > 0
				&& arena.cfg.getInt("ready.max") <= Players
						.countPlayersInTeams(arena)) {

			Arenas.tellPlayer(player,
					Language.parse("teamfull", arena.colorizeTeam(sTeam)), arena.prefix);
			return true;
		}

		arena.prepare(player, false);
		arena.paLives.put(player.getName(), arena.cfg.getInt("game.lives", 3));

		if (entryfee > 0) {
			if (PVPArena.economy != null) {
				PVPArena.economy.withdrawPlayer(player.getName(), entryfee);
				Arenas.tellPlayer(
						player,
						Language.parse("joinpay",
								PVPArena.economy.format(entryfee)), arena.prefix);
			} else if (PVPArena.eco != null) {
				MethodAccount ma = PVPArena.eco.getAccount(player.getName());
				ma.subtract(entryfee);
				Arenas.tellPlayer(player, Language.parse("joinpay",
						PVPArena.eco.format(entryfee)), arena.prefix);
			}
		}

		arena.tpPlayerToCoordName(player, sTeam + "lounge");
		Players.setTeam(player, sTeam);
		Inventories.prepareInventory(arena, player);
		if (Players.getPlayerTeamMap(arena).size() < 2) {
			Announcement.announce(
					arena,
					type.START,
					Language.parse("joinarena", arena.name));
		Arenas.tellPlayer(player,
				Language.parse("youjoined", arena.colorizeTeam(sTeam)), arena.prefix);
		Announcement.announce(
				arena,
				type.JOIN,
				Language.parse("playerjoined", player.getName(),
						arena.colorizeTeam(sTeam)));
		Players.tellEveryoneExcept(
				arena,
				player,
				Language.parse("playerjoined", player.getName(),
						arena.colorizeTeam(sTeam)));

		// process auto classing
		String autoClass = arena.cfg.getString("ready.autoclass");
		if (autoClass != null && !autoClass.equals("none")) {
			if (arena.paClassItems.containsKey(autoClass)) {
				Players.chooseClass(arena, player, null, autoClass);
			} else {
				db.w("autoclass selected that does not exist: " + autoClass);
			}
		}

		return true;
	}

	/**
=======
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
	 * check various methods to see if the player may join the arena
	 * 
	 * @param arena
Solution content
	private static Debug db = new Debug(25);

	/**
	 * check various methods to see if the player may join the arena
	 * 
	 * @param arena
File
Commands.java
Developer's decision
Version 2
Kind of conflict
Comment
Method declaration
Chunk
Conflicting content
	private static boolean checkJoin(Arena arena, Player player) {
		String error = Configs.isSetup(arena);
		if (error != null) {
<<<<<<< HEAD
			Arenas.tellPlayer(player, Language.parse("arenanotsetup", error), arena.prefix);
=======
			Arenas.tellPlayer(player, Language.parse("arenanotsetup", error),
					arena);
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
			return false;
		}
Solution content
	private static boolean checkJoin(Arena arena, Player player) {
		String error = Configs.isSetup(arena);
		if (error != null) {
			Arenas.tellPlayer(player, Language.parse("arenanotsetup", error),
					arena);
			return false;
		}
File
Commands.java
Developer's decision
Version 2
Kind of conflict
Method invocation
Chunk
Conflicting content
		}

		if (!PVPArena.hasPerms(player, arena)) {
<<<<<<< HEAD
			Arenas.tellPlayer(player, Language.parse("permjoin"), arena.prefix);
=======
			Arenas.tellPlayer(player, Language.parse("permjoin"), arena);
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
			return false;
		}
Solution content
		}

		if (!PVPArena.hasPerms(player, arena)) {
			Arenas.tellPlayer(player, Language.parse("permjoin"), arena);
			return false;
		}
File
Commands.java
Developer's decision
Version 2
Kind of conflict
Method invocation
Chunk
Conflicting content
		}

		if (Arenas.getArenaByPlayer(player) != null) {
<<<<<<< HEAD
			if (!Players.isPartOf(arena, player)
					|| !Players.parsePlayer(player).spectator) {

				Arenas.tellPlayer(player, Language.parse("alreadyjoined"), arena.prefix);
				return false;
			}
		}

		if (player.isInsideVehicle()) {
			Arenas.tellPlayer(player, Language.parse("insidevehicle"), arena.prefix);
=======
			Arenas.tellPlayer(player, Language.parse("alreadyjoined"), arena);
			return false;
		}

		if (player.isInsideVehicle()) {
			Arenas.tellPlayer(player, Language.parse("insidevehicle"), arena);
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
			return false;
		}
Solution content
		}

		if (Arenas.getArenaByPlayer(player) != null) {
			Arenas.tellPlayer(player, Language.parse("alreadyjoined"), arena);
			return false;
		}

		if (player.isInsideVehicle()) {
			Arenas.tellPlayer(player, Language.parse("insidevehicle"), arena);
			return false;
		}
File
Commands.java
Developer's decision
Version 2
Kind of conflict
If statement
Method invocation
Return statement
Chunk
Conflicting content
		}

		if (!Arenas.checkJoin(player)) {
<<<<<<< HEAD
			Arenas.tellPlayer(player, Language.parse("notjoinregion"), arena.prefix);
=======
			Arenas.tellPlayer(player, Language.parse("notjoinregion"), arena);
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
			return false;
		}
Solution content
		}

		if (!Arenas.checkJoin(player)) {
			Arenas.tellPlayer(player, Language.parse("notjoinregion"), arena);
			return false;
		}
File
Commands.java
Developer's decision
Version 2
Kind of conflict
Method invocation
Chunk
Conflicting content
			if (arena.type().allowsJoinInBattle()) {
				return true;
			}
<<<<<<< HEAD
			Arenas.tellPlayer(player, Language.parse("fightinprogress"), arena.prefix);
=======
			Arenas.tellPlayer(player, Language.parse("fightinprogress"), arena);
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
			return false;
		}
Solution content
			if (arena.type().allowsJoinInBattle()) {
				return true;
			}
			Arenas.tellPlayer(player, Language.parse("fightinprogress"), arena);
			return false;
		}
File
Commands.java
Developer's decision
Version 2
Kind of conflict
Method invocation
Chunk
Conflicting content
		}

		if (Regions.tooFarAway(arena, player)) {
<<<<<<< HEAD
			Arenas.tellPlayer(player, Language.parse("joinrange"), arena.prefix);
			return false;
		}

		if (arena.cfg.getInt("money.entry", 0) > 0) {
			if (PVPArena.economy != null) {
				if (!PVPArena.economy.hasAccount(player.getName())) {
					db.s("Account not found: " + player.getName());
					return false;
				}
				if (!PVPArena.economy.has(player.getName(),
						arena.cfg.getInt("money.entry", 0))) {
					// no money, no entry!
					Arenas.tellPlayer(player, Language.parse("notenough",
							PVPArena.economy.format(arena.cfg.getInt(
									"money.entry", 0))), arena.prefix);
					return false;
				}
			} else if (PVPArena.eco != null) {
				MethodAccount ma = PVPArena.eco.getAccount(player.getName());
				if (ma == null) {
					db.s("Account not found: " + player.getName());
					return false;
				}
				if (!ma.hasEnough(arena.cfg.getInt("money.entry", 0))) {
					// no money, no entry!
					Arenas.tellPlayer(player, Language.parse("notenough",
							PVPArena.eco.format(arena.cfg.getInt("money.entry",
									0))), arena.prefix);
					return false;
				}
			}
=======
			Arenas.tellPlayer(player, Language.parse("joinrange"), arena);
			return false;
		}

		if (!PVPArena.instance.getAmm().checkJoin(arena, player)) {
			return false;
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
		}

		if (arena.START_ID != -1) {
Solution content
		}

		if (Regions.tooFarAway(arena, player)) {
			Arenas.tellPlayer(player, Language.parse("joinrange"), arena);
			return false;
		}

		if (!PVPArena.instance.getAmm().checkJoin(arena, player)) {
			return false;
		}

		if (arena.START_ID != -1) {
File
Commands.java
Developer's decision
Version 2
Kind of conflict
If statement
Method invocation
Return statement
Chunk
Conflicting content
			Bukkit.getScheduler().cancelTask(arena.START_ID);
			db.i("player joining, cancelling start timer");
			if (!arena.cfg.getBoolean("join.onCountdown")) {
<<<<<<< HEAD
				Arenas.tellPlayer(player, Language.parse("fightinprogress"), arena.prefix);
=======
				Arenas.tellPlayer(player, Language.parse("fightinprogress"),
						arena);
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
				return false;
			}
		}
Solution content
			Bukkit.getScheduler().cancelTask(arena.START_ID);
			db.i("player joining, cancelling start timer");
			if (!arena.cfg.getBoolean("join.onCountdown")) {
				Arenas.tellPlayer(player, Language.parse("fightinprogress"),
						arena);
				return false;
			}
		}
File
Commands.java
Developer's decision
Version 2
Kind of conflict
Method invocation
Chunk
Conflicting content
	 *            the input team map
	 * @return the joined and colored string
	 */
<<<<<<< HEAD
	public static boolean parseToggle(Arena arena, Player player, String string) {
		if (!PVPArena.hasAdminPerms(player)
				&& !(PVPArena.hasCreatePerms(player, arena))) {
			Arenas.tellPlayer(player,
					Language.parse("nopermto", Language.parse(string)), arena.prefix);
			return true;
		}
		arena.cfg.set("general.enabled", string.equals("enabled"));
		arena.cfg.save();
		Arenas.tellPlayer(player, Language.parse(string), arena.prefix);
		return true;
=======
	private static String colorTeams(Arena arena) {
		String s = "";
		for (ArenaTeam team : arena.getTeams()) {
			if (!s.equals("")) {
				s += " | ";
			}
			s += team.colorize() + ChatColor.WHITE;
		}
		return s;
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
	}

	/**
Solution content
	 *            the input team map
	 * @return the joined and colored string
	 */
	private static String colorTeams(Arena arena) {
		String s = "";
		for (ArenaTeam team : arena.getTeams()) {
			if (!s.equals("")) {
				s += " | ";
			}
			s += team.colorize() + ChatColor.WHITE;
		}
		return s;
	}

	/**
File
Commands.java
Developer's decision
Version 2
Kind of conflict
For statement
If statement
Method invocation
Method signature
Return statement
Variable
Chunk
Conflicting content
	 *            the command to commit
	 * @return false if the command help should be displayed, true otherwise
	 */
<<<<<<< HEAD
	public static boolean parseList(Arena arena, Player player) {
		if (Players.countPlayersInTeams(arena) < 1) {
			Arenas.tellPlayer(player, Language.parse("noplayer"), arena.prefix);
			return true;
		}
		String plrs = Players.getTeamStringList(arena, arena.paTeams);
		Arenas.tellPlayer(player, Language.parse("players") + ": " + plrs, arena.prefix);
=======
	public static boolean parseAdminCommand(Arena arena, Player player,
			String cmd) {

		db.i("parsing admin command: " + cmd);
		if (cmd.equalsIgnoreCase("spectator")) {
			if (!player.getWorld().getName().equals(arena.getWorld())) {
				Arenas.tellPlayer(player,
						Language.parse("notsameworld", arena.getWorld()), arena);
				return false;
			}
			Spawns.setCoords(arena, player, "spectator");
			Arenas.tellPlayer(player, Language.parse("setspectator"), arena);
		} else if (cmd.equalsIgnoreCase("exit")) {
			if (!player.getWorld().getName().equals(arena.getWorld())) {
				Arenas.tellPlayer(player,
						Language.parse("notsameworld", arena.getWorld()), arena);
				return false;
			}
			Spawns.setCoords(arena, player, "exit");
			Arenas.tellPlayer(player, Language.parse("setexit"), arena);
		} else if (cmd.equalsIgnoreCase("forcestop")) {
			if (arena.fightInProgress) {
				arena.forcestop();
				Arenas.tellPlayer(player, Language.parse("forcestop"), arena);
			} else {
				Arenas.tellPlayer(player, Language.parse("nofight"), arena);
			}
		} else if (cmd.equalsIgnoreCase("set")) {
			arena.sm.list(player, 1);
		} else if (arena.type().allowsRandomSpawns()
				&& (cmd.startsWith("spawn"))) {
			if (!player.getWorld().getName().equals(arena.getWorld())) {
				Arenas.tellPlayer(player,
						Language.parse("notsameworld", arena.getWorld()), arena);
				return false;
			}
			Spawns.setCoords(arena, player, cmd);
			Arenas.tellPlayer(player, Language.parse("setspawn", cmd), arena);
		} else {
			// no random or not trying to set custom spawn
			if ((!arena.type().isLoungeCommand(player, cmd))
					&& (!arena.type().isSpawnCommand(player, cmd))
					&& (!arena.type().isCustomCommand(player, cmd))) {
				return parseJoin(arena, player);
			}
			// else: command lounge or spawn :)
		}
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
		return true;
	}
Solution content
	 *            the command to commit
	 * @return false if the command help should be displayed, true otherwise
	 */
	public static boolean parseAdminCommand(Arena arena, Player player,
			String cmd) {

		db.i("parsing admin command: " + cmd);
		if (cmd.equalsIgnoreCase("spectator")) {
			if (!player.getWorld().getName().equals(arena.getWorld())) {
				Arenas.tellPlayer(player,
						Language.parse("notsameworld", arena.getWorld()), arena);
				return false;
			}
			Spawns.setCoords(arena, player, "spectator");
			Arenas.tellPlayer(player, Language.parse("setspectator"), arena);
		} else if (cmd.equalsIgnoreCase("exit")) {
			if (!player.getWorld().getName().equals(arena.getWorld())) {
				Arenas.tellPlayer(player,
						Language.parse("notsameworld", arena.getWorld()), arena);
				return false;
			}
			Spawns.setCoords(arena, player, "exit");
			Arenas.tellPlayer(player, Language.parse("setexit"), arena);
		} else if (cmd.equalsIgnoreCase("forcestop")) {
			if (arena.fightInProgress) {
				arena.forcestop();
				Arenas.tellPlayer(player, Language.parse("forcestop"), arena);
			} else {
				Arenas.tellPlayer(player, Language.parse("nofight"), arena);
			}
		} else if (cmd.equalsIgnoreCase("set")) {
			arena.sm.list(player, 1);
		} else if (arena.type().allowsRandomSpawns()
				&& (cmd.startsWith("spawn"))) {
			if (!player.getWorld().getName().equals(arena.getWorld())) {
				Arenas.tellPlayer(player,
						Language.parse("notsameworld", arena.getWorld()), arena);
				return false;
			}
			Spawns.setCoords(arena, player, cmd);
			Arenas.tellPlayer(player, Language.parse("setspawn", cmd), arena);
		} else {
			// no random or not trying to set custom spawn
			if ((!arena.type().isLoungeCommand(player, cmd))
					&& (!arena.type().isSpawnCommand(player, cmd))
					&& (!arena.type().isCustomCommand(player, cmd))) {
				return parseJoin(arena, player);
			}
			// else: command lounge or spawn :)
		}
		return true;
	}
File
Commands.java
Developer's decision
Version 2
Kind of conflict
If statement
Method invocation
Method signature
Variable
Chunk
Conflicting content
	 *            the player who joins
	 * @return false if the command help should be displayed, true otherwise
	 */
<<<<<<< HEAD
	public static boolean parseSpectate(Arena arena, Player player) {
		String error = Configs.isSetup(arena);
		if (error != null) {
			Arenas.tellPlayer(player, Language.parse("arenanotsetup", error), arena.prefix);
			return true;
		}
		
		if (Arenas.getArenaByPlayer(player) != null) {
			Arenas.tellPlayer(player, Language.parse("alreadyjoined"), arena.prefix);
			return true;
		}
		if (Regions.tooFarAway(arena, player)) {
			Arenas.tellPlayer(player, Language.parse("joinrange"), arena.prefix);
			return true;
		}
		arena.prepare(player, true);
		arena.tpPlayerToCoordName(player, "spectator");
		Inventories.prepareInventory(arena, player);
		Arenas.tellPlayer(player, Language.parse("specwelcome"), arena.prefix);
=======
	public static boolean parseChat(Arena arena, Player player) {
		if (arena.chatters.contains(player.getName())) {
			arena.chatters.remove(player.getName());
			Arenas.tellPlayer(player, "You now talk to the public!", arena);
		} else {
			arena.chatters.add(player.getName());
			Arenas.tellPlayer(player, "You now talk to your team!", arena);
		}
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
		return true;
	}
Solution content
	 *            the player who joins
	 * @return false if the command help should be displayed, true otherwise
	 */
	public static boolean parseChat(Arena arena, Player player) {
		if (arena.chatters.contains(player.getName())) {
			arena.chatters.remove(player.getName());
			Arenas.tellPlayer(player, "You now talk to the public!", arena);
		} else {
			arena.chatters.add(player.getName());
			Arenas.tellPlayer(player, "You now talk to your team!", arena);
		}
		return true;
	}
File
Commands.java
Developer's decision
Version 2
Kind of conflict
If statement
Method invocation
Method signature
Variable
Chunk
Conflicting content
	 *            the player committing the command
	 * @return false if the command help should be displayed, true otherwise
	 */
<<<<<<< HEAD
	public static boolean parseUsers(Arena arena, Player player) {
		// wins are suffixed with "_"
		ArenaPlayer[] players = Statistics
				.getStats(arena, Statistics.type.WINS);

		Arenas.tellPlayer(player, Language.parse("top5win"), arena.prefix);
=======
	public static boolean parseCheck(Arena arena, Player player) {
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b

		Debug.override = true;
Solution content
	 *            the player committing the command
	 * @return false if the command help should be displayed, true otherwise
	 */
	public static boolean parseCheck(Arena arena, Player player) {

		Debug.override = true;
File
Commands.java
Developer's decision
Version 2
Kind of conflict
Comment
Method invocation
Method signature
Variable
Chunk
Conflicting content
	}

		Debug.override = true;

<<<<<<< HEAD
		for (ArenaPlayer ap : players) {
			if (limit-- < 1) {
				break;
			}
			Arenas.tellPlayer(player, ap.get().getName() + ": " + ap.wins + " "
					+ Language.parse("wins"), arena.prefix);
		}

		Arenas.tellPlayer(player, "------------", arena.prefix);
		Arenas.tellPlayer(player, Language.parse("top5lose"), arena.prefix);

		players = Statistics.getStats(arena, Statistics.type.LOSSES);
		for (ArenaPlayer ap : players) {
			if (limit-- < 1) {
				break;
			}

			Arenas.tellPlayer(player, ap.get().getName() + ": " + ap.losses
					+ " " + Language.parse("losses"), arena.prefix);
		}

		return true;
	}

	/**
	 * enable region modifying
	 * 
	 * @param arena
	 *            the arena to check
	 * @param player
	 *            the player committing the command
	 * @return false if the command help should be displayed, true otherwise
	 */
	public static boolean parseRegion(Arena arena, Player player) {
		// /pa [name] region
		if (!Arena.regionmodify.equals("")) {
			Arenas.tellPlayer(player,
					Language.parse("regionalreadybeingset", Arena.regionmodify), arena.prefix);
			return true;
		}
		Arena.regionmodify = arena.name;
		Arenas.tellPlayer(player, Language.parse("regionset"), arena.prefix);
		return true;
	}

	/**
	 * check and commit admin command
	 * 
	 * @param arena
	 *            the arena to check
	 * @param player
	 *            the player committing the command
	 * @param cmd
	 *            the command to commit
	 * @return false if the command help should be displayed, true otherwise
	 */
	public static boolean parseAdminCommand(Arena arena, Player player,
			String cmd) {

		db.i("parsing admin command: " + cmd);
		if (cmd.equalsIgnoreCase("spectator")) {
			if (!player.getWorld().getName().equals(arena.getWorld())) {
				Arenas.tellPlayer(player,
						Language.parse("notsameworld", arena.getWorld()), arena.prefix);
				return false;
			}
			Spawns.setCoords(arena, player, "spectator");
			Arenas.tellPlayer(player, Language.parse("setspectator"), arena.prefix);
		} else if (cmd.equalsIgnoreCase("exit")) {
			if (!player.getWorld().getName().equals(arena.getWorld())) {
				Arenas.tellPlayer(player,
						Language.parse("notsameworld", arena.getWorld()), arena.prefix);
				return false;
			}
			Spawns.setCoords(arena, player, "exit");
			Arenas.tellPlayer(player, Language.parse("setexit"), arena.prefix);
		} else if (cmd.equalsIgnoreCase("forcestop")) {
			if (arena.fightInProgress) {
				arena.forcestop();
				Arenas.tellPlayer(player, Language.parse("forcestop"), arena.prefix);
			} else {
				Arenas.tellPlayer(player, Language.parse("nofight"), arena.prefix);
			}
		} else if (cmd.equalsIgnoreCase("set")) {
			arena.sm.list(player, 1);
		} else if (arena.cfg.getBoolean("arenatype.randomSpawn", false)
				&& (cmd.startsWith("spawn"))) {
			if (!player.getWorld().getName().equals(arena.getWorld())) {
				Arenas.tellPlayer(player,
						Language.parse("notsameworld", arena.getWorld()), arena.prefix);
				return false;
			}
			Spawns.setCoords(arena, player, cmd);
			Arenas.tellPlayer(player, Language.parse("setspawn", cmd), arena.prefix);
		} else {
			// no random or not trying to set custom spawn
			if ((!isLoungeCommand(arena, player, cmd))
					&& (!isSpawnCommand(arena, player, cmd))
					&& (!isCustomCommand(arena, player, cmd))) {
				return parseJoin(arena, player);
			}
			// else: command lounge or spawn :)
		}
=======
		db.i("-------------------------------");
		db.i("Debug parsing Arena config for arena: " + arena);
		db.i("-------------------------------");

		Arenas.loadArena(arena.name, arena.type().getName());

		db.i("-------------------------------");
		db.i("Debug parsing finished!");
		db.i("-------------------------------");

		Debug.override = false;
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
		return true;
Solution content
		Debug.override = true;

		db.i("-------------------------------");
		db.i("Debug parsing Arena config for arena: " + arena);
		db.i("-------------------------------");

		Arenas.loadArena(arena.name, arena.type().getName());

		db.i("-------------------------------");
		db.i("Debug parsing finished!");
		db.i("-------------------------------");

		Debug.override = false;
		return true;
	}
File
Commands.java
Developer's decision
Version 2
Kind of conflict
Comment
For statement
If statement
Method declaration
Method invocation
Method signature
Return statement
Variable
Chunk
Conflicting content
				return parseUsers(arena, player);
			} else if (args[0].equalsIgnoreCase("region")) {
				return parseRegion(arena, player);
<<<<<<< HEAD
			} else if (arena.paTeams.get(args[0]) != null) {
=======
			} else if (Teams.getTeam(arena, args[0]) != null) {
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
				return parseJoinTeam(arena, player, args[0]);
			} else if (PVPArena.hasAdminPerms(player)
					|| (PVPArena.hasCreatePerms(player, arena))) {
Solution content
				return parseUsers(arena, player);
			} else if (args[0].equalsIgnoreCase("region")) {
				return parseRegion(arena, player);
			} else if (Teams.getTeam(arena, args[0]) != null) {
				return parseJoinTeam(arena, player, args[0]);
			} else if (PVPArena.hasAdminPerms(player)
					|| (PVPArena.hasCreatePerms(player, arena))) {
File
Commands.java
Developer's decision
Version 2
Kind of conflict
If statement
Chunk
Conflicting content
		} else if (args.length == 2 && args[0].equalsIgnoreCase("borders")) {
			ArenaRegion region = arena.regions.get(args[1]);
			if (region == null) {
<<<<<<< HEAD
				Arenas.tellPlayer(player, "Region unknown: " + args[1], arena.prefix);
=======
				Arenas.tellPlayer(player, "Region unknown: " + args[1], arena);
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
				return true;
			}
			region.showBorder(player);
Solution content
		} else if (args.length == 2 && args[0].equalsIgnoreCase("borders")) {
			ArenaRegion region = arena.regions.get(args[1]);
			if (region == null) {
				Arenas.tellPlayer(player, "Region unknown: " + args[1], arena);
				return true;
			}
			region.showBorder(player);
File
Commands.java
Developer's decision
Version 2
Kind of conflict
Method invocation
Chunk
Conflicting content
		if (!PVPArena.hasAdminPerms(player)
				&& !(PVPArena.hasCreatePerms(player, arena))) {
			Arenas.tellPlayer(player,
<<<<<<< HEAD
					Language.parse("nopermto", Language.parse("admin")), arena.prefix);
			return false;
		}

		if (!isRegionCommand(arena, args[1])) {
			Arenas.tellPlayer(player, Language.parse("invalidcmd", "504"), arena.prefix);
=======
					Language.parse("nopermto", Language.parse("admin")), arena);
			return false;
		}

		if (!arena.type().isRegionCommand(args[1])) {
			Arenas.tellPlayer(player, Language.parse("invalidcmd", "504"),
					arena);
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
			return false;
		}
Solution content
		if (!PVPArena.hasAdminPerms(player)
				&& !(PVPArena.hasCreatePerms(player, arena))) {
			Arenas.tellPlayer(player,
					Language.parse("nopermto", Language.parse("admin")), arena);
			return false;
		}

		if (!arena.type().isRegionCommand(args[1])) {
			Arenas.tellPlayer(player, Language.parse("invalidcmd", "504"),
					arena);
			return false;
		}
File
Commands.java
Developer's decision
Version 2
Kind of conflict
If statement
Method invocation
Return statement
Variable
Chunk
Conflicting content
						arena.cfg.save();
						Arena.regionmodify = "";
						Arenas.tellPlayer(player,
<<<<<<< HEAD
								Language.parse("regionremoved"), arena.prefix);
					} else {
						Arenas.tellPlayer(player,
								Language.parse("regionnotremoved"), arena.prefix);
=======
								Language.parse("regionremoved"), arena);
					} else {
						Arenas.tellPlayer(player,
								Language.parse("regionnotremoved"), arena);
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
					}
					return true;
				}
Solution content
						arena.cfg.save();
						Arena.regionmodify = "";
						Arenas.tellPlayer(player,
								Language.parse("regionremoved"), arena);
					} else {
						Arenas.tellPlayer(player,
								Language.parse("regionnotremoved"), arena);
					}
					return true;
				}
File
Commands.java
Developer's decision
Version 2
Kind of conflict
Method invocation
Variable
Chunk
Conflicting content
				// pa [name] region [regionname] {cuboid/sphere}
				if (Arena.regionmodify.equals("")) {
					Arenas.tellPlayer(player,
<<<<<<< HEAD
							Language.parse("regionnotbeingset", arena.name), arena.prefix);
=======
							Language.parse("regionnotbeingset", arena.name),
							arena);
					return true;
				}

				if (arena.pos1 == null || arena.pos2 == null) {
					Arenas.tellPlayer(player, Language.parse("select2"), arena);
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
					return true;
				}
				
Solution content
				// pa [name] region [regionname] {cuboid/sphere}
				if (Arena.regionmodify.equals("")) {
					Arenas.tellPlayer(player,
							Language.parse("regionnotbeingset", arena.name),
							arena);
					return true;
				}

				if (arena.pos1 == null || arena.pos2 == null) {
					Arenas.tellPlayer(player, Language.parse("select2"), arena);
					return true;
				}

				Vector realMin = new Vector(
						Math.min(arena.pos1.getBlockX(), arena.pos2.getBlockX()),
						Math.min(arena.pos1.getBlockY(), arena.pos2.getBlockY()),
						Math.min(arena.pos1.getBlockZ(), arena.pos2.getBlockZ()));
				Vector realMax = new Vector(
						Math.max(arena.pos1.getBlockX(), arena.pos2.getBlockX()),
						Math.max(arena.pos1.getBlockY(), arena.pos2.getBlockY()),
						Math.max(arena.pos1.getBlockZ(), arena.pos2.getBlockZ()));

				String s = realMin.getBlockX() + "," + realMin.getBlockY()
						+ "," + realMin.getBlockZ() + "," + realMax.getBlockX()
						+ "," + realMax.getBlockY() + "," + realMax.getBlockZ();

				ArenaRegion.regionType type;

				if (args.length == 2) {
					type = ArenaRegion.regionType.CUBOID;
				} else {

					if (args[2].startsWith("c")) {
						type = ArenaRegion.regionType.CUBOID;
					} else if (args[2].startsWith("s")) {
						type = ArenaRegion.regionType.SPHERIC;
					} else {
						type = ArenaRegion.regionType.CUBOID;
					}
				}

				// only cuboid if args = 2 | args[2] = cuboid

				arena.cfg.set("regions." + args[1], s);
				arena.regions.put(args[1], new ArenaRegion(args[1], arena.pos1,
						arena.pos2, type));
				arena.pos1 = null;
				arena.pos2 = null;
				arena.cfg.save();

				Arena.regionmodify = "";
				Arenas.tellPlayer(player, Language.parse("regionsaved"), arena);
				return true;

			} else if (args[0].equalsIgnoreCase("remove")) {
				// pa [name] remove [spawnname]
				arena.cfg.set("spawns." + args[1], null);
				arena.cfg.save();
				Arenas.tellPlayer(player,
						Language.parse("spawnremoved", args[1]), arena);
				return true;
			}
		}

		if (args.length != 3) {
			Arenas.tellPlayer(player, Language.parse("invalidcmd", "505"),
					arena);
			return false;
		}
		return true;
	}

	/**
	 * check and commit edit command
	 * 
	 * @param arena
	 *            the arena to check
	 * @param player
	 *            the player to check
	 * @return false if the command help should be displayed, true otherwise
	 */
	private static boolean parseEdit(Arena arena, Player player) {
		if (!PVPArena.hasAdminPerms(player)) {
			Arenas.tellPlayer(player,
					Language.parse("nopermto", Language.parse("edit")), arena);
			return true;
		}

		arena.edit = !arena.edit;
		Arenas.tellPlayer(
				player,
				Language.parse("edit" + String.valueOf(arena.edit), arena.name),
				arena);
		return true;
	}

	/**
	 * display detailed arena information
	 * 
	 * @param arena
	 *            the arena to check
	 * @param player
	 *            the player committing the command
	 * @return false if the command help should be displayed, true otherwise
	 */
	public static boolean parseInfo(Arena arena, Player player) {
		// TODO reorganize and update
		String type = arena.type().getName();
		player.sendMessage("-----------------------------------------------------");
		player.sendMessage("       Arena Information about [" + ChatColor.AQUA
				+ arena.name + ChatColor.WHITE + "]");
		player.sendMessage("-----------------------------------------------------");
		player.sendMessage("Type: " + ChatColor.AQUA + type + ChatColor.WHITE
				+ " || " + "Teams: " + colorTeams(arena));
		player.sendMessage(StringParser.colorVar("Enabled",
				arena.cfg.getBoolean("general.enabled"))
				+ " || "
				+ StringParser.colorVar("Fighting", arena.fightInProgress)
				+ " || "
				+ "Wand: "
				+ Material.getMaterial(arena.cfg.getInt("setup.wand", 280))
						.toString()
				+ " || "
				+ "Timing: "
				+ StringParser.colorVar(arena.cfg.getInt("goal.timed"))
				+ " || "
				+ "MaxLives: "
				+ StringParser.colorVar(arena.cfg.getInt("game.lives", 3)));
		player.sendMessage("Regionset: "
				+ StringParser.colorVar(arena.name.equals(Arena.regionmodify))
				+ " || No Death: "
				+ StringParser.colorVar(arena.cfg
						.getBoolean("game.preventDeath"))
				+ " || "
				+ "Force: "
				+ StringParser.colorVar("Even",
						arena.cfg.getBoolean("join.forceEven", false))
				+ " | "
				+ StringParser.colorVar("Woolhead",
						arena.cfg.getBoolean("game.woolHead", false)));
		player.sendMessage(StringParser.colorVar("TeamKill",
				arena.cfg.getBoolean("game.teamKill", false))
				+ " || Team Select: "
				+ StringParser.colorVar("manual",
						arena.cfg.getBoolean("join.manual", true))
				+ " | "
				+ StringParser.colorVar("random",
						arena.cfg.getBoolean("join.random", true)));
		player.sendMessage("Regions: " + listRegions(arena.regions));
		player.sendMessage("TPs: exit: "
				+ StringParser.colorVar(arena.cfg.getString("tp.exit", "exit"))
				+ " | death: "
				+ StringParser.colorVar(arena.cfg.getString("tp.death",
						"spectator")) + " | win: "
				+ StringParser.colorVar(arena.cfg.getString("tp.win", "old"))
				+ " | lose: "
				+ StringParser.colorVar(arena.cfg.getString("tp.lose", "old")));
		PVPArena.instance.getAmm().parseInfo(arena, player);
		player.sendMessage(StringParser.colorVar("Protection",
				arena.cfg.getBoolean("protection.enabled", true))
				+ ": "
				+ StringParser.colorVar("Fire",
						arena.cfg.getBoolean("protection.firespread", true))
				+ " | "
				+ StringParser.colorVar("Destroy",
						arena.cfg.getBoolean("protection.blockdamage", true))
				+ " | "
				+ StringParser.colorVar("Place",
						arena.cfg.getBoolean("protection.blockplace", true))
				+ " | "
				+ StringParser.colorVar("Ignite",
						arena.cfg.getBoolean("protection.lighter", true))
				+ " | "
				+ StringParser.colorVar("Lava",
						arena.cfg.getBoolean("protection.lavafirespread", true))
				+ " | "
				+ StringParser.colorVar("Explode",
						arena.cfg.getBoolean("protection.tnt", true)));
		player.sendMessage(StringParser.colorVar("Check Regions",
				arena.cfg.getBoolean("periphery.checkRegions", false))
				+ ": "
				+ StringParser.colorVar("Exit",
						arena.cfg.getBoolean("protection.checkExit", false))
				+ " | "
				+ StringParser.colorVar("Lounges",
						arena.cfg.getBoolean("protection.checkLounges", false))
				+ " | "
				+ StringParser.colorVar("Spectator", arena.cfg.getBoolean(
						"protection.checkSpectator", false)));
		player.sendMessage("JoinRange: "
				+ StringParser.colorVar(arena.cfg.getInt("join.range", 0))
				+ " || Entry Fee: "
				+ StringParser.colorVar(arena.cfg.getInt("money.entry", 0))
				+ " || Reward: "
				+ StringParser.colorVar(arena.cfg.getInt("money.reward", 0))
			return true;
				+ " || "
				+ StringParser.colorVar("refill",
						arena.cfg.getBoolean("game.refillInventory", false)));

		return true;
	}

	/**
	 * check and commit join command
	 * 
	 * @param arena
	 *            the arena to join
	 * @param player
	 *            the player who joins
	 * @return false if the command help should be displayed, true otherwise
	 */
	public static boolean parseJoin(Arena arena, Player player) {
		// just /pa or /pvparena

		if (!checkJoin(arena, player)) {
			return true;
		}
		if (!arena.cfg.getBoolean("join.random", true)) {
			Arenas.tellPlayer(player, Language.parse("selectteam"), arena);
			return true;
		}

		if (Teams.calcFreeTeam(arena) == null
				|| ((arena.cfg.getInt("ready.max") > 0) && (arena.cfg
						.getInt("ready.max") <= Teams
						.countPlayersInTeams(arena)))) {

			Arenas.tellPlayer(player, Language.parse("arenafull"), arena);
			return true;
		}

		arena.prepare(player, false);
		arena.lives.put(player.getName(), arena.cfg.getInt("game.lives", 3));

		Teams.choosePlayerTeam(arena, player);
		Inventories.prepareInventory(arena, player);

		PVPArena.instance.getAmm().parseJoin(
				arena,
				player,
				Teams.getTeam(arena, ArenaPlayer.parsePlayer(player))
						.colorize());
		// process auto classing
		String autoClass = arena.cfg.getString("ready.autoclass");
		if (autoClass != null && !autoClass.equals("none")) {
			if (arena.classExists(autoClass)) {
				arena.forceChooseClass(player, null, autoClass);
			} else {
				db.w("autoclass selected that does not exist: " + autoClass);
			}
		}
		return true;
	}

	/**
	 * check and commit team join command
	 * 
	 * @param arena
	 *            the arena to join
	 * @param player
	 *            the player that joins
	 * @param sTeam
	 *            the team to join
	 * @return false if the command help should be displayed, true otherwise
	 */
	public static boolean parseJoinTeam(Arena arena, Player player, String sTeam) {

		// /pa [team] or /pvparena [team]

		if (!checkJoin(arena, player)) {
			return true;
		}

		if (!(arena.cfg.getBoolean("join.manual", true))) {
			Arenas.tellPlayer(player, Language.parse("notselectteam"), arena);
			return true;
		}

		if (arena.cfg.getInt("ready.max") > 0
				&& arena.cfg.getInt("ready.max") <= Teams
						.countPlayersInTeams(arena)) {

			Arenas.tellPlayer(player, Language.parse("teamfull",
					Teams.getTeam(arena, sTeam).colorize()), arena);
			return true;
		}

		arena.prepare(player, false);
		arena.lives.put(player.getName(), arena.cfg.getInt("game.lives", 3));

		arena.tpPlayerToCoordName(player, sTeam + "lounge");

		ArenaTeam team = Teams.getTeam(arena, sTeam);
		ArenaPlayer ap = ArenaPlayer.parsePlayer(player);

		team.add(ap);

		Inventories.prepareInventory(arena, player);
		String coloredTeam = team.colorize();

		PVPArena.instance.getAmm().parseJoin(arena, player, coloredTeam);

		Arenas.tellPlayer(player, Language.parse("youjoined", coloredTeam),
				arena);
		arena.tellEveryoneExcept(player,
				Language.parse("playerjoined", player.getName(), coloredTeam));

		// process auto classing
		String autoClass = arena.cfg.getString("ready.autoclass");
		if (autoClass != null && !autoClass.equals("none")) {
			if (arena.classExists(autoClass)) {
				arena.forceChooseClass(player, null, autoClass);
			} else {
				db.w("autoclass selected that does not exist: " + autoClass);
			}
		}

		return true;
	}

	/**
	 * send a list of active players
	 * 
	 * @param arena
	 *            the arena to check
	 * @param player
	 *            the player committing the command
	 * @return false if the command help should be displayed, true otherwise
	 */
	public static boolean parseList(Arena arena, Player player) {
		if (Teams.countPlayersInTeams(arena) < 1) {
			Arenas.tellPlayer(player, Language.parse("noplayer"), arena);
		}
		String plrs = Teams.getTeamStringList(arena);
		Arenas.tellPlayer(player, Language.parse("players") + ": " + plrs,
				arena);
		return true;
	}

	/**
	 * enable region modifying
	 * 
	 * @param arena
	 *            the arena to check
	 * @param player
	 *            the player committing the command
	 * @return false if the command help should be displayed, true otherwise
	 */
	public static boolean parseRegion(Arena arena, Player player) {
		// /pa [name] region
		if (!Arena.regionmodify.equals("")) {
			Arenas.tellPlayer(
					player,
					Language.parse("regionalreadybeingset", Arena.regionmodify),
					arena);
			return true;
		}
		Arena.regionmodify = arena.name;
		Arenas.tellPlayer(player, Language.parse("regionset"), arena);
		return true;
	}

	/**
	 * check and commit reload command
	 * 
	 * @param player
	 *            the player committing the command
	 * @return false if the command help should be displayed, true otherwise
	 */
	public static boolean parseReload(Player player) {

		if (!PVPArena.hasAdminPerms(player)) {
			Arenas.tellPlayer(player,
					Language.parse("nopermto", Language.parse("reload")));
			return true;
		}
		Arenas.load_arenas();
		Arenas.tellPlayer(player, Language.parse("reloaded"));
		return true;
	}

	/**
	 * check and commit watch command
	 * 
	 * @param arena
	 *            the arena to check
	 * @param player
	 *            the player committing the command
	 * @return false if the command help should be displayed, true otherwise
	 */
	public static boolean parseSpectate(Arena arena, Player player) {
		String error = Configs.isSetup(arena);
		if (error != null) {
			Arenas.tellPlayer(player, Language.parse("arenanotsetup", error),
					arena);
			return true;
		}
		ArenaPlayer ap = ArenaPlayer.parsePlayer(player);
		ArenaTeam team = Teams.getTeam(arena, ap);
		if (team != null) {
			Arenas.tellPlayer(player, Language.parse("alreadyjoined"), arena);
			return true;
		}
		if (Regions.tooFarAway(arena, player)) {
			Arenas.tellPlayer(player, Language.parse("joinrange"), arena);
			return true;
		}
		arena.prepare(player, true);
		arena.tpPlayerToCoordName(player, "spectator");
		Inventories.prepareInventory(arena, player);
		Arenas.tellPlayer(player, Language.parse("specwelcome"), arena);
		return true;
	}

	/**
	 * check and commit stats command
	 * 
	 * @param arena
	 *            the arena to check
	 * @param player
	 *            the player to check
	 * @param args
	 *            the array {"stats", [stattype], {asc/desc}}
	 * @return false if the command help should be displayed, true otherwise
	 */
	private static boolean parseStats(Arena arena, Player player, String[] args) {

		Statistics.type type = Statistics.type.getByString(args[1]);

		if (type == null) {
			Arenas.tellPlayer(player,
					Language.parse("invalidstattype", args[1]), arena);
			return true;
		}

		ArenaPlayer[] aps = Statistics.getStats(arena, type);
		String[] s = Statistics.read(aps, type);

		int i = 0;

		for (ArenaPlayer ap : aps) {
			Arenas.tellPlayer(player, ap.get().getName() + ": " + s[i++], arena);
			if (i > 9) {
				return true;
			}
		}

		return true;
	}

	/**
	 * check and commit enable/disable toggle command
	 * 
	 * @param arena
	 *            the arena to toggle
	 * @param player
	 *            the player committing the command
	 * @param string
	 *            to commit (enabled/disabled)
	 * @return false if the command help should be displayed, true otherwise
	 */
	public static boolean parseToggle(Arena arena, Player player, String string) {
		if (!PVPArena.hasAdminPerms(player)
				&& !(PVPArena.hasCreatePerms(player, arena))) {
			Arenas.tellPlayer(player,
					Language.parse("nopermto", Language.parse(string)), arena);
			return true;
		}
		arena.cfg.set("general.enabled", string.equals("enabled"));
		arena.cfg.save();
		Arenas.tellPlayer(player, Language.parse(string), arena);
		return true;
	}

	/**
	 * display player stats
	 * 
	 * @param arena
	 *            the arena to check
	 * @param player
	 *            the player committing the command
	 * @return false if the command help should be displayed, true otherwise
	 */
	public static boolean parseUsers(Arena arena, Player player) {
		// wins are suffixed with "_"
		ArenaPlayer[] players = Statistics
				.getStats(arena, Statistics.type.WINS);

		Arenas.tellPlayer(player, Language.parse("top5win"), arena);

		int limit = 5;

		for (ArenaPlayer ap : players) {
			if (limit-- < 1) {
				break;
			}
			Arenas.tellPlayer(player, ap.get().getName() + ": " + ap.wins + " "
					+ Language.parse("wins"), arena);
		}

		Arenas.tellPlayer(player, "------------", arena);
		Arenas.tellPlayer(player, Language.parse("top5lose"), arena);

		players = Statistics.getStats(arena, Statistics.type.LOSSES);
		for (ArenaPlayer ap : players) {
			if (limit-- < 1) {
				break;
			}
			Arenas.tellPlayer(player, ap.get().getName() + ": " + ap.losses
					+ " " + Language.parse("losses"), arena);
		}

		return true;
	}
}
File
Commands.java
Developer's decision
Manual
Kind of conflict
If statement
Method invocation
Return statement
Variable
Chunk
Conflicting content
				arena.cfg.save();

				Arena.regionmodify = "";
<<<<<<< HEAD
				Arenas.tellPlayer(player, Language.parse("regionsaved"), arena.prefix);
=======
				Arenas.tellPlayer(player, Language.parse("regionsaved"), arena);
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
				return true;

			} else if (args[0].equalsIgnoreCase("remove")) {
Solution content
				arena.cfg.save();

				Arena.regionmodify = "";
				Arenas.tellPlayer(player, Language.parse("regionsaved"), arena);
				return true;

			} else if (args[0].equalsIgnoreCase("remove")) {
File
Commands.java
Developer's decision
Version 2
Kind of conflict
Method invocation
Chunk
Conflicting content
				arena.cfg.set("spawns." + args[1], null);
				arena.cfg.save();
				Arenas.tellPlayer(player,
<<<<<<< HEAD
						Language.parse("spawnremoved", args[1]), arena.prefix);
=======
						Language.parse("spawnremoved", args[1]), arena);
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
				return true;
			}
		}
Solution content
				arena.cfg.set("spawns." + args[1], null);
				arena.cfg.save();
				Arenas.tellPlayer(player,
						Language.parse("spawnremoved", args[1]), arena);
				return true;
			}
		}
File
Commands.java
Developer's decision
Version 2
Kind of conflict
Method invocation
Variable
Chunk
Conflicting content
		}

		if (args.length != 3) {
<<<<<<< HEAD
			Arenas.tellPlayer(player, Language.parse("invalidcmd", "505"), arena.prefix);
=======
			Arenas.tellPlayer(player, Language.parse("invalidcmd", "505"),
					arena);
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
			return false;
		}
		return true;
Solution content
		}

		if (args.length != 3) {
			Arenas.tellPlayer(player, Language.parse("invalidcmd", "505"),
					arena);
			return false;
		}
		return true;
File
Commands.java
Developer's decision
Version 2
Kind of conflict
Method invocation
Chunk
Conflicting content
	 *            the arena to check
	 * @param player
	 *            the player to check
<<<<<<< HEAD
	 * @param args
	 *            the array {"stats", [stattype], {asc/desc}}
=======
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
	 * @return false if the command help should be displayed, true otherwise
	 */
	private static boolean parseEdit(Arena arena, Player player) {
Solution content
	 *            the arena to check
	 * @param player
	 *            the player to check
	 * @return false if the command help should be displayed, true otherwise
	 */
	private static boolean parseEdit(Arena arena, Player player) {
File
Commands.java
Developer's decision
Version 2
Kind of conflict
Comment
Chunk
Conflicting content
	private static boolean parseEdit(Arena arena, Player player) {
		if (!PVPArena.hasAdminPerms(player)) {
			Arenas.tellPlayer(player,
<<<<<<< HEAD
					Language.parse("invalidstattype", args[1]), arena.prefix);
			return true;
		}

		ArenaPlayer[] aps = Statistics.getStats(arena, type);
		String[] s = Statistics.read(aps, type);

		int i = 0;

		for (ArenaPlayer ap : aps) {
			Arenas.tellPlayer(player, ap.get().getName() + ": " + s[i++], arena.prefix);
			if (i > 9) {
				return true;
			}
		}

=======
					Language.parse("nopermto", Language.parse("edit")), arena);
			return true;
		}

		arena.edit = !arena.edit;
		Arenas.tellPlayer(
				player,
				Language.parse("edit" + String.valueOf(arena.edit), arena.name),
				arena);
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
		return true;
	}
Solution content
	private static boolean parseEdit(Arena arena, Player player) {
		if (!PVPArena.hasAdminPerms(player)) {
			Arenas.tellPlayer(player,
					Language.parse("nopermto", Language.parse("edit")), arena);
			return true;
		}

		arena.edit = !arena.edit;
		Arenas.tellPlayer(
				player,
				Language.parse("edit" + String.valueOf(arena.edit), arena.name),
				arena);
		return true;
	}
File
Commands.java
Developer's decision
Version 2
Kind of conflict
For statement
Method invocation
Return statement
Variable
Chunk
Conflicting content
	 *            the player committing the command
	 * @return false if the command help should be displayed, true otherwise
	 */
<<<<<<< HEAD
	private static boolean parseEdit(Arena arena, Player player) {
		if (!PVPArena.hasAdminPerms(player)) {
			Arenas.tellPlayer(player,
					Language.parse("nopermto", Language.parse("edit")), arena.prefix);
			return true;
		}

		arena.edit = !arena.edit;
		Arenas.tellPlayer(player,
				Language.parse("edit" + String.valueOf(arena.edit), arena.name), arena.prefix);
=======
	public static boolean parseInfo(Arena arena, Player player) {
		// TODO reorganize and update
		String type = arena.type().getName();
		player.sendMessage("-----------------------------------------------------");
		player.sendMessage("       Arena Information about [" + ChatColor.AQUA
				+ arena.name + ChatColor.WHITE + "]");
		player.sendMessage("-----------------------------------------------------");
		player.sendMessage("Type: " + ChatColor.AQUA + type + ChatColor.WHITE
				+ " || " + "Teams: " + colorTeams(arena));
		player.sendMessage(StringParser.colorVar("Enabled",
				arena.cfg.getBoolean("general.enabled"))
				+ " || "
				+ StringParser.colorVar("Fighting", arena.fightInProgress)
				+ " || "
				+ "Wand: "
				+ Material.getMaterial(arena.cfg.getInt("setup.wand", 280))
						.toString()
				+ " || "
				+ "Timing: "
				+ StringParser.colorVar(arena.cfg.getInt("goal.timed"))
				+ " || "
				+ "MaxLives: "
				+ StringParser.colorVar(arena.cfg.getInt("game.lives", 3)));
		player.sendMessage("Regionset: "
				+ StringParser.colorVar(arena.name.equals(Arena.regionmodify))
				+ " || No Death: "
				+ StringParser.colorVar(arena.cfg
						.getBoolean("game.preventDeath"))
				+ " || "
				+ "Force: "
				+ StringParser.colorVar("Even",
						arena.cfg.getBoolean("join.forceEven", false))
				+ " | "
				+ StringParser.colorVar("Woolhead",
						arena.cfg.getBoolean("game.woolHead", false)));
		player.sendMessage(StringParser.colorVar("TeamKill",
				arena.cfg.getBoolean("game.teamKill", false))
				+ " || Team Select: "
				+ StringParser.colorVar("manual",
						arena.cfg.getBoolean("join.manual", true))
				+ " | "
				+ StringParser.colorVar("random",
						arena.cfg.getBoolean("join.random", true)));
		player.sendMessage("Regions: " + listRegions(arena.regions));
		player.sendMessage("TPs: exit: "
				+ StringParser.colorVar(arena.cfg.getString("tp.exit", "exit"))
				+ " | death: "
				+ StringParser.colorVar(arena.cfg.getString("tp.death",
						"spectator")) + " | win: "
				+ StringParser.colorVar(arena.cfg.getString("tp.win", "old"))
				+ " | lose: "
				+ StringParser.colorVar(arena.cfg.getString("tp.lose", "old")));
		PVPArena.instance.getAmm().parseInfo(arena, player);
		player.sendMessage(StringParser.colorVar("Protection",
				arena.cfg.getBoolean("protection.enabled", true))
				+ ": "
				+ StringParser.colorVar("Fire",
						arena.cfg.getBoolean("protection.firespread", true))
				+ " | "
				+ StringParser.colorVar("Destroy",
						arena.cfg.getBoolean("protection.blockdamage", true))
				+ " | "
				+ StringParser.colorVar("Place",
						arena.cfg.getBoolean("protection.blockplace", true))
				+ " | "
				+ StringParser.colorVar("Ignite",
						arena.cfg.getBoolean("protection.lighter", true))
				+ " | "
				+ StringParser.colorVar("Lava",
						arena.cfg.getBoolean("protection.lavafirespread", true))
				+ " | "
				+ StringParser.colorVar("Explode",
						arena.cfg.getBoolean("protection.tnt", true)));
		player.sendMessage(StringParser.colorVar("Check Regions",
				arena.cfg.getBoolean("periphery.checkRegions", false))
				+ ": "
				+ StringParser.colorVar("Exit",
						arena.cfg.getBoolean("protection.checkExit", false))
				+ " | "
				+ StringParser.colorVar("Lounges",
						arena.cfg.getBoolean("protection.checkLounges", false))
				+ " | "
				+ StringParser.colorVar("Spectator", arena.cfg.getBoolean(
						"protection.checkSpectator", false)));
		player.sendMessage("JoinRange: "
				+ StringParser.colorVar(arena.cfg.getInt("join.range", 0))
				+ " || Entry Fee: "
				+ StringParser.colorVar(arena.cfg.getInt("money.entry", 0))
				+ " || Reward: "
				+ StringParser.colorVar(arena.cfg.getInt("money.reward", 0))
				+ " || "
				+ StringParser.colorVar("refill",
						arena.cfg.getBoolean("game.refillInventory", false)));

>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
		return true;
	}
Solution content
	 *            the player committing the command
	 * @return false if the command help should be displayed, true otherwise
	 */
	public static boolean parseInfo(Arena arena, Player player) {
		// TODO reorganize and update
		String type = arena.type().getName();
		player.sendMessage("-----------------------------------------------------");
		player.sendMessage("       Arena Information about [" + ChatColor.AQUA
				+ arena.name + ChatColor.WHITE + "]");
		player.sendMessage("-----------------------------------------------------");
		player.sendMessage("Type: " + ChatColor.AQUA + type + ChatColor.WHITE
				+ " || " + "Teams: " + colorTeams(arena));
		player.sendMessage(StringParser.colorVar("Enabled",
				arena.cfg.getBoolean("general.enabled"))
				+ " || "
				+ StringParser.colorVar("Fighting", arena.fightInProgress)
				+ " || "
				+ "Wand: "
				+ Material.getMaterial(arena.cfg.getInt("setup.wand", 280))
						.toString()
				+ " || "
				+ "Timing: "
				+ StringParser.colorVar(arena.cfg.getInt("goal.timed"))
				+ " || "
				+ "MaxLives: "
				+ StringParser.colorVar(arena.cfg.getInt("game.lives", 3)));
		player.sendMessage("Regionset: "
				+ StringParser.colorVar(arena.name.equals(Arena.regionmodify))
				+ " || No Death: "
				+ StringParser.colorVar(arena.cfg
						.getBoolean("game.preventDeath"))
				+ " || "
				+ "Force: "
				+ StringParser.colorVar("Even",
						arena.cfg.getBoolean("join.forceEven", false))
				+ " | "
				+ StringParser.colorVar("Woolhead",
						arena.cfg.getBoolean("game.woolHead", false)));
		player.sendMessage(StringParser.colorVar("TeamKill",
				arena.cfg.getBoolean("game.teamKill", false))
				+ " || Team Select: "
				+ StringParser.colorVar("manual",
						arena.cfg.getBoolean("join.manual", true))
				+ " | "
				+ StringParser.colorVar("random",
						arena.cfg.getBoolean("join.random", true)));
		player.sendMessage("Regions: " + listRegions(arena.regions));
		player.sendMessage("TPs: exit: "
				+ StringParser.colorVar(arena.cfg.getString("tp.exit", "exit"))
				+ " | death: "
				+ StringParser.colorVar(arena.cfg.getString("tp.death",
						"spectator")) + " | win: "
				+ StringParser.colorVar(arena.cfg.getString("tp.win", "old"))
				+ " | lose: "
				+ StringParser.colorVar(arena.cfg.getString("tp.lose", "old")));
		PVPArena.instance.getAmm().parseInfo(arena, player);
		player.sendMessage(StringParser.colorVar("Protection",
				arena.cfg.getBoolean("protection.enabled", true))
				+ ": "
				+ StringParser.colorVar("Fire",
						arena.cfg.getBoolean("protection.firespread", true))
				+ " | "
				+ StringParser.colorVar("Destroy",
						arena.cfg.getBoolean("protection.blockdamage", true))
				+ " | "
				+ StringParser.colorVar("Place",
						arena.cfg.getBoolean("protection.blockplace", true))
				+ " | "
				+ StringParser.colorVar("Ignite",
						arena.cfg.getBoolean("protection.lighter", true))
				+ " | "
				+ StringParser.colorVar("Lava",
						arena.cfg.getBoolean("protection.lavafirespread", true))
				+ " | "
				+ StringParser.colorVar("Explode",
						arena.cfg.getBoolean("protection.tnt", true)));
		player.sendMessage(StringParser.colorVar("Check Regions",
				arena.cfg.getBoolean("periphery.checkRegions", false))
				+ ": "
				+ StringParser.colorVar("Exit",
						arena.cfg.getBoolean("protection.checkExit", false))
				+ " | "
				+ StringParser.colorVar("Lounges",
						arena.cfg.getBoolean("protection.checkLounges", false))
				+ " | "
				+ StringParser.colorVar("Spectator", arena.cfg.getBoolean(
						"protection.checkSpectator", false)));
		player.sendMessage("JoinRange: "
				+ StringParser.colorVar(arena.cfg.getInt("join.range", 0))
				+ " || Entry Fee: "
				+ StringParser.colorVar(arena.cfg.getInt("money.entry", 0))
				+ " || Reward: "
				+ StringParser.colorVar(arena.cfg.getInt("money.reward", 0))
				+ " || "
				+ StringParser.colorVar("refill",
						arena.cfg.getBoolean("game.refillInventory", false)));

		return true;
	}
File
Commands.java
Developer's decision
Version 2
Kind of conflict
Comment
If statement
Method invocation
Method signature
Variable
Chunk
Conflicting content
						.getInt("ready.max") <= Teams
						.countPlayersInTeams(arena)))) {

<<<<<<< HEAD
		if (!cmd.contains(type)) {
			return false;
		}
		if (!player.getWorld().getName().equals(arena.getWorld())) {
			Arenas.tellPlayer(player,
					Language.parse("notsameworld", arena.getWorld()), arena.prefix);
			return false;
		}
		String sName = cmd.replace(type, "");
		
		boolean found = false;
		
		for (String sTeam : arena.paTeams.keySet()) {
			if (sName.startsWith(sTeam)) {
				found = true;
			}
		}
		
		if (!found) {
			return false;
		}

		Arena.regionmodify = arena.name + ":" + sName;
		Arenas.tellPlayer(player, Language.parse("toset" + type, sName), arena.prefix);
		return true;
=======
			Arenas.tellPlayer(player, Language.parse("arenafull"), arena);
			return true;
		}

		arena.prepare(player, false);
		arena.lives.put(player.getName(), arena.cfg.getInt("game.lives", 3));
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b

		Teams.choosePlayerTeam(arena, player);
		Inventories.prepareInventory(arena, player);
Solution content
						.getInt("ready.max") <= Teams
						.countPlayersInTeams(arena)))) {

			Arenas.tellPlayer(player, Language.parse("arenafull"), arena);
			return true;
		}

		arena.prepare(player, false);
		arena.lives.put(player.getName(), arena.cfg.getInt("game.lives", 3));

		Teams.choosePlayerTeam(arena, player);
		Inventories.prepareInventory(arena, player);
File
Commands.java
Developer's decision
Version 2
Kind of conflict
For statement
If statement
Method invocation
Return statement
Variable
Chunk
Conflicting content
		Teams.choosePlayerTeam(arena, player);
		Inventories.prepareInventory(arena, player);

<<<<<<< HEAD
	/**
	 * check if a given string is a valid region command
	 * 
	 * @param arena
	 *            the arena to check
	 * @param s
	 *            the string to check
	 * @return true if the command is valid, false otherwise
	 */
	public static boolean isRegionCommand(Arena arena, String s) {
		db.i("checking region command: " + s);
		if (s.equals("exit") || s.equals("spectator")
				|| s.equals("battlefield") || s.equals("join")) {
			return true;
		}
		if (arena.getType().equals("free")) {
			if (s.equals("lounge")) {
				return true;
			}
		} else {
			for (String sName : arena.paTeams.keySet()) {
				if (s.equals(sName + "lounge")) {
					return true;
				}
=======
		PVPArena.instance.getAmm().parseJoin(
				arena,
				player,
				Teams.getTeam(arena, ArenaPlayer.parsePlayer(player))
						.colorize());
		// process auto classing
		String autoClass = arena.cfg.getString("ready.autoclass");
		if (autoClass != null && !autoClass.equals("none")) {
			if (arena.classExists(autoClass)) {
				arena.forceChooseClass(player, null, autoClass);
			} else {
				db.w("autoclass selected that does not exist: " + autoClass);
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
			}
		}
		return true;
Solution content
		Teams.choosePlayerTeam(arena, player);
		Inventories.prepareInventory(arena, player);

		PVPArena.instance.getAmm().parseJoin(
				arena,
				player,
				Teams.getTeam(arena, ArenaPlayer.parsePlayer(player))
						.colorize());
		// process auto classing
		String autoClass = arena.cfg.getString("ready.autoclass");
		if (autoClass != null && !autoClass.equals("none")) {
			if (arena.classExists(autoClass)) {
				arena.forceChooseClass(player, null, autoClass);
			} else {
				db.w("autoclass selected that does not exist: " + autoClass);
			}
		}
		return true;
File
Commands.java
Developer's decision
Version 2
Kind of conflict
Comment
For statement
If statement
Method invocation
Method signature
Variable
Chunk
Conflicting content
	 *            the team to join
	 * @return false if the command help should be displayed, true otherwise
	 */
<<<<<<< HEAD
	private static boolean isSpawnCommand(Arena arena, Player player, String cmd) {
		if (!player.getWorld().getName().equals(arena.getWorld())) {
			Arenas.tellPlayer(player,
					Language.parse("notsameworld", arena.getWorld()), arena.prefix);
			return false;
		}
=======
	public static boolean parseJoinTeam(Arena arena, Player player, String sTeam) {
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b

		// /pa [team] or /pvparena [team]
Solution content
	 *            the team to join
	 * @return false if the command help should be displayed, true otherwise
	 */
	public static boolean parseJoinTeam(Arena arena, Player player, String sTeam) {

		// /pa [team] or /pvparena [team]
File
Commands.java
Developer's decision
Version 2
Kind of conflict
If statement
Method signature
Chunk
Conflicting content
		if (arena.cfg.getInt("ready.max") > 0

		// /pa [team] or /pvparena [team]

<<<<<<< HEAD
			if (arena.getType().equals("free")) {
				Spawns.setCoords(arena, player, cmd);
				Arenas.tellPlayer(player, Language.parse("setspawn", cmd), arena.prefix);
				return true;
			} else {
				Arenas.tellPlayer(player, Language.parse("errorspawnfree", cmd), arena.prefix);
				return false;
			}
		}

		if (cmd.contains("spawn") && !cmd.equals("spawn")) {
			String[] split = cmd.split("spawn");
			String sName = split[0];
			if (arena.paTeams.get(sName) == null)
				return false;

			Spawns.setCoords(arena, player, cmd);
			Arenas.tellPlayer(player, Language.parse("setspawn", sName), arena.prefix);
			return true;
		}

		if (cmd.startsWith("powerup")) {
			Spawns.setCoords(arena, player, cmd);
			Arenas.tellPlayer(player, Language.parse("setspawn", cmd), arena.prefix);
=======
		if (!checkJoin(arena, player)) {
			return true;
		}

		if (!(arena.cfg.getBoolean("join.manual", true))) {
			Arenas.tellPlayer(player, Language.parse("notselectteam"), arena);
			return true;
		}

				&& arena.cfg.getInt("ready.max") <= Teams
						.countPlayersInTeams(arena)) {

			Arenas.tellPlayer(player, Language.parse("teamfull",
					Teams.getTeam(arena, sTeam).colorize()), arena);
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
			return true;
		}
Solution content
		// /pa [team] or /pvparena [team]

		if (!checkJoin(arena, player)) {
			return true;
		}

		if (!(arena.cfg.getBoolean("join.manual", true))) {
			Arenas.tellPlayer(player, Language.parse("notselectteam"), arena);
			return true;
		}

		if (arena.cfg.getInt("ready.max") > 0
				&& arena.cfg.getInt("ready.max") <= Teams
						.countPlayersInTeams(arena)) {

			Arenas.tellPlayer(player, Language.parse("teamfull",
					Teams.getTeam(arena, sTeam).colorize()), arena);
			return true;
		}
File
Commands.java
Developer's decision
Version 2
Kind of conflict
If statement
Method invocation
Chunk
Conflicting content
			return true;
		}

<<<<<<< HEAD
	/**
	 * check if a command is a valid lounge command
	 * 
	 * @param arena
	 *            the arena to check
	 * @param player
	 *            the player committing the command
	 * @param cmd
	 *            the command to check
	 * @return false if the command help should be displayed, true otherwise
	 */
	private static boolean isLoungeCommand(Arena arena, Player player,
			String cmd) {
		if (!player.getWorld().getName().equals(arena.getWorld())) {
			Arenas.tellPlayer(player,
					Language.parse("notsameworld", arena.getWorld()), arena.prefix);
			return false;
		}

		if (cmd.equalsIgnoreCase("lounge")) {
			if (arena.getType().equals("free")) {
				Spawns.setCoords(arena, player, "lounge");
				Arenas.tellPlayer(player, Language.parse("setlounge"), arena.prefix);
				return true;
			} else {
				Arenas.tellPlayer(player, Language.parse("errorloungefree"), arena.prefix);
				return false;
			}
		}

		if (cmd.endsWith("lounge")) {
			String color = cmd.replace("lounge", "");
			if (arena.paTeams.containsKey(color)) {
				Spawns.setCoords(arena, player, cmd);
				Arenas.tellPlayer(player, Language.parse("setlounge", color), arena.prefix);
				return true;
			}
			Arenas.tellPlayer(player, Language.parse("invalidcmd", "506"), arena.prefix);
			return true;
		}
		return false;
=======
		arena.prepare(player, false);
		arena.lives.put(player.getName(), arena.cfg.getInt("game.lives", 3));

		arena.tpPlayerToCoordName(player, sTeam + "lounge");

		ArenaTeam team = Teams.getTeam(arena, sTeam);
		ArenaPlayer ap = ArenaPlayer.parsePlayer(player);

		team.add(ap);

		Inventories.prepareInventory(arena, player);
		String coloredTeam = team.colorize();

		PVPArena.instance.getAmm().parseJoin(arena, player, coloredTeam);

		Arenas.tellPlayer(player, Language.parse("youjoined", coloredTeam),
				arena);
		arena.tellEveryoneExcept(player,
				Language.parse("playerjoined", player.getName(), coloredTeam));

		// process auto classing
		String autoClass = arena.cfg.getString("ready.autoclass");
		if (autoClass != null && !autoClass.equals("none")) {
			if (arena.classExists(autoClass)) {
				arena.forceChooseClass(player, null, autoClass);
			} else {
				db.w("autoclass selected that does not exist: " + autoClass);
			}
		}

		return true;
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
	}

	/**
Solution content
			return true;
		}

		arena.prepare(player, false);
		arena.lives.put(player.getName(), arena.cfg.getInt("game.lives", 3));

		arena.tpPlayerToCoordName(player, sTeam + "lounge");

		ArenaTeam team = Teams.getTeam(arena, sTeam);
		ArenaPlayer ap = ArenaPlayer.parsePlayer(player);

		team.add(ap);

		Inventories.prepareInventory(arena, player);
		String coloredTeam = team.colorize();

		PVPArena.instance.getAmm().parseJoin(arena, player, coloredTeam);

		Arenas.tellPlayer(player, Language.parse("youjoined", coloredTeam),
				arena);
		arena.tellEveryoneExcept(player,
				Language.parse("playerjoined", player.getName(), coloredTeam));

		// process auto classing
		String autoClass = arena.cfg.getString("ready.autoclass");
		if (autoClass != null && !autoClass.equals("none")) {
			if (arena.classExists(autoClass)) {
				arena.forceChooseClass(player, null, autoClass);
			} else {
				db.w("autoclass selected that does not exist: " + autoClass);
			}
		}

		return true;
	}

	/**
File
Commands.java
Developer's decision
Version 2
Kind of conflict
Comment
If statement
Method invocation
Method signature
Return statement
Variable
Chunk
Conflicting content
	 *            the player committing the command
	 * @return false if the command help should be displayed, true otherwise
	 */
<<<<<<< HEAD
	public static boolean parseBetCommand(Arena arena, Player player,
			String[] args) {
		// /pa bet [name] [amount]
		if (Players.isPartOf(arena, player)
				&& !Players.getTeam(player).equals("")) {
			Arenas.tellPlayer(player, Language.parse("betnotyours"), arena.prefix);
			return true;
		}

		if (PVPArena.economy == null && PVPArena.eco == null)
			return true;

		Player p = Bukkit.getPlayer(args[1]);

		if ((arena.paTeams.get(args[1]) == null)
				&& (Players.getTeam(p).equals(""))) {
			Arenas.tellPlayer(player, Language.parse("betoptions"), arena.prefix);
			return true;
		}

		double amount = 0;

		try {
			amount = Double.parseDouble(args[2]);
		} catch (Exception e) {
			Arenas.tellPlayer(player, Language.parse("invalidamount", args[2]), arena.prefix);
			return true;
		}
		MethodAccount ma = null;
		if (PVPArena.economy != null) {
			if (!PVPArena.economy.hasAccount(player.getName())) {
				db.s("Account not found: " + player.getName());
				return true;
			}
			if (!PVPArena.economy.has(player.getName(), amount)) {
				// no money, no entry!
				Arenas.tellPlayer(
						player,
						Language.parse("notenough",
								PVPArena.economy.format(amount)), arena.prefix);
				return true;
			}
		} else {
			ma = PVPArena.eco.getAccount(player.getName());
			if (ma == null) {
				db.s("Account not found: " + player.getName());
				return true;
			}
			if (!ma.hasEnough(amount)) {
				// no money, no entry!
				Arenas.tellPlayer(player, Language.parse("notenough",
						PVPArena.eco.format(amount)), arena.prefix);
				return true;
			}
		}

		if (amount < arena.cfg.getDouble("money.minbet")
				|| (amount > arena.cfg.getDouble("money.maxbet"))) {
			// wrong amount!
			if (PVPArena.economy != null) {
				Arenas.tellPlayer(player, Language.parse("wrongamount",
						PVPArena.economy.format(arena.cfg
								.getDouble("money.minbet")), PVPArena.economy
								.format(arena.cfg.getDouble("money.maxbet"))), arena.prefix);
			} else {
				Arenas.tellPlayer(player, Language
						.parse("wrongamount", PVPArena.eco.format(arena.cfg
								.getDouble("money.minbet")), PVPArena.eco
								.format(arena.cfg.getDouble("money.maxbet"))), arena.prefix);
			}
			return true;
		}

		if (PVPArena.economy != null) {
			PVPArena.economy.withdrawPlayer(player.getName(), amount);
		} else {
			ma.subtract(amount);
		}
		Arenas.tellPlayer(player, Language.parse("betplaced", args[1]), arena.prefix);
		Players.paPlayersBetAmount
				.put(player.getName() + ":" + args[1], amount);
=======
	public static boolean parseList(Arena arena, Player player) {
		if (Teams.countPlayersInTeams(arena) < 1) {
			Arenas.tellPlayer(player, Language.parse("noplayer"), arena);
			return true;
		}
		String plrs = Teams.getTeamStringList(arena);
		Arenas.tellPlayer(player, Language.parse("players") + ": " + plrs,
				arena);
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
		return true;
	}
Solution content
	 *            the player committing the command
	 * @return false if the command help should be displayed, true otherwise
	 */
	public static boolean parseList(Arena arena, Player player) {
		if (Teams.countPlayersInTeams(arena) < 1) {
			Arenas.tellPlayer(player, Language.parse("noplayer"), arena);
			return true;
		}
		String plrs = Teams.getTeamStringList(arena);
		Arenas.tellPlayer(player, Language.parse("players") + ": " + plrs,
				arena);
		return true;
	}
File
Commands.java
Developer's decision
Version 2
Kind of conflict
Comment
If statement
Method invocation
Method signature
Try statement
Variable
Chunk
Conflicting content
	/**
	 * enable region modifying
	 * 
<<<<<<< HEAD
	 * @param map
	 *            the input team map
	 * @return the joined and colored string
	 */
	private static String colorTeams(HashMap map) {
		String s = "";
		for (String k : map.keySet()) {
			if (!s.equals("")) {
				s += " | ";
			}
			s += ChatColor.valueOf(map.get(k)) + k + ChatColor.WHITE;
=======
	 * @param arena
	 *            the arena to check
	 * @param player
	 *            the player committing the command
	 * @return false if the command help should be displayed, true otherwise
	 */
	public static boolean parseRegion(Arena arena, Player player) {
		// /pa [name] region
		if (!Arena.regionmodify.equals("")) {
			Arenas.tellPlayer(
					player,
					Language.parse("regionalreadybeingset", Arena.regionmodify),
					arena);
			return true;
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
		}
		Arena.regionmodify = arena.name;
		Arenas.tellPlayer(player, Language.parse("regionset"), arena);
Solution content
	/**
	 * enable region modifying
	 * 
	 * @param arena
	 *            the arena to check
	 * @param player
	 *            the player committing the command
	 * @return false if the command help should be displayed, true otherwise
	 */
	public static boolean parseRegion(Arena arena, Player player) {
		// /pa [name] region
		if (!Arena.regionmodify.equals("")) {
			Arenas.tellPlayer(
					player,
					Language.parse("regionalreadybeingset", Arena.regionmodify),
					arena);
			return true;
		}
		Arena.regionmodify = arena.name;
		Arenas.tellPlayer(player, Language.parse("regionset"), arena);
File
Commands.java
Developer's decision
Version 2
Kind of conflict
Comment
For statement
If statement
Method invocation
Method signature
Return statement
Variable
Chunk
Conflicting content
	 *            the player committing the command
	 * @return false if the command help should be displayed, true otherwise
	 */
<<<<<<< HEAD
	private static String listRegions(HashMap paRegions) {
		String s = "";
		for (ArenaRegion p : paRegions.values()) {
			if (!s.equals("")) {
				s += " | ";
			}
			s += p.name + " ("+p.getTye().name().charAt(0)+")";
=======
	public static boolean parseReload(Player player) {

		if (!PVPArena.hasAdminPerms(player)) {
			Arenas.tellPlayer(player,
					Language.parse("nopermto", Language.parse("reload")));
			return true;
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
		}
		Arenas.load_arenas();
		Arenas.tellPlayer(player, Language.parse("reloaded"));
Solution content
	 *            the player committing the command
	 * @return false if the command help should be displayed, true otherwise
	 */
	public static boolean parseReload(Player player) {

		if (!PVPArena.hasAdminPerms(player)) {
			Arenas.tellPlayer(player,
					Language.parse("nopermto", Language.parse("reload")));
			return true;
		}
		Arenas.load_arenas();
		Arenas.tellPlayer(player, Language.parse("reloaded"));
File
Commands.java
Developer's decision
Version 2
Kind of conflict
For statement
If statement
Method invocation
Method signature
Return statement
Variable
Chunk
Conflicting content
	 *            to commit (enabled/disabled)
	 * @return false if the command help should be displayed, true otherwise
	 */
<<<<<<< HEAD
	public static boolean parseInfo(Arena arena, Player player) {
		// TODO reorganize and update
		String type = arena.getType();
		player.sendMessage("-----------------------------------------------------");
		player.sendMessage("       Arena Information about [" + ChatColor.AQUA
				+ arena.name + ChatColor.WHITE + "]");
		player.sendMessage("-----------------------------------------------------");
		player.sendMessage("Type: " + ChatColor.AQUA + type + ChatColor.WHITE
				+ " || " + "Teams: " + colorTeams(arena.paTeams));
		player.sendMessage(colorVar("Enabled",
				arena.cfg.getBoolean("general.enabled"))
				+ " || "
				+ colorVar("Fighting", arena.fightInProgress)
				+ " || "
				+ "Wand: "
				+ Material.getMaterial(arena.cfg.getInt("setup.wand", 280))
						.toString()
				+ " || "
				+ "Timing: "
				+ colorVar(arena.cfg.getInt("goal.timed"))
				+ " || "
				+ "MaxLives: " + colorVar(arena.cfg.getInt("game.lives", 3)));
		player.sendMessage("Regionset: "
				+ colorVar(arena.name.equals(Arena.regionmodify))
				+ " || No Death: "
				+ colorVar(arena.cfg.getBoolean("game.preventDeath"))
				+ " || "
				+ "Force: "
				+ colorVar("Even",
						arena.cfg.getBoolean("join.forceEven", false))
				+ " | "
				+ colorVar("Woolhead",
						arena.cfg.getBoolean("game.woolHead", false)));
		player.sendMessage(colorVar("TeamKill",
				arena.cfg.getBoolean("game.teamKill", false))
				+ " || Team Select: "
				+ colorVar("manual", arena.cfg.getBoolean("join.manual", true))
				+ " | "
				+ colorVar("random", arena.cfg.getBoolean("join.random", true)));
		player.sendMessage("Regions: " + listRegions(arena.regions));
		player.sendMessage("TPs: exit: "
				+ colorVar(arena.cfg.getString("tp.exit", "exit"))
				+ " | death: "
				+ colorVar(arena.cfg.getString("tp.death", "spectator"))
				+ " | win: " + colorVar(arena.cfg.getString("tp.win", "old"))
				+ " | lose: " + colorVar(arena.cfg.getString("tp.lose", "old")));
		player.sendMessage(colorVar("Powerups", arena.usesPowerups)
				+ "("
				+ colorVar(arena.cfg.getString("game.powerups"))
				+ ")"
				+ " | "
				+ colorVar("randomSpawn",
						arena.cfg.getBoolean("arenatype.randomSpawn", false))
				+ " | "
				+ colorVar("refill",
						arena.cfg.getBoolean("game.refillInventory", false)));
		player.sendMessage(colorVar("Protection",
				arena.cfg.getBoolean("protection.enabled", true))
				+ ": "
				+ colorVar("Fire",
						arena.cfg.getBoolean("protection.firespread", true))
				+ " | "
				+ colorVar("Destroy",
						arena.cfg.getBoolean("protection.blockdamage", true))
				+ " | "
				+ colorVar("Place",
						arena.cfg.getBoolean("protection.blockplace", true))
				+ " | "
				+ colorVar("Ignite",
						arena.cfg.getBoolean("protection.lighter", true))
				+ " | "
				+ colorVar("Lava",
						arena.cfg.getBoolean("protection.lavafirespread", true))
				+ " | "
				+ colorVar("Explode",
						arena.cfg.getBoolean("protection.tnt", true)));
		player.sendMessage(colorVar("Check Regions",
				arena.cfg.getBoolean("periphery.checkRegions", false))
				+ ": "
				+ colorVar("Exit",
						arena.cfg.getBoolean("protection.checkExit", false))
				+ " | "
				+ colorVar("Lounges",
						arena.cfg.getBoolean("protection.checkLounges", false))
				+ " | "
				+ colorVar("Spectator", arena.cfg.getBoolean(
						"protection.checkSpectator", false)));
		player.sendMessage("JoinRange: "
				+ colorVar(arena.cfg.getInt("join.range", 0))
				+ " || Entry Fee: "
				+ colorVar(arena.cfg.getInt("money.entry", 0)) + " || Reward: "
				+ colorVar(arena.cfg.getInt("money.reward", 0)));

=======
	public static boolean parseToggle(Arena arena, Player player, String string) {
		if (!PVPArena.hasAdminPerms(player)
				&& !(PVPArena.hasCreatePerms(player, arena))) {
			Arenas.tellPlayer(player,
					Language.parse("nopermto", Language.parse(string)), arena);
			return true;
		}
		arena.cfg.set("general.enabled", string.equals("enabled"));
		arena.cfg.save();
		Arenas.tellPlayer(player, Language.parse(string), arena);
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
		return true;
	}
Solution content
	 *            to commit (enabled/disabled)
	 * @return false if the command help should be displayed, true otherwise
	 */
	public static boolean parseToggle(Arena arena, Player player, String string) {
		if (!PVPArena.hasAdminPerms(player)
				&& !(PVPArena.hasCreatePerms(player, arena))) {
			Arenas.tellPlayer(player,
					Language.parse("nopermto", Language.parse(string)), arena);
			return true;
		}
		arena.cfg.set("general.enabled", string.equals("enabled"));
		arena.cfg.save();
		Arenas.tellPlayer(player, Language.parse(string), arena);
		return true;
	}
File
Commands.java
Developer's decision
Version 2
Kind of conflict
Comment
If statement
Method invocation
Method signature
Variable
Chunk
Conflicting content
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.inventory.ItemStack;

<<<<<<< HEAD
import net.slipcor.pvparena.core.Config;
import net.slipcor.pvparena.core.Debug;
import net.slipcor.pvparena.core.StringParser;
import net.slipcor.pvparena.definitions.Arena;
import net.slipcor.pvparena.definitions.ArenaBoard;
=======
import net.slipcor.pvparena.PVPArena;
import net.slipcor.pvparena.arena.Arena;
import net.slipcor.pvparena.arena.ArenaTeam;
import net.slipcor.pvparena.core.Config;
import net.slipcor.pvparena.core.Debug;
import net.slipcor.pvparena.core.StringParser;
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
import net.slipcor.pvparena.definitions.ArenaRegion;
import net.slipcor.pvparena.neworder.ArenaType;
Solution content
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.inventory.ItemStack;

import net.slipcor.pvparena.PVPArena;
import net.slipcor.pvparena.arena.Arena;
import net.slipcor.pvparena.arena.ArenaTeam;
import net.slipcor.pvparena.core.Config;
import net.slipcor.pvparena.core.Debug;
import net.slipcor.pvparena.core.StringParser;
import net.slipcor.pvparena.definitions.ArenaRegion;
import net.slipcor.pvparena.neworder.ArenaType;
File
Configs.java
Developer's decision
Version 2
Kind of conflict
Import
Chunk
Conflicting content
 * 
 * @author slipcor
 * 
<<<<<<< HEAD
 * @version v0.6.41
=======
 * @version v0.7.9
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
 * 
 */
Solution content
 * 
 * @author slipcor
 * 
 * @version v0.7.9
 * 
 */
File
Configs.java
Developer's decision
Version 2
Kind of conflict
Comment
Chunk
Conflicting content
				.getValues(true);

		for (String sTeam : tempMap.keySet()) {
<<<<<<< HEAD
			arena.paTeams.put(sTeam, (String) tempMap.get(sTeam));
			db.i("added team " + sTeam + " => " + arena.paTeams.get(sTeam));
		}
		if (arena.cfg.getBoolean("arenatype.flags")) {
			arena.paTeamFlags = new HashMap();
		}
		if (arena.cfg.getBoolean("arenatype.flags")) {
			arena.paHeadGears = new HashMap();
		}
		if (!cfg.getBoolean("usesTeams") && type.equals("free")) {

			db.i("FreeFight Arena default overrides");

			cfg.set("game.teamKill", true);
			cfg.set("join.manual", false);
			cfg.set("join.random", true);
			cfg.set("game.woolHead", false);
			cfg.set("join.forceeven", false);
			cfg.set("arenatype.randomSpawn", true);
			cfg.set("teams", null);
			cfg.set("teams.free", "WHITE");
			cfg.save();
		}
		if (config.get("spawns") != null) {
			db.i("checkinf for leaderboard");
			if (config.get("spawns.leaderboard") != null) {
				db.i("leaderboard exists");
				Location loc = Config.parseLocation(
						Bukkit.getWorld(arena.getWorld()),
						config.getString("spawns.leaderboard"));

				Arenas.boards.put(loc, new ArenaBoard(loc, arena));
			}
		}
		arena.prefix = cfg.getString("general.prefix");
	}
=======
			ArenaTeam team = new ArenaTeam(sTeam, (String) tempMap.get(sTeam));
			Teams.addTeam(arena, team);
			db.i("added team " + team.getName() + " => "
					+ team.getColorString());
		}
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b

		arena.type().configParse();
Solution content
				.getValues(true);

		for (String sTeam : tempMap.keySet()) {
			ArenaTeam team = new ArenaTeam(sTeam, (String) tempMap.get(sTeam));
			Teams.addTeam(arena, team);
			db.i("added team " + team.getName() + " => "
					+ team.getColorString());
		}

		arena.type().configParse();
File
Configs.java
Developer's decision
Version 2
Kind of conflict
If statement
Method invocation
Variable
Chunk
Conflicting content
		if (!list.contains("exit"))
			return "exit not set";

<<<<<<< HEAD
		if (arena.cfg.getBoolean("arenatype.flags")) {
			String type = arena.getType();

			if (type.equals("dom")) {
				boolean contains = false;
				for (String s : list) {
					if (s.startsWith("flag")) {
						contains = true;
						break;
					}
				}
				if (!contains) {
					return "flags not set";
				}
			} else {

				type = type.equals("pumpkin") ? type : "flag";
				for (String team : arena.paTeams.keySet()) {
					if (!list.contains(team + type)) {
						boolean found = false;
						for (String s : list) {
							if (s.startsWith(team) && s.endsWith(type)) {
								found = true;
								break;
							}
						}
						if (!found)
							return team + type + " not set";
					}
				}
			}
		}

		if (arena.getType().equals("free")) {
			return isFreesetup(arena, list);
		}

		if (arena.cfg.getBoolean("arenatype.randomSpawn", false)) {

			// now we need a spawn and lounge for every team

			db.i("parsing random");

			Iterator iter = list.iterator();
			int spawns = 0;
			int lounges = 0;
			while (iter.hasNext()) {
				String s = iter.next();
				db.i("parsing '" + s + "'");
				if (s.equals("lounge") && arena.getType().equals("team"))
					continue; // skip except for FREE
				if (s.startsWith("spawn"))
					spawns++;
				if (s.endsWith("lounge"))
					lounges++;
			}
			if (spawns > 3 && lounges >= arena.paTeams.size()) {
				return null;
			}

			return spawns + "/" + 4 + "x spawn ; " + lounges + "/"
					+ arena.paTeams.size() + "x lounge";
		} else {
			// not random! we need teams * 2 (lounge + spawn) + exit + spectator
			db.i("parsing not random");
			Iterator iter = list.iterator();
			int spawns = 0;
			int lounges = 0;
			HashSet setTeams = new HashSet();
			while (iter.hasNext()) {
				String s = iter.next();
				db.i("parsing '" + s + "'");
				db.i("spawns: " + spawns + "; lounges: " + lounges);
				if (s.endsWith("spawn") && (!s.equals("spawn"))) {
					spawns++;
				} else if (s.endsWith("lounge") && (!s.equals("lounge"))) {
					lounges++;
				} else if (s.contains("spawn") && (!s.equals("spawn"))) {
					String[] temp = s.split("spawn");
					if (arena.paTeams.get(temp[0]) != null) {
						if (setTeams.contains(arena.paTeams.get(temp[0]))) {
							db.i("team already set");
							continue;
						}
						db.i("adding team");
						setTeams.add(arena.paTeams.get(temp[0]));
						spawns++;
					}
				}
			}
			if (spawns == arena.paTeams.size()
					&& lounges == arena.paTeams.size()) {
				return null;
			}

			return spawns + "/" + arena.paTeams.size() + "x spawn ; " + lounges
					+ "/" + arena.paTeams.size() + "x lounge";
		}
	}

	/**
	 * check if a free arena is configured completely
	 * 
	 * @param arena
	 *            the arena to check
	 * @param list
	 *            the defined spawn points
	 * @return an error string if there is something missing, null otherwise
	 */
	private static String isFreesetup(Arena arena, Set list) {
		if (!list.contains("lounge"))
			return "lounge not set";
		Iterator iter = list.iterator();
		int spawns = 0;
		while (iter.hasNext()) {
			String s = iter.next();
			if (s.startsWith("spawn"))
				spawns++;
		}
		if (spawns > 3) {
			return null;
		}

		return "not enough spawns (" + spawns + ")";
=======
		return arena.type().checkSpawns(list);
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
	}
}
Solution content
		if (!list.contains("exit"))
			return "exit not set";

		return arena.type().checkSpawns(list);
	}
}
File
Configs.java
Developer's decision
Version 2
Kind of conflict
Comment
If statement
Method invocation
Method signature
Return statement
Variable
While statement
Chunk
Conflicting content
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
<<<<<<< HEAD
import org.bukkit.inventory.PlayerInventory;

=======
import net.slipcor.pvparena.arena.Arena;
import net.slipcor.pvparena.arena.ArenaClass;
import net.slipcor.pvparena.arena.ArenaPlayer;
import net.slipcor.pvparena.arena.ArenaTeam;
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
import net.slipcor.pvparena.core.Debug;
import net.slipcor.pvparena.core.StringParser;
import net.slipcor.pvparena.definitions.Arena;
Solution content
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import net.slipcor.pvparena.arena.Arena;
import net.slipcor.pvparena.arena.ArenaClass;
import net.slipcor.pvparena.arena.ArenaPlayer;
import net.slipcor.pvparena.arena.ArenaTeam;
import net.slipcor.pvparena.core.Debug;
import net.slipcor.pvparena.core.StringParser;
File
Inventories.java
Developer's decision
Version 2
Kind of conflict
Import
Chunk
Conflicting content
 * 
 * @author slipcor
 * 
<<<<<<< HEAD
 * @version v0.6.30
=======
 * @version v0.7.9
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
 * 
 */
Solution content
 * 
 * @author slipcor
 * 
 * @version v0.7.9
 * 
 */
File
Inventories.java
Developer's decision
Version 2
Kind of conflict
Comment
Chunk
Conflicting content
	public static final Debug db = new Debug(30);

<<<<<<< HEAD
	// private statics: item definitions
	private static final List ARMORS_TYPE = new LinkedList();
	private static final List HELMETS_TYPE = new LinkedList();
	private static final List CHESTPLATES_TYPE = new LinkedList();
	private static final List LEGGINGS_TYPE = new LinkedList();
	private static final List BOOTS_TYPE = new LinkedList();

	// static filling of the items array
	static {
		HELMETS_TYPE.add(Material.LEATHER_HELMET);
		HELMETS_TYPE.add(Material.GOLD_HELMET);
		HELMETS_TYPE.add(Material.CHAINMAIL_HELMET);
		HELMETS_TYPE.add(Material.IRON_HELMET);
		HELMETS_TYPE.add(Material.DIAMOND_HELMET);

		CHESTPLATES_TYPE.add(Material.LEATHER_CHESTPLATE);
		CHESTPLATES_TYPE.add(Material.GOLD_CHESTPLATE);
		CHESTPLATES_TYPE.add(Material.CHAINMAIL_CHESTPLATE);
		CHESTPLATES_TYPE.add(Material.IRON_CHESTPLATE);
		CHESTPLATES_TYPE.add(Material.DIAMOND_CHESTPLATE);

		LEGGINGS_TYPE.add(Material.LEATHER_LEGGINGS);
		LEGGINGS_TYPE.add(Material.GOLD_LEGGINGS);
		LEGGINGS_TYPE.add(Material.CHAINMAIL_LEGGINGS);
		LEGGINGS_TYPE.add(Material.IRON_LEGGINGS);
		LEGGINGS_TYPE.add(Material.DIAMOND_LEGGINGS);

		BOOTS_TYPE.add(Material.LEATHER_BOOTS);
		BOOTS_TYPE.add(Material.GOLD_BOOTS);
		BOOTS_TYPE.add(Material.CHAINMAIL_BOOTS);
		BOOTS_TYPE.add(Material.IRON_BOOTS);
		BOOTS_TYPE.add(Material.DIAMOND_BOOTS);

		ARMORS_TYPE.addAll(HELMETS_TYPE);
		ARMORS_TYPE.addAll(CHESTPLATES_TYPE);
		ARMORS_TYPE.addAll(LEGGINGS_TYPE);
		ARMORS_TYPE.addAll(BOOTS_TYPE);
	}

	/**
	 * prepare a player's inventory, back it up and clear it
	 * 
	 * @param player
	 *            the player to save
	 */
	public static void prepareInventory(Arena arena, Player player) {
		db.i("saving player inventory: " + player.getName());

		ArenaPlayer p = Players.parsePlayer(player);
		p.savedInventory = player.getInventory().getContents().clone();
		p.savedArmor = player.getInventory().getArmorContents().clone();
		clearInventory(player);
	}

=======
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
	/**
	 * fully clear a player's inventory
	 * 
Solution content
	public static final Debug db = new Debug(30);

	/**
	 * fully clear a player's inventory
	 * 
File
Inventories.java
Developer's decision
Version 2
Kind of conflict
Attribute
Comment
Method declaration
Method invocation
Static initializer
Chunk
Conflicting content
	 *            the player to supply
	 */
	public static void givePlayerFightItems(Arena arena, Player player) {
<<<<<<< HEAD
		String playerClass = Players.getClass(player);
=======
		ArenaPlayer ap = ArenaPlayer.parsePlayer(player);

		ArenaClass playerClass = ap.getaClass();
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
		db.i("giving items to player '" + player.getName() + "', class '"
				+ playerClass + "'");
Solution content
	 *            the player to supply
	 */
	public static void givePlayerFightItems(Arena arena, Player player) {
		ArenaPlayer ap = ArenaPlayer.parsePlayer(player);

		ArenaClass playerClass = ap.getaClass();
		db.i("giving items to player '" + player.getName() + "', class '"
				+ playerClass.getName() + "'");
File
Inventories.java
Developer's decision
Version 2
Kind of conflict
Method invocation
Variable
Chunk
Conflicting content
		db.i("giving items to player '" + player.getName() + "', class '"
				+ playerClass + "'");

<<<<<<< HEAD
		ItemStack[] items = arena.paClassItems.get(playerClass);

		for (int i = 0; i < items.length; ++i) {
			ItemStack stack = items[i];
			if (ARMORS_TYPE.contains(stack.getType())) {
				equipArmorPiece(stack, player.getInventory());
			} else {
				player.getInventory().addItem(new ItemStack[] { stack });
			}
		}
		if (arena.cfg.getBoolean("game.woolHead", false)) {
			String sTeam = Players.getTeam(player);
			String color = arena.paTeams.get(sTeam);
			db.i("forcing woolhead: " + sTeam + "/" + color);
=======
		playerClass.load(player);

		if (arena.cfg.getBoolean("game.woolHead", false)) {
			ArenaTeam aTeam = Teams.getTeam(arena, ap);
			String color = aTeam.getColor().name();
			db.i("forcing woolhead: " + aTeam.getName() + "/" + color);
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
			player.getInventory().setHelmet(
					new ItemStack(Material.WOOL, 1, StringParser
							.getColorDataFromENUM(color)));
Solution content
		db.i("giving items to player '" + player.getName() + "', class '"
				+ playerClass.getName() + "'");

		playerClass.load(player);

		if (arena.cfg.getBoolean("game.woolHead", false)) {
			ArenaTeam aTeam = Teams.getTeam(arena, ap);
			String color = aTeam.getColor().name();
			db.i("forcing woolhead: " + aTeam.getName() + "/" + color);
			player.getInventory().setHelmet(
					new ItemStack(Material.WOOL, 1, StringParser
							.getColorDataFromENUM(color)));
File
Inventories.java
Developer's decision
Version 2
Kind of conflict
For statement
If statement
Method invocation
Variable
Chunk
Conflicting content
			db.i("modify&adminperms&wand");
			if (event.getAction() == Action.LEFT_CLICK_BLOCK) {
				arena.pos1 = event.getClickedBlock().getLocation();
<<<<<<< HEAD
				Arenas.tellPlayer(player, Language.parse("pos1"), arena.prefix);
=======
				Arenas.tellPlayer(player, Language.parse("pos1"), arena);
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
				event.setCancelled(true); // no destruction in creative mode :)
				return true; // left click => pos1
			}
Solution content
			db.i("modify&adminperms&wand");
			if (event.getAction() == Action.LEFT_CLICK_BLOCK) {
				arena.pos1 = event.getClickedBlock().getLocation();
				Arenas.tellPlayer(player, Language.parse("pos1"), arena);
				event.setCancelled(true); // no destruction in creative mode :)
				return true; // left click => pos1
			}
File
Regions.java
Developer's decision
Version 2
Kind of conflict
Method invocation
Chunk
Conflicting content
			if (event.getAction() == Action.RIGHT_CLICK_BLOCK) {
				arena.pos2 = event.getClickedBlock().getLocation();
<<<<<<< HEAD
				Arenas.tellPlayer(player, Language.parse("pos2"), arena.prefix);
=======
				Arenas.tellPlayer(player, Language.parse("pos2"), arena);
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
				return true; // right click => pos2
			}
		}
Solution content
			if (event.getAction() == Action.RIGHT_CLICK_BLOCK) {
				arena.pos2 = event.getClickedBlock().getLocation();
				Arenas.tellPlayer(player, Language.parse("pos2"), arena);
				return true; // right click => pos2
			}
		}
File
Regions.java
Developer's decision
Version 2
Kind of conflict
Method invocation
Chunk
Conflicting content
 * 
 * @author slipcor
 * 
<<<<<<< HEAD
 * @version v0.6.41
=======
 * @version v0.7.9
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
 * 
 */
Solution content
 * 
 * @author slipcor
 * 
 * @version v0.7.9
 * 
 */
File
Settings.java
Developer's decision
Version 2
Kind of conflict
Comment
Chunk
Conflicting content
			}
		}
		Arenas.tellPlayer(player, ChatColor.GRAY + "------ config list ["
<<<<<<< HEAD
				+ page + "] ------", arena.prefix);
		for (String node : keys) {
			Arenas.tellPlayer(player, node + " => " + types.get(getNode(node)), arena.prefix);
=======
				+ page + "] ------", arena);
		for (String node : keys) {
			Arenas.tellPlayer(player, node + " => " + types.get(getNode(node)),
					arena);
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
		}

	}
Solution content
			}
		}
		Arenas.tellPlayer(player, ChatColor.GRAY + "------ config list ["
				+ page + "] ------", arena);
		for (String node : keys) {
			Arenas.tellPlayer(player, node + " => " + types.get(getNode(node)),
					arena);
		}

	}
File
Settings.java
Developer's decision
Version 2
Kind of conflict
Attribute
For statement
Method invocation
Variable
Chunk
Conflicting content
				&& !PVPArena.hasCreatePerms(player, arena)) {

			Arenas.tellPlayer(player,
<<<<<<< HEAD
					Language.parse("nopermto", Language.parse("set")), arena.prefix);
=======
					Language.parse("nopermto", Language.parse("set")), arena);
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
			return;
		}
Solution content
				&& !PVPArena.hasCreatePerms(player, arena)) {

			Arenas.tellPlayer(player,
					Language.parse("nopermto", Language.parse("set")), arena);
			return;
		}
File
Settings.java
Developer's decision
Version 2
Kind of conflict
Attribute
Method invocation
Chunk
Conflicting content
						player,
						node
								+ " set to "
<<<<<<< HEAD
								+ String.valueOf(value.equalsIgnoreCase("true")), arena.prefix);
=======
								+ String.valueOf(value.equalsIgnoreCase("true")),
						arena);
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
			} else if (value.equalsIgnoreCase("false")) {
				arena.cfg.set(node, Boolean.valueOf(false));
				Arenas.tellPlayer(
Solution content
						player,
						node
								+ " set to "
								+ String.valueOf(value.equalsIgnoreCase("true")),
						arena);
			} else if (value.equalsIgnoreCase("false")) {
				arena.cfg.set(node, Boolean.valueOf(false));
				Arenas.tellPlayer(
File
Settings.java
Developer's decision
Version 2
Kind of conflict
Attribute
Method invocation
Chunk
Conflicting content
						player,
						node
								+ " set to "
<<<<<<< HEAD
								+ String.valueOf(value.equalsIgnoreCase("true")), arena.prefix);
			} else {
				Arenas.tellPlayer(player, "No valid boolean '" + value + "'!", arena.prefix);
				Arenas.tellPlayer(player, "Valid values: true | false", arena.prefix);
=======
								+ String.valueOf(value.equalsIgnoreCase("true")),
						arena);
			} else {
				Arenas.tellPlayer(player, "No valid boolean '" + value + "'!",
						arena);
				Arenas.tellPlayer(player, "Valid values: true | false", arena);
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
				return;
			}
		} else if (type.equals("string")) {
Solution content
						player,
						node
								+ " set to "
								+ String.valueOf(value.equalsIgnoreCase("true")),
						arena);
			} else {
				Arenas.tellPlayer(player, "No valid boolean '" + value + "'!",
						arena);
				Arenas.tellPlayer(player, "Valid values: true | false", arena);
				return;
			}
		} else if (type.equals("string")) {
File
Settings.java
Developer's decision
Version 2
Kind of conflict
Attribute
Method invocation
Chunk
Conflicting content
			}
		} else if (type.equals("string")) {
			arena.cfg.set(node, String.valueOf(value));
<<<<<<< HEAD
			Arenas.tellPlayer(player, node + " set to " + String.valueOf(value), arena.prefix);
=======
			Arenas.tellPlayer(player,
					node + " set to " + String.valueOf(value), arena);
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
		} else if (type.equals("int")) {
			int i = 0;
Solution content
			}
		} else if (type.equals("string")) {
			arena.cfg.set(node, String.valueOf(value));
			Arenas.tellPlayer(player,
					node + " set to " + String.valueOf(value), arena);
		} else if (type.equals("int")) {
			int i = 0;
File
Settings.java
Developer's decision
Version 2
Kind of conflict
Method invocation
Chunk
Conflicting content
				i = Integer.parseInt(value);
			} catch (Exception e) {
				Arenas.tellPlayer(player, "No valid int '" + value
<<<<<<< HEAD
						+ "'! Use numbers without decimals!", arena.prefix);
				return;
			}
			arena.cfg.set(node, i);
			Arenas.tellPlayer(player, node + " set to " + String.valueOf(i), arena.prefix);
=======
						+ "'! Use numbers without decimals!", arena);
				return;
			}
			arena.cfg.set(node, i);
			Arenas.tellPlayer(player, node + " set to " + String.valueOf(i),
					arena);
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
		} else if (type.equals("double")) {
			double d = 0;
Solution content
				i = Integer.parseInt(value);
			} catch (Exception e) {
				Arenas.tellPlayer(player, "No valid int '" + value
						+ "'! Use numbers without decimals!", arena);
				return;
			}
			arena.cfg.set(node, i);
			Arenas.tellPlayer(player, node + " set to " + String.valueOf(i),
					arena);
		} else if (type.equals("double")) {
			double d = 0;
File
Settings.java
Developer's decision
Version 2
Kind of conflict
Attribute
Method invocation
Return statement
Chunk
Conflicting content
				d = Double.parseDouble(value);
			} catch (Exception e) {
				Arenas.tellPlayer(player, "No valid double '" + value
<<<<<<< HEAD
						+ "'! Use numbers with period (.)!", arena.prefix);
				return;
			}
			arena.cfg.set(node, d);
			Arenas.tellPlayer(player, node + " set to " + String.valueOf(d), arena.prefix);
		} else if (type.equals("tp")) {
			if (!value.equals("exit") && !value.equals("old")
					&& !value.equals("spectator")) {
				Arenas.tellPlayer(player, "No valid tp '" + value + "'!", arena.prefix);
				Arenas.tellPlayer(player,
						"Valid values: exit | old | spectator", arena.prefix);
				return;
			}
			arena.cfg.set(node, String.valueOf(value));
			Arenas.tellPlayer(player, node + " set to " + String.valueOf(value), arena.prefix);
=======
						+ "'! Use numbers with period (.)!", arena);
				return;
			}
			arena.cfg.set(node, d);
			Arenas.tellPlayer(player, node + " set to " + String.valueOf(d),
					arena);
		} else if (type.equals("tp")) {
			if (!value.equals("exit") && !value.equals("old")
					&& !value.equals("spectator")) {
				Arenas.tellPlayer(player, "No valid tp '" + value + "'!", arena);
				Arenas.tellPlayer(player,
						"Valid values: exit | old | spectator", arena);
				return;
			}
			arena.cfg.set(node, String.valueOf(value));
			Arenas.tellPlayer(player,
					node + " set to " + String.valueOf(value), arena);
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
		} else if (type.equals("item")) {
			try {
				try {
Solution content
				d = Double.parseDouble(value);
			} catch (Exception e) {
				Arenas.tellPlayer(player, "No valid double '" + value
						+ "'! Use numbers with period (.)!", arena);
				return;
			}
			arena.cfg.set(node, d);
			Arenas.tellPlayer(player, node + " set to " + String.valueOf(d),
					arena);
		} else if (type.equals("tp")) {
			if (!value.equals("exit") && !value.equals("old")
					&& !value.equals("spectator")) {
				Arenas.tellPlayer(player, "No valid tp '" + value + "'!", arena);
				Arenas.tellPlayer(player,
						"Valid values: exit | old | spectator", arena);
				return;
			}
			arena.cfg.set(node, String.valueOf(value));
			Arenas.tellPlayer(player,
					node + " set to " + String.valueOf(value), arena);
		} else if (type.equals("item")) {
			try {
				try {
File
Settings.java
Developer's decision
Version 2
Kind of conflict
Attribute
If statement
Method invocation
Return statement
Chunk
Conflicting content
					if (!mat.equals(Material.AIR)) {
						arena.cfg.set(node, mat.name());
						Arenas.tellPlayer(player,
<<<<<<< HEAD
								node + " set to " + String.valueOf(mat.name()), arena.prefix);
=======
								node + " set to " + String.valueOf(mat.name()),
								arena);
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
					}
				} catch (Exception e2) {
					Material mat = Material
Solution content
					if (!mat.equals(Material.AIR)) {
						arena.cfg.set(node, mat.name());
						Arenas.tellPlayer(player,
								node + " set to " + String.valueOf(mat.name()),
								arena);
					}
				} catch (Exception e2) {
					Material mat = Material
File
Settings.java
Developer's decision
Version 2
Kind of conflict
Attribute
Method invocation
Variable
Chunk
Conflicting content
							.getMaterial(Integer.parseInt(value));
					arena.cfg.set(node, mat.name());
					Arenas.tellPlayer(player,
<<<<<<< HEAD
							node + " set to " + String.valueOf(mat.name()), arena.prefix);
=======
							node + " set to " + String.valueOf(mat.name()),
							arena);
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
				}
				arena.cfg.save();
				return;
Solution content
							.getMaterial(Integer.parseInt(value));
					arena.cfg.set(node, mat.name());
					Arenas.tellPlayer(player,
							node + " set to " + String.valueOf(mat.name()),
							arena);
				}
				arena.cfg.save();
				return;
File
Settings.java
Developer's decision
Version 2
Kind of conflict
Attribute
Method invocation
Variable
Chunk
Conflicting content
				// nothing
			}
			Arenas.tellPlayer(player, "No valid item '" + value
<<<<<<< HEAD
					+ "'! Use valid ENUM or item id", arena.prefix);
=======
					+ "'! Use valid ENUM or item id", arena);
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
			return;
		} else if (type.equals("items")) {
			String[] ss = value.split(",");
Solution content
				// nothing
			}
			Arenas.tellPlayer(player, "No valid item '" + value
					+ "'! Use valid ENUM or item id", arena);
			return;
		} else if (type.equals("items")) {
			String[] ss = value.split(",");
File
Settings.java
Developer's decision
Version 2
Kind of conflict
Attribute
Chunk
Conflicting content
					return;
			for (int i = 0; i < ss.length; i++) {
				items[i] = StringParser.getItemStackFromString(ss[i]);
				if (items[i] == null) {
<<<<<<< HEAD
					Arenas.tellPlayer(player, "unrecognized item: " + items[i], arena.prefix);
=======
					Arenas.tellPlayer(player, "unrecognized item: " + items[i],
							arena);
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
				}
			}
Solution content
			for (int i = 0; i < ss.length; i++) {
				items[i] = StringParser.getItemStackFromString(ss[i]);
				if (items[i] == null) {
					Arenas.tellPlayer(player, "unrecognized item: " + items[i],
							arena);
					return;
				}
			}
File
Settings.java
Developer's decision
Version 2
Kind of conflict
Method invocation
Chunk
Conflicting content
			}

			arena.cfg.set(node, String.valueOf(value));
<<<<<<< HEAD
			Arenas.tellPlayer(player, node + " set to " + String.valueOf(value), arena.prefix);
		} else {
			Arenas.tellPlayer(player, "Unknown node: " + node, arena.prefix);
			Arenas.tellPlayer(player,
					"use /pa [name] set [page] to get a node list", arena.prefix);
=======
			Arenas.tellPlayer(player,
					node + " set to " + String.valueOf(value), arena);
		} else {
			Arenas.tellPlayer(player, "Unknown node: " + node, arena);
			Arenas.tellPlayer(player,
					"use /pa [name] set [page] to get a node list", arena);
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
			return;
		}
		arena.cfg.save();
Solution content
			}

			arena.cfg.set(node, String.valueOf(value));
			Arenas.tellPlayer(player,
					node + " set to " + String.valueOf(value), arena);
		} else {
			Arenas.tellPlayer(player, "Unknown node: " + node, arena);
			Arenas.tellPlayer(player,
					"use /pa [name] set [page] to get a node list", arena);
			return;
		}
		arena.cfg.save();
File
Settings.java
Developer's decision
Version 2
Kind of conflict
Method invocation
Chunk
Conflicting content
 * 
 * @author slipcor
 * 
<<<<<<< HEAD
 * @version v0.6.40
=======
 * @version v0.7.9
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
 * 
 */
Solution content
 * 
 * @author slipcor
 * 
 * @version v0.7.9
 * 
 */
File
Spawns.java
Developer's decision
Version 2
Kind of conflict
Comment
Chunk
Conflicting content
			place = locs.get(r.nextInt(locs.size()));
		} else if (arena.cfg.get("spawns." + place) == null) {
<<<<<<< HEAD
			String type = null;
			if (arena.cfg.getBoolean("arenatype.flags")) {
				type = arena.getType();
				type = type.equals("pumpkin") ? type : "flag";
			}
			if (!place.contains("spawn") && type == null) {
				db.i("place not found!");
				return null;
			}
			// no exact match: assume we have multiple spawnpoints
			HashMap locs = new HashMap();
			int i = 0;

			db.i("searching for team spawns");

			HashMap coords = (HashMap) arena.cfg
					.getYamlConfiguration().getConfigurationSection("spawns")
					.getValues(false);
			for (String name : coords.keySet()) {
				if (name.startsWith(place)) {
					locs.put(i++, name);
					db.i("found match: " + name);
				}
				if (type == null) {
					continue;
				}
				if (name.endsWith(type)) {
					for (String sTeam : arena.paTeams.keySet()) {
						if (name.startsWith(sTeam)) {
							locs.put(i++, name);
							db.i("found match: " + name);
						}
					}
				}
			}

			if (locs.size() < 1) {
=======
			place = arena.type().guessSpawn(place);
			if (place == null) {
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
				return null;
			}
		}
Solution content
			place = locs.get(r.nextInt(locs.size()));
		} else if (arena.cfg.get("spawns." + place) == null) {
			place = arena.type().guessSpawn(place);
			if (place == null) {
				return null;
			}
		}
File
Spawns.java
Developer's decision
Version 2
Kind of conflict
Cast expression
Comment
For statement
If statement
Method invocation
Variable
Chunk
Conflicting content
	 *            the location to check
	 * @return the spawn location next to the location
	 */
<<<<<<< HEAD
	public static boolean isNearSpawn(Arena arena, Player player, int diff) {
		db.i("checking if arena is near a spawn");
		if (!Players.isPartOf(arena, player)) {
			return false;
		}
		if (Players.getTeam(player).equals("")) {
			return false;
		}

		HashSet spawns = getSpawns(arena, Players.getTeam(player));
=======
	public static Location getNearest(HashSet spawns,
			Location location) {
		Location result = null;
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b

		for (Location loc : spawns) {
			if (result == null
Solution content
	 *            the location to check
	 * @return the spawn location next to the location
	 */
	public static Location getNearest(HashSet spawns,
			Location location) {
		Location result = null;

		for (Location loc : spawns) {
			if (result == null
File
Spawns.java
Developer's decision
Version 2
Kind of conflict
If statement
Method invocation
Method signature
Variable
Chunk
Conflicting content
 * 
 * @author slipcor
 * 
<<<<<<< HEAD
 * @version v0.6.40
=======
 * @version v0.7.9
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
 * 
 */
Solution content
 * 
 * @author slipcor
 * 
 * @version v0.7.9
 * 
 */
File
Statistics.java
Developer's decision
Version 2
Kind of conflict
Comment
Chunk
Conflicting content
			aps[i++] = p;
		}
	 * @param dmg
	 *            the damage value
	 */
<<<<<<< HEAD
	public static ArenaPlayer[] getStats(Arena a, type sortBy, boolean desc) {
		db.i("getting stats: " + a.name + " sorted by " + sortBy + " "
				+ (desc ? "desc" : "asc"));
		ArenaPlayer[] aps = new ArenaPlayer[Players.getPlayers(a).size()];
		int i = 0;
		for (ArenaPlayer p : Players.getPlayers(a)) {

			if (p.arena == null || !p.arena.equals(a)) {
				continue;
			}

		sortBy(aps, sortBy, desc);
=======
	public static void damage(Arena arena, Entity e, Player defender, int dmg) {
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b

		db.i("adding damage to player " + defender.getName());
Solution content
	 * @param dmg
	 *            the damage value
	 */
	public static void damage(Arena arena, Entity e, Player defender, int dmg) {

		db.i("adding damage to player " + defender.getName());
File
Statistics.java
Developer's decision
Version 2
Kind of conflict
For statement
Method invocation
Method signature
Variable
Chunk
Conflicting content
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;

<<<<<<< HEAD
import net.slipcor.pvparena.core.Debug;
import net.slipcor.pvparena.core.Language;
import net.slipcor.pvparena.definitions.Announcement;
import net.slipcor.pvparena.definitions.Announcement.type;
import net.slipcor.pvparena.definitions.Arena;
=======
import net.slipcor.pvparena.PVPArena;
import net.slipcor.pvparena.arena.Arena;
import net.slipcor.pvparena.arena.ArenaPlayer;
import net.slipcor.pvparena.arena.ArenaTeam;
import net.slipcor.pvparena.core.Debug;
import net.slipcor.pvparena.core.Language;
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b

/**
 * teams manager class
Solution content
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;

import net.slipcor.pvparena.PVPArena;
import net.slipcor.pvparena.arena.Arena;
import net.slipcor.pvparena.arena.ArenaPlayer;
import net.slipcor.pvparena.arena.ArenaTeam;
import net.slipcor.pvparena.core.Debug;
import net.slipcor.pvparena.core.Language;

/**
 * teams manager class
File
Teams.java
Developer's decision
Version 2
Kind of conflict
Import
Chunk
Conflicting content
 * 
 * @author slipcor
 * 
<<<<<<< HEAD
 * @version v0.6.41
=======
 * @version v0.7.9
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
 * 
 */
Solution content
 * 
 * @author slipcor
 * 
 * @version v0.7.9
 * 
 */
File
Teams.java
Developer's decision
Version 2
Kind of conflict
Comment
Chunk
Conflicting content
	 * @param arenaTeam
	 *            the team to add
	 */
<<<<<<< HEAD
	public static void choosePlayerTeam(Arena arena, Player player) {

		db.i("calculating player team");

		boolean free = !arena.cfg.getBoolean("arenatype.teams");

		if (Players.getPlayerTeamMap(arena).containsKey(player.getName())) {
			Arenas.tellPlayer(player, Language.parse("alreadyjoined"), arena.prefix);
		}

		String team = free ? "free" : calcFreeTeam(arena);
		Players.setTeam(player, team);

		if (free) {
			arena.tpPlayerToCoordName(player, "lounge");
		} else {
			arena.tpPlayerToCoordName(player, team + "lounge");
		}
		Arenas.tellPlayer(
				player,
				Language.parse("youjoined" + (free ? "free" : ""),
						ChatColor.valueOf(arena.paTeams.get(team)) + team), arena.prefix);
		Announcement.announce(
				arena,
				type.JOIN,
				Language.parse("playerjoined" + (free ? "free" : ""),
						player.getName(),
						ChatColor.valueOf(arena.paTeams.get(team)) + team));
		Players.tellEveryoneExcept(
				arena,
				player,
				Language.parse("playerjoined" + (free ? "free" : ""),
						player.getName(),
						ChatColor.valueOf(arena.paTeams.get(team)) + team));
=======
	public static void addTeam(Arena arena, ArenaTeam arenaTeam) {
		arena.getTeams().add(arenaTeam);
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
	}

	/**
Solution content
	 * @param arenaTeam
	 *            the team to add
	 */
	public static void addTeam(Arena arena, ArenaTeam arenaTeam) {
		arena.getTeams().add(arenaTeam);
	}

	/**
File
Teams.java
Developer's decision
Version 2
Kind of conflict
If statement
Method invocation
Method signature
Variable
Chunk
Conflicting content
<<<<<<< HEAD
		HashMap counts = new HashMap();

		// spam the available teams into a map counting the members
		for (String team : Players.getPlayerTeamMap(arena).values()) {
			if (!counts.containsKey(team)) {
				counts.put(team, 1);
				db.i("team " + team + " found");
			} else {
				int i = counts.get(team);
				counts.put(team, ++i);
				db.i("team " + team + " updated to " + i);
			}
		}
=======

		for (ArenaTeam team : arena.getTeams()) {
			int count = team.getTeamMembers().size();

			if (count > 0) {
				counts.put(team.getName(), count);
				db.i("team " + team.getName() + " contains " + count);
			}
		}

>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b
		// counts contains TEAMNAME => PLAYERCOUNT

		if (counts.size() < arena.paTeams.size()) {
Solution content
		HashMap counts = new HashMap();

		// spam the available teams into a map counting the members

		for (ArenaTeam team : arena.getTeams()) {
			int count = team.getTeamMembers().size();

			if (count > 0) {
				counts.put(team.getName(), count);
				db.i("team " + team.getName() + " contains " + count);
			}
		}

		// counts contains TEAMNAME => PLAYERCOUNT
File
Teams.java
Developer's decision
Version 2
Kind of conflict
For statement
Chunk
Conflicting content
import org.bukkit.Bukkit;

import net.slipcor.pvparena.core.Debug;
<<<<<<< HEAD
import net.slipcor.pvparena.definitions.Arena;
import net.slipcor.pvparena.managers.Ends;
=======
>>>>>>> c7f65f9ace9d43b5977b87985c8a0bc82cc8b31b

/**
 * timed arena runnable class
Solution content
import org.bukkit.Bukkit;

import net.slipcor.pvparena.arena.Arena;
import net.slipcor.pvparena.core.Debug;

/**
 * timed arena runnable class
File
TimedEndRunnable.java
Developer's decision
Manual
Kind of conflict
Import