public class NedoBlock extends Block {
public ResourceLocation texture_loc;
public int renderID;
NedoBlock(String texture, String model) {
super(Material.iron);
setHardness(3.0F);
setCreativeTab(CreativeTabs.tabRedstone);
setBlockTextureName("nedocomputers:" + texture);
texture_loc = new ResourceLocation("nedocomputers", "textures/blocks/" + texture + ".png");
renderID = RenderingRegistry.getNextAvailableRenderId();
NedoComputers.proxy.registerBlockHandler(new NedoBlockRenderer(this, model));
isBlockContainer = this instanceof ITileEntityProvider;
}
@Override
public int getRenderType() {
return renderID;
}
public int[] getRotation(IBlockAccess world, int x, int y, int z) {
ForgeDirection block_dir = ForgeDirection.getOrientation(world.getBlockMetadata(x, y, z));
int result[] = {0, 0, 0};
switch (ForgeDirection.getOrientation(world.getBlockMetadata(x, y, z))) {
case DOWN:
result[0] = 3; result[1] = 0; result[2] = 0;
break;
case UP:
result[0] = 1; result[1] = 0; result[2] = 0;
break;
case NORTH:
result[0] = 0; result[1] = 2; result[2] = 0;
break;
case SOUTH:
result[0] = 0; result[1] = 0; result[2] = 0;
break;
case WEST:
result[0] = 0; result[1] = 3; result[2] = 0;
break;
case EAST:
result[0] = 0; result[1] = 1; result[2] = 0;
break;
default:
break;
}
return result;
}
@Override
public boolean onBlockEventReceived(World world, int x, int y, int z, int p_149696_5_, int p_149696_6_) {
TileEntity tileentity = world.getTileEntity(x, y, z);
return tileentity != null ? tileentity.receiveClientEvent(p_149696_5_, p_149696_6_) : false;
}
public class NedoBlockRenderer implements ISimpleBlockRenderingHandler {
public CCModel model;
public CCModel models[][][];
public int renderID;
public ResourceLocation texture;
NedoBlockRenderer(NedoBlock block, String model_name) {
renderID = block.getRenderType();
texture = block.texture_loc;
ResourceLocation model_loc = new ResourceLocation("nedocomputers", model_name);
CCModel m = CCModel.parseObjModels(model_loc, GL11.GL_QUADS, new SwapYZ()).get("block");
m.apply(new Rotation(Math.PI, 0, 1, 0));
m.apply(new Rotation(Math.PI/2, 1, 0, 0));
model = m.copy();
models = new CCModel[4][4][4];
for (int k = 0; k < 4; k++) {
for (int j = 0; j < 4; j++) {
for (int i = 0; i < 4; i++) {
models[i][j][k] = model.copy()
.apply(new Rotation(i * Math.PI/2, 1, 0, 0))
.apply(new Rotation(j * Math.PI/2, 0, 1, 0))
.apply(new Rotation(k * Math.PI/2, 0, 0, 1));
}
}
}
}
@Override
public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) {
CCRenderState.reset();
CCRenderState.useNormals = true;
CCRenderState.pullLightmap();
CCRenderState.changeTexture(texture);
CCRenderState.startDrawing();
model.render(new Scale(1));
CCRenderState.draw();
}
@Override
public boolean renderWorldBlock(IBlockAccess world, int x, int y,
int z, Block block, int modelId, RenderBlocks renderer) {
CCRenderState.reset();
CCRenderState.lightMatrix.locate(world, x, y, z);
int rot[] = ((NedoBlock)block).getRotation(world, x, y, z);
models[rot[0]][rot[1]][rot[2]].render(
new Translation(x + 0.5, y + 0.5, z + 0.5),
CCRenderState.lightMatrix,
new IconTransformation(block.getIcon(0, 0)));
return true;
}
@Override
public boolean shouldRender3DInInventory(int modelId) {
return true;
}
@Override
public int getRenderId() {
return renderID;
}
}
}