Files
Chisel/src/main/java/team/chisel/client/render/SubmapManagerVoidstone.java
T

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

150 lines
5.4 KiB
Java
Raw Normal View History

2015-08-18 20:40:55 -04:00
package team.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.util.MathHelper;
import net.minecraft.world.IBlockAccess;
import net.minecraftforge.common.util.ForgeDirection;
2015-06-03 17:43:03 -04:00
2015-07-02 15:07:22 -04:00
import com.cricketcraft.chisel.api.carving.CarvingUtils;
2015-06-03 17:43:03 -04:00
import com.cricketcraft.chisel.api.rendering.TextureType;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
2023-08-18 03:10:44 -05:00
import team.chisel.ctmlib.ISubmapManager;
import team.chisel.ctmlib.RenderBlocksCTM;
import team.chisel.ctmlib.TextureSubmap;
public class SubmapManagerVoidstone extends SubmapManagerBase {
// TODO there must be a better more generic way to do this...
@SideOnly(Side.CLIENT)
2015-07-02 15:07:22 -04:00
private class RenderBlocksVoidstone extends RenderBlocksCTM {
@Override
public void renderFaceXNeg(Block block, double x, double y, double z, IIcon icon) {
super.renderFaceXNeg(block, x, y, z, icon);
renderMinX += 0.005;
setOverrideBlockTexture(getBase(x, y, z, ForgeDirection.WEST.ordinal()));
super.renderFaceXNeg(block, x, y, z, null);
clearOverrideBlockTexture();
}
@Override
public void renderFaceXPos(Block block, double x, double y, double z, IIcon icon) {
super.renderFaceXPos(block, x, y, z, icon);
setOverrideBlockTexture(getBase(x, y, z, ForgeDirection.EAST.ordinal()));
renderMaxX -= 0.005;
super.renderFaceXPos(block, x, y, z, null);
clearOverrideBlockTexture();
}
@Override
public void renderFaceYNeg(Block block, double x, double y, double z, IIcon icon) {
super.renderFaceYNeg(block, x, y, z, icon);
setOverrideBlockTexture(getBase(x, y, z, ForgeDirection.DOWN.ordinal()));
renderMinY += 0.005;
super.renderFaceYNeg(block, x, y, z, null);
clearOverrideBlockTexture();
}
@Override
public void renderFaceYPos(Block block, double x, double y, double z, IIcon icon) {
super.renderFaceYPos(block, x, y, z, icon);
setOverrideBlockTexture(getBase(x, y, z, ForgeDirection.UP.ordinal()));
renderMaxY -= 0.005;
super.renderFaceYPos(block, x, y, z, null);
clearOverrideBlockTexture();
}
@Override
public void renderFaceZNeg(Block block, double x, double y, double z, IIcon icon) {
super.renderFaceZNeg(block, x, y, z, icon);
setOverrideBlockTexture(getBase(x, y, z, ForgeDirection.NORTH.ordinal()));
renderMinZ += 0.005;
super.renderFaceZNeg(block, x, y, z, null);
clearOverrideBlockTexture();
}
@Override
public void renderFaceZPos(Block block, double x, double y, double z, IIcon icon) {
super.renderFaceZPos(block, x, y, z, icon);
setOverrideBlockTexture(getBase(x, y, z, ForgeDirection.SOUTH.ordinal()));
renderMaxZ -= 0.005;
super.renderFaceZPos(block, x, y, z, null);
clearOverrideBlockTexture();
}
public void reset() {
this.submap = null;
}
}
@SideOnly(Side.CLIENT)
private static ThreadLocal<RenderBlocksVoidstone> renderBlocksThreadLocal;
private static void initStatics() {
if (renderBlocksThreadLocal == null) {
renderBlocksThreadLocal = new ThreadLocal<>();
}
}
2015-07-02 15:07:22 -04:00
private ISubmapManager overlay;
private TextureSubmap base;
private IIcon getBase(double x, double y, double z, int side) {
return TextureType.getVIcon(
2023-08-18 03:10:44 -05:00
TextureType.V4,
base,
MathHelper.floor_double(x),
MathHelper.floor_double(y),
MathHelper.floor_double(z),
side);
}
private String texture;
2015-07-02 15:07:22 -04:00
private int meta;
2015-07-02 15:07:22 -04:00
public SubmapManagerVoidstone(String texture, int meta) {
this.texture = texture;
2015-07-02 15:07:22 -04:00
this.meta = meta;
}
@Override
public IIcon getIcon(int side, int meta) {
2015-07-02 15:07:22 -04:00
return overlay.getIcon(side, meta);
}
2015-07-02 15:07:22 -04:00
@Override
public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side) {
return overlay.getIcon(world, x, y, z, side);
}
@Override
public void registerIcons(String modName, Block block, IIconRegister register) {
2015-07-02 15:07:22 -04:00
overlay = TextureType.getTypeFor(null, modName, texture)
2023-08-18 03:10:44 -05:00
.createManagerFor(CarvingUtils.getDefaultVariationFor(block, meta, 0), texture);
2015-07-02 15:07:22 -04:00
overlay.registerIcons(modName, block, register);
base = new TextureSubmap(register.registerIcon(modName + ":" + "animations/hadesX32"), 2, 2);
}
@Override
2015-06-02 11:33:44 -04:00
@SideOnly(Side.CLIENT)
public RenderBlocks createRenderContext(RenderBlocks rendererOld, Block block, IBlockAccess world) {
initStatics();
RenderBlocksVoidstone rb = renderBlocksThreadLocal.get();
if (rb == null) {
rb = new RenderBlocksVoidstone();
renderBlocksThreadLocal.set(rb);
} else rb.reset();
2015-07-02 15:07:22 -04:00
RenderBlocks ctx = overlay.createRenderContext(rendererOld, block, world);
rb.setRenderBoundsFromBlock(block);
2015-07-02 15:07:22 -04:00
if (ctx instanceof RenderBlocksCTM) {
rb.submap = ((RenderBlocksCTM) ctx).submap;
rb.submapSmall = ((RenderBlocksCTM) ctx).submapSmall;
}
return rb;
}
}