diff --git a/src/main/java/me/zeroeightsix/kami/event/ForgeEventProcessor.kt b/src/main/java/me/zeroeightsix/kami/event/ForgeEventProcessor.kt index 977180f0a..0b5cc2072 100644 --- a/src/main/java/me/zeroeightsix/kami/event/ForgeEventProcessor.kt +++ b/src/main/java/me/zeroeightsix/kami/event/ForgeEventProcessor.kt @@ -13,7 +13,6 @@ import me.zeroeightsix.kami.util.graphics.ProjectionUtils import me.zeroeightsix.kami.util.text.MessageDetection import net.minecraftforge.client.event.* import net.minecraftforge.event.entity.living.LivingEntityUseItemEvent -import net.minecraftforge.event.entity.player.AttackEntityEvent import net.minecraftforge.event.entity.player.PlayerInteractEvent import net.minecraftforge.event.world.ChunkEvent import net.minecraftforge.fml.common.eventhandler.EventPriority @@ -31,6 +30,12 @@ object ForgeEventProcessor { @SubscribeEvent fun onTick(event: TickEvent.ClientTickEvent) { + if (event.phase == TickEvent.Phase.START) { + mc.profiler.startSection("kbTickPre") + } else { + mc.profiler.startSection("kbTickPost") + } + KamiEventBus.post(event) if (event.phase == TickEvent.Phase.END && prevWidth != mc.displayWidth || prevHeight != mc.displayHeight) { @@ -38,15 +43,16 @@ object ForgeEventProcessor { prevHeight = mc.displayHeight KamiEventBus.post(ResolutionUpdateEvent(mc.displayWidth, mc.displayHeight)) } + + mc.profiler.endSection() } @SubscribeEvent @Suppress("UNUSED_PARAMETER") fun onWorldRender(event: RenderWorldLastEvent) { + mc.profiler.startSection("kbRender3D") + ProjectionUtils.updateMatrix() - - mc.profiler.startSection("KamiWorldRender") - KamiTessellator.prepareGL() KamiEventBus.post(RenderWorldEvent()) KamiTessellator.releaseGL() @@ -116,21 +122,11 @@ object ForgeEventProcessor { KamiEventBus.post(entityUseItemEvent) } - @SubscribeEvent - fun onPlayerPush(event: PlayerSPPushOutOfBlocksEvent) { - KamiEventBus.post(event) - } - @SubscribeEvent fun onLeftClickBlock(event: PlayerInteractEvent.LeftClickBlock) { KamiEventBus.post(event) } - @SubscribeEvent - fun onAttackEntity(entityEvent: AttackEntityEvent) { - KamiEventBus.post(entityEvent) - } - @SubscribeEvent fun onRenderBlockOverlay(event: RenderBlockOverlayEvent) { KamiEventBus.post(event) diff --git a/src/main/java/me/zeroeightsix/kami/event/events/RenderShaderEvent.kt b/src/main/java/me/zeroeightsix/kami/event/events/RenderShaderEvent.kt deleted file mode 100644 index b60cba25a..000000000 --- a/src/main/java/me/zeroeightsix/kami/event/events/RenderShaderEvent.kt +++ /dev/null @@ -1,5 +0,0 @@ -package me.zeroeightsix.kami.event.events - -import me.zeroeightsix.kami.event.Event - -class RenderShaderEvent : Event \ No newline at end of file diff --git a/src/main/java/me/zeroeightsix/kami/gui/rgui/windows/ColorPicker.kt b/src/main/java/me/zeroeightsix/kami/gui/rgui/windows/ColorPicker.kt index d9e2b658c..bccf27071 100644 --- a/src/main/java/me/zeroeightsix/kami/gui/rgui/windows/ColorPicker.kt +++ b/src/main/java/me/zeroeightsix/kami/gui/rgui/windows/ColorPicker.kt @@ -82,12 +82,14 @@ object ColorPicker : TitledWindow("Color Picker", 0.0f, 0.0f, 200.0f, 200.0f, Se override fun onTick() { super.onTick() - prevHue = hue - prevSaturation = saturation - prevBrightness = brightness - for (component in components) component.onTick() - if (hoveredChild != null) updateHSBFromRGB() - if (listeningChild?.listening == false) listeningChild = null + if (visible) { + prevHue = hue + prevSaturation = saturation + prevBrightness = brightness + for (component in components) component.onTick() + if (hoveredChild != null) updateHSBFromRGB() + if (listeningChild?.listening == false) listeningChild = null + } } override fun onMouseInput(mousePos: Vec2f) { diff --git a/src/main/java/me/zeroeightsix/kami/manager/managers/PlayerInventoryManager.kt b/src/main/java/me/zeroeightsix/kami/manager/managers/PlayerInventoryManager.kt index d352e37fd..0909e1116 100644 --- a/src/main/java/me/zeroeightsix/kami/manager/managers/PlayerInventoryManager.kt +++ b/src/main/java/me/zeroeightsix/kami/manager/managers/PlayerInventoryManager.kt @@ -3,6 +3,7 @@ package me.zeroeightsix.kami.manager.managers import me.zeroeightsix.kami.event.events.ConnectionEvent import me.zeroeightsix.kami.event.events.RenderOverlayEvent import me.zeroeightsix.kami.manager.Manager +import me.zeroeightsix.kami.mixin.extension.syncCurrentPlayItem import me.zeroeightsix.kami.module.AbstractModule import me.zeroeightsix.kami.util.* import me.zeroeightsix.kami.util.items.clickSlot @@ -33,7 +34,7 @@ object PlayerInventoryManager : Manager { getTaskOrNext()?.nextInfo()?.let { clickSlot(it.windowId, it.slot, it.mouseButton, it.type) - playerController.updateController() + playerController.syncCurrentPlayItem() } if (actionQueue.isEmpty()) currentId = 0 diff --git a/src/main/java/me/zeroeightsix/kami/mixin/client/render/MixinEntityRenderer.java b/src/main/java/me/zeroeightsix/kami/mixin/client/render/MixinEntityRenderer.java index 83908ca83..97e38b5a2 100644 --- a/src/main/java/me/zeroeightsix/kami/mixin/client/render/MixinEntityRenderer.java +++ b/src/main/java/me/zeroeightsix/kami/mixin/client/render/MixinEntityRenderer.java @@ -3,7 +3,6 @@ package me.zeroeightsix.kami.mixin.client.render; import com.google.common.base.Predicate; import me.zeroeightsix.kami.event.KamiEventBus; import me.zeroeightsix.kami.event.events.RenderOverlayEvent; -import me.zeroeightsix.kami.event.events.RenderShaderEvent; import me.zeroeightsix.kami.module.modules.movement.ElytraFlight; import me.zeroeightsix.kami.module.modules.player.Freecam; import me.zeroeightsix.kami.module.modules.player.NoEntityTrace; @@ -12,6 +11,7 @@ import me.zeroeightsix.kami.module.modules.render.AntiFog; import me.zeroeightsix.kami.module.modules.render.AntiOverlay; import me.zeroeightsix.kami.module.modules.render.CameraClip; import me.zeroeightsix.kami.module.modules.render.NoHurtCam; +import me.zeroeightsix.kami.util.Wrapper; import me.zeroeightsix.kami.util.math.Vec2f; import net.minecraft.block.state.IBlockState; import net.minecraft.client.entity.EntityPlayerSP; @@ -39,7 +39,9 @@ public class MixinEntityRenderer { @Inject(method = "updateCameraAndRender", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiIngame;renderGameOverlay(F)V", shift = At.Shift.AFTER)) public void updateCameraAndRender(float partialTicks, long nanoTime, CallbackInfo ci) { + Wrapper.getMinecraft().profiler.startSection("kbRender2D"); KamiEventBus.INSTANCE.post(new RenderOverlayEvent()); + Wrapper.getMinecraft().profiler.endSection(); } @Redirect(method = "orientCamera", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/WorldClient;rayTraceBlocks(Lnet/minecraft/util/math/Vec3d;Lnet/minecraft/util/math/Vec3d;)Lnet/minecraft/util/math/RayTraceResult;")) @@ -93,12 +95,6 @@ public class MixinEntityRenderer { } } - @Inject(method = "renderWorldPass", at = @At("RETURN")) - public void renderShaderPre(int pass, float partialTicks, long finishTimeNano, CallbackInfo ci) { - RenderShaderEvent eventPre = new RenderShaderEvent(); - KamiEventBus.INSTANCE.post(eventPre); - } - @Redirect(method = "updateCameraAndRender", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/entity/EntityPlayerSP;turn(FF)V")) public void turn(EntityPlayerSP player, float yaw, float pitch) { if (ViewLock.INSTANCE.isEnabled() && Freecam.INSTANCE.isDisabled()) { diff --git a/src/main/java/me/zeroeightsix/kami/mixin/client/render/MixinRenderManager.java b/src/main/java/me/zeroeightsix/kami/mixin/client/render/MixinRenderManager.java index c653eb2ee..5d21da02b 100644 --- a/src/main/java/me/zeroeightsix/kami/mixin/client/render/MixinRenderManager.java +++ b/src/main/java/me/zeroeightsix/kami/mixin/client/render/MixinRenderManager.java @@ -3,6 +3,7 @@ package me.zeroeightsix.kami.mixin.client.render; import me.zeroeightsix.kami.event.KamiEventBus; import me.zeroeightsix.kami.event.Phase; import me.zeroeightsix.kami.event.events.RenderEntityEvent; +import me.zeroeightsix.kami.util.Wrapper; import net.minecraft.client.renderer.entity.RenderManager; import net.minecraft.entity.Entity; import org.spongepowered.asm.mixin.Mixin; @@ -15,22 +16,32 @@ public class MixinRenderManager { @Inject(method = "renderEntity", at = @At("HEAD"), cancellable = true) public void renderEntityPre(Entity entity, double x, double y, double z, float yaw, float partialTicks, boolean debug, CallbackInfo ci) { if (entity == null) return; + + Wrapper.getMinecraft().profiler.startSection("kbRenderEntityPre"); RenderEntityEvent event = new RenderEntityEvent(entity, x, y, z, yaw, partialTicks, Phase.PRE); KamiEventBus.INSTANCE.post(event); + Wrapper.getMinecraft().profiler.endSection(); + if (event.getCancelled()) ci.cancel(); } @Inject(method = "renderEntity", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/entity/Render;doRender(Lnet/minecraft/entity/Entity;DDDFF)V", shift = At.Shift.AFTER)) public void renderEntityPeri(Entity entity, double x, double y, double z, float yaw, float partialTicks, boolean debug, CallbackInfo ci) { if (entity == null) return; + + Wrapper.getMinecraft().profiler.startSection("kbRenderEntityPeri"); RenderEntityEvent event = new RenderEntityEvent(entity, x, y, z, yaw, partialTicks, Phase.PERI); KamiEventBus.INSTANCE.post(event); + Wrapper.getMinecraft().profiler.endSection(); } @Inject(method = "renderEntity", at = @At("RETURN")) public void renderEntityPost(Entity entity, double x, double y, double z, float yaw, float partialTicks, boolean debug, CallbackInfo ci) { if (entity == null) return; + + Wrapper.getMinecraft().profiler.startSection("kbRenderEntityPost"); RenderEntityEvent event = new RenderEntityEvent(entity, x, y, z, yaw, partialTicks, Phase.POST); KamiEventBus.INSTANCE.post(event); + Wrapper.getMinecraft().profiler.endSection(); } } diff --git a/src/main/java/me/zeroeightsix/kami/module/modules/client/CommandConfig.kt b/src/main/java/me/zeroeightsix/kami/module/modules/client/CommandConfig.kt index 46e90c604..1fa7c0b1e 100644 --- a/src/main/java/me/zeroeightsix/kami/module/modules/client/CommandConfig.kt +++ b/src/main/java/me/zeroeightsix/kami/module/modules/client/CommandConfig.kt @@ -1,18 +1,9 @@ package me.zeroeightsix.kami.module.modules.client import me.zeroeightsix.kami.KamiMod -import me.zeroeightsix.kami.gui.AbstractKamiGui -import me.zeroeightsix.kami.gui.clickgui.KamiClickGui -import me.zeroeightsix.kami.gui.hudgui.KamiHudGui import me.zeroeightsix.kami.module.Category import me.zeroeightsix.kami.module.Module -import me.zeroeightsix.kami.setting.ConfigManager -import me.zeroeightsix.kami.setting.ModuleConfig -import me.zeroeightsix.kami.util.ConfigUtils import me.zeroeightsix.kami.util.TickTimer -import me.zeroeightsix.kami.util.TimeUnit -import me.zeroeightsix.kami.util.text.MessageSendHelper -import me.zeroeightsix.kami.util.threads.BackgroundScope import net.minecraftforge.fml.common.gameevent.TickEvent import org.kamiblue.event.listener.listener import org.lwjgl.opengl.Display @@ -29,17 +20,20 @@ internal object CommandConfig : Module( private val customTitle = setting("WindowTitle", true) val modifierEnabled = setting("ModifierEnabled", false, { false }) + private val timer = TickTimer() private val prevTitle = Display.getTitle() private const val title = "${KamiMod.NAME} ${KamiMod.KAMI_KATAKANA} ${KamiMod.VERSION_SIMPLE}" init { listener { - updateTitle() + if (timer.tick(10000L)) { + if (customTitle.value) Display.setTitle(title) + else Display.setTitle(prevTitle) + } + } + + customTitle.listeners.add { + timer.reset(-0xCAFEBABE) } } - - private fun updateTitle() { - if (customTitle.value) Display.setTitle(title) - else Display.setTitle(prevTitle) - } } \ No newline at end of file diff --git a/src/main/java/me/zeroeightsix/kami/module/modules/combat/AutoOffhand.kt b/src/main/java/me/zeroeightsix/kami/module/modules/combat/AutoOffhand.kt index 8c5f902b7..4446c0898 100644 --- a/src/main/java/me/zeroeightsix/kami/module/modules/combat/AutoOffhand.kt +++ b/src/main/java/me/zeroeightsix/kami/module/modules/combat/AutoOffhand.kt @@ -3,6 +3,7 @@ package me.zeroeightsix.kami.module.modules.combat import me.zeroeightsix.kami.event.SafeClientEvent import me.zeroeightsix.kami.event.events.PacketEvent import me.zeroeightsix.kami.manager.managers.CombatManager +import me.zeroeightsix.kami.mixin.extension.syncCurrentPlayItem import me.zeroeightsix.kami.module.Category import me.zeroeightsix.kami.module.Module import me.zeroeightsix.kami.util.* @@ -160,7 +161,7 @@ internal object AutoOffhand : Module( transactionLog.clear() transactionLog.putAll(moveToSlot(slot.slotNumber, 45).associate { it to false }) - playerController.updateController() + playerController.syncCurrentPlayItem() movingTimer.reset() if (switchMessage) MessageSendHelper.sendChatMessage("$chatName Offhand now has a ${typeAlt.toString().toLowerCase()}") diff --git a/src/main/java/me/zeroeightsix/kami/module/modules/combat/CrystalAura.kt b/src/main/java/me/zeroeightsix/kami/module/modules/combat/CrystalAura.kt index 0656cea88..8087944d2 100644 --- a/src/main/java/me/zeroeightsix/kami/module/modules/combat/CrystalAura.kt +++ b/src/main/java/me/zeroeightsix/kami/module/modules/combat/CrystalAura.kt @@ -147,10 +147,7 @@ internal object CrystalAura : Module( val minDamage get() = max(minDamageP, minDamageE) val maxSelfDamage get() = min(maxSelfDamageP, maxSelfDamageE) - override fun isActive() = - isEnabled - && (mc.player?.allSlots?.countItem(Items.END_CRYSTAL) ?: 0) > 0 - && inactiveTicks <= 20 + override fun isActive() = isEnabled && inactiveTicks <= 20 init { onEnable { diff --git a/src/main/java/me/zeroeightsix/kami/module/modules/misc/AutoTool.kt b/src/main/java/me/zeroeightsix/kami/module/modules/misc/AutoTool.kt index 14ad6fe0c..0cc557ba3 100644 --- a/src/main/java/me/zeroeightsix/kami/module/modules/misc/AutoTool.kt +++ b/src/main/java/me/zeroeightsix/kami/module/modules/misc/AutoTool.kt @@ -1,6 +1,7 @@ package me.zeroeightsix.kami.module.modules.misc import me.zeroeightsix.kami.event.SafeClientEvent +import me.zeroeightsix.kami.event.events.PlayerAttackEvent import me.zeroeightsix.kami.mixin.extension.syncCurrentPlayItem import me.zeroeightsix.kami.module.Category import me.zeroeightsix.kami.module.Module @@ -12,7 +13,6 @@ import net.minecraft.block.state.IBlockState import net.minecraft.enchantment.EnchantmentHelper import net.minecraft.entity.EntityLivingBase import net.minecraft.init.Enchantments -import net.minecraftforge.event.entity.player.AttackEntityEvent import net.minecraftforge.event.entity.player.PlayerInteractEvent.LeftClickBlock import net.minecraftforge.fml.common.gameevent.TickEvent import org.lwjgl.input.Mouse @@ -37,8 +37,8 @@ internal object AutoTool : Module( if (shouldMoveBack || !switchBack.value) equipBestTool(world.getBlockState(it.pos)) } - safeListener { - if (swapWeapon.value && it.target is EntityLivingBase) equipBestWeapon(preferWeapon.value) + safeListener { + if (swapWeapon.value && it.entity is EntityLivingBase) equipBestWeapon(preferWeapon.value) } safeListener { diff --git a/src/main/java/me/zeroeightsix/kami/module/modules/player/InventoryManager.kt b/src/main/java/me/zeroeightsix/kami/module/modules/player/InventoryManager.kt index 773cb8f4a..4a29c33ad 100644 --- a/src/main/java/me/zeroeightsix/kami/module/modules/player/InventoryManager.kt +++ b/src/main/java/me/zeroeightsix/kami/module/modules/player/InventoryManager.kt @@ -2,6 +2,7 @@ package me.zeroeightsix.kami.module.modules.player import me.zeroeightsix.kami.event.SafeClientEvent import me.zeroeightsix.kami.event.events.PlayerTravelEvent +import me.zeroeightsix.kami.mixin.extension.syncCurrentPlayItem import me.zeroeightsix.kami.module.Category import me.zeroeightsix.kami.module.Module import me.zeroeightsix.kami.process.PauseProcess.pauseBaritone @@ -82,7 +83,7 @@ internal object InventoryManager : Module( State.IDLE -> removeHoldingItem() } - playerController.updateController() + playerController.syncCurrentPlayItem() } } diff --git a/src/main/java/me/zeroeightsix/kami/module/modules/player/Scaffold.kt b/src/main/java/me/zeroeightsix/kami/module/modules/player/Scaffold.kt index 001abe8d2..8a6875547 100644 --- a/src/main/java/me/zeroeightsix/kami/module/modules/player/Scaffold.kt +++ b/src/main/java/me/zeroeightsix/kami/module/modules/player/Scaffold.kt @@ -9,6 +9,7 @@ import me.zeroeightsix.kami.event.events.PacketEvent import me.zeroeightsix.kami.event.events.PlayerTravelEvent import me.zeroeightsix.kami.manager.managers.PlayerPacketManager import me.zeroeightsix.kami.mixin.client.entity.MixinEntity +import me.zeroeightsix.kami.mixin.extension.syncCurrentPlayItem import me.zeroeightsix.kami.module.Category import me.zeroeightsix.kami.module.Module import me.zeroeightsix.kami.util.* @@ -169,7 +170,7 @@ internal object Scaffold : Module( } private fun SafeClientEvent.getBlockSlot(): HotbarSlot? { - playerController.updateController() + playerController.syncCurrentPlayItem() return player.hotbarSlots.firstItem() } diff --git a/src/main/java/me/zeroeightsix/kami/module/modules/render/ESP.kt b/src/main/java/me/zeroeightsix/kami/module/modules/render/ESP.kt index 68bdd46f9..72ee9407f 100644 --- a/src/main/java/me/zeroeightsix/kami/module/modules/render/ESP.kt +++ b/src/main/java/me/zeroeightsix/kami/module/modules/render/ESP.kt @@ -3,7 +3,6 @@ package me.zeroeightsix.kami.module.modules.render import me.zeroeightsix.kami.event.Phase import me.zeroeightsix.kami.event.SafeClientEvent import me.zeroeightsix.kami.event.events.RenderEntityEvent -import me.zeroeightsix.kami.event.events.RenderShaderEvent import me.zeroeightsix.kami.event.events.RenderWorldEvent import me.zeroeightsix.kami.mixin.extension.entityOutlineShader import me.zeroeightsix.kami.mixin.extension.listShaders @@ -27,6 +26,7 @@ import net.minecraft.entity.projectile.EntityThrowable import net.minecraft.util.ResourceLocation import net.minecraftforge.fml.common.gameevent.TickEvent import org.kamiblue.event.listener.listener +import org.lwjgl.opengl.GL11.* internal object ESP : Module( name = "ESP", @@ -102,24 +102,37 @@ internal object ESP : Module( } } - listener { + listener(69420) { if (mode.value != ESPMode.SHADER) return@listener - frameBuffer?.bindFramebuffer(false) + GlStateManager.matrixMode(GL_PROJECTION) + glPushMatrix() + GlStateManager.matrixMode(GL_MODELVIEW) + glPushMatrix() + shaderHelper.shader?.render(KamiTessellator.pTicks()) + // Re-enable blend because shader rendering will disable it at the end + GlStateManager.enableBlend() + GlStateManager.disableDepth() + // Draw it on the main frame buffer mc.framebuffer.bindFramebuffer(false) - GlStateManager.disableDepth() - // Re-enable blend because shader rendering will disable it at the end - GlStateManager.enableBlend() frameBuffer?.framebufferRenderExt(mc.displayWidth, mc.displayHeight, false) - GlStateManager.disableBlend() - GlStateManager.enableDepth() // Clean up the frame buffer frameBuffer?.framebufferClear() - mc.framebuffer.bindFramebuffer(true) + mc.framebuffer.bindFramebuffer(false) + + GlStateManager.enableBlend() + GlStateManager.enableDepth() + GlStateManager.disableTexture2D() + GlStateManager.depthMask(false) + + GlStateManager.matrixMode(GL_PROJECTION) + glPopMatrix() + GlStateManager.matrixMode(GL_MODELVIEW) + glPopMatrix() } } diff --git a/src/main/java/me/zeroeightsix/kami/util/graphics/font/TextComponent.kt b/src/main/java/me/zeroeightsix/kami/util/graphics/font/TextComponent.kt index cd8c1baf7..7ef37d319 100644 --- a/src/main/java/me/zeroeightsix/kami/util/graphics/font/TextComponent.kt +++ b/src/main/java/me/zeroeightsix/kami/util/graphics/font/TextComponent.kt @@ -110,9 +110,8 @@ class TextComponent(val separator: String = " ") { fun isEmpty() = textLines.firstOrNull { it?.isEmpty() == false } == null - fun getWidth(customFont: Boolean = FontRenderAdapter.useCustomFont) = textLines.map { - it?.getWidth(customFont) ?: 0f - }.maxOrNull() ?: 0f + fun getWidth(customFont: Boolean = FontRenderAdapter.useCustomFont) = textLines + .maxOfOrNull { it?.getWidth(customFont) ?: 0.0f } ?: 0.0f fun getHeight(lineSpace: Int, skipEmptyLines: Boolean = true, customFont: Boolean = FontRenderAdapter.useCustomFont) = FontRenderAdapter.getFontHeight(customFont = customFont) * getLines(skipEmptyLines) + lineSpace * (getLines(skipEmptyLines) - 1)