From 933f51ccef604ee2f95be46b95a3e6978d6c64b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Sun, 27 Mar 2016 17:33:34 +0200 Subject: [PATCH] Simple colored trait, don't consume dyes when in creative mode. --- .../scala/li/cil/oc/client/PacketHandler.scala | 2 +- .../oc/client/renderer/block/CableModel.scala | 16 +++------------- .../oc/client/renderer/block/ScreenModel.scala | 2 +- .../li/cil/oc/common/block/SimpleBlock.scala | 10 +++++----- .../li/cil/oc/common/tileentity/Cable.scala | 8 ++++---- .../scala/li/cil/oc/common/tileentity/Case.scala | 4 ++-- .../li/cil/oc/common/tileentity/Screen.scala | 6 +++--- .../oc/common/tileentity/traits/Colored.scala | 12 ++++-------- .../scala/li/cil/oc/server/PacketSender.scala | 2 +- 9 files changed, 24 insertions(+), 38 deletions(-) diff --git a/src/main/scala/li/cil/oc/client/PacketHandler.scala b/src/main/scala/li/cil/oc/client/PacketHandler.scala index c41e5d805..5305aab9a 100644 --- a/src/main/scala/li/cil/oc/client/PacketHandler.scala +++ b/src/main/scala/li/cil/oc/client/PacketHandler.scala @@ -116,7 +116,7 @@ object PacketHandler extends CommonPacketHandler { def onColorChange(p: PacketParser) = p.readTileEntity[Colored]() match { case Some(t) => - t.color = p.readInt() + t.setColor(p.readInt()) t.world.markBlockForUpdate(t.position) case _ => // Invalid packet. } diff --git a/src/main/scala/li/cil/oc/client/renderer/block/CableModel.scala b/src/main/scala/li/cil/oc/client/renderer/block/CableModel.scala index bab79c85a..21aa6d66f 100644 --- a/src/main/scala/li/cil/oc/client/renderer/block/CableModel.scala +++ b/src/main/scala/li/cil/oc/client/renderer/block/CableModel.scala @@ -4,16 +4,13 @@ import li.cil.oc.client.Textures import li.cil.oc.common.block import li.cil.oc.common.block.Cable import li.cil.oc.common.tileentity -import li.cil.oc.integration.Mods import li.cil.oc.util.BlockPosition import li.cil.oc.util.Color import li.cil.oc.util.ExtendedWorld._ import net.minecraft.block.state.IBlockState import net.minecraft.client.renderer.block.model.BakedQuad -import net.minecraft.client.renderer.texture.TextureAtlasSprite import net.minecraft.item.EnumDyeColor import net.minecraft.item.ItemStack -import net.minecraft.tileentity.TileEntity import net.minecraft.util.EnumFacing import net.minecraft.util.Vec3 import net.minecraftforge.client.model.ISmartItemModel @@ -88,7 +85,7 @@ object CableModel extends SmartBlockModelBase with ISmartItemModel { case t: tileentity.Cable => val faces = mutable.ArrayBuffer.empty[BakedQuad] - val color = Some(t.color) + val color = Some(t.getColor) val mask = Cable.neighbors(t.world, t.getPos) faces ++= bakeQuads(Middle, cableTexture, color) for (side <- EnumFacing.values) { @@ -112,20 +109,13 @@ object CableModel extends SmartBlockModelBase with ISmartItemModel { case _ => super.getGeneralQuads } - private def isCable(pos: BlockPosition) = { + protected def isCable(pos: BlockPosition) = { pos.world match { case Some(world) => - val tileEntity = world.getTileEntity(pos) - tileEntity.isInstanceOf[tileentity.Cable] || (Mods.ForgeMultipart.isAvailable && isCableFMP(tileEntity)) + world.getTileEntity(pos).isInstanceOf[tileentity.Cable] case _ => false } } - - private def isCableFMP(tileEntity: TileEntity) = false - - /* TODO FMP - tileEntity.isInstanceOf[TileMultipart] - */ } } diff --git a/src/main/scala/li/cil/oc/client/renderer/block/ScreenModel.scala b/src/main/scala/li/cil/oc/client/renderer/block/ScreenModel.scala index c8e102fd0..3714fd9f9 100644 --- a/src/main/scala/li/cil/oc/client/renderer/block/ScreenModel.scala +++ b/src/main/scala/li/cil/oc/client/renderer/block/ScreenModel.scala @@ -68,7 +68,7 @@ object ScreenModel extends SmartBlockModelBase with ISmartItemModel { Textures.Block.Screen.Multi(pitch)(py)(px)(facing.getIndex) } - seqAsJavaList(Seq(bakeQuad(side, Textures.getSprite(texture), Some(screen.color), rotation))) + seqAsJavaList(Seq(bakeQuad(side, Textures.getSprite(texture), Some(screen.getColor), rotation))) case _ => super.getFaceQuads(side) } diff --git a/src/main/scala/li/cil/oc/common/block/SimpleBlock.scala b/src/main/scala/li/cil/oc/common/block/SimpleBlock.scala index cfff1b514..eeb6e05b9 100644 --- a/src/main/scala/li/cil/oc/common/block/SimpleBlock.scala +++ b/src/main/scala/li/cil/oc/common/block/SimpleBlock.scala @@ -94,7 +94,7 @@ abstract class SimpleBlock(material: Material = Material.iron) extends BlockCont @SideOnly(Side.CLIENT) override def colorMultiplier(world: IBlockAccess, pos: BlockPos, renderPass: Int) = world.getTileEntity(pos) match { - case colored: Colored => colored.color + case colored: Colored => colored.getColor case _ => getRenderColor(world.getBlockState(pos)) } @@ -192,8 +192,8 @@ abstract class SimpleBlock(material: Material = Material.iron) extends BlockCont override def recolorBlock(world: World, pos: BlockPos, side: EnumFacing, color: EnumDyeColor) = world.getTileEntity(pos) match { - case colored: Colored if colored.color != Color.rgbValues(color) => - colored.color = Color.rgbValues(color) + case colored: Colored if colored.getColor != Color.rgbValues(color) => + colored.setColor(Color.rgbValues(color)) world.markBlockForUpdate(pos) true // Blame Vexatos. case _ => super.recolorBlock(world, pos, side, color) @@ -205,9 +205,9 @@ abstract class SimpleBlock(material: Material = Material.iron) extends BlockCont override def onBlockActivated(world: World, pos: BlockPos, state: IBlockState, player: EntityPlayer, side: EnumFacing, hitX: Float, hitY: Float, hitZ: Float) = world.getTileEntity(pos) match { case colored: Colored if Color.isDye(player.getHeldItem) => - colored.color = Color.rgbValues(Color.dyeColor(player.getHeldItem)) + colored.setColor(Color.rgbValues(Color.dyeColor(player.getHeldItem))) world.markBlockForUpdate(pos) - if (colored.consumesDye) { + if (!player.capabilities.isCreativeMode && colored.consumesDye) { player.getHeldItem.splitStack(1) } true diff --git a/src/main/scala/li/cil/oc/common/tileentity/Cable.scala b/src/main/scala/li/cil/oc/common/tileentity/Cable.scala index 9d46d5abf..7c1b35da5 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Cable.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Cable.scala @@ -12,19 +12,19 @@ import net.minecraft.item.ItemStack class Cable extends traits.Environment with traits.NotAnalyzable with traits.ImmibisMicroblock with traits.Colored { val node = api.Network.newNode(this, Visibility.None).create() - color = Color.rgbValues(EnumDyeColor.SILVER) + setColor(Color.rgbValues(EnumDyeColor.SILVER)) def createItemStack() = { val stack = new ItemStack(Item.getItemFromBlock(getBlockType)) - if (color != Color.rgbValues(EnumDyeColor.SILVER)) { - ItemColorizer.setColor(stack, color) + if (getColor != Color.rgbValues(EnumDyeColor.SILVER)) { + ItemColorizer.setColor(stack, getColor) } stack } def fromItemStack(stack: ItemStack): Unit = { if (ItemColorizer.hasColor(stack)) { - color = ItemColorizer.getColor(stack) + setColor(ItemColorizer.getColor(stack)) } } diff --git a/src/main/scala/li/cil/oc/common/tileentity/Case.scala b/src/main/scala/li/cil/oc/common/tileentity/Case.scala index c955c92a9..8b440c30b 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Case.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Case.scala @@ -24,7 +24,7 @@ class Case(var tier: Int) extends traits.PowerAcceptor with traits.Computer with var lastFileSystemAccess = 0L var lastNetworkActivity = 0L - color = Color.rgbValues(Color.byTier(tier)) + setColor(Color.rgbValues(Color.byTier(tier))) @SideOnly(Side.CLIENT) override protected def hasConnector(side: EnumFacing) = side != facing @@ -64,7 +64,7 @@ class Case(var tier: Int) extends traits.PowerAcceptor with traits.Computer with override def readFromNBTForServer(nbt: NBTTagCompound) { tier = nbt.getByte(Settings.namespace + "tier") max 0 min 3 - color = Color.rgbValues(Color.byTier(tier)) + setColor(Color.rgbValues(Color.byTier(tier))) super.readFromNBTForServer(nbt) } diff --git a/src/main/scala/li/cil/oc/common/tileentity/Screen.scala b/src/main/scala/li/cil/oc/common/tileentity/Screen.scala index cb0d4861b..0b0befaac 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Screen.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Screen.scala @@ -58,7 +58,7 @@ class Screen(var tier: Int) extends traits.TextBuffer with SidedEnvironment with private val arrows = mutable.Set.empty[EntityArrow] - color = Color.rgbValues(Color.byTier(tier)) + setColor(Color.rgbValues(Color.byTier(tier))) @SideOnly(Side.CLIENT) override def canConnect(side: EnumFacing) = toLocal(side) != EnumFacing.SOUTH @@ -291,7 +291,7 @@ class Screen(var tier: Int) extends traits.TextBuffer with SidedEnvironment with override def readFromNBTForServer(nbt: NBTTagCompound) { tier = nbt.getByte(Settings.namespace + "tier") max 0 min 2 - color = Color.rgbValues(Color.byTier(tier)) + setColor(Color.rgbValues(Color.byTier(tier))) super.readFromNBTForServer(nbt) hadRedstoneInput = nbt.getBoolean(Settings.namespace + "hadRedstoneInput") invertTouchMode = nbt.getBoolean(Settings.namespace + "invertTouchMode") @@ -374,7 +374,7 @@ class Screen(var tier: Int) extends traits.TextBuffer with SidedEnvironment with def tryMergeTowards(dx: Int, dy: Int) = { val npos = unproject(opos.x + dx, opos.y + dy, opos.z) world.blockExists(npos) && (world.getTileEntity(npos) match { - case s: Screen if s.tier == tier && s.pitch == pitch && s.color == color && s.yaw == yaw && !screens.contains(s) => + case s: Screen if s.tier == tier && s.pitch == pitch && s.getColor == getColor && s.yaw == yaw && !screens.contains(s) => val spos = project(s.origin) val canMergeAlongX = spos.y == opos.y && s.height == height && s.width + width <= Settings.get.maxScreenWidth val canMergeAlongY = spos.x == opos.x && s.width == width && s.height + height <= Settings.get.maxScreenHeight diff --git a/src/main/scala/li/cil/oc/common/tileentity/traits/Colored.scala b/src/main/scala/li/cil/oc/common/tileentity/traits/Colored.scala index db40d141d..10f1c7275 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/traits/Colored.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/traits/Colored.scala @@ -12,19 +12,15 @@ import net.minecraftforge.fml.relauncher.SideOnly trait Colored extends TileEntity with internal.Colored { private var _color = 0 - def color = _color + def consumesDye = false - def color_=(value: Int) = if (value != _color) { + override def getColor: Int = _color + + override def setColor(value: Int) = if (value != _color) { _color = value onColorChanged() } - def consumesDye = false - - override def getColor: Int = color - - override def setColor(value: Int) = color = value - override def controlsConnectivity = false protected def onColorChanged() { diff --git a/src/main/scala/li/cil/oc/server/PacketSender.scala b/src/main/scala/li/cil/oc/server/PacketSender.scala index c7ad4af11..1c4cda596 100644 --- a/src/main/scala/li/cil/oc/server/PacketSender.scala +++ b/src/main/scala/li/cil/oc/server/PacketSender.scala @@ -48,7 +48,7 @@ object PacketSender { val pb = new SimplePacketBuilder(PacketType.ColorChange) pb.writeTileEntity(t) - pb.writeInt(t.color) + pb.writeInt(t.getColor) pb.sendToPlayersNearTileEntity(t) }