// Path: java/tb/utils/TBUtils.java
// public class TBUtils {
// 	
// 	public static ArrayList<Pair<Integer,Coord3D>> loadedClientSpawners = new ArrayList<Pair<Integer,Coord3D>>();
// 	
// 	public static Coord3D getClosestLoadedClientSpawner(EntityPlayer player)
// 	{
// 		if(player == null)
// 			return null;
// 		
// 		if(player instanceof FakePlayer)
// 			return null;
// 		
// 		if(player.worldObj == null)
// 			return null;
// 		
// 		if(!player.worldObj.isRemote)
// 			return null;
// 		
// 		double closestDistance = Short.MAX_VALUE;
// 		int index = -1;
// 		
// 		for(Pair<Integer,Coord3D> p : loadedClientSpawners)
// 		{
// 			if(p.getFirst() != player.dimension)
// 				continue;
// 			
// 			double distance = Math.sqrt(player.getDistance(p.getSecond().x, p.getSecond().y, p.getSecond().z));
// 			if(distance < closestDistance)
// 			{
// 				closestDistance = distance;
// 				index = loadedClientSpawners.indexOf(p);
// 			}
// 		}
// 		
// 		if(index != -1)
// 			return loadedClientSpawners.get(index).getSecond();
// 		
// 		return null;
// 	}
// 	
// 	/**
// 	 * @param type 0 = Temporary, 1 = Regular, 2 = Permanent
// 	 */
// 	public static void addWarpToPlayer(EntityPlayer addTo, int amount, int type)
// 	{
// 		switch(type)
// 		{
// 			case 2:
// 			{
// 				ResearchHelper.addWarpToPlayer(addTo, amount, EnumWarpType.PERMANENT);
// 				return;
// 			}
// 			case 1:
// 			{
// 				ResearchHelper.addWarpToPlayer(addTo, amount, EnumWarpType.NORMAL);
// 				return;
// 			}
// 			case 0:
// 			{
// 				ResearchHelper.addWarpToPlayer(addTo, amount, EnumWarpType.TEMPORARY);
// 				return;
// 			}
// 			default:
// 			{
// 				ResearchHelper.addWarpToPlayer(addTo, amount, EnumWarpType.NORMAL);
// 				return;
// 			}
// 		}
// 	}
// 	
// 	public static List<Entity> castLst(List<? extends Entity> l)
// 	{
// 		List<Entity> retLst = new ArrayList<Entity>();
// 		
// 		for(Object e : l)
// 			retLst.add((Entity) e);
// 		
// 		return retLst;
// 	}
// 
// }


import java.util.Hashtable;
import DummyCore.Utils.Coord3D;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.Vec3;
import net.minecraft.world.World;
import net.minecraftforge.common.util.FakePlayer;
import tb.utils.TBUtils;
import thaumcraft.common.Thaumcraft;
package tb.common.item;



public class ItemSpawnerCompass extends Item{
	Hashtable<Entity, Object> beams = new Hashtable<Entity, Object>();
	
	@Override
	public void onUpdate(ItemStack stk, World w, Entity player, int slotNum, boolean isCurrentItem) 
	{
		if(w != null && w.isRemote && !isCurrentItem && player instanceof EntityPlayer && !(player instanceof FakePlayer))
		{
			if(beams.containsKey(player))
				beams.remove(player);
		}
		if(w != null && w.isRemote && player instanceof EntityPlayer && !(player instanceof FakePlayer) && isCurrentItem)
		{
			EntityPlayer p = (EntityPlayer) player;
// Path: java/tb/utils/TBUtils.java
// public class TBUtils {
// 	
// 	public static ArrayList<Pair<Integer,Coord3D>> loadedClientSpawners = new ArrayList<Pair<Integer,Coord3D>>();
// 	
// 	public static Coord3D getClosestLoadedClientSpawner(EntityPlayer player)
// 	{
// 		if(player == null)
// 			return null;
// 		
// 		if(player instanceof FakePlayer)
// 			return null;
// 		
// 		if(player.worldObj == null)
// 			return null;
// 		
// 		if(!player.worldObj.isRemote)
// 			return null;
// 		
// 		double closestDistance = Short.MAX_VALUE;
// 		int index = -1;
// 		
// 		for(Pair<Integer,Coord3D> p : loadedClientSpawners)
// 		{
// 			if(p.getFirst() != player.dimension)
// 				continue;
// 			
// 			double distance = Math.sqrt(player.getDistance(p.getSecond().x, p.getSecond().y, p.getSecond().z));
// 			if(distance < closestDistance)
// 			{
// 				closestDistance = distance;
// 				index = loadedClientSpawners.indexOf(p);
// 			}
// 		}
// 		
// 		if(index != -1)
// 			return loadedClientSpawners.get(index).getSecond();
// 		
// 		return null;
// 	}
// 	
// 	/**
// 	 * @param type 0 = Temporary, 1 = Regular, 2 = Permanent
// 	 */
// 	public static void addWarpToPlayer(EntityPlayer addTo, int amount, int type)
// 	{
// 		switch(type)
// 		{
// 			case 2:
// 			{
// 				ResearchHelper.addWarpToPlayer(addTo, amount, EnumWarpType.PERMANENT);
// 				return;
// 			}
// 			case 1:
// 			{
// 				ResearchHelper.addWarpToPlayer(addTo, amount, EnumWarpType.NORMAL);
// 				return;
// 			}
// 			case 0:
// 			{
// 				ResearchHelper.addWarpToPlayer(addTo, amount, EnumWarpType.TEMPORARY);
// 				return;
// 			}
// 			default:
// 			{
// 				ResearchHelper.addWarpToPlayer(addTo, amount, EnumWarpType.NORMAL);
// 				return;
// 			}
// 		}
// 	}
// 	
// 	public static List<Entity> castLst(List<? extends Entity> l)
// 	{
// 		List<Entity> retLst = new ArrayList<Entity>();
// 		
// 		for(Object e : l)
// 			retLst.add((Entity) e);
// 		
// 		return retLst;
// 	}
// 
// }


// Path: java/tb/common/item/ItemSpawnerCompass.java
import java.util.Hashtable;
import DummyCore.Utils.Coord3D;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.Vec3;
import net.minecraft.world.World;
import net.minecraftforge.common.util.FakePlayer;
import tb.utils.TBUtils;
import thaumcraft.common.Thaumcraft;

package tb.common.item;



public class ItemSpawnerCompass extends Item{
	Hashtable<Entity, Object> beams = new Hashtable<Entity, Object>();
	
	@Override
	public void onUpdate(ItemStack stk, World w, Entity player, int slotNum, boolean isCurrentItem) 
	{
		if(w != null && w.isRemote && !isCurrentItem && player instanceof EntityPlayer && !(player instanceof FakePlayer))
		{
			if(beams.containsKey(player))
				beams.remove(player);
		}
		if(w != null && w.isRemote && player instanceof EntityPlayer && !(player instanceof FakePlayer) && isCurrentItem)
		{
			EntityPlayer p = (EntityPlayer) player;
			Coord3D closest = TBUtils.getClosestLoadedClientSpawner(p);