mirror of
https://github.com/AutismDevelopment/Autism-Client.git
synced 2026-10-28 19:39:48 +00:00
242 lines
12 KiB
Java
242 lines
12 KiB
Java
package autismclient;
|
|
|
|
import autismclient.gui.vanillaui.components.UiText;
|
|
import autismclient.modules.PackAutoReconnectState;
|
|
import autismclient.modules.AutismModule;
|
|
import autismclient.render.AutismFemaleBodyRenderer;
|
|
import autismclient.security.AutismItemNbtSanity;
|
|
import autismclient.security.AutismProtector;
|
|
import autismclient.security.AutismProtectorPackStrip;
|
|
import autismclient.security.AutismProtectorServerPackFailureGuard;
|
|
import autismclient.security.AutismProtectorTracker;
|
|
import autismclient.security.AutismProtectorVanillaKeys;
|
|
import autismclient.util.AutismInstaBreakRenderer;
|
|
import autismclient.util.AutismFakeGamemode;
|
|
import autismclient.util.AutismJoinMacroController;
|
|
import autismclient.util.AutismLANSync;
|
|
import autismclient.util.AutismOverlayManager;
|
|
import autismclient.util.AutismSvgHudLogo;
|
|
import autismclient.util.AutismWindowBranding;
|
|
import autismclient.util.AutismSharedState;
|
|
import net.fabricmc.api.ClientModInitializer;
|
|
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents;
|
|
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
|
|
import net.fabricmc.fabric.api.client.item.v1.ItemTooltipCallback;
|
|
import net.fabricmc.fabric.api.client.networking.v1.ClientConfigurationConnectionEvents;
|
|
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents;
|
|
import net.fabricmc.fabric.api.resource.ResourceManagerHelper;
|
|
import net.minecraft.server.packs.PackType;
|
|
|
|
public final class AutismClientMod implements ClientModInitializer {
|
|
|
|
private static void runSafe(String where, Runnable action) {
|
|
try {
|
|
action.run();
|
|
} catch (Throwable t) {
|
|
AutismClientAddon.LOG.warn("[Autism] client-event '{}' failed; isolated to protect the client", where, t);
|
|
}
|
|
}
|
|
|
|
private static final java.util.concurrent.ConcurrentHashMap<String, Long> LAST_TICK_ERROR_MS = new java.util.concurrent.ConcurrentHashMap<>();
|
|
|
|
private static void logTickError(String where, Throwable t) {
|
|
long now = System.currentTimeMillis();
|
|
Long last = LAST_TICK_ERROR_MS.get(where);
|
|
if (last != null && now - last < 5000L) return;
|
|
LAST_TICK_ERROR_MS.put(where, now);
|
|
AutismClientAddon.LOG.warn("[Autism] tick '{}' failed; isolated to protect the client", where, t);
|
|
}
|
|
|
|
@Override
|
|
@SuppressWarnings("deprecation")
|
|
public void onInitializeClient() {
|
|
AutismClientAddon.FOLDER.mkdirs();
|
|
|
|
runSafe("initialize", () -> AutismModule.get().initialize());
|
|
|
|
AutismProtectorTracker.bootstrap();
|
|
|
|
if (!AutismProtector.isOverlapExternalProtectorPresent()) {
|
|
AutismProtectorVanillaKeys.primeAsync();
|
|
}
|
|
if (AutismProtector.isFullExternalProtectorPresent()) {
|
|
AutismClientAddon.LOG.info(
|
|
"[AutismProtector] External protection mod detected; deferring all anti-fingerprint mixins to it.");
|
|
} else if (AutismProtector.isExploitPreventerPresent()) {
|
|
AutismClientAddon.LOG.info(
|
|
"[AutismProtector] ExploitPreventer detected; deferring overlapping protections while keeping brand/channel hiding active.");
|
|
} else {
|
|
AutismClientAddon.LOG.info(
|
|
"[AutismProtector] Built-in anti-fingerprint layer active.");
|
|
}
|
|
AutismInstaBreakRenderer.initialize();
|
|
autismclient.util.AutismFreecamHighlightRenderer.initialize();
|
|
autismclient.util.AutismSkeletonRenderer.initialize();
|
|
autismclient.util.AutismWorldHighlightRenderer.initialize();
|
|
autismclient.util.AutismScaffoldPlaceRenderer.initialize();
|
|
autismclient.util.AutismKillAuraRenderer.initialize();
|
|
|
|
autismclient.modules.HoleEspModule.initialize();
|
|
AutismFemaleBodyRenderer.initialize();
|
|
autismclient.commands.AutismCommands.init();
|
|
|
|
autismclient.addons.AddonManager.init();
|
|
|
|
ResourceManagerHelper.get(PackType.CLIENT_RESOURCES).registerReloadListener(new net.fabricmc.fabric.api.resource.SimpleSynchronousResourceReloadListener() {
|
|
@Override
|
|
public net.minecraft.resources.Identifier getFabricId() {
|
|
return net.minecraft.resources.Identifier.fromNamespaceAndPath("autismclient", "ui_assets");
|
|
}
|
|
|
|
@Override
|
|
public void onResourceManagerReload(net.minecraft.server.packs.resources.ResourceManager manager) {
|
|
UiText.onClientResourceReload();
|
|
AutismSvgHudLogo.clear();
|
|
}
|
|
});
|
|
|
|
ClientTickEvents.END_CLIENT_TICK.register(client -> {
|
|
|
|
try {
|
|
if (autismclient.util.AutismBlockNbtCapture.hasTickWork()) {
|
|
autismclient.util.AutismBlockNbtCapture.tick(client);
|
|
}
|
|
} catch (Throwable t) {
|
|
logTickError("blockNbtCapture", t);
|
|
}
|
|
try {
|
|
autismclient.modules.ScaffoldModule.endMovementTick();
|
|
} catch (Throwable t) {
|
|
logTickError("scaffoldEndClick", t);
|
|
}
|
|
try {
|
|
AutismWindowBranding.apply(client);
|
|
} catch (Throwable ignored) { }
|
|
try {
|
|
autismclient.security.AutismPackResponseScheduler.tick();
|
|
} catch (Throwable t) {
|
|
logTickError("packResponses", t);
|
|
}
|
|
try {
|
|
AutismModule.get().tick();
|
|
} catch (Throwable t) {
|
|
logTickError("module", t);
|
|
}
|
|
try {
|
|
|
|
autismclient.modules.ModuleOreSim.tickRetention();
|
|
} catch (Throwable t) {
|
|
logTickError("oreSimRetention", t);
|
|
}
|
|
try {
|
|
autismclient.util.multi.PacketTeleportController.tick(client);
|
|
} catch (Throwable t) {
|
|
logTickError("pacedTp", t);
|
|
}
|
|
try {
|
|
AutismJoinMacroController.onClientTick(client);
|
|
} catch (Throwable t) {
|
|
logTickError("joinMacro", t);
|
|
}
|
|
try {
|
|
autismclient.util.AutismLagWatchdog.onClientTick(client);
|
|
} catch (Throwable t) {
|
|
logTickError("lagWatchdog", t);
|
|
}
|
|
try {
|
|
|
|
if (!autismclient.util.AutismLiteVariant.enabled()) {
|
|
autismclient.util.multi.MultiTakeoverState.tick();
|
|
}
|
|
} catch (Throwable t) {
|
|
logTickError("multiTakeover", t);
|
|
}
|
|
try {
|
|
autismclient.util.AutismRemoteView.tick();
|
|
} catch (Throwable t) {
|
|
logTickError("remoteView", t);
|
|
}
|
|
try {
|
|
|
|
if (!autismclient.util.AutismLiteVariant.enabled()
|
|
&& autismclient.util.AutismDiscordLogin.hasSession() && autismclient.util.mm.MmPrefs.get().autoJoinPublic())
|
|
autismclient.util.mm.MatchmakingManager.get().autoJoinNudge();
|
|
} catch (Throwable t) {
|
|
logTickError("mmAutoJoin", t);
|
|
}
|
|
});
|
|
ClientTickEvents.END_LEVEL_TICK.register(level ->
|
|
runSafe("lan.levelTick", () -> AutismLANSync.getInstance().onLevelTick(level.getGameTime())));
|
|
ClientConfigurationConnectionEvents.INIT.register((listener, client) -> {
|
|
runSafe("cfg.hideMenuOverlays", () -> AutismModule.get().hideMenuOverlays());
|
|
runSafe("cfg.configStarted", () -> AutismModule.get().onConfigurationConnectionStarted());
|
|
runSafe("cfg.joinMacro", () -> AutismJoinMacroController.onConfigurationInit(listener));
|
|
});
|
|
ClientConfigurationConnectionEvents.DISCONNECT.register((listener, client) -> {
|
|
runSafe("cfg.remoteView", () -> autismclient.util.AutismRemoteView.stop(false));
|
|
runSafe("cfg.persist", autismclient.util.AutismConfig::enqueuePendingSaveNow);
|
|
runSafe("cfg.pacedTp", () -> autismclient.util.multi.PacketTeleportController.cancelAll("connection changed"));
|
|
runSafe("cfg.fakeGamemode", AutismFakeGamemode::clear);
|
|
runSafe("cfg.instaBreak", AutismInstaBreakRenderer::clear);
|
|
runSafe("cfg.packFailureGuard", AutismProtectorServerPackFailureGuard::clear);
|
|
runSafe("cfg.packResponses", autismclient.security.AutismPackResponseScheduler::clearAll);
|
|
runSafe("cfg.hideOverlays", () -> AutismOverlayManager.get().hideAllInteractiveOverlays());
|
|
runSafe("cfg.onGameLeft", () -> AutismModule.get().onGameLeft());
|
|
runSafe("cfg.joinMacro", AutismJoinMacroController::onConfigurationDisconnect);
|
|
});
|
|
ClientPlayConnectionEvents.JOIN.register((handler, sender, client) -> {
|
|
runSafe("join.pacedTp", () -> autismclient.util.multi.PacketTeleportController.cancelAll("connection changed"));
|
|
|
|
runSafe("join.movementGrace", autismclient.modules.AutismJoinGrace::onJoin);
|
|
runSafe("join.hideMenuOverlays", () -> AutismModule.get().hideMenuOverlays());
|
|
runSafe("join.remember", () -> PackAutoReconnectState.remember(client.getCurrentServer()));
|
|
runSafe("join.onGameJoin", () -> AutismModule.get().onGameJoin());
|
|
runSafe("join.joinMacro", AutismJoinMacroController::onPlayJoin);
|
|
runSafe("join.surfaceFailures", autismclient.addons.AddonManager::surfaceFailuresOnJoin);
|
|
runSafe("join.lagWatchdog", autismclient.util.AutismLagWatchdog::reset);
|
|
runSafe("join.macroEditor", autismclient.util.AutismMacroEditorOverlay::onPlayJoin);
|
|
});
|
|
ClientPlayConnectionEvents.DISCONNECT.register((handler, client) -> {
|
|
runSafe("leave.remoteView", () -> autismclient.util.AutismRemoteView.stop(false));
|
|
runSafe("leave.persist", autismclient.util.AutismConfig::enqueuePendingSaveNow);
|
|
runSafe("leave.stopMacro", () -> {
|
|
if (autismclient.util.AutismConfig.getGlobal().stopMacroOnLeave) autismclient.util.macro.MacroExecutor.stop();
|
|
});
|
|
runSafe("leave.pacedTp", () -> autismclient.util.multi.PacketTeleportController.cancelAll("disconnected"));
|
|
runSafe("leave.movementGrace", autismclient.modules.AutismJoinGrace::clear);
|
|
runSafe("leave.fakeGamemode", AutismFakeGamemode::clear);
|
|
runSafe("leave.instaBreak", AutismInstaBreakRenderer::clear);
|
|
runSafe("leave.packStrip", AutismProtectorPackStrip::clearAll);
|
|
runSafe("leave.packResponses", autismclient.security.AutismPackResponseScheduler::clearAll);
|
|
runSafe("leave.packFailureGuard", AutismProtectorServerPackFailureGuard::clear);
|
|
runSafe("leave.macroEditor", autismclient.util.AutismMacroEditorOverlay::onPlayDisconnect);
|
|
runSafe("leave.lanSync", () -> AutismLANSync.getInstance().onGameDisconnected());
|
|
runSafe("leave.hideOverlays", () -> AutismOverlayManager.get().hideAllInteractiveOverlays());
|
|
runSafe("leave.joinMacro", AutismJoinMacroController::onGameLeft);
|
|
runSafe("leave.onGameLeft", () -> AutismModule.get().onGameLeft());
|
|
runSafe("leave.lagWatchdog", autismclient.util.AutismLagWatchdog::reset);
|
|
});
|
|
ItemTooltipCallback.EVENT.register((stack, tooltipContext, tooltipType, lines) -> {
|
|
|
|
AutismItemNbtSanity.scrubUnsafeTooltipLines(lines);
|
|
AutismItemNbtSanity.trimTooltipLines(lines);
|
|
AutismModule.get().appendTooltip(stack, lines);
|
|
});
|
|
|
|
ClientLifecycleEvents.CLIENT_STOPPING.register(client -> {
|
|
|
|
if (!autismclient.util.AutismLiteVariant.enabled()) {
|
|
autismclient.util.mm.MatchmakingManager.get().shutdownLeave();
|
|
}
|
|
|
|
autismclient.util.AutismConfig.flushPendingSaves(2000L);
|
|
});
|
|
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
|
|
|
|
if (!autismclient.util.AutismLiteVariant.enabled()) {
|
|
autismclient.util.mm.MatchmakingManager.get().shutdownLeave();
|
|
}
|
|
autismclient.util.AutismConfig.flushPendingSaves(2000L);
|
|
}, "mm-shutdown-leave"));
|
|
}
|
|
}
|