mirror of
https://github.com/MightyPirates/OpenComputers.git
synced 2025-09-25 14:05:39 -04:00
Add NEI drag&drop support to database GUI
This commit is contained in:
parent
470421b965
commit
9cf102cde4
@ -9,6 +9,7 @@ import li.cil.oc.common.tileentity._
|
|||||||
import li.cil.oc.common.tileentity.traits.Computer
|
import li.cil.oc.common.tileentity.traits.Computer
|
||||||
import net.minecraft.client.Minecraft
|
import net.minecraft.client.Minecraft
|
||||||
import net.minecraft.client.audio.PositionedSoundRecord
|
import net.minecraft.client.audio.PositionedSoundRecord
|
||||||
|
import net.minecraft.item.ItemStack
|
||||||
import net.minecraft.util.ResourceLocation
|
import net.minecraft.util.ResourceLocation
|
||||||
import net.minecraftforge.common.util.ForgeDirection
|
import net.minecraftforge.common.util.ForgeDirection
|
||||||
|
|
||||||
@ -166,6 +167,15 @@ object PacketSender {
|
|||||||
pb.sendToServer()
|
pb.sendToServer()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def sendDatabaseSetSlot(slot :Int, stack: ItemStack) {
|
||||||
|
val pb = new SimplePacketBuilder(PacketType.DatabaseSetSlot)
|
||||||
|
|
||||||
|
pb.writeByte(slot)
|
||||||
|
pb.writeItemStack(stack)
|
||||||
|
|
||||||
|
pb.sendToServer()
|
||||||
|
}
|
||||||
|
|
||||||
def sendRobotAssemblerStart(t: Assembler) {
|
def sendRobotAssemblerStart(t: Assembler) {
|
||||||
val pb = new SimplePacketBuilder(PacketType.RobotAssemblerStart)
|
val pb = new SimplePacketBuilder(PacketType.RobotAssemblerStart)
|
||||||
|
|
||||||
|
@ -76,6 +76,7 @@ object PacketType extends Enumeration {
|
|||||||
// Client -> Server
|
// Client -> Server
|
||||||
ComputerPower,
|
ComputerPower,
|
||||||
CopyToAnalyzer,
|
CopyToAnalyzer,
|
||||||
|
DatabaseSetSlot,
|
||||||
DriveLock,
|
DriveLock,
|
||||||
DriveMode,
|
DriveMode,
|
||||||
DronePower,
|
DronePower,
|
||||||
|
36
src/main/scala/li/cil/oc/integration/nei/GuiHandler.scala
Normal file
36
src/main/scala/li/cil/oc/integration/nei/GuiHandler.scala
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
package li.cil.oc.integration.nei
|
||||||
|
|
||||||
|
import codechicken.nei.api.INEIGuiAdapter
|
||||||
|
import li.cil.oc.client.PacketSender
|
||||||
|
import li.cil.oc.client.gui.Database
|
||||||
|
import net.minecraft.client.gui.inventory.GuiContainer
|
||||||
|
import net.minecraft.item.ItemStack
|
||||||
|
|
||||||
|
class GuiHandler extends INEIGuiAdapter {
|
||||||
|
private def getSlot(db: Database, mousex: Int, mousey: Int): Option[Int] = {
|
||||||
|
val slotSize = 18
|
||||||
|
val offset = 8 + Array(3, 2, 0)(db.databaseInventory.tier) * slotSize
|
||||||
|
val row = (mousey - offset - db.guiTop)/slotSize
|
||||||
|
val column = (mousex - offset - db.guiLeft)/slotSize
|
||||||
|
val size = math.sqrt(db.databaseInventory.getSizeInventory).ceil.toInt
|
||||||
|
val validSlots = 0 until size
|
||||||
|
if ((validSlots contains row) && (validSlots contains column))
|
||||||
|
Option(row * size + column)
|
||||||
|
else
|
||||||
|
None
|
||||||
|
}
|
||||||
|
override def handleDragNDrop(gui: GuiContainer, mousex: Int, mousey: Int, draggedStack: ItemStack, button: Int):Boolean = {
|
||||||
|
gui match {
|
||||||
|
case db: Database =>
|
||||||
|
getSlot(db, mousex, mousey) match {
|
||||||
|
case Some(slot) =>
|
||||||
|
val stack = draggedStack.copy()
|
||||||
|
stack.stackSize = 1 // packet writing will "optimize" out empty stack
|
||||||
|
PacketSender.sendDatabaseSetSlot(slot, stack)
|
||||||
|
true
|
||||||
|
case _ => false
|
||||||
|
}
|
||||||
|
case _ => super.handleDragNDrop(gui, mousex, mousey, draggedStack, button)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -12,15 +12,16 @@ import li.cil.oc.integration.util.NEI
|
|||||||
|
|
||||||
@SideOnly(Side.CLIENT)
|
@SideOnly(Side.CLIENT)
|
||||||
class NEIOpenComputersConfig extends IConfigureNEI {
|
class NEIOpenComputersConfig extends IConfigureNEI {
|
||||||
override def getName = OpenComputers.Name
|
override def getName: String = OpenComputers.Name
|
||||||
|
|
||||||
override def getVersion = OpenComputers.Version
|
override def getVersion: String = OpenComputers.Version
|
||||||
|
|
||||||
override def loadConfig() {
|
override def loadConfig() {
|
||||||
// Non-alphabetic order haunts my OCD, but I want the "Manual" to show up
|
// Non-alphabetic order haunts my OCD, but I want the "Manual" to show up
|
||||||
// before the API doc.
|
// before the API doc.
|
||||||
API.registerUsageHandler(new ManualUsageHandler())
|
API.registerUsageHandler(new ManualUsageHandler())
|
||||||
API.registerUsageHandler(new CallbackDocHandler())
|
API.registerUsageHandler(new CallbackDocHandler())
|
||||||
|
API.registerNEIGuiHandler(new GuiHandler())
|
||||||
|
|
||||||
// Add option to show items' ore dictionary name in tooltips.
|
// Add option to show items' ore dictionary name in tooltips.
|
||||||
NEIClientConfig.global.config.getTag("inventory.oredict").getBooleanValue(false)
|
NEIClientConfig.global.config.getTag("inventory.oredict").getBooleanValue(false)
|
||||||
|
@ -9,6 +9,7 @@ import li.cil.oc.api.machine.Machine
|
|||||||
import li.cil.oc.common.Achievement
|
import li.cil.oc.common.Achievement
|
||||||
import li.cil.oc.common.PacketType
|
import li.cil.oc.common.PacketType
|
||||||
import li.cil.oc.common.component.TextBuffer
|
import li.cil.oc.common.component.TextBuffer
|
||||||
|
import li.cil.oc.common.container.Database
|
||||||
import li.cil.oc.common.entity.Drone
|
import li.cil.oc.common.entity.Drone
|
||||||
import li.cil.oc.common.item.Delegator
|
import li.cil.oc.common.item.Delegator
|
||||||
import li.cil.oc.common.item.data.DriveData
|
import li.cil.oc.common.item.data.DriveData
|
||||||
@ -21,14 +22,15 @@ import net.minecraft.entity.player.EntityPlayer
|
|||||||
import net.minecraft.entity.player.EntityPlayerMP
|
import net.minecraft.entity.player.EntityPlayerMP
|
||||||
import net.minecraft.nbt.NBTTagCompound
|
import net.minecraft.nbt.NBTTagCompound
|
||||||
import net.minecraft.network.NetHandlerPlayServer
|
import net.minecraft.network.NetHandlerPlayServer
|
||||||
|
import net.minecraft.world.WorldServer
|
||||||
import net.minecraftforge.common.DimensionManager
|
import net.minecraftforge.common.DimensionManager
|
||||||
|
|
||||||
object PacketHandler extends CommonPacketHandler {
|
object PacketHandler extends CommonPacketHandler {
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
def onPacket(e: ServerCustomPacketEvent) =
|
def onPacket(e: ServerCustomPacketEvent): Unit =
|
||||||
onPacketData(e.packet.payload, e.handler.asInstanceOf[NetHandlerPlayServer].playerEntity)
|
onPacketData(e.packet.payload, e.handler.asInstanceOf[NetHandlerPlayServer].playerEntity)
|
||||||
|
|
||||||
override protected def world(player: EntityPlayer, dimension: Int) =
|
override protected def world(player: EntityPlayer, dimension: Int): Option[WorldServer] =
|
||||||
Option(DimensionManager.getWorld(dimension))
|
Option(DimensionManager.getWorld(dimension))
|
||||||
|
|
||||||
override def dispatch(p: PacketParser) {
|
override def dispatch(p: PacketParser) {
|
||||||
@ -43,6 +45,7 @@ object PacketHandler extends CommonPacketHandler {
|
|||||||
case PacketType.Clipboard => onClipboard(p)
|
case PacketType.Clipboard => onClipboard(p)
|
||||||
case PacketType.MouseClickOrDrag => onMouseClick(p)
|
case PacketType.MouseClickOrDrag => onMouseClick(p)
|
||||||
case PacketType.MouseScroll => onMouseScroll(p)
|
case PacketType.MouseScroll => onMouseScroll(p)
|
||||||
|
case PacketType.DatabaseSetSlot => onDatabaseSetSlot(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.PetVisibility => onPetVisibility(p)
|
||||||
@ -220,6 +223,15 @@ object PacketHandler extends CommonPacketHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def onDatabaseSetSlot(p: PacketParser) {
|
||||||
|
val slot = p.readByte()
|
||||||
|
val stack = p.readItemStack()
|
||||||
|
p.player.openContainer match {
|
||||||
|
case db: Database => db.putStackInSlot(slot, stack)
|
||||||
|
case _ => // Invalid packet.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
def onMultiPartPlace(p: PacketParser) {
|
def onMultiPartPlace(p: PacketParser) {
|
||||||
p.player match {
|
p.player match {
|
||||||
case player: EntityPlayerMP => EventHandler.place(player)
|
case player: EntityPlayerMP => EventHandler.place(player)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user