public void render(CCRenderState renderState, Matrix4 translation, IVertexOperation[] pipeline, EnumFacing rotation) { translation.translate(0.5, 0.5, 0.5); translation.rotate(Math.toRadians(90.0 * rotations.indexOf(rotation)), new Vector3(0.0, 1.0, 0.0)); translation.translate(-0.5, -0.5, -0.5); for(EnumFacing renderSide : EnumFacing.VALUES) { TextureAtlasSprite baseSprite = renderSide.getAxis() == Axis.Y ? textures[0] : renderSide == EnumFacing.NORTH ? textures[2] : textures[1]; TextureAtlasSprite lockSprite = textures[3]; Textures.renderFace(renderState, translation, pipeline, renderSide, mainBox, baseSprite); Textures.renderFace(renderState, translation, pipeline, renderSide, lockBox, lockSprite); } }
@Override public void renderMetaTileEntity(CCRenderState renderState, Matrix4 translation, IVertexOperation[] pipeline) { Textures.VOLTAGE_CASINGS[tier].render(renderState, translation, ArrayUtils.add(pipeline, new ColourMultiplier(GTUtility.convertRGBtoOpaqueRGBA_CL(getPaintingColorForRendering())))); translation.translate(0.5, 0.001, 0.5); translation.rotate(Math.toRadians(rotations[getFrontFacing().getIndex() - 2]), new Vector3(0.0, 1.0, 0.0)); translation.translate(-0.5, 0.0, -0.5); Textures.SCREEN.renderSided(EnumFacing.UP, renderState, translation, pipeline); }
@Override public void renderMetaTileEntity(CCRenderState renderState, Matrix4 translation, IVertexOperation[] pipeline) { Textures.VOLTAGE_CASINGS[tier].render(renderState, translation, ArrayUtils.add(pipeline, new ColourMultiplier(GTUtility.convertRGBtoOpaqueRGBA_CL(getPaintingColorForRendering())))); translation.translate(0.5, 0.001, 0.5); translation.rotate(Math.toRadians(rotations[getFrontFacing().getIndex() - 2]), new Vector3(0.0, 1.0, 0.0)); translation.translate(-0.5, 0.0, -0.5); Textures.SCREEN.renderSided(EnumFacing.UP, renderState, translation, pipeline); }
@Override protected void draw(TileEntityCrusherBlade tileEntity, CCRenderState renderState, Matrix4 translation, float partialTicks) { translation.translate(0.5, 0.5, 0.5); IBlockState blockState = tileEntity.getBlockState(); switch (blockState.getValue(BlockCrusherBlade.AXIS)) { case Y: break; case X: translation.rotate(Math.toRadians(90.0), Rotation.axes[3]); break; case Z: translation.rotate(Math.toRadians(90.0), Rotation.axes[5]); break; } if(blockState.getValue(BlockCrusherBlade.ACTIVE)) { long currentWorldTime = tileEntity.hasWorld() ? tileEntity.getWorld().getTotalWorldTime() : 0; translation.rotate(Math.toRadians(currentWorldTime * 12.0 % 180), Rotation.axes[1]); } translation.translate(-0.5, -0.5, -0.5); TextureAtlasSprite ironBlockTexture = TextureUtils.getBlockTexture("iron_block"); IVertexOperation[] operations = {}; for(Cuboid6 cuboid6 : BlockCrusherBlade.basicModel) { for(EnumFacing renderSide : EnumFacing.VALUES) { Textures.renderFace(renderState, translation, operations, renderSide, cuboid6, ironBlockTexture); } } }
public void renderSided(CCRenderState renderState, Matrix4 translation, IVertexOperation[] pipeline, EnumFacing side, boolean hasBase, boolean hasRotor, boolean isActive, int rotorRGB) { Matrix4 cornerOffset = null; switch (side.getAxis()) { case X: cornerOffset = translation.copy().translate(0.01 * side.getFrontOffsetX(), -1.0, -1.0); cornerOffset.scale(1.0, 3.0, 3.0); break; case Z: cornerOffset = translation.copy().translate(-1.0, -1.0, 0.01 * side.getFrontOffsetZ()); cornerOffset.scale(3.0, 3.0, 1.0); break; case Y: cornerOffset = translation.copy().translate(-1.0, 0.01 * side.getFrontOffsetY(), -1.0); cornerOffset.scale(3.0, 1.0, 3.0); break; } if(hasBase) { Textures.renderFace(renderState, cornerOffset, pipeline, side, Cuboid6.full, baseRingSprite); renderState.brightness = 0xF000F0; renderState.colour = 0xFFFFFFFF; Textures.renderFace(renderState, cornerOffset, new IVertexOperation[0], side, Cuboid6.full, baseBackgroundSprite); } if(hasRotor) { TextureAtlasSprite sprite = isActive ? activeBladeSprite : idleBladeSprite; IVertexOperation[] color = ArrayUtils.add(pipeline, new ColourMultiplier(GTUtility.convertRGBtoOpaqueRGBA_CL(rotorRGB))); Textures.renderFace(renderState, cornerOffset, color, side, Cuboid6.full, sprite); } }
@Override public void renderTileEntityFast(T te, double x, double y, double z, float partialTicks, int destroyStage, float partial, BufferBuilder buffer) { CCRenderState renderState = CCRenderState.instance(); renderState.reset(); renderState.bind(buffer); if(te.getWorld() != null) { renderState.setBrightness(te.getWorld(), te.getPos()); } Matrix4 translation = new Matrix4().translate(x, y, z); draw(te, renderState, translation, partialTicks); }
@Override public void renderMetaTileEntity(CCRenderState renderState, Matrix4 translation, IVertexOperation[] pipeline) { super.renderMetaTileEntity(renderState, translation, pipeline); Textures.PRIMITIVE_BLAST_FURNACE_OVERLAY.render(renderState, translation, pipeline, getFrontFacing(), isActive()); if(isActive()) { EnumFacing back = getFrontFacing().getOpposite(); Matrix4 offset = translation.copy().translate(back.getFrontOffsetX(), -0.3, back.getFrontOffsetZ()); TextureAtlasSprite sprite = TextureUtils.getBlockTexture("lava_still"); renderState.brightness = 0xF000F0; renderState.colour = 0xFFFFFFFF; Textures.renderFace(renderState, offset, new IVertexOperation[0], EnumFacing.UP, Cuboid6.full, sprite); } }
@Override public boolean renderBlock(IBlockAccess world, BlockPos pos, IBlockState state, BufferBuilder buffer) { MetaTileEntity metaTileEntity = BlockMachine.getMetaTileEntity(world, pos); if(metaTileEntity == null) return false; CCRenderState renderState = CCRenderState.instance(); renderState.reset(); renderState.bind(buffer); renderState.lightMatrix.locate(world, pos); IVertexOperation[] pipeline = new IVertexOperation[] {renderState.lightMatrix}; Matrix4 translation = new Matrix4().translate(pos.getX(), pos.getY(), pos.getZ()); metaTileEntity.renderMetaTileEntity(renderState, translation.copy(), pipeline); metaTileEntity.renderCovers(renderState, translation, pipeline); return true; }
@Override @SideOnly(Side.CLIENT) public void renderMetaTileEntity(CCRenderState renderState, Matrix4 translation, IVertexOperation[] pipeline) { super.renderMetaTileEntity(renderState, translation, pipeline); ColourMultiplier multiplier = new ColourMultiplier(GTUtility.convertRGBtoOpaqueRGBA_CL(getPaintingColorForRendering())); IVertexOperation[] coloredPipeline = ArrayUtils.add(pipeline, multiplier); for(EnumFacing renderSide : EnumFacing.HORIZONTALS) { if(renderSide == getFrontFacing()) { Textures.PIPE_OUT_OVERLAY.renderSided(renderSide, renderState, translation, pipeline); } else { Textures.ADV_PUMP_OVERLAY.renderSided(renderSide, renderState, translation, coloredPipeline); } } Textures.SCREEN.renderSided(EnumFacing.UP, renderState, translation, pipeline); Textures.PIPE_IN_OVERLAY.renderSided(EnumFacing.DOWN, renderState, translation, pipeline); for(int i = 0; i < pumpHeadY; i++) { translation.translate(0.0, -1.0, 0.0); Textures.SOLID_STEEL_CASING.render(renderState, translation, pipeline, PIPE_CUBOID); } }
@SideOnly(Side.CLIENT) public boolean renderStatic(Vector3 pos, BlockRenderLayer layer, CCRenderState ccrs) { if (MinecraftForgeClient.getRenderLayer() == BlockRenderLayer.CUTOUT) { TileMultipart tileMultipart = tile(); ccrs.setBrightness(tileMultipart.getWorld(), tileMultipart.getPos()); FluidPipeRenderer.INSTANCE.renderPipeBlock(getPipeMaterial(), getPipeType(), getInsulationColor(), ccrs, new IVertexOperation[]{new Translation(pos)}, activeConnections & ~getBlockedConnections()); getCoverableImplementation().renderCovers(ccrs, new Matrix4().translate(pos), new IVertexOperation[0]); return true; } return false; }
@SideOnly(Side.CLIENT) public boolean renderStatic(Vector3 pos, BlockRenderLayer layer, CCRenderState ccrs) { if (MinecraftForgeClient.getRenderLayer() == BlockRenderLayer.CUTOUT) { TileMultipart tileMultipart = tile(); ccrs.setBrightness(tileMultipart.getWorld(), tileMultipart.getPos()); CableRenderer.INSTANCE.renderCableBlock(getPipeMaterial(), getPipeType(), getInsulationColor(), ccrs, new IVertexOperation[]{new Translation(pos)}, activeConnections & ~getBlockedConnections()); getCoverableImplementation().renderCovers(ccrs, new Matrix4().translate(pos), new IVertexOperation[0]); return true; } return false; } }
@Override public boolean renderBlock(IBlockAccess world, BlockPos pos, IBlockState state, BufferBuilder buffer) { CCRenderState renderState = CCRenderState.instance(); renderState.reset(); renderState.bind(buffer); IVertexOperation[] pipeline = {new Translation(pos)}; renderState.setBrightness(world, pos); BlockCable blockCable = (BlockCable) state.getBlock(); IPipeTile<Insulation, WireProperties> tileEntityCable = blockCable.getPipeTileEntity(world, pos); if(tileEntityCable == null) return false; int paintingColor = tileEntityCable.getInsulationColor(); int connectedSidesMask = blockCable.getActualConnections(tileEntityCable, world); Insulation insulation = tileEntityCable.getPipeType(); Material material = tileEntityCable.getPipeMaterial(); renderCableBlock(material, insulation, paintingColor, renderState, pipeline, connectedSidesMask); tileEntityCable.getCoverableImplementation().renderCovers(renderState, new Matrix4().translate(pos.getX(), pos.getY(), pos.getZ()), new IVertexOperation[0]); return true; }
@Override public boolean renderBlock(IBlockAccess world, BlockPos pos, IBlockState state, BufferBuilder buffer) { CCRenderState renderState = CCRenderState.instance(); renderState.reset(); renderState.bind(buffer); IVertexOperation[] pipeline = {new Translation(pos)}; renderState.setBrightness(world, pos); BlockFluidPipe blockFluidPipe = (BlockFluidPipe) state.getBlock(); IPipeTile<FluidPipeType, FluidPipeProperties> tileEntityCable = blockFluidPipe.getPipeTileEntity(world, pos); if(tileEntityCable == null) return false; int paintingColor = tileEntityCable.getInsulationColor(); int connectedSidesMask = blockFluidPipe.getActualConnections(tileEntityCable, world); FluidPipeType fluidPipeType = tileEntityCable.getPipeType(); Material material = tileEntityCable.getPipeMaterial(); renderPipeBlock(material, fluidPipeType, paintingColor, renderState, pipeline, connectedSidesMask); tileEntityCable.getCoverableImplementation().renderCovers(renderState, new Matrix4().translate(pos.getX(), pos.getY(), pos.getZ()), new IVertexOperation[0]); return true; }
@Override public boolean renderBlock(IBlockAccess world, BlockPos pos, IBlockState state, BufferBuilder buffer) { //render water in dedicated translucent rendering layer lazyInitializeRenderers(); if(state.getBlock() instanceof BlockSurfaceRockFlooded && MinecraftForgeClient.getRenderLayer() == BlockRenderLayer.TRANSLUCENT) { waterRenderer.renderFluid(world, state, pos, buffer); return true; } //otherwise, we are in solid rendering layer and render primary stone CCRenderState renderState = CCRenderState.instance(); renderState.reset(); renderState.bind(buffer); Matrix4 translation = new Matrix4(); translation.translate(pos.getX(), pos.getY(), pos.getZ()); IVertexOperation[] operations = new IVertexOperation[1]; operations[0] = new ColourMultiplier(GTUtility.convertRGBtoOpaqueRGBA_CL( blockColors.colorMultiplier(state, world, pos, 1))); if(world != null) { renderState.setBrightness(world, pos); } TextureAtlasSprite stoneSprite = TextureUtils.getBlockTexture("stone"); Cuboid6 baseBox = BlockSurfaceRock.getShapeFromBlockPos(pos); for(EnumFacing renderSide : EnumFacing.VALUES) { Textures.renderFace(renderState, translation, operations, renderSide, baseBox, stoneSprite); } return true; }
public void render(CCRenderState renderState, Matrix4 translation, int baseColor, IVertexOperation[] pipeline, int capacity, FluidStack fluidStack) { IVertexOperation[] basePipeline = ArrayUtils.add(pipeline, new ColourMultiplier(baseColor)); Cuboid6 fluidCuboid = null; IVertexOperation[] fluidPipeline = null; TextureAtlasSprite fluidSprite = null; if(fluidStack != null) { double fluidLevel = fluidStack.amount / (capacity * 1.0) * 0.98; if(fluidStack.getFluid().isGaseous(fluidStack)) { fluidCuboid = new Cuboid6(0.01, 0.99 - fluidLevel, 0.01, 0.99, 0.99, 0.99); } else { fluidCuboid = new Cuboid6(0.01, 0.01, 0.01, 0.99, 0.01 + fluidLevel, 0.99); } ColourMultiplier multiplier = new ColourMultiplier(GTUtility.convertRGBtoOpaqueRGBA_CL(fluidStack.getFluid().getColor(fluidStack))); fluidPipeline = new IVertexOperation[] {multiplier}; fluidSprite = TextureUtils.getTexture(fluidStack.getFluid().getStill(fluidStack)); } for(EnumFacing renderSide : EnumFacing.VALUES) { Textures.renderFace(renderState, translation, basePipeline, renderSide, Cuboid6.full, sideSprite); Textures.renderFace(renderState, translation.copy() .translate(renderSide.getFrontOffsetX(), renderSide.getFrontOffsetY(), renderSide.getFrontOffsetZ()), basePipeline, renderSide.getOpposite(), Cuboid6.full, sideSprite); //for rendering sides from inside too if(fluidStack != null) { Textures.renderFace(renderState, translation, fluidPipeline, renderSide, fluidCuboid, fluidSprite); } } }
REVERSE_HORIZONTAL_ROTATION.apply(backTranslation); backTranslation.translate(-sideFacing.getFrontOffsetX(), -sideFacing.getFrontOffsetY(), -sideFacing.getFrontOffsetZ()); coverBehavior.renderCover(renderState, backTranslation, pipeline, plateBox);