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) {
|
||||
with(provider.english) {
|
||||
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_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.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")
|
||||
|
||||
|
@ -981,12 +981,14 @@ private fun androidFeatures(provider: MatteryLanguageProvider) {
|
||||
private fun gui(provider: MatteryLanguageProvider) {
|
||||
with(provider.russian) {
|
||||
gui("quickmove_from.restock", "Быстрое пополнение из хранилища")
|
||||
gui("quickmove_from.restock_with_move", "Быстрое перемещение из хранилища")
|
||||
gui("quickmove_from.restock_with_move", "Быстрое складирование из хранилища")
|
||||
gui("quickmove_from.move", "Взять всё")
|
||||
|
||||
gui("quickmove_to.restock", "Быстрое пополнение в хранилище")
|
||||
gui("quickmove_to.restock_with_move", "Быстрое перемещение в хранилище")
|
||||
gui("quickmove_to.restock_with_move", "Быстрое складирование в хранилище")
|
||||
gui("quickmove_to.move", "Переместить всё")
|
||||
gui("quickmove.exchange", "Умный обмен с хранилищем")
|
||||
gui("quickmove.exchange.desc", "Слоты с фильтрами заполняются до максимума, всё остальное быстро складируется из экзопака")
|
||||
|
||||
gui("quickmove_hint", "Правый клик чтоб увидеть все варианты")
|
||||
|
||||
|
@ -2,6 +2,7 @@ package ru.dbotthepony.mc.otm.client.screen.decorative
|
||||
|
||||
import net.minecraft.network.chat.Component
|
||||
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.panels.FramePanel
|
||||
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)
|
||||
leftControls.dockOnLeft = true
|
||||
leftControls.quickMoveButtons(menu.quickMoveFromStorage, QuickMoveInput.Mode.RESTOCK, true)
|
||||
leftControls.quickMoveButtons(menu.quickMoveFromStorage)
|
||||
|
||||
val leftInventoryControls = DeviceControls(this, inventoryFrame!!)
|
||||
leftInventoryControls.dockOnLeft = true
|
||||
leftInventoryControls.quickMoveButtons(menu.quickMoveToStorage, QuickMoveInput.Mode.RESTOCK_WITH_MOVE, false)
|
||||
leftInventoryControls.quickMoveButtons(menu.quickMoveToStorage, menu.quickMoveFromStorage)
|
||||
|
||||
return frame
|
||||
}
|
||||
|
@ -22,19 +22,27 @@ class QuickStackControlsPanel<out S : Screen>(
|
||||
y: Float = 0f
|
||||
) : EditablePanel<S>(screen, parent, x, y, 18f, 18f) {
|
||||
private val grid = GridPanel(screen, this, columns = 1, rows = 1)
|
||||
private val buttons = ArrayList<ButtonPanel<S>>()
|
||||
private val buttons = ArrayList<EditablePanel<S>>()
|
||||
|
||||
init {
|
||||
grid.dock = Dock.FILL
|
||||
grid.layout = GridPanel.Layout.TOP_RIGHT
|
||||
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) {
|
||||
init {
|
||||
dockMargin = DockProperty.bottom(1f)
|
||||
childrenOrder = -100
|
||||
tooltips.add(QuickMoveInput.Mode.RESTOCK_WITH_MOVE.textToStorage)
|
||||
childrenOrder = -100000
|
||||
tooltips.add(TranslatableComponent("otm.gui.quickmove.exchange"))
|
||||
tooltips.add(TranslatableComponent("otm.gui.quickmove.exchange.desc").withStyle(ChatFormatting.GRAY))
|
||||
tooltips.add(TextComponent(""))
|
||||
tooltips.add(TranslatableComponent("otm.gui.quickmove_hint").withStyle(ChatFormatting.GRAY))
|
||||
}
|
||||
@ -44,7 +52,7 @@ class QuickStackControlsPanel<out S : Screen>(
|
||||
set(value) {}
|
||||
|
||||
override val icon: IGUIRenderable
|
||||
get() = Widgets18.RESTOCK_WITH_MOVE_TO_STORAGE
|
||||
get() = Widgets18.SMART_STORAGE_EXCHANGE
|
||||
|
||||
override fun test(value: Int): Boolean {
|
||||
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) {
|
||||
if (mouseButton == InputConstants.MOUSE_BUTTON_LEFT) {
|
||||
PacketDistributor.sendToServer(QuickStackPacket(QuickMoveInput.Mode.RESTOCK_WITH_MOVE, true))
|
||||
PacketDistributor.sendToServer(QuickStackPacket(QuickMoveInput.Mode.RESTOCK, false))
|
||||
} else {
|
||||
buttons.forEach { it.visible = !it.visible }
|
||||
|
||||
if (buttons[0].visible) {
|
||||
grid.columns = 2
|
||||
grid.rows = 3
|
||||
grid.rows = 4
|
||||
} else {
|
||||
grid.columns = 1
|
||||
grid.rows = 1
|
||||
@ -86,14 +95,14 @@ class QuickStackControlsPanel<out S : Screen>(
|
||||
mode.iconFromStorage,
|
||||
onPress = IntConsumer { PacketDistributor.sendToServer(QuickStackPacket(mode, false)) })
|
||||
|
||||
button.childrenOrder = QuickMoveInput.Mode.entries.size + i
|
||||
button.childrenOrder = 1000 + i
|
||||
button.dockMargin = DockProperty.bottomRight(1f)
|
||||
button.visible = false
|
||||
button.tooltips.add(mode.textFromStorage)
|
||||
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(
|
||||
screen, grid,
|
||||
mode.iconToStorage,
|
||||
|
@ -6,6 +6,7 @@ import net.minecraft.network.chat.Component
|
||||
import net.minecraft.world.item.ItemStack
|
||||
import net.minecraft.world.item.Items
|
||||
import ru.dbotthepony.kommons.util.Delegate
|
||||
import ru.dbotthepony.kommons.util.Either
|
||||
import ru.dbotthepony.kommons.util.value
|
||||
import ru.dbotthepony.mc.otm.block.entity.MatteryDeviceBlockEntity
|
||||
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() {
|
||||
private val input = buttons[mainMode]!!
|
||||
|
||||
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
|
||||
get() { return !input.input.test(minecraft.player ?: return false) }
|
||||
get() { return !buttons.values.first().input.test(minecraft.player ?: return false) }
|
||||
set(value) {}
|
||||
|
||||
override val hasExtraButtons: Boolean
|
||||
get() = unfoldableSettings
|
||||
get() = true
|
||||
|
||||
override fun doMakeButtons(): List<EditablePanel<S>> {
|
||||
return buttons.entries
|
||||
var stream = buttons.entries
|
||||
.stream()
|
||||
.filter { (m, _) -> m != input.mode }
|
||||
|
||||
if (fromStorage == null)
|
||||
stream = stream.filter { (m) -> m != QuickMoveInput.Mode.MOVE }
|
||||
|
||||
return stream
|
||||
.map { (m, b) ->
|
||||
square18(
|
||||
screen,
|
||||
this,
|
||||
icon = if (isFromStorage) m.iconFromStorage else m.iconToStorage,
|
||||
icon = if (fromStorage == null) m.iconFromStorage else m.iconToStorage,
|
||||
onPress = { b.clientInput() }
|
||||
).also {
|
||||
if (isFromStorage)
|
||||
if (fromStorage == null)
|
||||
it.tooltips.add(m.textFromStorage)
|
||||
else
|
||||
it.tooltips.add(m.textToStorage)
|
||||
@ -578,21 +589,19 @@ class DeviceControls<out S : MatteryScreen<*>>(
|
||||
}
|
||||
|
||||
init {
|
||||
if (isFromStorage)
|
||||
tooltips.add(input.mode.textFromStorage)
|
||||
else
|
||||
tooltips.add(input.mode.textToStorage)
|
||||
|
||||
if (unfoldableSettings) {
|
||||
tooltips.add(TextComponent(""))
|
||||
tooltips.add(TranslatableComponent("otm.gui.quickmove_hint").withStyle(ChatFormatting.GRAY))
|
||||
} else {
|
||||
makeButtons()
|
||||
if (fromStorage == null)
|
||||
tooltips.add(QuickMoveInput.Mode.MOVE.textFromStorage)
|
||||
else {
|
||||
tooltips.add(TranslatableComponent("otm.gui.quickmove.exchange"))
|
||||
tooltips.add(TranslatableComponent("otm.gui.quickmove.exchange.desc").withStyle(ChatFormatting.GRAY))
|
||||
}
|
||||
|
||||
tooltips.add(TextComponent(""))
|
||||
tooltips.add(TranslatableComponent("otm.gui.quickmove_hint").withStyle(ChatFormatting.GRAY))
|
||||
}
|
||||
|
||||
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.world.entity.player.Inventory
|
||||
import ru.dbotthepony.kommons.util.Either
|
||||
import ru.dbotthepony.mc.otm.client.render.RenderGravity
|
||||
import ru.dbotthepony.mc.otm.client.screen.MatteryScreen
|
||||
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)
|
||||
leftControls.dockOnLeft = true
|
||||
leftControls.quickMoveButtons(menu.quickMoveFromStorage, QuickMoveInput.Mode.RESTOCK, true)
|
||||
leftControls.quickMoveButtons(menu.quickMoveFromStorage)
|
||||
|
||||
val leftInventoryControls = DeviceControls(this, inventoryFrame!!)
|
||||
leftInventoryControls.dockOnLeft = true
|
||||
leftInventoryControls.quickMoveButtons(menu.quickMoveToStorage, QuickMoveInput.Mode.RESTOCK_WITH_MOVE, false)
|
||||
leftInventoryControls.quickMoveButtons(menu.quickMoveToStorage, menu.quickMoveFromStorage)
|
||||
|
||||
return frame
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user