package net.geforcemods.securitycraft.imc.lookingglass;
import com.xcompwiz.lookingglass.api.APIInstanceProvider;
import com.xcompwiz.lookingglass.api.APIUndefined;
import com.xcompwiz.lookingglass.api.APIVersionRemoved;
import com.xcompwiz.lookingglass.api.APIVersionUndefined;
import com.xcompwiz.lookingglass.api.view.IWorldView;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.Loader;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.geforcemods.securitycraft.main.mod_SecurityCraft;
import net.geforcemods.securitycraft.network.ClientProxy;
import net.geforcemods.securitycraft.util.Utils;
import net.minecraft.util.ChunkCoordinates;
import net.minecraft.world.World;
/**
* Simple class that gets the LookingGlass "view" API instance. <p>
* Called from a IMC message sent in mod_SecurityCraft.init().
*
* @author Geforce
*/
public class LookingGlassAPIProvider {
public static void register(APIInstanceProvider provider){
try{
Object viewAPI = provider.getAPIInstance("view-2");
if(FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT){
LookingGlassAPIHandler.handleAPICast(viewAPI);
}
}catch(APIUndefined e){
e.printStackTrace();
}catch(APIVersionUndefined e){
e.printStackTrace();
}catch(APIVersionRemoved e){
e.printStackTrace();
}
}
/**
* Creates an {@link IWorldView} object, then adds it to ClientProxy.worldViews.
*
* Only works on the CLIENT side.
*
* @param world The world we are in.
* @param dimension The dimension to view. (0 = Overworld, -1 = Nether)
* @param xCoord View X coordinate.
* @param yCoord View Y coordinate.
* @param zCoord View Z coordinate.
* @param viewWidth View width in pixels.
* @param viewHeight View height in pixels.
*/
@SideOnly(Side.CLIENT)
public static void createLookingGlassView(World world, int dimension, int xCoord, int yCoord, int zCoord, int viewWidth, int viewHeight){
if(!Loader.isModLoaded("LookingGlass")){ return; }
IWorldView lgView = mod_SecurityCraft.instance.getLGPanelRenderer().getApi().createWorldView(dimension, new ChunkCoordinates(xCoord, yCoord, zCoord), viewWidth, viewHeight);
lgView.setAnimator(new CameraAnimatorSecurityCamera(lgView.getCamera(), xCoord, yCoord, zCoord, world.getBlockMetadata(xCoord, yCoord, zCoord)));
if(!mod_SecurityCraft.instance.hasViewForCoords(xCoord + " " + yCoord + " " + zCoord + " " + dimension)){
mod_SecurityCraft.log("Inserting new view at" + Utils.getFormattedCoordinates(xCoord, yCoord, zCoord));
((ClientProxy) mod_SecurityCraft.serverProxy).worldViews.put(xCoord + " " + yCoord + " " + zCoord + " " + dimension, new IWorldViewHelper(lgView));
}
}
}