/**
 * Player Class.
 * This class is in charge of the Player.
 * This class has a reference to the current room that the player is in.
 * As well, there is a playerHistory variable, in order to undo and redo certain moves.
 * This class implements a doCommand method which will take the input command words and correlate them to actual actions.
 *
 */


public class Player extends Humanoid {

	private PlayerHistory playerHistory;
	private Room currentRoom;
	
	public Player(int health, Room r, String name){
		super(health, name);
		currentRoom = r;
		playerHistory = new PlayerHistory();
	}
	
	public Player(Room r){
		super();
		currentRoom = r;
		playerHistory = new PlayerHistory();
	}


	public void doCommand(Command c){
		
		if (c.getCommandWord().equals(CommandWords.UNDO)){
			c = playerHistory.undo();
		} else if (c.getCommandWord().equals(CommandWords.REDO)){
			c = playerHistory.redo();
		}
		
		
		if (c.getCommandWord().equals(CommandWords.GO)){
			Direction d = (Direction) c.getSecondWord();
			Room r = currentRoom.getExit(d);
			if(r!=null){
				currentRoom = r;
			} // else error TODO

		} else if (c.getCommandWord().equals(CommandWords.FIGHT)){
			Monster m = currentRoom.getMonster();
			if(m==null){
				System.out.println("Nothing to Fight!");
				//should probably call the view here..shouldn't be a system.out in this class
			} else {
			//if(this.getBestItem().compareTo(m.getBestItem()) == 1){
				m.updateHealth(this.getBestItem().getValue());
				this.updateHealth(m.getBestItem().getValue());
				if(m.getHealth()<=0){
					currentRoom.removeMonster(m);
				}
			}
			
		} else if (c.getCommandWord().equals(CommandWords.HELP)){
	        System.out.println("You are lost. You are alone. You wander around in a cave.\n");
	        System.out.println("Your command words are:");
	        System.out.println("GO, PICKUP, DROP, UNDO, REDO, FIGHT, HELP, QUIT");
	        //HELP may be implemented in another class.
	        
		} else if (c.getCommandWord().equals(CommandWords.PICKUP)){
			Item i = (Item) c.getSecondWord();
			addItem(i);
			playerHistory.addStep(c);
		} else if (c.getCommandWord().equals(CommandWords.DROP)){
			Item i = (Item) c.getSecondWord();
			removeItem(i);
			playerHistory.addStep(c);
		} else {
			//TODO some sort of extraneous error checking
		}//QUIT command does not get passed to the player
		
		
	}
	
	public Room getCurrentRoom(){
		return currentRoom;
	}
	
}

@@ -723,19 +723,40 @@
 and c)%7B%0A
+%09%09boolean b = false;%0A
 %09%09%0A
-
 %09%09if (c.
@@ -829,16 +829,29 @@
 undo();%0A
+%09%09%09b = true;%0A
 %09%09%7D else
@@ -931,16 +931,85 @@
 redo();%0A
+%09%09%09b = true;%0A%09%09%7D%0A%09%09if(c==null)%7B%0A%09%09%09return; //TODO tell view about it%0A
 %09%09%7D%0A%09%09%0A%09
@@ -1182,16 +1182,16 @@
 om = r;%0A
-
 %09%09%09%7D // 
@@ -1205,16 +1205,70 @@
 ror TODO
+%0A%09%09%09if(b == false)%7B%0A%09%09%09%09playerHistory.addStep(c);%0A%09%09%09%7D
 %0A%0A%09%09%7D el

Fix nullPointerException in doCommand method