package advancedsystemsmanager.compatibility.waila;
import advancedsystemsmanager.registry.BlockRegistry;
import advancedsystemsmanager.registry.ClusterRegistry;
import advancedsystemsmanager.tileentities.TileEntityCamouflage;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import mcp.mobius.waila.api.IWailaConfigHandler;
import mcp.mobius.waila.api.IWailaDataAccessor;
import mcp.mobius.waila.api.IWailaDataProvider;
import mcp.mobius.waila.api.impl.DataAccessorCommon;
import mcp.mobius.waila.api.impl.ModuleRegistrar;
import net.minecraft.block.Block;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import java.util.ArrayList;
import java.util.List;
public class CamouflageDataProvider implements IWailaDataProvider
{
private List<IWailaDataProvider> cachedHeadProviders;
private List<IWailaDataProvider> cachedBodyProviders;
private List<IWailaDataProvider> cachedTailProviders;
public void setCachedProviders()
{
cachedHeadProviders = new ArrayList<IWailaDataProvider>();
for (List<IWailaDataProvider> providersList : ModuleRegistrar.instance().getHeadProviders(BlockRegistry.cableElements[0]).values())
{
cachedHeadProviders.addAll(providersList);
}
cachedBodyProviders = new ArrayList<IWailaDataProvider>();
for (List<IWailaDataProvider> providersList : ModuleRegistrar.instance().getBodyProviders(BlockRegistry.cableElements[0]).values())
{
cachedBodyProviders.addAll(providersList);
}
cachedTailProviders = new ArrayList<IWailaDataProvider>();
for (List<IWailaDataProvider> providersList : ModuleRegistrar.instance().getTailProviders(BlockRegistry.cableElements[0]).values())
{
cachedTailProviders.addAll(providersList);
}
}
@Override
public ItemStack getWailaStack(IWailaDataAccessor accessor, IWailaConfigHandler iWailaConfigHandler)
{
if (cachedBodyProviders == null)
{
setCachedProviders();
}
TileEntity te = accessor.getTileEntity();
if (te != null && isShiftNotDown())
{
TileEntityCamouflage camouflage = ClusterRegistry.CAMO.getTileEntity(te.getWorldObj(), te.xCoord, te.yCoord, te.zCoord);
if (camouflage != null && camouflage.hasSideBlock(0))
{
Block block = camouflage.getSideBlock(0);
if (block != null)
{
int meta = camouflage.getSideMetadata(0);
return new ItemStack(block, 1, block.damageDropped(meta));
}
}
}
return new ItemStack(accessor.getBlock(), 1, accessor.getBlock().damageDropped(accessor.getMetadata()));
}
@SideOnly(Side.CLIENT)
private boolean isShiftNotDown()
{
return !GuiScreen.isShiftKeyDown();
}
@Override
public List<String> getWailaHead(ItemStack itemStack, List<String> list, IWailaDataAccessor accessor, IWailaConfigHandler iWailaConfigHandler)
{
TileEntity te = accessor.getTileEntity();
if (accessor instanceof DataAccessorCommon && te != null && isShiftNotDown())
{
TileEntityCamouflage camouflage = ClusterRegistry.CAMO.getTileEntity(te.getWorldObj(), te.xCoord, te.yCoord, te.zCoord);
if (camouflage != null && camouflage.hasSideBlock(0))
{
((DataAccessorCommon) accessor).block = camouflage.getSideBlock(0);
((DataAccessorCommon) accessor).metadata = camouflage.getSideMetadata(0);
for (List<IWailaDataProvider> providersList : ModuleRegistrar.instance().getHeadProviders(accessor.getBlock()).values())
{
for (IWailaDataProvider provider : providersList)
{
if (!cachedHeadProviders.contains(provider))
{
provider.getWailaBody(itemStack, list, accessor, iWailaConfigHandler);
}
}
}
}
}
return list;
}
@Override
public List<String> getWailaBody(ItemStack itemStack, List<String> list, IWailaDataAccessor accessor, IWailaConfigHandler iWailaConfigHandler)
{
TileEntity te = accessor.getTileEntity();
if (accessor instanceof DataAccessorCommon && te != null && isShiftNotDown())
{
TileEntityCamouflage camouflage = ClusterRegistry.CAMO.getTileEntity(te.getWorldObj(), te.xCoord, te.yCoord, te.zCoord);
if (camouflage != null && camouflage.hasSideBlock(0))
{
((DataAccessorCommon) accessor).block = camouflage.getSideBlock(0);
((DataAccessorCommon) accessor).metadata = camouflage.getSideMetadata(0);
for (List<IWailaDataProvider> providersList : ModuleRegistrar.instance().getBodyProviders(accessor.getBlock()).values())
{
for (IWailaDataProvider provider : providersList)
{
if (!cachedBodyProviders.contains(provider))
{
provider.getWailaBody(itemStack, list, accessor, iWailaConfigHandler);
}
}
}
}
}
return list;
}
@Override
public List<String> getWailaTail(ItemStack itemStack, List<String> list, IWailaDataAccessor accessor, IWailaConfigHandler iWailaConfigHandler)
{
TileEntity te = accessor.getTileEntity();
if (accessor instanceof DataAccessorCommon && te != null && isShiftNotDown())
{
TileEntityCamouflage camouflage = ClusterRegistry.CAMO.getTileEntity(te.getWorldObj(), te.xCoord, te.yCoord, te.zCoord);
if (camouflage != null && camouflage.hasSideBlock(0))
{
((DataAccessorCommon) accessor).block = camouflage.getSideBlock(0);
((DataAccessorCommon) accessor).metadata = camouflage.getSideMetadata(0);
for (List<IWailaDataProvider> providersList : ModuleRegistrar.instance().getTailProviders(accessor.getBlock()).values())
{
for (IWailaDataProvider provider : providersList)
{
if (!cachedTailProviders.contains(provider))
{
provider.getWailaTail(itemStack, list, accessor, iWailaConfigHandler);
}
}
}
}
}
return list;
}
@Override
public NBTTagCompound getNBTData(EntityPlayerMP entityPlayerMP, TileEntity tileEntity, NBTTagCompound nbtTagCompound, World world, int i, int i1, int i2)
{
return null;
}
}