package crazypants.enderio.teleport.telepad;
import java.util.Collection;
import java.util.Map;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.util.IIcon;
import net.minecraft.world.IBlockAccess;
import net.minecraftforge.client.model.obj.GroupObject;
import net.minecraftforge.common.util.ForgeDirection;
import com.enderio.core.client.render.CubeRenderer;
import com.enderio.core.client.render.TechneModelRenderer;
import com.enderio.core.client.render.TechneUtil;
import com.enderio.core.common.util.BlockCoord;
import com.google.common.collect.Lists;
import crazypants.enderio.EnderIO;
public class TelePadRenderer extends TechneModelRenderer {
private final Collection<GroupObject> strippedModel = Lists.newArrayList();
public TelePadRenderer() {
super(TechneUtil.getModel(EnderIO.DOMAIN, "models/telePad"), BlockTelePad.renderId);
for (String s : this.model.keySet()) {
if(!s.equals("glass") && !s.contains("blade")) {
strippedModel.add(this.model.get(s));
}
}
}
protected Collection<GroupObject> getModel() {
return strippedModel;
}
@Override
protected Collection<GroupObject> getModel(Block block, int metadata) {
return getModel();
}
@Override
protected Collection<GroupObject> getModel(IBlockAccess world, int x, int y, int z) {
return getModel();
}
Map<String, GroupObject> getFullModel() {
return model;
}
@Override
public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) {
TileTelePad te = (TileTelePad) world.getTileEntity(x, y, z);
boolean ret = true;
if (te.inNetwork()) {
if (renderer.hasOverrideBlockTexture()) {
IIcon icon = renderer.overrideBlockTexture;
renderer.renderFaceYNeg(block, x, y, z, icon);
renderer.renderFaceYPos(block, x, y, z, icon);
BlockCoord bc = te.getLocation();
if (!isTelepad(world, bc, ForgeDirection.EAST)) {
renderer.renderFaceXPos(block, x, y, z, icon);
}
if (!isTelepad(world, bc, ForgeDirection.WEST)) {
renderer.renderFaceXNeg(block, x, y, z, icon);
}
if (!isTelepad(world, bc, ForgeDirection.SOUTH)) {
renderer.renderFaceZPos(block, x, y, z, icon);
}
if (!isTelepad(world, bc, ForgeDirection.NORTH)) {
renderer.renderFaceZNeg(block, x, y, z, icon);
}
} else {
if (te.isMaster()) {
super.renderWorldBlock(world, x, y, z, block, modelId, renderer);
} else {
ret = false;
}
}
} else {
renderer.renderStandardBlock(block, x, y, z);
}
return ret;
}
private boolean isTelepad(IBlockAccess world, BlockCoord pos, ForgeDirection dir) {
return pos.getLocation(dir).getTileEntity(world) instanceof TileTelePad;
}
@Override
public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) {
Tessellator.instance.startDrawingQuads();
CubeRenderer.render(block, metadata);
Tessellator.instance.draw();
}
}