mirror of
https://github.com/MightyPirates/OpenComputers.git
synced 2025-09-29 07:51:12 -04:00
Merge branch 'master' of github.com:MightyPirates/OpenComputers into MC1.7
Conflicts: src/main/scala/li/cil/oc/client/PacketHandler.scala src/main/scala/li/cil/oc/client/renderer/PetRenderer.scala src/main/scala/li/cil/oc/common/EventHandler.scala src/main/scala/li/cil/oc/common/Proxy.scala src/main/scala/li/cil/oc/common/tileentity/traits/Environment.scala src/main/scala/li/cil/oc/server/PacketHandler.scala
This commit is contained in:
commit
8f0eaeae09
@ -1,4 +1,6 @@
|
|||||||
do
|
do
|
||||||
|
_G._OSVERSION = "OpenOS 1.2"
|
||||||
|
|
||||||
local component = component
|
local component = component
|
||||||
local computer = computer
|
local computer = computer
|
||||||
local unicode = unicode
|
local unicode = unicode
|
||||||
|
@ -249,7 +249,6 @@ sandbox = {
|
|||||||
traceback = debug.traceback
|
traceback = debug.traceback
|
||||||
},
|
},
|
||||||
|
|
||||||
_OSVERSION = "OpenOS 1.2",
|
|
||||||
checkArg = checkArg
|
checkArg = checkArg
|
||||||
}
|
}
|
||||||
sandbox._G = sandbox
|
sandbox._G = sandbox
|
||||||
@ -622,7 +621,7 @@ local function bootstrap()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
if not init then
|
if not init then
|
||||||
error("no bootable medium found" .. (reason and (": " .. tostring(reason)) or ""))
|
error("no bootable medium found" .. (reason and (": " .. tostring(reason)) or ""), 0)
|
||||||
end
|
end
|
||||||
|
|
||||||
return coroutine.create(init), {n=0}
|
return coroutine.create(init), {n=0}
|
||||||
|
@ -820,5 +820,8 @@ opencomputers {
|
|||||||
# on computers' save and load performance, so you should not enable
|
# on computers' save and load performance, so you should not enable
|
||||||
# this unless you're asked to.
|
# this unless you're asked to.
|
||||||
verbosePersistenceErrors: false
|
verbosePersistenceErrors: false
|
||||||
|
|
||||||
|
# Whether to not show your special thinger (if you have one you know it).
|
||||||
|
hideOwnSpecial: false
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -210,6 +210,7 @@ class Settings(config: Config) {
|
|||||||
val geolyzerRange = config.getInt("misc.geolyzerRange")
|
val geolyzerRange = config.getInt("misc.geolyzerRange")
|
||||||
val disassembleAllTheThings = config.getBoolean("misc.disassembleAllTheThings")
|
val disassembleAllTheThings = config.getBoolean("misc.disassembleAllTheThings")
|
||||||
val disassemblerBreakChance = config.getDouble("misc.disassemblerBreakChance") max 0 min 1
|
val disassemblerBreakChance = config.getDouble("misc.disassemblerBreakChance") max 0 min 1
|
||||||
|
val hideOwnPet = config.getBoolean("misc.hideOwnSpecial")
|
||||||
}
|
}
|
||||||
|
|
||||||
object Settings {
|
object Settings {
|
||||||
|
@ -4,6 +4,7 @@ import cpw.mods.fml.common.eventhandler.SubscribeEvent
|
|||||||
import cpw.mods.fml.common.network.FMLNetworkEvent.ClientCustomPacketEvent
|
import cpw.mods.fml.common.network.FMLNetworkEvent.ClientCustomPacketEvent
|
||||||
import li.cil.oc.{Localization, Settings}
|
import li.cil.oc.{Localization, Settings}
|
||||||
import li.cil.oc.api.component
|
import li.cil.oc.api.component
|
||||||
|
import li.cil.oc.client.renderer.PetRenderer
|
||||||
import li.cil.oc.common.tileentity._
|
import li.cil.oc.common.tileentity._
|
||||||
import li.cil.oc.common.tileentity.traits._
|
import li.cil.oc.common.tileentity.traits._
|
||||||
import li.cil.oc.common.{PacketType, PacketHandler => CommonPacketHandler}
|
import li.cil.oc.common.{PacketType, PacketHandler => CommonPacketHandler}
|
||||||
@ -40,6 +41,7 @@ object PacketHandler extends CommonPacketHandler {
|
|||||||
case PacketType.HologramPowerChange => onHologramPowerChange(p)
|
case PacketType.HologramPowerChange => onHologramPowerChange(p)
|
||||||
case PacketType.HologramScale => onHologramScale(p)
|
case PacketType.HologramScale => onHologramScale(p)
|
||||||
case PacketType.HologramSet => onHologramSet(p)
|
case PacketType.HologramSet => onHologramSet(p)
|
||||||
|
case PacketType.PetVisibility => onPetVisibility(p)
|
||||||
case PacketType.PowerState => onPowerState(p)
|
case PacketType.PowerState => onPowerState(p)
|
||||||
case PacketType.RedstoneState => onRedstoneState(p)
|
case PacketType.RedstoneState => onRedstoneState(p)
|
||||||
case PacketType.RobotAnimateSwing => onRobotAnimateSwing(p)
|
case PacketType.RobotAnimateSwing => onRobotAnimateSwing(p)
|
||||||
@ -178,6 +180,19 @@ object PacketHandler extends CommonPacketHandler {
|
|||||||
case _ => // Invalid packet.
|
case _ => // Invalid packet.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def onPetVisibility(p: PacketParser) {
|
||||||
|
val count = p.readInt()
|
||||||
|
for (i <- 0 until count) {
|
||||||
|
val name = p.readUTF()
|
||||||
|
if (p.readBoolean()) {
|
||||||
|
PetRenderer.hidden -= name
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
PetRenderer.hidden += name
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
def onPowerState(p: PacketParser) =
|
def onPowerState(p: PacketParser) =
|
||||||
p.readTileEntity[PowerInformation]() match {
|
p.readTileEntity[PowerInformation]() match {
|
||||||
case Some(t) =>
|
case Some(t) =>
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package li.cil.oc.client
|
package li.cil.oc.client
|
||||||
|
|
||||||
|
import li.cil.oc.Settings
|
||||||
import li.cil.oc.common.tileentity._
|
import li.cil.oc.common.tileentity._
|
||||||
import li.cil.oc.common.tileentity.traits.Computer
|
import li.cil.oc.common.tileentity.traits.Computer
|
||||||
import li.cil.oc.common.{CompressedPacketBuilder, PacketBuilder, PacketType}
|
import li.cil.oc.common.{CompressedPacketBuilder, PacketBuilder, PacketType}
|
||||||
@ -100,6 +101,14 @@ object PacketSender {
|
|||||||
pb.sendToServer()
|
pb.sendToServer()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def sendPetVisibility() {
|
||||||
|
val pb = new PacketBuilder(PacketType.PetVisibility)
|
||||||
|
|
||||||
|
pb.writeBoolean(!Settings.get.hideOwnPet)
|
||||||
|
|
||||||
|
pb.sendToServer()
|
||||||
|
}
|
||||||
|
|
||||||
def sendRobotAssemblerStart(t: RobotAssembler) {
|
def sendRobotAssemblerStart(t: RobotAssembler) {
|
||||||
val pb = new PacketBuilder(PacketType.RobotAssemblerStart)
|
val pb = new PacketBuilder(PacketType.RobotAssemblerStart)
|
||||||
|
|
||||||
|
@ -24,8 +24,9 @@ trait TextBuffer extends GuiScreen {
|
|||||||
|
|
||||||
protected def bufferY: Int
|
protected def bufferY: Int
|
||||||
|
|
||||||
protected var currentWidth, currentHeight = -1
|
protected var guiSizeChanged = false
|
||||||
|
|
||||||
|
protected var currentWidth, currentHeight = -1
|
||||||
|
|
||||||
private var showKeyboardMissing = 0L
|
private var showKeyboardMissing = 0L
|
||||||
|
|
||||||
@ -37,6 +38,7 @@ trait TextBuffer extends GuiScreen {
|
|||||||
super.initGui()
|
super.initGui()
|
||||||
BufferRenderer.init(Minecraft.getMinecraft.renderEngine)
|
BufferRenderer.init(Minecraft.getMinecraft.renderEngine)
|
||||||
Keyboard.enableRepeatEvents(true)
|
Keyboard.enableRepeatEvents(true)
|
||||||
|
guiSizeChanged = true
|
||||||
}
|
}
|
||||||
|
|
||||||
override def onGuiClosed() = {
|
override def onGuiClosed() = {
|
||||||
@ -58,7 +60,7 @@ trait TextBuffer extends GuiScreen {
|
|||||||
currentWidth = 0
|
currentWidth = 0
|
||||||
currentHeight = 0
|
currentHeight = 0
|
||||||
}
|
}
|
||||||
scale = changeSize(currentWidth, currentHeight, oldWidth != currentWidth || oldHeight != currentHeight)
|
scale = changeSize(currentWidth, currentHeight, guiSizeChanged || oldWidth != currentWidth || oldHeight != currentHeight)
|
||||||
|
|
||||||
RenderState.checkError(getClass.getName + ".drawBufferLayer: entering (aka: wasntme)")
|
RenderState.checkError(getClass.getName + ".drawBufferLayer: entering (aka: wasntme)")
|
||||||
|
|
||||||
|
@ -13,9 +13,12 @@ import net.minecraftforge.client.event.RenderPlayerEvent
|
|||||||
import org.lwjgl.opengl.{GL11, GL12}
|
import org.lwjgl.opengl.{GL11, GL12}
|
||||||
|
|
||||||
import scala.collection.convert.WrapAsScala._
|
import scala.collection.convert.WrapAsScala._
|
||||||
|
import scala.collection.mutable
|
||||||
|
|
||||||
object PetRenderer {
|
object PetRenderer {
|
||||||
private val entitledPlayers = Map("Kethtar" -> (0.3, 0.9, 0.6))
|
val hidden = mutable.Set.empty[String]
|
||||||
|
|
||||||
|
private val entitledPlayers = Map("Kethtar" ->(0.3, 0.9, 0.6))
|
||||||
|
|
||||||
private val petLocations = com.google.common.cache.CacheBuilder.newBuilder().
|
private val petLocations = com.google.common.cache.CacheBuilder.newBuilder().
|
||||||
expireAfterAccess(5, TimeUnit.SECONDS).
|
expireAfterAccess(5, TimeUnit.SECONDS).
|
||||||
@ -27,7 +30,7 @@ object PetRenderer {
|
|||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
def onPlayerRender(e: RenderPlayerEvent.Pre) {
|
def onPlayerRender(e: RenderPlayerEvent.Pre) {
|
||||||
val name = e.entityPlayer.getCommandSenderName
|
val name = e.entityPlayer.getCommandSenderName
|
||||||
if (!entitledPlayers.contains(name)) return
|
if (hidden.contains(name) || !entitledPlayers.contains(name)) return
|
||||||
rendering = Some(entitledPlayers(name))
|
rendering = Some(entitledPlayers(name))
|
||||||
|
|
||||||
val worldTime = e.entityPlayer.getEntityWorld.getWorldTime
|
val worldTime = e.entityPlayer.getEntityWorld.getWorldTime
|
||||||
|
@ -4,18 +4,22 @@ import codechicken.multipart.TMultiPart
|
|||||||
import cpw.mods.fml.common.eventhandler.SubscribeEvent
|
import cpw.mods.fml.common.eventhandler.SubscribeEvent
|
||||||
import cpw.mods.fml.common.gameevent.PlayerEvent._
|
import cpw.mods.fml.common.gameevent.PlayerEvent._
|
||||||
import cpw.mods.fml.common.gameevent.TickEvent.ServerTickEvent
|
import cpw.mods.fml.common.gameevent.TickEvent.ServerTickEvent
|
||||||
|
import cpw.mods.fml.common.network.FMLNetworkEvent.ClientConnectedToServerEvent
|
||||||
import cpw.mods.fml.common.{FMLCommonHandler, Optional}
|
import cpw.mods.fml.common.{FMLCommonHandler, Optional}
|
||||||
import ic2.api.energy.event.{EnergyTileLoadEvent, EnergyTileUnloadEvent}
|
import ic2.api.energy.event.{EnergyTileLoadEvent, EnergyTileUnloadEvent}
|
||||||
import li.cil.oc._
|
import li.cil.oc._
|
||||||
import li.cil.oc.api.Network
|
import li.cil.oc.api.Network
|
||||||
|
import li.cil.oc.client.renderer.PetRenderer
|
||||||
|
import li.cil.oc.client.{PacketSender => ClientPacketSender}
|
||||||
import li.cil.oc.common.tileentity.traits.power
|
import li.cil.oc.common.tileentity.traits.power
|
||||||
|
import li.cil.oc.server.{PacketSender => ServerPacketSender}
|
||||||
import li.cil.oc.util.LuaStateFactory
|
import li.cil.oc.util.LuaStateFactory
|
||||||
import li.cil.oc.util.mods.{Mods, ProjectRed}
|
import li.cil.oc.util.mods.{Mods, ProjectRed}
|
||||||
|
import net.minecraft.client.Minecraft
|
||||||
import net.minecraft.entity.player.EntityPlayerMP
|
import net.minecraft.entity.player.EntityPlayerMP
|
||||||
import net.minecraft.item.ItemStack
|
import net.minecraft.item.ItemStack
|
||||||
import net.minecraft.server.MinecraftServer
|
import net.minecraft.server.MinecraftServer
|
||||||
import net.minecraft.tileentity.TileEntity
|
import net.minecraft.tileentity.TileEntity
|
||||||
import net.minecraft.util.{ChatComponentText, ChatComponentTranslation}
|
|
||||||
import net.minecraftforge.common.MinecraftForge
|
import net.minecraftforge.common.MinecraftForge
|
||||||
import org.apache.logging.log4j.Level
|
import org.apache.logging.log4j.Level
|
||||||
|
|
||||||
@ -69,22 +73,19 @@ object EventHandler {
|
|||||||
if (FMLCommonHandler.instance.getEffectiveSide.isServer) e.player match {
|
if (FMLCommonHandler.instance.getEffectiveSide.isServer) e.player match {
|
||||||
case player: EntityPlayerMP =>
|
case player: EntityPlayerMP =>
|
||||||
if (!LuaStateFactory.isAvailable) {
|
if (!LuaStateFactory.isAvailable) {
|
||||||
player.addChatMessage(new ChatComponentText("§aOpenComputers§f: ").appendSibling(
|
player.addChatMessage(Localization.Chat.WarningLuaFallback)
|
||||||
new ChatComponentTranslation(Settings.namespace + "gui.Chat.WarningLuaFallback")))
|
|
||||||
}
|
}
|
||||||
if (Mods.ProjectRed.isAvailable && !ProjectRed.isAPIAvailable) {
|
if (Mods.ProjectRed.isAvailable && !ProjectRed.isAPIAvailable) {
|
||||||
player.addChatMessage(new ChatComponentText("§aOpenComputers§f: ").appendSibling(
|
player.addChatMessage(Localization.Chat.WarningProjectRed)
|
||||||
new ChatComponentTranslation(Settings.namespace + "gui.Chat.WarningProjectRed")))
|
|
||||||
}
|
}
|
||||||
if (!Settings.get.pureIgnorePower && Settings.get.ignorePower) {
|
if (!Settings.get.pureIgnorePower && Settings.get.ignorePower) {
|
||||||
player.addChatMessage(new ChatComponentText("§aOpenComputers§f: ").appendSibling(
|
player.addChatMessage(Localization.Chat.WarningPower)
|
||||||
new ChatComponentTranslation(Settings.namespace + "gui.Chat.WarningPower")))
|
|
||||||
}
|
}
|
||||||
OpenComputers.tampered match {
|
OpenComputers.tampered match {
|
||||||
case Some(event) => player.addChatMessage(new ChatComponentText("§aOpenComputers§f: ").appendSibling(
|
case Some(event) => player.addChatMessage(Localization.Chat.WarningFingerprint(event))
|
||||||
new ChatComponentTranslation(Settings.namespace + "gui.Chat.WarningFingerprint", event.expectedFingerprint, event.fingerprints.toArray.mkString(", "))))
|
|
||||||
case _ =>
|
case _ =>
|
||||||
}
|
}
|
||||||
|
ServerPacketSender.sendPetVisibility(None, Some(player))
|
||||||
// Do update check in local games and for OPs.
|
// Do update check in local games and for OPs.
|
||||||
if (!MinecraftServer.getServer.isDedicatedServer || MinecraftServer.getServer.getConfigurationManager.isPlayerOpped(player.getCommandSenderName)) {
|
if (!MinecraftServer.getServer.isDedicatedServer || MinecraftServer.getServer.getConfigurationManager.isPlayerOpped(player.getCommandSenderName)) {
|
||||||
UpdateCheck.checkForPlayer(player)
|
UpdateCheck.checkForPlayer(player)
|
||||||
@ -93,6 +94,15 @@ object EventHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SubscribeEvent
|
||||||
|
def clientLoggedIn(e: ClientConnectedToServerEvent) {
|
||||||
|
PetRenderer.hidden.clear()
|
||||||
|
if (Settings.get.hideOwnPet) {
|
||||||
|
PetRenderer.hidden += Minecraft.getMinecraft.thePlayer.getCommandSenderName
|
||||||
|
}
|
||||||
|
ClientPacketSender.sendPetVisibility()
|
||||||
|
}
|
||||||
|
|
||||||
lazy val navigationUpgrade = api.Items.get("navigationUpgrade")
|
lazy val navigationUpgrade = api.Items.get("navigationUpgrade")
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
|
@ -15,6 +15,7 @@ object PacketType extends Enumeration {
|
|||||||
HologramPowerChange,
|
HologramPowerChange,
|
||||||
HologramScale,
|
HologramScale,
|
||||||
HologramSet,
|
HologramSet,
|
||||||
|
PetVisibility, // Goes both ways.
|
||||||
PowerState,
|
PowerState,
|
||||||
RedstoneState,
|
RedstoneState,
|
||||||
RobotAnimateSwing,
|
RobotAnimateSwing,
|
||||||
|
@ -140,8 +140,9 @@ class Proxy {
|
|||||||
// Don't allow driver registration after this point, to avoid issues.
|
// Don't allow driver registration after this point, to avoid issues.
|
||||||
driver.Registry.locked = true
|
driver.Registry.locked = true
|
||||||
|
|
||||||
FMLCommonHandler.instance().bus().register(EventHandler)
|
FMLCommonHandler.instance.bus.register(EventHandler)
|
||||||
FMLCommonHandler.instance().bus().register(SimpleComponentTickHandler.Instance)
|
FMLCommonHandler.instance.bus.register(SimpleComponentTickHandler.Instance)
|
||||||
|
MinecraftForge.EVENT_BUS.register(EventHandler)
|
||||||
MinecraftForge.EVENT_BUS.register(WirelessNetwork)
|
MinecraftForge.EVENT_BUS.register(WirelessNetwork)
|
||||||
MinecraftForge.EVENT_BUS.register(SaveHandler)
|
MinecraftForge.EVENT_BUS.register(SaveHandler)
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,13 @@ object ChunkloaderUpgradeHandler extends LoadingCallback {
|
|||||||
|
|
||||||
override def ticketsLoaded(tickets: util.List[Ticket], world: World) {
|
override def ticketsLoaded(tickets: util.List[Ticket], world: World) {
|
||||||
for (ticket <- tickets) {
|
for (ticket <- tickets) {
|
||||||
restoredTickets += ticket.getModData.getString("address") -> ticket
|
val data = ticket.getModData
|
||||||
|
restoredTickets += data.getString("address") -> ticket
|
||||||
|
if (data.hasKey("x") && data.hasKey("z")) {
|
||||||
|
val x = data.getInteger("x")
|
||||||
|
val z = data.getInteger("z")
|
||||||
|
ForgeChunkManager.forceChunk(ticket, new ChunkCoordIntPair(x, z))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -35,9 +41,12 @@ object ChunkloaderUpgradeHandler extends LoadingCallback {
|
|||||||
restoredTickets.clear()
|
restoredTickets.clear()
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO it might be necessary to use pre move to force load the target chunk
|
// Note: it might be necessary to use pre move to force load the target chunk
|
||||||
// in case the robot moves across a chunk border into an otherwise unloaded
|
// in case the robot moves across a chunk border into an otherwise unloaded
|
||||||
// chunk (I think it would just fail to move otherwise)
|
// chunk (I think it would just fail to move otherwise).
|
||||||
|
// Update 2014-06-21: did some testing, seems not to be necessary. My guess
|
||||||
|
// is that the access to the block in the direction the robot moves causes
|
||||||
|
// the chunk it might move into to get loaded.
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
def onMove(e: RobotMoveEvent.Post) {
|
def onMove(e: RobotMoveEvent.Post) {
|
||||||
@ -57,6 +66,8 @@ object ChunkloaderUpgradeHandler extends LoadingCallback {
|
|||||||
}
|
}
|
||||||
ForgeChunkManager.forceChunk(ticket, robotChunk)
|
ForgeChunkManager.forceChunk(ticket, robotChunk)
|
||||||
ticket.getModData.setString("address", loader.node.address)
|
ticket.getModData.setString("address", loader.node.address)
|
||||||
|
ticket.getModData.setInteger("x", robotChunk.chunkXPos)
|
||||||
|
ticket.getModData.setInteger("z", robotChunk.chunkZPos)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
package li.cil.oc.common.tileentity.traits
|
package li.cil.oc.common.tileentity.traits
|
||||||
|
|
||||||
import li.cil.oc.Settings
|
import li.cil.oc.Settings
|
||||||
import li.cil.oc.api.{driver, network}
|
|
||||||
import li.cil.oc.api.network.{Connector, SidedEnvironment}
|
import li.cil.oc.api.network.{Connector, SidedEnvironment}
|
||||||
|
import li.cil.oc.api.{driver, network}
|
||||||
import li.cil.oc.common.EventHandler
|
import li.cil.oc.common.EventHandler
|
||||||
import li.cil.oc.util.ExtendedNBT._
|
import li.cil.oc.util.ExtendedNBT._
|
||||||
import net.minecraft.nbt.NBTTagCompound
|
import net.minecraft.nbt.NBTTagCompound
|
||||||
|
@ -8,6 +8,7 @@ import li.cil.oc.common.tileentity._
|
|||||||
import li.cil.oc.common.tileentity.traits.{Computer, TileEntity}
|
import li.cil.oc.common.tileentity.traits.{Computer, TileEntity}
|
||||||
import li.cil.oc.common.{PacketType, PacketHandler => CommonPacketHandler}
|
import li.cil.oc.common.{PacketType, PacketHandler => CommonPacketHandler}
|
||||||
import li.cil.oc.{Localization, Settings, api}
|
import li.cil.oc.{Localization, Settings, api}
|
||||||
|
import net.minecraft.client.Minecraft
|
||||||
import net.minecraft.entity.player.{EntityPlayer, EntityPlayerMP}
|
import net.minecraft.entity.player.{EntityPlayer, EntityPlayerMP}
|
||||||
import net.minecraft.network.NetHandlerPlayServer
|
import net.minecraft.network.NetHandlerPlayServer
|
||||||
import net.minecraftforge.common.DimensionManager
|
import net.minecraftforge.common.DimensionManager
|
||||||
@ -31,6 +32,7 @@ object PacketHandler extends CommonPacketHandler {
|
|||||||
case PacketType.MouseScroll => onMouseScroll(p)
|
case PacketType.MouseScroll => onMouseScroll(p)
|
||||||
case PacketType.MouseUp => onMouseUp(p)
|
case PacketType.MouseUp => onMouseUp(p)
|
||||||
case PacketType.MultiPartPlace => onMultiPartPlace(p)
|
case PacketType.MultiPartPlace => onMultiPartPlace(p)
|
||||||
|
case PacketType.PetVisibility => onPetVisibility(p)
|
||||||
case PacketType.RobotAssemblerStart => onRobotAssemblerStart(p)
|
case PacketType.RobotAssemblerStart => onRobotAssemblerStart(p)
|
||||||
case PacketType.RobotStateRequest => onRobotStateRequest(p)
|
case PacketType.RobotStateRequest => onRobotStateRequest(p)
|
||||||
case PacketType.ServerRange => onServerRange(p)
|
case PacketType.ServerRange => onServerRange(p)
|
||||||
@ -125,6 +127,22 @@ object PacketHandler extends CommonPacketHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def onPetVisibility(p: PacketParser) {
|
||||||
|
p.player match {
|
||||||
|
case player: EntityPlayerMP if player != Minecraft.getMinecraft.thePlayer =>
|
||||||
|
if (if (p.readBoolean()) {
|
||||||
|
PetVisibility.hidden.remove(player.getCommandSenderName)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
PetVisibility.hidden.add(player.getCommandSenderName)
|
||||||
|
}) {
|
||||||
|
// Something changed.
|
||||||
|
PacketSender.sendPetVisibility(Some(player.getCommandSenderName))
|
||||||
|
}
|
||||||
|
case _ => // Invalid packet.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
def onRobotAssemblerStart(p: PacketParser) =
|
def onRobotAssemblerStart(p: PacketParser) =
|
||||||
p.readTileEntity[RobotAssembler]() match {
|
p.readTileEntity[RobotAssembler]() match {
|
||||||
case Some(assembler) => assembler.start()
|
case Some(assembler) => assembler.start()
|
||||||
|
@ -129,6 +129,28 @@ object PacketSender {
|
|||||||
pb.sendToNearbyPlayers(t)
|
pb.sendToNearbyPlayers(t)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def sendPetVisibility(name: Option[String] = None, player: Option[EntityPlayerMP] = None) {
|
||||||
|
val pb = new PacketBuilder(PacketType.PetVisibility)
|
||||||
|
|
||||||
|
name match {
|
||||||
|
case Some(n) =>
|
||||||
|
pb.writeInt(1)
|
||||||
|
pb.writeUTF(n)
|
||||||
|
pb.writeBoolean(!PetVisibility.hidden.contains(n))
|
||||||
|
case _ =>
|
||||||
|
pb.writeInt(PetVisibility.hidden.size)
|
||||||
|
for (n <- PetVisibility.hidden) {
|
||||||
|
pb.writeUTF(n)
|
||||||
|
pb.writeBoolean(false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
player match {
|
||||||
|
case Some(p) => pb.sendToPlayer(p)
|
||||||
|
case _ => pb.sendToAllPlayers()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
def sendPowerState(t: PowerInformation) {
|
def sendPowerState(t: PowerInformation) {
|
||||||
val pb = new PacketBuilder(PacketType.PowerState)
|
val pb = new PacketBuilder(PacketType.PowerState)
|
||||||
|
|
||||||
|
7
src/main/scala/li/cil/oc/server/PetVisibility.scala
Normal file
7
src/main/scala/li/cil/oc/server/PetVisibility.scala
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
package li.cil.oc.server
|
||||||
|
|
||||||
|
import scala.collection.mutable
|
||||||
|
|
||||||
|
object PetVisibility {
|
||||||
|
val hidden = mutable.Set.empty[String]
|
||||||
|
}
|
@ -282,12 +282,17 @@ abstract class GraphicsCard extends component.ManagedComponent {
|
|||||||
else s.setBackgroundColor(0x000000)
|
else s.setBackgroundColor(0x000000)
|
||||||
s.fill(0, 0, w, h, ' ')
|
s.fill(0, 0, w, h, ' ')
|
||||||
try {
|
try {
|
||||||
val message = "Unrecoverable error:\n" + Localization.localizeImmediately(machine.lastError) + "\n"
|
|
||||||
val wrapRegEx = s"(.{1,${math.max(1, w - 2)}})\\s".r
|
val wrapRegEx = s"(.{1,${math.max(1, w - 2)}})\\s".r
|
||||||
val lines = wrapRegEx.replaceAllIn(message, m => m.group(1) + "\n").lines.toArray
|
val lines = wrapRegEx.replaceAllIn(Localization.localizeImmediately(machine.lastError).replace("\t", " ") + "\n", m => m.group(1) + "\n").lines.toArray
|
||||||
|
val firstRow = ((h - lines.length) / 2) max 2
|
||||||
|
|
||||||
|
val message = "Unrecoverable Error"
|
||||||
|
s.set((w - message.length) / 2, firstRow - 2, message, false)
|
||||||
|
|
||||||
|
val maxLineLength = lines.map(_.length).max
|
||||||
|
val col = ((w - maxLineLength) / 2) max 0
|
||||||
for ((line, idx) <- lines.zipWithIndex) {
|
for ((line, idx) <- lines.zipWithIndex) {
|
||||||
val col = (w - line.length) / 2
|
val row = firstRow + idx
|
||||||
val row = (h - lines.length) / 2 + idx
|
|
||||||
s.set(col, row, line, false)
|
s.set(col, row, line, false)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -64,6 +64,8 @@ class Player(val robot: tileentity.Robot) extends FakePlayer(robot.world.asInsta
|
|||||||
|
|
||||||
override def getDefaultEyeHeight = 0f
|
override def getDefaultEyeHeight = 0f
|
||||||
|
|
||||||
|
override def getDisplayName = robot.name
|
||||||
|
|
||||||
// ----------------------------------------------------------------------- //
|
// ----------------------------------------------------------------------- //
|
||||||
|
|
||||||
def updatePositionAndRotation(facing: ForgeDirection, side: ForgeDirection) {
|
def updatePositionAndRotation(facing: ForgeDirection, side: ForgeDirection) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user