diff options
Diffstat (limited to 'src/main/kotlin/util')
-rw-r--r-- | src/main/kotlin/util/mc/ScreenUtil.kt | 26 | ||||
-rw-r--r-- | src/main/kotlin/util/mc/SlotUtils.kt | 35 | ||||
-rw-r--r-- | src/main/kotlin/util/render/DrawContextExt.kt | 19 |
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() +} + |