mirror of
https://github.com/MightyPirates/OpenComputers.git
synced 2025-09-14 01:39:36 -04:00
Fixed robot energy storage somewhat.
Improved picking of robots (avoid duplicate component ids).
This commit is contained in:
parent
e443205eac
commit
ddd8e18aef
@ -125,7 +125,7 @@ oc:gui.Robot.TurnOn=Einschalten
|
||||
oc:gui.RobotAssembler.CollectRobot=Roboter entnehmen
|
||||
oc:gui.RobotAssembler.Complexity=Komplexität: %s/%s
|
||||
oc:gui.RobotAssembler.InsertCase=Computergehäuse einlegen
|
||||
oc:gui.RobotAssembler.Progress=Fortschritt: %s (%s)
|
||||
oc:gui.RobotAssembler.Progress=Fortschritt: %s%% (%s)
|
||||
oc:gui.RobotAssembler.Run=Zusammenbauen
|
||||
oc:gui.ServerRack.None=Keine
|
||||
oc:gui.ServerRack.Back=Hinten
|
||||
|
@ -125,7 +125,7 @@ oc:gui.Robot.TurnOn=Turn on
|
||||
oc:gui.RobotAssembler.CollectRobot=Collect robot
|
||||
oc:gui.RobotAssembler.Complexity=Complexity: %s/%s
|
||||
oc:gui.RobotAssembler.InsertCase=Insert a Computer Case
|
||||
oc:gui.RobotAssembler.Progress=Progress: %s (%s)
|
||||
oc:gui.RobotAssembler.Progress=Progress: %s%% (%s)
|
||||
oc:gui.RobotAssembler.Run=Assemble
|
||||
oc:gui.ServerRack.None=None
|
||||
oc:gui.ServerRack.Back=Back
|
||||
|
@ -58,10 +58,11 @@ class RobotProxy(val parent: SpecialDelegator) extends RedstoneAware with Specia
|
||||
}
|
||||
if (stack.getTagCompound.hasKey(Settings.namespace + "storedEnergy")) {
|
||||
val energy = stack.getTagCompound.getInteger(Settings.namespace + "storedEnergy")
|
||||
tooltip.addAll(Tooltip.get(unlocalizedName + "_StoredEnergy", energy))
|
||||
if (energy > 0) {
|
||||
tooltip.addAll(Tooltip.get(unlocalizedName + "_StoredEnergy", energy))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
@ -75,7 +76,7 @@ class RobotProxy(val parent: SpecialDelegator) extends RedstoneAware with Specia
|
||||
|
||||
override def pick(target: MovingObjectPosition, world: World, x: Int, y: Int, z: Int) =
|
||||
world.getBlockTileEntity(x, y, z) match {
|
||||
case proxy: tileentity.RobotProxy => proxy.robot.info.createItemStack()
|
||||
case proxy: tileentity.RobotProxy => proxy.robot.info.copyItemStack()
|
||||
case _ => null
|
||||
}
|
||||
|
||||
@ -160,6 +161,7 @@ class RobotProxy(val parent: SpecialDelegator) extends RedstoneAware with Specia
|
||||
case Some((robot, owner)) =>
|
||||
robot.owner = owner
|
||||
robot.info.load(stack)
|
||||
robot.bot.node.changeBuffer(robot.info.robotEnergy - robot.bot.node.localBuffer)
|
||||
robot.updateInventorySize()
|
||||
robot.updateMaxComponentCount()
|
||||
case _ =>
|
||||
|
@ -84,7 +84,7 @@ class Disassembler extends traits.Environment with traits.Inventory {
|
||||
queue += api.Items.get("case" + (info.tier + 1)).createItemStack(1)
|
||||
queue ++= info.containers
|
||||
queue ++= info.components
|
||||
node.changeBuffer(info.energy)
|
||||
node.changeBuffer(info.robotEnergy)
|
||||
}
|
||||
|
||||
private def enqueueServer(server: ItemStack, serverTier: Int) {
|
||||
|
@ -264,6 +264,8 @@ class Robot(val isRemote: Boolean) extends traits.Computer with traits.PowerInfo
|
||||
if (isServer) {
|
||||
globalBuffer = bot.node.globalBuffer
|
||||
globalBufferSize = bot.node.globalBufferSize
|
||||
info.totalEnergy = globalBuffer.toInt
|
||||
info.robotEnergy = bot.node.localBuffer.toInt
|
||||
updatePowerInformation()
|
||||
}
|
||||
else if (isRunning && isAnimatingMove) {
|
||||
@ -319,9 +321,6 @@ class Robot(val isRemote: Boolean) extends traits.Computer with traits.PowerInfo
|
||||
swingingTool = nbt.getBoolean(Settings.namespace + "swingingTool")
|
||||
turnAxis = nbt.getByte(Settings.namespace + "turnAxis")
|
||||
}
|
||||
|
||||
// TODO migration: xp to xp upgrade
|
||||
// xp = nbt.getDouble(Settings.namespace + "xp") max 0
|
||||
}
|
||||
|
||||
// Side check for Waila (and other mods that may call this client side).
|
||||
@ -407,6 +406,7 @@ class Robot(val isRemote: Boolean) extends traits.Computer with traits.PowerInfo
|
||||
super.onConnect(node)
|
||||
if (node == this.node) {
|
||||
node.connect(bot.node)
|
||||
node.asInstanceOf[Connector].setLocalBufferSize(0)
|
||||
|
||||
// There's a chance the server sends a robot tile entity to its clients
|
||||
// before the tile entity's first update was called, in which case the
|
||||
|
@ -53,7 +53,8 @@ class RobotAssembler extends traits.Environment with traits.Inventory with trait
|
||||
}
|
||||
val data = new ItemUtils.RobotData()
|
||||
data.name = ItemUtils.RobotData.randomName
|
||||
data.energy = 50000
|
||||
data.robotEnergy = 50000
|
||||
data.totalEnergy = data.robotEnergy
|
||||
data.containers = items.take(4).drop(1).collect {
|
||||
case Some(item) => item
|
||||
}
|
||||
|
@ -38,7 +38,7 @@ class UpgradeInventoryController(val owner: TileEntity with Robot) extends Manag
|
||||
val slot = args.checkSlot(inventory, 1)
|
||||
if (!InventoryUtils.insertIntoInventorySlot(stack, inventory, facing.getOpposite, slot, count)) {
|
||||
// Cannot drop into that inventory.
|
||||
return result(false, "inventory full")
|
||||
return result(false, "inventory full/invalid slot")
|
||||
}
|
||||
else if (stack.stackSize == 0) {
|
||||
// Dropped whole stack.
|
||||
|
@ -35,11 +35,6 @@ class CompoundBlockDriver(val blocks: driver.Block*) extends driver.Block {
|
||||
case named: NamedBlock => return named.preferredName
|
||||
case _ =>
|
||||
}
|
||||
// TODO Deprecated, remove in 1.3.
|
||||
for (block <- blocks) block match {
|
||||
case named: NamedBlock => return named.preferredName
|
||||
case _ =>
|
||||
}
|
||||
try world.getBlockTileEntity(x, y, z) match {
|
||||
case inventory: IInventory if !Strings.isNullOrEmpty(inventory.getInvName) => return inventory.getInvName.stripPrefix("container.")
|
||||
} catch {
|
||||
|
@ -1,15 +1,17 @@
|
||||
package li.cil.oc.util
|
||||
|
||||
import net.minecraft.item.{ItemMap, Item, ItemStack}
|
||||
import li.cil.oc.{OpenComputers, Blocks, Settings, api}
|
||||
import li.cil.oc.common.InventorySlots.Tier
|
||||
import li.cil.oc.util.ExtendedNBT._
|
||||
import net.minecraft.nbt.NBTTagCompound
|
||||
import com.google.common.base.Strings
|
||||
import scala.io.Source
|
||||
import java.util.logging.Level
|
||||
import li.cil.oc.{OpenComputers, Blocks, Settings, api}
|
||||
import li.cil.oc.api.Persistable
|
||||
import li.cil.oc.common.InventorySlots.Tier
|
||||
import li.cil.oc.server.driver.item.UpgradeExperience
|
||||
import li.cil.oc.util.ExtendedNBT._
|
||||
import net.minecraft.item.{ItemMap, Item, ItemStack}
|
||||
import net.minecraft.nbt.{NBTBase, NBTTagCompound}
|
||||
import net.minecraft.world.World
|
||||
import scala.io.Source
|
||||
import scala.collection.convert.WrapAsScala._
|
||||
|
||||
object ItemUtils {
|
||||
def caseTier(stack: ItemStack) = {
|
||||
@ -49,7 +51,11 @@ object ItemUtils {
|
||||
|
||||
var name = ""
|
||||
|
||||
var energy = 0
|
||||
// Overall energy including components.
|
||||
var totalEnergy = 0
|
||||
|
||||
// Energy purely stored in robot component - this is what we have to restore manually.
|
||||
var robotEnergy = 0
|
||||
|
||||
var tier = 0
|
||||
|
||||
@ -64,7 +70,8 @@ object ItemUtils {
|
||||
if (Strings.isNullOrEmpty(name)) {
|
||||
name = RobotData.randomName
|
||||
}
|
||||
energy = nbt.getInteger(Settings.namespace + "storedEnergy")
|
||||
totalEnergy = nbt.getInteger(Settings.namespace + "storedEnergy")
|
||||
robotEnergy = nbt.getInteger(Settings.namespace + "robotEnergy")
|
||||
if (nbt.hasKey(Settings.namespace + "components")) {
|
||||
tier = nbt.getInteger(Settings.namespace + "tier")
|
||||
components = nbt.getTagList(Settings.namespace + "components").map(ItemStack.loadItemStackFromNBT).toArray
|
||||
@ -73,11 +80,14 @@ object ItemUtils {
|
||||
else {
|
||||
// Old robot, upgrade to new modular model.
|
||||
tier = 0
|
||||
val experienceUpgrade = api.Items.get("experienceUpgrade").createItemStack(1)
|
||||
UpgradeExperience.dataTag(experienceUpgrade).setDouble(Settings.namespace + "xp", nbt.getDouble(Settings.namespace + "xp"))
|
||||
components = Array(
|
||||
api.Items.get("screen1").createItemStack(1),
|
||||
api.Items.get("keyboard").createItemStack(1),
|
||||
api.Items.get("inventoryUpgrade").createItemStack(1),
|
||||
api.Items.get("experienceUpgrade").createItemStack(1),
|
||||
experienceUpgrade,
|
||||
api.Items.get("openOS").createItemStack(1),
|
||||
api.Items.get("graphicsCard1").createItemStack(1),
|
||||
api.Items.get("cpu1").createItemStack(1),
|
||||
api.Items.get("ram2").createItemStack(1)
|
||||
@ -87,8 +97,7 @@ object ItemUtils {
|
||||
api.Items.get("upgradeContainer3").createItemStack(1),
|
||||
api.Items.get("diskDrive").createItemStack(1)
|
||||
)
|
||||
// TODO migration: xp to xp upgrade
|
||||
// experience = nbt.getDouble(Settings.namespace + "xp")
|
||||
robotEnergy = totalEnergy
|
||||
}
|
||||
}
|
||||
|
||||
@ -99,11 +108,34 @@ object ItemUtils {
|
||||
}
|
||||
nbt.getCompoundTag("display").setString("Name", name)
|
||||
}
|
||||
nbt.setInteger(Settings.namespace + "storedEnergy", energy)
|
||||
nbt.setInteger(Settings.namespace + "storedEnergy", totalEnergy)
|
||||
nbt.setInteger(Settings.namespace + "robotEnergy", robotEnergy)
|
||||
nbt.setInteger(Settings.namespace + "tier", tier)
|
||||
nbt.setNewTagList(Settings.namespace + "components", components.toIterable)
|
||||
nbt.setNewTagList(Settings.namespace + "containers", containers.toIterable)
|
||||
}
|
||||
|
||||
def copyItemStack() = {
|
||||
val stack = super.createItemStack()
|
||||
// Forget all node addresses and so on. This is used when 'picking' a
|
||||
// robot in creative mode.
|
||||
val newInfo = new RobotData(stack)
|
||||
newInfo.components.foreach(cs => Option(api.Driver.driverFor(cs)) match {
|
||||
case Some(driver) =>
|
||||
val nbt = driver.dataTag(cs)
|
||||
nbt.getTags.toArray.foreach {
|
||||
case tag: NBTBase => nbt.removeTag(tag.getName)
|
||||
case _ =>
|
||||
}
|
||||
case _ =>
|
||||
})
|
||||
// Don't show energy info (because it's unreliable) but fill up the
|
||||
// internal buffer. This is for creative use only, anyway.
|
||||
newInfo.totalEnergy = 0
|
||||
newInfo.robotEnergy = 50000
|
||||
newInfo.save(stack)
|
||||
stack
|
||||
}
|
||||
}
|
||||
|
||||
object RobotData {
|
||||
|
Loading…
x
Reference in New Issue
Block a user