Skip to content

Commit

Permalink
Improved KeyPearl module and Added Inventory HUD element. (CCBlueX#1736)
Browse files Browse the repository at this point in the history
  • Loading branch information
FDPUser443 authored Dec 25, 2023
1 parent e1f38e5 commit 4f91c78
Show file tree
Hide file tree
Showing 3 changed files with 128 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import org.lwjgl.input.Mouse

object KeyPearl : Module("KeyPearl", ModuleCategory.PLAYER, subjective = true, gameDetecting = false) {

private val delayedSlotSwitch by BoolValue("DelayedSlotSwitch", true)
private val mouse by BoolValue("Mouse", false)
private val mouseButtonValue = ListValue("MouseButton",
arrayOf("Left", "Right", "Middle", "MouseButton4", "MouseButton5"), "Middle") { mouse }
Expand All @@ -34,6 +35,8 @@ object KeyPearl : Module("KeyPearl", ModuleCategory.PLAYER, subjective = true, g

private var wasMouseDown = false
private var wasKeyDown = false
private var hasThrown = false
private var prevSlot = 0

private fun throwEnderPearl() {
val pearlInHotbar = InventoryUtils.findItem(36, 44, Items.ender_pearl)
Expand All @@ -45,16 +48,32 @@ object KeyPearl : Module("KeyPearl", ModuleCategory.PLAYER, subjective = true, g
return
}

// don't wait before and after throwing if the player is already holding an ender pearl
if (!delayedSlotSwitch || mc.thePlayer.inventory.currentItem == pearlInHotbar - 36) {
sendPackets(
C09PacketHeldItemChange(pearlInHotbar - 36),
C08PacketPlayerBlockPlacement(mc.thePlayer.heldItem),
C09PacketHeldItemChange(mc.thePlayer.inventory.currentItem))
return
}

prevSlot = mc.thePlayer.inventory.currentItem
sendPackets(
C09PacketHeldItemChange(pearlInHotbar - 36),
C08PacketPlayerBlockPlacement(mc.thePlayer.heldItem),
C09PacketHeldItemChange(mc.thePlayer.inventory.currentItem)
)
C08PacketPlayerBlockPlacement(mc.thePlayer.heldItem))
hasThrown = true
}


@EventTarget
fun onTick(event: TickEvent) {
if (hasThrown) {
if (mc.thePlayer.inventory.currentItem != prevSlot) {
sendPackets(C09PacketHeldItemChange(prevSlot))
}
hasThrown = false
}

if (mc.currentScreen != null || mc.playerController.currentGameType == WorldSettings.GameType.SPECTATOR
|| mc.playerController.currentGameType == WorldSettings.GameType.CREATIVE) return

Expand All @@ -70,4 +89,8 @@ object KeyPearl : Module("KeyPearl", ModuleCategory.PLAYER, subjective = true, g
wasMouseDown = isMouseDown
wasKeyDown = isKeyDown
}

override fun onEnable() {
hasThrown = false
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ object HUD : MinecraftInstance() {
Arraylist::class.java,
Effects::class.java,
Image::class.java,
Inventory::class.java,
Model::class.java,
Notifications::class.java,
TabGUI::class.java,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
/*
* LiquidBounce Hacked Client
* A free open source mixin-based injection hacked client for Minecraft using Minecraft Forge.
* https://github.com/CCBlueX/LiquidBounce/
*/
package net.ccbluex.liquidbounce.ui.client.hud.element.elements

import net.ccbluex.liquidbounce.ui.client.hud.element.Border
import net.ccbluex.liquidbounce.ui.client.hud.element.Element
import net.ccbluex.liquidbounce.ui.client.hud.element.ElementInfo
import net.ccbluex.liquidbounce.ui.font.Fonts
import net.ccbluex.liquidbounce.utils.render.ColorUtils

import net.ccbluex.liquidbounce.utils.render.RenderUtils.drawBorder
import net.ccbluex.liquidbounce.utils.render.RenderUtils.drawRect
import net.ccbluex.liquidbounce.value.BoolValue
import net.ccbluex.liquidbounce.value.FontValue
import net.ccbluex.liquidbounce.value.IntegerValue
import net.ccbluex.liquidbounce.value.ListValue
import net.minecraft.client.gui.FontRenderer
import net.minecraft.client.renderer.GlStateManager.*
import net.minecraft.client.renderer.RenderHelper.disableStandardItemLighting
import net.minecraft.client.renderer.RenderHelper.enableGUIStandardItemLighting
import org.lwjgl.opengl.GL11.glColor4f
import java.awt.Color


@ElementInfo(name = "Inventory")
class Inventory : Element(300.0, 50.0) {

private val font by FontValue("Font", Fonts.font35)
private val title by ListValue("Title", arrayOf("Center", "Left", "Right", "None"), "Left")
private val titleRainbow by BoolValue("TitleRainbow", false) { title != "None" }
private val titleRed by IntegerValue("TitleRed", 255, 0..255) { title != "None" && !titleRainbow }
private val titleGreen by IntegerValue("TitleGreen", 255, 0..255) { title != "None" && !titleRainbow }
private val titleBlue by IntegerValue("TitleBlue", 255, 0..255) { title != "None" && !titleRainbow }

private val borderValue by BoolValue("Border", true)
private val borderRainbow by BoolValue("BorderRainbow", false) { borderValue }
private val borderRed by IntegerValue("Border-R", 255, 0..255) { borderValue && !borderRainbow }
private val borderGreen by IntegerValue("Border-G", 255, 0..255) { borderValue && !borderRainbow }
private val borderBlue by IntegerValue("Border-B", 255, 0..255) { borderValue && !borderRainbow }

private val backgroundAlpha by IntegerValue("Background-Alpha", 150, 0..255)

private val width = 174F
private val height = 66F
private val padding = 6F

override fun drawElement(): Border {
val font = font
val startY = if (title != "None") -(padding + font.FONT_HEIGHT) else 0F
val borderColor = if (borderRainbow) ColorUtils.rainbow() else Color(borderRed, borderGreen, borderBlue)
val titleColor = if (titleRainbow) ColorUtils.rainbow() else Color(titleRed, titleGreen, titleBlue)

// draw rect and borders
drawRect(0F, startY, width, height, Color(0,0,0, backgroundAlpha))
if (borderValue) {
drawBorder(0f, startY, width, height, 3f, borderColor.rgb)
drawRect(0F, 0f, width, 1f, borderColor)
}
// Reset color
resetColor()
glColor4f(1F, 1F, 1F, 1F)


val invDisplayName = mc.thePlayer.inventory.displayName.formattedText
when(title.lowercase()) {
"center" -> font.drawString(invDisplayName, width / 2 - font.getStringWidth(invDisplayName) / 2F, -(font.FONT_HEIGHT).toFloat(), titleColor.rgb, false)
"left" -> font.drawString(invDisplayName, padding, -(font.FONT_HEIGHT).toFloat(), titleColor.rgb, false)
"right" -> font.drawString(invDisplayName, width - padding - font.getStringWidth(invDisplayName), -(font.FONT_HEIGHT).toFloat(), titleColor.rgb, false)
}

// render items
enableGUIStandardItemLighting()
renderInv(9, 17, 6, 6, font)
renderInv(18, 26, 6, 24, font)
renderInv(27, 35, 6, 42, font)
disableStandardItemLighting()
enableAlpha()
disableBlend()
disableLighting()

return Border(0F, startY, width, height)
}

/**
* render single line of inventory
* @param endSlot slot+9
*/
private fun renderInv(slot: Int, endSlot: Int, x: Int, y: Int, font: FontRenderer) {
var xOffset = x
for (i in slot..endSlot) {
xOffset += 18
val stack = mc.thePlayer.inventoryContainer.getSlot(i).stack ?: continue

mc.renderItem.renderItemAndEffectIntoGUI(stack, xOffset - 18, y)
mc.renderItem.renderItemOverlays(font, stack, xOffset - 18, y)
}
}
}

0 comments on commit 4f91c78

Please sign in to comment.