package openblocks.client.renderer.block;
import java.util.HashSet;
import java.util.Random;
import java.util.Set;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.world.IBlockAccess;
import openblocks.common.block.BlockPath;
import openmods.renderer.IBlockRenderer;
import openmods.tileentity.renderer.OpenRenderHelper;
import org.lwjgl.opengl.GL11;
public class BlockPathRenderer implements IBlockRenderer<BlockPath> {
private final Random rnd = new Random();
@Override
public void renderInventoryBlock(BlockPath block, int metadata, int modelID, RenderBlocks renderer) {
GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
renderWorldBlock(null, 0, 0, 0, block, -1, renderer);
}
@Override
public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, BlockPath block, int modelId, RenderBlocks renderer) {
Set<AxisAlignedBB> boundingBoxes = new HashSet<AxisAlignedBB>();
for (int i = 0; i < 10; i++) {
rnd.setSeed((x ^ 31) * (y ^ 11) * z ^ (i * 113));
double width = rnd.nextDouble() * 0.3 + 0.1;
double length = rnd.nextDouble() * 0.3 + 0.1;
double pX = rnd.nextDouble() * (1.0 - width);
double pZ = rnd.nextDouble() * (1.0 - length);
AxisAlignedBB bb = AxisAlignedBB.getBoundingBox(pX, 0, pZ, pX + width, 1, pZ + length);
boolean hit = false;
for (AxisAlignedBB box : boundingBoxes) {
if (box.intersectsWith(bb)) {
hit = true;
break;
}
}
if (!hit) {
renderer.setRenderBounds(pX, 0, pZ, pX + width, 0.05 * rnd.nextDouble() + 0.02, pZ + length);
if (modelId == -1) {
OpenRenderHelper.renderCube(renderer.renderMinX, renderer.renderMinY, renderer.renderMinZ, renderer.renderMaxX, renderer.renderMaxY, renderer.renderMaxZ, block, null);
} else {
renderer.renderStandardBlock(block, x, y, z);
}
boundingBoxes.add(bb);
}
}
return true;
}
}