mirror of
https://github.com/MightyPirates/OpenComputers.git
synced 2025-09-16 10:51:55 -04:00
Made cables render a little socket / plug when connected to blocks and some other stuff.
This commit is contained in:
parent
a7de0a237a
commit
5e53d832af
@ -0,0 +1,76 @@
|
|||||||
|
package li.cil.oc.client.renderer.block
|
||||||
|
|
||||||
|
import li.cil.oc.client.Textures
|
||||||
|
import li.cil.oc.util.RenderState
|
||||||
|
import net.minecraft.block.Block
|
||||||
|
import net.minecraft.client.renderer.RenderBlocks
|
||||||
|
import org.lwjgl.opengl.GL11
|
||||||
|
|
||||||
|
object Assembler {
|
||||||
|
def render(block: Block, metadata: Int, x: Int, y: Int, z: Int, renderer: RenderBlocks) {
|
||||||
|
val previousRenderAllFaces = renderer.renderAllFaces
|
||||||
|
renderer.renderAllFaces = true
|
||||||
|
|
||||||
|
// Bottom.
|
||||||
|
renderer.setRenderBounds(0, 0, 0, 1, 7 / 16f, 1)
|
||||||
|
renderer.renderStandardBlock(block, x, y, z)
|
||||||
|
// Middle.
|
||||||
|
renderer.setRenderBounds(2 / 16f, 7 / 16f, 2 / 16f, 14 / 16f, 9 / 16f, 14 / 16f)
|
||||||
|
renderer.renderStandardBlock(block, x, y, z)
|
||||||
|
// Top.
|
||||||
|
renderer.setRenderBounds(0, 9 / 16f, 0, 1, 1, 1)
|
||||||
|
renderer.renderStandardBlock(block, x, y, z)
|
||||||
|
|
||||||
|
renderer.renderAllFaces = previousRenderAllFaces
|
||||||
|
}
|
||||||
|
|
||||||
|
def render(block: Block, metadata: Int, renderer: RenderBlocks) {
|
||||||
|
// Bottom.
|
||||||
|
renderer.setRenderBounds(0, 0, 0, 1, 7 / 16f, 1)
|
||||||
|
BlockRenderer.renderFaceYPos(block, metadata, renderer)
|
||||||
|
BlockRenderer.renderFaceYNeg(block, metadata, renderer)
|
||||||
|
BlockRenderer.renderFaceXPos(block, metadata, renderer)
|
||||||
|
BlockRenderer.renderFaceXNeg(block, metadata, renderer)
|
||||||
|
BlockRenderer.renderFaceZPos(block, metadata, renderer)
|
||||||
|
BlockRenderer.renderFaceZNeg(block, metadata, renderer)
|
||||||
|
|
||||||
|
// Middle.
|
||||||
|
val previousRenderAllFaces = renderer.renderAllFaces
|
||||||
|
renderer.renderAllFaces = true
|
||||||
|
renderer.setRenderBounds(2 / 16f, 7 / 16f, 2 / 16f, 14 / 16f, 9 / 16f, 14 / 16f)
|
||||||
|
BlockRenderer.renderFaceXPos(block, metadata, renderer)
|
||||||
|
BlockRenderer.renderFaceXNeg(block, metadata, renderer)
|
||||||
|
BlockRenderer.renderFaceZPos(block, metadata, renderer)
|
||||||
|
BlockRenderer.renderFaceZNeg(block, metadata, renderer)
|
||||||
|
renderer.renderAllFaces = previousRenderAllFaces
|
||||||
|
|
||||||
|
// Top.
|
||||||
|
renderer.setRenderBounds(0, 9 / 16f, 0, 1, 1, 1)
|
||||||
|
BlockRenderer.renderFaceYPos(block, metadata, renderer)
|
||||||
|
BlockRenderer.renderFaceYNeg(block, metadata, renderer)
|
||||||
|
BlockRenderer.renderFaceXPos(block, metadata, renderer)
|
||||||
|
BlockRenderer.renderFaceXNeg(block, metadata, renderer)
|
||||||
|
BlockRenderer.renderFaceZPos(block, metadata, renderer)
|
||||||
|
BlockRenderer.renderFaceZNeg(block, metadata, renderer)
|
||||||
|
|
||||||
|
GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS)
|
||||||
|
RenderState.makeItBlend()
|
||||||
|
RenderState.disableLighting()
|
||||||
|
|
||||||
|
renderer.setOverrideBlockTexture(Textures.RobotAssembler.iconTopOn)
|
||||||
|
renderer.setRenderBounds(0, 0, 0, 1, 1.05, 1)
|
||||||
|
BlockRenderer.renderFaceYPos(block, metadata, renderer)
|
||||||
|
|
||||||
|
renderer.setOverrideBlockTexture(Textures.RobotAssembler.iconSideOn)
|
||||||
|
renderer.setRenderBounds(-0.005, 0, 0, 1.005, 1, 1)
|
||||||
|
BlockRenderer.renderFaceXPos(block, metadata, renderer)
|
||||||
|
BlockRenderer.renderFaceXNeg(block, metadata, renderer)
|
||||||
|
renderer.setRenderBounds(0, 0, -0.005, 1, 1, 1.005)
|
||||||
|
BlockRenderer.renderFaceZPos(block, metadata, renderer)
|
||||||
|
BlockRenderer.renderFaceZNeg(block, metadata, renderer)
|
||||||
|
|
||||||
|
renderer.clearOverrideBlockTexture()
|
||||||
|
RenderState.enableLighting()
|
||||||
|
GL11.glPopAttrib()
|
||||||
|
}
|
||||||
|
}
|
@ -9,7 +9,6 @@ import li.cil.oc.common.tileentity
|
|||||||
import li.cil.oc.util.RenderState
|
import li.cil.oc.util.RenderState
|
||||||
import net.minecraft.block.Block
|
import net.minecraft.block.Block
|
||||||
import net.minecraft.client.renderer.{RenderBlocks, Tessellator}
|
import net.minecraft.client.renderer.{RenderBlocks, Tessellator}
|
||||||
import net.minecraft.util.AxisAlignedBB
|
|
||||||
import net.minecraft.world.IBlockAccess
|
import net.minecraft.world.IBlockAccess
|
||||||
import net.minecraftforge.common.ForgeDirection
|
import net.minecraftforge.common.ForgeDirection
|
||||||
import org.lwjgl.opengl.GL11
|
import org.lwjgl.opengl.GL11
|
||||||
@ -28,7 +27,7 @@ object BlockRenderer extends ISimpleBlockRenderingHandler {
|
|||||||
GL11.glScalef(1.6f, 1.6f, 1.6f)
|
GL11.glScalef(1.6f, 1.6f, 1.6f)
|
||||||
GL11.glTranslatef(-0.5f, -0.5f, -0.5f)
|
GL11.glTranslatef(-0.5f, -0.5f, -0.5f)
|
||||||
Tessellator.instance.startDrawingQuads()
|
Tessellator.instance.startDrawingQuads()
|
||||||
renderCable(block, metadata, renderer)
|
Cable.render(block, metadata, renderer)
|
||||||
Tessellator.instance.draw()
|
Tessellator.instance.draw()
|
||||||
|
|
||||||
RenderState.checkError(getClass.getName + ".renderInventoryBlock: cable")
|
RenderState.checkError(getClass.getName + ".renderInventoryBlock: cable")
|
||||||
@ -41,14 +40,14 @@ object BlockRenderer extends ISimpleBlockRenderingHandler {
|
|||||||
case Some(assembler: RobotAssembler) =>
|
case Some(assembler: RobotAssembler) =>
|
||||||
GL11.glTranslatef(-0.5f, -0.5f, -0.5f)
|
GL11.glTranslatef(-0.5f, -0.5f, -0.5f)
|
||||||
Tessellator.instance.startDrawingQuads()
|
Tessellator.instance.startDrawingQuads()
|
||||||
renderAssembler(block, metadata, renderer)
|
Assembler.render(block, metadata, renderer)
|
||||||
Tessellator.instance.draw()
|
Tessellator.instance.draw()
|
||||||
|
|
||||||
RenderState.checkError(getClass.getName + ".renderInventoryBlock: assembler")
|
RenderState.checkError(getClass.getName + ".renderInventoryBlock: assembler")
|
||||||
case Some(hologram: Hologram) =>
|
case Some(hologram: Hologram) =>
|
||||||
GL11.glTranslatef(-0.5f, -0.5f, -0.5f)
|
GL11.glTranslatef(-0.5f, -0.5f, -0.5f)
|
||||||
Tessellator.instance.startDrawingQuads()
|
Tessellator.instance.startDrawingQuads()
|
||||||
renderHologram(block, metadata, renderer)
|
Hologram.render(block, metadata, renderer)
|
||||||
Tessellator.instance.draw()
|
Tessellator.instance.draw()
|
||||||
|
|
||||||
RenderState.checkError(getClass.getName + ".renderInventoryBlock: hologram")
|
RenderState.checkError(getClass.getName + ".renderInventoryBlock: hologram")
|
||||||
@ -82,7 +81,7 @@ object BlockRenderer extends ISimpleBlockRenderingHandler {
|
|||||||
|
|
||||||
world.getBlockTileEntity(x, y, z) match {
|
world.getBlockTileEntity(x, y, z) match {
|
||||||
case cable: tileentity.Cable =>
|
case cable: tileentity.Cable =>
|
||||||
renderCable(Cable.neighbors(world, x, y, z), block, cable.getBlockMetadata, x, y, z, renderer)
|
Cable.render(world, x, y, z, block, renderer)
|
||||||
|
|
||||||
RenderState.checkError(getClass.getName + ".renderWorldBlock: cable")
|
RenderState.checkError(getClass.getName + ".renderWorldBlock: cable")
|
||||||
|
|
||||||
@ -172,13 +171,13 @@ object BlockRenderer extends ISimpleBlockRenderingHandler {
|
|||||||
|
|
||||||
true
|
true
|
||||||
case assembler: tileentity.RobotAssembler =>
|
case assembler: tileentity.RobotAssembler =>
|
||||||
renderAssembler(assembler.block, assembler.getBlockMetadata, x, y, z, renderer)
|
Assembler.render(assembler.block, assembler.getBlockMetadata, x, y, z, renderer)
|
||||||
|
|
||||||
RenderState.checkError(getClass.getName + ".renderWorldBlock: assembler")
|
RenderState.checkError(getClass.getName + ".renderWorldBlock: assembler")
|
||||||
|
|
||||||
true
|
true
|
||||||
case hologram: tileentity.Hologram =>
|
case hologram: tileentity.Hologram =>
|
||||||
renderHologram(hologram.block, hologram.getBlockMetadata, x, y, z, renderer)
|
Hologram.render(hologram.block, hologram.getBlockMetadata, x, y, z, renderer)
|
||||||
|
|
||||||
RenderState.checkError(getClass.getName + ".renderWorldBlock: hologram")
|
RenderState.checkError(getClass.getName + ".renderWorldBlock: hologram")
|
||||||
|
|
||||||
@ -192,258 +191,32 @@ object BlockRenderer extends ISimpleBlockRenderingHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
def renderAssembler(block: Block, metadata: Int, x: Int, y: Int, z: Int, renderer: RenderBlocks) {
|
def renderFaceXPos(block: Block, metadata: Int, renderer: RenderBlocks) {
|
||||||
val previousRenderAllFaces = renderer.renderAllFaces
|
|
||||||
renderer.renderAllFaces = true
|
|
||||||
|
|
||||||
// Bottom.
|
|
||||||
renderer.setRenderBounds(0, 0, 0, 1, 7 / 16f, 1)
|
|
||||||
renderer.renderStandardBlock(block, x, y, z)
|
|
||||||
// Middle.
|
|
||||||
renderer.setRenderBounds(2 / 16f, 7 / 16f, 2 / 16f, 14 / 16f, 9 / 16f, 14 / 16f)
|
|
||||||
renderer.renderStandardBlock(block, x, y, z)
|
|
||||||
// Top.
|
|
||||||
renderer.setRenderBounds(0, 9 / 16f, 0, 1, 1, 1)
|
|
||||||
renderer.renderStandardBlock(block, x, y, z)
|
|
||||||
|
|
||||||
renderer.renderAllFaces = previousRenderAllFaces
|
|
||||||
}
|
|
||||||
|
|
||||||
def renderAssembler(block: Block, metadata: Int, renderer: RenderBlocks) {
|
|
||||||
// Bottom.
|
|
||||||
renderer.setRenderBounds(0, 0, 0, 1, 7 / 16f, 1)
|
|
||||||
renderFaceYPos(block, metadata, renderer)
|
|
||||||
renderFaceYNeg(block, metadata, renderer)
|
|
||||||
renderFaceXPos(block, metadata, renderer)
|
|
||||||
renderFaceXNeg(block, metadata, renderer)
|
|
||||||
renderFaceZPos(block, metadata, renderer)
|
|
||||||
renderFaceZNeg(block, metadata, renderer)
|
|
||||||
|
|
||||||
// Middle.
|
|
||||||
val previousRenderAllFaces = renderer.renderAllFaces
|
|
||||||
renderer.renderAllFaces = true
|
|
||||||
renderer.setRenderBounds(2 / 16f, 7 / 16f, 2 / 16f, 14 / 16f, 9 / 16f, 14 / 16f)
|
|
||||||
renderFaceXPos(block, metadata, renderer)
|
|
||||||
renderFaceXNeg(block, metadata, renderer)
|
|
||||||
renderFaceZPos(block, metadata, renderer)
|
|
||||||
renderFaceZNeg(block, metadata, renderer)
|
|
||||||
renderer.renderAllFaces = previousRenderAllFaces
|
|
||||||
|
|
||||||
// Top.
|
|
||||||
renderer.setRenderBounds(0, 9 / 16f, 0, 1, 1, 1)
|
|
||||||
renderFaceYPos(block, metadata, renderer)
|
|
||||||
renderFaceYNeg(block, metadata, renderer)
|
|
||||||
renderFaceXPos(block, metadata, renderer)
|
|
||||||
renderFaceXNeg(block, metadata, renderer)
|
|
||||||
renderFaceZPos(block, metadata, renderer)
|
|
||||||
renderFaceZNeg(block, metadata, renderer)
|
|
||||||
|
|
||||||
GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS)
|
|
||||||
RenderState.makeItBlend()
|
|
||||||
RenderState.disableLighting()
|
|
||||||
|
|
||||||
renderer.setOverrideBlockTexture(Textures.RobotAssembler.iconTopOn)
|
|
||||||
renderer.setRenderBounds(0, 0, 0, 1, 1.05, 1)
|
|
||||||
renderFaceYPos(block, metadata, renderer)
|
|
||||||
|
|
||||||
renderer.setOverrideBlockTexture(Textures.RobotAssembler.iconSideOn)
|
|
||||||
renderer.setRenderBounds(-0.005, 0, 0, 1.005, 1, 1)
|
|
||||||
renderFaceXPos(block, metadata, renderer)
|
|
||||||
renderFaceXNeg(block, metadata, renderer)
|
|
||||||
renderer.setRenderBounds(0, 0, -0.005, 1, 1, 1.005)
|
|
||||||
renderFaceZPos(block, metadata, renderer)
|
|
||||||
renderFaceZNeg(block, metadata, renderer)
|
|
||||||
|
|
||||||
renderer.clearOverrideBlockTexture()
|
|
||||||
RenderState.enableLighting()
|
|
||||||
GL11.glPopAttrib()
|
|
||||||
}
|
|
||||||
|
|
||||||
def renderCable(mask: Int, block: Block, metadata: Int, x: Int, y: Int, z: Int, renderer: RenderBlocks) {
|
|
||||||
// Center part.
|
|
||||||
val bounds = AxisAlignedBB.getBoundingBox(-0.125, -0.125, -0.125, 0.125, 0.125, 0.125)
|
|
||||||
bounds.offset(0.5, 0.5, 0.5)
|
|
||||||
renderer.setRenderBounds(bounds.minX, bounds.minY, bounds.minZ, bounds.maxX, bounds.maxY, bounds.maxZ)
|
|
||||||
renderer.renderStandardBlock(block, x, y, z)
|
|
||||||
|
|
||||||
// Connections.
|
|
||||||
def renderPart(side: ForgeDirection, boundSetter: () => Unit) {
|
|
||||||
bounds.setBounds(-0.125, -0.125, -0.125, 0.125, 0.125, 0.125)
|
|
||||||
bounds.offset(side.offsetX * 0.25, side.offsetY * 0.25, side.offsetZ * 0.25)
|
|
||||||
boundSetter()
|
|
||||||
bounds.offset(0.5, 0.5, 0.5)
|
|
||||||
renderer.setRenderBounds(bounds.minX, bounds.minY, bounds.minZ, bounds.maxX, bounds.maxY, bounds.maxZ)
|
|
||||||
renderer.renderStandardBlock(block, x, y, z)
|
|
||||||
}
|
|
||||||
for (side <- ForgeDirection.VALID_DIRECTIONS) {
|
|
||||||
if ((side.flag & mask) != 0) {
|
|
||||||
renderPart(side, () => {
|
|
||||||
bounds.minX = math.min(bounds.minX, side.offsetX * 0.5)
|
|
||||||
bounds.maxX = math.max(bounds.maxX, side.offsetX * 0.5)
|
|
||||||
bounds.minY = math.min(bounds.minY, side.offsetY * 0.5)
|
|
||||||
bounds.maxY = math.max(bounds.maxY, side.offsetY * 0.5)
|
|
||||||
bounds.minZ = math.min(bounds.minZ, side.offsetZ * 0.5)
|
|
||||||
bounds.maxZ = math.max(bounds.maxZ, side.offsetZ * 0.5)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
if ((side.getOpposite.flag & mask) == mask || mask == 0) {
|
|
||||||
renderer.overrideBlockTexture = Textures.Cable.iconCap
|
|
||||||
renderPart(side, () => {
|
|
||||||
bounds.minX = math.max(bounds.minX, -(0.125 + 1 / 16f))
|
|
||||||
bounds.maxX = math.min(bounds.maxX, 0.125 + 1 / 16f)
|
|
||||||
bounds.minY = math.max(bounds.minY, -(0.125 + 1 / 16f))
|
|
||||||
bounds.maxY = math.min(bounds.maxY, 0.125 + 1 / 16f)
|
|
||||||
bounds.minZ = math.max(bounds.minZ, -(0.125 + 1 / 16f))
|
|
||||||
bounds.maxZ = math.min(bounds.maxZ, 0.125 + 1 / 16f)
|
|
||||||
})
|
|
||||||
renderer.clearOverrideBlockTexture()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
def renderCable(block: Block, metadata: Int, renderer: RenderBlocks) {
|
|
||||||
val previousRenderAllFaces = renderer.renderAllFaces
|
|
||||||
renderer.renderAllFaces = true
|
|
||||||
|
|
||||||
renderer.setRenderBounds(0.375, 3 / 16f, 0.375, 0.625, 13 / 16f, 0.625)
|
|
||||||
renderFaceXNeg(block, metadata, renderer)
|
|
||||||
renderFaceXPos(block, metadata, renderer)
|
|
||||||
renderFaceZNeg(block, metadata, renderer)
|
|
||||||
renderFaceZPos(block, metadata, renderer)
|
|
||||||
|
|
||||||
renderer.overrideBlockTexture = Textures.Cable.iconCap
|
|
||||||
renderer.setRenderBounds(0.375, 2 / 16f, 0.375, 0.625, 3 / 16f, 0.625)
|
|
||||||
renderFaceYNeg(block, metadata, renderer)
|
|
||||||
renderFaceXNeg(block, metadata, renderer)
|
|
||||||
renderFaceXPos(block, metadata, renderer)
|
|
||||||
renderFaceZNeg(block, metadata, renderer)
|
|
||||||
renderFaceZPos(block, metadata, renderer)
|
|
||||||
renderer.setRenderBounds(0.375, 13 / 16f, 0.375, 0.625, 14 / 16f, 0.625)
|
|
||||||
renderFaceYPos(block, metadata, renderer)
|
|
||||||
renderFaceXNeg(block, metadata, renderer)
|
|
||||||
renderFaceXPos(block, metadata, renderer)
|
|
||||||
renderFaceZNeg(block, metadata, renderer)
|
|
||||||
renderFaceZPos(block, metadata, renderer)
|
|
||||||
renderer.clearOverrideBlockTexture()
|
|
||||||
|
|
||||||
renderer.renderAllFaces = previousRenderAllFaces
|
|
||||||
}
|
|
||||||
|
|
||||||
def renderHologram(block: Block, metadata: Int, x: Int, y: Int, z: Int, renderer: RenderBlocks) {
|
|
||||||
// Center.
|
|
||||||
renderer.setRenderBounds(4 / 16f, 0, 4 / 16f, 12 / 16f, 3 / 16f, 12 / 16f)
|
|
||||||
renderer.renderStandardBlock(block, x, y, z)
|
|
||||||
|
|
||||||
val previousRenderAllFaces = renderer.renderAllFaces
|
|
||||||
renderer.renderAllFaces = true
|
|
||||||
|
|
||||||
// Walls.
|
|
||||||
renderer.setRenderBounds(0, 0, 0, 2 / 16f, 7 / 16f, 1)
|
|
||||||
renderer.renderStandardBlock(block, x, y, z)
|
|
||||||
|
|
||||||
renderer.setRenderBounds(14 / 16f, 0, 0, 1, 7 / 16f, 1)
|
|
||||||
renderer.renderStandardBlock(block, x, y, z)
|
|
||||||
|
|
||||||
renderer.setRenderBounds(2 / 16f, 0, 0, 14 / 16f, 7 / 16f, 2 / 16f)
|
|
||||||
renderer.renderStandardBlock(block, x, y, z)
|
|
||||||
|
|
||||||
renderer.setRenderBounds(2 / 16f, 0, 14 / 16f, 14 / 16f, 7 / 16f, 1)
|
|
||||||
renderer.renderStandardBlock(block, x, y, z)
|
|
||||||
|
|
||||||
// Inner.
|
|
||||||
renderer.setRenderBounds(2 / 16f, 3 / 16f, 2 / 16f, 4 / 16f, 5 / 16f, 14 / 16f)
|
|
||||||
renderer.renderStandardBlock(block, x, y, z)
|
|
||||||
|
|
||||||
renderer.setRenderBounds(12 / 16f, 3 / 16f, 2 / 16f, 14 / 16f, 5 / 16f, 14 / 16f)
|
|
||||||
renderer.renderStandardBlock(block, x, y, z)
|
|
||||||
|
|
||||||
renderer.setRenderBounds(4 / 16f, 3 / 16f, 2 / 16f, 12 / 16f, 5 / 16f, 4 / 16f)
|
|
||||||
renderer.renderStandardBlock(block, x, y, z)
|
|
||||||
|
|
||||||
renderer.setRenderBounds(4 / 16f, 3 / 16f, 12 / 16f, 12 / 16f, 5 / 16f, 14 / 16f)
|
|
||||||
renderer.renderStandardBlock(block, x, y, z)
|
|
||||||
|
|
||||||
renderer.renderAllFaces = previousRenderAllFaces
|
|
||||||
}
|
|
||||||
|
|
||||||
def renderHologram(block: Block, metadata: Int, renderer: RenderBlocks) {
|
|
||||||
val previousRenderAllFaces = renderer.renderAllFaces
|
|
||||||
renderer.renderAllFaces = true
|
|
||||||
|
|
||||||
// Base and walls.
|
|
||||||
renderer.setRenderBounds(4 / 16f, 0, 4 / 16f, 12 / 16f, 3 / 16f, 12 / 16f)
|
|
||||||
renderFaceYPos(block, metadata, renderer)
|
|
||||||
|
|
||||||
renderer.setRenderBounds(0, 0, 0, 1, 7 / 16f, 1)
|
|
||||||
renderFaceYNeg(block, metadata, renderer)
|
|
||||||
renderFaceXPos(block, metadata, renderer)
|
|
||||||
renderFaceXNeg(block, metadata, renderer)
|
|
||||||
renderFaceZPos(block, metadata, renderer)
|
|
||||||
renderFaceZNeg(block, metadata, renderer)
|
|
||||||
|
|
||||||
// Layer 1.
|
|
||||||
renderer.setRenderBounds(2 / 16f, 3 / 16f, 2 / 16f, 4 / 16f, 5 / 16f, 14 / 16f)
|
|
||||||
renderFaceYPos(block, metadata, renderer)
|
|
||||||
renderFaceXPos(block, metadata, renderer)
|
|
||||||
|
|
||||||
renderer.setRenderBounds(12 / 16f, 3 / 16f, 2 / 16f, 14 / 16f, 5 / 16f, 14 / 16f)
|
|
||||||
renderFaceYPos(block, metadata, renderer)
|
|
||||||
renderFaceXNeg(block, metadata, renderer)
|
|
||||||
|
|
||||||
renderer.setRenderBounds(4 / 16f, 3 / 16f, 2 / 16f, 12 / 16f, 5 / 16f, 4 / 16f)
|
|
||||||
renderFaceYPos(block, metadata, renderer)
|
|
||||||
renderFaceZPos(block, metadata, renderer)
|
|
||||||
|
|
||||||
renderer.setRenderBounds(4 / 16f, 3 / 16f, 12 / 16f, 12 / 16f, 5 / 16f, 14 / 16f)
|
|
||||||
renderFaceYPos(block, metadata, renderer)
|
|
||||||
renderFaceZNeg(block, metadata, renderer)
|
|
||||||
|
|
||||||
// Layer 2.
|
|
||||||
renderer.setRenderBounds(0, 3 / 16f, 0, 2 / 16f, 7 / 16f, 1)
|
|
||||||
renderFaceYPos(block, metadata, renderer)
|
|
||||||
renderFaceXPos(block, metadata, renderer)
|
|
||||||
|
|
||||||
renderer.setRenderBounds(14 / 16f, 3 / 16f, 0, 1, 7 / 16f, 1)
|
|
||||||
renderFaceYPos(block, metadata, renderer)
|
|
||||||
renderFaceXNeg(block, metadata, renderer)
|
|
||||||
|
|
||||||
renderer.setRenderBounds(2 / 16f, 3 / 16f, 0, 14 / 16f, 7 / 16f, 2 / 16f)
|
|
||||||
renderFaceYPos(block, metadata, renderer)
|
|
||||||
renderFaceZPos(block, metadata, renderer)
|
|
||||||
|
|
||||||
renderer.setRenderBounds(2 / 16f, 3 / 16f, 14 / 16f, 14 / 16f, 7 / 16f, 1)
|
|
||||||
renderFaceYPos(block, metadata, renderer)
|
|
||||||
renderFaceZNeg(block, metadata, renderer)
|
|
||||||
|
|
||||||
renderer.renderAllFaces = previousRenderAllFaces
|
|
||||||
}
|
|
||||||
|
|
||||||
protected def renderFaceXPos(block: Block, metadata: Int, renderer: RenderBlocks) {
|
|
||||||
Tessellator.instance.setNormal(1, 0, 0)
|
Tessellator.instance.setNormal(1, 0, 0)
|
||||||
renderer.renderFaceXPos(block, 0, 0, 0, renderer.getBlockIconFromSideAndMetadata(block, ForgeDirection.EAST.ordinal, metadata))
|
renderer.renderFaceXPos(block, 0, 0, 0, renderer.getBlockIconFromSideAndMetadata(block, ForgeDirection.EAST.ordinal, metadata))
|
||||||
}
|
}
|
||||||
|
|
||||||
protected def renderFaceXNeg(block: Block, metadata: Int, renderer: RenderBlocks) {
|
def renderFaceXNeg(block: Block, metadata: Int, renderer: RenderBlocks) {
|
||||||
Tessellator.instance.setNormal(-1, 0, 0)
|
Tessellator.instance.setNormal(-1, 0, 0)
|
||||||
renderer.renderFaceXNeg(block, 0, 0, 0, renderer.getBlockIconFromSideAndMetadata(block, ForgeDirection.WEST.ordinal, metadata))
|
renderer.renderFaceXNeg(block, 0, 0, 0, renderer.getBlockIconFromSideAndMetadata(block, ForgeDirection.WEST.ordinal, metadata))
|
||||||
}
|
}
|
||||||
|
|
||||||
protected def renderFaceYPos(block: Block, metadata: Int, renderer: RenderBlocks) {
|
def renderFaceYPos(block: Block, metadata: Int, renderer: RenderBlocks) {
|
||||||
Tessellator.instance.setNormal(0, 1, 0)
|
Tessellator.instance.setNormal(0, 1, 0)
|
||||||
renderer.renderFaceYPos(block, 0, 0, 0, renderer.getBlockIconFromSideAndMetadata(block, ForgeDirection.UP.ordinal, metadata))
|
renderer.renderFaceYPos(block, 0, 0, 0, renderer.getBlockIconFromSideAndMetadata(block, ForgeDirection.UP.ordinal, metadata))
|
||||||
}
|
}
|
||||||
|
|
||||||
protected def renderFaceYNeg(block: Block, metadata: Int, renderer: RenderBlocks) {
|
def renderFaceYNeg(block: Block, metadata: Int, renderer: RenderBlocks) {
|
||||||
Tessellator.instance.setNormal(0, -1, 0)
|
Tessellator.instance.setNormal(0, -1, 0)
|
||||||
renderer.renderFaceYNeg(block, 0, 0, 0, renderer.getBlockIconFromSideAndMetadata(block, ForgeDirection.DOWN.ordinal, metadata))
|
renderer.renderFaceYNeg(block, 0, 0, 0, renderer.getBlockIconFromSideAndMetadata(block, ForgeDirection.DOWN.ordinal, metadata))
|
||||||
}
|
}
|
||||||
|
|
||||||
protected def renderFaceZPos(block: Block, metadata: Int, renderer: RenderBlocks) {
|
def renderFaceZPos(block: Block, metadata: Int, renderer: RenderBlocks) {
|
||||||
Tessellator.instance.setNormal(0, 0, 1)
|
Tessellator.instance.setNormal(0, 0, 1)
|
||||||
renderer.renderFaceZPos(block, 0, 0, 0, renderer.getBlockIconFromSideAndMetadata(block, ForgeDirection.SOUTH.ordinal, metadata))
|
renderer.renderFaceZPos(block, 0, 0, 0, renderer.getBlockIconFromSideAndMetadata(block, ForgeDirection.SOUTH.ordinal, metadata))
|
||||||
}
|
}
|
||||||
|
|
||||||
protected def renderFaceZNeg(block: Block, metadata: Int, renderer: RenderBlocks) {
|
def renderFaceZNeg(block: Block, metadata: Int, renderer: RenderBlocks) {
|
||||||
Tessellator.instance.setNormal(0, 0, -1)
|
Tessellator.instance.setNormal(0, 0, -1)
|
||||||
renderer.renderFaceZNeg(block, 0, 0, 0, renderer.getBlockIconFromSideAndMetadata(block, ForgeDirection.NORTH.ordinal, metadata))
|
renderer.renderFaceZNeg(block, 0, 0, 0, renderer.getBlockIconFromSideAndMetadata(block, ForgeDirection.NORTH.ordinal, metadata))
|
||||||
}
|
}
|
||||||
|
127
src/main/scala/li/cil/oc/client/renderer/block/Cable.scala
Normal file
127
src/main/scala/li/cil/oc/client/renderer/block/Cable.scala
Normal file
@ -0,0 +1,127 @@
|
|||||||
|
package li.cil.oc.client.renderer.block
|
||||||
|
|
||||||
|
import codechicken.multipart.TileMultipart
|
||||||
|
import li.cil.oc.client.Textures
|
||||||
|
import li.cil.oc.common
|
||||||
|
import li.cil.oc.util.mods.Mods
|
||||||
|
import net.minecraft.block.Block
|
||||||
|
import net.minecraft.client.renderer.RenderBlocks
|
||||||
|
import net.minecraft.tileentity.TileEntity
|
||||||
|
import net.minecraft.util.AxisAlignedBB
|
||||||
|
import net.minecraft.world.IBlockAccess
|
||||||
|
import net.minecraftforge.common.ForgeDirection
|
||||||
|
|
||||||
|
object Cable {
|
||||||
|
private val baseSize = 4.0 / 16.0 / 2.0
|
||||||
|
|
||||||
|
private val plugSize = 6.0 / 16.0 / 2.0 - 10e-5
|
||||||
|
|
||||||
|
def render(world: IBlockAccess, x: Int, y: Int, z: Int, block: Block, renderer: RenderBlocks) {
|
||||||
|
// Center part.
|
||||||
|
val bounds = AxisAlignedBB.getBoundingBox(-baseSize, -baseSize, -baseSize, baseSize, baseSize, baseSize)
|
||||||
|
bounds.offset(0.5, 0.5, 0.5)
|
||||||
|
renderer.setRenderBounds(bounds.minX, bounds.minY, bounds.minZ, bounds.maxX, bounds.maxY, bounds.maxZ)
|
||||||
|
renderer.renderStandardBlock(block, x, y, z)
|
||||||
|
|
||||||
|
// Connections.
|
||||||
|
def renderPart(side: ForgeDirection, size: Double, boundSetter: (AxisAlignedBB, ForgeDirection) => Unit) {
|
||||||
|
bounds.setBounds(-size, -size, -size, size, size, size)
|
||||||
|
bounds.offset(side.offsetX * 0.25, side.offsetY * 0.25, side.offsetZ * 0.25)
|
||||||
|
boundSetter(bounds, side)
|
||||||
|
bounds.offset(0.5, 0.5, 0.5)
|
||||||
|
renderer.setRenderBounds(bounds.minX, bounds.minY, bounds.minZ, bounds.maxX, bounds.maxY, bounds.maxZ)
|
||||||
|
renderer.partialRenderBounds = false
|
||||||
|
renderer.renderStandardBlock(block, x, y, z)
|
||||||
|
}
|
||||||
|
|
||||||
|
val mask = common.block.Cable.neighbors(world, x, y, z)
|
||||||
|
for (side <- ForgeDirection.VALID_DIRECTIONS) {
|
||||||
|
if ((side.flag & mask) != 0) {
|
||||||
|
renderPart(side, baseSize, setConnectedBounds)
|
||||||
|
}
|
||||||
|
renderer.overrideBlockTexture = Textures.Cable.iconCap
|
||||||
|
if ((side.flag & mask) != 0 && !isCable(world, x + side.offsetX, y + side.offsetY, z + side.offsetZ)) {
|
||||||
|
utilForTrickingTheRendererIntoUsingUnclampedTextureCoordinates(renderer, 1)
|
||||||
|
renderPart(side, plugSize, setPlugBounds)
|
||||||
|
utilForTrickingTheRendererIntoUsingUnclampedTextureCoordinates(renderer, 0)
|
||||||
|
}
|
||||||
|
else if ((side.getOpposite.flag & mask) == mask || mask == 0) {
|
||||||
|
renderPart(side, baseSize, setUnconnectedBounds)
|
||||||
|
}
|
||||||
|
renderer.clearOverrideBlockTexture()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
def render(block: Block, metadata: Int, renderer: RenderBlocks) {
|
||||||
|
val previousRenderAllFaces = renderer.renderAllFaces
|
||||||
|
renderer.renderAllFaces = true
|
||||||
|
|
||||||
|
renderer.setRenderBounds(0.375, 3 / 16f, 0.375, 0.625, 13 / 16f, 0.625)
|
||||||
|
BlockRenderer.renderFaceXNeg(block, metadata, renderer)
|
||||||
|
BlockRenderer.renderFaceXPos(block, metadata, renderer)
|
||||||
|
BlockRenderer.renderFaceZNeg(block, metadata, renderer)
|
||||||
|
BlockRenderer.renderFaceZPos(block, metadata, renderer)
|
||||||
|
|
||||||
|
renderer.overrideBlockTexture = Textures.Cable.iconCap
|
||||||
|
renderer.setRenderBounds(0.375, 2 / 16f, 0.375, 0.625, 3 / 16f, 0.625)
|
||||||
|
BlockRenderer.renderFaceYNeg(block, metadata, renderer)
|
||||||
|
BlockRenderer.renderFaceXNeg(block, metadata, renderer)
|
||||||
|
BlockRenderer.renderFaceXPos(block, metadata, renderer)
|
||||||
|
BlockRenderer.renderFaceZNeg(block, metadata, renderer)
|
||||||
|
BlockRenderer.renderFaceZPos(block, metadata, renderer)
|
||||||
|
renderer.setRenderBounds(0.375, 13 / 16f, 0.375, 0.625, 14 / 16f, 0.625)
|
||||||
|
BlockRenderer.renderFaceYPos(block, metadata, renderer)
|
||||||
|
BlockRenderer.renderFaceXNeg(block, metadata, renderer)
|
||||||
|
BlockRenderer.renderFaceXPos(block, metadata, renderer)
|
||||||
|
BlockRenderer.renderFaceZNeg(block, metadata, renderer)
|
||||||
|
BlockRenderer.renderFaceZPos(block, metadata, renderer)
|
||||||
|
renderer.clearOverrideBlockTexture()
|
||||||
|
|
||||||
|
renderer.renderAllFaces = previousRenderAllFaces
|
||||||
|
}
|
||||||
|
|
||||||
|
private def isCable(world: IBlockAccess, x: Int, y: Int, z: Int) = {
|
||||||
|
val tileEntity = world.getBlockTileEntity(x, y, z)
|
||||||
|
tileEntity.isInstanceOf[common.tileentity.Cable] || (Mods.ForgeMultipart.isAvailable && isCableFMP(tileEntity))
|
||||||
|
}
|
||||||
|
|
||||||
|
private def isCableFMP(tileEntity: TileEntity) = {
|
||||||
|
tileEntity.isInstanceOf[TileMultipart]
|
||||||
|
}
|
||||||
|
|
||||||
|
private def utilForTrickingTheRendererIntoUsingUnclampedTextureCoordinates(renderer: RenderBlocks, value: Int) {
|
||||||
|
renderer.uvRotateBottom = value
|
||||||
|
renderer.uvRotateEast = value
|
||||||
|
renderer.uvRotateNorth = value
|
||||||
|
renderer.uvRotateSouth = value
|
||||||
|
renderer.uvRotateTop = value
|
||||||
|
renderer.uvRotateWest = value
|
||||||
|
}
|
||||||
|
|
||||||
|
private def setConnectedBounds(bounds: AxisAlignedBB, side: ForgeDirection) {
|
||||||
|
bounds.minX = math.min(bounds.minX, side.offsetX * 0.5)
|
||||||
|
bounds.maxX = math.max(bounds.maxX, side.offsetX * 0.5)
|
||||||
|
bounds.minY = math.min(bounds.minY, side.offsetY * 0.5)
|
||||||
|
bounds.maxY = math.max(bounds.maxY, side.offsetY * 0.5)
|
||||||
|
bounds.minZ = math.min(bounds.minZ, side.offsetZ * 0.5)
|
||||||
|
bounds.maxZ = math.max(bounds.maxZ, side.offsetZ * 0.5)
|
||||||
|
}
|
||||||
|
|
||||||
|
private def setPlugBounds(bounds: AxisAlignedBB, side: ForgeDirection) {
|
||||||
|
bounds.minX = math.max(math.min(bounds.minX + side.offsetX * 10.0 / 16.0, 7.0 / 16.0), -0.5 - 10e-5)
|
||||||
|
bounds.maxX = math.min(math.max(bounds.maxX + side.offsetX * 10.0 / 16.0, -7.0 / 16.0), 0.5 + 10e-5)
|
||||||
|
bounds.minY = math.max(math.min(bounds.minY + side.offsetY * 10.0 / 16.0, 7.0 / 16.0), -0.5 - 10e-5)
|
||||||
|
bounds.maxY = math.min(math.max(bounds.maxY + side.offsetY * 10.0 / 16.0, -7.0 / 16.0), 0.5 + 10e-5)
|
||||||
|
bounds.minZ = math.max(math.min(bounds.minZ + side.offsetZ * 10.0 / 16.0, 7.0 / 16.0), -0.5 - 10e-5)
|
||||||
|
bounds.maxZ = math.min(math.max(bounds.maxZ + side.offsetZ * 10.0 / 16.0, -7.0 / 16.0), 0.5 + 10e-5)
|
||||||
|
}
|
||||||
|
|
||||||
|
private def setUnconnectedBounds(bounds: AxisAlignedBB, side: ForgeDirection) {
|
||||||
|
bounds.minX = math.max(bounds.minX, -plugSize)
|
||||||
|
bounds.maxX = math.min(bounds.maxX, plugSize)
|
||||||
|
bounds.minY = math.max(bounds.minY, -plugSize)
|
||||||
|
bounds.maxY = math.min(bounds.maxY, plugSize)
|
||||||
|
bounds.minZ = math.max(bounds.minZ, -plugSize)
|
||||||
|
bounds.maxZ = math.min(bounds.maxZ, plugSize)
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,95 @@
|
|||||||
|
package li.cil.oc.client.renderer.block
|
||||||
|
|
||||||
|
import net.minecraft.block.Block
|
||||||
|
import net.minecraft.client.renderer.RenderBlocks
|
||||||
|
|
||||||
|
object Hologram {
|
||||||
|
def render(block: Block, metadata: Int, x: Int, y: Int, z: Int, renderer: RenderBlocks) {
|
||||||
|
// Center.
|
||||||
|
renderer.setRenderBounds(4 / 16f, 0, 4 / 16f, 12 / 16f, 3 / 16f, 12 / 16f)
|
||||||
|
renderer.renderStandardBlock(block, x, y, z)
|
||||||
|
|
||||||
|
val previousRenderAllFaces = renderer.renderAllFaces
|
||||||
|
renderer.renderAllFaces = true
|
||||||
|
|
||||||
|
// Walls.
|
||||||
|
renderer.setRenderBounds(0, 0, 0, 2 / 16f, 7 / 16f, 1)
|
||||||
|
renderer.renderStandardBlock(block, x, y, z)
|
||||||
|
|
||||||
|
renderer.setRenderBounds(14 / 16f, 0, 0, 1, 7 / 16f, 1)
|
||||||
|
renderer.renderStandardBlock(block, x, y, z)
|
||||||
|
|
||||||
|
renderer.setRenderBounds(2 / 16f, 0, 0, 14 / 16f, 7 / 16f, 2 / 16f)
|
||||||
|
renderer.renderStandardBlock(block, x, y, z)
|
||||||
|
|
||||||
|
renderer.setRenderBounds(2 / 16f, 0, 14 / 16f, 14 / 16f, 7 / 16f, 1)
|
||||||
|
renderer.renderStandardBlock(block, x, y, z)
|
||||||
|
|
||||||
|
// Inner.
|
||||||
|
renderer.setRenderBounds(2 / 16f, 2 / 16f, 2 / 16f, 4 / 16f, 5 / 16f, 14 / 16f)
|
||||||
|
renderer.renderStandardBlock(block, x, y, z)
|
||||||
|
|
||||||
|
renderer.setRenderBounds(12 / 16f, 2 / 16f, 2 / 16f, 14 / 16f, 5 / 16f, 14 / 16f)
|
||||||
|
renderer.renderStandardBlock(block, x, y, z)
|
||||||
|
|
||||||
|
renderer.setRenderBounds(4 / 16f, 2 / 16f, 2 / 16f, 12 / 16f, 5 / 16f, 4 / 16f)
|
||||||
|
renderer.renderStandardBlock(block, x, y, z)
|
||||||
|
|
||||||
|
renderer.setRenderBounds(4 / 16f, 2 / 16f, 12 / 16f, 12 / 16f, 5 / 16f, 14 / 16f)
|
||||||
|
renderer.renderStandardBlock(block, x, y, z)
|
||||||
|
|
||||||
|
renderer.renderAllFaces = previousRenderAllFaces
|
||||||
|
}
|
||||||
|
|
||||||
|
def render(block: Block, metadata: Int, renderer: RenderBlocks) {
|
||||||
|
val previousRenderAllFaces = renderer.renderAllFaces
|
||||||
|
renderer.renderAllFaces = true
|
||||||
|
|
||||||
|
// Base and walls.
|
||||||
|
renderer.setRenderBounds(4 / 16f, 0, 4 / 16f, 12 / 16f, 3 / 16f, 12 / 16f)
|
||||||
|
BlockRenderer.renderFaceYPos(block, metadata, renderer)
|
||||||
|
|
||||||
|
renderer.setRenderBounds(0, 0, 0, 1, 7 / 16f, 1)
|
||||||
|
BlockRenderer.renderFaceYNeg(block, metadata, renderer)
|
||||||
|
BlockRenderer.renderFaceXPos(block, metadata, renderer)
|
||||||
|
BlockRenderer.renderFaceXNeg(block, metadata, renderer)
|
||||||
|
BlockRenderer.renderFaceZPos(block, metadata, renderer)
|
||||||
|
BlockRenderer.renderFaceZNeg(block, metadata, renderer)
|
||||||
|
|
||||||
|
// Layer 1.
|
||||||
|
renderer.setRenderBounds(2 / 16f, 3 / 16f, 2 / 16f, 4 / 16f, 5 / 16f, 14 / 16f)
|
||||||
|
BlockRenderer.renderFaceYPos(block, metadata, renderer)
|
||||||
|
BlockRenderer.renderFaceXPos(block, metadata, renderer)
|
||||||
|
|
||||||
|
renderer.setRenderBounds(12 / 16f, 3 / 16f, 2 / 16f, 14 / 16f, 5 / 16f, 14 / 16f)
|
||||||
|
BlockRenderer.renderFaceYPos(block, metadata, renderer)
|
||||||
|
BlockRenderer.renderFaceXNeg(block, metadata, renderer)
|
||||||
|
|
||||||
|
renderer.setRenderBounds(4 / 16f, 3 / 16f, 2 / 16f, 12 / 16f, 5 / 16f, 4 / 16f)
|
||||||
|
BlockRenderer.renderFaceYPos(block, metadata, renderer)
|
||||||
|
BlockRenderer.renderFaceZPos(block, metadata, renderer)
|
||||||
|
|
||||||
|
renderer.setRenderBounds(4 / 16f, 3 / 16f, 12 / 16f, 12 / 16f, 5 / 16f, 14 / 16f)
|
||||||
|
BlockRenderer.renderFaceYPos(block, metadata, renderer)
|
||||||
|
BlockRenderer.renderFaceZNeg(block, metadata, renderer)
|
||||||
|
|
||||||
|
// Layer 2.
|
||||||
|
renderer.setRenderBounds(0, 3 / 16f, 0, 2 / 16f, 7 / 16f, 1)
|
||||||
|
BlockRenderer.renderFaceYPos(block, metadata, renderer)
|
||||||
|
BlockRenderer.renderFaceXPos(block, metadata, renderer)
|
||||||
|
|
||||||
|
renderer.setRenderBounds(14 / 16f, 3 / 16f, 0, 1, 7 / 16f, 1)
|
||||||
|
BlockRenderer.renderFaceYPos(block, metadata, renderer)
|
||||||
|
BlockRenderer.renderFaceXNeg(block, metadata, renderer)
|
||||||
|
|
||||||
|
renderer.setRenderBounds(2 / 16f, 3 / 16f, 0, 14 / 16f, 7 / 16f, 2 / 16f)
|
||||||
|
BlockRenderer.renderFaceYPos(block, metadata, renderer)
|
||||||
|
BlockRenderer.renderFaceZPos(block, metadata, renderer)
|
||||||
|
|
||||||
|
renderer.setRenderBounds(2 / 16f, 3 / 16f, 14 / 16f, 14 / 16f, 7 / 16f, 1)
|
||||||
|
BlockRenderer.renderFaceYPos(block, metadata, renderer)
|
||||||
|
BlockRenderer.renderFaceZNeg(block, metadata, renderer)
|
||||||
|
|
||||||
|
renderer.renderAllFaces = previousRenderAllFaces
|
||||||
|
}
|
||||||
|
}
|
@ -2,6 +2,7 @@ package li.cil.oc.client.renderer.font
|
|||||||
|
|
||||||
import java.util.logging.Level
|
import java.util.logging.Level
|
||||||
|
|
||||||
|
import com.google.common.base.Charsets
|
||||||
import li.cil.oc.client.Textures
|
import li.cil.oc.client.Textures
|
||||||
import li.cil.oc.{OpenComputers, Settings}
|
import li.cil.oc.{OpenComputers, Settings}
|
||||||
import net.minecraft.client.Minecraft
|
import net.minecraft.client.Minecraft
|
||||||
@ -16,7 +17,7 @@ import scala.io.Source
|
|||||||
*/
|
*/
|
||||||
class StaticFontRenderer extends TextureFontRenderer {
|
class StaticFontRenderer extends TextureFontRenderer {
|
||||||
protected val (chars, charWidth, charHeight) = try {
|
protected val (chars, charWidth, charHeight) = try {
|
||||||
val lines = Source.fromInputStream(Minecraft.getMinecraft.getResourceManager.getResource(new ResourceLocation(Settings.resourceDomain, "textures/font/chars.txt")).getInputStream)("UTF-8").getLines()
|
val lines = Source.fromInputStream(Minecraft.getMinecraft.getResourceManager.getResource(new ResourceLocation(Settings.resourceDomain, "textures/font/chars.txt")).getInputStream)(Charsets.UTF_8).getLines()
|
||||||
val chars = lines.next()
|
val chars = lines.next()
|
||||||
val (w, h) = if (lines.hasNext) {
|
val (w, h) = if (lines.hasNext) {
|
||||||
val size = lines.next().split(" ", 2)
|
val size = lines.next().split(" ", 2)
|
||||||
|
@ -7,17 +7,16 @@ import codechicken.multipart._
|
|||||||
import cpw.mods.fml.relauncher.{Side, SideOnly}
|
import cpw.mods.fml.relauncher.{Side, SideOnly}
|
||||||
import li.cil.oc.api.network.{Message, Node, Visibility}
|
import li.cil.oc.api.network.{Message, Node, Visibility}
|
||||||
import li.cil.oc.api.{Items, network}
|
import li.cil.oc.api.{Items, network}
|
||||||
import li.cil.oc.client.renderer.block.BlockRenderer
|
|
||||||
import li.cil.oc.common.block.{Cable, Delegator}
|
import li.cil.oc.common.block.{Cable, Delegator}
|
||||||
import li.cil.oc.common.tileentity
|
import li.cil.oc.common.tileentity
|
||||||
import li.cil.oc.util.Color
|
import li.cil.oc.util.Color
|
||||||
import li.cil.oc.util.ExtendedNBT._
|
import li.cil.oc.util.ExtendedNBT._
|
||||||
import li.cil.oc.{Settings, api, common}
|
import li.cil.oc.{Settings, api, client, common}
|
||||||
import net.minecraft.client.Minecraft
|
import net.minecraft.client.Minecraft
|
||||||
import net.minecraft.entity.player.EntityPlayer
|
import net.minecraft.entity.player.EntityPlayer
|
||||||
import net.minecraft.item.ItemStack
|
import net.minecraft.item.ItemStack
|
||||||
import net.minecraft.nbt.NBTTagCompound
|
import net.minecraft.nbt.NBTTagCompound
|
||||||
import net.minecraft.util.{MovingObjectPosition, AxisAlignedBB}
|
import net.minecraft.util.{AxisAlignedBB, MovingObjectPosition}
|
||||||
|
|
||||||
import scala.collection.convert.WrapAsJava
|
import scala.collection.convert.WrapAsJava
|
||||||
import scala.collection.convert.WrapAsScala._
|
import scala.collection.convert.WrapAsScala._
|
||||||
@ -127,15 +126,14 @@ class CablePart(val original: Option[tileentity.Cable] = None) extends DelegateP
|
|||||||
override def renderStatic(pos: Vector3, olm: LazyLightMatrix, pass: Int) {
|
override def renderStatic(pos: Vector3, olm: LazyLightMatrix, pass: Int) {
|
||||||
val (x, y, z) = (pos.x.toInt, pos.y.toInt, pos.z.toInt)
|
val (x, y, z) = (pos.x.toInt, pos.y.toInt, pos.z.toInt)
|
||||||
val block = api.Items.get("cable").block()
|
val block = api.Items.get("cable").block()
|
||||||
val metadata = world.getBlockMetadata(x, y, z)
|
|
||||||
val renderer = Minecraft.getMinecraft.renderGlobal.globalRenderBlocks
|
val renderer = Minecraft.getMinecraft.renderGlobal.globalRenderBlocks
|
||||||
block match {
|
block match {
|
||||||
case delegator: Delegator[_] =>
|
case delegator: Delegator[_] =>
|
||||||
delegator.colorMultiplierOverride = Some(_color)
|
delegator.colorMultiplierOverride = Some(_color)
|
||||||
BlockRenderer.renderCable(Cable.neighbors(world, x, y, z), block, metadata, x, y, z, renderer)
|
client.renderer.block.Cable.render(world, x, y, z, block, renderer)
|
||||||
delegator.colorMultiplierOverride = None
|
delegator.colorMultiplierOverride = None
|
||||||
case _ =>
|
case _ =>
|
||||||
BlockRenderer.renderCable(Cable.neighbors(world, x, y, z), block, metadata, x, y, z, renderer)
|
client.renderer.block.Cable.render(world, x, y, z, block, renderer)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package li.cil.oc.common.tileentity
|
package li.cil.oc.common.tileentity
|
||||||
|
|
||||||
|
import com.google.common.base.Charsets
|
||||||
import cpw.mods.fml.common.Optional
|
import cpw.mods.fml.common.Optional
|
||||||
import dan200.computer.api.{IComputerAccess, ILuaContext, IPeripheral}
|
import dan200.computer.api.{IComputerAccess, ILuaContext, IPeripheral}
|
||||||
import li.cil.oc.api.Driver
|
import li.cil.oc.api.Driver
|
||||||
@ -114,7 +115,7 @@ class Switch extends traits.Hub with traits.NotAnalyzable with IPeripheral with
|
|||||||
val address = s"cc${wrapper.id}_${wrapper.attachmentName}"
|
val address = s"cc${wrapper.id}_${wrapper.attachmentName}"
|
||||||
if (source != address && Option(destination).forall(_ == address) && openPorts(computer).contains(port))
|
if (source != address && Option(destination).forall(_ == address) && openPorts(computer).contains(port))
|
||||||
wrapper.queueEvent("modem_message", Array(Seq(wrapper.attachmentName, Int.box(port), Int.box(answerPort)) ++ args.map {
|
wrapper.queueEvent("modem_message", Array(Seq(wrapper.attachmentName, Int.box(port), Int.box(answerPort)) ++ args.map {
|
||||||
case x: Array[Byte] => new String(x, "UTF-8")
|
case x: Array[Byte] => new String(x, Charsets.UTF_8)
|
||||||
case x => x
|
case x => x
|
||||||
}: _*))
|
}: _*))
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package li.cil.oc.server.network
|
package li.cil.oc.server.network
|
||||||
|
|
||||||
|
import com.google.common.base.Charsets
|
||||||
import li.cil.oc.api.network
|
import li.cil.oc.api.network
|
||||||
|
|
||||||
import scala.collection.convert.WrapAsJava._
|
import scala.collection.convert.WrapAsJava._
|
||||||
@ -66,7 +67,7 @@ class ArgumentsImpl(val args: Seq[AnyRef]) extends network.Arguments {
|
|||||||
checkIndex(index, "string")
|
checkIndex(index, "string")
|
||||||
args(index) match {
|
args(index) match {
|
||||||
case value: java.lang.String => value
|
case value: java.lang.String => value
|
||||||
case value: Array[Byte] => new String(value, "UTF-8")
|
case value: Array[Byte] => new String(value, Charsets.UTF_8)
|
||||||
case value => throw typeError(index, value, "string")
|
case value => throw typeError(index, value, "string")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -79,7 +80,7 @@ class ArgumentsImpl(val args: Seq[AnyRef]) extends network.Arguments {
|
|||||||
def checkByteArray(index: Int) = {
|
def checkByteArray(index: Int) = {
|
||||||
checkIndex(index, "string")
|
checkIndex(index, "string")
|
||||||
args(index) match {
|
args(index) match {
|
||||||
case value: java.lang.String => value.getBytes("UTF-8")
|
case value: java.lang.String => value.getBytes(Charsets.UTF_8)
|
||||||
case value: Array[Byte] => value
|
case value: Array[Byte] => value
|
||||||
case value => throw typeError(index, value, "string")
|
case value => throw typeError(index, value, "string")
|
||||||
}
|
}
|
||||||
@ -146,6 +147,11 @@ class ArgumentsImpl(val args: Seq[AnyRef]) extends network.Arguments {
|
|||||||
case _ => false
|
case _ => false
|
||||||
})
|
})
|
||||||
|
|
||||||
|
def toArray = args.map {
|
||||||
|
case value: Array[Byte] => new String(value, Charsets.UTF_8)
|
||||||
|
case value => value
|
||||||
|
}.toArray
|
||||||
|
|
||||||
private def isDefined(index: Int) = index >= 0 && index < args.length
|
private def isDefined(index: Int) = index >= 0 && index < args.length
|
||||||
|
|
||||||
private def checkIndex(index: Int, name: String) =
|
private def checkIndex(index: Int, name: String) =
|
||||||
|
@ -2,7 +2,7 @@ package li.cil.oc.util
|
|||||||
|
|
||||||
import java.util.logging.Level
|
import java.util.logging.Level
|
||||||
|
|
||||||
import com.google.common.base.Strings
|
import com.google.common.base.{Charsets, Strings}
|
||||||
import li.cil.oc.api.Persistable
|
import li.cil.oc.api.Persistable
|
||||||
import li.cil.oc.common.Tier
|
import li.cil.oc.common.Tier
|
||||||
import li.cil.oc.util.ExtendedNBT._
|
import li.cil.oc.util.ExtendedNBT._
|
||||||
@ -144,7 +144,7 @@ object ItemUtils {
|
|||||||
object RobotData {
|
object RobotData {
|
||||||
val names = try {
|
val names = try {
|
||||||
Source.fromInputStream(getClass.getResourceAsStream(
|
Source.fromInputStream(getClass.getResourceAsStream(
|
||||||
"/assets/" + Settings.resourceDomain + "/robot.names"))("UTF-8").
|
"/assets/" + Settings.resourceDomain + "/robot.names"))(Charsets.UTF_8).
|
||||||
getLines().map(_.takeWhile(_ != '#').trim()).filter(_ != "").toArray
|
getLines().map(_.takeWhile(_ != '#').trim()).filter(_ != "").toArray
|
||||||
}
|
}
|
||||||
catch {
|
catch {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user