Add "Smart exchange" button to quickstack controls
This commit is contained in:
parent
be2011cf96
commit
01d3cbf7b2
@ -988,12 +988,14 @@ private fun androidFeatures(provider: MatteryLanguageProvider) {
|
|||||||
private fun gui(provider: MatteryLanguageProvider) {
|
private fun gui(provider: MatteryLanguageProvider) {
|
||||||
with(provider.english) {
|
with(provider.english) {
|
||||||
gui("quickmove_from.restock", "Restock from storage")
|
gui("quickmove_from.restock", "Restock from storage")
|
||||||
gui("quickmove_from.restock_with_move", "Full restock from storage")
|
gui("quickmove_from.restock_with_move", "Quickstack from storage")
|
||||||
gui("quickmove_from.move", "Take all")
|
gui("quickmove_from.move", "Take all")
|
||||||
|
|
||||||
gui("quickmove_to.restock", "Restock to storage")
|
gui("quickmove_to.restock", "Restock to storage")
|
||||||
gui("quickmove_to.restock_with_move", "Full restock to storage")
|
gui("quickmove_to.restock_with_move", "Quickstack to storage")
|
||||||
gui("quickmove_to.move", "Deposit all")
|
gui("quickmove_to.move", "Deposit all")
|
||||||
|
gui("quickmove.exchange", "Smart exchange with storage")
|
||||||
|
gui("quickmove.exchange.desc", "Filtered slots get restocked, everything else gets quickstacked from Exopack")
|
||||||
|
|
||||||
gui("quickmove_hint", "Right click to show all variants")
|
gui("quickmove_hint", "Right click to show all variants")
|
||||||
|
|
||||||
|
@ -981,12 +981,14 @@ private fun androidFeatures(provider: MatteryLanguageProvider) {
|
|||||||
private fun gui(provider: MatteryLanguageProvider) {
|
private fun gui(provider: MatteryLanguageProvider) {
|
||||||
with(provider.russian) {
|
with(provider.russian) {
|
||||||
gui("quickmove_from.restock", "Быстрое пополнение из хранилища")
|
gui("quickmove_from.restock", "Быстрое пополнение из хранилища")
|
||||||
gui("quickmove_from.restock_with_move", "Быстрое перемещение из хранилища")
|
gui("quickmove_from.restock_with_move", "Быстрое складирование из хранилища")
|
||||||
gui("quickmove_from.move", "Взять всё")
|
gui("quickmove_from.move", "Взять всё")
|
||||||
|
|
||||||
gui("quickmove_to.restock", "Быстрое пополнение в хранилище")
|
gui("quickmove_to.restock", "Быстрое пополнение в хранилище")
|
||||||
gui("quickmove_to.restock_with_move", "Быстрое перемещение в хранилище")
|
gui("quickmove_to.restock_with_move", "Быстрое складирование в хранилище")
|
||||||
gui("quickmove_to.move", "Переместить всё")
|
gui("quickmove_to.move", "Переместить всё")
|
||||||
|
gui("quickmove.exchange", "Умный обмен с хранилищем")
|
||||||
|
gui("quickmove.exchange.desc", "Слоты с фильтрами заполняются до максимума, всё остальное быстро складируется из экзопака")
|
||||||
|
|
||||||
gui("quickmove_hint", "Правый клик чтоб увидеть все варианты")
|
gui("quickmove_hint", "Правый клик чтоб увидеть все варианты")
|
||||||
|
|
||||||
|
@ -2,6 +2,7 @@ package ru.dbotthepony.mc.otm.client.screen.decorative
|
|||||||
|
|
||||||
import net.minecraft.network.chat.Component
|
import net.minecraft.network.chat.Component
|
||||||
import net.minecraft.world.entity.player.Inventory
|
import net.minecraft.world.entity.player.Inventory
|
||||||
|
import ru.dbotthepony.kommons.util.Either
|
||||||
import ru.dbotthepony.mc.otm.client.screen.MatteryScreen
|
import ru.dbotthepony.mc.otm.client.screen.MatteryScreen
|
||||||
import ru.dbotthepony.mc.otm.client.screen.panels.FramePanel
|
import ru.dbotthepony.mc.otm.client.screen.panels.FramePanel
|
||||||
import ru.dbotthepony.mc.otm.client.screen.panels.button.DeviceControls
|
import ru.dbotthepony.mc.otm.client.screen.panels.button.DeviceControls
|
||||||
@ -28,11 +29,11 @@ class CargoCrateScreen(menu: CargoCrateMenu, inventory: Inventory, title: Compon
|
|||||||
|
|
||||||
val leftControls = DeviceControls(this, frame)
|
val leftControls = DeviceControls(this, frame)
|
||||||
leftControls.dockOnLeft = true
|
leftControls.dockOnLeft = true
|
||||||
leftControls.quickMoveButtons(menu.quickMoveFromStorage, QuickMoveInput.Mode.RESTOCK, true)
|
leftControls.quickMoveButtons(menu.quickMoveFromStorage)
|
||||||
|
|
||||||
val leftInventoryControls = DeviceControls(this, inventoryFrame!!)
|
val leftInventoryControls = DeviceControls(this, inventoryFrame!!)
|
||||||
leftInventoryControls.dockOnLeft = true
|
leftInventoryControls.dockOnLeft = true
|
||||||
leftInventoryControls.quickMoveButtons(menu.quickMoveToStorage, QuickMoveInput.Mode.RESTOCK_WITH_MOVE, false)
|
leftInventoryControls.quickMoveButtons(menu.quickMoveToStorage, menu.quickMoveFromStorage)
|
||||||
|
|
||||||
return frame
|
return frame
|
||||||
}
|
}
|
||||||
|
@ -22,19 +22,27 @@ class QuickStackControlsPanel<out S : Screen>(
|
|||||||
y: Float = 0f
|
y: Float = 0f
|
||||||
) : EditablePanel<S>(screen, parent, x, y, 18f, 18f) {
|
) : EditablePanel<S>(screen, parent, x, y, 18f, 18f) {
|
||||||
private val grid = GridPanel(screen, this, columns = 1, rows = 1)
|
private val grid = GridPanel(screen, this, columns = 1, rows = 1)
|
||||||
private val buttons = ArrayList<ButtonPanel<S>>()
|
private val buttons = ArrayList<EditablePanel<S>>()
|
||||||
|
|
||||||
init {
|
init {
|
||||||
grid.dock = Dock.FILL
|
grid.dock = Dock.FILL
|
||||||
grid.layout = GridPanel.Layout.TOP_RIGHT
|
grid.layout = GridPanel.Layout.TOP_RIGHT
|
||||||
grid.columnMajorOrder = true
|
grid.columnMajorOrder = true
|
||||||
|
|
||||||
|
// so row with main button contains only that button (visibly)
|
||||||
|
val fill = EditablePanel(screen, grid, width = 18f, height = 18f)
|
||||||
|
fill.childrenOrder = 999
|
||||||
|
fill.visible = false
|
||||||
|
fill.dockMargin = DockProperty.bottomRight(1f)
|
||||||
|
buttons.add(fill)
|
||||||
}
|
}
|
||||||
|
|
||||||
private inner class MainButton : ButtonPanel<S>(screen, grid, width = 18f, height = 18f) {
|
private inner class MainButton : ButtonPanel<S>(screen, grid, width = 18f, height = 18f) {
|
||||||
init {
|
init {
|
||||||
dockMargin = DockProperty.bottom(1f)
|
dockMargin = DockProperty.bottom(1f)
|
||||||
childrenOrder = -100
|
childrenOrder = -100000
|
||||||
tooltips.add(QuickMoveInput.Mode.RESTOCK_WITH_MOVE.textToStorage)
|
tooltips.add(TranslatableComponent("otm.gui.quickmove.exchange"))
|
||||||
|
tooltips.add(TranslatableComponent("otm.gui.quickmove.exchange.desc").withStyle(ChatFormatting.GRAY))
|
||||||
tooltips.add(TextComponent(""))
|
tooltips.add(TextComponent(""))
|
||||||
tooltips.add(TranslatableComponent("otm.gui.quickmove_hint").withStyle(ChatFormatting.GRAY))
|
tooltips.add(TranslatableComponent("otm.gui.quickmove_hint").withStyle(ChatFormatting.GRAY))
|
||||||
}
|
}
|
||||||
@ -44,7 +52,7 @@ class QuickStackControlsPanel<out S : Screen>(
|
|||||||
set(value) {}
|
set(value) {}
|
||||||
|
|
||||||
override val icon: IGUIRenderable
|
override val icon: IGUIRenderable
|
||||||
get() = Widgets18.RESTOCK_WITH_MOVE_TO_STORAGE
|
get() = Widgets18.SMART_STORAGE_EXCHANGE
|
||||||
|
|
||||||
override fun test(value: Int): Boolean {
|
override fun test(value: Int): Boolean {
|
||||||
return value == InputConstants.MOUSE_BUTTON_LEFT || value == InputConstants.MOUSE_BUTTON_RIGHT
|
return value == InputConstants.MOUSE_BUTTON_LEFT || value == InputConstants.MOUSE_BUTTON_RIGHT
|
||||||
@ -53,12 +61,13 @@ class QuickStackControlsPanel<out S : Screen>(
|
|||||||
override fun onClick(mouseButton: Int) {
|
override fun onClick(mouseButton: Int) {
|
||||||
if (mouseButton == InputConstants.MOUSE_BUTTON_LEFT) {
|
if (mouseButton == InputConstants.MOUSE_BUTTON_LEFT) {
|
||||||
PacketDistributor.sendToServer(QuickStackPacket(QuickMoveInput.Mode.RESTOCK_WITH_MOVE, true))
|
PacketDistributor.sendToServer(QuickStackPacket(QuickMoveInput.Mode.RESTOCK_WITH_MOVE, true))
|
||||||
|
PacketDistributor.sendToServer(QuickStackPacket(QuickMoveInput.Mode.RESTOCK, false))
|
||||||
} else {
|
} else {
|
||||||
buttons.forEach { it.visible = !it.visible }
|
buttons.forEach { it.visible = !it.visible }
|
||||||
|
|
||||||
if (buttons[0].visible) {
|
if (buttons[0].visible) {
|
||||||
grid.columns = 2
|
grid.columns = 2
|
||||||
grid.rows = 3
|
grid.rows = 4
|
||||||
} else {
|
} else {
|
||||||
grid.columns = 1
|
grid.columns = 1
|
||||||
grid.rows = 1
|
grid.rows = 1
|
||||||
@ -86,14 +95,14 @@ class QuickStackControlsPanel<out S : Screen>(
|
|||||||
mode.iconFromStorage,
|
mode.iconFromStorage,
|
||||||
onPress = IntConsumer { PacketDistributor.sendToServer(QuickStackPacket(mode, false)) })
|
onPress = IntConsumer { PacketDistributor.sendToServer(QuickStackPacket(mode, false)) })
|
||||||
|
|
||||||
button.childrenOrder = QuickMoveInput.Mode.entries.size + i
|
button.childrenOrder = 1000 + i
|
||||||
button.dockMargin = DockProperty.bottomRight(1f)
|
button.dockMargin = DockProperty.bottomRight(1f)
|
||||||
button.visible = false
|
button.visible = false
|
||||||
button.tooltips.add(mode.textFromStorage)
|
button.tooltips.add(mode.textFromStorage)
|
||||||
buttons.add(button)
|
buttons.add(button)
|
||||||
}
|
}
|
||||||
|
|
||||||
for ((i, mode) in QuickMoveInput.Mode.entries.filter { it != QuickMoveInput.Mode.RESTOCK_WITH_MOVE }.withIndex()) {
|
for ((i, mode) in QuickMoveInput.Mode.entries.withIndex()) {
|
||||||
val button = ButtonPanel.square18(
|
val button = ButtonPanel.square18(
|
||||||
screen, grid,
|
screen, grid,
|
||||||
mode.iconToStorage,
|
mode.iconToStorage,
|
||||||
|
@ -6,6 +6,7 @@ import net.minecraft.network.chat.Component
|
|||||||
import net.minecraft.world.item.ItemStack
|
import net.minecraft.world.item.ItemStack
|
||||||
import net.minecraft.world.item.Items
|
import net.minecraft.world.item.Items
|
||||||
import ru.dbotthepony.kommons.util.Delegate
|
import ru.dbotthepony.kommons.util.Delegate
|
||||||
|
import ru.dbotthepony.kommons.util.Either
|
||||||
import ru.dbotthepony.kommons.util.value
|
import ru.dbotthepony.kommons.util.value
|
||||||
import ru.dbotthepony.mc.otm.block.entity.MatteryDeviceBlockEntity
|
import ru.dbotthepony.mc.otm.block.entity.MatteryDeviceBlockEntity
|
||||||
import ru.dbotthepony.mc.otm.block.entity.RedstoneSetting
|
import ru.dbotthepony.mc.otm.block.entity.RedstoneSetting
|
||||||
@ -542,33 +543,43 @@ class DeviceControls<out S : MatteryScreen<*>>(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun quickMoveButtons(buttons: Map<QuickMoveInput.Mode, QuickMoveInput>, mainMode: QuickMoveInput.Mode, isFromStorage: Boolean, unfoldableSettings: Boolean = true) {
|
fun quickMoveButtons(
|
||||||
|
buttons: Map<QuickMoveInput.Mode, QuickMoveInput>,
|
||||||
|
fromStorage: Map<QuickMoveInput.Mode, QuickMoveInput>? = null
|
||||||
|
) {
|
||||||
object : FoldableButtonPanel() {
|
object : FoldableButtonPanel() {
|
||||||
private val input = buttons[mainMode]!!
|
|
||||||
|
|
||||||
override fun performAction() {
|
override fun performAction() {
|
||||||
input.clientInput()
|
if (fromStorage == null) {
|
||||||
|
buttons[QuickMoveInput.Mode.MOVE]!!.clientInput()
|
||||||
|
} else {
|
||||||
|
buttons[QuickMoveInput.Mode.RESTOCK_WITH_MOVE]!!.clientInput()
|
||||||
|
fromStorage[QuickMoveInput.Mode.RESTOCK]!!.clientInput()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override var isDisabled: Boolean
|
override var isDisabled: Boolean
|
||||||
get() { return !input.input.test(minecraft.player ?: return false) }
|
get() { return !buttons.values.first().input.test(minecraft.player ?: return false) }
|
||||||
set(value) {}
|
set(value) {}
|
||||||
|
|
||||||
override val hasExtraButtons: Boolean
|
override val hasExtraButtons: Boolean
|
||||||
get() = unfoldableSettings
|
get() = true
|
||||||
|
|
||||||
override fun doMakeButtons(): List<EditablePanel<S>> {
|
override fun doMakeButtons(): List<EditablePanel<S>> {
|
||||||
return buttons.entries
|
var stream = buttons.entries
|
||||||
.stream()
|
.stream()
|
||||||
.filter { (m, _) -> m != input.mode }
|
|
||||||
|
if (fromStorage == null)
|
||||||
|
stream = stream.filter { (m) -> m != QuickMoveInput.Mode.MOVE }
|
||||||
|
|
||||||
|
return stream
|
||||||
.map { (m, b) ->
|
.map { (m, b) ->
|
||||||
square18(
|
square18(
|
||||||
screen,
|
screen,
|
||||||
this,
|
this,
|
||||||
icon = if (isFromStorage) m.iconFromStorage else m.iconToStorage,
|
icon = if (fromStorage == null) m.iconFromStorage else m.iconToStorage,
|
||||||
onPress = { b.clientInput() }
|
onPress = { b.clientInput() }
|
||||||
).also {
|
).also {
|
||||||
if (isFromStorage)
|
if (fromStorage == null)
|
||||||
it.tooltips.add(m.textFromStorage)
|
it.tooltips.add(m.textFromStorage)
|
||||||
else
|
else
|
||||||
it.tooltips.add(m.textToStorage)
|
it.tooltips.add(m.textToStorage)
|
||||||
@ -578,21 +589,19 @@ class DeviceControls<out S : MatteryScreen<*>>(
|
|||||||
}
|
}
|
||||||
|
|
||||||
init {
|
init {
|
||||||
if (isFromStorage)
|
if (fromStorage == null)
|
||||||
tooltips.add(input.mode.textFromStorage)
|
tooltips.add(QuickMoveInput.Mode.MOVE.textFromStorage)
|
||||||
else
|
else {
|
||||||
tooltips.add(input.mode.textToStorage)
|
tooltips.add(TranslatableComponent("otm.gui.quickmove.exchange"))
|
||||||
|
tooltips.add(TranslatableComponent("otm.gui.quickmove.exchange.desc").withStyle(ChatFormatting.GRAY))
|
||||||
|
}
|
||||||
|
|
||||||
if (unfoldableSettings) {
|
|
||||||
tooltips.add(TextComponent(""))
|
tooltips.add(TextComponent(""))
|
||||||
tooltips.add(TranslatableComponent("otm.gui.quickmove_hint").withStyle(ChatFormatting.GRAY))
|
tooltips.add(TranslatableComponent("otm.gui.quickmove_hint").withStyle(ChatFormatting.GRAY))
|
||||||
} else {
|
|
||||||
makeButtons()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override val icon: IGUIRenderable
|
override val icon: IGUIRenderable
|
||||||
get() = if (isFromStorage) input.mode.iconFromStorage else input.mode.iconToStorage
|
get() = if (fromStorage == null) QuickMoveInput.Mode.MOVE.iconFromStorage else Widgets18.SMART_STORAGE_EXCHANGE
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,6 +2,7 @@ package ru.dbotthepony.mc.otm.compat.vanilla
|
|||||||
|
|
||||||
import net.minecraft.network.chat.Component
|
import net.minecraft.network.chat.Component
|
||||||
import net.minecraft.world.entity.player.Inventory
|
import net.minecraft.world.entity.player.Inventory
|
||||||
|
import ru.dbotthepony.kommons.util.Either
|
||||||
import ru.dbotthepony.mc.otm.client.render.RenderGravity
|
import ru.dbotthepony.mc.otm.client.render.RenderGravity
|
||||||
import ru.dbotthepony.mc.otm.client.screen.MatteryScreen
|
import ru.dbotthepony.mc.otm.client.screen.MatteryScreen
|
||||||
import ru.dbotthepony.mc.otm.client.screen.panels.Dock
|
import ru.dbotthepony.mc.otm.client.screen.panels.Dock
|
||||||
@ -31,11 +32,11 @@ class VanillaChestScreen(menu: AbstractVanillaChestMenu, inventory: Inventory, t
|
|||||||
|
|
||||||
val leftControls = DeviceControls(this, frame)
|
val leftControls = DeviceControls(this, frame)
|
||||||
leftControls.dockOnLeft = true
|
leftControls.dockOnLeft = true
|
||||||
leftControls.quickMoveButtons(menu.quickMoveFromStorage, QuickMoveInput.Mode.RESTOCK, true)
|
leftControls.quickMoveButtons(menu.quickMoveFromStorage)
|
||||||
|
|
||||||
val leftInventoryControls = DeviceControls(this, inventoryFrame!!)
|
val leftInventoryControls = DeviceControls(this, inventoryFrame!!)
|
||||||
leftInventoryControls.dockOnLeft = true
|
leftInventoryControls.dockOnLeft = true
|
||||||
leftInventoryControls.quickMoveButtons(menu.quickMoveToStorage, QuickMoveInput.Mode.RESTOCK_WITH_MOVE, false)
|
leftInventoryControls.quickMoveButtons(menu.quickMoveToStorage, menu.quickMoveFromStorage)
|
||||||
|
|
||||||
return frame
|
return frame
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user