package blusunrize.immersiveengineering.common;
import blusunrize.immersiveengineering.ImmersiveEngineering;
import blusunrize.immersiveengineering.api.Lib;
import blusunrize.immersiveengineering.common.blocks.IEBlockInterfaces.IGuiTile;
import blusunrize.immersiveengineering.common.blocks.metal.*;
import blusunrize.immersiveengineering.common.blocks.stone.TileEntityBlastFurnace;
import blusunrize.immersiveengineering.common.blocks.stone.TileEntityCokeOven;
import blusunrize.immersiveengineering.common.blocks.wooden.TileEntityFluidSorter;
import blusunrize.immersiveengineering.common.blocks.wooden.TileEntityModWorkbench;
import blusunrize.immersiveengineering.common.blocks.wooden.TileEntitySorter;
import blusunrize.immersiveengineering.common.blocks.wooden.TileEntityWoodenCrate;
import blusunrize.immersiveengineering.common.gui.*;
import blusunrize.immersiveengineering.common.items.IEItemInterfaces.IGuiItem;
import blusunrize.immersiveengineering.common.items.ItemRevolver;
import blusunrize.immersiveengineering.common.items.ItemToolbox;
import com.mojang.authlib.GameProfile;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.EntityEquipmentSlot;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.SoundEvent;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.common.property.IExtendedBlockState;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fml.common.FMLCommonHandler;
import net.minecraftforge.fml.common.network.IGuiHandler;
import javax.annotation.Nonnull;
import java.util.UUID;
public class CommonProxy implements IGuiHandler
{
public void preInit(){}
public void preInitEnd()
{
}
public void init(){}
public void initEnd()
{
}
public void postInit(){}
public void postInitEnd()
{
}
public void serverStarting(){}
public void onWorldLoad(){}
public static <T extends TileEntity & IGuiTile> void openGuiForTile(@Nonnull EntityPlayer player, @Nonnull T tile)
{
player.openGui(ImmersiveEngineering.instance, tile.getGuiID(), tile.getWorld(), tile.getPos().getX(), tile.getPos().getY(), tile.getPos().getZ());
}
public static void openGuiForItem(@Nonnull EntityPlayer player, @Nonnull EntityEquipmentSlot slot)
{
ItemStack stack = player.getItemStackFromSlot(slot);
if(stack==null || !(stack.getItem() instanceof IGuiItem))
return;
IGuiItem gui = (IGuiItem)stack.getItem();
player.openGui(ImmersiveEngineering.instance, 100*slot.ordinal() + gui.getGuiID(stack), player.worldObj, (int)player.posX,(int)player.posY,(int)player.posZ);
}
@Override
public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z)
{
if(ID>=Lib.GUIID_Base_Item)
{
EntityEquipmentSlot slot = EntityEquipmentSlot.values()[ID/100];
ID %= 100;//Slot determined, get actual ID
ItemStack item = player.getItemStackFromSlot(slot);
if(item!=null && item.getItem() instanceof IGuiItem && ((IGuiItem)item.getItem()).getGuiID(item)==ID)
{
if(ID == Lib.GUIID_Revolver && item.getItem() instanceof ItemRevolver)
return new ContainerRevolver(player.inventory, world, slot, item);
if(ID == Lib.GUIID_Toolbox && item.getItem() instanceof ItemToolbox)
return new ContainerToolbox(player.inventory, world, slot, item);
}
}
else
{
TileEntity te = world.getTileEntity(new BlockPos(x,y,z));
if(te instanceof IGuiTile)
{
Object gui = null;
if(ID==Lib.GUIID_CokeOven && te instanceof TileEntityCokeOven)
gui = new ContainerCokeOven(player.inventory, (TileEntityCokeOven) te);
if(ID==Lib.GUIID_BlastFurnace && te instanceof TileEntityBlastFurnace)
gui = new ContainerBlastFurnace(player.inventory, (TileEntityBlastFurnace) te);
if(ID==Lib.GUIID_WoodenCrate && te instanceof TileEntityWoodenCrate)
gui = new ContainerCrate(player.inventory, (TileEntityWoodenCrate) te);
if(ID==Lib.GUIID_Workbench && te instanceof TileEntityModWorkbench)
gui = new ContainerModWorkbench(player.inventory, (TileEntityModWorkbench) te);
if(ID==Lib.GUIID_Sorter && te instanceof TileEntitySorter)
gui = new ContainerSorter(player.inventory, (TileEntitySorter) te);
if(ID==Lib.GUIID_Squeezer && te instanceof TileEntitySqueezer)
gui = new ContainerSqueezer(player.inventory, (TileEntitySqueezer) te);
if(ID==Lib.GUIID_Fermenter && te instanceof TileEntityFermenter)
gui = new ContainerFermenter(player.inventory, (TileEntityFermenter) te);
if(ID==Lib.GUIID_Refinery && te instanceof TileEntityRefinery)
gui = new ContainerRefinery(player.inventory, (TileEntityRefinery) te);
if(ID==Lib.GUIID_ArcFurnace && te instanceof TileEntityArcFurnace)
gui = new ContainerArcFurnace(player.inventory, (TileEntityArcFurnace) te);
if(ID==Lib.GUIID_Assembler && te instanceof TileEntityAssembler)
gui = new ContainerAssembler(player.inventory, (TileEntityAssembler) te);
if(ID==Lib.GUIID_AutoWorkbench && te instanceof TileEntityAutoWorkbench)
gui = new ContainerAutoWorkbench(player.inventory, (TileEntityAutoWorkbench) te);
if(ID==Lib.GUIID_Mixer && te instanceof TileEntityMixer)
gui = new ContainerMixer(player.inventory, (TileEntityMixer) te);
if(ID==Lib.GUIID_Turret && te instanceof TileEntityTurret)
gui = new ContainerTurret(player.inventory, (TileEntityTurret) te);
if(ID==Lib.GUIID_FluidSorter && te instanceof TileEntityFluidSorter)
gui = new ContainerFluidSorter(player.inventory, (TileEntityFluidSorter) te);
if(ID==Lib.GUIID_Belljar && te instanceof TileEntityBelljar)
gui = new ContainerBelljar(player.inventory, (TileEntityBelljar) te);
if(ID==Lib.GUIID_ToolboxBlock && te instanceof TileEntityToolbox)
gui = new ContainerToolboxBlock(player.inventory, (TileEntityToolbox) te);
if(gui!=null)
((IGuiTile)te).onGuiOpened(player, false);
return gui;
}
}
return null;
}
@Override
public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z)
{
return null;
}
public void handleTileSound(SoundEvent soundEvent, TileEntity tile, boolean tileActive, float volume, float pitch)
{
}
public void stopTileSound(String soundName, TileEntity tile)
{
}
public void spawnCrusherFX(TileEntityCrusher tile, ItemStack stack)
{
}
public void spawnBucketWheelFX(TileEntityBucketWheel tile, ItemStack stack)
{
}
public void spawnSparkFX(World world, double x, double y, double z, double mx, double my, double mz)
{
}
public void spawnRedstoneFX(World world, double x, double y, double z, double mx, double my, double mz, float size, float r, float g, float b)
{
}
public void spawnFluidSplashFX(World world, FluidStack fs, double x, double y, double z, double mx, double my, double mz)
{
}
public void spawnBubbleFX(World world, FluidStack fs, double x, double y, double z, double mx, double my, double mz)
{
}
public void draw3DBlockCauldron()
{
}
public void drawSpecificFluidPipe(String configuration)
{
}
public boolean drawConveyorInGui(String conveyor, EnumFacing facing)
{
return false;
}
public void drawFluidPumpTop()
{
}
public String[] splitStringOnWidth(String s, int w)
{
return new String[]{s};
}
public World getClientWorld()
{
return null;
}
public String getNameFromUUID(String uuid)
{
return FMLCommonHandler.instance().getMinecraftServerInstance().getMinecraftSessionService().fillProfileProperties(new GameProfile(UUID.fromString(uuid.replaceAll("(\\w{8})(\\w{4})(\\w{4})(\\w{4})(\\w{12})", "$1-$2-$3-$4-$5")), null), false).getName();
}
public void reInitGui()
{
}
public void removeStateFromSmartModelCache(IExtendedBlockState state)
{
}
public void removeStateFromConnectionModelCache(IExtendedBlockState state)
{
}
public void clearConnectionModelCache()
{
}
public void clearRenderCaches()
{
}
}