diff options
Diffstat (limited to 'src/main/kotlin/dulkirmod')
-rw-r--r-- | src/main/kotlin/dulkirmod/DulkirMod.kt | 27 | ||||
-rw-r--r-- | src/main/kotlin/dulkirmod/config/Config.kt | 20 | ||||
-rw-r--r-- | src/main/kotlin/dulkirmod/features/ScalableTooltips.kt | 146 |
3 files changed, 181 insertions, 12 deletions
diff --git a/src/main/kotlin/dulkirmod/DulkirMod.kt b/src/main/kotlin/dulkirmod/DulkirMod.kt index 69ac692..7022105 100644 --- a/src/main/kotlin/dulkirmod/DulkirMod.kt +++ b/src/main/kotlin/dulkirmod/DulkirMod.kt @@ -61,17 +61,20 @@ class DulkirMod { fun onInit(event: FMLInitializationEvent) { config.init() // REGISTER Classes and such HERE - MinecraftForge.EVENT_BUS.register(this) - MinecraftForge.EVENT_BUS.register(ChatEvent()) - MinecraftForge.EVENT_BUS.register(NametagCleaner) - MinecraftForge.EVENT_BUS.register(titleUtils) - MinecraftForge.EVENT_BUS.register(ArachneTimer()) - MinecraftForge.EVENT_BUS.register(MatchoAlert()) - MinecraftForge.EVENT_BUS.register(Croesus()) - MinecraftForge.EVENT_BUS.register(ContainerNameUtil()) - MinecraftForge.EVENT_BUS.register(DungeonLeap()) - MinecraftForge.EVENT_BUS.register(AbiphoneDND()) - MinecraftForge.EVENT_BUS.register(KeeperWaypoints()) + val mcBus = MinecraftForge.EVENT_BUS + mcBus.register(this) + mcBus.register(ChatEvent()) + mcBus.register(NametagCleaner) + mcBus.register(titleUtils) + mcBus.register(ArachneTimer()) + mcBus.register(MatchoAlert()) + mcBus.register(Croesus()) + mcBus.register(ContainerNameUtil()) + mcBus.register(DungeonLeap()) + mcBus.register(AbiphoneDND()) + mcBus.register(KeeperWaypoints()) + mcBus.register(ScalableTooltips) + keyBinds.forEach(ClientRegistry::registerKeyBinding) } @@ -118,7 +121,7 @@ class DulkirMod { companion object { const val MOD_ID = "dulkirmod" const val MOD_NAME = "Dulkir Mod" - const val MOD_VERSION = "1.1.3" + const val MOD_VERSION = "1.1.4" const val CHAT_PREFIX = "§f<§3DulkirMod§f>" val mc: Minecraft = Minecraft.getMinecraft() diff --git a/src/main/kotlin/dulkirmod/config/Config.kt b/src/main/kotlin/dulkirmod/config/Config.kt index 83ffe07..32f917e 100644 --- a/src/main/kotlin/dulkirmod/config/Config.kt +++ b/src/main/kotlin/dulkirmod/config/Config.kt @@ -56,6 +56,25 @@ object Config : Vigilant(File("./config/dulkirmod/config.toml"), "DulkirMod", so @Property( type = PropertyType.SWITCH, + name = "Scalable Tooltips", + description = "more or less TOOLTIP", + category = "General" + ) + var scaledTooltips = false + + @Property( + type = PropertyType.DECIMAL_SLIDER, + name = "Tooltip Scale", + description = "1 is default", + category = "General", + minF = 0f, + maxF = 2f, + decimalPlaces = 1 + ) + var tooltipSize = 1f + + @Property( + type = PropertyType.SWITCH, name = "Hide Healer fairy", description = "Probably disable when not in dungeons for now. Will fix later.", category = "Dungeons" @@ -525,6 +544,7 @@ object Config : Vigilant(File("./config/dulkirmod/config.toml"), "DulkirMod", so addDependency("highlightLeapName", "highlightLeap") addDependency("abiCallerID", "abiDND") addDependency("hurtCamIntensity", "hurtCamSlider") + addDependency("tooltipSize", "scaledTooltips") setCategoryDescription( "Custom Animations", diff --git a/src/main/kotlin/dulkirmod/features/ScalableTooltips.kt b/src/main/kotlin/dulkirmod/features/ScalableTooltips.kt new file mode 100644 index 0000000..ae53a3b --- /dev/null +++ b/src/main/kotlin/dulkirmod/features/ScalableTooltips.kt @@ -0,0 +1,146 @@ +package dulkirmod.features + +import dulkirmod.config.Config +import net.minecraft.client.Minecraft +import net.minecraft.client.gui.FontRenderer +import net.minecraft.client.renderer.GlStateManager +import net.minecraft.client.renderer.RenderHelper +import net.minecraftforge.fml.client.config.GuiUtils +import org.lwjgl.input.Keyboard +import org.lwjgl.input.Mouse +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo + +object ScalableTooltips { + var scrollY: Int = 0 + var scrollX: Int = 0 + // Checks to see if large tooltips should be snapped (for larger than can fit on screen code) + var snapFlag: Boolean = true + + fun drawScaledHoveringText( + textLines: List<String>, + mouseX: Int, + mouseY: Int, + screenWidth: Int, + screenHeight: Int, + maxTextWidth: Int, + font: FontRenderer, + ci: CallbackInfo + ): Boolean { + if(!Config.scaledTooltips) return false + val scale = Config.tooltipSize + + // Calculate the width and height of the tooltip box + var width = 0 + for (textLine in textLines) { + val textWidth = font.getStringWidth(textLine) + if (textWidth > width) { + width = textWidth + } + } + val height = (textLines.size) * font.FONT_HEIGHT + + // Save the matrix state and scale it + GlStateManager.pushMatrix() + GlStateManager.scale(scale, scale, 1f) + GlStateManager.disableRescaleNormal() + RenderHelper.disableStandardItemLighting() + GlStateManager.disableLighting() + GlStateManager.disableDepth() + + // Calculate the amount of translation that should be applied based on how much the user has scrolled + val eventDWheel = Mouse.getDWheel() + if (Keyboard.isKeyDown(Keyboard.KEY_LSHIFT)) { + if (eventDWheel < 0) { + scrollX += Minecraft.getMinecraft().displayWidth/192 + } else if (eventDWheel > 0) { + //Scrolling to access higher stuff + scrollX -= Minecraft.getMinecraft().displayWidth/192 + } + } else { + if (eventDWheel < 0) { + scrollY -= Minecraft.getMinecraft().displayHeight/108 + } else if (eventDWheel > 0) { + //Scrolling to access higher stuff + scrollY += Minecraft.getMinecraft().displayHeight/108 + } + } + + // calculates where it wants to put the tooltip based on user input + var x = ((mouseX + 12 + scrollX) / scale).toInt() + var y = ((mouseY - 12 + scrollY) / scale).toInt() + + /** + * Extra code to account for larger tooltips: + * Tooltips should not initially render off the screen if they can fit, if too wide/too long for screen + * it will just default to normal. + */ + if ((x + width + 4 > screenWidth / scale) && (width + 4 <= screenWidth / scale)) { + scrollX = (screenWidth - mouseX - 12 - (width + 4)* scale).toInt() + } + + if ((y + height + 4 > screenHeight / scale) && (height + 4 <= screenHeight / scale)) { + scrollY = (screenHeight - mouseY + 12 - (height + 4)* scale).toInt() + } + + /** + * HAVE: default x and y + * NEED: modify scrollx and scroll why such that updates x and y to 0 later + */ + if (x < 0 && (width + 4 <= screenWidth / scale)) + scrollX = -mouseX - 12 + 4 + if (y < 0 && (height + 4 <= screenHeight / scale)) + scrollY = -mouseY + 12 + 4 + + + // if too large, then snap to top (if first time rendering tooltip) + if (snapFlag) { + if (width + 4 > screenWidth / scale) { + scrollX = -mouseX - 12 + 4 + } + if (height + 4 > screenHeight / scale) { + scrollY = -mouseY + 12 + 4 + } + snapFlag = false + } + + //updates the position of x and y if it has been modified. + x = ((mouseX + 12 + scrollX) / scale).toInt() + y = ((mouseY - 12 + scrollY) / scale).toInt() + + // Draw the background rectangle + val backgroundColor = -0xfeffff0 + val zLevel = 300 + + GuiUtils.drawGradientRect(zLevel, x - 3, y - 4, x + width + 3, y - 3, backgroundColor, backgroundColor) + GuiUtils.drawGradientRect(zLevel, x - 3, y + height + 3, x + width + 3, y + height + 4, backgroundColor, backgroundColor) + GuiUtils.drawGradientRect(zLevel, x - 3, y - 3, x + width + 3, y + height + 3, backgroundColor, backgroundColor) + GuiUtils.drawGradientRect(zLevel, x - 4, y - 3, x - 3, y + height + 3, backgroundColor, backgroundColor) + GuiUtils.drawGradientRect(zLevel, x + width + 3, y - 3, x + width + 4, y + height + 3, backgroundColor, backgroundColor) + val borderColorStart = 0x505000FF + val borderColorEnd = borderColorStart and 0xFEFEFE shr 1 or (borderColorStart and -0x1000000) + GuiUtils.drawGradientRect(zLevel, x - 3, y - 3 + 1, x - 3 + 1, y + height + 3 - 1, borderColorStart, borderColorEnd) + GuiUtils.drawGradientRect(zLevel, x + width + 2, y - 3 + 1, x + width + 3, y + height + 3 - 1, borderColorStart, borderColorEnd) + GuiUtils.drawGradientRect(zLevel, x - 3, y - 3, x + width + 3, y - 3 + 1, borderColorStart, borderColorStart) + GuiUtils.drawGradientRect(zLevel, x - 3, y + height + 2, x + width + 3, y + height + 3, borderColorEnd, borderColorEnd) + + // Render the tooltip text + var yStart = y + for (textLine in textLines) { + font.drawStringWithShadow(textLine, x.toFloat(), yStart.toFloat(), -1) + yStart += font.FONT_HEIGHT + } + // Reset matrix state + GlStateManager.enableLighting() + GlStateManager.enableDepth() + RenderHelper.enableStandardItemLighting() + GlStateManager.enableRescaleNormal() + GlStateManager.popMatrix() + return true + } + + fun resetPos() { + scrollX = 0 + scrollY = 0 + snapFlag = true + } +}
\ No newline at end of file |