More quickstack controls
This commit is contained in:
parent
9be8596a5f
commit
dcff861e71
@ -286,16 +286,12 @@ class ExopackInventoryScreen(menu: ExopackInventoryMenu) : MatteryScreen<Exopack
|
||||
|
||||
EffectListPanel(this, frame, menu.player, x - 56f, gridHeight = 6).tick()
|
||||
|
||||
val leftControls = DeviceControls(this, frame)
|
||||
leftControls.dockOnLeft = true
|
||||
leftControls.dockTop = 96f
|
||||
val quickStack = QuickStackControlsPanel(this)
|
||||
quickStack.dockNear = frame
|
||||
quickStack.dockTop = 96f
|
||||
quickStack.dock = Dock.LEFT
|
||||
|
||||
leftControls.addButton(ButtonPanel.square18(
|
||||
this, leftControls,
|
||||
icon = Widgets18.RESTOCK_WITH_MOVE_TO_STORAGE,
|
||||
onPress = IntConsumer { PacketDistributor.sendToServer(QuickStackPacket(QuickMoveInput.Mode.RESTOCK_WITH_MOVE, true)) }).also {
|
||||
it.tooltips.add(QuickMoveInput.Mode.RESTOCK_WITH_MOVE.textToStorage)
|
||||
})
|
||||
addPanel(quickStack)
|
||||
|
||||
return frame
|
||||
}
|
||||
|
@ -0,0 +1,159 @@
|
||||
package ru.dbotthepony.mc.otm.client.screen.panels
|
||||
|
||||
import com.mojang.blaze3d.platform.InputConstants
|
||||
import net.minecraft.ChatFormatting
|
||||
import net.minecraft.client.gui.screens.Screen
|
||||
import net.neoforged.neoforge.network.PacketDistributor
|
||||
import ru.dbotthepony.mc.otm.client.minecraft
|
||||
import ru.dbotthepony.mc.otm.client.render.IGUIRenderable
|
||||
import ru.dbotthepony.mc.otm.client.render.Widgets18
|
||||
import ru.dbotthepony.mc.otm.client.screen.panels.button.ButtonPanel
|
||||
import ru.dbotthepony.mc.otm.client.screen.panels.util.GridPanel
|
||||
import ru.dbotthepony.mc.otm.core.TextComponent
|
||||
import ru.dbotthepony.mc.otm.core.TranslatableComponent
|
||||
import ru.dbotthepony.mc.otm.menu.QuickMoveInput
|
||||
import ru.dbotthepony.mc.otm.network.QuickStackPacket
|
||||
import java.util.function.IntConsumer
|
||||
|
||||
class QuickStackControlsPanel<out S : Screen>(
|
||||
screen: S,
|
||||
parent: EditablePanel<*>? = null,
|
||||
) : EditablePanel<S>(screen, parent, 0f, 0f, 18f, 18f) {
|
||||
private val grid = GridPanel(screen, this, columns = 1, rows = 1)
|
||||
private val buttons = ArrayList<ButtonPanel<S>>()
|
||||
|
||||
init {
|
||||
grid.dock = Dock.FILL
|
||||
grid.layout = GridPanel.Layout.TOP_LEFT
|
||||
}
|
||||
|
||||
private inner class MainButton : ButtonPanel<S>(screen, grid, width = 18f, height = 18f) {
|
||||
init {
|
||||
dockMargin = DockProperty.left(1f)
|
||||
childrenOrder = -100
|
||||
tooltips.add(QuickMoveInput.Mode.RESTOCK_WITH_MOVE.textToStorage)
|
||||
tooltips.add(TextComponent(""))
|
||||
tooltips.add(TranslatableComponent("otm.gui.quickmove_hint").withStyle(ChatFormatting.GRAY))
|
||||
}
|
||||
|
||||
override var isDisabled: Boolean
|
||||
get() = minecraft.player!!.isSpectator
|
||||
set(value) {}
|
||||
|
||||
override val icon: IGUIRenderable
|
||||
get() = Widgets18.RESTOCK_WITH_MOVE_TO_STORAGE
|
||||
|
||||
override fun test(value: Int): Boolean {
|
||||
return value == InputConstants.MOUSE_BUTTON_LEFT || value == InputConstants.MOUSE_BUTTON_RIGHT
|
||||
}
|
||||
|
||||
override fun onClick(mouseButton: Int) {
|
||||
if (mouseButton == InputConstants.MOUSE_BUTTON_LEFT) {
|
||||
PacketDistributor.sendToServer(QuickStackPacket(QuickMoveInput.Mode.RESTOCK_WITH_MOVE, true))
|
||||
} else {
|
||||
buttons.forEach { it.visible = !it.visible }
|
||||
|
||||
if (buttons[0].visible) {
|
||||
grid.columns = 2
|
||||
grid.rows = 3
|
||||
} else {
|
||||
grid.columns = 1
|
||||
grid.rows = 1
|
||||
}
|
||||
|
||||
this@QuickStackControlsPanel.sizeToContents()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun mouseClickedInner(x: Double, y: Double, button: Int): Boolean {
|
||||
return false
|
||||
}
|
||||
|
||||
override fun sizeToContents() {
|
||||
val oldWidth = width
|
||||
val oldHeight = height
|
||||
super.sizeToContents()
|
||||
|
||||
if (parent == null && dockNear == null) {
|
||||
when (dock) {
|
||||
Dock.LEFT -> x -= width - oldWidth
|
||||
Dock.TOP -> y -= height - oldHeight
|
||||
else -> {} // do nothing
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onParented(parent: EditablePanel<*>) {
|
||||
super.onParented(parent)
|
||||
|
||||
dockNear = null
|
||||
}
|
||||
|
||||
var dockNear: EditablePanel<*>? = null
|
||||
|
||||
override fun tickInner() {
|
||||
super.tickInner()
|
||||
|
||||
val dockNear = dockNear
|
||||
|
||||
if (dockNear != null && parent == null && dock != Dock.NONE && dock != Dock.FILL) {
|
||||
x = dockNear.absoluteX
|
||||
y = dockNear.absoluteY
|
||||
|
||||
when (dock) {
|
||||
Dock.LEFT -> {
|
||||
x -= width + dockMargin.right
|
||||
y += dockMargin.top
|
||||
}
|
||||
|
||||
Dock.RIGHT -> {
|
||||
x += width + dockMargin.left
|
||||
y += dockMargin.top
|
||||
}
|
||||
|
||||
Dock.TOP -> {
|
||||
y -= height + dockMargin.bottom
|
||||
x += dockMargin.left
|
||||
}
|
||||
|
||||
Dock.BOTTOM -> {
|
||||
y += height + dockMargin.top
|
||||
x += dockMargin.left
|
||||
}
|
||||
|
||||
else -> throw RuntimeException("you w0t m8?")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
init {
|
||||
for ((i, mode) in QuickMoveInput.Mode.entries.withIndex()) {
|
||||
val button = ButtonPanel.square18(
|
||||
screen, grid,
|
||||
mode.iconFromStorage,
|
||||
onPress = IntConsumer { PacketDistributor.sendToServer(QuickStackPacket(mode, false)) })
|
||||
|
||||
button.childrenOrder = QuickMoveInput.Mode.entries.size + i
|
||||
button.dockMargin = DockProperty.left(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()) {
|
||||
val button = ButtonPanel.square18(
|
||||
screen, grid,
|
||||
mode.iconToStorage,
|
||||
onPress = IntConsumer { PacketDistributor.sendToServer(QuickStackPacket(mode, true)) })
|
||||
|
||||
button.childrenOrder = i + 1
|
||||
button.dockMargin = DockProperty.left(1f)
|
||||
button.visible = false
|
||||
button.tooltips.add(mode.textToStorage)
|
||||
buttons.add(button)
|
||||
}
|
||||
|
||||
MainButton()
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user