From 112ca9315551c8a3528bb8840ff78cce70e5f4c9 Mon Sep 17 00:00:00 2001 From: Adrian Siekierka Date: Fri, 2 Sep 2022 20:21:58 +0200 Subject: [PATCH] remove improper getDamage() override from Cable, fix #3004 --- src/main/scala/li/cil/oc/client/Proxy.scala | 1 + .../client/renderer/block/BlockRenderer.scala | 8 ------ .../cil/oc/client/renderer/block/Cable.scala | 8 ++++-- .../client/renderer/item/ItemRenderer.scala | 28 ++++++++++++++++++- .../scala/li/cil/oc/common/block/Cable.scala | 6 +--- .../scala/li/cil/oc/common/block/Item.scala | 8 ++++-- 6 files changed, 40 insertions(+), 19 deletions(-) diff --git a/src/main/scala/li/cil/oc/client/Proxy.scala b/src/main/scala/li/cil/oc/client/Proxy.scala index 5e6de4b7f..f91a49020 100644 --- a/src/main/scala/li/cil/oc/client/Proxy.scala +++ b/src/main/scala/li/cil/oc/client/Proxy.scala @@ -77,6 +77,7 @@ private[oc] class Proxy extends CommonProxy { ClientRegistry.bindTileEntitySpecialRenderer(classOf[tileentity.Transposer], TransposerRenderer) MinecraftForgeClient.registerItemRenderer(Items.get(Constants.ItemName.Floppy).createItemStack(1).getItem, ItemRenderer) + MinecraftForgeClient.registerItemRenderer(Items.get(Constants.BlockName.Cable).createItemStack(1).getItem, ItemRenderer) MinecraftForgeClient.registerItemRenderer(Items.get(Constants.BlockName.Print).createItemStack(1).getItem, ItemRenderer) ClientRegistry.registerKeyBinding(KeyBindings.materialCosts) diff --git a/src/main/scala/li/cil/oc/client/renderer/block/BlockRenderer.scala b/src/main/scala/li/cil/oc/client/renderer/block/BlockRenderer.scala index 515231a20..8d95b8026 100644 --- a/src/main/scala/li/cil/oc/client/renderer/block/BlockRenderer.scala +++ b/src/main/scala/li/cil/oc/client/renderer/block/BlockRenderer.scala @@ -31,14 +31,6 @@ object BlockRenderer extends ISimpleBlockRenderingHandler { Tessellator.instance.draw() RenderState.checkError(getClass.getName + ".renderInventoryBlock: assembler") - case _: common.block.Cable => - GL11.glScalef(1.6f, 1.6f, 1.6f) - GL11.glTranslatef(-0.5f, -0.5f, -0.5f) - Tessellator.instance.startDrawingQuads() - Cable.render(block, metadata, renderer) - Tessellator.instance.draw() - - RenderState.checkError(getClass.getName + ".renderInventoryBlock: cable") case _: common.block.Hologram => GL11.glTranslatef(-0.5f, -0.5f, -0.5f) Tessellator.instance.startDrawingQuads() diff --git a/src/main/scala/li/cil/oc/client/renderer/block/Cable.scala b/src/main/scala/li/cil/oc/client/renderer/block/Cable.scala index 7e928146f..9227847d8 100644 --- a/src/main/scala/li/cil/oc/client/renderer/block/Cable.scala +++ b/src/main/scala/li/cil/oc/client/renderer/block/Cable.scala @@ -5,7 +5,8 @@ import li.cil.oc.client.Textures import li.cil.oc.common import li.cil.oc.integration.Mods import net.minecraft.block.Block -import net.minecraft.client.renderer.RenderBlocks +import net.minecraft.client.renderer.{RenderBlocks, Tessellator} +import net.minecraft.item.{ItemBlock, ItemStack} import net.minecraft.tileentity.TileEntity import net.minecraft.util.AxisAlignedBB import net.minecraft.world.IBlockAccess @@ -52,7 +53,10 @@ object Cable { } } - def render(block: Block, metadata: Int, renderer: RenderBlocks) { + def render(stack: ItemStack, renderer: RenderBlocks) { + val block = stack.getItem.asInstanceOf[ItemBlock].field_150939_a + val metadata = 0 + val previousRenderAllFaces = renderer.renderAllFaces renderer.renderAllFaces = true diff --git a/src/main/scala/li/cil/oc/client/renderer/item/ItemRenderer.scala b/src/main/scala/li/cil/oc/client/renderer/item/ItemRenderer.scala index ed71f8ccf..f3d88ad86 100644 --- a/src/main/scala/li/cil/oc/client/renderer/item/ItemRenderer.scala +++ b/src/main/scala/li/cil/oc/client/renderer/item/ItemRenderer.scala @@ -6,7 +6,7 @@ import li.cil.oc.Settings import li.cil.oc.api import li.cil.oc.api.detail.ItemInfo import li.cil.oc.client.KeyBindings -import li.cil.oc.client.renderer.block.Print +import li.cil.oc.client.renderer.block.{Cable, Hologram, Print} import li.cil.oc.client.renderer.entity.DroneRenderer import li.cil.oc.common.item.data.PrintData import li.cil.oc.util.Color @@ -14,6 +14,7 @@ import li.cil.oc.util.ExtendedAABB import li.cil.oc.util.RenderState import net.minecraft.client.Minecraft import net.minecraft.client.gui.ScaledResolution +import net.minecraft.client.renderer.{RenderBlocks, Tessellator} import net.minecraft.client.renderer.entity.RenderItem import net.minecraft.client.renderer.entity.RenderManager import net.minecraft.client.renderer.texture.TextureMap @@ -35,6 +36,7 @@ object ItemRenderer extends IItemRenderer { lazy val floppy = api.Items.get(Constants.ItemName.Floppy) lazy val lootDisk = api.Items.get(Constants.ItemName.LootDisk) lazy val print = api.Items.get(Constants.BlockName.Print) + lazy val cable = api.Items.get(Constants.BlockName.Cable) lazy val nullShape = new PrintData.Shape(ExtendedAABB.unitBounds, Settings.resourceDomain + ":White", Some(Color.Lime)) @@ -44,12 +46,14 @@ object ItemRenderer extends IItemRenderer { val descriptor = api.Items.get(stack) (renderType == ItemRenderType.INVENTORY && isFloppy(api.Items.get(stack))) || ((renderType == ItemRenderType.INVENTORY || renderType == ItemRenderType.ENTITY || renderType == ItemRenderType.EQUIPPED || renderType == ItemRenderType.EQUIPPED_FIRST_PERSON) && descriptor == drone) || + ((renderType == ItemRenderType.INVENTORY || renderType == ItemRenderType.ENTITY || renderType == ItemRenderType.EQUIPPED || renderType == ItemRenderType.EQUIPPED_FIRST_PERSON) && descriptor == cable) || ((renderType == ItemRenderType.INVENTORY || renderType == ItemRenderType.ENTITY || renderType == ItemRenderType.EQUIPPED || renderType == ItemRenderType.EQUIPPED_FIRST_PERSON) && api.Items.get(stack) == print) } override def shouldUseRenderHelper(renderType: ItemRenderType, stack: ItemStack, helper: ItemRendererHelper) = if (renderType == ItemRenderType.ENTITY) true else if (renderType == ItemRenderType.INVENTORY && api.Items.get(stack) == print) helper == ItemRendererHelper.INVENTORY_BLOCK + else if (api.Items.get(stack) == cable) true // Note: it's easier to revert changes introduced by this "helper" than by // the code that applies if no helper is used... else helper == ItemRendererHelper.EQUIPPED_BLOCK @@ -144,6 +148,28 @@ object ItemRenderer extends IItemRenderer { RenderState.checkError("ItemRenderer.renderItem: print") } + else if (descriptor == cable) { + GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS) + GL11.glPushMatrix() + + Minecraft.getMinecraft.renderEngine.bindTexture(TextureMap.locationBlocksTexture) + + GL11.glScalef(1.5f, 1.5f, 1.5f) + if (renderType == ItemRenderType.ENTITY) { + GL11.glTranslatef(-0.5f, 0, -0.5f) + } + + Tessellator.instance.startDrawingQuads() + Tessellator.instance.setColorOpaque_I(stack.getItem.getColorFromItemStack(stack, 0)) + Cable.render(stack, data(0).asInstanceOf[RenderBlocks]) + Tessellator.instance.draw() + + GL11.glPopMatrix() + GL11.glPopAttrib() + + RenderState.checkError("ItemRenderer.renderItem: print") + } + RenderState.checkError("ItemRenderer.renderItem: leaving") } diff --git a/src/main/scala/li/cil/oc/common/block/Cable.scala b/src/main/scala/li/cil/oc/common/block/Cable.scala index d2c2d6bb8..2cc058347 100644 --- a/src/main/scala/li/cil/oc/common/block/Cable.scala +++ b/src/main/scala/li/cil/oc/common/block/Cable.scala @@ -1,7 +1,6 @@ package li.cil.oc.common.block import java.util - import codechicken.lib.vec.Cuboid6 import codechicken.multipart.JNormalOcclusion import codechicken.multipart.NormalOcclusionTest @@ -17,7 +16,7 @@ import li.cil.oc.client.Textures import li.cil.oc.common.tileentity import li.cil.oc.integration.Mods import li.cil.oc.integration.fmp.CablePart -import li.cil.oc.util.Color +import li.cil.oc.util.{Color, ItemColorizer} import net.minecraft.block.Block import net.minecraft.client.renderer.texture.IIconRegister import net.minecraft.entity.{Entity, EntityLivingBase} @@ -63,9 +62,6 @@ class Cable(protected implicit val tileTag: ClassTag[tileentity.Cable]) extends override def isSideSolid(world: IBlockAccess, x: Int, y: Int, z: Int, side: ForgeDirection) = false - @SideOnly(Side.CLIENT) - override def getRenderColor(metadata: Int) = metadata - // ----------------------------------------------------------------------- // override def getPickBlock(target: MovingObjectPosition, world: World, x: Int, y: Int, z: Int) = diff --git a/src/main/scala/li/cil/oc/common/block/Item.scala b/src/main/scala/li/cil/oc/common/block/Item.scala index 268a29207..04efe9afd 100644 --- a/src/main/scala/li/cil/oc/common/block/Item.scala +++ b/src/main/scala/li/cil/oc/common/block/Item.scala @@ -1,7 +1,8 @@ package li.cil.oc.common.block -import java.util +import cpw.mods.fml.relauncher.{Side, SideOnly} +import java.util import li.cil.oc.Constants import li.cil.oc.Settings import li.cil.oc.api @@ -64,14 +65,15 @@ class Item(value: Block) extends ItemBlock(value) { case _ => Settings.namespace + "tile" } - override def getDamage(stack: ItemStack): Int = { + @SideOnly(Side.CLIENT) + override def getColorFromItemStack(stack: ItemStack, v: Int) = { if (api.Items.get(stack) == api.Items.get(Constants.BlockName.Cable)) { if (ItemColorizer.hasColor(stack)) { ItemColorizer.getColor(stack) } else Color.LightGray } - else super.getDamage(stack) + else super.getColorFromItemStack(stack, v) } override def isBookEnchantable(a: ItemStack, b: ItemStack) = false