package openblocks.common.block; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.IIcon; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; import openblocks.OpenBlocks; import openblocks.api.IPaintableBlock; import openblocks.common.Stencil; import openblocks.common.tileentity.TileEntityCanvas; import openmods.infobook.BookDocumentation; import openmods.utils.ColorUtils; import openmods.utils.ColorUtils.ColorMeta; @BookDocumentation(hasVideo = true) public class BlockCanvas extends OpenBlock implements IPaintableBlock { public static final int RENDER_ALL_SIDES = -1; public static final int BASE_LAYER = -1; public static final int NO_LAYER = -2; private int layer = 0; private int renderSide = 0; public IIcon baseIcon; public IIcon wallpaper; public BlockCanvas() { this(Material.sponge); } public BlockCanvas(Material material) { super(material); } @Override @SideOnly(Side.CLIENT) public void registerBlockIcons(IIconRegister registry) { super.registerBlockIcons(registry); baseIcon = registry.registerIcon("openblocks:canvas"); wallpaper = registry.registerIcon("openblocks:wallpaper"); for (Stencil stencil : Stencil.values()) stencil.registerBlockIcons(registry); } public void setLayerForRender(int layer) { this.layer = layer; } public void setSideForRender(int side) { this.renderSide = side; } @Override public boolean shouldSideBeRendered(IBlockAccess world, int x, int y, int z, int side) { return (renderSide == RENDER_ALL_SIDES || side == renderSide) && super.shouldSideBeRendered(world, x, y, z, side); } @Override public int colorMultiplier(IBlockAccess world, int x, int y, int z) { if (layer != NO_LAYER) { TileEntityCanvas tile = getTileEntity(world, x, y, z, TileEntityCanvas.class); if (tile != null) return tile.getColorForRender(renderSide, layer); } return 0xFFFFFFFF; } @Override public IIcon getUnrotatedTexture(ForgeDirection direction, IBlockAccess world, int x, int y, int z) { if (layer != NO_LAYER) { TileEntityCanvas tile = getTileEntity(world, x, y, z, TileEntityCanvas.class); if (tile != null) return tile.getTextureForRender(renderSide, layer); } return super.getUnrotatedTexture(direction, world, x, y, z); } public static void replaceBlock(World world, int x, int y, int z) { Block block = world.getBlock(x, y, z); int meta = world.getBlockMetadata(x, y, z); if (block.getMaterial() == Material.glass) { world.setBlock(x, y, z, OpenBlocks.Blocks.canvasGlass); } else { world.setBlock(x, y, z, OpenBlocks.Blocks.canvas); } TileEntityCanvas tile = (TileEntityCanvas)world.getTileEntity(x, y, z); tile.setPaintedBlockBlock(block, meta); } @Override public boolean recolourBlockRGB(World world, int x, int y, int z, ForgeDirection side, int color) { final TileEntity te = world.getTileEntity(x, y, z); return (te instanceof TileEntityCanvas)? ((TileEntityCanvas)te).applyPaint(color, side) : false; } @Override public boolean recolourBlock(World world, int x, int y, int z, ForgeDirection side, int colour) { ColorMeta color = ColorUtils.vanillaBlockToColor(colour); return recolourBlockRGB(world, x, y, z, side, color.rgb); } }