fix: CI workflow, password reset flow, health/limits in services, session refactor, dead mixin stub cleanup

This commit is contained in:
loki5512344 2026-10-09 19:21:17 +02:00
parent 45dd592c40
commit f4e15b45c9
Signed by: boba
GPG key ID: 253067914055423B
95 changed files with 899 additions and 185 deletions

View file

@ -19,7 +19,6 @@ import dev.loki.lovisual.Lifecycle;
import java.util.Map;
//todo Description
@HudElementInfo(
id = "better_chat",
displayName = "Better Chat",

View file

@ -17,7 +17,6 @@ import dev.loki.lovisual.features.gui.hud.script.ScriptableHudStatWidget;
import dev.loki.lovisual.render.engine.renderer.Renderer2D;
import dev.loki.lovisual.render.engine.text.render.TextRenderer;
//todo Description
@HudElementInfo(
id = "xyz",
displayName = "XYZ",

View file

@ -18,7 +18,6 @@ import dev.loki.lovisual.features.gui.hud.script.ScriptableHudStatWidget;
import dev.loki.lovisual.render.engine.renderer.Renderer2D;
import dev.loki.lovisual.render.engine.text.render.TextRenderer;
//todo Description
@HudElementInfo(
id = "speed_bps",
displayName = "Speed BPS",

View file

@ -20,7 +20,6 @@ final class KeybindsData {
if (category == null) return "ellipsis";
return switch (category) {
case COMBAT -> "swords";
case MOVEMENT -> "accessibility";
case PLAYER -> "user";
case VISUALS -> "tree-pine";
case ACCESSORIES -> "shirt";

View file

@ -17,7 +17,6 @@ import dev.loki.lovisual.features.gui.hud.script.ScriptableHudStatWidget;
import dev.loki.lovisual.render.engine.renderer.Renderer2D;
import dev.loki.lovisual.render.engine.text.render.TextRenderer;
//todo Description
@HudElementInfo(
id = "ping",
displayName = "Ping",

View file

@ -11,7 +11,6 @@ import dev.loki.lovisual.render.engine.math.HudScale;
import dev.loki.lovisual.render.engine.renderer.Renderer2D;
import dev.loki.lovisual.render.engine.text.render.TextRenderer;
//todo Description
@HudElementInfo(
id = "armor",
displayName = "Armor",

View file

@ -2,7 +2,6 @@ package dev.loki.lovisual.features.module.core;
public enum ModuleCategory {
COMBAT,
MOVEMENT,
PLAYER,
VISUALS,
ACCESSORIES,

View file

@ -190,5 +190,7 @@ public enum ModuleManager {
catch (Throwable ignored) { DebugLog.error("Failed to load config for module %s", ignored, m.name()); }
}
public static void saveAllModuleConfigs() { for (Module m : modulesSnapshot) { try { m.saveConfig(); } catch (Throwable ignored) { } } }
/** Save config for every registered module; logs per-module failures without aborting. */
public static void saveAllModuleConfigs() { for (Module m : modulesSnapshot) try { m.saveConfig(); }
catch (Throwable ignored) { DebugLog.error("Failed to save config for module %s", ignored, m.name()); } }
}

View file

@ -16,7 +16,6 @@ import dev.loki.lovisual.render.engine.postprocess.post.PostProcessPass;
import dev.loki.lovisual.render.engine.renderer.FullScreenRenderer;
import dev.loki.lovisual.render.engine.uniform.impl.post.PostProcessUniforms;
//todo Description
@ModuleInfo(id = "damagetint", displayName = "DamageTint", category = ModuleCategory.COMBAT)
public class DamageTint extends Module implements PostProcessPass {

View file

@ -32,7 +32,6 @@ import static dev.loki.lovisual.features.module.modules.combat.targetesp.TargetE
import static dev.loki.lovisual.features.module.modules.combat.targetesp.TargetEspModes.setCaptureSpeedScale;
import static dev.loki.lovisual.features.module.modules.combat.targetesp.TargetEspModes.tickTargetEsp;
//todo Description
@ModuleInfo(id = "targetesp", displayName = "TargetESP", aliases = {"target", "targetrender"}, category = ModuleCategory.COMBAT)
public class TargetESP extends Module {

View file

@ -24,7 +24,6 @@ import dev.loki.lovisual.features.gui.clickgui.settings.cooldown.CooldownRulesSe
/**
* Handles PvP cooldown rendering and optional local rule synthesis.
*/
//todo Description
@ModuleInfo(
id = "pvpcooldowns",
displayName = "PvpCooldowns",

View file

@ -7,7 +7,6 @@ import dev.loki.lovisual.features.module.core.Module;
import dev.loki.lovisual.features.module.core.ModuleCategory;
import dev.loki.lovisual.features.module.core.ModuleInfo;
//todo Description
@ModuleInfo(
id = "spearassist",
displayName = "SpearAssist",

View file

@ -8,7 +8,6 @@ import dev.loki.lovisual.features.module.core.ModuleCategory;
import dev.loki.lovisual.features.module.core.ModuleInfo;
import dev.loki.lovisual.util.player.interaction.NetworkStatsUtil;
//todo Description
@ModuleInfo(
id = "tpssync",
displayName = "TPSSync",

View file

@ -30,7 +30,6 @@ import dev.loki.lovisual.util.text.mask.ChatNameUtil;
* - Players: friend/enemy/staff
* - Non-players: toggle ignored entities (EntityFilters)
*/
//todo Description
@ModuleInfo(id = "definetarget", displayName = "DefineTarget", aliases = {"clickfriend"}, category = ModuleCategory.MISC)
public class DefineTarget extends Module {

View file

@ -36,7 +36,6 @@ import dev.loki.lovisual.features.module.core.ModuleInfo;
import java.util.UUID;
//todo Description
@ModuleInfo(
id = "fakeplayer",
displayName = "FakePlayer",

View file

@ -11,7 +11,6 @@ import dev.loki.lovisual.features.module.core.ModuleInfo;
import java.util.Locale;
import java.util.Set;
//todo Description
@ModuleInfo(
id = "message_filter",
displayName = "MessageFilter",

View file

@ -18,7 +18,6 @@ import dev.loki.lovisual.util.wav.engine.CustomSoundEngine;
import java.util.Map;
//todo Description
@ModuleInfo(
id = "hitsounds",
displayName = "HitSounds",

View file

@ -11,7 +11,6 @@ import dev.loki.lovisual.features.module.core.ModuleInfo;
import java.util.Locale;
import java.util.Set;
//todo Description
@ModuleInfo(
id = "nosound",
displayName = "NoSound",

View file

@ -5,7 +5,6 @@ import dev.loki.lovisual.features.module.core.Module;
import dev.loki.lovisual.features.module.core.ModuleCategory;
import dev.loki.lovisual.features.module.core.ModuleInfo;
//todo Description
@ModuleInfo(
id = "betterminecraft",
displayName = "BetterMinecraft",

View file

@ -15,7 +15,6 @@ import dev.loki.lovisual.features.module.core.ModuleInfo;
import dev.loki.lovisual.mixins.accessors.misc.MultiPlayerGameModeAccessor;
import dev.loki.lovisual.mixins.accessors.inventory.PlayerInventoryAccessor;
//todo Description
@ModuleInfo(
id = "autotool",
displayName = "AutoTool",

View file

@ -11,7 +11,6 @@ import dev.loki.lovisual.features.module.core.ModuleCategory;
import dev.loki.lovisual.features.module.core.ModuleInfo;
import dev.loki.lovisual.mixins.accessors.inventory.PlayerInventoryAccessor;
//todo Description
@ModuleInfo(
id = "clickpearl",
displayName = "ClickPearl",

View file

@ -4,7 +4,6 @@ import dev.loki.lovisual.config.values.primitive.BooleanValue;
import dev.loki.lovisual.features.module.core.Module;
import dev.loki.lovisual.features.module.core.ModuleCategory;
import dev.loki.lovisual.features.module.core.ModuleInfo;
//todo Description
@ModuleInfo(
id = "nointeract",
displayName = "NoInteract",

View file

@ -9,7 +9,6 @@ import dev.loki.lovisual.features.module.core.ModuleInfo;
import java.util.LinkedHashMap;
//todo Description
@ModuleInfo(
id = "fovcontrol",
displayName = "FovControl",

View file

@ -8,7 +8,6 @@ import dev.loki.lovisual.features.module.core.ModuleCategory;
import dev.loki.lovisual.features.module.core.ModuleInfo;
import dev.loki.lovisual.features.module.lifecycle.Modules;
//todo Description
@ModuleInfo(
id = "aspectratio",
displayName = "AspectRatio",

View file

@ -5,7 +5,6 @@ import dev.loki.lovisual.features.module.core.Module;
import dev.loki.lovisual.features.module.core.ModuleCategory;
import dev.loki.lovisual.features.module.core.ModuleInfo;
//todo Description
@ModuleInfo(
id = "cameraclip",
displayName = "CameraClip",

View file

@ -19,7 +19,6 @@ import dev.loki.lovisual.features.module.modules.visuals.player.FullBright;
import java.util.Map;
//todo Description
@ModuleInfo(id = "freecam", displayName = "Freecam", aliases = {"camera", "spectator"}, category = ModuleCategory.VISUALS)
public class Freecam extends Module {

View file

@ -20,7 +20,6 @@ import dev.loki.lovisual.features.module.modules.visuals.camera.swing.SwingAnima
/**
* ViewModel: mini items + custom swing animations
*/
//todo Description
@ModuleInfo(id = "viewmodel", displayName = "ViewModel", category = ModuleCategory.VISUALS)
public class ViewModel extends Module {

View file

@ -28,7 +28,6 @@ import dev.loki.lovisual.features.module.modules.visuals.effects.ambient.geometr
import dev.loki.lovisual.features.module.modules.visuals.effects.ambient.geometry.WorldParticlesSphere;
import dev.loki.lovisual.render.engine.uniform.MeshBuilder;
//todo Description
@ModuleInfo(
id = "worldparticles",
displayName = "WorldParticles",

View file

@ -23,7 +23,6 @@ import net.minecraft.world.phys.Vec3;
import java.util.HashMap;
import java.util.Map;
//todo Description
@ModuleInfo(id = "killeffect", displayName = "KillEffect", category = ModuleCategory.VISUALS)
public class KillEffect extends DeathEffectSettings {
private static final Identifier ORTHODOX_SOUND =

View file

@ -42,7 +42,6 @@ import net.minecraft.world.phys.Vec3;
import java.util.*;
//todo Description
@ModuleInfo(id = "esp", displayName = "ESP", aliases = {"wallhack", "wh", "outline"}, category = ModuleCategory.VISUALS)
public class ESP extends Module {

View file

@ -23,7 +23,6 @@ import dev.loki.lovisual.render.helpers.clip.ScreenProjection;
import java.util.ArrayList;
import java.util.List;
//todo Description
@ModuleInfo(id = "soundesp", displayName = "SoundESP", category = ModuleCategory.VISUALS)
public class SoundESP extends Module {
private static final String SETTING_NAME_MODE = "name_mode";

View file

@ -32,7 +32,6 @@ import dev.loki.lovisual.util.item.food.IllegalItemUtil;
import dev.loki.lovisual.util.item.rarity.RarityColorUtil;
import dev.loki.lovisual.util.item.enchant.TopEnchantUtil;
//todo Description
@ModuleInfo(id = "dropesp", displayName = "DropESP", category = ModuleCategory.VISUALS)
public class DropESP extends Module {

View file

@ -21,7 +21,6 @@ import dev.loki.lovisual.render.engine.renderer.FullScreenRenderer;
import dev.loki.lovisual.render.engine.uniform.impl.post.MotionBlurUniforms;
import dev.loki.lovisual.util.logging.DebugLog;
//todo Description
@ModuleInfo(
id = "motionblur",
displayName = "MotionBlur",

View file

@ -16,7 +16,6 @@ import dev.loki.lovisual.render.engine.postprocess.post.PostProcessPass;
import dev.loki.lovisual.render.engine.renderer.FullScreenRenderer;
import dev.loki.lovisual.render.engine.uniform.impl.post.PostFXUniforms;
//todo Description
@ModuleInfo(id = "postfx", displayName = "PostFX", category = ModuleCategory.VISUALS)
public class PostFX extends Module implements PostProcessPass {

View file

@ -15,7 +15,6 @@ import dev.loki.lovisual.render.engine.postprocess.post.PostProcessPass;
import dev.loki.lovisual.render.engine.renderer.FullScreenRenderer;
import dev.loki.lovisual.render.engine.uniform.impl.world.HeatUniforms;
//todo Description
@ModuleInfo(id = "totemfx", displayName = "TotemFX", category = ModuleCategory.VISUALS)
public class TotemFX extends Module implements PostProcessPass {

View file

@ -18,7 +18,6 @@ import net.minecraft.util.Mth;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.phys.Vec3;
//todo Description
@ModuleInfo(id = "backsword", displayName = "BackSword", category = ModuleCategory.VISUALS)
public class BackSword extends Module {

View file

@ -28,8 +28,6 @@ import net.minecraft.world.item.ItemStack;
import java.util.*;
//todo Description
@ModuleInfo(id = "nametags", displayName = "NameTags", aliases = {"nametag", "tags", "names"}, category = ModuleCategory.VISUALS)
public class NameTags extends Module {

View file

@ -8,7 +8,6 @@ import dev.loki.lovisual.features.module.core.Module;
import dev.loki.lovisual.features.module.core.ModuleCategory;
import dev.loki.lovisual.features.module.core.ModuleInfo;
//todo Description
@ModuleInfo(
id = "fullbright",
displayName = "FullBright",

View file

@ -19,7 +19,6 @@ import dev.loki.lovisual.features.module.core.ModuleInfo;
import dev.loki.lovisual.features.module.phase.WorldPhase;
import dev.loki.lovisual.render.engine.renderer.Renderer3D;
//todo Description
@ModuleInfo(
id = "blockhighlight",
displayName = "BlockHighlight",

View file

@ -18,7 +18,6 @@ import dev.loki.lovisual.features.module.core.ModuleInfo;
import java.util.Optional;
//todo Description
@ModuleInfo(
id = "norender",
displayName = "NoRender",

View file

@ -30,7 +30,6 @@ import dev.loki.lovisual.render.engine.RenderState;
import java.time.LocalTime;
import java.util.LinkedHashMap;
//todo Description
@ModuleInfo(id = "worldtweaks", displayName = "WorldTweaks", category = ModuleCategory.VISUALS)
public class WorldTweaks extends Module {
@ -217,7 +216,6 @@ public class WorldTweaks extends Module {
return isEnabled() && changeTime.get();
}
public int getTimeOfDayTicks() {
if (syncSystemTime.get()) {
return getSystemTimeTicks();

View file

@ -13,7 +13,6 @@ import dev.loki.lovisual.render.engine.postprocess.render.SkyShaderStarryRendere
import dev.loki.lovisual.render.engine.renderer.Renderer3D;
import net.minecraft.client.Minecraft;
//todo Description
@ModuleInfo(id = "shadersky", displayName = "ShaderSky", category = ModuleCategory.VISUALS)
public class ShaderSky extends Module {

View file

@ -11,8 +11,6 @@ import net.minecraft.world.effect.MobEffect;
import net.minecraft.world.effect.MobEffectInstance;
import net.minecraft.world.effect.MobEffects;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.ai.attributes.Attribute;
import net.minecraft.world.entity.ai.attributes.Attributes;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
@ -60,13 +58,6 @@ public abstract class LivingEntityMixin {
@Shadow
protected abstract float getJumpPower();
@Inject(method = "getAttributeValue", at = @At("RETURN"))
private void lovisual$noStunSlownessMovementSpeed(Holder<Attribute> attribute, CallbackInfoReturnable<Double> cir) {
if (!attribute.equals(Attributes.MOVEMENT_SPEED)) return;
return;
}
/**
* Optional local cooldown synthesis for servers that lock consumables without sending vanilla cooldown packets.
* This never cancels item use; it only starts a visible local timer when explicitly configured.
@ -165,14 +156,6 @@ public abstract class LivingEntityMixin {
return Math.max(serverDelta, 0.0f);
}
/**
* Local totem cooldowns are handled from the confirmed entity-status packet when explicitly configured.
*/
@Inject(method = "checkTotemDeathProtection", at = @At("RETURN"))
private void lovisual$onTotemUse(DamageSource source, CallbackInfoReturnable<Boolean> cir) {
// no local use blocking or prediction here
}
/**
* Сброс кулдаунов при смерти.
*/
@ -208,11 +191,6 @@ public abstract class LivingEntityMixin {
}
}
@Inject(method = "aiStep", at = @At("HEAD"))
private void preventCrash(CallbackInfo ci) {
// ElytraFly module removed; no crash-prevention override remains.
}
@ModifyExpressionValue(
method = "updateFallFlyingMovement",
at = @At(
@ -367,13 +345,4 @@ public abstract class LivingEntityMixin {
|| eff == MobEffects.NAUSEA.value();
}
@Inject(
method = "getBlockSpeedFactor",
at = @At("RETURN"),
cancellable = true
)
private void nostun$soulSandVelocity(CallbackInfoReturnable<Float> cir) {
// NoStun module removed; no velocity override remains.
}
}

View file

@ -10,10 +10,9 @@ import dev.loki.lovisual.util.aiming.rotation.RotationManager;
import dev.loki.lovisual.util.aiming.rotation.RotationUtil;
import dev.loki.lovisual.util.aiming.data.Rotation;
import dev.loki.lovisual.util.aiming.features.MovementCorrection;
import dev.loki.lovisual.mixins.input.mouse.InputMixin;
@Mixin(KeyboardInput.class)
public abstract class KeyboardInputMixin extends InputMixin {
public abstract class KeyboardInputMixin {
@ModifyExpressionValue(
method = "tick",

View file

@ -1,16 +0,0 @@
package dev.loki.lovisual.mixins.input.mouse;
import net.minecraft.client.player.ClientInput;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
@Mixin(ClientInput.class)
public abstract class InputMixin {
@Inject(method = "hasForwardImpulse", at = @At("HEAD"), cancellable = true)
private void allowAllDirections(CallbackInfoReturnable<Boolean> cir) {
// Sprint module removed; keep vanilla forward impulse check.
}
}

View file

@ -84,16 +84,6 @@ public class MultiPlayerGameModeMixin {
cooldowns.tryStartLocalCooldown(stack.getItem(), ItemCooldownRulesValue.Trigger.INTERACT_ACCEPT);
}
@Inject(method = "useItemOn", at = @At("HEAD"))
private void onInteractBlockHead(LocalPlayer player, InteractionHand hand, BlockHitResult hit, CallbackInfoReturnable<InteractionResult> cir) {
// no PvP cooldown block on interactBlock
}
@Inject(method = "useItemOn", at = @At("RETURN"))
private void onInteractBlockReturn(LocalPlayer player, InteractionHand hand, BlockHitResult hit, CallbackInfoReturnable<InteractionResult> cir) {
// no PvP cooldown prediction on interactBlock
}
@Inject(method = "useItemOn", at = @At("HEAD"), cancellable = true)
private void freecam$block(LocalPlayer player, InteractionHand hand, BlockHitResult hit,
CallbackInfoReturnable<InteractionResult> cir) {

View file

@ -39,8 +39,6 @@ import dev.loki.lovisual.render.helpers.util.TickDelta;
import dev.loki.lovisual.util.combat.tracking.AntiBotTracker;
import dev.loki.lovisual.util.session.SessionChanger;
import dev.loki.lovisual.util.session.MinecraftGameConfigHolder;
import dev.loki.lovisual.features.module.modules.combat.pvp.PvpCooldowns;
import dev.loki.lovisual.features.module.modules.combat.pvp.SpearAssist;
@Mixin(Minecraft.class)
public class MinecraftMixin implements MinecraftGameConfigHolder {
@ -118,16 +116,6 @@ public class MinecraftMixin implements MinecraftGameConfigHolder {
// === КУРСОР ДЛЯ CLICKGUI ===
@Inject(method = "continueAttack", at = @At("HEAD"), cancellable = true)
private void onHandleBlockBreaking(boolean breaking, CallbackInfo ci) {
// AutoAttack / Hitbox modules removed; no block-breaking override remains.
}
@Inject(method = "startAttack", at = @At("HEAD"), cancellable = true)
private void onDoAttack(CallbackInfoReturnable<Boolean> cir) {
// AttributeSwap / AutoAttack modules removed; no attack override remains.
}
@Inject(method = "disconnect(Lnet/minecraft/client/gui/screens/Screen;ZZ)V", at = @At("HEAD"))
private void lovisual$betterChat$saveOnDisconnect(net.minecraft.client.gui.screens.Screen screen, boolean transferring, boolean bl, CallbackInfo ci) {
lovisual$guardSingleplayerSaveWithAltUsername();
@ -319,11 +307,6 @@ public class MinecraftMixin implements MinecraftGameConfigHolder {
return Mth.clamp(base * 2, 120, 360);
}
@Inject(method = "getTickTargetMillis", at = @At("RETURN"), cancellable = true)
private void lovisual$applyTimer(float millis, CallbackInfoReturnable<Float> cir) {
// Timer module removed; tick speed remains unchanged.
}
@Inject(method = "isLevelRunningNormally", at = @At("HEAD"), cancellable = true)
private void lovisual$skipPlayerDependentTicksWithoutPlayer(CallbackInfoReturnable<Boolean> cir) {
Minecraft mc = Minecraft.getInstance();

View file

@ -124,7 +124,6 @@
"input.keyboard.KeyMappingMixin",
"input.keyboard.KeyboardInputMixin",
"input.keyboard.KeyboardMixin",
"input.mouse.InputMixin",
"input.mouse.MouseMixin",
"input.spatialgui.MouseHandlerSpatialGuiMixin",
"iris.hand.IrisHandRendererAccessor",