package com.cricketcraft.chisel.client.render;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.util.IIcon;
import net.minecraft.world.IBlockAccess;
import net.minecraftforge.common.util.ForgeDirection;
import com.cricketcraft.ctmlib.ISubmapManager;
import com.cricketcraft.ctmlib.RenderBlocksCTM;
import com.cricketcraft.ctmlib.TextureSubmap;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
public class SubmapManagerSlab implements ISubmapManager {
@SideOnly(Side.CLIENT)
private static RenderBlocksCTM rb;
private TextureSubmap submap;
private TextureSubmap submapSmall;
private IIcon sideTexture;
private String texture;
public SubmapManagerSlab(String texture) {
this.texture = texture;
}
@Override
public IIcon getIcon(int side, int meta) {
return submapSmall.getBaseIcon();
}
@Override
public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side) {
return getIcon(side, world.getBlockMetadata(x, y, z));
}
@Override
@SideOnly(Side.CLIENT)
public void registerIcons(String modName, Block block, IIconRegister register) {
String path = modName + ":" + texture;
submap = new TextureSubmap(register.registerIcon(path + "-ctm"), 4, 4);
submapSmall = new TextureSubmap(register.registerIcon(path), 2, 2);
sideTexture = register.registerIcon(path + "-side");
}
@Override
@SideOnly(Side.CLIENT)
public RenderBlocks createRenderContext(RenderBlocks rendererOld, Block block, IBlockAccess world) {
if (rb == null) {
rb = new RenderBlocksCTM();
}
rb.setRenderBoundsFromBlock(block);
rb.submap = submap;
rb.submapSmall = submapSmall;
return rb;
}
private boolean hadOverride = false;
@Override
@SideOnly(Side.CLIENT)
public void preRenderSide(RenderBlocks renderer, IBlockAccess world, int x, int y, int z, ForgeDirection side) {
RenderBlocksCTM rbctm = (RenderBlocksCTM) renderer;
if (side.ordinal() < 2 && !rbctm.rendererOld.hasOverrideBlockTexture()) {
rbctm.rendererOld.setOverrideBlockTexture(sideTexture);
hadOverride = false;
} else {
hadOverride = true;
}
}
@Override
@SideOnly(Side.CLIENT)
public void postRenderSide(RenderBlocks renderer, IBlockAccess world, int x, int y, int z, ForgeDirection side) {
if (!hadOverride) {
((RenderBlocksCTM) renderer).rendererOld.clearOverrideBlockTexture();
}
}
}