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