Add slot binding
This commit is contained in:
26
src/main/kotlin/util/mc/ScreenUtil.kt
Normal file
26
src/main/kotlin/util/mc/ScreenUtil.kt
Normal file
@@ -0,0 +1,26 @@
|
||||
package moe.nea.firmament.util.mc
|
||||
|
||||
import net.minecraft.client.gui.screen.Screen
|
||||
import net.minecraft.client.gui.screen.ingame.HandledScreen
|
||||
import net.minecraft.entity.player.PlayerInventory
|
||||
import net.minecraft.screen.slot.Slot
|
||||
|
||||
object ScreenUtil {
|
||||
private var lastScreen: Screen? = null
|
||||
private var slotsByIndex: Map<SlotIndex, Slot> = mapOf()
|
||||
|
||||
data class SlotIndex(val index: Int, val isPlayerInventory: Boolean)
|
||||
|
||||
fun Screen.getSlotsByIndex(): Map<SlotIndex, Slot> {
|
||||
if (this !is HandledScreen<*>) return mapOf()
|
||||
if (lastScreen === this) return slotsByIndex
|
||||
lastScreen = this
|
||||
slotsByIndex = this.screenHandler.slots.associate {
|
||||
SlotIndex(it.index, it.inventory is PlayerInventory) to it
|
||||
}
|
||||
return slotsByIndex
|
||||
}
|
||||
|
||||
fun Screen.getSlotByIndex( index: Int, isPlayerInventory: Boolean): Slot? =
|
||||
getSlotsByIndex()[SlotIndex(index, isPlayerInventory)]
|
||||
}
|
||||
35
src/main/kotlin/util/mc/SlotUtils.kt
Normal file
35
src/main/kotlin/util/mc/SlotUtils.kt
Normal file
@@ -0,0 +1,35 @@
|
||||
package moe.nea.firmament.util.mc
|
||||
|
||||
import net.minecraft.screen.ScreenHandler
|
||||
import net.minecraft.screen.slot.Slot
|
||||
import net.minecraft.screen.slot.SlotActionType
|
||||
import moe.nea.firmament.util.MC
|
||||
|
||||
object SlotUtils {
|
||||
fun Slot.clickMiddleMouseButton(handler: ScreenHandler) {
|
||||
MC.interactionManager?.clickSlot(
|
||||
handler.syncId,
|
||||
this.id,
|
||||
2,
|
||||
SlotActionType.CLONE,
|
||||
MC.player
|
||||
)
|
||||
}
|
||||
|
||||
fun Slot.swapWithHotBar(handler: ScreenHandler, hotbarIndex: Int) {
|
||||
MC.interactionManager?.clickSlot(
|
||||
handler.syncId, this.id,
|
||||
hotbarIndex, SlotActionType.SWAP,
|
||||
MC.player)
|
||||
}
|
||||
|
||||
fun Slot.clickRightMouseButton(handler: ScreenHandler) {
|
||||
MC.interactionManager?.clickSlot(
|
||||
handler.syncId,
|
||||
this.id,
|
||||
1,
|
||||
SlotActionType.PICKUP,
|
||||
MC.player
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,27 @@
|
||||
package moe.nea.firmament.util.render
|
||||
|
||||
import com.mojang.blaze3d.systems.RenderSystem
|
||||
import me.shedaniel.math.Color
|
||||
import org.joml.Matrix4f
|
||||
import net.minecraft.client.gui.DrawContext
|
||||
import moe.nea.firmament.util.MC
|
||||
|
||||
fun DrawContext.isUntranslatedGuiDrawContext(): Boolean {
|
||||
return (matrices.peek().positionMatrix.properties() and Matrix4f.PROPERTY_IDENTITY.toInt()) != 0
|
||||
}
|
||||
|
||||
fun DrawContext.drawLine(fromX: Int, fromY: Int, toX: Int, toY: Int, color: Color) {
|
||||
// TODO: push scissors
|
||||
if (toY < fromY) {
|
||||
drawLine(toX, toY, fromX, fromY, color)
|
||||
return
|
||||
}
|
||||
RenderSystem.lineWidth(MC.window.scaleFactor.toFloat())
|
||||
val buf = this.vertexConsumers.getBuffer(RenderInWorldContext.RenderLayers.LINES)
|
||||
buf.vertex(fromX.toFloat(), fromY.toFloat(), 0F).color(color.color)
|
||||
.normal(toX - fromX.toFloat(), toY - fromY.toFloat(), 0F)
|
||||
buf.vertex(toX.toFloat(), toY.toFloat(), 0F).color(color.color)
|
||||
.normal(toX - fromX.toFloat(), toY - fromY.toFloat(), 0F)
|
||||
this.draw()
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user