Move terminal stack requesting logic to TerminalScreen
This commit is contained in:
parent
f9befe9549
commit
7abdb69b87
|
@ -56,7 +56,6 @@ class TerminalBlockEntity: DeviceBlockEntity(PhyBlockEntities.TERMINAL),
|
|||
|
||||
private var observers = 0
|
||||
val cachedNetItems = ItemStackCollections.intMap()
|
||||
// var cachedSortedNetItems = listOf<ItemStack>()
|
||||
|
||||
var netItemObserver: WeakReference<NetItemObserver>? = null
|
||||
|
||||
|
@ -130,12 +129,6 @@ class TerminalBlockEntity: DeviceBlockEntity(PhyBlockEntities.TERMINAL),
|
|||
cachedNetItems.mergeInt(stack, amount) { a, b -> a + b }
|
||||
}
|
||||
}
|
||||
// // todo: is the map necessary or is just the sorted list enough?
|
||||
// cachedSortedNetItems = cachedNetItems.object2IntEntrySet().sortedByDescending { it.intValue }.map {
|
||||
// val stack = it.key.copy()
|
||||
// stack.count = it.intValue
|
||||
// stack
|
||||
// }
|
||||
}
|
||||
|
||||
private fun beginInsertions() {
|
||||
|
@ -259,31 +252,11 @@ class TerminalBlockEntity: DeviceBlockEntity(PhyBlockEntities.TERMINAL),
|
|||
|
||||
override fun toClientTag(tag: CompoundTag): CompoundTag {
|
||||
tag.put("InternalBuffer", internalBuffer.toTag())
|
||||
// val list = ListTag()
|
||||
// tag.put("CachedNetItems", list)
|
||||
// for ((stack, amount) in cachedNetItems) {
|
||||
// val entryTag = stack.toTag(CompoundTag())
|
||||
// entryTag.putInt("NetAmount", amount)
|
||||
// list.add(entryTag)
|
||||
// }
|
||||
return tag
|
||||
}
|
||||
|
||||
override fun fromClientTag(tag: CompoundTag) {
|
||||
internalBuffer.fromTag(tag.getCompound("InternalBuffer"))
|
||||
// val list = tag.getList("CachedNetItems", 10)
|
||||
// cachedNetItems.clear()
|
||||
// for (entryTag in list) {
|
||||
// val stack = ItemStack.fromTag(entryTag as CompoundTag)
|
||||
// val netAmount = entryTag.getInt("NetAmount")
|
||||
// cachedNetItems[stack] = netAmount
|
||||
// }
|
||||
// netItemObserver?.get()?.netItemsChanged()
|
||||
// cachedSortedNetItems = cachedNetItems.object2IntEntrySet().sortedByDescending { it.intValue }.map {
|
||||
// val stack = it.key.copy()
|
||||
// stack.count = it.intValue
|
||||
// stack
|
||||
// }
|
||||
}
|
||||
|
||||
interface NetItemObserver {
|
||||
|
|
|
@ -17,12 +17,14 @@ import net.minecraft.text.LiteralText
|
|||
import net.minecraft.text.Text
|
||||
import net.minecraft.util.Identifier
|
||||
import net.shadowfacts.phycon.PhysicalConnectivity
|
||||
import net.shadowfacts.phycon.networking.C2STerminalRequestItem
|
||||
import net.shadowfacts.phycon.networking.C2STerminalUpdateDisplayedItems
|
||||
import net.shadowfacts.phycon.util.SortMode
|
||||
import org.lwjgl.glfw.GLFW
|
||||
import java.lang.NumberFormatException
|
||||
import kotlin.math.ceil
|
||||
import kotlin.math.floor
|
||||
import kotlin.math.min
|
||||
|
||||
/**
|
||||
* @author shadowfacts
|
||||
|
@ -229,12 +231,24 @@ class TerminalScreen(handler: TerminalScreenHandler, playerInv: PlayerInventory,
|
|||
// don't unfocus the search box on mouse click
|
||||
searchBox.setSelected(true)
|
||||
|
||||
if (type == SlotActionType.PICKUP && clickData == 0 && slot != null && handler.isNetworkSlot(slot.id) && !slot.stack.isEmpty) {
|
||||
dialogStack = slot.stack
|
||||
if (slot != null && !slot.stack.isEmpty && handler.isNetworkSlot(slot.id)) {
|
||||
val stack = slot.stack
|
||||
|
||||
if (type == SlotActionType.QUICK_MOVE) {
|
||||
// shift click, request full stack
|
||||
requestItem(stack, min(stack.count, stack.maxCount))
|
||||
} else if (type == SlotActionType.PICKUP) {
|
||||
if (clickData == 1) {
|
||||
// right click, request half stack
|
||||
requestItem(stack, ceil(min(stack.count, stack.maxCount) / 2f).toInt())
|
||||
} else {
|
||||
dialogStack = stack
|
||||
showingAmountDialog = true
|
||||
searchBox.setSelected(false)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun mouseClicked(mouseX: Double, mouseY: Double, button: Int): Boolean {
|
||||
if (showingAmountDialog) {
|
||||
|
@ -329,7 +343,13 @@ class TerminalScreen(handler: TerminalScreenHandler, playerInv: PlayerInventory,
|
|||
|
||||
private fun doDialogRequest() {
|
||||
showingAmountDialog = false
|
||||
handler.requestItem(client!!.player!!, dialogStack, amountBox.intValue)
|
||||
requestItem(dialogStack, amountBox.intValue)
|
||||
}
|
||||
|
||||
private fun requestItem(stack: ItemStack, amount: Int) {
|
||||
val netHandler = MinecraftClient.getInstance().player!!.networkHandler
|
||||
val packet = C2STerminalRequestItem(handler.terminal, stack, amount)
|
||||
netHandler.sendPacket(packet)
|
||||
}
|
||||
|
||||
private var TextFieldWidget.intValue: Int
|
||||
|
|
|
@ -137,28 +137,7 @@ class TerminalScreenHandler(syncId: Int, val playerInv: PlayerInventory, val ter
|
|||
}
|
||||
|
||||
override fun onSlotClick(slotId: Int, clickData: Int, actionType: SlotActionType, player: PlayerEntity): ItemStack {
|
||||
if (isNetworkSlot(slotId)) {
|
||||
// the slot clicked was one of the network stacks
|
||||
if (actionType == SlotActionType.QUICK_MOVE) {
|
||||
val stack = slots[slotId].stack
|
||||
if (!stack.isEmpty && player.world.isClient) {
|
||||
requestItem(player, stack, min(stack.count, stack.maxCount))
|
||||
|
||||
}
|
||||
} else if (actionType == SlotActionType.PICKUP && clickData == 1) {
|
||||
if (clickData == 1) {
|
||||
// right click, request half stack
|
||||
val stack = slots[slotId].stack
|
||||
if (!stack.isEmpty && player.world.isClient) {
|
||||
requestItem(player, stack, ceil(min(stack.count, stack.maxCount) / 2f).toInt())
|
||||
}
|
||||
} else {
|
||||
// todo: left click, show amount dialog
|
||||
}
|
||||
}
|
||||
return ItemStack.EMPTY
|
||||
} else if (isBufferSlot(slotId)) {
|
||||
// internal buffer
|
||||
if (isBufferSlot(slotId)) {
|
||||
// todo: why does this think it's quick_craft sometimes?
|
||||
if ((actionType == SlotActionType.PICKUP || actionType == SlotActionType.QUICK_CRAFT) && !player.inventory.cursorStack.isEmpty) {
|
||||
// placing cursor stack into buffer
|
||||
|
@ -169,13 +148,6 @@ class TerminalScreenHandler(syncId: Int, val playerInv: PlayerInventory, val ter
|
|||
return super.onSlotClick(slotId, clickData, actionType, player)
|
||||
}
|
||||
|
||||
fun requestItem(player: PlayerEntity, stack: ItemStack, amount: Int) {
|
||||
if (!player.world.isClient) return
|
||||
val handler = (player as ClientPlayerEntity).networkHandler
|
||||
val packet = C2STerminalRequestItem(terminal, stack, amount)
|
||||
handler.sendPacket(packet)
|
||||
}
|
||||
|
||||
override fun transferSlot(player: PlayerEntity, slotId: Int): ItemStack {
|
||||
if (isNetworkSlot(slotId)) {
|
||||
return ItemStack.EMPTY;
|
||||
|
|
Loading…
Reference in New Issue