aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/util
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/kotlin/util')
-rw-r--r--src/main/kotlin/util/mc/ScreenUtil.kt26
-rw-r--r--src/main/kotlin/util/mc/SlotUtils.kt35
-rw-r--r--src/main/kotlin/util/render/DrawContextExt.kt19
3 files changed, 80 insertions, 0 deletions
diff --git a/src/main/kotlin/util/mc/ScreenUtil.kt b/src/main/kotlin/util/mc/ScreenUtil.kt
new file mode 100644
index 0000000..36feb6b
--- /dev/null
+++ b/src/main/kotlin/util/mc/ScreenUtil.kt
@@ -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)]
+}
diff --git a/src/main/kotlin/util/mc/SlotUtils.kt b/src/main/kotlin/util/mc/SlotUtils.kt
new file mode 100644
index 0000000..4709dcf
--- /dev/null
+++ b/src/main/kotlin/util/mc/SlotUtils.kt
@@ -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
+ )
+ }
+}
diff --git a/src/main/kotlin/util/render/DrawContextExt.kt b/src/main/kotlin/util/render/DrawContextExt.kt
index 48698b4..3e086b8 100644
--- a/src/main/kotlin/util/render/DrawContextExt.kt
+++ b/src/main/kotlin/util/render/DrawContextExt.kt
@@ -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()
+}
+