mirror of
https://github.com/MightyPirates/OpenComputers.git
synced 2025-09-15 10:21:45 -04:00
Added one-slot inventory to charger, can be used to charge tablets.
This commit is contained in:
parent
e4db950a17
commit
238ef544d5
@ -1,6 +1,6 @@
|
||||
minecraft.version=1.6.4
|
||||
forge.version=9.11.1.964
|
||||
oc.version=1.3.4
|
||||
oc.version=1.3.5
|
||||
oc.subversion=dev
|
||||
ccl.version=1.0.0.62
|
||||
fmp.version=1.0.1.268
|
||||
|
@ -442,6 +442,10 @@ opencomputers {
|
||||
# charge robots at roughly half speed.
|
||||
chargerChargeRate: 100.0
|
||||
|
||||
# The amount of energy a Charger transfers into a tablet, if present, per
|
||||
# tick. This is also based on configured charge speed, as for robots.
|
||||
chargerChargeRateTablet: 10.0
|
||||
|
||||
# The energy efficiency of the generator upgrade. At 1.0 this will
|
||||
# generate as much energy as you'd get by burning the fuel in a BuildCraft
|
||||
# Stirling Engine (1MJ per fuel value / burn ticks). To discourage fully
|
||||
@ -496,7 +500,7 @@ opencomputers {
|
||||
computer: 500.0
|
||||
|
||||
# The amount of energy robots can store in their internal buffer.
|
||||
robot: 50000.0
|
||||
robot: 20000.0
|
||||
|
||||
# The amount of energy a converter can store. This allows directly
|
||||
# connecting a converter to a distributor, without having to have a
|
||||
@ -509,6 +513,9 @@ opencomputers {
|
||||
# to exchange energy. This basically controls the bandwidth. You can
|
||||
# add capacitors between two distributors to increase this bandwidth.
|
||||
distributor: 500
|
||||
|
||||
# The amount a tablet can store in its internal buffer.
|
||||
tablet: 10000
|
||||
}
|
||||
|
||||
# Default "costs", i.e. how much energy certain operations consume.
|
||||
|
@ -166,6 +166,7 @@ oc:gui.Terminal.OutOfRange=Kein Signal.
|
||||
# Containers
|
||||
oc:container.AccessPoint=Access Point
|
||||
oc:container.Case=Computer
|
||||
oc:containertile.Charger=Ladestation
|
||||
oc:container.Disassembler=Recycler
|
||||
oc:container.DiskDrive=Diskettenlaufwerk
|
||||
oc:container.Server=Server
|
||||
|
@ -165,6 +165,7 @@ oc:gui.Terminal.OutOfRange=No signal.
|
||||
|
||||
# Containers
|
||||
oc:container.AccessPoint=Access Point
|
||||
oc:container.Charger=Charger
|
||||
oc:container.Case=Computer
|
||||
oc:container.Disassembler=Disassembler
|
||||
oc:container.DiskDrive=Disk Drive
|
||||
|
@ -78,6 +78,7 @@ oc:gui.Robot.TurnOn=Allumer
|
||||
|
||||
# Containers
|
||||
oc:container.Case=Ordinateur
|
||||
oc:container.Charger=Chargeur
|
||||
oc:container.DiskDrive=Disque dur
|
||||
oc:container.Switch=Routeur
|
||||
|
||||
|
@ -81,6 +81,7 @@ oc:gui.Robot.TurnOn=Ligar
|
||||
|
||||
# Containers
|
||||
oc:container.Case=Computador
|
||||
oc:container.Charger=Carregador
|
||||
oc:container.DiskDrive=Drive de Disquetes
|
||||
oc:container.Switch=Roteador
|
||||
|
||||
|
@ -160,6 +160,7 @@ oc:gui.Terminal.OutOfRange=Нет сигнала.
|
||||
# Containers
|
||||
oc:container.AccessPoint=Точка доступа
|
||||
oc:container.Case=Компьютер
|
||||
oc:container.Charger=Зарядник
|
||||
oc:container.Disassembler=Разборщик
|
||||
oc:container.DiskDrive=Дисковод
|
||||
oc:container.Server=Сервер
|
||||
|
@ -166,6 +166,7 @@ oc:gui.Terminal.OutOfRange=无信号.
|
||||
# Containers
|
||||
oc:container.AccessPoint=桥接器
|
||||
oc:container.Case=计算机
|
||||
oc:container.Charger=充电器
|
||||
oc:container.Disassembler=分解器
|
||||
oc:container.DiskDrive=磁盘驱动器
|
||||
oc:container.Server=服务器
|
||||
|
@ -160,6 +160,7 @@ oc:gui.Terminal.OutOfRange=沒訊號.
|
||||
# Containers
|
||||
oc:container.AccessPoint=存取點
|
||||
oc:container.Case=電腦
|
||||
oc:container.Charger=充電器
|
||||
oc:container.Disassembler=拆解機
|
||||
oc:container.DiskDrive=硬碟
|
||||
oc:container.Server=伺服器
|
||||
|
@ -127,7 +127,8 @@ class Settings(config: Config) {
|
||||
val pureIgnorePower = config.getBoolean("power.ignorePower")
|
||||
lazy val ignorePower = pureIgnorePower || !Mods.isPowerProvidingModPresent
|
||||
val tickFrequency = config.getDouble("power.tickFrequency") max 1
|
||||
val chargeRate = config.getDouble("power.chargerChargeRate")
|
||||
val chargeRateRobot = config.getDouble("power.chargerChargeRate")
|
||||
val chargeRateTablet = config.getDouble("power.chargerChargeRateTablet")
|
||||
val generatorEfficiency = config.getDouble("power.generatorEfficiency")
|
||||
val solarGeneratorEfficiency = config.getDouble("power.solarGeneratorEfficiency")
|
||||
val assemblerTickAmount = config.getDouble("power.assemblerTickAmount") max 1
|
||||
@ -148,6 +149,7 @@ class Settings(config: Config) {
|
||||
OpenComputers.log.warning("Bad number of battery upgrade buffer sizes, ignoring.")
|
||||
Array(10000.0, 15000.0, 20000.0)
|
||||
}
|
||||
val bufferTablet = config.getDouble("power.buffer.tablet") max 0
|
||||
|
||||
// power.cost
|
||||
val computerCost = config.getDouble("power.cost.computer") max 0
|
||||
|
@ -14,6 +14,8 @@ object GuiHandler extends CommonGuiHandler {
|
||||
world.getBlockTileEntity(x, y, z) match {
|
||||
case computer: tileentity.Case if id == GuiType.Case.id =>
|
||||
new gui.Case(player.inventory, computer)
|
||||
case charger: tileentity.Charger if id == GuiType.Charger.id =>
|
||||
new gui.Charger(player.inventory, charger)
|
||||
case disassembler: tileentity.Disassembler if id == GuiType.Disassembler.id =>
|
||||
new gui.Disassembler(player.inventory, disassembler)
|
||||
case drive: tileentity.DiskDrive if id == GuiType.DiskDrive.id =>
|
||||
|
@ -7,7 +7,6 @@ import li.cil.oc.client.{Textures, PacketSender => ClientPacketSender}
|
||||
import li.cil.oc.common.{container, tileentity}
|
||||
import net.minecraft.client.gui.GuiButton
|
||||
import net.minecraft.entity.player.InventoryPlayer
|
||||
import net.minecraft.util.StatCollector
|
||||
import org.lwjgl.opengl.GL11
|
||||
|
||||
class Case(playerInventory: InventoryPlayer, val computer: tileentity.Case) extends DynamicGuiContainer(new container.Case(playerInventory, computer)) {
|
||||
@ -36,7 +35,7 @@ class Case(playerInventory: InventoryPlayer, val computer: tileentity.Case) exte
|
||||
super.drawGuiContainerForegroundLayer(mouseX, mouseY)
|
||||
GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS) // Me lazy... prevents NEI render glitch.
|
||||
fontRenderer.drawString(
|
||||
StatCollector.translateToLocal(computer.getInvName),
|
||||
Localization.localizeImmediately(computer.getInvName),
|
||||
8, 6, 0x404040)
|
||||
if (powerButton.func_82252_a) {
|
||||
val tooltip = new java.util.ArrayList[String]
|
||||
|
14
src/main/scala/li/cil/oc/client/gui/Charger.scala
Normal file
14
src/main/scala/li/cil/oc/client/gui/Charger.scala
Normal file
@ -0,0 +1,14 @@
|
||||
package li.cil.oc.client.gui
|
||||
|
||||
import li.cil.oc.Localization
|
||||
import li.cil.oc.common.{container, tileentity}
|
||||
import net.minecraft.entity.player.InventoryPlayer
|
||||
|
||||
class Charger(playerInventory: InventoryPlayer, val charger: tileentity.Charger) extends DynamicGuiContainer(new container.Charger(playerInventory, charger)) {
|
||||
override def drawGuiContainerForegroundLayer(mouseX: Int, mouseY: Int) = {
|
||||
super.drawGuiContainerForegroundLayer(mouseX, mouseY)
|
||||
fontRenderer.drawString(
|
||||
Localization.localizeImmediately(charger.getInvName),
|
||||
8, 6, 0x404040)
|
||||
}
|
||||
}
|
@ -1,10 +1,10 @@
|
||||
package li.cil.oc.client.gui
|
||||
|
||||
import li.cil.oc.Localization
|
||||
import li.cil.oc.client.Textures
|
||||
import li.cil.oc.client.gui.widget.ProgressBar
|
||||
import li.cil.oc.common.{container, tileentity}
|
||||
import net.minecraft.entity.player.InventoryPlayer
|
||||
import net.minecraft.util.StatCollector
|
||||
import org.lwjgl.opengl.GL11
|
||||
|
||||
class Disassembler(playerInventory: InventoryPlayer, val disassembler: tileentity.Disassembler) extends DynamicGuiContainer(new container.Disassembler(playerInventory, disassembler)) {
|
||||
@ -14,7 +14,7 @@ class Disassembler(playerInventory: InventoryPlayer, val disassembler: tileentit
|
||||
|
||||
override def drawGuiContainerForegroundLayer(mouseX: Int, mouseY: Int) = {
|
||||
fontRenderer.drawString(
|
||||
StatCollector.translateToLocal(disassembler.getInvName),
|
||||
Localization.localizeImmediately(disassembler.getInvName),
|
||||
8, 6, 0x404040)
|
||||
}
|
||||
|
||||
|
@ -1,14 +1,14 @@
|
||||
package li.cil.oc.client.gui
|
||||
|
||||
import li.cil.oc.Localization
|
||||
import li.cil.oc.common.{container, tileentity}
|
||||
import net.minecraft.entity.player.InventoryPlayer
|
||||
import net.minecraft.util.StatCollector
|
||||
|
||||
class DiskDrive(playerInventory: InventoryPlayer, val drive: tileentity.DiskDrive) extends DynamicGuiContainer(new container.DiskDrive(playerInventory, drive)) {
|
||||
override def drawGuiContainerForegroundLayer(mouseX: Int, mouseY: Int) = {
|
||||
super.drawGuiContainerForegroundLayer(mouseX, mouseY)
|
||||
fontRenderer.drawString(
|
||||
StatCollector.translateToLocal(drive.getInvName),
|
||||
Localization.localizeImmediately(drive.getInvName),
|
||||
8, 6, 0x404040)
|
||||
}
|
||||
}
|
||||
|
@ -1,15 +1,14 @@
|
||||
package li.cil.oc.client.gui
|
||||
|
||||
import li.cil.oc.client.Textures
|
||||
import li.cil.oc.common
|
||||
import li.cil.oc.common.container.{ComponentSlot, Player}
|
||||
import li.cil.oc.util.RenderState
|
||||
import li.cil.oc.util.mods.NEI
|
||||
import li.cil.oc.{Localization, common}
|
||||
import net.minecraft.client.renderer.Tessellator
|
||||
import net.minecraft.client.renderer.texture.TextureMap
|
||||
import net.minecraft.inventory.{Container, Slot}
|
||||
import net.minecraft.item.ItemStack
|
||||
import net.minecraft.util.StatCollector
|
||||
import org.lwjgl.opengl.GL11
|
||||
|
||||
import scala.collection.convert.WrapAsScala._
|
||||
@ -21,7 +20,7 @@ abstract class DynamicGuiContainer(container: Container) extends CustomGuiContai
|
||||
|
||||
override protected def drawGuiContainerForegroundLayer(mouseX: Int, mouseY: Int) {
|
||||
fontRenderer.drawString(
|
||||
StatCollector.translateToLocal("container.inventory"),
|
||||
Localization.localizeImmediately("container.inventory"),
|
||||
8, ySize - 96 + 2, 0x404040)
|
||||
}
|
||||
|
||||
|
@ -1,11 +1,11 @@
|
||||
package li.cil.oc.client.gui
|
||||
|
||||
import li.cil.oc.Localization
|
||||
import li.cil.oc.client.Textures
|
||||
import li.cil.oc.common.container
|
||||
import li.cil.oc.common.inventory.ServerInventory
|
||||
import net.minecraft.entity.player.InventoryPlayer
|
||||
import net.minecraft.inventory.Slot
|
||||
import net.minecraft.util.StatCollector
|
||||
import org.lwjgl.opengl.GL11
|
||||
|
||||
class Server(playerInventory: InventoryPlayer, serverInventory: ServerInventory) extends DynamicGuiContainer(new container.Server(playerInventory, serverInventory)) {
|
||||
@ -13,7 +13,7 @@ class Server(playerInventory: InventoryPlayer, serverInventory: ServerInventory)
|
||||
override def drawGuiContainerForegroundLayer(mouseX: Int, mouseY: Int) = {
|
||||
super.drawGuiContainerForegroundLayer(mouseX, mouseY)
|
||||
fontRenderer.drawString(
|
||||
StatCollector.translateToLocal(serverInventory.getInvName),
|
||||
Localization.localizeImmediately(serverInventory.getInvName),
|
||||
8, 6, 0x404040)
|
||||
}
|
||||
|
||||
|
@ -8,7 +8,6 @@ import li.cil.oc.{Localization, Settings}
|
||||
import net.minecraft.client.gui.{GuiButton, GuiScreen}
|
||||
import net.minecraft.client.renderer.Tessellator
|
||||
import net.minecraft.entity.player.InventoryPlayer
|
||||
import net.minecraft.util.StatCollector
|
||||
import net.minecraftforge.common.ForgeDirection
|
||||
import org.lwjgl.opengl.GL11
|
||||
|
||||
@ -96,7 +95,7 @@ class ServerRack(playerInventory: InventoryPlayer, val rack: tileentity.ServerRa
|
||||
GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS) // Prevents NEI render glitch.
|
||||
|
||||
fontRenderer.drawString(
|
||||
StatCollector.translateToLocal(rack.getInvName),
|
||||
Localization.localizeImmediately(rack.getInvName),
|
||||
8, 6, 0x404040)
|
||||
|
||||
val rangeY = 39
|
||||
|
@ -5,7 +5,6 @@ import java.text.DecimalFormat
|
||||
import li.cil.oc.Localization
|
||||
import li.cil.oc.common.{container, tileentity}
|
||||
import net.minecraft.entity.player.InventoryPlayer
|
||||
import net.minecraft.util.StatCollector
|
||||
|
||||
class Switch(playerInventory: InventoryPlayer, val switch: tileentity.Switch) extends DynamicGuiContainer(new container.Switch(playerInventory, switch)) {
|
||||
private val switchContainer = inventorySlots.asInstanceOf[container.Switch]
|
||||
@ -14,7 +13,7 @@ class Switch(playerInventory: InventoryPlayer, val switch: tileentity.Switch) ex
|
||||
override def drawGuiContainerForegroundLayer(mouseX: Int, mouseY: Int) = {
|
||||
super.drawGuiContainerForegroundLayer(mouseX, mouseY)
|
||||
fontRenderer.drawString(
|
||||
StatCollector.translateToLocal(switch.getInvName),
|
||||
Localization.localizeImmediately(switch.getInvName),
|
||||
8, 6, 0x404040)
|
||||
|
||||
fontRenderer.drawString(
|
||||
|
@ -9,6 +9,8 @@ import net.minecraft.world.World
|
||||
abstract class GuiHandler extends IGuiHandler {
|
||||
override def getServerGuiElement(id: Int, player: EntityPlayer, world: World, x: Int, y: Int, z: Int) =
|
||||
world.getBlockTileEntity(x, y, z) match {
|
||||
case charger: tileentity.Charger if id == GuiType.Charger.id =>
|
||||
new container.Charger(player.inventory, charger)
|
||||
case computer: tileentity.Case if id == GuiType.Case.id =>
|
||||
new container.Case(player.inventory, computer)
|
||||
case disassembler: tileentity.Disassembler if id == GuiType.Disassembler.id =>
|
||||
|
@ -4,6 +4,7 @@ object GuiType extends Enumeration {
|
||||
val
|
||||
|
||||
Case,
|
||||
Charger,
|
||||
Disassembler,
|
||||
DiskDrive,
|
||||
Rack,
|
||||
|
@ -4,10 +4,10 @@ import java.util
|
||||
|
||||
import cpw.mods.fml.common.Optional
|
||||
import li.cil.oc.client.Textures
|
||||
import li.cil.oc.common.tileentity
|
||||
import li.cil.oc.common.{GuiType, tileentity}
|
||||
import li.cil.oc.server.PacketSender
|
||||
import li.cil.oc.util.mods.{BuildCraft, Mods}
|
||||
import li.cil.oc.{Localization, Settings}
|
||||
import li.cil.oc.{Localization, OpenComputers, Settings}
|
||||
import mcp.mobius.waila.api.{IWailaConfigHandler, IWailaDataAccessor}
|
||||
import net.minecraft.entity.player.EntityPlayer
|
||||
import net.minecraft.item.ItemStack
|
||||
@ -45,14 +45,23 @@ class Charger(val parent: SimpleDelegator) extends RedstoneAware with SimpleDele
|
||||
|
||||
override def rightClick(world: World, x: Int, y: Int, z: Int, player: EntityPlayer, side: ForgeDirection, hitX: Float, hitY: Float, hitZ: Float) =
|
||||
world.getBlockTileEntity(x, y, z) match {
|
||||
case charger: tileentity.Charger if BuildCraft.holdsApplicableWrench(player, x, y, z) =>
|
||||
if (!world.isRemote) {
|
||||
charger.invertSignal = !charger.invertSignal
|
||||
charger.chargeSpeed = 1.0 - charger.chargeSpeed
|
||||
PacketSender.sendChargerState(charger)
|
||||
BuildCraft.wrenchUsed(player, x, y, z)
|
||||
case charger: tileentity.Charger =>
|
||||
if (BuildCraft.holdsApplicableWrench(player, x, y, z)) {
|
||||
if (!world.isRemote) {
|
||||
charger.invertSignal = !charger.invertSignal
|
||||
charger.chargeSpeed = 1.0 - charger.chargeSpeed
|
||||
PacketSender.sendChargerState(charger)
|
||||
BuildCraft.wrenchUsed(player, x, y, z)
|
||||
}
|
||||
true
|
||||
}
|
||||
true
|
||||
else if (!player.isSneaking) {
|
||||
if (!world.isRemote) {
|
||||
player.openGui(OpenComputers, GuiType.Charger.id, world, x, y, z)
|
||||
}
|
||||
true
|
||||
}
|
||||
else false
|
||||
case _ => super.rightClick(world, x, y, z, player, side, hitX, hitY, hitZ)
|
||||
}
|
||||
|
||||
|
@ -9,7 +9,7 @@ import li.cil.oc.client.KeyBindings
|
||||
import li.cil.oc.common.tileentity.traits.{BundledRedstoneAware, Colored, Rotatable}
|
||||
import li.cil.oc.util.mods.Mods
|
||||
import li.cil.oc.util.{Color, ItemCosts, SideTracker}
|
||||
import li.cil.oc.{CreativeTab, Settings}
|
||||
import li.cil.oc.{CreativeTab, Localization, Settings}
|
||||
import net.minecraft.block.Block
|
||||
import net.minecraft.block.material.Material
|
||||
import net.minecraft.client.renderer.texture.IconRegister
|
||||
@ -18,7 +18,7 @@ import net.minecraft.entity.player.EntityPlayer
|
||||
import net.minecraft.entity.{Entity, EntityLivingBase, EnumCreatureType}
|
||||
import net.minecraft.item.{ItemBlock, ItemStack}
|
||||
import net.minecraft.tileentity.TileEntity
|
||||
import net.minecraft.util.{AxisAlignedBB, MovingObjectPosition, StatCollector, Vec3}
|
||||
import net.minecraft.util.{AxisAlignedBB, MovingObjectPosition, Vec3}
|
||||
import net.minecraft.world.{IBlockAccess, World}
|
||||
import net.minecraftforge.common.ForgeDirection
|
||||
import org.lwjgl.input
|
||||
@ -366,7 +366,7 @@ class Delegator[Child <: Delegate](id: Int) extends Block(id, Material.iron) {
|
||||
ItemCosts.addTooltip(stack, tooltip.asInstanceOf[util.List[String]])
|
||||
}
|
||||
else {
|
||||
tooltip.add(StatCollector.translateToLocalFormatted(
|
||||
tooltip.add(Localization.localizeImmediately(
|
||||
Settings.namespace + "tooltip.MaterialCosts",
|
||||
input.Keyboard.getKeyName(KeyBindings.materialCosts.keyCode)))
|
||||
}
|
||||
|
9
src/main/scala/li/cil/oc/common/container/Charger.scala
Normal file
9
src/main/scala/li/cil/oc/common/container/Charger.scala
Normal file
@ -0,0 +1,9 @@
|
||||
package li.cil.oc.common.container
|
||||
|
||||
import li.cil.oc.common.tileentity
|
||||
import net.minecraft.entity.player.InventoryPlayer
|
||||
|
||||
class Charger(playerInventory: InventoryPlayer, charger: tileentity.Charger) extends Player(playerInventory, charger) {
|
||||
addSlotToContainer(80, 35, "tablet")
|
||||
addPlayerInventorySlots(8, 84)
|
||||
}
|
@ -5,11 +5,10 @@ import java.util
|
||||
import cpw.mods.fml.relauncher.{Side, SideOnly}
|
||||
import li.cil.oc.client.KeyBindings
|
||||
import li.cil.oc.util.{ItemCosts, Rarity, Tooltip}
|
||||
import li.cil.oc.{Settings, api}
|
||||
import li.cil.oc.{Localization, Settings, api}
|
||||
import net.minecraft.entity.Entity
|
||||
import net.minecraft.entity.player.EntityPlayer
|
||||
import net.minecraft.item.ItemStack
|
||||
import net.minecraft.util.StatCollector
|
||||
import net.minecraft.world.World
|
||||
import org.lwjgl.input
|
||||
|
||||
@ -87,7 +86,7 @@ trait Delegate {
|
||||
ItemCosts.addTooltip(stack, tooltip.asInstanceOf[util.List[String]])
|
||||
}
|
||||
else {
|
||||
tooltip.add(StatCollector.translateToLocalFormatted(
|
||||
tooltip.add(Localization.localizeImmediately(
|
||||
Settings.namespace + "tooltip.MaterialCosts",
|
||||
input.Keyboard.getKeyName(KeyBindings.materialCosts.keyCode)))
|
||||
}
|
||||
|
@ -122,11 +122,11 @@ class TabletWrapper(var stack: ItemStack, var holder: EntityPlayer) extends Comp
|
||||
def readFromNBT() {
|
||||
if (stack.hasTagCompound) {
|
||||
val data = stack.getTagCompound
|
||||
load(data)
|
||||
if (!world.isRemote) {
|
||||
computer.load(data.getCompoundTag(Settings.namespace + "data"))
|
||||
tablet.load(data.getCompoundTag(Settings.namespace + "component"))
|
||||
}
|
||||
load(data)
|
||||
}
|
||||
}
|
||||
|
||||
@ -153,6 +153,8 @@ class TabletWrapper(var stack: ItemStack, var holder: EntityPlayer) extends Comp
|
||||
if (!world.isRemote) {
|
||||
api.Network.joinNewNetwork(computer.node)
|
||||
computer.stop()
|
||||
val charge = math.max(0, this.data.energy - tablet.node.globalBuffer)
|
||||
tablet.node.changeBuffer(charge)
|
||||
writeToNBT()
|
||||
}
|
||||
|
||||
|
@ -2,13 +2,16 @@ package li.cil.oc.common.tileentity
|
||||
|
||||
import cpw.mods.fml.relauncher.{Side, SideOnly}
|
||||
import li.cil.oc.api.network.{Analyzable, Node, Visibility}
|
||||
import li.cil.oc.common.item.Tablet
|
||||
import li.cil.oc.server.{PacketSender => ServerPacketSender}
|
||||
import li.cil.oc.util.ItemUtils
|
||||
import li.cil.oc.{Localization, Settings, api}
|
||||
import net.minecraft.entity.player.EntityPlayer
|
||||
import net.minecraft.item.ItemStack
|
||||
import net.minecraft.nbt.NBTTagCompound
|
||||
import net.minecraftforge.common.ForgeDirection
|
||||
|
||||
class Charger extends traits.Environment with traits.PowerAcceptor with traits.RedstoneAware with traits.Rotatable with Analyzable {
|
||||
class Charger extends traits.Environment with traits.PowerAcceptor with traits.RedstoneAware with traits.Rotatable with traits.Inventory with Analyzable {
|
||||
val node = api.Network.newNode(this, Visibility.None).
|
||||
withConnector(Settings.get.bufferConverter).
|
||||
create()
|
||||
@ -39,8 +42,8 @@ class Charger extends traits.Environment with traits.PowerAcceptor with traits.R
|
||||
|
||||
override def updateEntity() {
|
||||
super.updateEntity()
|
||||
if (isServer) {
|
||||
val charge = Settings.get.chargeRate * chargeSpeed
|
||||
if (isServer && world.getWorldInfo.getWorldTotalTime % Settings.get.tickFrequency == 0) {
|
||||
val charge = Settings.get.chargeRateRobot * chargeSpeed * Settings.get.tickFrequency
|
||||
val canCharge = charge > 0 && node.globalBuffer >= charge
|
||||
if (hasPower && !canCharge) {
|
||||
hasPower = false
|
||||
@ -53,8 +56,35 @@ class Charger extends traits.Environment with traits.PowerAcceptor with traits.R
|
||||
if (canCharge) robots.collect {
|
||||
case Some(proxy) => node.changeBuffer(proxy.robot.bot.node.changeBuffer(charge + node.changeBuffer(-charge)))
|
||||
}
|
||||
|
||||
// Charge tablet if present.
|
||||
if (getStackInSlot(0) != null && chargeSpeed > 0) {
|
||||
def tryCharge(energy: Double, maxEnergy: Double, handler: (Double) => Unit) {
|
||||
if (energy < maxEnergy) {
|
||||
val itemCharge = math.min(maxEnergy - energy, Settings.get.chargeRateTablet * chargeSpeed * Settings.get.tickFrequency)
|
||||
node.tryChangeBuffer(-itemCharge)
|
||||
handler(itemCharge)
|
||||
}
|
||||
}
|
||||
val stack = getStackInSlot(0)
|
||||
Option(Tablet.Server.cache.getIfPresent(Tablet.getId(stack))) match {
|
||||
case Some(tablet) =>
|
||||
tryCharge(tablet.tablet.node.globalBuffer, tablet.tablet.node.globalBufferSize, (amount) => {
|
||||
tablet.tablet.node.changeBuffer(amount)
|
||||
tablet.data.energy = tablet.tablet.node.globalBuffer
|
||||
tablet.data.maxEnergy = tablet.tablet.node.globalBufferSize
|
||||
tablet.writeToNBT()
|
||||
})
|
||||
case _ =>
|
||||
val data = new ItemUtils.TabletData(getStackInSlot(0))
|
||||
tryCharge(data.energy, data.maxEnergy, (amount) => {
|
||||
data.energy = math.min(data.maxEnergy, data.energy + amount)
|
||||
data.save(getStackInSlot(0))
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (chargeSpeed > 0 && hasPower && world.getWorldInfo.getWorldTotalTime % 10 == 0) {
|
||||
else if (isClient && chargeSpeed > 0 && hasPower && world.getWorldInfo.getWorldTotalTime % 10 == 0) {
|
||||
ForgeDirection.VALID_DIRECTIONS.map(side => world.getBlockTileEntity(x + side.offsetX, y + side.offsetY, z + side.offsetZ)).collect {
|
||||
case proxy: RobotProxy if proxy.globalBuffer / proxy.globalBufferSize < 0.95 =>
|
||||
val theta = world.rand.nextDouble * Math.PI
|
||||
@ -105,6 +135,15 @@ class Charger extends traits.Environment with traits.PowerAcceptor with traits.R
|
||||
|
||||
// ----------------------------------------------------------------------- //
|
||||
|
||||
override def getSizeInventory = 1
|
||||
|
||||
override def getInventoryStackLimit = 1
|
||||
|
||||
override def isItemValidForSlot(slot: Int, stack: ItemStack) =
|
||||
slot == 0 && api.Items.get(stack) == api.Items.get("tablet")
|
||||
|
||||
// ----------------------------------------------------------------------- //
|
||||
|
||||
override protected def updateRedstoneInput(side: ForgeDirection) {
|
||||
super.updateRedstoneInput(side)
|
||||
val signal = math.max(0, math.min(15, ForgeDirection.VALID_DIRECTIONS.map(input).max))
|
||||
|
@ -9,7 +9,7 @@ import li.cil.oc.common.item.TabletWrapper
|
||||
class Tablet(val tablet: TabletWrapper) extends component.ManagedComponent {
|
||||
val node = Network.newNode(this, Visibility.Network).
|
||||
withComponent("tablet").
|
||||
withConnector(Settings.get.bufferRobot).
|
||||
withConnector(Settings.get.bufferTablet).
|
||||
create()
|
||||
|
||||
// ----------------------------------------------------------------------- //
|
||||
|
@ -50,10 +50,10 @@ trait Connector extends network.Connector with Node {
|
||||
}
|
||||
else 0
|
||||
if (localBuffer != oldBuffer) {
|
||||
this.synchronized(distributor match {
|
||||
distributor match {
|
||||
case Some(d) => d.globalBuffer = math.max(0, math.min(d.globalBufferSize, d.globalBuffer - oldBuffer + localBuffer))
|
||||
case _ =>
|
||||
})
|
||||
}
|
||||
}
|
||||
remaining
|
||||
}
|
||||
@ -69,11 +69,11 @@ trait Connector extends network.Connector with Node {
|
||||
localBuffer = localBufferSize
|
||||
}
|
||||
val newGlobalBuffer = globalBuffer + delta
|
||||
newGlobalBuffer >= 0 && newGlobalBuffer <= globalBufferSize && d.changeBuffer(delta) == 0
|
||||
(delta > 0 || newGlobalBuffer >= 0) && (delta < 0 || newGlobalBuffer <= globalBufferSize) && d.changeBuffer(delta) == 0
|
||||
}
|
||||
case _ =>
|
||||
val newLocalBuffer = localBuffer + delta
|
||||
if (newLocalBuffer < 0 || newLocalBuffer > localBufferSize) {
|
||||
if ((delta < 0 && newLocalBuffer < 0) || (delta > 0 && newLocalBuffer > localBufferSize)) {
|
||||
false
|
||||
}
|
||||
else {
|
||||
|
Loading…
x
Reference in New Issue
Block a user