package sourcecoded.quantum.client.renderer.block; import net.minecraft.block.Block; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.client.renderer.RenderGlobal; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.client.event.RenderWorldLastEvent; import sourcecoded.quantum.api.Point3D; import sourcecoded.quantum.api.block.BlockWithData; import sourcecoded.quantum.util.save.QAWorldSavedData; import java.util.HashMap; import java.util.Map; public class QuantumLockRender { public static HashMap<Point3D, BlockWithData> lockCache = new HashMap<Point3D, BlockWithData>(); public static void refreshCache(QAWorldSavedData data) { NBTTagList list = data.lockList; lockCache.clear(); for (int i = 0; i < list.tagCount(); i++) { NBTTagCompound compound = list.getCompoundTagAt(i); int x = compound.getInteger("x"); int y = compound.getInteger("y"); int z = compound.getInteger("z"); Point3D point = new Point3D(x, y, z); Block block = Block.getBlockFromName(compound.getString("blockID")); int meta = compound.getInteger("meta"); lockCache.put(point, new BlockWithData(block, meta)); } } //Called in the particle dispatcher public static void renderTick(RenderWorldLastEvent event) { RenderGlobal renderContext = event.context; float ptt = event.partialTicks; for (Map.Entry<Point3D, BlockWithData> entry : lockCache.entrySet()) { Block block = entry.getValue().block; Point3D point = entry.getKey(); TileEntity tile = Minecraft.getMinecraft().theWorld.getTileEntity(point.getX(), point.getY(), point.getZ()); if (block == null) return; if (block.renderAsNormalBlock()) { RenderBlocks.getInstance().renderStandardBlock(block, point.getX(), point.getY(), point.getZ()); } else { if (block.getRenderType() == -1) { if (tile != null) { TileEntitySpecialRenderer renderer = TileEntityRendererDispatcher.instance.getSpecialRenderer(tile); if (renderer != null) renderer.renderTileEntityAt(tile, point.getX(), point.getY(), point.getZ(), ptt); } } else { Tessellator.instance.startDrawingQuads(); //RenderingRegistry.instance().renderWorldBlock(RenderBlocks.getInstance(), Minecraft.getMinecraft().theWorld, point.getX(), point.getY(), point.getZ(), block, block.getRenderType()); System.err.println("WORLD: " + Minecraft.getMinecraft().theWorld); RenderBlocks.getInstance().blockAccess = Minecraft.getMinecraft().theWorld; RenderBlocks.getInstance().renderBlockByRenderType(block, point.getX(), point.getY(), point.getZ()); Tessellator.instance.draw(); } } } } }