mirror of
https://github.com/MightyPirates/OpenComputers.git
synced 2025-09-17 19:25:20 -04:00
Simple colored trait, don't consume dyes when in creative mode.
This commit is contained in:
parent
c7715c346e
commit
933f51ccef
@ -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.
|
||||
}
|
||||
|
@ -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]
|
||||
*/
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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)
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
@ -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))
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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)
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
@ -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() {
|
||||
|
@ -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)
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user