parent
1e654ff079
commit
d3e2b1928a
@ -2,6 +2,9 @@ package ru.dbotthepony.mc.otm.client
|
||||
|
||||
import com.mojang.blaze3d.platform.InputConstants
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectArrayMap
|
||||
import net.minecraft.client.gui.components.Widget
|
||||
import net.minecraft.client.gui.components.events.GuiEventListener
|
||||
import net.minecraft.client.gui.screens.Screen
|
||||
import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen
|
||||
import net.minecraft.client.gui.screens.inventory.InventoryScreen
|
||||
import net.minecraft.world.inventory.InventoryMenu
|
||||
@ -11,6 +14,7 @@ import net.minecraftforge.client.event.ScreenEvent
|
||||
import net.minecraftforge.client.event.ScreenEvent.MouseDragged
|
||||
import net.minecraftforge.client.event.ScreenEvent.MouseScrolled
|
||||
import ru.dbotthepony.mc.otm.android.feature.JumpBoostFeature
|
||||
import ru.dbotthepony.mc.otm.capability.MatteryPlayerCapability
|
||||
import ru.dbotthepony.mc.otm.capability.matteryPlayer
|
||||
import ru.dbotthepony.mc.otm.client.render.UVWindingOrder
|
||||
import ru.dbotthepony.mc.otm.client.render.Widgets18
|
||||
@ -27,6 +31,7 @@ import ru.dbotthepony.mc.otm.core.integerDivisionUp
|
||||
import ru.dbotthepony.mc.otm.menu.MatteryMenu
|
||||
import ru.dbotthepony.mc.otm.network.MenuNetworkChannel
|
||||
import ru.dbotthepony.mc.otm.registry.AndroidFeatures
|
||||
import java.util.function.Consumer
|
||||
|
||||
fun onMovementInputUpdate(event: MovementInputUpdateEvent) {
|
||||
val ply = event.entity
|
||||
@ -103,7 +108,14 @@ private fun inventoryLogic(event: ScreenEvent.Init.Post) {
|
||||
}
|
||||
}
|
||||
|
||||
private fun exosuitInventoryLogic(event: ScreenEvent.Init.Post) {
|
||||
private class InventoryScrollbarPanel<S : Screen>(screen: S, matteryPlayer: MatteryPlayerCapability) : DiscreteScrollBarPanel<S>(
|
||||
screen, null, { integerDivisionUp(matteryPlayer.exoSuitContainer.containerSize, 9) }, { _, _, newScroll ->
|
||||
inventoryScroll = newScroll
|
||||
MenuNetworkChannel.sendToServer(InventoryScrollPacket(newScroll).also { it.play(matteryPlayer.ply) })
|
||||
}, isSlim = true
|
||||
)
|
||||
|
||||
private fun exosuitInventoryLogic(screen: Screen, addListener: (GuiEventListener) -> Unit) {
|
||||
val player = minecraft.player ?: return
|
||||
val matteryPlayer = player.matteryPlayer ?: return
|
||||
|
||||
@ -111,8 +123,6 @@ private fun exosuitInventoryLogic(event: ScreenEvent.Init.Post) {
|
||||
return
|
||||
}
|
||||
|
||||
val screen = event.screen
|
||||
|
||||
if (screen !is AbstractContainerScreen<*> || screen.menu is MatteryMenu || screen.menu is InventoryMenu) {
|
||||
return
|
||||
}
|
||||
@ -146,18 +156,18 @@ private fun exosuitInventoryLogic(event: ScreenEvent.Init.Post) {
|
||||
.max { o1, o2 -> o1.x.compareTo(o2.x) }
|
||||
.get().x.toFloat() + 26f
|
||||
|
||||
val scrollbar = DiscreteScrollBarPanel(screen, null, { integerDivisionUp(matteryPlayer.exoSuitContainer.containerSize, 9) }, { _, _, newScroll ->
|
||||
inventoryScroll = newScroll
|
||||
MenuNetworkChannel.sendToServer(InventoryScrollPacket(newScroll).also { it.play(player) })
|
||||
}, isSlim = true)
|
||||
val findScrollbar = (screen.renderables.firstOrNull { it is Panel2Widget<*, *> && it.panel is InventoryScrollbarPanel } as Panel2Widget<*, *>?)?.panel as InventoryScrollbarPanel?
|
||||
val scrollbar = findScrollbar ?: InventoryScrollbarPanel(screen, matteryPlayer)
|
||||
|
||||
// HOW
|
||||
scrollbar.x = mostLeft + screen.guiLeft - 9f
|
||||
scrollbar.y = mostTop + screen.guiTop - 1f
|
||||
scrollbar.height = mostBottom - mostTop + AbstractSlotPanel.SIZE
|
||||
|
||||
val widget = Panel2Widget(scrollbar)
|
||||
event.addListener(widget)
|
||||
if (findScrollbar == null) {
|
||||
val widget = Panel2Widget(scrollbar)
|
||||
addListener(widget)
|
||||
}
|
||||
|
||||
scrollbar.scroll = inventoryScroll
|
||||
}
|
||||
@ -196,7 +206,7 @@ fun onMouseScrolled(event: MouseScrolled.Pre) {
|
||||
|
||||
fun onPostScreenInit(event: ScreenEvent.Init.Post) {
|
||||
inventoryLogic(event)
|
||||
exosuitInventoryLogic(event)
|
||||
exosuitInventoryLogic(event.screen, event::addListener)
|
||||
}
|
||||
|
||||
fun onScreenOpen(event: ScreenEvent.Opening) {
|
||||
|
Loading…
Reference in New Issue
Block a user