This commit is contained in:
0x150 2022-01-06 17:18:47 +01:00
parent 8ebda27415
commit 987a496b5b
35 changed files with 585 additions and 221 deletions

Binary file not shown.

View file

@ -0,0 +1,4 @@
package me.x150.sipprivate.feature.gui;
public interface DoesMSAA {
}

View file

@ -66,7 +66,7 @@ public class AltManagerScreen extends AntiAliasedScreen implements FastTickable
ClientFontRenderer title = FontRenderers.getCustomNormal(40); ClientFontRenderer title = FontRenderers.getCustomNormal(40);
double scroll = 0; double scroll = 0;
double scrollSmooth = 0; double scrollSmooth = 0;
Identifier currentAccountTexture = new Identifier("atomic", "tex_currentaccount"); Identifier currentAccountTexture = new Identifier("coffee", "tex_currentaccount");
boolean currentAccountTextureLoaded = false; boolean currentAccountTextureLoaded = false;
AtomicBoolean isLoggingIn = new AtomicBoolean(false); AtomicBoolean isLoggingIn = new AtomicBoolean(false);
@ -606,7 +606,7 @@ public class AltManagerScreen extends AntiAliasedScreen implements FastTickable
} }
} }
class AltContainer { public class AltContainer {
Identifier tex; Identifier tex;
boolean texLoaded = false; boolean texLoaded = false;
float animProgress = 0; float animProgress = 0;
@ -643,7 +643,7 @@ public class AltManagerScreen extends AntiAliasedScreen implements FastTickable
NativeImageBackedTexture texture = new NativeImageBackedTexture(img); NativeImageBackedTexture texture = new NativeImageBackedTexture(img);
CoffeeClientMain.client.execute(() -> { CoffeeClientMain.client.execute(() -> {
this.tex = new Identifier("atomic", "tex_" + this.storage.cachedUuid.hashCode() + "_" + (Math.random() + "").split("\\.")[1]); this.tex = new Identifier("coffee", "tex_" + this.storage.cachedUuid.hashCode() + "_" + (Math.random() + "").split("\\.")[1]);
CoffeeClientMain.client.getTextureManager().registerTexture(this.tex, texture); CoffeeClientMain.client.getTextureManager().registerTexture(this.tex, texture);
texCache.put(this.storage.cachedUuid, this.tex); texCache.put(this.storage.cachedUuid, this.tex);
texLoaded = true; texLoaded = true;
@ -674,7 +674,7 @@ public class AltManagerScreen extends AntiAliasedScreen implements FastTickable
storage.valid = true; storage.valid = true;
storage.cachedUuid = UUID.randomUUID(); storage.cachedUuid = UUID.randomUUID();
storage.cachedName = storage.email; storage.cachedName = storage.email;
storage.accessToken = "AtomicOnTop"; storage.accessToken = "coffee";
return; return;
} }
if (token == null) { if (token == null) {
@ -771,7 +771,7 @@ public class AltManagerScreen extends AntiAliasedScreen implements FastTickable
} }
} }
record PropEntry(String name, FontAdapter cfr, int color) { public static record PropEntry(String name, FontAdapter cfr, int color) {
} }
} }

View file

@ -5,7 +5,7 @@ import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.text.Text; import net.minecraft.text.Text;
public abstract class AntiAliasedScreen extends Screen { public class AntiAliasedScreen extends Screen {
int samples; int samples;
public AntiAliasedScreen(int samples) { public AntiAliasedScreen(int samples) {
@ -13,15 +13,18 @@ public abstract class AntiAliasedScreen extends Screen {
this.samples = samples; this.samples = samples;
} }
public abstract void renderInternal(MatrixStack stack, int mouseX, int mouseY, float delta); public void renderInternal(MatrixStack stack, int mouseX, int mouseY, float delta) {
super.render(stack, mouseX, mouseY, delta);
}
@Override @Override
public void render(MatrixStack matrices, int mouseX, int mouseY, float delta) { public void render(MatrixStack matrices, int mouseX, int mouseY, float delta) {
if (samples != -1) { if (samples != -1) {
MSAAFramebuffer.use(samples, () -> renderInternal(matrices, mouseX, mouseY, delta)); MSAAFramebuffer.use(samples, () -> {
renderInternal(matrices, mouseX, mouseY, delta);
});
} else { } else {
renderInternal(matrices, mouseX, mouseY, delta); renderInternal(matrices, mouseX, mouseY, delta);
} }
super.render(matrices, mouseX, mouseY, delta);
} }
} }

View file

@ -1,18 +1,277 @@
package me.x150.sipprivate.feature.gui.screen; package me.x150.sipprivate.feature.gui.screen;
import com.mojang.blaze3d.systems.RenderSystem;
import me.x150.sipprivate.CoffeeClientMain; import me.x150.sipprivate.CoffeeClientMain;
import net.minecraft.client.gui.screen.Screen; import me.x150.sipprivate.feature.gui.FastTickable;
import net.minecraft.client.gui.screen.TitleScreen; import me.x150.sipprivate.feature.gui.widget.RoundButton;
import net.minecraft.text.Text; import me.x150.sipprivate.helper.font.FontRenderers;
import me.x150.sipprivate.helper.font.adapter.impl.ClientFontRenderer;
import me.x150.sipprivate.helper.render.MSAAFramebuffer;
import me.x150.sipprivate.helper.render.Renderer;
import me.x150.sipprivate.helper.util.Utils;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.screen.multiplayer.MultiplayerScreen;
import net.minecraft.client.gui.screen.option.OptionsScreen;
import net.minecraft.client.gui.screen.world.SelectWorldScreen;
import net.minecraft.client.realms.gui.screen.RealmsMainScreen;
import net.minecraft.client.render.GameRenderer;
import net.minecraft.client.texture.NativeImage;
import net.minecraft.client.texture.NativeImageBackedTexture;
import net.minecraft.client.util.DefaultSkinHelper;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.MathHelper;
import org.lwjgl.BufferUtils;
import org.lwjgl.opengl.GL40C;
public class HomeScreen extends Screen { import javax.imageio.ImageIO;
public HomeScreen() { import java.awt.*;
super(Text.of("")); import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.util.Objects;
import java.util.UUID;
public class HomeScreen extends AntiAliasedScreen implements FastTickable {
static final double padding = 5;
static boolean isDev = false;
static String version = "unknown";
static String changelog = "";
static Identifier background = new Identifier("coffeeclient", "background.jpg");
static HttpClient downloader = HttpClient.newHttpClient();
private static HomeScreen instance;
boolean loaded = false;
long initTime = System.currentTimeMillis();
double prog = 0;
boolean fadeOut = false;
ClientFontRenderer title = FontRenderers.getCustomNormal(40);
ClientFontRenderer smaller = FontRenderers.getCustomNormal(30);
ClientFontRenderer propFr = FontRenderers.getCustomNormal(22);
double initProg = 0;
Identifier currentAccountTexture = new Identifier("coffee", "tex_currentaccount_home");
boolean currentAccountTextureLoaded = false;
UUID previousChecked = null;
private HomeScreen() {
super(MSAAFramebuffer.MAX_SAMPLES);
}
public static HomeScreen instance() {
if (instance == null) instance = new HomeScreen();
return instance;
}
void load() {
loaded = true;
try {
File execF = new File(HomeScreen.class.getProtectionDomain().getCodeSource().getLocation().toURI());
File changelog = new File(Objects.requireNonNull(HomeScreen.class.getClassLoader().getResource("changelogLatest.txt")).toURI());
File version = new File(Objects.requireNonNull(HomeScreen.class.getClassLoader().getResource("version.txt")).toURI());
isDev = execF.isDirectory();
HomeScreen.version = Files.readString(version.toPath(), StandardCharsets.UTF_8);
HomeScreen.changelog = Files.readString(changelog.toPath(), StandardCharsets.UTF_8);
updateCurrentAccount(this::complete);
} catch (Exception e) {
e.printStackTrace();
complete();
}
}
@Override
public void resize(MinecraftClient client, int width, int height) {
this.width = width;
this.height = height;
initWidgets();
}
void initWidgets() {
double centerWidgetsY = height - padding - 25;
double rightPad = width - padding;
Color bg = new Color(240, 240, 240);
RoundButton single = new RoundButton(bg, rightPad - (padding + 60), centerWidgetsY, 60, 20, "Singleplayer", () -> CoffeeClientMain.client.setScreen(new SelectWorldScreen(this)));
RoundButton multi = new RoundButton(bg, rightPad - (padding + 60) * 2, centerWidgetsY, 60, 20, "Multiplayer", () -> CoffeeClientMain.client.setScreen(new MultiplayerScreen(this)));
RoundButton realms = new RoundButton(bg, rightPad - (padding + 60) * 3, centerWidgetsY, 60, 20, "Realms", () -> CoffeeClientMain.client.setScreen(new RealmsMainScreen(this)));
RoundButton alts = new RoundButton(bg, rightPad - (padding + 60) * 4, centerWidgetsY, 60, 20, "Alts", () -> CoffeeClientMain.client.setScreen(AltManagerScreen.instance()));
RoundButton settings = new RoundButton(bg, rightPad - (padding + 60) * 5, centerWidgetsY, 60, 20, "Options", () -> CoffeeClientMain.client.setScreen(new OptionsScreen(this, CoffeeClientMain.client.options)));
RoundButton quit = new RoundButton(bg, rightPad - (padding + 60) * 5 - padding - 20, centerWidgetsY, 20, 20, "X", CoffeeClientMain.client::scheduleStop);
addDrawableChild(single);
addDrawableChild(multi);
addDrawableChild(settings);
addDrawableChild(alts);
addDrawableChild(realms);
addDrawableChild(quit);
} }
@Override @Override
protected void init() { protected void init() {
CoffeeClientMain.client.setScreen(new TitleScreen());
super.init(); super.init();
initTime = System.currentTimeMillis();
initWidgets();
if (loaded) updateCurrentAccount(() -> {
}); // already loaded this instance, refresh on the fly
}
void complete() {
fadeOut = true;
}
void updateCurrentAccount(Runnable callback) {
UUID uid = CoffeeClientMain.client.getSession().getProfile().getId();
if (previousChecked != null && previousChecked.equals(uid)) {
callback.run();
return;
}
previousChecked = uid;
HttpRequest hr = HttpRequest.newBuilder().uri(URI.create("https://crafatar.com/avatars/" + uid + "?overlay")).header("User-Agent", "why").build();
downloader.sendAsync(hr, HttpResponse.BodyHandlers.ofByteArray()).thenAccept(httpResponse -> {
try {
ByteArrayOutputStream stream = new ByteArrayOutputStream();
ImageIO.write(ImageIO.read(new ByteArrayInputStream(httpResponse.body())), "png", stream);
byte[] bytes = stream.toByteArray();
ByteBuffer data = BufferUtils.createByteBuffer(bytes.length).put(bytes);
data.flip();
NativeImage img = NativeImage.read(data);
System.out.println(img);
NativeImageBackedTexture texture = new NativeImageBackedTexture(img);
CoffeeClientMain.client.execute(() -> {
CoffeeClientMain.client.getTextureManager().registerTexture(currentAccountTexture, texture);
currentAccountTextureLoaded = true;
callback.run();
});
} catch (Exception e) {
e.printStackTrace();
callback.run();
}
});
}
@Override
public void renderInternal(MatrixStack stack, int mouseX, int mouseY, float delta) {
double initProg = this.initProg * 2;
Renderer.R2D.renderQuad(stack, new Color(210, 210, 210), 0, 0, width, height);
RenderSystem.setShaderTexture(0, background);
Renderer.R2D.renderTexture(stack, 0, 0, width, height, 0, 0, width, height, width, height);
stack.push();
double ap = 1 - easeOutBack(MathHelper.clamp(initProg, .5, 1.5) - .5);
double h = padding + propFr.getMarginHeight() + 2 + changelog.split("\n").length * FontRenderers.getNormal().getMarginHeight() + padding;
double w = 100;
for (String s : changelog.split("\n")) {
w = Math.max(w, 10 + FontRenderers.getNormal().getStringWidth(s));
}
stack.translate(0, ap * -(padding + h + 1), 0);
Renderer.R2D.renderRoundedQuad(stack, new Color(20, 20, 20, 170), padding, padding, padding + w + padding * 2, padding + h, 10, 14);
propFr.drawString(stack, "Changelog", (float) (padding * 2f), (float) (padding * 2f), 0xFFFFFF, false);
double yoff = padding * 2 + propFr.getMarginHeight() + 2;
for (String s : changelog.split("\n")) {
FontRenderers.getNormal().drawString(stack, s, (float) (padding * 2 + padding), (float) yoff, 0xAAAAAA, false);
yoff += FontRenderers.getNormal().getMarginHeight();
}
stack.pop();
stack.push();
double widRHeight = 50 + padding * 2;
double ap1 = 1 - easeOutBack(MathHelper.clamp(initProg, 1, 2) - 1);
stack.translate(0, ap1 * -(padding + widRHeight + 1), 0);
double fromX = width - (200 + padding);
double toX = width - padding;
double fromY;
double toY;
toY = padding + widRHeight;
fromY = toY - widRHeight;
Renderer.R2D.renderRoundedQuad(stack, new Color(20, 20, 20, 170), fromX, fromY, toX, toY, 10, 10);
double texDim = widRHeight - padding * 2;
RenderSystem.enableBlend();
RenderSystem.colorMask(false, false, false, true);
RenderSystem.clearColor(0.0F, 0.0F, 0.0F, 0.0F);
RenderSystem.clear(GL40C.GL_COLOR_BUFFER_BIT, false);
RenderSystem.colorMask(true, true, true, true);
RenderSystem.setShader(GameRenderer::getPositionColorShader);
Renderer.R2D.renderRoundedQuadInternal(stack.peek().getPositionMatrix(), 0, 0, 0, 1, fromX + padding, fromY + padding, fromX + padding + texDim, fromY + padding + texDim, 6, 10);
RenderSystem.blendFunc(GL40C.GL_DST_ALPHA, GL40C.GL_ONE_MINUS_DST_ALPHA);
RenderSystem.setShaderTexture(0, currentAccountTextureLoaded ? currentAccountTexture : DefaultSkinHelper.getTexture());
if (currentAccountTextureLoaded)
Renderer.R2D.renderTexture(stack, fromX + padding, fromY + padding, texDim, texDim, 0, 0, 64, 64, 64, 64);
else Renderer.R2D.renderTexture(stack, fromX + padding, fromY + padding, texDim, texDim, 8, 8, 8, 8, 64, 64);
RenderSystem.defaultBlendFunc();
String uuid = CoffeeClientMain.client.getSession().getUuid();
double uuidWid = FontRenderers.getNormal().getStringWidth(uuid);
double maxWid = 200 - texDim - padding * 3;
if (uuidWid > maxWid) {
double threeDotWidth = FontRenderers.getNormal().getStringWidth("...");
uuid = FontRenderers.getNormal().trimStringToWidth(uuid, maxWid - 1 - threeDotWidth);
uuid += "...";
}
AltManagerScreen.AltContainer.PropEntry[] props = new AltManagerScreen.AltContainer.PropEntry[]{new AltManagerScreen.AltContainer.PropEntry(CoffeeClientMain.client.getSession().getUsername(), FontRenderers.getCustomNormal(22), 0xFFFFFF),
new AltManagerScreen.AltContainer.PropEntry(uuid, FontRenderers.getNormal(), 0xAAAAAA)};
float propsOffset = (float) (fromY + padding);
for (AltManagerScreen.AltContainer.PropEntry prop : props) {
prop.cfr().drawString(stack, prop.name(), (float) (fromX + padding + texDim + padding), propsOffset, prop.color(), false);
propsOffset += prop.cfr().getMarginHeight();
}
stack.pop();
stack.push();
double heiProg = 1 - easeOutBack(MathHelper.clamp(initProg, 0, 1));
double totalHeight = 30;
stack.translate(0, (totalHeight + padding) * heiProg, 0);
Renderer.R2D.renderRoundedQuad(stack, new Color(20, 20, 20, 170), padding, height - padding - totalHeight, width - padding, height - padding, 10, 14);
title.drawString(stack, "Coffee", 10f, (float) (height - padding - totalHeight / 2f - title.getMarginHeight() / 2f), 0xFFFFFF, false);
double fw = title.getStringWidth("Coffee") + 5;
smaller.drawString(stack, "version " + version + (isDev ? "-dev" : ""), (float) (10f + fw), (float) (height - padding - totalHeight / 2f - title.getMarginHeight() / 2f) + title.getMarginHeight() - smaller.getMarginHeight() - 1, 0xFFFFFF, false);
super.renderInternal(stack, mouseX, mouseY, delta); // render bottom row widgets
stack.pop();
double spinnerProg = prog;
spinnerProg = MathHelper.clamp(spinnerProg, 0, 1); // fucking floating point precision istg
float fadeProg = fadeOut ? (float) prog : 1f;
fadeProg = MathHelper.clamp(fadeProg, 0, 1);
Renderer.R2D.renderQuad(stack, new Color(1f, 1f, 1f, fadeProg), 0, 0, width, height);
Renderer.R2D.renderLoadingSpinner(stack, Renderer.Util.modify(Utils.getCurrentRGB(), -1, -1, -1, (int) (spinnerProg * 255)), width - 15, height - 15, 10, 10);
}
@Override
public void onFastTick() {
if (System.currentTimeMillis() - initTime > 1000 && !loaded) load();
double delta = 10 / 600d;
if (fadeOut) delta *= -1;
prog += delta;
prog = MathHelper.clamp(prog, 0, 1);
if (loaded && prog == 0 && fadeOut) {
double d = 0.01;
initProg += d;
initProg = MathHelper.clamp(initProg, 0, 1);
}
}
@Override
public boolean mouseClicked(double mouseX, double mouseY, int button) {
if (prog != 0 || !fadeOut) return false;
return super.mouseClicked(mouseX, mouseY, button);
}
double easeOutBack(double x) {
double c1 = 1.70158;
double c3 = c1 + 1;
return 1 + c3 * Math.pow(x - 1, 3) + c1 * Math.pow(x - 1, 2);
} }
} }

View file

@ -0,0 +1,93 @@
package me.x150.sipprivate.feature.gui.widget;
import me.x150.sipprivate.feature.gui.FastTickable;
import me.x150.sipprivate.helper.font.FontRenderers;
import me.x150.sipprivate.helper.render.Renderer;
import net.minecraft.client.gui.Drawable;
import net.minecraft.client.gui.Element;
import net.minecraft.client.gui.Selectable;
import net.minecraft.client.gui.screen.narration.NarrationMessageBuilder;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.util.math.MathHelper;
import java.awt.*;
public class RoundButton implements Element, Drawable, Selectable, FastTickable {
String text;
Runnable onPress;
double x, y, width, height;
double animProgress = 0;
boolean isHovered = false;
boolean enabled = true;
Color color;
public RoundButton(Color color, double x, double y, double w, double h, String t, Runnable a) {
this.onPress = a;
this.x = x;
this.y = y;
this.width = w;
this.height = h;
this.text = t;
this.color = color;
}
public boolean isEnabled() {
return enabled;
}
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
public void onFastTick() {
double d = 0.04;
if (!isHovered) {
d *= -1;
}
animProgress += d;
animProgress = MathHelper.clamp(animProgress, 0, 1);
}
double easeInOutQuint(double x) {
return x < 0.5 ? 16 * x * x * x * x * x : 1 - Math.pow(-2 * x + 2, 5) / 2;
}
boolean inBounds(double cx, double cy) {
return cx >= x && cx < x + width && cy >= y && cy < y + height;
}
@Override
public void render(MatrixStack matrices, int mouseX, int mouseY, float delta) {
isHovered = inBounds(mouseX, mouseY) && isEnabled();
matrices.push();
matrices.translate(x + width / 2d, y + height / 2d, 0);
float animProgress = (float) easeInOutQuint(this.animProgress);
matrices.scale(MathHelper.lerp(animProgress, 1f, 0.95f), MathHelper.lerp(animProgress, 1f, 0.95f), 1f);
double originX = -width / 2d;
double originY = -height / 2d;
Renderer.R2D.renderRoundedQuad(matrices, color, originX, originY, width / 2d, height / 2d, 10, 10);
FontRenderers.getNormal().drawString(matrices, text, -(FontRenderers.getNormal().getStringWidth(text) + 2) / 2f, -FontRenderers.getNormal().getMarginHeight() / 2f, isEnabled() ? 0 : 0x333333, false);
matrices.pop();
}
@Override
public SelectionType getType() {
return isHovered ? SelectionType.HOVERED : SelectionType.NONE;
}
@Override
public void appendNarrations(NarrationMessageBuilder builder) {
}
@Override
public boolean mouseClicked(double mouseX, double mouseY, int button) {
if (inBounds(mouseX, mouseY) && isEnabled() && button == 0) {
onPress.run();
return true;
}
return false;
}
}

View file

@ -15,6 +15,7 @@ import net.minecraft.client.util.math.MatrixStack;
public abstract class Module { public abstract class Module {
protected static MinecraftClient client = CoffeeClientMain.client;
public final ModuleConfig config; public final ModuleConfig config;
public final DoubleSetting keybind; public final DoubleSetting keybind;
private final BooleanSetting debuggerEnabled; private final BooleanSetting debuggerEnabled;
@ -24,8 +25,6 @@ public abstract class Module {
private final BooleanSetting toasts; private final BooleanSetting toasts;
private boolean enabled = false; private boolean enabled = false;
protected static MinecraftClient client = CoffeeClientMain.client;
public Module(String n, String d, ModuleType type) { public Module(String n, String d, ModuleType type) {
this.name = n; this.name = n;
this.description = d; this.description = d;

View file

@ -6,13 +6,13 @@
package me.x150.sipprivate.feature.module; package me.x150.sipprivate.feature.module;
import me.x150.sipprivate.feature.module.impl.combat.*;
import me.x150.sipprivate.feature.module.impl.exploit.*; import me.x150.sipprivate.feature.module.impl.exploit.*;
import me.x150.sipprivate.feature.module.impl.fun.*; import me.x150.sipprivate.feature.module.impl.fun.*;
import me.x150.sipprivate.feature.module.impl.misc.*; import me.x150.sipprivate.feature.module.impl.misc.*;
import me.x150.sipprivate.feature.module.impl.movement.*; import me.x150.sipprivate.feature.module.impl.movement.*;
import me.x150.sipprivate.feature.module.impl.render.*; import me.x150.sipprivate.feature.module.impl.render.*;
import me.x150.sipprivate.feature.module.impl.world.*; import me.x150.sipprivate.feature.module.impl.world.*;
import me.x150.sipprivate.feature.module.impl.combat.*;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;

View file

@ -1,11 +1,9 @@
package me.x150.sipprivate.feature.module.impl.combat; package me.x150.sipprivate.feature.module.impl.combat;
import me.x150.sipprivate.CoffeeClientMain; import me.x150.sipprivate.CoffeeClientMain;
import me.x150.sipprivate.feature.module.Module; import me.x150.sipprivate.feature.module.Module;
import me.x150.sipprivate.feature.module.ModuleType; import me.x150.sipprivate.feature.module.ModuleType;
import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.entity.Entity;
import net.minecraft.util.Hand; import net.minecraft.util.Hand;
import net.minecraft.util.hit.EntityHitResult; import net.minecraft.util.hit.EntityHitResult;
@ -18,8 +16,9 @@ public class AutoAttack extends Module {
@Override @Override
public void tick() { public void tick() {
if(CoffeeClientMain.client.crosshairTarget == null || !(CoffeeClientMain.client.crosshairTarget instanceof EntityHitResult) || CoffeeClientMain.client.player.getAttackCooldownProgress(0) < 1) return; if (CoffeeClientMain.client.crosshairTarget == null || !(CoffeeClientMain.client.crosshairTarget instanceof EntityHitResult) || CoffeeClientMain.client.player.getAttackCooldownProgress(0) < 1)
CoffeeClientMain.client.interactionManager.attackEntity(CoffeeClientMain.client.player, ((EntityHitResult)CoffeeClientMain.client.crosshairTarget).getEntity()); return;
CoffeeClientMain.client.interactionManager.attackEntity(CoffeeClientMain.client.player, ((EntityHitResult) CoffeeClientMain.client.crosshairTarget).getEntity());
CoffeeClientMain.client.player.swingHand(Hand.MAIN_HAND); CoffeeClientMain.client.player.swingHand(Hand.MAIN_HAND);
} }

View file

@ -84,6 +84,7 @@ public class AntiAntiXray extends Module {
int scanned = 0; int scanned = 0;
int delayPassed = 0; int delayPassed = 0;
BlockPos latestGoal = null; BlockPos latestGoal = null;
public AntiAntiXray() { public AntiAntiXray() {
super("AntiAntiXray", "fuck you antixray i hope you choke on garlic", ModuleType.EXPLOIT); super("AntiAntiXray", "fuck you antixray i hope you choke on garlic", ModuleType.EXPLOIT);
//this.config.createPropGroup("Post", mineBaritone); //this.config.createPropGroup("Post", mineBaritone);

View file

@ -15,27 +15,33 @@ public class Deadmau5 extends Module {
super("Deadmau5", "deadmau5 ears for everyone", ModuleType.FUN); super("Deadmau5", "deadmau5 ears for everyone", ModuleType.FUN);
} }
@Override public void tick() { @Override
public void tick() {
} }
@Override public void enable() { @Override
public void enable() {
} }
@Override public void disable() { @Override
public void disable() {
} }
@Override public String getContext() { @Override
public String getContext() {
return null; return null;
} }
@Override public void onWorldRender(MatrixStack matrices) { @Override
public void onWorldRender(MatrixStack matrices) {
} }
@Override public void onHudRender() { @Override
public void onHudRender() {
} }
} }

View file

@ -19,40 +19,46 @@ import java.util.Objects;
public class SpinAutism extends Module { public class SpinAutism extends Module {
// final SliderValue speed = (SliderValue) this.config.create("Timeout", 5, 0, 100, 0).description("How much to wait between rotations"); final double r = 0;
// final SliderValue speed = (SliderValue) this.config.create("Timeout", 5, 0, 100, 0).description("How much to wait between rotations");
DoubleSetting speed = this.config.create(new DoubleSetting.Builder(5) DoubleSetting speed = this.config.create(new DoubleSetting.Builder(5)
.name("Delay") .name("Delay")
.description("How much to wait when spinning") .description("How much to wait when spinning")
.min(0) .min(0)
.max(100) .max(100)
.precision(0) .precision(0)
.get()); .get());
final double r = 0;
int timeout = 0; int timeout = 0;
public SpinAutism() { public SpinAutism() {
super("SpinAutism", "Spins around like a maniac and throws whatever you have", ModuleType.FUN); super("SpinAutism", "Spins around like a maniac and throws whatever you have", ModuleType.FUN);
} }
@Override public void tick() { @Override
public void tick() {
} }
@Override public void enable() { @Override
public void enable() {
} }
@Override public void disable() { @Override
public void disable() {
} }
@Override public String getContext() { @Override
public String getContext() {
return null; return null;
} }
@Override public void onWorldRender(MatrixStack matrices) { @Override
public void onWorldRender(MatrixStack matrices) {
} }
@Override public void onFastTick() { @Override
public void onFastTick() {
timeout--; // decrease timeout timeout--; // decrease timeout
if (timeout > 0) { if (timeout > 0) {
return; // if timeout isn't expired, do nothing return; // if timeout isn't expired, do nothing
@ -66,7 +72,8 @@ public class SpinAutism extends Module {
CoffeeClientMain.client.getNetworkHandler().sendPacket(p1); CoffeeClientMain.client.getNetworkHandler().sendPacket(p1);
} }
@Override public void onHudRender() { @Override
public void onHudRender() {
} }
} }

View file

@ -15,27 +15,33 @@ public class AllowFormatCodes extends Module {
super("AllowFormatCodes", "Allows you to type format codes with the paragraph symbol", ModuleType.MISC); super("AllowFormatCodes", "Allows you to type format codes with the paragraph symbol", ModuleType.MISC);
} }
@Override public void tick() { @Override
public void tick() {
} }
@Override public void enable() { @Override
public void enable() {
} }
@Override public void disable() { @Override
public void disable() {
} }
@Override public String getContext() { @Override
public String getContext() {
return null; return null;
} }
@Override public void onWorldRender(MatrixStack matrices) { @Override
public void onWorldRender(MatrixStack matrices) {
} }
@Override public void onHudRender() { @Override
public void onHudRender() {
} }
} }

View file

@ -15,27 +15,33 @@ public class InfChatLength extends Module {
super("InfChatLength", "Completely removes the length limit for the chat (Server side too, be careful!)", ModuleType.MISC); super("InfChatLength", "Completely removes the length limit for the chat (Server side too, be careful!)", ModuleType.MISC);
} }
@Override public void tick() { @Override
public void tick() {
} }
@Override public void enable() { @Override
public void enable() {
} }
@Override public void disable() { @Override
public void disable() {
} }
@Override public String getContext() { @Override
public String getContext() {
return null; return null;
} }
@Override public void onWorldRender(MatrixStack matrices) { @Override
public void onWorldRender(MatrixStack matrices) {
} }
@Override public void onHudRender() { @Override
public void onHudRender() {
} }
} }

View file

@ -18,7 +18,7 @@ import net.minecraft.network.packet.s2c.play.TitleFadeS2CPacket;
import net.minecraft.network.packet.s2c.play.TitleS2CPacket; import net.minecraft.network.packet.s2c.play.TitleS2CPacket;
public class NoTitles extends Module { public class NoTitles extends Module {
long blocked = 0L; long blocked = 0L;
Notification lastShown = null; Notification lastShown = null;
public NoTitles() { public NoTitles() {
@ -46,26 +46,32 @@ public class NoTitles extends Module {
}); });
} }
@Override public void tick() { @Override
public void tick() {
} }
@Override public void enable() { @Override
public void enable() {
} }
@Override public void disable() { @Override
public void disable() {
} }
@Override public String getContext() { @Override
public String getContext() {
return null; return null;
} }
@Override public void onWorldRender(MatrixStack matrices) { @Override
public void onWorldRender(MatrixStack matrices) {
} }
@Override public void onHudRender() { @Override
public void onHudRender() {
} }
} }

View file

@ -15,27 +15,33 @@ public class PortalGUI extends Module {
super("PortalGUI", "Allows you to open GUIs while being inside a portal", ModuleType.MISC); super("PortalGUI", "Allows you to open GUIs while being inside a portal", ModuleType.MISC);
} }
@Override public void tick() { @Override
public void tick() {
} }
@Override public void enable() { @Override
public void enable() {
} }
@Override public void disable() { @Override
public void disable() {
} }
@Override public String getContext() { @Override
public String getContext() {
return null; return null;
} }
@Override public void onWorldRender(MatrixStack matrices) { @Override
public void onWorldRender(MatrixStack matrices) {
} }
@Override public void onHudRender() { @Override
public void onHudRender() {
} }
} }

View file

@ -13,40 +13,46 @@ import net.minecraft.client.util.math.MatrixStack;
public class Timer extends Module { public class Timer extends Module {
// final SliderValue newTps = this.config.create("New TPS", 20, 0.1, 100, 1); // final SliderValue newTps = this.config.create("New TPS", 20, 0.1, 100, 1);
DoubleSetting newTps = this.config.create(new DoubleSetting.Builder(20) DoubleSetting newTps = this.config.create(new DoubleSetting.Builder(20)
.name("New TPS") .name("New TPS")
.description("To what to set the new tps to") .description("To what to set the new tps to")
.min(0.1) .min(0.1)
.max(100) .max(100)
.precision(1) .precision(1)
.get()); .get());
public Timer() { public Timer() {
super("Timer", "changes client side tps", ModuleType.MISC); super("Timer", "changes client side tps", ModuleType.MISC);
} }
@Override public void tick() { @Override
public void tick() {
Utils.setClientTps((float) (newTps.getValue() + 0d)); Utils.setClientTps((float) (newTps.getValue() + 0d));
} }
@Override public void enable() { @Override
public void enable() {
} }
@Override public void disable() { @Override
public void disable() {
Utils.setClientTps(20f); Utils.setClientTps(20f);
} }
@Override public String getContext() { @Override
public String getContext() {
return null; return null;
} }
@Override public void onWorldRender(MatrixStack matrices) { @Override
public void onWorldRender(MatrixStack matrices) {
} }
@Override public void onHudRender() { @Override
public void onHudRender() {
} }
} }

View file

@ -5,17 +5,15 @@ import me.x150.sipprivate.feature.module.ModuleType;
import me.x150.sipprivate.helper.event.EventType; import me.x150.sipprivate.helper.event.EventType;
import me.x150.sipprivate.helper.event.Events; import me.x150.sipprivate.helper.event.Events;
import me.x150.sipprivate.helper.event.events.PacketEvent; import me.x150.sipprivate.helper.event.events.PacketEvent;
import me.x150.sipprivate.mixin.IPlayerMoveC2SPacketAccessor;
import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.network.packet.c2s.play.CloseHandledScreenC2SPacket; import net.minecraft.network.packet.c2s.play.CloseHandledScreenC2SPacket;
import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket;
public class XCarry extends Module { public class XCarry extends Module {
public XCarry() { public XCarry() {
super("XCarry", "lets you store stuff in your crafting grid", ModuleType.MISC); super("XCarry", "lets you store stuff in your crafting grid", ModuleType.MISC);
Events.registerEventHandler(EventType.PACKET_SEND, event -> { Events.registerEventHandler(EventType.PACKET_SEND, event -> {
if(!this.isEnabled()) return; if (!this.isEnabled()) return;
PacketEvent pe = (PacketEvent) event; PacketEvent pe = (PacketEvent) event;
if (pe.getPacket() instanceof CloseHandledScreenC2SPacket packet) { if (pe.getPacket() instanceof CloseHandledScreenC2SPacket packet) {
pe.setCancelled(true); pe.setCancelled(true);

View file

@ -25,6 +25,7 @@ public class Blink extends Module {
.name("Mode") .name("Mode")
.description("Whether to delay or remove the packets being sent") .description("Whether to delay or remove the packets being sent")
.get()); .get());
public Blink() { public Blink() {
super("Blink", "confuses chinese anticheats", ModuleType.MOVEMENT); super("Blink", "confuses chinese anticheats", ModuleType.MOVEMENT);
Events.registerEventHandler(EventType.PACKET_SEND, event1 -> { Events.registerEventHandler(EventType.PACKET_SEND, event1 -> {

View file

@ -52,6 +52,7 @@ public class LongJump extends Module {
.precision(3) .precision(3)
.get()); .get());
boolean jumped = false; boolean jumped = false;
public LongJump() { public LongJump() {
super("LongJump", "Jumps a long distance", ModuleType.MOVEMENT); super("LongJump", "Jumps a long distance", ModuleType.MOVEMENT);
glideVelocity.showIf(glide::getValue); glideVelocity.showIf(glide::getValue);

View file

@ -3,13 +3,11 @@ package me.x150.sipprivate.feature.module.impl.world;
import me.x150.sipprivate.CoffeeClientMain; import me.x150.sipprivate.CoffeeClientMain;
import me.x150.sipprivate.feature.module.Module; import me.x150.sipprivate.feature.module.Module;
import me.x150.sipprivate.feature.module.ModuleType; import me.x150.sipprivate.feature.module.ModuleType;
import net.minecraft.block.Blocks;
import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.network.packet.c2s.play.PlayerActionC2SPacket; import net.minecraft.network.packet.c2s.play.PlayerActionC2SPacket;
import net.minecraft.util.hit.BlockHitResult;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction; import net.minecraft.util.math.Direction;
import net.minecraft.util.math.Vec3d;
import net.minecraft.util.hit.BlockHitResult;
public class InstantMine extends Module { public class InstantMine extends Module {
@ -19,11 +17,13 @@ public class InstantMine extends Module {
@Override @Override
public void tick() { public void tick() {
if(CoffeeClientMain.client.interactionManager.isBreakingBlock()){ if (CoffeeClientMain.client.interactionManager.isBreakingBlock()) {
try{ try {
BlockPos killmeplz = ((BlockHitResult) CoffeeClientMain.client.crosshairTarget).getBlockPos(); BlockPos killmeplz = ((BlockHitResult) CoffeeClientMain.client.crosshairTarget).getBlockPos();
for(int i = 0; i < 20; i++) CoffeeClientMain.client.player.networkHandler.sendPacket(new PlayerActionC2SPacket(PlayerActionC2SPacket.Action.STOP_DESTROY_BLOCK, killmeplz, Direction.UP)); for (int i = 0; i < 20; i++)
}catch(ClassCastException e){} CoffeeClientMain.client.player.networkHandler.sendPacket(new PlayerActionC2SPacket(PlayerActionC2SPacket.Action.STOP_DESTROY_BLOCK, killmeplz, Direction.UP));
} catch (ClassCastException e) {
}
} }
} }

View file

@ -17,11 +17,14 @@ public class Nuker extends Module {
@Override @Override
public void tick() { public void tick() {
for(int x = -7; x < 8; x++) for(int y = -7; y < 8; y++) for(int z = -7; z < 8; z++){ for (int x = -7; x < 8; x++)
BlockPos pos = CoffeeClientMain.client.player.getBlockPos().add(new BlockPos(x, y, z)); for (int y = -7; y < 8; y++)
if(new Vec3d(pos.getX(), pos.getY(), pos.getZ()).distanceTo(CoffeeClientMain.client.player.getPos()) > CoffeeClientMain.client.interactionManager.getReachDistance() - 1 || CoffeeClientMain.client.world.getBlockState(pos).isAir() || CoffeeClientMain.client.world.getBlockState(pos).getBlock() == Blocks.WATER || CoffeeClientMain.client.world.getBlockState(pos).getBlock() == Blocks.LAVA) continue; for (int z = -7; z < 8; z++) {
CoffeeClientMain.client.interactionManager.attackBlock(pos, Direction.DOWN); BlockPos pos = CoffeeClientMain.client.player.getBlockPos().add(new BlockPos(x, y, z));
} if (new Vec3d(pos.getX(), pos.getY(), pos.getZ()).distanceTo(CoffeeClientMain.client.player.getPos()) > CoffeeClientMain.client.interactionManager.getReachDistance() - 1 || CoffeeClientMain.client.world.getBlockState(pos).isAir() || CoffeeClientMain.client.world.getBlockState(pos).getBlock() == Blocks.WATER || CoffeeClientMain.client.world.getBlockState(pos).getBlock() == Blocks.LAVA)
continue;
CoffeeClientMain.client.interactionManager.attackBlock(pos, Direction.DOWN);
}
} }
@Override @Override

View file

@ -267,7 +267,7 @@ public class Renderer {
public static class R2D { public static class R2D {
public static final Identifier OPTIONS_BACKGROUND_TEXTURE = new Identifier("sipoverprivate", "background.jpg"); public static final Identifier OPTIONS_BACKGROUND_TEXTURE = new Identifier("coffeeclient", "background.jpg");
public static void beginScissor(MatrixStack stack, double x, double y, double endX, double endY) { public static void beginScissor(MatrixStack stack, double x, double y, double endX, double endY) {
Matrix4f matrix = stack.peek().getPositionMatrix(); Matrix4f matrix = stack.peek().getPositionMatrix();
@ -549,6 +549,48 @@ public class Renderer {
// //
// } // }
public static void renderQuadGradientVert(MatrixStack matrices, Color c1, Color c2, double x1, double y1, double x2, double y2) {
float r1 = c1.getRed() / 255f;
float g1 = c1.getGreen() / 255f;
float b1 = c1.getBlue() / 255f;
float a1 = c1.getAlpha() / 255f;
float r2 = c2.getRed() / 255f;
float g2 = c2.getGreen() / 255f;
float b2 = c2.getBlue() / 255f;
float a2 = c2.getAlpha() / 255f;
double j;
if (x1 < x2) {
j = x1;
x1 = x2;
x2 = j;
}
if (y1 < y2) {
j = y1;
y1 = y2;
y2 = j;
}
Matrix4f matrix = matrices.peek().getPositionMatrix();
BufferBuilder bufferBuilder = Tessellator.getInstance().getBuffer();
RenderSystem.enableBlend();
RenderSystem.defaultBlendFunc();
RenderSystem.disableTexture();
RenderSystem.setShader(GameRenderer::getPositionColorShader);
bufferBuilder.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_COLOR);
bufferBuilder.vertex(matrix, (float) x1, (float) y1, 0.0F).color(r1, g1, b1, a1).next();
bufferBuilder.vertex(matrix, (float) x1, (float) y2, 0.0F).color(r2, g2, b2, a2).next();
bufferBuilder.vertex(matrix, (float) x2, (float) y2, 0.0F).color(r2, g2, b2, a2).next();
bufferBuilder.vertex(matrix, (float) x2, (float) y1, 0.0F).color(r1, g1, b1, a1).next();
bufferBuilder.end();
BufferRenderer.draw(bufferBuilder);
RenderSystem.enableTexture();
RenderSystem.disableBlend();
}
public static void renderQuadGradient(MatrixStack matrices, Color c2, Color c1, double x1, double y1, double x2, double y2) { public static void renderQuadGradient(MatrixStack matrices, Color c2, Color c1, double x1, double y1, double x2, double y2) {
float r1 = c1.getRed() / 255f; float r1 = c1.getRed() / 255f;
float g1 = c1.getGreen() / 255f; float g1 = c1.getGreen() / 255f;
@ -637,12 +679,12 @@ public class Renderer {
RenderSystem.setShaderColor(1f, 1f, 1f, 1f); RenderSystem.setShaderColor(1f, 1f, 1f, 1f);
} }
public static void renderLine(Color c, double x, double y, double x1, double y1) { public static void renderLine(MatrixStack stack, Color c, double x, double y, double x1, double y1) {
float g = c.getRed() / 255f; float g = c.getRed() / 255f;
float h = c.getGreen() / 255f; float h = c.getGreen() / 255f;
float k = c.getBlue() / 255f; float k = c.getBlue() / 255f;
float f = c.getAlpha() / 255f; float f = c.getAlpha() / 255f;
Matrix4f m = R3D.getEmptyMatrixStack().peek().getPositionMatrix(); Matrix4f m = stack.peek().getPositionMatrix();
BufferBuilder bufferBuilder = Tessellator.getInstance().getBuffer(); BufferBuilder bufferBuilder = Tessellator.getInstance().getBuffer();
RenderSystem.defaultBlendFunc(); RenderSystem.defaultBlendFunc();
RenderSystem.enableBlend(); RenderSystem.enableBlend();

View file

@ -1,102 +0,0 @@
package me.x150.sipprivate.mixin;
import com.mojang.blaze3d.systems.RenderSystem;
import me.x150.sipprivate.feature.gui.FastTickable;
import me.x150.sipprivate.feature.gui.clickgui.ClickGUI;
import me.x150.sipprivate.helper.font.FontRenderers;
import me.x150.sipprivate.helper.render.Renderer;
import net.minecraft.client.gui.widget.ButtonWidget;
import net.minecraft.client.gui.widget.ClickableWidget;
import net.minecraft.client.gui.widget.CyclingButtonWidget;
import net.minecraft.client.gui.widget.SliderWidget;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.text.Text;
import net.minecraft.util.math.MathHelper;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import java.awt.*;
@SuppressWarnings("ConstantConditions")
@Mixin(ClickableWidget.class)
public abstract class AButtonWidgetMixin implements FastTickable {
final Color unselectedColor = new Color(25, 44, 49, 70);
final Color disabledColor = new Color(0, 0, 0, 70);
@Shadow
public int x;
@Shadow
public int y;
@Shadow
public boolean active;
@Shadow
protected int width;
@Shadow
protected int height;
double animProg = 0;
@Shadow
public abstract boolean isHovered();
@Shadow
public abstract Text getMessage();
@Override
public void onFastTick() {
double e = 0.03d;
if (!this.isHovered() || !this.active) {
e *= -1;
}
//else if (animProg < 0.3) animProg = 0.3d;
animProg += e;
animProg = MathHelper.clamp(animProg, 0, 1);
}
@Inject(method = "renderButton", at = @At("HEAD"), cancellable = true)
public void atomic_renderButton(MatrixStack matrices, int mouseX, int mouseY, float delta, CallbackInfo ci) {
double dxStart, dyStart, dWidth, dHeight;
if ((((Object) this) instanceof ButtonWidget) || (((Object) this) instanceof CyclingButtonWidget<?>)) {
dxStart = x;
dyStart = y;
dWidth = width;
dHeight = height;
} else if (((Object) this) instanceof SliderWidget inst) {
ISliderWidgetAccessor accessor = (ISliderWidgetAccessor) inst;
double sliderValueProg = accessor.getValue();
dHeight = 20;
dWidth = 2;
dxStart = (int) (x + (sliderValueProg * (width - 1))); // wtf why
dyStart = y;
} else {
return;
}
ci.cancel();
RenderSystem.setShaderColor(1f, 1f, 1f, 1f);
animProg = MathHelper.clamp(animProg, 0, 1);
double interpolatedAProg = ease(this.animProg);
boolean isSlider = ((Object) this) instanceof SliderWidget;
if (!isSlider) {
// double rw = Renderer.Util.lerp(width, 0, interpolatedAProg) / 2d;
if (interpolatedAProg != 0) {
// Renderer.R2D.fill(matrices, ClickGUI.theme.getAccent(), x + (width / 2d) - rw, y + height - 1, x + (width / 2d) + rw, y + height);
Renderer.R2D.renderQuad(matrices, ClickGUI.theme.getAccent(), x, y, x + 1, y + interpolatedAProg * height);
}
} else {
Renderer.R2D.renderQuad(matrices, ClickGUI.theme.getAccent(), dxStart, dyStart, dxStart + dWidth, dyStart + dHeight);
}
Renderer.R2D.renderQuad(matrices, this.active ? Renderer.Util.lerp(new Color(38, 83, 92, 100), unselectedColor, interpolatedAProg) : disabledColor, x, y, x + width, y + height);
FontRenderers.getNormal()
.drawCenteredString(matrices, this.getMessage().getString(), this.x + this.width / 2f, this.y + (this.height - FontRenderers.getNormal().getFontHeight()) / 2f, 0xFFFFFF);
}
double ease(double x) {
return x < 0.5 ? 16 * x * x * x * x * x : 1 - Math.pow(-2 * x + 2, 5) / 2;
}
}

View file

@ -5,12 +5,9 @@ import me.x150.sipprivate.feature.command.CommandRegistry;
import me.x150.sipprivate.feature.gui.screen.CoffeeConsoleScreen; import me.x150.sipprivate.feature.gui.screen.CoffeeConsoleScreen;
import me.x150.sipprivate.feature.module.ModuleRegistry; import me.x150.sipprivate.feature.module.ModuleRegistry;
import me.x150.sipprivate.feature.module.impl.misc.InfChatLength; import me.x150.sipprivate.feature.module.impl.misc.InfChatLength;
import me.x150.sipprivate.helper.font.FontRenderers;
import me.x150.sipprivate.helper.render.Renderer;
import me.x150.sipprivate.helper.util.Utils; import me.x150.sipprivate.helper.util.Utils;
import net.minecraft.client.gui.screen.ChatScreen; import net.minecraft.client.gui.screen.ChatScreen;
import net.minecraft.client.gui.widget.TextFieldWidget; import net.minecraft.client.gui.widget.TextFieldWidget;
import net.minecraft.client.util.math.MatrixStack;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
@ -20,7 +17,8 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(ChatScreen.class) @Mixin(ChatScreen.class)
public class AChatScreenMixin { public class AChatScreenMixin {
@Shadow protected TextFieldWidget chatField; @Shadow
protected TextFieldWidget chatField;
@Redirect(method = "keyPressed", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/ChatScreen;sendMessage(Ljava/lang/String;)V")) @Redirect(method = "keyPressed", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/ChatScreen;sendMessage(Ljava/lang/String;)V"))
void atomic_interceptChatMessage(ChatScreen instance, String s) { void atomic_interceptChatMessage(ChatScreen instance, String s) {
@ -34,7 +32,8 @@ public class AChatScreenMixin {
} }
} }
@Inject(method = "onChatFieldUpdate", at = @At("HEAD")) public void atomic_preChatFieldUpdate(String chatText, CallbackInfo ci) { @Inject(method = "onChatFieldUpdate", at = @At("HEAD"))
public void atomic_preChatFieldUpdate(String chatText, CallbackInfo ci) {
chatField.setMaxLength((ModuleRegistry.getByClass(InfChatLength.class).isEnabled()) ? Integer.MAX_VALUE : 256); chatField.setMaxLength((ModuleRegistry.getByClass(InfChatLength.class).isEnabled()) ? Integer.MAX_VALUE : 256);
} }
} }

View file

@ -30,7 +30,8 @@ public class ClientPlayerEntityMixin {
} }
} }
@Redirect(method = "updateNausea", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/Screen;isPauseScreen()Z")) public boolean atomic_overwriteIsPauseScreen(Screen screen) { @Redirect(method = "updateNausea", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/Screen;isPauseScreen()Z"))
public boolean atomic_overwriteIsPauseScreen(Screen screen) {
return Objects.requireNonNull(ModuleRegistry.getByClass(PortalGUI.class)).isEnabled() || screen.isPauseScreen(); return Objects.requireNonNull(ModuleRegistry.getByClass(PortalGUI.class)).isEnabled() || screen.isPauseScreen();
} }
} }

View file

@ -14,10 +14,12 @@ import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.Redirect;
@Mixin(Deadmau5FeatureRenderer.class) public class Deadmau5FeatureRendererMixin { @Mixin(Deadmau5FeatureRenderer.class)
public class Deadmau5FeatureRendererMixin {
@Redirect(method = "render(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;ILnet/minecraft/client/network/AbstractClientPlayerEntity;FFFFFF)V", @Redirect(method = "render(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;ILnet/minecraft/client/network/AbstractClientPlayerEntity;FFFFFF)V",
at = @At(value = "INVOKE", target = "Ljava/lang/String;equals(Ljava/lang/Object;)Z")) boolean atomic_overwriteNameMatcher(String s, Object anObject) { at = @At(value = "INVOKE", target = "Ljava/lang/String;equals(Ljava/lang/Object;)Z"))
boolean atomic_overwriteNameMatcher(String s, Object anObject) {
if (ModuleRegistry.getByClass(Deadmau5.class).isEnabled()) { if (ModuleRegistry.getByClass(Deadmau5.class).isEnabled()) {
return true; return true;
} }

View file

@ -1,17 +1,21 @@
package me.x150.sipprivate.mixin; package me.x150.sipprivate.mixin;
import me.x150.sipprivate.CoffeeClientMain; import me.x150.sipprivate.CoffeeClientMain;
import me.x150.sipprivate.feature.gui.DoesMSAA;
import me.x150.sipprivate.feature.module.Module; import me.x150.sipprivate.feature.module.Module;
import me.x150.sipprivate.feature.module.ModuleRegistry; import me.x150.sipprivate.feature.module.ModuleRegistry;
import me.x150.sipprivate.helper.manager.ImGuiManager; import me.x150.sipprivate.helper.manager.ImGuiManager;
import me.x150.sipprivate.helper.render.MSAAFramebuffer; import me.x150.sipprivate.helper.render.MSAAFramebuffer;
import me.x150.sipprivate.helper.render.Renderer; import me.x150.sipprivate.helper.render.Renderer;
import net.minecraft.client.gui.Element;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.render.GameRenderer; import net.minecraft.client.render.GameRenderer;
import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.util.math.MatrixStack;
import org.objectweb.asm.Opcodes; import org.objectweb.asm.Opcodes;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.Redirect;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(GameRenderer.class) @Mixin(GameRenderer.class)
@ -48,6 +52,20 @@ public class GameRendererMixin {
} }
} }
@Redirect(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/Screen;render(Lnet/minecraft/client/util/math/MatrixStack;IIF)V"))
void coffee_msaaScreenRender(Screen instance, MatrixStack matrices, int mouseX, int mouseY, float delta) {
boolean shouldMsaa = false;
for (Element child : instance.children()) {
if (child instanceof DoesMSAA) {
shouldMsaa = true;
break;
}
}
if (shouldMsaa) {
MSAAFramebuffer.use(MSAAFramebuffer.MAX_SAMPLES, () -> instance.render(matrices, mouseX, mouseY, delta));
} else instance.render(matrices, mouseX, mouseY, delta);
}
@Inject(at = @At("HEAD"), method = "renderWorld") @Inject(at = @At("HEAD"), method = "renderWorld")
private void atomic_preRenderWorld(float tickDelta, long limitTime, MatrixStack matrix, CallbackInfo ci) { private void atomic_preRenderWorld(float tickDelta, long limitTime, MatrixStack matrix, CallbackInfo ci) {
dis = true; dis = true;

View file

@ -14,9 +14,11 @@ import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
@Mixin(SharedConstants.class) public class SharedConstantsMixin { @Mixin(SharedConstants.class)
public class SharedConstantsMixin {
@Inject(method = "isValidChar", at = @At("HEAD"), cancellable = true) private static void atomic_replaceValidChar(char chr, CallbackInfoReturnable<Boolean> cir) { @Inject(method = "isValidChar", at = @At("HEAD"), cancellable = true)
private static void atomic_replaceValidChar(char chr, CallbackInfoReturnable<Boolean> cir) {
if (ModuleRegistry.getByClass(AllowFormatCodes.class).isEnabled() && chr == '§') { if (ModuleRegistry.getByClass(AllowFormatCodes.class).isEnabled() && chr == '§') {
cir.setReturnValue(true); cir.setReturnValue(true);
} }

View file

@ -1,10 +1,8 @@
package me.x150.sipprivate.mixin; package me.x150.sipprivate.mixin;
import me.x150.sipprivate.CoffeeClientMain; import me.x150.sipprivate.feature.gui.screen.HomeScreen;
import me.x150.sipprivate.feature.gui.screen.AltManagerScreen;
import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.screen.TitleScreen; import net.minecraft.client.gui.screen.TitleScreen;
import net.minecraft.client.gui.widget.ButtonWidget;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
@ -19,9 +17,6 @@ public class TitleScreenMixin extends Screen {
@Inject(method = "init", at = @At("RETURN")) @Inject(method = "init", at = @At("RETURN"))
void real(CallbackInfo ci) { void real(CallbackInfo ci) {
ButtonWidget bw = new ButtonWidget(5, 5, 100, 20, Text.of("Alts"), button -> { client.setScreen(HomeScreen.instance());
CoffeeClientMain.client.setScreen(AltManagerScreen.instance());
});
addDrawableChild(bw);
} }
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

View file

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 23 KiB

View file

@ -1 +1,4 @@
k Added home screen
Removed custom buttons
Reformat
Fixed stupid bug with the alt screen

View file

@ -5,7 +5,6 @@
"mixins": [ "mixins": [
"AbstractBlockStateMixin", "AbstractBlockStateMixin",
"AbstractClientPlayerEntityMixin", "AbstractClientPlayerEntityMixin",
"AButtonWidgetMixin",
"AChatScreenMixin", "AChatScreenMixin",
"AEntityRendererMixin", "AEntityRendererMixin",
"AGenericContainerScreenMixin", "AGenericContainerScreenMixin",

View file

@ -0,0 +1 @@
0