Rebrand client as GEC Client
Refresh the launcher, HUD, metadata, and user-facing branding while preserving internal IDs. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
12
CREDITS.md
|
|
@ -1,33 +1,33 @@
|
||||||
# Credits
|
# Credits
|
||||||
|
|
||||||
AUTISM Client includes original code written for this project, but it also uses, references, or derives ideas/code from other open-source Minecraft client projects.
|
GEC Client includes original code written for this project, but it also uses, references, or derives ideas/code from other open-source Minecraft client projects.
|
||||||
|
|
||||||
Huge credit to the following developers and projects:
|
Huge credit to the following developers and projects:
|
||||||
|
|
||||||
## OpSec by aurickk
|
## OpSec by aurickk
|
||||||
|
|
||||||
Parts of AUTISM Client related to client privacy, mod detection protection, compatibility handling, and anti-fingerprinting behavior are inspired by or derived from OpSec.
|
Parts of GEC Client related to client privacy, mod detection protection, compatibility handling, and anti-fingerprinting behavior are inspired by or derived from OpSec.
|
||||||
|
|
||||||
Project: https://github.com/aurickk/OpSec
|
Project: https://github.com/aurickk/OpSec
|
||||||
License: GPL-3.0
|
License: GPL-3.0
|
||||||
|
|
||||||
## Meteor Client
|
## Meteor Client
|
||||||
|
|
||||||
AUTISM Client uses ideas, structure, APIs, or source-code references from Meteor Client, especially around Fabric client architecture, modules, utilities, and client-side systems.
|
GEC Client uses ideas, structure, APIs, or source-code references from Meteor Client, especially around Fabric client architecture, modules, utilities, and client-side systems.
|
||||||
|
|
||||||
Project: https://github.com/MeteorDevelopment/meteor-client
|
Project: https://github.com/MeteorDevelopment/meteor-client
|
||||||
License: GPL-3.0
|
License: GPL-3.0
|
||||||
|
|
||||||
## Wurst Client
|
## Wurst Client
|
||||||
|
|
||||||
AUTISM Client uses ideas, references, or code patterns from Wurst Client, one of the long-running open-source Minecraft utility clients.
|
GEC Client uses ideas, references, or code patterns from Wurst Client, one of the long-running open-source Minecraft utility clients.
|
||||||
|
|
||||||
Project: https://github.com/Wurst-Imperium/Wurst7
|
Project: https://github.com/Wurst-Imperium/Wurst7
|
||||||
License: GPL-3.0
|
License: GPL-3.0
|
||||||
|
|
||||||
## ExploitPreventer by NikOverflow
|
## ExploitPreventer by NikOverflow
|
||||||
|
|
||||||
AUTISM Client uses ideas, references, or derived logic from ExploitPreventer for protection against known client-side exploits.
|
GEC Client uses ideas, references, or derived logic from ExploitPreventer for protection against known client-side exploits.
|
||||||
|
|
||||||
Project: https://github.com/NikOverflow/ExploitPreventer
|
Project: https://github.com/NikOverflow/ExploitPreventer
|
||||||
License: MIT
|
License: MIT
|
||||||
|
|
@ -40,7 +40,7 @@ Project: https://github.com/bestluaucoder/Autism-Better-Storage-esp-1-addon/tree
|
||||||
|
|
||||||
## License Notice
|
## License Notice
|
||||||
|
|
||||||
Because AUTISM Client uses and/or derives from GPL-licensed projects, AUTISM Client is released under the GNU General Public License v3.0.
|
Because GEC Client uses and/or derives from GPL-licensed projects, GEC Client is released under the GNU General Public License v3.0.
|
||||||
|
|
||||||
Source code must stay available to users, and any redistributed modified versions must follow the same GPL-3.0 license terms.
|
Source code must stay available to users, and any redistributed modified versions must follow the same GPL-3.0 license terms.
|
||||||
|
|
||||||
|
|
|
||||||
22
README.md
|
|
@ -1,14 +1,14 @@
|
||||||
# AUTISM Client
|
# GEC Client
|
||||||
|
|
||||||
AUTISM Client is the best Duping/Debugging client built for people who actually want control over what actions server recieves.
|
GEC Client is an advanced Minecraft client built for players who want precise control over modules, macros, visual customization, and addon support.
|
||||||
|
|
||||||
It is not trying to be a bloated all-in-one mess with 400 random buttons nobody uses. The point is simple: useful modules, a strong macro system, clean addon support, and tools that make testing, automation, and server interaction less painful.
|
Its focus is a fast, cohesive experience: useful modules, a flexible macro system, clean addon support, and tools that make testing and automation easier.
|
||||||
|
|
||||||
This client is built around speed, control, and not pretending that users are too stupid to touch advanced features.
|
The interface pairs a compact, animated main menu with configurable colors and detailed controls, while keeping advanced features accessible.
|
||||||
|
|
||||||
## What It Includes
|
## What It Includes
|
||||||
|
|
||||||
AUTISM Client includes the normal client stuff you would expect, but the main focus is on systems that are actually useful.
|
GEC Client includes the expected client features, with a focus on systems that are genuinely useful.
|
||||||
|
|
||||||
Main features include:
|
Main features include:
|
||||||
|
|
||||||
|
|
@ -32,34 +32,34 @@ The client is made to be expandable. If the base client is not enough, addons ca
|
||||||
|
|
||||||
# Credits
|
# Credits
|
||||||
|
|
||||||
AUTISM Client includes original code written for this project, but it also uses, references, or derives ideas/code from other open-source Minecraft client projects.
|
GEC Client includes original code written for this project, but it also uses, references, or derives ideas/code from other open-source Minecraft client projects.
|
||||||
|
|
||||||
Huge credit to the following developers and projects:
|
Huge credit to the following developers and projects:
|
||||||
|
|
||||||
## OpSec by aurickk
|
## OpSec by aurickk
|
||||||
|
|
||||||
Parts of AUTISM Client related to client privacy, mod detection protection, compatibility handling, and anti-fingerprinting behavior are inspired by or derived from OpSec.
|
Parts of GEC Client related to client privacy, mod detection protection, compatibility handling, and anti-fingerprinting behavior are inspired by or derived from OpSec.
|
||||||
|
|
||||||
Project: https://github.com/aurickk/OpSec
|
Project: https://github.com/aurickk/OpSec
|
||||||
License: GPL-3.0
|
License: GPL-3.0
|
||||||
|
|
||||||
## Meteor Client
|
## Meteor Client
|
||||||
|
|
||||||
AUTISM Client uses ideas, structure, APIs, or source-code references from Meteor Client, especially around Fabric client architecture, modules, utilities, and client-side systems.
|
GEC Client uses ideas, structure, APIs, or source-code references from Meteor Client, especially around Fabric client architecture, modules, utilities, and client-side systems.
|
||||||
|
|
||||||
Project: https://github.com/MeteorDevelopment/meteor-client
|
Project: https://github.com/MeteorDevelopment/meteor-client
|
||||||
License: GPL-3.0
|
License: GPL-3.0
|
||||||
|
|
||||||
## Wurst Client
|
## Wurst Client
|
||||||
|
|
||||||
AUTISM Client uses ideas, references, or code patterns from Wurst Client, one of the long-running open-source Minecraft utility clients.
|
GEC Client uses ideas, references, or code patterns from Wurst Client, one of the long-running open-source Minecraft utility clients.
|
||||||
|
|
||||||
Project: https://github.com/Wurst-Imperium/Wurst7
|
Project: https://github.com/Wurst-Imperium/Wurst7
|
||||||
License: GPL-3.0
|
License: GPL-3.0
|
||||||
|
|
||||||
## ExploitPreventer by NikOverflow
|
## ExploitPreventer by NikOverflow
|
||||||
|
|
||||||
AUTISM Client uses ideas, references, or derived logic from ExploitPreventer for protection against known client-side exploits.
|
GEC Client uses ideas, references, or derived logic from ExploitPreventer for protection against known client-side exploits.
|
||||||
|
|
||||||
Project: https://github.com/NikOverflow/ExploitPreventer
|
Project: https://github.com/NikOverflow/ExploitPreventer
|
||||||
License: MIT
|
License: MIT
|
||||||
|
|
@ -78,7 +78,7 @@ Project: https://github.com/bestluaucoder/Autism-Better-Storage-esp-1-addon/tree
|
||||||
|
|
||||||
## License Notice
|
## License Notice
|
||||||
|
|
||||||
Because AUTISM Client uses and/or derives from GPL-licensed projects, AUTISM Client is released under the GNU General Public License v3.0.
|
Because GEC Client uses and/or derives from GPL-licensed projects, GEC Client is released under the GNU General Public License v3.0.
|
||||||
|
|
||||||
Source code must stay available to users, and any redistributed modified versions must follow the same GPL-3.0 license terms.
|
Source code must stay available to users, and any redistributed modified versions must follow the same GPL-3.0 license terms.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -779,7 +779,7 @@ tasks.register("buildAllTemplates") {
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
// LITE variant: turns the FINAL release jar (post guardian weaving) into the stripped-down
|
// LITE variant: turns the FINAL release jar (post guardian weaving) into the stripped-down
|
||||||
// "AUTISM Client Lite" build in four stages, with no recompilation so the jars can never drift.
|
// "GEC Client Lite" build in four stages, with no recompilation so the jars can never drift.
|
||||||
// The pipeline uses NO ProGuard and NO obfuscation tooling of any kind - every stage is our own
|
// The pipeline uses NO ProGuard and NO obfuscation tooling of any kind - every stage is our own
|
||||||
// code (ASM for bytecode surgery, plain zip + constant-pool analysis for shrinking):
|
// code (ASM for bytecode surgery, plain zip + constant-pool analysis for shrinking):
|
||||||
// litePatchVariant - copies the full jar, patches AutismLiteVariant.ENABLED to a compile-time
|
// litePatchVariant - copies the full jar, patches AutismLiteVariant.ENABLED to a compile-time
|
||||||
|
|
@ -2119,7 +2119,7 @@ tasks.register("verifyLiteJar") {
|
||||||
}
|
}
|
||||||
|
|
||||||
val fabricJson = entryText("fabric.mod.json")
|
val fabricJson = entryText("fabric.mod.json")
|
||||||
if (!fabricJson.contains("\"name\":\"AUTISM Client\"")) {
|
if (!fabricJson.contains("\"name\":\"GEC Client\"")) {
|
||||||
fail("fabric.mod.json name drifted - the game title/icon must not change in lite")
|
fail("fabric.mod.json name drifted - the game title/icon must not change in lite")
|
||||||
}
|
}
|
||||||
if (fabricJson.contains("AutismModMenuIntegration")) {
|
if (fabricJson.contains("AutismModMenuIntegration")) {
|
||||||
|
|
|
||||||
|
|
@ -6,4 +6,4 @@ org.gradle.configuration-cache=false
|
||||||
org.gradle.daemon=false
|
org.gradle.daemon=false
|
||||||
|
|
||||||
maven_group=com.autismclient
|
maven_group=com.autismclient
|
||||||
archives_base_name=AUTISM Client
|
archives_base_name=GEC Client
|
||||||
|
|
|
||||||
|
|
@ -53,7 +53,7 @@ public final class AddonManager {
|
||||||
String modId = mod.getMetadata().getId();
|
String modId = mod.getMetadata().getId();
|
||||||
AddonReport report = ensureReport(mod.getMetadata());
|
AddonReport report = ensureReport(mod.getMetadata());
|
||||||
if (isDisabledOnRestart(modId)) {
|
if (isDisabledOnRestart(modId)) {
|
||||||
report.markDisabled("Disabled in AUTISM config. Enable it and restart to load.");
|
report.markDisabled("Disabled in GEC Client config. Enable it and restart to load.");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -124,7 +124,7 @@ public final class AddonManager {
|
||||||
for (String id : config.disabledAddonIds) {
|
for (String id : config.disabledAddonIds) {
|
||||||
if (id == null || id.isBlank() || REPORTS.containsKey(id)) continue;
|
if (id == null || id.isBlank() || REPORTS.containsKey(id)) continue;
|
||||||
AddonReport report = new AddonReport(id.trim(), id.trim(), "", "", 0xFFAA66FF);
|
AddonReport report = new AddonReport(id.trim(), id.trim(), "", "", 0xFFAA66FF);
|
||||||
report.markDisabled("Disabled in AUTISM config, but no matching addon entrypoint was discovered.");
|
report.markDisabled("Disabled in GEC Client config, but no matching addon entrypoint was discovered.");
|
||||||
REPORTS.put(report.modId(), report);
|
REPORTS.put(report.modId(), report);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -263,7 +263,7 @@ public final class AutismCommands {
|
||||||
Command command = find(first);
|
Command command = find(first);
|
||||||
String prefix = effectivePrefix();
|
String prefix = effectivePrefix();
|
||||||
if (command == null) {
|
if (command == null) {
|
||||||
AutismClientMessaging.sendPrefixed("§cUnknown AUTISM command: §f" + first);
|
AutismClientMessaging.sendPrefixed("§cUnknown GEC command: §f" + first);
|
||||||
AutismClientMessaging.sendPrefixed("§7Use §f" + prefix + "commands §7or §f" + prefix + "help§7.");
|
AutismClientMessaging.sendPrefixed("§7Use §f" + prefix + "commands §7or §f" + prefix + "help§7.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ import com.mojang.brigadier.builder.RequiredArgumentBuilder;
|
||||||
|
|
||||||
public class PrefixCommand extends Command {
|
public class PrefixCommand extends Command {
|
||||||
public PrefixCommand() {
|
public PrefixCommand() {
|
||||||
super("prefix", "Change the AUTISM command prefix.");
|
super("prefix", "Change the GEC Client command prefix.");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -59,7 +59,7 @@ public class AutismModMenuConfigScreen extends Screen {
|
||||||
private record Hit(UiBounds bounds, Runnable onLeft, Runnable onRight) {}
|
private record Hit(UiBounds bounds, Runnable onLeft, Runnable onRight) {}
|
||||||
|
|
||||||
public AutismModMenuConfigScreen(Screen parent) {
|
public AutismModMenuConfigScreen(Screen parent) {
|
||||||
super(Component.literal("AUTISM Client Settings"));
|
super(Component.literal("GEC Client Settings"));
|
||||||
this.parent = parent;
|
this.parent = parent;
|
||||||
AutismConfig cfg = AutismConfig.getGlobal();
|
AutismConfig cfg = AutismConfig.getGlobal();
|
||||||
keybinds.add(new Keybind("Module Menu", () -> cfg.keybindModuleMenu, v -> { cfg.keybindModuleMenu = v; cfg.save(); }));
|
keybinds.add(new Keybind("Module Menu", () -> cfg.keybindModuleMenu, v -> { cfg.keybindModuleMenu = v; cfg.save(); }));
|
||||||
|
|
@ -98,7 +98,7 @@ public class AutismModMenuConfigScreen extends Screen {
|
||||||
|
|
||||||
UiBounds header = UiBounds.of(px, py, panelW, HEADER_H);
|
UiBounds header = UiBounds.of(px, py, panelW, HEADER_H);
|
||||||
UiRenderer.rect(graphics, UiBounds.of(px + 1, py + 1, panelW - 2, HEADER_H - 1), p(0x33241A1D, Channel.HEADER));
|
UiRenderer.rect(graphics, UiBounds.of(px + 1, py + 1, panelW - 2, HEADER_H - 1), p(0x33241A1D, Channel.HEADER));
|
||||||
drawCentered(graphics, "AUTISM Client Settings", UiAssets.FONT_TITLE, p(TEXT_COLOR, Channel.TEXT), header);
|
drawCentered(graphics, "GEC Client Settings", UiAssets.FONT_TITLE, p(TEXT_COLOR, Channel.TEXT), header);
|
||||||
|
|
||||||
UiBounds footer = UiBounds.of(px, panel.bottom() - FOOTER_H, panelW, FOOTER_H);
|
UiBounds footer = UiBounds.of(px, panel.bottom() - FOOTER_H, panelW, FOOTER_H);
|
||||||
UiBounds done = UiBounds.of(px + 8, footer.y() + 6, panelW - 16, ROW_H);
|
UiBounds done = UiBounds.of(px + 8, footer.y() + 6, panelW - 16, ROW_H);
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,7 @@ public class AutismMultiDisclaimerScreen extends Screen {
|
||||||
private static final String TITLE_TEXT = "[DISCLAIMER]";
|
private static final String TITLE_TEXT = "[DISCLAIMER]";
|
||||||
|
|
||||||
private static final String[] PARAGRAPHS = {
|
private static final String[] PARAGRAPHS = {
|
||||||
"AUTISM just provides the open-source software that lets you run more than one Minecraft account. That's all it does.",
|
"GEC Client provides the open-source software that lets you run more than one Minecraft account. That's all it does.",
|
||||||
"What you choose to do with it is not our concern, and not our responsibility.",
|
"What you choose to do with it is not our concern, and not our responsibility.",
|
||||||
"By clicking Agree, you take full responsibility for whatever you use this feature for.",
|
"By clicking Agree, you take full responsibility for whatever you use this feature for.",
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,6 @@ import net.minecraft.client.resources.sounds.SimpleSoundInstance;
|
||||||
import net.minecraft.network.chat.Component;
|
import net.minecraft.network.chat.Component;
|
||||||
import net.minecraft.resources.Identifier;
|
import net.minecraft.resources.Identifier;
|
||||||
import net.minecraft.sounds.SoundEvent;
|
import net.minecraft.sounds.SoundEvent;
|
||||||
import net.minecraft.util.ARGB;
|
|
||||||
import net.fabricmc.loader.api.FabricLoader;
|
import net.fabricmc.loader.api.FabricLoader;
|
||||||
|
|
||||||
import java.lang.reflect.Constructor;
|
import java.lang.reflect.Constructor;
|
||||||
|
|
@ -62,11 +61,10 @@ import java.util.Locale;
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
public class AutismTitleScreen extends Screen {
|
public class AutismTitleScreen extends Screen {
|
||||||
private static final Identifier LOGO = Identifier.fromNamespaceAndPath("autismclient", "textures/gui/title/autism_client_logo.png");
|
|
||||||
private static final Identifier BUTTON_CLICK_SOUND_ID = Identifier.fromNamespaceAndPath("autismclient", "gui.main_menu_click");
|
private static final Identifier BUTTON_CLICK_SOUND_ID = Identifier.fromNamespaceAndPath("autismclient", "gui.main_menu_click");
|
||||||
private static final SoundEvent BUTTON_CLICK_SOUND = SoundEvent.createVariableRangeEvent(BUTTON_CLICK_SOUND_ID);
|
private static final SoundEvent BUTTON_CLICK_SOUND = SoundEvent.createVariableRangeEvent(BUTTON_CLICK_SOUND_ID);
|
||||||
private static final int LOGO_TEXTURE_WIDTH = 516;
|
private static final int BRAND_CARD_WIDTH = 300;
|
||||||
private static final int LOGO_TEXTURE_HEIGHT = 144;
|
private static final int BRAND_CARD_HEIGHT = 72;
|
||||||
private static final Identifier TEXT_SINGLEPLAYER = buttonText("singleplayer");
|
private static final Identifier TEXT_SINGLEPLAYER = buttonText("singleplayer");
|
||||||
private static final Identifier TEXT_MULTIPLAYER = buttonText("multiplayer");
|
private static final Identifier TEXT_MULTIPLAYER = buttonText("multiplayer");
|
||||||
private static final Identifier TEXT_REALMS = buttonText("minecraft_realms");
|
private static final Identifier TEXT_REALMS = buttonText("minecraft_realms");
|
||||||
|
|
@ -326,8 +324,8 @@ public class AutismTitleScreen extends Screen {
|
||||||
int margin = 8;
|
int margin = 8;
|
||||||
|
|
||||||
cardW = Math.min(296, Math.max(180, screenW - margin * 2));
|
cardW = Math.min(296, Math.max(180, screenW - margin * 2));
|
||||||
cardH = Math.max(20, Math.round(LOGO_TEXTURE_HEIGHT
|
cardH = Math.max(52, Math.round(BRAND_CARD_HEIGHT
|
||||||
* Math.min(1.0f, (cardW - 16) / (float) LOGO_TEXTURE_WIDTH)));
|
* Math.min(1.0f, (cardW - 16) / (float) BRAND_CARD_WIDTH)));
|
||||||
int rowW = Math.min(cardW - 28, compact ? 220 : 240);
|
int rowW = Math.min(cardW - 28, compact ? 220 : 240);
|
||||||
int rowH = compact ? 18 : 22;
|
int rowH = compact ? 18 : 22;
|
||||||
int rowGap = compact ? 3 : 5;
|
int rowGap = compact ? 3 : 5;
|
||||||
|
|
@ -408,7 +406,7 @@ public class AutismTitleScreen extends Screen {
|
||||||
int supportRowGap = 3;
|
int supportRowGap = 3;
|
||||||
|
|
||||||
int supportIcon = Math.min(14, supportRowH - 6);
|
int supportIcon = Math.min(14, supportRowH - 6);
|
||||||
String[] supportLabels = {"Card/PayPal", "Crypto", "AUTISM INC", "AUTISM CLIENT"};
|
String[] supportLabels = {"Card/PayPal", "Crypto", "COMMUNITY", "GEC CLIENT"};
|
||||||
int supportTextW = 0;
|
int supportTextW = 0;
|
||||||
for (String label : supportLabels) {
|
for (String label : supportLabels) {
|
||||||
supportTextW = Math.max(supportTextW,
|
supportTextW = Math.max(supportTextW,
|
||||||
|
|
@ -630,13 +628,39 @@ public class AutismTitleScreen extends Screen {
|
||||||
float p = introProgress(0);
|
float p = introProgress(0);
|
||||||
if (p <= 0.0f) return;
|
if (p <= 0.0f) return;
|
||||||
|
|
||||||
float scale = Math.min(1.0f, (cardW - 16) / (float) LOGO_TEXTURE_WIDTH);
|
int y = cardY + introOffset(p);
|
||||||
int drawW = Math.max(1, Math.round(LOGO_TEXTURE_WIDTH * scale));
|
int accent = fade(theme.color(UiTone.ACCENT), p);
|
||||||
int drawH = Math.max(1, Math.round(LOGO_TEXTURE_HEIGHT * scale));
|
int text = fade(theme.color(UiTone.TITLE), p);
|
||||||
int logoX = UiSizing.centerInside(cardX, cardW, drawW);
|
boolean compact = cardH < 60;
|
||||||
int logoY = cardY + introOffset(p) + Math.max(0, (cardH - drawH) / 2);
|
UiRenderer.frame(graphics, UiBounds.of(cardX, y, cardW, cardH), fade(theme.windowFill(), p), fade(theme.borderSoft(), p));
|
||||||
graphics.blit(RenderPipelines.GUI_TEXTURED, AutismThemeTextures.recolored(LOGO, Channel.ACCENT), logoX, logoY, 0.0F, 0.0F, drawW, drawH,
|
UiRenderer.horizontalEdge(graphics, cardX + 1, y + 1, Math.min(18, cardW - 2), accent);
|
||||||
LOGO_TEXTURE_WIDTH, LOGO_TEXTURE_HEIGHT, LOGO_TEXTURE_WIDTH, LOGO_TEXTURE_HEIGHT, ARGB.white(p));
|
UiRenderer.verticalEdge(graphics, cardX + 1, y + 1, Math.min(18, cardH - 2), accent);
|
||||||
|
UiRenderer.horizontalEdge(graphics, cardX + cardW - Math.min(19, cardW - 1), y + 1,
|
||||||
|
Math.min(18, cardW - 2), accent);
|
||||||
|
UiRenderer.verticalEdge(graphics, cardX + cardW - 2, y + 1, Math.min(18, cardH - 2), accent);
|
||||||
|
|
||||||
|
String name = "GEC";
|
||||||
|
int nameWidth = UiText.width(this.font, name, UiAssets.FONT_TITLE, text);
|
||||||
|
UiText.draw(graphics, this.font, name, UiAssets.FONT_TITLE, text,
|
||||||
|
cardX + (cardW - nameWidth) / 2, y + (compact ? 6 : 10), false);
|
||||||
|
|
||||||
|
String label = "CLIENT";
|
||||||
|
int labelWidth = UiText.width(this.font, label, UiAssets.FONT_LABEL, accent);
|
||||||
|
int labelY = y + (compact ? 25 : 31);
|
||||||
|
int labelX = cardX + (cardW - labelWidth) / 2;
|
||||||
|
UiText.draw(graphics, this.font, label, UiAssets.FONT_LABEL, accent, labelX, labelY, false);
|
||||||
|
|
||||||
|
int ruleY = y + cardH - 12;
|
||||||
|
UiRenderer.horizontalEdge(graphics, cardX + 14, ruleY, cardW - 28, fade(theme.borderSoft(), p));
|
||||||
|
int sweepWidth = Math.min(24, cardW - 28);
|
||||||
|
int sweepTravel = Math.max(1, cardW - 28 - sweepWidth);
|
||||||
|
int sweepX = cardX + 14 + (int) Math.floorMod(System.nanoTime() / 12_000_000L, sweepTravel);
|
||||||
|
UiRenderer.horizontalEdge(graphics, sweepX, ruleY, sweepWidth, accent);
|
||||||
|
|
||||||
|
String caption = "ADVANCED CLIENT SYSTEMS";
|
||||||
|
int captionWidth = UiText.width(this.font, caption, UiAssets.FONT_BODY, fade(theme.color(UiTone.MUTED), p));
|
||||||
|
UiText.draw(graphics, this.font, caption, UiAssets.FONT_BODY, fade(theme.color(UiTone.MUTED), p),
|
||||||
|
cardX + (cardW - captionWidth) / 2, y + cardH - 9, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void renderSupportPanel(GuiGraphicsExtractor graphics) {
|
private void renderSupportPanel(GuiGraphicsExtractor graphics) {
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,6 @@ import net.minecraft.client.gui.GuiGraphicsExtractor;
|
||||||
import net.minecraft.client.gui.screens.Screen;
|
import net.minecraft.client.gui.screens.Screen;
|
||||||
import net.minecraft.client.gui.screens.TitleScreen;
|
import net.minecraft.client.gui.screens.TitleScreen;
|
||||||
import net.minecraft.client.input.MouseButtonEvent;
|
import net.minecraft.client.input.MouseButtonEvent;
|
||||||
import net.minecraft.client.renderer.RenderPipelines;
|
|
||||||
import net.minecraft.network.chat.Component;
|
import net.minecraft.network.chat.Component;
|
||||||
import net.minecraft.resources.Identifier;
|
import net.minecraft.resources.Identifier;
|
||||||
|
|
||||||
|
|
@ -34,11 +33,6 @@ public class AutismWelcomeScreen extends Screen {
|
||||||
private static final int CARD_FILL = 0xF20A0A0C;
|
private static final int CARD_FILL = 0xF20A0A0C;
|
||||||
private static final int CARD_BORDER = 0xFFFF4A4A;
|
private static final int CARD_BORDER = 0xFFFF4A4A;
|
||||||
private static final int DIVIDER_COLOR = 0x66FF4A4A;
|
private static final int DIVIDER_COLOR = 0x66FF4A4A;
|
||||||
private static final Identifier HUD_LOGO = Identifier.fromNamespaceAndPath("autismclient", "textures/gui/hud/autismclient_welcome.png");
|
|
||||||
private static final int HUD_LOGO_TEXTURE_WIDTH = 878;
|
|
||||||
private static final int HUD_LOGO_TEXTURE_HEIGHT = 83;
|
|
||||||
private static final int HUD_LOGO_DISPLAY_WIDTH = 878;
|
|
||||||
private static final int HUD_LOGO_DISPLAY_HEIGHT = 83;
|
|
||||||
private static final Identifier DONATE_SUPPORT_ICON = Identifier.fromNamespaceAndPath("autismclient", "textures/gui/title/icons/donate.png");
|
private static final Identifier DONATE_SUPPORT_ICON = Identifier.fromNamespaceAndPath("autismclient", "textures/gui/title/icons/donate.png");
|
||||||
private static final int SUPPORT_ICON_WIDTH = 32;
|
private static final int SUPPORT_ICON_WIDTH = 32;
|
||||||
private static final int SUPPORT_ICON_HEIGHT = 32;
|
private static final int SUPPORT_ICON_HEIGHT = 32;
|
||||||
|
|
@ -47,7 +41,7 @@ public class AutismWelcomeScreen extends Screen {
|
||||||
private static final String TITLE_TEXT = "Thanks for using";
|
private static final String TITLE_TEXT = "Thanks for using";
|
||||||
private static final String[][] SECTIONS = {
|
private static final String[][] SECTIONS = {
|
||||||
{"Donate",
|
{"Donate",
|
||||||
"If AUTISM Client has helped you or made Minecraft more fun, a donation is a kind way to support the time behind it."},
|
"If GEC Client has helped you or made Minecraft more fun, a donation is a kind way to support the time behind it."},
|
||||||
{"Choose Method",
|
{"Choose Method",
|
||||||
"Use Card or PayPal for the normal route, or Crypto if you want the direct one."},
|
"Use Card or PayPal for the normal route, or Crypto if you want the direct one."},
|
||||||
};
|
};
|
||||||
|
|
@ -121,11 +115,9 @@ public class AutismWelcomeScreen extends Screen {
|
||||||
int y = cardY + PAD + 2;
|
int y = cardY + PAD + 2;
|
||||||
drawCentered(graphics, TITLE_TEXT, FONT_TITLE, autismclient.util.AutismTheme.recolor(TITLE_COLOR, autismclient.util.AutismTheme.Channel.TEXT), x, innerW, y);
|
drawCentered(graphics, TITLE_TEXT, FONT_TITLE, autismclient.util.AutismTheme.recolor(TITLE_COLOR, autismclient.util.AutismTheme.Channel.TEXT), x, innerW, y);
|
||||||
y += UiText.fontHeight(FONT_TITLE) + 7;
|
y += UiText.fontHeight(FONT_TITLE) + 7;
|
||||||
int logoW = welcomeLogoWidth(innerW);
|
drawCentered(graphics, "GEC CLIENT", FONT_TITLE,
|
||||||
int logoH = welcomeLogoHeight(logoW);
|
autismclient.util.AutismTheme.recolor(HEADER_COLOR, autismclient.util.AutismTheme.Channel.ACCENT), x, innerW, y);
|
||||||
int logoX = x + (innerW - logoW) / 2;
|
int logoH = UiText.fontHeight(FONT_TITLE);
|
||||||
graphics.blit(RenderPipelines.GUI_TEXTURED, autismclient.util.AutismThemeTextures.recolored(HUD_LOGO, autismclient.util.AutismTheme.Channel.ACCENT), logoX, y, 0.0F, 0.0F, logoW, logoH,
|
|
||||||
HUD_LOGO_TEXTURE_WIDTH, HUD_LOGO_TEXTURE_HEIGHT, HUD_LOGO_TEXTURE_WIDTH, HUD_LOGO_TEXTURE_HEIGHT);
|
|
||||||
y += logoH + 9;
|
y += logoH + 9;
|
||||||
UiRenderer.rect(graphics, UiBounds.of(x, y, innerW, 1), autismclient.util.AutismTheme.recolor(DIVIDER_COLOR, autismclient.util.AutismTheme.Channel.OUTLINE));
|
UiRenderer.rect(graphics, UiBounds.of(x, y, innerW, 1), autismclient.util.AutismTheme.recolor(DIVIDER_COLOR, autismclient.util.AutismTheme.Channel.OUTLINE));
|
||||||
y += 8;
|
y += 8;
|
||||||
|
|
@ -185,8 +177,7 @@ public class AutismWelcomeScreen extends Screen {
|
||||||
int headerH = UiText.fontHeight(FONT_LABEL);
|
int headerH = UiText.fontHeight(FONT_LABEL);
|
||||||
int lineH = UiText.fontHeight(FONT_LABEL) + 3;
|
int lineH = UiText.fontHeight(FONT_LABEL) + 3;
|
||||||
|
|
||||||
int logoW = welcomeLogoWidth(innerW);
|
int h = PAD + UiText.fontHeight(FONT_TITLE) + 7 + UiText.fontHeight(FONT_TITLE) + 9 + 1 + 8;
|
||||||
int h = PAD + UiText.fontHeight(FONT_TITLE) + 7 + welcomeLogoHeight(logoW) + 9 + 1 + 8;
|
|
||||||
List<List<String>> linesBySection = wrappedSections(innerW);
|
List<List<String>> linesBySection = wrappedSections(innerW);
|
||||||
for (int i = 0; i < SECTIONS.length; i++) {
|
for (int i = 0; i < SECTIONS.length; i++) {
|
||||||
h += headerH + 3 + linesBySection.get(i).size() * lineH + 8;
|
h += headerH + 3 + linesBySection.get(i).size() * lineH + 8;
|
||||||
|
|
@ -250,14 +241,6 @@ public class AutismWelcomeScreen extends Screen {
|
||||||
UiText.draw(graphics, this.font, text, fontId, color, x + (width - textW) / 2, y, false);
|
UiText.draw(graphics, this.font, text, fontId, color, x + (width - textW) / 2, y, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int welcomeLogoWidth(int innerW) {
|
|
||||||
return Math.max(170, Math.min(innerW - 18, 286));
|
|
||||||
}
|
|
||||||
|
|
||||||
private static int welcomeLogoHeight(int width) {
|
|
||||||
return Math.max(1, Math.round(width * (HUD_LOGO_DISPLAY_HEIGHT / (float) HUD_LOGO_DISPLAY_WIDTH)));
|
|
||||||
}
|
|
||||||
|
|
||||||
private void renderButton(GuiGraphicsExtractor graphics, Btn btn, float mouseX, float mouseY, boolean enabled) {
|
private void renderButton(GuiGraphicsExtractor graphics, Btn btn, float mouseX, float mouseY, boolean enabled) {
|
||||||
boolean hovered = enabled && btn.contains(mouseX, mouseY);
|
boolean hovered = enabled && btn.contains(mouseX, mouseY);
|
||||||
UiContext ctx = UiContexts.overlay(graphics, this.font, (int) mouseX, (int) mouseY);
|
UiContext ctx = UiContexts.overlay(graphics, this.font, (int) mouseX, (int) mouseY);
|
||||||
|
|
|
||||||
|
|
@ -39,8 +39,8 @@ public abstract class AutismTitleScreenSupportMixin extends Screen {
|
||||||
|
|
||||||
autism$leftButton(Component.literal("Card/PayPal"), 4, AutismLinks.KOFI);
|
autism$leftButton(Component.literal("Card/PayPal"), 4, AutismLinks.KOFI);
|
||||||
autism$leftButton(Component.literal("Crypto"), 28, AutismLinks.CRYPTO_DONATE);
|
autism$leftButton(Component.literal("Crypto"), 28, AutismLinks.CRYPTO_DONATE);
|
||||||
autism$leftButton(Component.literal("AUTISM INC"), 52, AutismLinks.AUTISM_INC_DISCORD);
|
autism$leftButton(Component.literal("COMMUNITY"), 52, AutismLinks.AUTISM_INC_DISCORD);
|
||||||
autism$leftButton(Component.literal("AUTISM Client"), 76, AutismLinks.DISCORD);
|
autism$leftButton(Component.literal("GEC Client"), 76, AutismLinks.DISCORD);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Unique
|
@Unique
|
||||||
|
|
|
||||||
|
|
@ -166,7 +166,7 @@ public final class PackFreecamState {
|
||||||
private static net.minecraft.network.chat.Component speedMessage(double speed) {
|
private static net.minecraft.network.chat.Component speedMessage(double speed) {
|
||||||
return net.minecraft.network.chat.Component.empty()
|
return net.minecraft.network.chat.Component.empty()
|
||||||
.append(styled("[", autismclient.util.AutismColors.textMuted(), false))
|
.append(styled("[", autismclient.util.AutismColors.textMuted(), false))
|
||||||
.append(styled("AUTISM", autismclient.util.AutismColors.accent(), true))
|
.append(styled("GEC", autismclient.util.AutismColors.accent(), true))
|
||||||
.append(styled("] ", autismclient.util.AutismColors.textMuted(), false))
|
.append(styled("] ", autismclient.util.AutismColors.textMuted(), false))
|
||||||
.append(styled("Freecam Speed", autismclient.util.AutismColors.packetGray(), true))
|
.append(styled("Freecam Speed", autismclient.util.AutismColors.packetGray(), true))
|
||||||
.append(styled(": ", autismclient.util.AutismColors.textMuted(), false))
|
.append(styled(": ", autismclient.util.AutismColors.textMuted(), false))
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ import java.util.Set;
|
||||||
public final class AutismClientMessaging {
|
public final class AutismClientMessaging {
|
||||||
private static final Minecraft MC = Minecraft.getInstance();
|
private static final Minecraft MC = Minecraft.getInstance();
|
||||||
private static final long DUPLICATE_WINDOW_MS = 600L;
|
private static final long DUPLICATE_WINDOW_MS = 600L;
|
||||||
private static final String PREFIX_TEXT = "[AUTISM] ";
|
private static final String PREFIX_TEXT = "[GEC] ";
|
||||||
|
|
||||||
private static String lastMessageKey = "";
|
private static String lastMessageKey = "";
|
||||||
private static long lastMessageAtMs = 0L;
|
private static long lastMessageAtMs = 0L;
|
||||||
|
|
@ -38,7 +38,7 @@ public final class AutismClientMessaging {
|
||||||
|
|
||||||
public static void sendPrefixed(String message) {
|
public static void sendPrefixed(String message) {
|
||||||
MutableComponent text = Component.empty()
|
MutableComponent text = Component.empty()
|
||||||
.append(themedTag("AUTISM"))
|
.append(themedTag("GEC"))
|
||||||
.append(buildBodyText(message));
|
.append(buildBodyText(message));
|
||||||
send(text);
|
send(text);
|
||||||
}
|
}
|
||||||
|
|
@ -563,8 +563,7 @@ public final class AutismClientMessaging {
|
||||||
|
|
||||||
private static String normalizeDuplicateKey(String message) {
|
private static String normalizeDuplicateKey(String message) {
|
||||||
if (message == null) return "";
|
if (message == null) return "";
|
||||||
return stripLegacyCodes(normalizeLegacyFormatting(message))
|
return stripAutismPrefix(stripLegacyCodes(normalizeLegacyFormatting(message)))
|
||||||
.replace(PREFIX_TEXT, "")
|
|
||||||
.replaceAll("\\s+", " ")
|
.replaceAll("\\s+", " ")
|
||||||
.trim()
|
.trim()
|
||||||
.toLowerCase();
|
.toLowerCase();
|
||||||
|
|
|
||||||
|
|
@ -292,7 +292,7 @@ public final class AutismHudManager {
|
||||||
case WORLD_TIME -> "Current world day time.";
|
case WORLD_TIME -> "Current world day time.";
|
||||||
case REAL_TIME -> "Local system time.";
|
case REAL_TIME -> "Local system time.";
|
||||||
case ROTATION -> "Camera direction, yaw, and pitch.";
|
case ROTATION -> "Camera direction, yaw, and pitch.";
|
||||||
case WATERMARK -> "Movable AUTISM Client logo image.";
|
case WATERMARK -> "Movable GEC Client logo image.";
|
||||||
case ARMOR -> "Equipped armor with vanilla item overlays.";
|
case ARMOR -> "Equipped armor with vanilla item overlays.";
|
||||||
case INVENTORY -> "Main inventory grid.";
|
case INVENTORY -> "Main inventory grid.";
|
||||||
case ITEM_COUNTER -> "Counts a picked or held item across the inventory.";
|
case ITEM_COUNTER -> "Counts a picked or held item across the inventory.";
|
||||||
|
|
|
||||||
|
|
@ -870,7 +870,7 @@ public class AutismMacroListOverlay extends AutismOverlayBase {
|
||||||
localSection.add(DisplayItem.localMacro(macro));
|
localSection.add(DisplayItem.localMacro(macro));
|
||||||
}
|
}
|
||||||
if (!localSection.isEmpty()) {
|
if (!localSection.isEmpty()) {
|
||||||
items.add(DisplayItem.section("AUTISM Client Macros", AutismTheme.recolor(0xFFFF5555, AutismTheme.Channel.ACCENT)));
|
items.add(DisplayItem.section("GEC Client Macros", AutismTheme.recolor(0xFFFF5555, AutismTheme.Channel.ACCENT)));
|
||||||
items.addAll(localSection);
|
items.addAll(localSection);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -887,7 +887,7 @@ public class AutismMacroListOverlay extends AutismOverlayBase {
|
||||||
}
|
}
|
||||||
if (!remoteSection.isEmpty()) {
|
if (!remoteSection.isEmpty()) {
|
||||||
if (localSection.isEmpty()) {
|
if (localSection.isEmpty()) {
|
||||||
items.add(DisplayItem.section("AUTISM Client Macros", AutismTheme.recolor(0xFFFF5555, AutismTheme.Channel.ACCENT)));
|
items.add(DisplayItem.section("GEC Client Macros", AutismTheme.recolor(0xFFFF5555, AutismTheme.Channel.ACCENT)));
|
||||||
}
|
}
|
||||||
items.addAll(remoteSection);
|
items.addAll(remoteSection);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public final class AutismWindowBranding {
|
public final class AutismWindowBranding {
|
||||||
public static final String WINDOW_TITLE = "AUTISM Client";
|
public static final String WINDOW_TITLE = "GEC Client";
|
||||||
private static final String ICON_ROOT = "assets/autismclient/icons/window/";
|
private static final String ICON_ROOT = "assets/autismclient/icons/window/";
|
||||||
private static final int[] ICON_SIZES = {16, 32, 48, 128, 256};
|
private static final int[] ICON_SIZES = {16, 32, 48, 128, 256};
|
||||||
|
|
||||||
|
|
|
||||||
|
Before Width: | Height: | Size: 326 KiB After Width: | Height: | Size: 79 KiB |
|
Before Width: | Height: | Size: 6.4 KiB After Width: | Height: | Size: 6.3 KiB |
|
Before Width: | Height: | Size: 654 B After Width: | Height: | Size: 674 B |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 15 KiB |
|
|
@ -1,15 +1,12 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<svg id="a" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" width="1191.36" height="114.62" viewBox="0 0 1191.36 114.62">
|
<svg xmlns="http://www.w3.org/2000/svg" width="1191.36" height="160" viewBox="0 0 1191.36 160">
|
||||||
<path d="M39.8,21.38h33.46l38.73,72.19h-31.69l-5.69-12.35h-36.15l-5.69,12.35H1.07L39.8,21.38ZM46.62,63.59h19.82l-9.88-21.32-9.94,21.32Z" fill="#ec2027"/>
|
<defs>
|
||||||
<path d="M177.73,21.27h28.2v38.78c.11,27.29-22.24,35.13-49.31,35.18-27.07-.05-49.41-7.9-49.31-35.18V21.27h28.14v37.01c-.11,11.87,9.61,13.91,21.16,14.07,11.49-.16,21.27-2.2,21.11-14.07V21.27Z" fill="#ec2027"/>
|
<linearGradient id="gec-accent" x1="0" y1="0" x2="1" y2="0">
|
||||||
<path d="M248.68,93.56v-49.31h-33.46v-22.88h95.07v22.88h-33.46v49.31h-28.14Z" fill="#ec2027"/>
|
<stop offset="0" stop-color="#ff4a58"/>
|
||||||
<path d="M347.83,21.27v72.19h-28.15V21.27h28.15Z" fill="#ec2027"/>
|
<stop offset="1" stop-color="#be5bff"/>
|
||||||
<path d="M404.98,49.2c20.14,1.02,48.45,2.42,48.39,20.52,0,20.62-23.63,25.51-48.98,25.51-25.3-.05-46.3-3.12-48.98-25.51h29.49c3.22,5.59,10.69,7.04,19.5,7.04s19.5-1.45,19.5-7.04c0-3.17-8.75-3.65-20.09-4.19-20.14-1.02-48.45-2.42-48.39-20.46,0-20.62,23.63-25.57,48.98-25.57,25.3.16,46.3,3.01,48.98,25.57h-29.49c-3.22-5.69-10.69-7.04-19.5-7.04s-19.5,1.29-19.5,7.04c0,3.17,8.75,3.6,20.09,4.14Z" fill="#ec2027"/>
|
</linearGradient>
|
||||||
<path d="M460.89,21.27h35.23l28.14,36.09,28.2-36.09h35.18v72.19h-28.14v-38.51l-28.2,38.51h-14.07l-28.2-38.51v38.51h-28.14V21.27Z" fill="#ec2027"/>
|
</defs>
|
||||||
<path d="M741.96,63.54c-1.77,24.38-23.15,31.69-49.15,31.69-27.07-.05-49.41-7.9-49.31-35.23v-5.26c-.11-27.29,22.24-35.13,49.31-35.23,26,.05,47.37,7.36,49.15,31.69h-28.84c-2.63-7.09-10.63-8.75-20.3-8.75-11.49.16-21.27,2.2-21.11,14.07v1.77c-.16,11.76,9.61,13.91,21.11,14.07,9.67,0,17.72-1.72,20.3-8.81h28.84Z" fill="#ec2027"/>
|
<path d="M95 126 160 14h72l65 112h-54l-11-22h-72l-11 22zm83-62h36l-18-34z" fill="url(#gec-accent)"/>
|
||||||
<path d="M778.49,21.27v49.31h56.34v22.88h-84.49V21.27h28.14Z" fill="#ec2027"/>
|
<text x="650" y="108" fill="#f6f4ff" font-family="Segoe UI,Arial,sans-serif" font-size="100" font-weight="700" letter-spacing="4" text-anchor="middle">GEC CLIENT</text>
|
||||||
<path d="M872.48,21.27v72.19h-28.14V21.27h28.14Z" fill="#ec2027"/>
|
<path d="M95 146h1000" fill="none" stroke="url(#gec-accent)" stroke-linecap="round" stroke-width="5"/>
|
||||||
<path d="M887.41,21.38h84.49v18.48h-56.34v9.24h56.34v16.7h-56.34v9.24h56.34v18.53h-84.49V21.38Z" fill="#ec2027"/>
|
|
||||||
<path d="M1057.25,21.27h28.2v72.19h-31.69l-38.78-44.1v44.1h-28.14V21.27h38.73l31.69,38.24V21.27Z" fill="#ec2027"/>
|
|
||||||
<path d="M1128.68,93.56v-49.31h-33.46v-22.88h95.07v22.88h-33.46v49.31h-28.14Z" fill="#ec2027"/>
|
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 2 KiB After Width: | Height: | Size: 719 B |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 4.4 KiB |
|
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 7.7 KiB |
|
Before Width: | Height: | Size: 288 KiB After Width: | Height: | Size: 48 KiB |
|
|
@ -2,8 +2,8 @@
|
||||||
"schemaVersion": 1,
|
"schemaVersion": 1,
|
||||||
"id": "autism",
|
"id": "autism",
|
||||||
"version": "${version}",
|
"version": "${version}",
|
||||||
"name": "AUTISM Client",
|
"name": "GEC Client",
|
||||||
"description": "AUTISM Client is an elite packet, macro, and duping toolkit built for players who want total control.",
|
"description": "GEC Client is an advanced Minecraft client focused on modules, macros, visual customization, and addon support.",
|
||||||
"authors": [
|
"authors": [
|
||||||
"Melonik"
|
"Melonik"
|
||||||
],
|
],
|
||||||
|
|
|
||||||