Fixes robot assembler ignoring ignorePower setting, closes #482.

Checking if player that starts assembly of a robot is in creative mode, if so, finish instantly for all case tiers, closes #481.
This commit is contained in:
Florian Nücke 2014-08-10 13:52:58 +02:00
parent d71efdfbb8
commit d9b0dda36e
2 changed files with 8 additions and 4 deletions

View File

@ -55,7 +55,7 @@ class RobotAssembler extends traits.Environment with traits.PowerAcceptor with t
if (caseTier >= 0) Settings.robotComplexityByTier(caseTier) else 0
}
def start() {
def start(finishImmediately: Boolean) {
if (!isAssembling && robot.isEmpty && complexity <= maxComplexity) {
for (slot <- 0 until getSizeInventory) {
val stack = getStackInSlot(slot)
@ -75,7 +75,7 @@ class RobotAssembler extends traits.Environment with traits.PowerAcceptor with t
val stack = api.Items.get("robot").createItemStack(1)
data.save(stack)
robot = Some(stack)
if (data.tier == Tier.Four) {
if (finishImmediately || data.tier == Tier.Four) {
// Creative tier, finish instantly.
totalRequiredEnergy = 0
}
@ -98,7 +98,7 @@ class RobotAssembler extends traits.Environment with traits.PowerAcceptor with t
super.updateEntity()
if (robot.isDefined && world.getTotalWorldTime % Settings.get.tickFrequency == 0) {
val want = math.max(1, math.min(requiredEnergy, Settings.get.assemblerTickAmount * Settings.get.tickFrequency))
val success = node.tryChangeBuffer(-want)
val success = Settings.get.ignorePower || node.tryChangeBuffer(-want)
if (success) {
requiredEnergy -= want
}

View File

@ -10,6 +10,7 @@ import li.cil.oc.common.{PacketType, PacketHandler => CommonPacketHandler}
import li.cil.oc.{Settings, api}
import net.minecraft.entity.player.{EntityPlayer, EntityPlayerMP}
import net.minecraft.nbt.NBTTagCompound
import net.minecraft.server.MinecraftServer
import net.minecraft.util.ChatMessageComponent
import net.minecraftforge.common.{DimensionManager, ForgeDirection}
@ -141,7 +142,10 @@ class PacketHandler extends CommonPacketHandler {
def onRobotAssemblerStart(p: PacketParser) =
p.readTileEntity[RobotAssembler]() match {
case Some(assembler) => assembler.start()
case Some(assembler) => assembler.start(p.player match {
case player: EntityPlayerMP => player.theItemInWorldManager.isCreative
case _ => false
})
case _ => // Invalid packet.
}