diff --git a/src/main/java/net/ccbluex/liquidbounce/FDPClient.kt b/src/main/java/net/ccbluex/liquidbounce/FDPClient.kt index 9ff8c8f..f0add28 100644 --- a/src/main/java/net/ccbluex/liquidbounce/FDPClient.kt +++ b/src/main/java/net/ccbluex/liquidbounce/FDPClient.kt @@ -43,8 +43,9 @@ object FDPClient { const val CLIENT_NAME = "FDPClientX-Reborn" const val COLORED_NAME = "§7[§b§lFDPClient§7] " const val CLIENT_CREATOR = "CCBlueX,Xebook1, Zywl && SkidderMC TEAM" - const val CLIENT_WEBSITE = "fdpinfo.github.io" + const val CLIENT_WEBSITE = "" const val CLIENT_VERSION = "v5.6.0" + const val VERSIONTYPE = "Xe Preview" // Flags var isStarting = true diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/Module.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/Module.kt index 9bc069f..2be19d5 100644 --- a/src/main/java/net/ccbluex/liquidbounce/features/module/Module.kt +++ b/src/main/java/net/ccbluex/liquidbounce/features/module/Module.kt @@ -7,7 +7,7 @@ package net.ccbluex.liquidbounce.features.module import net.ccbluex.liquidbounce.FDPClient import net.ccbluex.liquidbounce.event.Listenable -import net.ccbluex.liquidbounce.features.module.modules.client.HUD +import net.ccbluex.liquidbounce.features.module.modules.client.HUDModule import net.ccbluex.liquidbounce.features.module.modules.client.SoundModule import net.ccbluex.liquidbounce.ui.client.hud.element.elements.Notification import net.ccbluex.liquidbounce.ui.client.hud.element.elements.NotifyType @@ -148,7 +148,7 @@ open class Module : MinecraftInstance(), Listenable { } set(value) { if (slideAnimation == null || (slideAnimation != null && slideAnimation!!.to != value.toDouble())) { - slideAnimation = Animation(EaseUtils.EnumEasingType.valueOf(HUD.arraylistXAxisAnimTypeValue.get()), EaseUtils.EnumEasingOrder.valueOf(HUD.arraylistXAxisAnimOrderValue.get()), field.toDouble(), value.toDouble(), HUD.arraylistXAxisAnimSpeedValue.get() * 30L).start() + slideAnimation = Animation(EaseUtils.EnumEasingType.valueOf(HUDModule.arraylistXAxisAnimTypeValue.get()), EaseUtils.EnumEasingOrder.valueOf(HUDModule.arraylistXAxisAnimOrderValue.get()), field.toDouble(), value.toDouble(), HUDModule.arraylistXAxisAnimSpeedValue.get() * 30L).start() } } var yPosAnimation: Animation? = null @@ -164,7 +164,7 @@ open class Module : MinecraftInstance(), Listenable { } set(value) { if (yPosAnimation == null || (yPosAnimation != null && yPosAnimation!!.to != value.toDouble())) { - yPosAnimation = Animation(EaseUtils.EnumEasingType.valueOf(HUD.arraylistYAxisAnimTypeValue.get()), EaseUtils.EnumEasingOrder.valueOf(HUD.arraylistYAxisAnimOrderValue.get()), field.toDouble(), value.toDouble(), HUD.arraylistYAxisAnimSpeedValue.get() * 30L).start() + yPosAnimation = Animation(EaseUtils.EnumEasingType.valueOf(HUDModule.arraylistYAxisAnimTypeValue.get()), EaseUtils.EnumEasingOrder.valueOf(HUDModule.arraylistYAxisAnimOrderValue.get()), field.toDouble(), value.toDouble(), HUDModule.arraylistYAxisAnimSpeedValue.get() * 30L).start() } } diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/client/Animations.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/client/Animations.kt index eec0219..3861ec2 100644 --- a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/client/Animations.kt +++ b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/client/Animations.kt @@ -34,10 +34,10 @@ object Animations : Module() { val rotateXValue = FloatValue("RotateX", 0.0f, -180f, 180f) val rotateYValue = FloatValue("RotateY", 0.0f, -180f, 180f) val rotateZValue = FloatValue("RotateZ", 0.0f, -180f, 180f) - val itemPosXValue = FloatValue("ItemPosX", 0.66F, -1.0F, 1.0F) - val itemPosYValue = FloatValue("ItemPosY", -0.37F, -1.0F, 1.0F) - val itemPosZValue = FloatValue("ItemPosZ", -1.00F, -1.0F, 1.0F) - val itemScaleValue = FloatValue("ItemScale", 0.26f, 0.0f, 2.0f) + val itemPosXValue = FloatValue("ItemPosX", 0.56F, -1.0F, 1.0F) + val itemPosYValue = FloatValue("ItemPosY", -0.52F, -1.0F, 1.0F) + val itemPosZValue = FloatValue("ItemPosZ", -0.72F, -1.0F, 1.0F) + val itemScaleValue = FloatValue("ItemScale", 0.4f, 0.0f, 2.0f) val swingAnimValue = BoolValue("SwingAnim", false) val swingSpeedValue = FloatValue("SwingSpeed", 1f, 0.5f, 5.0f) val anythingBlockValue = BoolValue("AnythingBlock", false) diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/client/HUD.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/client/HUDModule.kt similarity index 72% rename from src/main/java/net/ccbluex/liquidbounce/features/module/modules/client/HUD.kt rename to src/main/java/net/ccbluex/liquidbounce/features/module/modules/client/HUDModule.kt index eea97f6..da9562d 100644 --- a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/client/HUD.kt +++ b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/client/HUDModule.kt @@ -19,18 +19,24 @@ import net.ccbluex.liquidbounce.ui.client.gui.ClickGUIModule.colorBlueValue import net.ccbluex.liquidbounce.ui.client.gui.ClickGUIModule.colorGreenValue import net.ccbluex.liquidbounce.ui.client.gui.ClickGUIModule.colorRedValue import net.ccbluex.liquidbounce.ui.client.hud.designer.GuiHudDesigner +import net.ccbluex.liquidbounce.ui.font.Fonts import net.ccbluex.liquidbounce.utils.render.ColorUtils +import net.ccbluex.liquidbounce.utils.render.ColorUtils.fade import net.ccbluex.liquidbounce.utils.render.ColorUtils.rainbow import net.ccbluex.liquidbounce.utils.render.EaseUtils +import net.ccbluex.liquidbounce.utils.render.RenderUtils +import net.ccbluex.liquidbounce.utils.render.RoundedUtil +import net.minecraft.client.Minecraft import net.minecraft.client.gui.GuiChat import net.minecraft.client.renderer.GlStateManager +import net.minecraft.util.EnumChatFormatting import net.minecraft.util.MathHelper import net.minecraft.util.ResourceLocation import java.awt.Color import java.util.* @ModuleInfo(name = "HUD", category = ModuleCategory.CLIENT, array = false, defaultOn = true) -object HUD : Module() { +object HUDModule : Module() { val tabHead = BoolValue("Tab-HeadOverlay", true) val shadowValue = ListValue("TextShadowMode", arrayOf("LiquidBounce", "Outline", "Default", "Autumn"), "Default") private val clolormode = ListValue("ColorMode", arrayOf("Rainbow", "Light Rainbow", "Static", "Double Color", "Default"), "Light Rainbow") @@ -40,7 +46,7 @@ object HUD : Module() { val inventoryParticle = BoolValue("InventoryParticle", false) private val blurValue = BoolValue("Blur", false) private val HealthValue = BoolValue("Health", true) - private val mark = ListValue("Mark", arrayOf("FDPCN","FDP","None"),"FDP") + private val mark = ListValue("Mark", arrayOf("FDPCN","FDP","NeverLose", "None"),"FDP") val rainbowStartValue = FloatValue("RainbowStart", 0.55f, 0f, 1f) val rainbowStopValue = FloatValue("RainbowStop", 0.85f, 0f, 1f) val rainbowSaturationValue = FloatValue("RainbowSaturation", 0.45f, 0f, 1f) @@ -64,8 +70,12 @@ object HUD : Module() { if (MusicDisplay.get()) MusicOverlayRenderer.INSTANCE.renderOverlay() if (mc.currentScreen is GuiHudDesigner) return FDPClient.hud.render(false, event.partialTicks) - if (mark.equals("FDP")) renderWatermark() - if (mark.equals("FDPCN")) renderfdpcn() + when (mark.get().lowercase()) { + "fdp" -> renderWatermark() + "fdpcn" -> renderfdpcn() + "neverlose" -> neverlose() + else -> {} + } if (HealthValue.get()) mc.fontRendererObj.drawStringWithShadow( MathHelper.ceiling_float_int(mc.thePlayer.health).toString(), (width / 2 - 4).toFloat(), (height / 2 - 13).toFloat(), if (mc.thePlayer.health <= 15) Color(255, 0, 0).rgb else Color(0, 255, 0).rgb) @@ -100,6 +110,57 @@ object HUD : Module() { getClientName(0,3), 5.0f, 0.0f,Color(255,255,255,220).rgb ) + FontLoaders.C16.drawString( + "Xe", 5F + FontLoaders.F40.getStringWidth("FDP"), 13.0f,Color(255,255,255,220).rgb + ) + RenderUtils.drawRect(5f,22.5f,70f,22.8f,Color(200,200,200,220).rgb) + FontLoaders.C14.drawString( + FDPClient.CLIENT_VERSION + " | "+ FDPClient.VERSIONTYPE, 5.0f, 27.0f,Color(255,255,255,220).rgb + ) + FontLoaders.C14.drawString( + "CN 240817 | Reborn!", 5.0f, 37.0f,Color(255,255,255,220).rgb + ) + } + private fun neverlose() { + val str = + EnumChatFormatting.DARK_GRAY.toString() + " | " + EnumChatFormatting.WHITE + mc.session.username + EnumChatFormatting.DARK_GRAY + " | " + EnumChatFormatting.WHITE + Minecraft.getDebugFPS() + "fps" + EnumChatFormatting.DARK_GRAY + " | " + EnumChatFormatting.WHITE + (if (mc.isSingleplayer) "SinglePlayer" else mc.currentServerData.serverIP) + RoundedUtil.drawRound( + 6.0f, 6.0f, + (Fonts.font35.getStringWidth(str) + 8 + Fonts.font40.getStringWidth( + CLIENT_NAME.uppercase( + Locale.getDefault() + ) + )).toFloat(), 15.0f, 0.0f, Color(19, 19, 19, 230) + ) + RoundedUtil.drawRound( + 6.0f, 6.0f, + (Fonts.font35.getStringWidth(str) + 8 + Fonts.font40.getStringWidth( + CLIENT_NAME.uppercase( + Locale.getDefault() + ) + )).toFloat(), 1.0f, 1.0f, color(8) + ) + Fonts.font35.drawString( + str, + (11 + Fonts.font40.getStringWidth(CLIENT_NAME.uppercase(Locale.getDefault()))).toFloat(), 11.5f, Color.WHITE.rgb + ) + Fonts.font40.drawString( + EnumChatFormatting.BOLD.toString() + CLIENT_NAME.uppercase( + Locale.getDefault() + ), 9.5f, 11.5f, color(8).rgb + ) + Fonts.font40.drawString( + EnumChatFormatting.BOLD.toString() + CLIENT_NAME.uppercase( + Locale.getDefault() + ), 10.0f, 12f, Color.WHITE.rgb + ) + } + + fun color(tick: Int): Color { + var textColor = Color(-1) + textColor = + fade(5, tick * 20, rainbow(), 1.0f) + return textColor } @EventTarget diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/client/button/FlatButtonRenderer.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/client/button/FlatButtonRenderer.kt index 8c1c1eb..1734691 100644 --- a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/client/button/FlatButtonRenderer.kt +++ b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/client/button/FlatButtonRenderer.kt @@ -3,189 +3,220 @@ * A free open source mixin-based injection hacked client for Minecraft using Minecraft Forge by LiquidBounce. * https://github.com/SkidderMC/FDPClient/ */ -package net.ccbluex.liquidbounce.features.module.modules.client.button; - -import net.ccbluex.liquidbounce.font.CFontRenderer; -import net.ccbluex.liquidbounce.font.FontLoaders; -import net.ccbluex.liquidbounce.utils.render.RenderUtils; -import net.ccbluex.liquidbounce.utils.timer.MSTimer; -import net.minecraft.client.Minecraft; -import net.minecraft.client.audio.PositionedSoundRecord; -import net.minecraft.client.audio.SoundHandler; -import net.minecraft.client.gui.GuiButton; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.util.ResourceLocation; -import org.lwjgl.opengl.GL11; - -import java.awt.*; - -public class FlatButtonRenderer extends GuiButton { - private MSTimer time; - public String displayString; - public int id; - public boolean enabled; - public boolean visible; - protected boolean hovered; - private int color; - private float opacity; - private CFontRenderer font; - public boolean round; - public int rad; - - public FlatButtonRenderer(final int buttonId, final int x, final int y, final int widthIn, final int heightIn, final String buttonText, final int color) { - super(buttonId, x, y, 10, 12, buttonText); - this.time = new MSTimer(); - this.width = widthIn; - this.height = heightIn; - this.enabled = true; - this.visible = true; - this.id = buttonId; - this.xPosition = x; - this.yPosition = y; - this.displayString = buttonText; - this.color = color; - this.font = FontLoaders.F18; +package net.ccbluex.liquidbounce.features.module.modules.client.button + +import net.ccbluex.liquidbounce.font.CFontRenderer +import net.ccbluex.liquidbounce.font.FontLoaders +import net.ccbluex.liquidbounce.utils.render.RenderUtils +import net.ccbluex.liquidbounce.utils.timer.MSTimer +import net.minecraft.client.Minecraft +import net.minecraft.client.audio.PositionedSoundRecord +import net.minecraft.client.audio.SoundHandler +import net.minecraft.client.gui.GuiButton +import net.minecraft.client.renderer.GlStateManager +import net.minecraft.util.ResourceLocation +import org.lwjgl.opengl.GL11 +import java.awt.Color + +open class FlatButtonRenderer : GuiButton { + private var time: MSTimer + var displayString = String + var id = Int + var enabled = Boolean + var visible = Boolean + protected var hovered: Boolean = false + private var color: Int + private var opacity = 0f + private var font: CFontRenderer + var round: Boolean = false + private var rad: Int = 0 + + constructor(buttonId: Int, x: Int, y: Int, widthIn: Int, heightIn: Int, buttonText: String?, color: Int) : super( + buttonId, + x, + y, + 10, + 12, + buttonText + ) { + this.time = MSTimer() + this.width = widthIn + this.height = heightIn + this.enabled = true + this.visible = true + this.id = buttonId + this.xPosition = x + this.yPosition = y + this.displayString = buttonText + this.color = color + this.font = FontLoaders.F18 } - public FlatButtonRenderer(final int buttonId, final int x, final int y, final int scale, final String buttonText, final int color, boolean round) { - super(buttonId, x, y, 10, 12, buttonText); - this.time = new MSTimer(); - this.width = scale; - this.height = scale; - this.rad = scale; - this.enabled = true; - this.visible = true; - this.id = buttonId; - this.xPosition = x; - this.yPosition = y; - this.displayString = buttonText; - this.color = color; - this.round = round; - this.font = FontLoaders.F18; + constructor(buttonId: Int, x: Int, y: Int, scale: Int, buttonText: String?, color: Int, round: Boolean) : super( + buttonId, + x, + y, + 10, + 12, + buttonText + ) { + this.time = MSTimer() + this.width = scale + this.height = scale + this.rad = scale + this.enabled = true + this.visible = true + this.id = buttonId + this.xPosition = x + this.yPosition = y + this.displayString = buttonText + this.color = color + this.round = round + this.font = FontLoaders.F18 } - public FlatButtonRenderer(final int buttonId, final int x, final int y, final int scale, final String buttonText, final int color, boolean round, CFontRenderer font) { - super(buttonId, x, y, 10, 12, buttonText); - this.time = new MSTimer(); - this.width = scale; - this.height = scale; - this.rad = scale; - this.enabled = true; - this.visible = true; - this.id = buttonId; - this.xPosition = x; - this.yPosition = y; - this.displayString = buttonText; - this.color = color; - this.round = round; - this.font = font; + constructor( + buttonId: Int, + x: Int, + y: Int, + scale: Int, + buttonText: String?, + color: Int, + round: Boolean, + font: CFontRenderer + ) : super(buttonId, x, y, 10, 12, buttonText) { + this.time = MSTimer() + this.width = scale + this.height = scale + this.rad = scale + this.enabled = true + this.visible = true + this.id = buttonId + this.xPosition = x + this.yPosition = y + this.displayString = buttonText + this.color = color + this.round = round + this.font = font } - public FlatButtonRenderer(final int buttonId, final int x, final int y, final int widthIn, final int heightIn, final String buttonText, final int color, final CFontRenderer font) { - super(buttonId, x, y, 10, 12, buttonText); - this.time = new MSTimer(); - this.width = widthIn; - this.height = heightIn; - this.enabled = true; - this.visible = true; - this.id = buttonId; - this.xPosition = x; - this.yPosition = y; - this.displayString = buttonText; - this.color = color; - this.font = font; + constructor( + buttonId: Int, + x: Int, + y: Int, + widthIn: Int, + heightIn: Int, + buttonText: String?, + color: Int, + font: CFontRenderer + ) : super(buttonId, x, y, 10, 12, buttonText) { + this.time = MSTimer() + this.width = widthIn + this.height = heightIn + this.enabled = true + this.visible = true + this.id = buttonId + this.xPosition = x + this.yPosition = y + this.displayString = buttonText + this.color = color + this.font = font } - @Override - protected int getHoverState(final boolean mouseOver) { - int i = 1; + override fun getHoverState(mouseOver: Boolean): Int { + var i = 1 if (!this.enabled) { - i = 0; + i = 0 + } else if (mouseOver) { + i = 2 } - else if (mouseOver) { - i = 2; - } - return i; + return i } - @Override - public void drawButton(final Minecraft mc, final int mouseX, final int mouseY) { + override fun drawButton(mc: Minecraft, mouseX: Int, mouseY: Int) { if (this.visible) { - GlStateManager.color(1.0f, 1.0f, 1.0f, 1.0f); - this.hovered = (mouseX >= this.xPosition && mouseY >= this.yPosition && mouseX < this.xPosition + this.width && mouseY < this.yPosition + this.height); - final int var5 = this.getHoverState(this.hovered); - GlStateManager.enableBlend(); - GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0); - GlStateManager.blendFunc(770, 771); + GlStateManager.color(1.0f, 1.0f, 1.0f, 1.0f) + this.hovered = + (mouseX >= this.xPosition && mouseY >= this.yPosition && mouseX < this.xPosition + this.width && mouseY < this.yPosition + this.height) + val var5 = this.getHoverState(this.hovered) + GlStateManager.enableBlend() + GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0) + GlStateManager.blendFunc(770, 771) if (!this.hovered) { - this.time.reset(); - this.opacity = 0.0f; + time.reset() + this.opacity = 0.0f } if (this.hovered) { - this.opacity += 0.5f; + this.opacity += 0.5f if (this.opacity > 1.0f) { - this.opacity = 1.0f; + this.opacity = 1.0f } } - final float radius = this.height / 2.0f; - if(this.round) { - RenderUtils.drawFilledCircle(xPosition, yPosition, this.rad, this.color); - }else { - RenderUtils.drawRoundedCornerRect((int)(this.xPosition - this.opacity * 0.1f), this.yPosition - this.opacity, (int)(this.xPosition + this.width + this.opacity * 0.1f), this.yPosition + radius * 2.0f + this.opacity, 3, this.color); + val radius = this.height / 2.0f + if (this.round) { + RenderUtils.drawFilledCircle(xPosition, yPosition, rad.toFloat(), this.color) + } else { + RenderUtils.drawRoundedCornerRect( + (this.xPosition - this.opacity * 0.1f).toInt() + .toFloat(), this.yPosition - this.opacity, + (this.xPosition + this.width + (this.opacity * 0.1f)).toInt() + .toFloat(), this.yPosition + (radius * 2.0f) + this.opacity, 3f, this.color + ) } - GL11.glColor3f(2.55f, 2.55f, 2.55f); - this.mouseDragged(mc, mouseX, mouseY); - GL11.glPushMatrix(); - GL11.glPushAttrib(1048575); - GL11.glScaled(1.0, 1.0, 1.0); - final boolean var6 = true; - final float var7 = (float)this.font.getHeight(); - font.drawCenteredString(this.displayString, (float)(this.xPosition + this.width / 2)+2, this.yPosition + (this.height - this.font.getHeight()) / 2.0f + 6f,new Color(255,255,255).getRGB()); - GL11.glPopAttrib(); - GL11.glPopMatrix(); + GL11.glColor3f(2.55f, 2.55f, 2.55f) + this.mouseDragged(mc, mouseX, mouseY) + GL11.glPushMatrix() + GL11.glPushAttrib(1048575) + GL11.glScaled(1.0, 1.0, 1.0) + val var6 = true + val var7 = font.height.toFloat() + font.drawCenteredString( + this.displayString, + ((this.xPosition + this.width / 2).toFloat() + 2).toDouble(), + (this.yPosition + ((this.height - font.height) / 2.0f) + 6f).toDouble(), + Color(255, 255, 255).rgb + ) + GL11.glPopAttrib() + GL11.glPopMatrix() } } - private Color darkerColor(final Color c, final int step) { - final int red = c.getRed(); - final int blue = c.getBlue(); - final int green = c.getGreen(); - if (red >= step) {} - if (blue >= step) {} - if (green >= step) {} - return c.darker(); + private fun darkerColor(c: Color, step: Int): Color { + val red = c.red + val blue = c.blue + val green = c.green + if (red >= step) { + } + if (blue >= step) { + } + if (green >= step) { + } + return c.darker() } - @Override - public void mouseReleased(final int mouseX, final int mouseY) { + override fun mouseReleased(mouseX: Int, mouseY: Int) { } - @Override - public boolean mousePressed(final Minecraft mc, final int mouseX, final int mouseY) { - return this.enabled && this.visible && mouseX >= this.xPosition && mouseY >= this.yPosition && mouseX < this.xPosition + this.width && mouseY < this.yPosition + this.height; + override fun mousePressed(mc: Minecraft, mouseX: Int, mouseY: Int): Boolean { + return this.enabled && this.visible && (mouseX >= this.xPosition) && (mouseY >= this.yPosition) && (mouseX < this.xPosition + this.width) && (mouseY < this.yPosition + this.height) } - @Override - public boolean isMouseOver() { - return this.hovered; + override fun isMouseOver(): Boolean { + return this.hovered } - @Override - public void drawButtonForegroundLayer(final int mouseX, final int mouseY) { + override fun drawButtonForegroundLayer(mouseX: Int, mouseY: Int) { } - @Override - public void playPressSound(final SoundHandler soundHandlerIn) { - soundHandlerIn.playSound(PositionedSoundRecord.create(new ResourceLocation("gui.button.press"), 1.0f)); + override fun playPressSound(soundHandlerIn: SoundHandler) { + soundHandlerIn.playSound(PositionedSoundRecord.create(ResourceLocation("gui.button.press"), 1.0f)) } - @Override - public int getButtonWidth() { - return this.width; + override fun getButtonWidth(): Int { + return this.width } - @Override - public void setWidth(final int width) { - this.width = width; + override fun setWidth(width: Int) { + this.width = width } } diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/combat/FakeLag.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/combat/FakeLag.kt deleted file mode 100644 index fcbbd65..0000000 --- a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/combat/FakeLag.kt +++ /dev/null @@ -1,54 +0,0 @@ -/* - * FDPClient Hacked Client - * A free open source mixin-based injection hacked client for Minecraft using Minecraft Forge by LiquidBounce. - * https://github.com/SkidderMC/FDPClient/ - */ -package net.ccbluex.liquidbounce.features.module.modules.combat - -private class PosData { - var height: Float = 1.9f - var width: Float = 0.4f - var x: Int = 0 - var y: Int = 0 - var z: Int = 0 - var prevX: Double = 0.0 - var prevY: Double = 0.0 - var prevZ: Double = 0.0 - private var increment = 0 - - val posX: Double - get() = x / 32.0 - - val posY: Double - get() = y / 32.0 - - val posZ: Double - get() = z / 32.0 - - fun motionX(x: Byte) { - prevX = posX - this.x += x - increment = 3 - } - - fun motionY(y: Byte) { - prevY = posY - this.y += y - increment = 3 - } - - fun motionZ(z: Byte) { - prevZ = posZ - this.z += z - increment = 3 - } - - fun update() { - if (increment > 0) { - prevX += ((x / 32.0) - prevX) / increment - prevY += ((y / 32.0) - prevY) / increment - prevZ += ((z / 32.0) - prevZ) / increment - --increment - } - } -} \ No newline at end of file diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/combat/velocitys/intave/IntaveSimpleVelocity.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/combat/velocitys/intave/IntaveSimpleVelocity.kt index 8af4570..b8ca392 100644 --- a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/combat/velocitys/intave/IntaveSimpleVelocity.kt +++ b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/combat/velocitys/intave/IntaveSimpleVelocity.kt @@ -3,28 +3,32 @@ package net.ccbluex.liquidbounce.features.module.modules.combat.velocitys.intave import net.ccbluex.liquidbounce.event.AttackEvent import net.ccbluex.liquidbounce.event.EventTarget import net.ccbluex.liquidbounce.features.module.modules.combat.velocitys.VelocityMode +import net.ccbluex.liquidbounce.features.value.BoolValue import net.ccbluex.liquidbounce.features.value.FloatValue import net.ccbluex.liquidbounce.script.api.global.Chat class IntaveSimpleVelocity : VelocityMode("IntaveSimple") { + private val swing = BoolValue("NoSwingProgress",false) private var sprintvel = FloatValue("SprintingHorizontal",0.6f,0f,1f) private var vel = FloatValue("NoSprintHorizontal",0.6f,0f,1f) @EventTarget override fun onAttack(event: AttackEvent) { if (mc.thePlayer.hurtTime > 0) { - if (mc.thePlayer.isSprinting) { - if (velocity.debug.get()) { - Chat.alert("Spring - Motion *= " + sprintvel.get().toString()) + if (swing.get() || mc.thePlayer.isSwingInProgress) { + if (mc.thePlayer.isSprinting) { + if (velocity.debug.get()) { + Chat.alert("Spring - Motion *= " + sprintvel.get().toString()) + } + mc.thePlayer.motionZ *= sprintvel.get() + mc.thePlayer.motionX *= sprintvel.get() + } else { + if (velocity.debug.get()) { + Chat.alert("Walking - Motion *= " + vel.get().toString()) + } + mc.thePlayer.motionZ *= vel.get() + mc.thePlayer.motionX *= vel.get() } - mc.thePlayer.motionZ *= sprintvel.get() - mc.thePlayer.motionX *= sprintvel.get() - } else { - if (velocity.debug.get()) { - Chat.alert("Walking - Motion *= " + vel.get().toString()) - } - mc.thePlayer.motionZ *= vel.get() - mc.thePlayer.motionX *= vel.get() } } } diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/combat/velocitys/intave/IntaveVelocity.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/combat/velocitys/intave/IntaveVelocity.kt index 6e33a25..c60baa4 100644 --- a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/combat/velocitys/intave/IntaveVelocity.kt +++ b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/combat/velocitys/intave/IntaveVelocity.kt @@ -1,5 +1,6 @@ package net.ccbluex.liquidbounce.features.module.modules.combat.velocitys.intave +import net.ccbluex.liquidbounce.event.AttackEvent import net.ccbluex.liquidbounce.event.EventTarget import net.ccbluex.liquidbounce.event.UpdateEvent import net.ccbluex.liquidbounce.features.module.modules.combat.velocitys.VelocityMode @@ -14,7 +15,7 @@ class IntaveVelocity : VelocityMode("IntaveReveres") { private val yreuce = FloatValue("ReduceY", 0.05f, 0f, 0.5f) @EventTarget - override fun onUpdate(event: UpdateEvent) { + override fun onAttack(event: AttackEvent) { if (mc.objectMouseOver == null) { return } diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/combat/velocitys/intave/LegitSmartVelocity.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/combat/velocitys/intave/LegitSmartVelocity.kt deleted file mode 100644 index f9e1066..0000000 --- a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/combat/velocitys/intave/LegitSmartVelocity.kt +++ /dev/null @@ -1,46 +0,0 @@ -package net.ccbluex.liquidbounce.features.module.modules.combat.velocitys.intave - -import net.ccbluex.liquidbounce.event.EventTarget -import net.ccbluex.liquidbounce.event.PacketEvent -import net.ccbluex.liquidbounce.event.UpdateEvent -import net.ccbluex.liquidbounce.features.module.modules.combat.velocitys.VelocityMode -import net.minecraft.client.settings.GameSettings -import net.minecraft.network.play.server.S12PacketEntityVelocity - -class LegitSmartVelocity : VelocityMode("LegitSmart") { - var jumped = 0 - var input = false - - override fun onEnable() { - jumped = 0 - input = false - } - - @EventTarget - override fun onUpdate(event: UpdateEvent) { - if (mc.thePlayer.onGround && mc.thePlayer.hurtTime == 9 && mc.thePlayer.isSprinting && mc.currentScreen == null) { - if (jumped > 2) { - jumped = 0 - } else { - ++jumped - if (mc.thePlayer.ticksExisted % 5 != 0) mc.gameSettings.keyBindJump.pressed = true - } - } else if (mc.thePlayer.hurtTime == 8) { - mc.gameSettings.keyBindJump.pressed = GameSettings.isKeyDown(mc.gameSettings.keyBindJump) - input = false - } - } - - @EventTarget - override fun onPacket(event: PacketEvent) { - val packet = event.packet - if (packet is S12PacketEntityVelocity) { - if ((mc.theWorld?.getEntityByID(packet.entityID) ?: return) != mc.thePlayer) - return - if (packet.motionX * packet.motionX + packet.motionZ * packet.motionZ + packet.motionY * packet.motionY > 640000) { - input = - true - } - } - } -} \ No newline at end of file diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/StepTest.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/StepTest.kt new file mode 100644 index 0000000..cea4e73 --- /dev/null +++ b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/StepTest.kt @@ -0,0 +1,128 @@ +package net.ccbluex.liquidbounce.features.module.modules.movement + +import net.ccbluex.liquidbounce.event.* +import net.ccbluex.liquidbounce.features.module.Module +import net.ccbluex.liquidbounce.features.module.ModuleCategory +import net.ccbluex.liquidbounce.features.module.ModuleInfo +import net.ccbluex.liquidbounce.features.module.modules.movement.steps.StepMode +import net.ccbluex.liquidbounce.features.value.BoolValue +import net.ccbluex.liquidbounce.features.value.FloatValue +import net.ccbluex.liquidbounce.features.value.IntegerValue +import net.ccbluex.liquidbounce.features.value.ListValue +import net.ccbluex.liquidbounce.utils.ClassUtils +import net.ccbluex.liquidbounce.utils.MinecraftInstance.Companion.mc +import net.ccbluex.liquidbounce.utils.timer.MSTimer +import net.minecraft.stats.StatList +import net.minecraft.util.BlockPos + +@ModuleInfo("StepTest", category = ModuleCategory.MOVEMENT) +object StepTest : Module() { + var isStep = false + var stepX = 0.0 + var stepY = 0.0 + var stepZ = 0.0 + + var ncpNextStep = 0 + var spartanSwitch = false + var isAACStep = false + var wasTimer = false + var lastOnGround = false + var canStep = false + val timer = MSTimer() + var high = 0.0f + var off = false //你麻痹不每个设置一个直接狗日的不工作了 + private val modes = ClassUtils.resolvePackage("${this.javaClass.`package`.name}.steps", StepMode::class.java) + .map { it.newInstance() as StepMode } + .sortedBy { it.modeName } + val heightValue = FloatValue("Height", 1F, 0.6F, 10F) + val delayValue = IntegerValue("Delay", 0, 0, 500) + + private val mode: StepMode + get() = modes.find { modeValue.equals(it.modeName) } ?: throw NullPointerException() // this should not happen + + private val modeValue: ListValue = object : ListValue("Mode", modes.map { it.modeName }.toTypedArray(), "Vanilla") { + override fun onChange(oldValue: String, newValue: String) { + if (state) onDisable() + } + + override fun onChanged(oldValue: String, newValue: String) { + if (state) onEnable() + } + } + + override fun onDisable() { + mc.thePlayer ?: return + + // Change step height back to default (0.5 is default) + mc.thePlayer.stepHeight = 0.6F + mc.timer.timerSpeed = 1.0F + wasTimer = false + lastOnGround = mc.thePlayer.onGround + } + + override fun onEnable() { + high = 0f + off = false + } + + @EventTarget + fun onStep(event: StepEvent) { + mc.thePlayer ?: return + if (!mc.thePlayer.onGround || !timer.hasTimePassed(delayValue.get().toLong())) { + mc.thePlayer.stepHeight = 0.6F + event.stepHeight = 0.6F + return + } + if (event.eventState == EventState.PRE) { + if (off) { + mc.thePlayer.stepHeight = 0.6f + event.stepHeight = 0.6f + return + } + // Set step height + val height = heightValue.get() + + // Detect possible step + + mc.thePlayer.stepHeight = height + event.stepHeight = height + + if (event.stepHeight > 0.6F) { + isStep = true + stepX = mc.thePlayer.posX + stepY = mc.thePlayer.posY + stepZ = mc.thePlayer.posZ + } + } else { + mode.onStep(event) + } + } + + @EventTarget + fun onUpdate(event: UpdateEvent) { + mode.onUpdate(event) + } + + @EventTarget + fun onJump(event: JumpEvent) { + mode.onJump(event) + } + + override val tag: String + get() = modeValue.get() + + fun fakeJump() { + mc.thePlayer.isAirBorne = true + mc.thePlayer.triggerAchievement(StatList.jumpStat) + } + + override val values = super.values.toMutableList().also { + modes.map { mode -> + mode.values.forEach { value -> + //it.add(value.displayable { modeValue.equals(mode.modeName) }) + val displayableFunction = value.displayableFunction + it.add(value.displayable { displayableFunction.invoke() && modeValue.equals(mode.modeName) }) + } + } + } +} \ No newline at end of file diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/steps/StepMode.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/steps/StepMode.kt new file mode 100644 index 0000000..7fe659a --- /dev/null +++ b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/steps/StepMode.kt @@ -0,0 +1,28 @@ +package net.ccbluex.liquidbounce.features.module.modules.movement.steps + +import net.ccbluex.liquidbounce.FDPClient +import net.ccbluex.liquidbounce.event.* +import net.ccbluex.liquidbounce.features.module.modules.movement.StepTest +import net.ccbluex.liquidbounce.features.value.Value +import net.ccbluex.liquidbounce.utils.ClassUtils +import net.ccbluex.liquidbounce.utils.MinecraftInstance + +abstract class StepMode(val modeName: String) : MinecraftInstance() { + protected val valuePrefix = "$modeName-" + + protected val step: StepTest + get() = FDPClient.moduleManager[StepTest::class.java]!! + + open val values: List> + get() = ClassUtils.getValues(this.javaClass, this) + + open fun onEnable() {} + open fun onDisable() {} + + open fun onMotion(event: MotionEvent) {} + open fun onUpdate(event: UpdateEvent) {} + open fun onMove(event: MoveEvent) {} + open fun onJump(event: JumpEvent) {} + open fun onPacket(event: PacketEvent) {} + open fun onStep(event: StepEvent) {} +} \ No newline at end of file diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/steps/vanilla/JumpStep.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/steps/vanilla/JumpStep.kt new file mode 100644 index 0000000..c294641 --- /dev/null +++ b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/steps/vanilla/JumpStep.kt @@ -0,0 +1,19 @@ +package net.ccbluex.liquidbounce.features.module.modules.movement.steps.vanilla + +import net.ccbluex.liquidbounce.event.StepEvent +import net.ccbluex.liquidbounce.event.UpdateEvent +import net.ccbluex.liquidbounce.features.module.modules.movement.StepTest +import net.ccbluex.liquidbounce.features.module.modules.movement.steps.StepMode +import net.ccbluex.liquidbounce.features.value.FloatValue + +class JumpStep : StepMode("Jump") { + private val jumpHeightValue = FloatValue("JumpMotion", 0.42F, 0.37F, 0.42F) + override fun onUpdate(event: UpdateEvent) { + StepTest.off = true + if (mc.thePlayer.isCollidedHorizontally && mc.thePlayer.onGround + && !mc.gameSettings.keyBindJump.isKeyDown) { + StepTest.fakeJump() + mc.thePlayer.motionY = jumpHeightValue.get().toDouble() + } + } +} \ No newline at end of file diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/steps/vanilla/VanillaStep.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/steps/vanilla/VanillaStep.kt new file mode 100644 index 0000000..aa777a9 --- /dev/null +++ b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/steps/vanilla/VanillaStep.kt @@ -0,0 +1,11 @@ +package net.ccbluex.liquidbounce.features.module.modules.movement.steps.vanilla + +import net.ccbluex.liquidbounce.event.UpdateEvent +import net.ccbluex.liquidbounce.features.module.modules.movement.StepTest +import net.ccbluex.liquidbounce.features.module.modules.movement.steps.StepMode + +class VanillaStep : StepMode("Vanilla") { + override fun onUpdate(event: UpdateEvent) { + StepTest.off = false + } +} \ No newline at end of file diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/other/KeepContainer.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/other/KeepContainer.kt index 298bc94..f8691ef 100644 --- a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/other/KeepContainer.kt +++ b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/other/KeepContainer.kt @@ -1,5 +1,6 @@ package net.ccbluex.liquidbounce.features.module.modules.other +import net.ccbluex.liquidbounce.FDPClient import net.ccbluex.liquidbounce.event.EventTarget import net.ccbluex.liquidbounce.event.KeyEvent import net.ccbluex.liquidbounce.event.PacketEvent @@ -7,6 +8,10 @@ import net.ccbluex.liquidbounce.event.ScreenEvent import net.ccbluex.liquidbounce.features.module.Module import net.ccbluex.liquidbounce.features.module.ModuleCategory import net.ccbluex.liquidbounce.features.module.ModuleInfo +import net.ccbluex.liquidbounce.ui.client.hud.HUD +import net.ccbluex.liquidbounce.ui.client.hud.element.elements.Notification +import net.ccbluex.liquidbounce.ui.client.hud.element.elements.Notifications +import net.ccbluex.liquidbounce.ui.client.hud.element.elements.NotifyType import net.ccbluex.liquidbounce.utils.PacketUtils import net.minecraft.client.gui.inventory.GuiContainer import net.minecraft.client.gui.inventory.GuiInventory @@ -36,7 +41,7 @@ object KeepContainer : Module() { if (event.key == Keyboard.KEY_INSERT) { if (container == null) return - + FDPClient.hud.addNotification(Notification("KeepCon.","Open Container",NotifyType.INFO,1000)) mc.displayGuiScreen(container) } } diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/other/MemoryFix.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/other/MemoryFix.kt deleted file mode 100644 index 9ec62f1..0000000 --- a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/other/MemoryFix.kt +++ /dev/null @@ -1,24 +0,0 @@ -/* - * FDPClient Hacked Client - * A free open source mixin-based injection hacked client for Minecraft using Minecraft Forge by LiquidBounce. - * https://github.com/SkidderMC/FDPClient/ - */ -package net.ccbluex.liquidbounce.features.module.modules.other - -import net.ccbluex.liquidbounce.features.module.Module -import net.ccbluex.liquidbounce.features.module.ModuleCategory -import net.ccbluex.liquidbounce.event.EventTarget -import net.ccbluex.liquidbounce.event.WorldEvent -import net.ccbluex.liquidbounce.features.module.ModuleInfo - -@ModuleInfo(name = "MemoryFix", category = ModuleCategory.OTHER) -object MemoryFix : Module() { - override fun onEnable() { - Runtime.getRuntime().gc() - } - - @EventTarget - fun onWorld(event: WorldEvent) { - Runtime.getRuntime().gc() - } -} diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/visual/ChinaHat.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/visual/ChinaHat.kt index c6a76a8..60d3cde 100644 --- a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/visual/ChinaHat.kt +++ b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/visual/ChinaHat.kt @@ -10,7 +10,7 @@ import net.ccbluex.liquidbounce.event.Render3DEvent import net.ccbluex.liquidbounce.features.module.Module import net.ccbluex.liquidbounce.features.module.ModuleCategory import net.ccbluex.liquidbounce.features.module.ModuleInfo -import net.ccbluex.liquidbounce.features.module.modules.client.HUD +import net.ccbluex.liquidbounce.features.module.modules.client.HUDModule import net.ccbluex.liquidbounce.utils.EntityUtils import net.ccbluex.liquidbounce.utils.render.RenderUtils import net.ccbluex.liquidbounce.features.value.BoolValue @@ -74,7 +74,7 @@ object ChinaHat : Module() { val radius = radiusValue.get().toDouble() for(i in 0..360 step 5) { if(colorRainbowValue.get()) { - RenderUtils.glColor(Color.getHSBColor(if (i <180) { HUD.rainbowStartValue.get() + (HUD.rainbowStopValue.get() - HUD.rainbowStartValue.get()) * (i / 180f) } else { HUD.rainbowStartValue.get() + (HUD.rainbowStopValue.get() - HUD.rainbowStartValue.get()) * (-(i-360) / 180f) }, 0.7f, 1.0f), colorAlphaValue.get() / 255f) + RenderUtils.glColor(Color.getHSBColor(if (i <180) { HUDModule.rainbowStartValue.get() + (HUDModule.rainbowStopValue.get() - HUDModule.rainbowStartValue.get()) * (i / 180f) } else { HUDModule.rainbowStartValue.get() + (HUDModule.rainbowStopValue.get() - HUDModule.rainbowStartValue.get()) * (-(i-360) / 180f) }, 0.7f, 1.0f), colorAlphaValue.get() / 255f) } GL11.glVertex3d(cos(i.toDouble() * Math.PI / 180.0) * radius, 0.0, sin(i.toDouble() * Math.PI / 180.0) * radius) } diff --git a/src/main/java/net/ccbluex/liquidbounce/file/FileManager.kt b/src/main/java/net/ccbluex/liquidbounce/file/FileManager.kt index 4d089bb..4eb66ef 100644 --- a/src/main/java/net/ccbluex/liquidbounce/file/FileManager.kt +++ b/src/main/java/net/ccbluex/liquidbounce/file/FileManager.kt @@ -47,7 +47,7 @@ class FileManager : MinecraftInstance() { /** * Setup folder */ - fun setupFolder() { + private fun setupFolder() { if (!dir.exists()) { dir.mkdir() } @@ -175,7 +175,7 @@ class FileManager : MinecraftInstance() { /** * Load background for background */ - fun loadBackground() { + private fun loadBackground() { if (backgroundFile.exists()) { try { val bufferedImage = ImageIO.read(FileInputStream(backgroundFile)) ?: return @@ -275,6 +275,6 @@ class FileManager : MinecraftInstance() { } companion object { - val PRETTY_GSON = GsonBuilder().setPrettyPrinting().create() + val PRETTY_GSON = GsonBuilder().setPrettyPrinting().create()!! } } diff --git a/src/main/java/net/ccbluex/liquidbounce/injection/forge/mixins/gui/MixinGuiInGame.java b/src/main/java/net/ccbluex/liquidbounce/injection/forge/mixins/gui/MixinGuiInGame.java index 32c7aa3..549e9b4 100644 --- a/src/main/java/net/ccbluex/liquidbounce/injection/forge/mixins/gui/MixinGuiInGame.java +++ b/src/main/java/net/ccbluex/liquidbounce/injection/forge/mixins/gui/MixinGuiInGame.java @@ -8,7 +8,7 @@ import net.ccbluex.liquidbounce.FDPClient; import net.ccbluex.liquidbounce.event.Render2DEvent; import net.ccbluex.liquidbounce.features.module.modules.client.Animations; -import net.ccbluex.liquidbounce.features.module.modules.client.HUD; +import net.ccbluex.liquidbounce.features.module.modules.client.HUDModule; import net.ccbluex.liquidbounce.features.module.modules.client.HotbarSettings; import net.ccbluex.liquidbounce.features.module.modules.visual.AntiBlind; import net.ccbluex.liquidbounce.features.module.modules.visual.Crosshair; @@ -61,7 +61,7 @@ public abstract class MixinGuiInGame extends MixinGui { @Inject(method = "renderScoreboard", at = @At("HEAD"), cancellable = true) private void renderScoreboard(CallbackInfo callbackInfo) { - if (Objects.requireNonNull(FDPClient.moduleManager.getModule(HUD.class)).getState()) + if (Objects.requireNonNull(FDPClient.moduleManager.getModule(HUDModule.class)).getState()) callbackInfo.cancel(); } @@ -71,7 +71,7 @@ private void renderScoreboard(CallbackInfo callbackInfo) { */ @Overwrite protected void renderTooltip(ScaledResolution sr, float partialTicks) { - final HUD hud = FDPClient.moduleManager.getModule(HUD.class); + final HUDModule hud = FDPClient.moduleManager.getModule(HUDModule.class); final HotbarSettings HotbarSettings = FDPClient.moduleManager.getModule(HotbarSettings.class); final EntityPlayer entityplayer = (EntityPlayer) mc.getRenderViewEntity(); diff --git a/src/main/java/net/ccbluex/liquidbounce/injection/forge/mixins/gui/MixinGuiNewChat.java b/src/main/java/net/ccbluex/liquidbounce/injection/forge/mixins/gui/MixinGuiNewChat.java index 2234247..872a644 100644 --- a/src/main/java/net/ccbluex/liquidbounce/injection/forge/mixins/gui/MixinGuiNewChat.java +++ b/src/main/java/net/ccbluex/liquidbounce/injection/forge/mixins/gui/MixinGuiNewChat.java @@ -7,7 +7,7 @@ import com.mojang.realmsclient.gui.ChatFormatting; import net.ccbluex.liquidbounce.FDPClient; -import net.ccbluex.liquidbounce.features.module.modules.client.HUD; +import net.ccbluex.liquidbounce.features.module.modules.client.HUDModule; import net.ccbluex.liquidbounce.features.module.modules.client.ChatControl; import net.ccbluex.liquidbounce.font.CFontRenderer; import net.ccbluex.liquidbounce.font.FontLoaders; @@ -74,7 +74,7 @@ public abstract class MixinGuiNewChat { private int sameMessageAmount; private int line; - private final HUD hud = FDPClient.moduleManager.getModule(HUD.class); + private final HUDModule hud = FDPClient.moduleManager.getModule(HUDModule.class); private final ChatControl chatEnhance = FDPClient.moduleManager.getModule(ChatControl.class); diff --git a/src/main/java/net/ccbluex/liquidbounce/injection/forge/mixins/gui/MixinGuiScreen.java b/src/main/java/net/ccbluex/liquidbounce/injection/forge/mixins/gui/MixinGuiScreen.java index a4c7538..5ae42c5 100644 --- a/src/main/java/net/ccbluex/liquidbounce/injection/forge/mixins/gui/MixinGuiScreen.java +++ b/src/main/java/net/ccbluex/liquidbounce/injection/forge/mixins/gui/MixinGuiScreen.java @@ -6,7 +6,7 @@ package net.ccbluex.liquidbounce.injection.forge.mixins.gui; import net.ccbluex.liquidbounce.FDPClient; -import net.ccbluex.liquidbounce.features.module.modules.client.HUD; +import net.ccbluex.liquidbounce.features.module.modules.client.HUDModule; import net.ccbluex.liquidbounce.ui.client.GuiBackground; import net.ccbluex.liquidbounce.utils.particles.ParticleUtils; import net.minecraft.client.Minecraft; @@ -71,7 +71,7 @@ private void drawWorldBackground(final CallbackInfo callbackInfo) { if (!fDPClient$shouldRenderBackground()) { callbackInfo.cancel(); } - final HUD hud = HUD.INSTANCE; + final HUDModule hud = HUDModule.INSTANCE; if (hud.getInventoryParticle().get() && mc.thePlayer != null) { final ScaledResolution scaledResolution = new ScaledResolution(mc); diff --git a/src/main/java/net/ccbluex/liquidbounce/injection/forge/mixins/network/MixinNetworkManager.java b/src/main/java/net/ccbluex/liquidbounce/injection/forge/mixins/network/MixinNetworkManager.java index 0dd5a05..f6479af 100644 --- a/src/main/java/net/ccbluex/liquidbounce/injection/forge/mixins/network/MixinNetworkManager.java +++ b/src/main/java/net/ccbluex/liquidbounce/injection/forge/mixins/network/MixinNetworkManager.java @@ -6,7 +6,7 @@ import io.netty.channel.*; import io.netty.channel.oio.OioEventLoopGroup; import io.netty.handler.timeout.ReadTimeoutHandler; -import net.ccbluex.liquidbounce.features.module.modules.client.HUD; +import net.ccbluex.liquidbounce.features.module.modules.client.HUDModule; import net.ccbluex.liquidbounce.features.module.modules.combat.BackTrack; import net.ccbluex.liquidbounce.FDPClient; import net.ccbluex.liquidbounce.event.PacketEvent; @@ -37,8 +37,8 @@ public abstract class MixinNetworkManager { private INetHandler packetListener; /** * show player head in tab bar - * @author - * @reason + * @author XeContrast + * @reason test */ @Overwrite protected void channelRead0(ChannelHandlerContext p_channelRead0_1_, Packet p_channelRead0_2_) { @@ -120,7 +120,7 @@ protected void initChannel(Channel channel) { */ @Inject(method = "getIsencrypted", at = @At("HEAD"), cancellable = true) private void injectEncryption(CallbackInfoReturnable cir) { - final HUD hud = FDPClient.moduleManager.getModule(HUD.class); + final HUDModule hud = FDPClient.moduleManager.getModule(HUDModule.class); if(hud != null && hud.getTabHead().get()) { cir.setReturnValue(true); } diff --git a/src/main/java/net/ccbluex/liquidbounce/injection/forge/mixins/render/MixinRendererLivingEntity.java b/src/main/java/net/ccbluex/liquidbounce/injection/forge/mixins/render/MixinRendererLivingEntity.java index 0c368a5..1b01eb8 100644 --- a/src/main/java/net/ccbluex/liquidbounce/injection/forge/mixins/render/MixinRendererLivingEntity.java +++ b/src/main/java/net/ccbluex/liquidbounce/injection/forge/mixins/render/MixinRendererLivingEntity.java @@ -43,6 +43,10 @@ protected float getDeathMaxRotation(T p_getDeathMax return 90.0F; } + /** + * @author XeContrast + * @reason test + */ @Overwrite protected void rotateCorpse(T p_rotateCorpse_1_, float p_rotateCorpse_2_, float p_rotateCorpse_3_, float p_rotateCorpse_4_) { GlStateManager.rotate(180.0F - p_rotateCorpse_3_, 0.0F, 1.0F, 0.0F); diff --git a/src/main/java/net/ccbluex/liquidbounce/memoryfix/CapeImageBuffer.java b/src/main/java/net/ccbluex/liquidbounce/memoryfix/CapeImageBuffer.java new file mode 100644 index 0000000..a4a2cfd --- /dev/null +++ b/src/main/java/net/ccbluex/liquidbounce/memoryfix/CapeImageBuffer.java @@ -0,0 +1,55 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package net.ccbluex.liquidbounce.memoryfix; + +import net.minecraft.client.entity.AbstractClientPlayer; +import net.minecraft.client.renderer.IImageBuffer; +import net.minecraft.client.renderer.ImageBufferDownload; +import net.minecraft.util.ResourceLocation; + +import java.awt.image.BufferedImage; +import java.lang.ref.WeakReference; + +public class CapeImageBuffer implements IImageBuffer { + public ImageBufferDownload imageBufferDownload; + public final WeakReference playerRef; + public final ResourceLocation resourceLocation; + + public CapeImageBuffer(AbstractClientPlayer player, ResourceLocation resourceLocation) { + this.playerRef = new WeakReference(player); + this.resourceLocation = resourceLocation; + this.imageBufferDownload = new ImageBufferDownload(); + } + + public BufferedImage func_78432_a(BufferedImage image) { + return parseCape(image); + } + + private static BufferedImage parseCape(BufferedImage image) { + return null; + } + + public void func_152634_a() { + AbstractClientPlayer player = (AbstractClientPlayer)this.playerRef.get(); + if (player != null) { + setLocationOfCape(player, this.resourceLocation); + } + + } + + private static void setLocationOfCape(AbstractClientPlayer player, ResourceLocation resourceLocation) { + } + + @Override + public BufferedImage parseUserSkin(BufferedImage bufferedImage) { + return null; + } + + @Override + public void skinAvailable() { + + } +} \ No newline at end of file diff --git a/src/main/java/net/ccbluex/liquidbounce/memoryfix/ClassTransformer.java b/src/main/java/net/ccbluex/liquidbounce/memoryfix/ClassTransformer.java new file mode 100644 index 0000000..50de448 --- /dev/null +++ b/src/main/java/net/ccbluex/liquidbounce/memoryfix/ClassTransformer.java @@ -0,0 +1,108 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package net.ccbluex.liquidbounce.memoryfix; + +import net.minecraft.launchwrapper.IClassTransformer; +import org.objectweb.asm.ClassReader; +import org.objectweb.asm.ClassWriter; +import org.objectweb.asm.commons.Remapper; +import org.objectweb.asm.commons.RemappingClassAdapter; +import org.objectweb.asm.tree.AbstractInsnNode; +import org.objectweb.asm.tree.ClassNode; +import org.objectweb.asm.tree.MethodInsnNode; +import org.objectweb.asm.tree.MethodNode; + +import java.util.ListIterator; +import java.util.function.BiConsumer; + +public class ClassTransformer implements IClassTransformer { + public ClassTransformer() { + } + + public byte[] transform(String name, String transformedName, byte[] bytes) { + if (name.equals("CapeUtils")) { + return this.transformCapeUtils(bytes); + } else if (name.equals("io.prplz.net.ccbluex.liquidbounce.memoryfix.CapeImageBuffer")) { + return this.transformMethods(bytes, this::transformCapeImageBuffer); + } else if (transformedName.equals("net.minecraft.client.resources.AbstractResourcePack")) { + return this.transformMethods(bytes, this::transformAbstractResourcePack); + } else { + return transformedName.equals("net.minecraft.client.Minecraft") ? this.transformMethods(bytes, this::transformMinecraft) : bytes; + } + } + + private byte[] transformMethods(byte[] bytes, BiConsumer transformer) { + ClassReader classReader = new ClassReader(bytes); + ClassNode classNode = new ClassNode(); + classReader.accept(classNode, 0); + classNode.methods.forEach((m) -> { + transformer.accept(classNode, m); + }); + ClassWriter classWriter = new ClassWriter(0); + classNode.accept(classWriter); + return classWriter.toByteArray(); + } + + private byte[] transformCapeUtils(byte[] bytes) { + ClassWriter classWriter = new ClassWriter(2); + RemappingClassAdapter adapter = new RemappingClassAdapter(classWriter, new Remapper() { + public String map(String typeName) { + return typeName.equals("CapeUtils$1") ? "io.prplz.net.ccbluex.liquidbounce.memoryfix.CapeImageBuffer".replace('.', '/') : typeName; + } + }); + ClassReader classReader = new ClassReader(bytes); + classReader.accept(adapter, 8); + return classWriter.toByteArray(); + } + + private void transformCapeImageBuffer(ClassNode clazz, MethodNode method) { + ListIterator iter = method.instructions.iterator(); + + while(iter.hasNext()) { + AbstractInsnNode insn = (AbstractInsnNode)iter.next(); + if (insn instanceof MethodInsnNode) { + MethodInsnNode methodInsn = (MethodInsnNode)insn; + if (methodInsn.name.equals("parseCape")) { + methodInsn.owner = "CapeUtils"; + } else if (methodInsn.name.equals("setLocationOfCape")) { + methodInsn.setOpcode(182); + methodInsn.owner = "net/minecraft/client/entity/AbstractClientPlayer"; + methodInsn.desc = "(Lnet/minecraft/util/ResourceLocation;)V"; + } + } + } + + } + + private void transformAbstractResourcePack(ClassNode clazz, MethodNode method) { + if ((method.name.equals("getPackImage") || method.name.equals("func_110586_a")) && method.desc.equals("()Ljava/awt/image/BufferedImage;")) { + ListIterator iter = method.instructions.iterator(); + + while(iter.hasNext()) { + AbstractInsnNode insn = (AbstractInsnNode)iter.next(); + if (insn.getOpcode() == 176) { + method.instructions.insertBefore(insn, new MethodInsnNode(184, "io.prplz.net.ccbluex.liquidbounce.memoryfix.ResourcePackImageScaler".replace('.', '/'), "scalePackImage", "(Ljava/awt/image/BufferedImage;)Ljava/awt/image/BufferedImage;", false)); + } + } + } + + } + + private void transformMinecraft(ClassNode clazz, MethodNode method) { + ListIterator iter = method.instructions.iterator(); + + while(iter.hasNext()) { + AbstractInsnNode insn = (AbstractInsnNode)iter.next(); + if (insn.getOpcode() == 184) { + MethodInsnNode methodInsn = (MethodInsnNode)insn; + if (methodInsn.owner.equals("java/lang/System") && methodInsn.name.equals("gc")) { + iter.remove(); + } + } + } + + } +} diff --git a/src/main/java/net/ccbluex/liquidbounce/memoryfix/FMLLoadingPlugin.java b/src/main/java/net/ccbluex/liquidbounce/memoryfix/FMLLoadingPlugin.java new file mode 100644 index 0000000..49adc40 --- /dev/null +++ b/src/main/java/net/ccbluex/liquidbounce/memoryfix/FMLLoadingPlugin.java @@ -0,0 +1,38 @@ +package net.ccbluex.liquidbounce.memoryfix; + +import net.minecraftforge.fml.relauncher.IFMLLoadingPlugin; +import net.minecraftforge.fml.relauncher.IFMLLoadingPlugin.MCVersion; +import net.minecraftforge.fml.relauncher.IFMLLoadingPlugin.SortingIndex; + +import java.util.Map; + +@MCVersion("1.8.9") +@SortingIndex(1001) +public class FMLLoadingPlugin implements IFMLLoadingPlugin { + + @Override + public String[] getASMTransformerClass() { + return new String[]{ + ClassTransformer.class.getName() + }; + } + + @Override + public String getModContainerClass() { + return null; + } + + @Override + public String getSetupClass() { + return null; + } + + @Override + public void injectData(Map data) { + } + + @Override + public String getAccessTransformerClass() { + return null; + } +} \ No newline at end of file diff --git a/src/main/java/net/ccbluex/liquidbounce/memoryfix/MemoryFix.java b/src/main/java/net/ccbluex/liquidbounce/memoryfix/MemoryFix.java new file mode 100644 index 0000000..09afa97 --- /dev/null +++ b/src/main/java/net/ccbluex/liquidbounce/memoryfix/MemoryFix.java @@ -0,0 +1,47 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package net.ccbluex.liquidbounce.memoryfix; + +import net.minecraft.client.Minecraft; +import net.minecraft.util.IChatComponent; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.common.Mod.EventHandler; +import net.minecraftforge.fml.common.event.FMLInitializationEvent; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent.ClientTickEvent; + +@Mod( + modid = "memoryfix", + useMetadata = true, + acceptedMinecraftVersions = "[1.8.9]" +) +public class MemoryFix { + private int messageDelay = 0; + private IChatComponent updateMessage; + + public MemoryFix() { + } + + @EventHandler + public void init(FMLInitializationEvent event) { + MinecraftForge.EVENT_BUS.register(this); + String updateUrl = System.getProperty("net.ccbluex.liquidbounce.memoryfix.updateurl", "https://mods.purple.services/update/check/MemoryFix/0.3"); + UpdateChecker updater = new UpdateChecker(updateUrl, (res) -> { + this.updateMessage = res.getUpdateMessage(); + }); + updater.start(); + } + + @SubscribeEvent + public void onTick(ClientTickEvent event) { + if (this.updateMessage != null && Minecraft.getMinecraft().thePlayer != null && ++this.messageDelay == 80) { + Minecraft.getMinecraft().thePlayer.addChatMessage(this.updateMessage); + this.updateMessage = null; + } + + } +} \ No newline at end of file diff --git a/src/main/java/net/ccbluex/liquidbounce/memoryfix/ResourcePackImageScaler.java b/src/main/java/net/ccbluex/liquidbounce/memoryfix/ResourcePackImageScaler.java new file mode 100644 index 0000000..5e2d254 --- /dev/null +++ b/src/main/java/net/ccbluex/liquidbounce/memoryfix/ResourcePackImageScaler.java @@ -0,0 +1,31 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package net.ccbluex.liquidbounce.memoryfix; + +import java.awt.*; +import java.awt.image.BufferedImage; +import java.awt.image.ImageObserver; +import java.io.IOException; + +public class ResourcePackImageScaler { + public static final int SIZE = 64; + + public ResourcePackImageScaler() { + } + + public static BufferedImage scalePackImage(BufferedImage image) throws IOException { + if (image == null) { + return null; + } else { + System.out.println("Scaling resource pack icon from " + image.getWidth() + " to " + 64); + BufferedImage smallImage = new BufferedImage(64, 64, 2); + Graphics graphics = smallImage.getGraphics(); + graphics.drawImage(image, 0, 0, 64, 64, (ImageObserver)null); + graphics.dispose(); + return smallImage; + } + } +} diff --git a/src/main/java/net/ccbluex/liquidbounce/memoryfix/UpdateChecker.java b/src/main/java/net/ccbluex/liquidbounce/memoryfix/UpdateChecker.java new file mode 100644 index 0000000..f231baa --- /dev/null +++ b/src/main/java/net/ccbluex/liquidbounce/memoryfix/UpdateChecker.java @@ -0,0 +1,122 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package net.ccbluex.liquidbounce.memoryfix; + +import com.google.gson.FieldNamingPolicy; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import net.minecraft.util.ChatStyle; +import net.minecraft.util.EnumTypeAdapterFactory; +import net.minecraft.util.IChatComponent; +import net.minecraft.util.IChatComponent.Serializer; +import net.minecraftforge.common.ForgeVersion; + +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.function.Consumer; + +public class UpdateChecker extends Thread { + private final String url; + private final Consumer callback; + private final Gson gson; + + public UpdateChecker(String url, Consumer callback) { + this.gson = (new GsonBuilder()).registerTypeHierarchyAdapter(IChatComponent.class, new Serializer()).registerTypeHierarchyAdapter(ChatStyle.class, new ChatStyle.Serializer()).registerTypeAdapterFactory(new EnumTypeAdapterFactory()).setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES).create(); + this.url = url; + this.callback = callback; + } + + public void run() { + int retry = 0; + + while(retry < 3) { + try { + UpdateResponse response = this.check(this.url); + + try { + this.callback.accept(response); + } catch (Exception var5) { + var5.printStackTrace(); + } + + return; + } catch (Exception var6) { + System.out.println("GET " + this.url + " failed:"); + System.out.println(var6.toString()); + + try { + Thread.sleep(10000L); + } catch (InterruptedException var4) { + return; + } + + ++retry; + } + } + + } + + private UpdateResponse check(String url) throws IOException { + HttpURLConnection con = null; + + Object var7; + try { + con = (HttpURLConnection)(new URL(url)).openConnection(); + con.setRequestMethod("GET"); + String agent = "Java/" + System.getProperty("java.version") + " " + "Forge/" + ForgeVersion.getVersion() + " " + System.getProperty("os.name") + " " + System.getProperty("os.arch") + " "; + con.setRequestProperty("User-Agent", agent); + int response = con.getResponseCode(); + if (response != 200) { + throw new IOException("HTTP " + response); + } + + InputStreamReader in = new InputStreamReader(con.getInputStream(), "UTF-8"); + Throwable var6 = null; + + try { + var7 = (UpdateResponse)this.gson.fromJson(in, UpdateResponse.class); + } catch (Throwable var23) { + var7 = var23; + var6 = var23; + throw var23; + } finally { + if (in != null) { + if (var6 != null) { + try { + in.close(); + } catch (Throwable var22) { + var6.addSuppressed(var22); + } + } else { + in.close(); + } + } + + } + } finally { + if (con != null) { + con.disconnect(); + } + + } + + return (UpdateResponse)var7; + } + + public static class UpdateResponse { + private final IChatComponent updateMessage; + + public UpdateResponse(IChatComponent updateMessage) { + this.updateMessage = updateMessage; + } + + public IChatComponent getUpdateMessage() { + return this.updateMessage; + } + } +} diff --git a/src/main/java/net/ccbluex/liquidbounce/ui/client/gui/GuiMainMenu.kt b/src/main/java/net/ccbluex/liquidbounce/ui/client/gui/GuiMainMenu.kt index 06c539c..d4edb38 100644 --- a/src/main/java/net/ccbluex/liquidbounce/ui/client/gui/GuiMainMenu.kt +++ b/src/main/java/net/ccbluex/liquidbounce/ui/client/gui/GuiMainMenu.kt @@ -19,7 +19,7 @@ import java.awt.Color import java.io.IOException class GuiMainMenu : GuiScreen(), GuiYesNoCallback { - val butt = ArrayList() + private val butt = ArrayList() private var currentX = 0f private var currentY = 0f private var res: ScaledResolution? = null diff --git a/src/main/java/net/ccbluex/liquidbounce/ui/client/gui/clickgui/style/styles/dropdown/Module.java b/src/main/java/net/ccbluex/liquidbounce/ui/client/gui/clickgui/style/styles/dropdown/Module.java index 683ffc9..849d963 100644 --- a/src/main/java/net/ccbluex/liquidbounce/ui/client/gui/clickgui/style/styles/dropdown/Module.java +++ b/src/main/java/net/ccbluex/liquidbounce/ui/client/gui/clickgui/style/styles/dropdown/Module.java @@ -9,7 +9,7 @@ import net.ccbluex.liquidbounce.FDPClient; import net.ccbluex.liquidbounce.ui.client.gui.ClickGUIModule; -import net.ccbluex.liquidbounce.features.module.modules.client.HUD; +import net.ccbluex.liquidbounce.features.module.modules.client.HUDModule; import net.ccbluex.liquidbounce.ui.client.gui.clickgui.fonts.impl.Fonts; import net.ccbluex.liquidbounce.utils.render.RenderUtils; import net.ccbluex.liquidbounce.utils.timer.TickTimer; @@ -83,7 +83,7 @@ public void drawScreen(int mouseX, int mouseY) { } } - HUD hud = FDPClient.moduleManager.getModule(HUD.class); + HUDModule hud = FDPClient.moduleManager.getModule(HUDModule.class); Color colorHUD = ClickGUIModule.INSTANCE.generateColor(); Color white = new Color(0xFFFFFF); diff --git a/src/main/java/net/ccbluex/liquidbounce/ui/client/gui/clickgui/style/styles/dropdown/Setting.java b/src/main/java/net/ccbluex/liquidbounce/ui/client/gui/clickgui/style/styles/dropdown/Setting.java index 20b8873..fc6d635 100644 --- a/src/main/java/net/ccbluex/liquidbounce/ui/client/gui/clickgui/style/styles/dropdown/Setting.java +++ b/src/main/java/net/ccbluex/liquidbounce/ui/client/gui/clickgui/style/styles/dropdown/Setting.java @@ -7,7 +7,7 @@ import net.ccbluex.liquidbounce.FDPClient; import net.ccbluex.liquidbounce.ui.client.gui.ClickGUIModule; -import net.ccbluex.liquidbounce.features.module.modules.client.HUD; +import net.ccbluex.liquidbounce.features.module.modules.client.HUDModule; import net.ccbluex.liquidbounce.ui.client.gui.clickgui.fonts.impl.Fonts; import net.ccbluex.liquidbounce.utils.MathUtils; import net.ccbluex.liquidbounce.utils.render.RenderUtils; @@ -42,7 +42,7 @@ public void setPercent(float percent) { public void drawScreen(int mouseX, int mouseY) { int y = getY(); - HUD hud = FDPClient.moduleManager.getModule(HUD.class); + HUDModule hud = FDPClient.moduleManager.getModule(HUDModule.class); ScaledResolution scaledResolution = new ScaledResolution(Minecraft.getMinecraft()); boolean scissor = scaledResolution.getScaleFactor() != 1; double clamp = MathHelper.clamp_double((double) Minecraft.getDebugFPS() / 30, 1, 9999); diff --git a/src/main/java/net/ccbluex/liquidbounce/ui/font/GameFontRenderer.kt b/src/main/java/net/ccbluex/liquidbounce/ui/font/GameFontRenderer.kt index 3448173..6af6e46 100644 --- a/src/main/java/net/ccbluex/liquidbounce/ui/font/GameFontRenderer.kt +++ b/src/main/java/net/ccbluex/liquidbounce/ui/font/GameFontRenderer.kt @@ -7,7 +7,7 @@ package net.ccbluex.liquidbounce.ui.font import net.ccbluex.liquidbounce.FDPClient import net.ccbluex.liquidbounce.event.TextEvent -import net.ccbluex.liquidbounce.features.module.modules.client.HUD +import net.ccbluex.liquidbounce.features.module.modules.client.HUDModule import net.ccbluex.liquidbounce.ui.i18n.LanguageManager import net.ccbluex.liquidbounce.utils.render.ColorUtils import net.ccbluex.liquidbounce.utils.render.RenderUtils @@ -78,10 +78,10 @@ GameFontRenderer(font: Font) : FontRenderer(Minecraft.getMinecraft().gameSetting if (shadow) { when { - HUD.shadowValue.get().equals("LiquidBounce", ignoreCase = true) -> drawText(currentText, x + 1f, currY + 1f, Color(0, 0, 0, 150).rgb, true) - HUD.shadowValue.get().equals("Default", ignoreCase = true) -> drawText(currentText, x + 0.5f, currY + 0.5f, Color(0, 0, 0, 130).rgb, true) - HUD.shadowValue.get().equals("Autumn", ignoreCase = true) -> drawText(currentText, x + 1f, currY + 1f, Color(20, 20, 20, 200).rgb, true) - HUD.shadowValue.get().equals("Outline", ignoreCase = true) -> { + HUDModule.shadowValue.get().equals("LiquidBounce", ignoreCase = true) -> drawText(currentText, x + 1f, currY + 1f, Color(0, 0, 0, 150).rgb, true) + HUDModule.shadowValue.get().equals("Default", ignoreCase = true) -> drawText(currentText, x + 0.5f, currY + 0.5f, Color(0, 0, 0, 130).rgb, true) + HUDModule.shadowValue.get().equals("Autumn", ignoreCase = true) -> drawText(currentText, x + 1f, currY + 1f, Color(20, 20, 20, 200).rgb, true) + HUDModule.shadowValue.get().equals("Outline", ignoreCase = true) -> { drawText(currentText, x + 0.5f, currY + 0.5f, Color(0, 0, 0, 130).rgb, true) drawText(currentText, x - 0.5f, currY - 0.5f, Color(0, 0, 0, 130).rgb, true) drawText(currentText, x + 0.5f, currY - 0.5f, Color(0, 0, 0, 130).rgb, true) diff --git a/src/main/java/net/ccbluex/liquidbounce/utils/render/ColorUtils.kt b/src/main/java/net/ccbluex/liquidbounce/utils/render/ColorUtils.kt index 06046b7..95d4acb 100644 --- a/src/main/java/net/ccbluex/liquidbounce/utils/render/ColorUtils.kt +++ b/src/main/java/net/ccbluex/liquidbounce/utils/render/ColorUtils.kt @@ -6,7 +6,7 @@ package net.ccbluex.liquidbounce.utils.render import com.ibm.icu.text.NumberFormat -import net.ccbluex.liquidbounce.features.module.modules.client.HUD +import net.ccbluex.liquidbounce.features.module.modules.client.HUDModule import net.minecraft.client.renderer.GlStateManager import net.minecraft.util.ChatAllowedCharacters import org.lwjgl.opengl.GL11 @@ -227,12 +227,12 @@ object ColorUtils { @JvmStatic fun hslRainbow( index: Int, - lowest: Float = HUD.rainbowStartValue.get(), - bigest: Float = HUD.rainbowStopValue.get(), + lowest: Float = HUDModule.rainbowStartValue.get(), + bigest: Float = HUDModule.rainbowStopValue.get(), indexOffset: Int = 300, - timeSplit: Int = HUD.rainbowSpeedValue.get(), - saturation: Float = HUD.rainbowSaturationValue.get(), - brightness: Float = HUD.rainbowBrightnessValue.get() + timeSplit: Int = HUDModule.rainbowSpeedValue.get(), + saturation: Float = HUDModule.rainbowSaturationValue.get(), + brightness: Float = HUDModule.rainbowBrightnessValue.get() ): Color { return Color.getHSBColor((abs(((((System.currentTimeMillis() - startTime).toInt() + index * indexOffset) / timeSplit.toFloat()) % 2) - 1) * (bigest - lowest)) + lowest, saturation, brightness) } @@ -450,5 +450,13 @@ object ColorUtils { fun toRGB(f: Float, f2: Float, f3: Float, f4: Float): Int { return toRGB((f * 255.0f).toInt(), (f2 * 255.0f).toInt(), (f3 * 255.0f).toInt(), (f4 * 255.0f).toInt()) } + @JvmStatic + fun fade(speed: Int, index: Int, color: Color, alpha: Float): Color { + val hsb = Color.RGBtoHSB(color.red, color.green, color.blue, null) + var angle = ((System.currentTimeMillis() / speed + index) % 360L).toInt() + angle = (if (angle > 180) 360 - angle else angle) + 180 + val colorHSB = Color(Color.HSBtoRGB(hsb[0], hsb[1], angle / 360.0f)) + return Color(colorHSB.red, colorHSB.green, colorHSB.blue, (max(0.0, min(255.0, (alpha * 255.0f).toDouble()))).toInt()) + } }