package net.minecraft.src.weasel;

import net.minecraft.src.NBTTagCompound;
import net.minecraft.src.PC_INBT;


/**
 * Integer Object
 * 
 * @author MightyPork
 * @copy (c) 2012
 *
 */
public class WeaselInteger extends WeaselObject {
	
	/** the integer */
	public int integer = 0;
	
	/**
	 * Integer object
	 * @param integer integer value
	 */
	public WeaselInteger(int integer){
		super(WeaselObjectType.INTEGER);
		this.integer = integer;
	}
	
	/**
	 * Integer object, 0
	 */
	public WeaselInteger(){
		super(WeaselObjectType.INTEGER);
	}
	
	public Integer get(){
		return integer;
	}
	
	public void set(Object obj){
		
		if(obj instanceof Double){
			this.integer = (int) Math.round((Double) obj);
			return;
		}
		
		if(obj instanceof Float){
			this.integer = Math.round((Float) obj);
			return;
		}
		
		if(obj instanceof Long){
			this.integer = (Integer) obj;
			return;
		}
		
		if(obj == null || !(obj instanceof Integer)) throw new RuntimeException("Trying to store "+obj+" in an integer variable.");
		this.integer = (Integer) obj;
	}

	@Override
	public PC_INBT readFromNBT(NBTTagCompound tag) {
		tag.setInteger("i", integer);
		return this;
	}
	
	@Override
	public NBTTagCompound writeToNBT(NBTTagCompound tag) {
		super.writeToNBT(tag);
		tag.setInteger("i", integer);
		return tag;
	}
	
	@Override
	public boolean equals(Object obj) {
		if (obj == null) { return false; }
		if (!this.getClass().equals(obj.getClass())) { return false; }

		return ((WeaselInteger) obj).integer == integer;
	}


	@Override
	public int hashCode() {
		return integer;
	}

	@Override
	public String toString() {
		return "I("+integer+")";
	}	
}
