aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/com/dulkirfabric
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/kotlin/com/dulkirfabric')
-rw-r--r--src/main/kotlin/com/dulkirfabric/DulkirModFabric.kt4
-rw-r--r--src/main/kotlin/com/dulkirfabric/Registrations.kt17
-rw-r--r--src/main/kotlin/com/dulkirfabric/events/MouseScrollEvent.kt12
-rw-r--r--src/main/kotlin/com/dulkirfabric/features/RenderBoxTest.kt2
-rw-r--r--src/main/kotlin/com/dulkirfabric/features/TooltipImpl.kt60
-rw-r--r--src/main/kotlin/com/dulkirfabric/util/WorldRenderUtils.kt10
6 files changed, 95 insertions, 10 deletions
diff --git a/src/main/kotlin/com/dulkirfabric/DulkirModFabric.kt b/src/main/kotlin/com/dulkirfabric/DulkirModFabric.kt
index 112bf2a..8748f20 100644
--- a/src/main/kotlin/com/dulkirfabric/DulkirModFabric.kt
+++ b/src/main/kotlin/com/dulkirfabric/DulkirModFabric.kt
@@ -14,6 +14,7 @@
package com.dulkirfabric
import com.dulkirfabric.config.DulkirConfig
+import com.llamalad7.mixinextras.MixinExtrasBootstrap
import meteordevelopment.orbit.EventBus
import net.fabricmc.api.ModInitializer
import net.minecraft.client.MinecraftClient
@@ -37,6 +38,9 @@ object DulkirModFabric : ModInitializer {
lookupInMethod.invoke(null, klass, MethodHandles.lookup()) as MethodHandles.Lookup
}
+ // Mixin Extras
+ MixinExtrasBootstrap.init()
+
Registrations.registerEventListeners()
Registrations.registerCommands()
Registrations.registerEvents()
diff --git a/src/main/kotlin/com/dulkirfabric/Registrations.kt b/src/main/kotlin/com/dulkirfabric/Registrations.kt
index a3ab96d..4ef80e9 100644
--- a/src/main/kotlin/com/dulkirfabric/Registrations.kt
+++ b/src/main/kotlin/com/dulkirfabric/Registrations.kt
@@ -4,16 +4,16 @@ import com.dulkirfabric.DulkirModFabric.EVENT_BUS
import com.dulkirfabric.commands.ConfigCommand
import com.dulkirfabric.commands.DynamicKeyCommand
import com.dulkirfabric.commands.JoinDungeonCommands
-import com.dulkirfabric.events.ChatReceivedEvent
-import com.dulkirfabric.events.ClientTickEvent
-import com.dulkirfabric.events.OverlayReceivedEvent
-import com.dulkirfabric.events.WorldRenderLastEvent
+import com.dulkirfabric.events.*
import com.dulkirfabric.features.KeyShortCutImpl
import com.dulkirfabric.features.RenderBoxTest
+import com.dulkirfabric.features.TooltipImpl
import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents
import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents
import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents
+import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents
+import net.fabricmc.fabric.api.client.screen.v1.ScreenMouseEvents
/**
@@ -46,6 +46,7 @@ object Registrations {
EVENT_BUS.subscribe(DulkirModFabric)
EVENT_BUS.subscribe(KeyShortCutImpl)
EVENT_BUS.subscribe(RenderBoxTest)
+ EVENT_BUS.subscribe(TooltipImpl)
}
fun registerEvents() {
@@ -62,5 +63,13 @@ object Registrations {
WorldRenderEvents.END.register(
WorldRenderEvents.End { context -> WorldRenderLastEvent(context).post()}
)
+ ScreenEvents.BEFORE_INIT.register(
+ ScreenEvents.BeforeInit { client, screen, scaledWidth, scaledHeight ->
+ ScreenMouseEvents.beforeMouseScroll(screen).register(ScreenMouseEvents.BeforeMouseScroll {
+ coolScreen, mouseX, mouseY, horizontalAmount, verticalAmount ->
+ MouseScrollEvent(coolScreen, mouseX, mouseY, horizontalAmount, verticalAmount).post()
+ })
+ }
+ )
}
} \ No newline at end of file
diff --git a/src/main/kotlin/com/dulkirfabric/events/MouseScrollEvent.kt b/src/main/kotlin/com/dulkirfabric/events/MouseScrollEvent.kt
new file mode 100644
index 0000000..ebcbe69
--- /dev/null
+++ b/src/main/kotlin/com/dulkirfabric/events/MouseScrollEvent.kt
@@ -0,0 +1,12 @@
+package com.dulkirfabric.events
+
+import com.dulkirfabric.events.base.Event
+import net.minecraft.client.gui.screen.Screen
+
+data class MouseScrollEvent(
+ val screen: Screen,
+ val mouseX: Double,
+ val mouseY: Double,
+ val horizontalScrollAmount: Double,
+ val verticalScrollAmount: Double
+): Event()
diff --git a/src/main/kotlin/com/dulkirfabric/features/RenderBoxTest.kt b/src/main/kotlin/com/dulkirfabric/features/RenderBoxTest.kt
index 6a0c048..af76c44 100644
--- a/src/main/kotlin/com/dulkirfabric/features/RenderBoxTest.kt
+++ b/src/main/kotlin/com/dulkirfabric/features/RenderBoxTest.kt
@@ -12,7 +12,7 @@ object RenderBoxTest {
fun onRender(event: WorldRenderLastEvent) {
WorldRenderUtils.drawBox(
event.context, Box(0.0, 0.0, 0.0, 1.0, 1.0, 1.0),
- Color(255, 255, 255, 255), 3f, true
+ Color(255, 255, 255, 255), 10f, true
)
}
} \ No newline at end of file
diff --git a/src/main/kotlin/com/dulkirfabric/features/TooltipImpl.kt b/src/main/kotlin/com/dulkirfabric/features/TooltipImpl.kt
new file mode 100644
index 0000000..100b880
--- /dev/null
+++ b/src/main/kotlin/com/dulkirfabric/features/TooltipImpl.kt
@@ -0,0 +1,60 @@
+package com.dulkirfabric.features
+
+import com.dulkirfabric.DulkirModFabric.mc
+import com.dulkirfabric.events.ClientTickEvent
+import com.dulkirfabric.events.MouseScrollEvent
+import meteordevelopment.orbit.EventHandler
+import net.minecraft.client.MinecraftClient
+import net.minecraft.client.util.InputUtil
+import org.joml.Vector2i
+import org.joml.Vector2ic
+import org.lwjgl.glfw.GLFW
+
+object TooltipImpl {
+
+ var scaleBuffer = 1f
+ var horizontalBuffer = 0.0
+ var verticalBuffer = 0.0
+
+ var tickScale = 0f
+ var tickHorizontal = 0
+ var tickVertical = 0
+
+ var prevTickX = 0
+ var prevTickY = 0
+
+ fun calculatePos(v: Vector2ic): Vector2ic {
+ // calculate the position of the tooltip based on the scroll amount
+ val partialTicks = MinecraftClient.getInstance().tickDelta
+ val newVec = v.add(prevTickX + ((tickHorizontal - prevTickX) * partialTicks).toInt(),
+ prevTickY + ((tickVertical - prevTickY) * partialTicks).toInt(), Vector2i())
+ return newVec
+ }
+
+ fun applyScale() {
+
+ }
+
+ @EventHandler
+ fun onTick(event: ClientTickEvent) {
+ // flushes the buffer to a scroll amount this tick, will be interpolated in calculatePos
+ prevTickX = tickHorizontal
+ prevTickY = tickVertical
+ tickHorizontal = horizontalBuffer.toInt()
+ tickVertical = verticalBuffer.toInt()
+ tickScale = scaleBuffer
+ }
+
+ @EventHandler
+ fun onScroll(event: MouseScrollEvent) {
+ if (event.verticalScrollAmount == 0.0) return
+ val handle = MinecraftClient.getInstance().window.handle
+ if (InputUtil.isKeyPressed(handle, GLFW.GLFW_KEY_LEFT_SHIFT)) {
+ horizontalBuffer += (mc.window.width / 192) * event.verticalScrollAmount
+ } else if (InputUtil.isKeyPressed(handle, GLFW.GLFW_KEY_LEFT_CONTROL)) {
+ scaleBuffer += .1f * event.verticalScrollAmount.toFloat()
+ } else {
+ verticalBuffer += (mc.window.height / 108) * event.verticalScrollAmount
+ }
+ }
+} \ No newline at end of file
diff --git a/src/main/kotlin/com/dulkirfabric/util/WorldRenderUtils.kt b/src/main/kotlin/com/dulkirfabric/util/WorldRenderUtils.kt
index d5008ba..f5daccf 100644
--- a/src/main/kotlin/com/dulkirfabric/util/WorldRenderUtils.kt
+++ b/src/main/kotlin/com/dulkirfabric/util/WorldRenderUtils.kt
@@ -1,17 +1,14 @@
package com.dulkirfabric.util
import com.mojang.blaze3d.platform.GlConst
-import com.mojang.blaze3d.platform.GlStateManager
import com.mojang.blaze3d.systems.RenderSystem
import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext
import net.minecraft.client.render.BufferBuilder
import net.minecraft.client.render.GameRenderer
-import net.minecraft.client.render.Tessellator
import net.minecraft.client.render.VertexFormat
import net.minecraft.client.render.VertexFormats
import net.minecraft.client.util.math.MatrixStack
import net.minecraft.util.math.Box
-import net.minecraft.util.math.Direction.Axis
import org.joml.Vector3f
import java.awt.Color
@@ -48,10 +45,11 @@ object WorldRenderUtils {
) {
val matrices = context.matrixStack()
matrices.push()
+ val prevShader = RenderSystem.getShader()
RenderSystem.setShader(GameRenderer::getRenderTypeLinesProgram)
RenderSystem.disableBlend()
RenderSystem.disableCull()
- RenderSystem.defaultBlendFunc()
+ // RenderSystem.defaultBlendFunc()
RenderSystem.lineWidth(thickness)
RenderSystem.setShaderColor(color.red / 255f, color.green / 255f, color.blue / 255f, color.alpha / 255f)
if (!depthTest) {
@@ -92,10 +90,12 @@ object WorldRenderUtils {
RenderSystem.enableDepthTest()
- RenderSystem.disableBlend()
+ RenderSystem.enableBlend()
RenderSystem.setShaderColor(
1f, 1f, 1f, 1f
)
+ RenderSystem.setShader { prevShader }
+ RenderSystem.enableCull()
matrices.pop()
}
} \ No newline at end of file