mirror of
https://github.com/MightyPirates/OpenComputers.git
synced 2025-09-28 15:30:08 -04:00
Merge branch 'master' of github.com:MightyPirates/OpenComputers into MC1.7
Conflicts: src/main/scala/li/cil/oc/client/renderer/tileentity/ScreenRenderer.scala
This commit is contained in:
commit
1b30b2a5d8
@ -72,7 +72,7 @@ object ScreenRenderer extends TileEntitySpecialRenderer with Callable[Int] with
|
||||
RenderState.setBlendAlpha(math.max(0, 1 - ((distance - fadeDistanceSq) * fadeRatio).toFloat))
|
||||
}
|
||||
|
||||
if (screen.hasPower) {
|
||||
if (screen.hasPower && screen.relativeLitArea != 0) {
|
||||
MonospaceFontRenderer.init(this.field_147501_a.field_147553_e)
|
||||
compileOrDraw(cache.get(screen, this))
|
||||
}
|
||||
|
@ -20,7 +20,7 @@ class ClassTransformer extends IClassTransformer {
|
||||
override def transform(name: String, transformedName: String, basicClass: Array[Byte]): Array[Byte] = {
|
||||
var transformedClass = basicClass
|
||||
try {
|
||||
if (name == "li.cil.oc.common.tileentity.Computer" || name == "li.cil.oc.common.tileentity.Rack") {
|
||||
if (name == "li.cil.oc.common.tileentity.traits.Computer" || name == "li.cil.oc.common.tileentity.Rack") {
|
||||
transformedClass = ensureStargateTechCompatibility(transformedClass)
|
||||
}
|
||||
if (transformedClass != null
|
||||
@ -52,15 +52,17 @@ class ClassTransformer extends IClassTransformer {
|
||||
classNode.methods.removeAll(incompleteMethods)
|
||||
transformedClass = writeClass(classNode)
|
||||
}
|
||||
val classNode = newClassNode(transformedClass)
|
||||
if (classNode.interfaces.contains("li/cil/oc/api/network/SimpleComponent")) {
|
||||
try {
|
||||
transformedClass = injectEnvironmentImplementation(classNode, transformedClass)
|
||||
log.info(s"Successfully injected component logic into class $name.")
|
||||
}
|
||||
catch {
|
||||
case e: Throwable =>
|
||||
log.log(Level.WARNING, s"Failed injecting component logic into class $name.", e)
|
||||
{
|
||||
val classNode = newClassNode(transformedClass)
|
||||
if (classNode.interfaces.contains("li/cil/oc/api/network/SimpleComponent")) {
|
||||
try {
|
||||
transformedClass = injectEnvironmentImplementation(classNode)
|
||||
log.info(s"Successfully injected component logic into class $name.")
|
||||
}
|
||||
catch {
|
||||
case e: Throwable =>
|
||||
log.log(Level.WARNING, s"Failed injecting component logic into class $name.", e)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -95,7 +97,7 @@ class ClassTransformer extends IClassTransformer {
|
||||
else basicClass
|
||||
}
|
||||
|
||||
def injectEnvironmentImplementation(classNode: ClassNode, basicClass: Array[Byte]): Array[Byte] = {
|
||||
def injectEnvironmentImplementation(classNode: ClassNode): Array[Byte] = {
|
||||
log.fine(s"Injecting methods from Environment interface into ${classNode.name}.")
|
||||
if (!isTileEntity(classNode)) {
|
||||
throw new InjectionFailedException("Found SimpleComponent on something that isn't a tile entity, ignoring.")
|
||||
|
@ -32,10 +32,9 @@ class Keyboard(isRemote: Boolean) extends traits.Environment with traits.Rotatab
|
||||
// ----------------------------------------------------------------------- //
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
override def canConnect(side: ForgeDirection) = side == facing.getOpposite
|
||||
override def canConnect(side: ForgeDirection) = hasNodeOnSide(side)
|
||||
|
||||
override def sidedNode(side: ForgeDirection) =
|
||||
if (hasNodeOnSide(side)) node else null
|
||||
override def sidedNode(side: ForgeDirection) = if (hasNodeOnSide(side)) node else null
|
||||
|
||||
// Override automatic analyzer implementation for sided environments.
|
||||
override def onAnalyze(player: EntityPlayer, side: Int, hitX: Float, hitY: Float, hitZ: Float) = Array(node)
|
||||
|
@ -7,7 +7,7 @@ import li.cil.oc.client.{PacketSender => ClientPacketSender}
|
||||
import li.cil.oc.common.component
|
||||
import li.cil.oc.server.{PacketSender => ServerPacketSender}
|
||||
import li.cil.oc.Settings
|
||||
import li.cil.oc.util.Color
|
||||
import li.cil.oc.util.{PackedColor, Color}
|
||||
import net.minecraft.client.Minecraft
|
||||
import net.minecraft.entity.Entity
|
||||
import net.minecraft.entity.player.EntityPlayer
|
||||
@ -206,22 +206,31 @@ class Screen(var tier: Int) extends traits.TextBuffer with SidedEnvironment with
|
||||
|
||||
override def updateEntity() {
|
||||
super.updateEntity()
|
||||
if (isServer && isOn && isOrigin && world.getWorldTime % Settings.get.tickFrequency == 0) {
|
||||
if (isOn && isOrigin && world.getWorldTime % Settings.get.tickFrequency == 0) {
|
||||
if (relativeLitArea < 0) {
|
||||
// The relative lit area is the number of pixels that are not blank
|
||||
// versus the number of pixels in the *current* resolution. This is
|
||||
// scaled to multi-block screens, since we only compute this for the
|
||||
// origin.
|
||||
val (w, h) = buffer.resolution
|
||||
relativeLitArea = width * height * buffer.lines.foldLeft(0) {
|
||||
(acc, line) => acc + line.count(' ' !=)
|
||||
relativeLitArea = width * height * (buffer.lines, buffer.color).zipped.foldLeft(0) {
|
||||
case (acc, (line, colors)) => acc + (line, colors).zipped.foldLeft(0) {
|
||||
case (acc2, (char, color)) =>
|
||||
val bg = PackedColor.unpackBackground(color, buffer.depth)
|
||||
val fg = PackedColor.unpackForeground(color, buffer.depth)
|
||||
acc2 + (if (char == ' ') if (bg == 0) 0 else 1
|
||||
else if (char == 0x2588) if (fg == 0) 0 else 1
|
||||
else if (fg == 0 && bg == 0) 0 else 1)
|
||||
}
|
||||
} / (w * h).toDouble
|
||||
}
|
||||
val hadPower = hasPower
|
||||
val neededPower = relativeLitArea * fullyLitCost * Settings.get.tickFrequency
|
||||
hasPower = buffer.node.tryChangeBuffer(-neededPower)
|
||||
if (hasPower != hadPower) {
|
||||
ServerPacketSender.sendScreenPowerChange(this, isOn && hasPower)
|
||||
if (isServer) {
|
||||
val hadPower = hasPower
|
||||
val neededPower = relativeLitArea * fullyLitCost * Settings.get.tickFrequency
|
||||
hasPower = buffer.node.tryChangeBuffer(-neededPower)
|
||||
if (hasPower != hadPower) {
|
||||
ServerPacketSender.sendScreenPowerChange(this, isOn && hasPower)
|
||||
}
|
||||
}
|
||||
}
|
||||
if (shouldCheckForMultiBlock) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user