mirror of
https://github.com/MightyPirates/OpenComputers.git
synced 2025-09-14 09:46:53 -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.CollectRobot=Roboter entnehmen
|
||||||
oc:gui.RobotAssembler.Complexity=Komplexität: %s/%s
|
oc:gui.RobotAssembler.Complexity=Komplexität: %s/%s
|
||||||
oc:gui.RobotAssembler.InsertCase=Computergehäuse einlegen
|
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.RobotAssembler.Run=Zusammenbauen
|
||||||
oc:gui.ServerRack.None=Keine
|
oc:gui.ServerRack.None=Keine
|
||||||
oc:gui.ServerRack.Back=Hinten
|
oc:gui.ServerRack.Back=Hinten
|
||||||
|
@ -125,7 +125,7 @@ oc:gui.Robot.TurnOn=Turn on
|
|||||||
oc:gui.RobotAssembler.CollectRobot=Collect robot
|
oc:gui.RobotAssembler.CollectRobot=Collect robot
|
||||||
oc:gui.RobotAssembler.Complexity=Complexity: %s/%s
|
oc:gui.RobotAssembler.Complexity=Complexity: %s/%s
|
||||||
oc:gui.RobotAssembler.InsertCase=Insert a Computer Case
|
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.RobotAssembler.Run=Assemble
|
||||||
oc:gui.ServerRack.None=None
|
oc:gui.ServerRack.None=None
|
||||||
oc:gui.ServerRack.Back=Back
|
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")) {
|
if (stack.getTagCompound.hasKey(Settings.namespace + "storedEnergy")) {
|
||||||
val energy = stack.getTagCompound.getInteger(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)
|
@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) =
|
override def pick(target: MovingObjectPosition, world: World, x: Int, y: Int, z: Int) =
|
||||||
world.getBlockTileEntity(x, y, z) match {
|
world.getBlockTileEntity(x, y, z) match {
|
||||||
case proxy: tileentity.RobotProxy => proxy.robot.info.createItemStack()
|
case proxy: tileentity.RobotProxy => proxy.robot.info.copyItemStack()
|
||||||
case _ => null
|
case _ => null
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -160,6 +161,7 @@ class RobotProxy(val parent: SpecialDelegator) extends RedstoneAware with Specia
|
|||||||
case Some((robot, owner)) =>
|
case Some((robot, owner)) =>
|
||||||
robot.owner = owner
|
robot.owner = owner
|
||||||
robot.info.load(stack)
|
robot.info.load(stack)
|
||||||
|
robot.bot.node.changeBuffer(robot.info.robotEnergy - robot.bot.node.localBuffer)
|
||||||
robot.updateInventorySize()
|
robot.updateInventorySize()
|
||||||
robot.updateMaxComponentCount()
|
robot.updateMaxComponentCount()
|
||||||
case _ =>
|
case _ =>
|
||||||
|
@ -84,7 +84,7 @@ class Disassembler extends traits.Environment with traits.Inventory {
|
|||||||
queue += api.Items.get("case" + (info.tier + 1)).createItemStack(1)
|
queue += api.Items.get("case" + (info.tier + 1)).createItemStack(1)
|
||||||
queue ++= info.containers
|
queue ++= info.containers
|
||||||
queue ++= info.components
|
queue ++= info.components
|
||||||
node.changeBuffer(info.energy)
|
node.changeBuffer(info.robotEnergy)
|
||||||
}
|
}
|
||||||
|
|
||||||
private def enqueueServer(server: ItemStack, serverTier: Int) {
|
private def enqueueServer(server: ItemStack, serverTier: Int) {
|
||||||
|
@ -264,6 +264,8 @@ class Robot(val isRemote: Boolean) extends traits.Computer with traits.PowerInfo
|
|||||||
if (isServer) {
|
if (isServer) {
|
||||||
globalBuffer = bot.node.globalBuffer
|
globalBuffer = bot.node.globalBuffer
|
||||||
globalBufferSize = bot.node.globalBufferSize
|
globalBufferSize = bot.node.globalBufferSize
|
||||||
|
info.totalEnergy = globalBuffer.toInt
|
||||||
|
info.robotEnergy = bot.node.localBuffer.toInt
|
||||||
updatePowerInformation()
|
updatePowerInformation()
|
||||||
}
|
}
|
||||||
else if (isRunning && isAnimatingMove) {
|
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")
|
swingingTool = nbt.getBoolean(Settings.namespace + "swingingTool")
|
||||||
turnAxis = nbt.getByte(Settings.namespace + "turnAxis")
|
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).
|
// 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)
|
super.onConnect(node)
|
||||||
if (node == this.node) {
|
if (node == this.node) {
|
||||||
node.connect(bot.node)
|
node.connect(bot.node)
|
||||||
|
node.asInstanceOf[Connector].setLocalBufferSize(0)
|
||||||
|
|
||||||
// There's a chance the server sends a robot tile entity to its clients
|
// 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
|
// 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()
|
val data = new ItemUtils.RobotData()
|
||||||
data.name = ItemUtils.RobotData.randomName
|
data.name = ItemUtils.RobotData.randomName
|
||||||
data.energy = 50000
|
data.robotEnergy = 50000
|
||||||
|
data.totalEnergy = data.robotEnergy
|
||||||
data.containers = items.take(4).drop(1).collect {
|
data.containers = items.take(4).drop(1).collect {
|
||||||
case Some(item) => item
|
case Some(item) => item
|
||||||
}
|
}
|
||||||
|
@ -38,7 +38,7 @@ class UpgradeInventoryController(val owner: TileEntity with Robot) extends Manag
|
|||||||
val slot = args.checkSlot(inventory, 1)
|
val slot = args.checkSlot(inventory, 1)
|
||||||
if (!InventoryUtils.insertIntoInventorySlot(stack, inventory, facing.getOpposite, slot, count)) {
|
if (!InventoryUtils.insertIntoInventorySlot(stack, inventory, facing.getOpposite, slot, count)) {
|
||||||
// Cannot drop into that inventory.
|
// Cannot drop into that inventory.
|
||||||
return result(false, "inventory full")
|
return result(false, "inventory full/invalid slot")
|
||||||
}
|
}
|
||||||
else if (stack.stackSize == 0) {
|
else if (stack.stackSize == 0) {
|
||||||
// Dropped whole stack.
|
// Dropped whole stack.
|
||||||
|
@ -35,11 +35,6 @@ class CompoundBlockDriver(val blocks: driver.Block*) extends driver.Block {
|
|||||||
case named: NamedBlock => return named.preferredName
|
case named: NamedBlock => return named.preferredName
|
||||||
case _ =>
|
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 {
|
try world.getBlockTileEntity(x, y, z) match {
|
||||||
case inventory: IInventory if !Strings.isNullOrEmpty(inventory.getInvName) => return inventory.getInvName.stripPrefix("container.")
|
case inventory: IInventory if !Strings.isNullOrEmpty(inventory.getInvName) => return inventory.getInvName.stripPrefix("container.")
|
||||||
} catch {
|
} catch {
|
||||||
|
@ -1,15 +1,17 @@
|
|||||||
package li.cil.oc.util
|
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 com.google.common.base.Strings
|
||||||
import scala.io.Source
|
|
||||||
import java.util.logging.Level
|
import java.util.logging.Level
|
||||||
|
import li.cil.oc.{OpenComputers, Blocks, Settings, api}
|
||||||
import li.cil.oc.api.Persistable
|
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 net.minecraft.world.World
|
||||||
|
import scala.io.Source
|
||||||
|
import scala.collection.convert.WrapAsScala._
|
||||||
|
|
||||||
object ItemUtils {
|
object ItemUtils {
|
||||||
def caseTier(stack: ItemStack) = {
|
def caseTier(stack: ItemStack) = {
|
||||||
@ -49,7 +51,11 @@ object ItemUtils {
|
|||||||
|
|
||||||
var name = ""
|
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
|
var tier = 0
|
||||||
|
|
||||||
@ -64,7 +70,8 @@ object ItemUtils {
|
|||||||
if (Strings.isNullOrEmpty(name)) {
|
if (Strings.isNullOrEmpty(name)) {
|
||||||
name = RobotData.randomName
|
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")) {
|
if (nbt.hasKey(Settings.namespace + "components")) {
|
||||||
tier = nbt.getInteger(Settings.namespace + "tier")
|
tier = nbt.getInteger(Settings.namespace + "tier")
|
||||||
components = nbt.getTagList(Settings.namespace + "components").map(ItemStack.loadItemStackFromNBT).toArray
|
components = nbt.getTagList(Settings.namespace + "components").map(ItemStack.loadItemStackFromNBT).toArray
|
||||||
@ -73,11 +80,14 @@ object ItemUtils {
|
|||||||
else {
|
else {
|
||||||
// Old robot, upgrade to new modular model.
|
// Old robot, upgrade to new modular model.
|
||||||
tier = 0
|
tier = 0
|
||||||
|
val experienceUpgrade = api.Items.get("experienceUpgrade").createItemStack(1)
|
||||||
|
UpgradeExperience.dataTag(experienceUpgrade).setDouble(Settings.namespace + "xp", nbt.getDouble(Settings.namespace + "xp"))
|
||||||
components = Array(
|
components = Array(
|
||||||
api.Items.get("screen1").createItemStack(1),
|
api.Items.get("screen1").createItemStack(1),
|
||||||
api.Items.get("keyboard").createItemStack(1),
|
api.Items.get("keyboard").createItemStack(1),
|
||||||
api.Items.get("inventoryUpgrade").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("graphicsCard1").createItemStack(1),
|
||||||
api.Items.get("cpu1").createItemStack(1),
|
api.Items.get("cpu1").createItemStack(1),
|
||||||
api.Items.get("ram2").createItemStack(1)
|
api.Items.get("ram2").createItemStack(1)
|
||||||
@ -87,8 +97,7 @@ object ItemUtils {
|
|||||||
api.Items.get("upgradeContainer3").createItemStack(1),
|
api.Items.get("upgradeContainer3").createItemStack(1),
|
||||||
api.Items.get("diskDrive").createItemStack(1)
|
api.Items.get("diskDrive").createItemStack(1)
|
||||||
)
|
)
|
||||||
// TODO migration: xp to xp upgrade
|
robotEnergy = totalEnergy
|
||||||
// experience = nbt.getDouble(Settings.namespace + "xp")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -99,11 +108,34 @@ object ItemUtils {
|
|||||||
}
|
}
|
||||||
nbt.getCompoundTag("display").setString("Name", name)
|
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.setInteger(Settings.namespace + "tier", tier)
|
||||||
nbt.setNewTagList(Settings.namespace + "components", components.toIterable)
|
nbt.setNewTagList(Settings.namespace + "components", components.toIterable)
|
||||||
nbt.setNewTagList(Settings.namespace + "containers", containers.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 {
|
object RobotData {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user