raven-bs-v2/src/main/java/keystrokesmod/module/impl/player/Blink.java

169 lines
6.7 KiB
Java

package keystrokesmod.module.impl.player;
import keystrokesmod.Raven;
import keystrokesmod.event.PreUpdateEvent;
import keystrokesmod.event.SendPacketEvent;
import keystrokesmod.module.Module;
import keystrokesmod.module.ModuleManager;
import keystrokesmod.module.setting.impl.ButtonSetting;
import keystrokesmod.module.setting.impl.DescriptionSetting;
import keystrokesmod.module.setting.impl.SliderSetting;
import keystrokesmod.utility.PacketUtils;
import keystrokesmod.utility.RenderUtils;
import keystrokesmod.utility.Theme;
import keystrokesmod.utility.Utils;
import keystrokesmod.utility.ModuleUtils;
import net.minecraft.client.gui.ScaledResolution;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.network.Packet;
import net.minecraft.network.handshake.client.C00Handshake;
import net.minecraft.network.login.client.C00PacketLoginStart;
import net.minecraft.network.login.client.C01PacketEncryptionResponse;
import net.minecraft.network.play.client.C00PacketKeepAlive;
import net.minecraft.network.play.client.C0FPacketConfirmTransaction;
import net.minecraft.network.status.client.C00PacketServerQuery;
import net.minecraft.network.status.client.C01PacketPing;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.Vec3;
import net.minecraftforge.client.event.RenderWorldLastEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.gameevent.TickEvent;
import org.lwjgl.opengl.GL11;
import java.awt.*;
import java.util.concurrent.ConcurrentLinkedQueue;
import static keystrokesmod.module.impl.render.HUD.theme;
public class Blink extends Module {
private static SliderSetting maximumBlinkTicks;
private ButtonSetting initialPosition;
private ButtonSetting renderTimer;
private ButtonSetting disableOnBreak;
private ConcurrentLinkedQueue<Packet> blinkedPackets = new ConcurrentLinkedQueue<>();
private Vec3 pos;
//final private int color = Theme.getGradient((int) theme.getInput(), 255);
final private int color = new Color(0, 187, 255, 255).getRGB();
private int blinkTicks;
private boolean started;
public Blink() {
super("Blink", category.player);
this.registerSetting(maximumBlinkTicks = new SliderSetting("Max Blink Ticks", "", 0, 0, 40, 1));
this.registerSetting(new DescriptionSetting("0 = no max"));
this.registerSetting(initialPosition = new ButtonSetting("Show initial position", true));
this.registerSetting(renderTimer = new ButtonSetting("Render Timer", false));
this.registerSetting(disableOnBreak = new ButtonSetting("Disable on Break", false));
}
@Override
public void onEnable() {
blinkedPackets.clear();
pos = new Vec3(mc.thePlayer.posX, mc.thePlayer.posY, mc.thePlayer.posZ);
}
public void onDisable() {
synchronized (blinkedPackets) {
for (Packet packet : blinkedPackets) {
Raven.packetsHandler.handlePacket(packet);
PacketUtils.sendPacketNoEvent(packet);
}
}
blinkedPackets.clear();
pos = null;
blinkTicks = 0;
started = false;
}
@SubscribeEvent
public void onSendPacket(SendPacketEvent e) {
if (!Utils.nullCheck()) {
this.disable();
return;
}
if (ModuleManager.killAura.lag || ModuleManager.killAura.justUnTargeted || ModuleManager.killAura.target != null) {
return;
}
if (disableOnBreak.isToggled() && (Utils.usingBedAura() || ModuleUtils.isBreaking)) {
disable();
return;
}
Packet packet = e.getPacket();
if (e.isCanceled() || packet.getClass().getSimpleName().startsWith("S") || packet instanceof C00PacketLoginStart || packet instanceof C00Handshake) {
return;
}
started = true;
blinkedPackets.add(packet);
e.setCanceled(true);
}
@Override
public String getInfo() {
return blinkTicks + "";
}
@SubscribeEvent
public void onPreUpdate(PreUpdateEvent e) {
if (started) ++blinkTicks;
if (maximumBlinkTicks.getInput() != 0) {
if (blinkTicks >= maximumBlinkTicks.getInput()) {
disable();
}
}
}
@SubscribeEvent
public void onRenderTick(TickEvent.RenderTickEvent ev) {
if (!Utils.nullCheck() || !renderTimer.isToggled()) {
return;
}
if (ev.phase == TickEvent.Phase.END) {
if (mc.currentScreen != null) {
return;
}
}
int widthOffset = (blinkTicks < 10) ? 4 : (blinkTicks >= 10 && blinkTicks < 100) ? 7 : (blinkTicks >= 100 && blinkTicks < 1000) ? 10 : (blinkTicks >= 1000) ? 13 : 16;
String text = ("" + blinkTicks);
int width = mc.fontRendererObj.getStringWidth(text) + Utils.getBoldWidth(text) / 2;
final ScaledResolution scaledResolution = new ScaledResolution(mc);
int[] display = {scaledResolution.getScaledWidth(), scaledResolution.getScaledHeight(), scaledResolution.getScaleFactor()};
mc.fontRendererObj.drawString(text, display[0] / 2 - width + widthOffset, display[1] / 2 + 8, color, true);
//render.text(text, disp[0] / 2 - wid, disp[1] / 2 + 8, 1, -1, true);
}
@SubscribeEvent
public void onRenderWorld(RenderWorldLastEvent e) {
if (!Utils.nullCheck() || pos == null || !initialPosition.isToggled()) {
return;
}
drawBox(pos);
}
private void drawBox(Vec3 pos) {
GlStateManager.pushMatrix();
double x = pos.xCoord - mc.getRenderManager().viewerPosX;
double y = pos.yCoord - mc.getRenderManager().viewerPosY;
double z = pos.zCoord - mc.getRenderManager().viewerPosZ;
AxisAlignedBB bbox = mc.thePlayer.getEntityBoundingBox().expand(0.1D, 0.1, 0.1);
AxisAlignedBB axis = new AxisAlignedBB(bbox.minX - mc.thePlayer.posX + x, bbox.minY - mc.thePlayer.posY + y, bbox.minZ - mc.thePlayer.posZ + z, bbox.maxX - mc.thePlayer.posX + x, bbox.maxY - mc.thePlayer.posY + y, bbox.maxZ - mc.thePlayer.posZ + z);
float a = (float) (color >> 24 & 255) / 255.0F;
float r = (float) (color >> 16 & 255) / 255.0F;
float g = (float) (color >> 8 & 255) / 255.0F;
float b = (float) (color & 255) / 255.0F;
GL11.glBlendFunc(770, 771);
GL11.glEnable(3042);
GL11.glDisable(3553);
GL11.glDisable(2929);
GL11.glDepthMask(false);
GL11.glLineWidth(2.0F);
GL11.glColor4f(r, g, b, a);
RenderUtils.drawBoundingBox(axis, r, g, b);
GL11.glEnable(3553);
GL11.glEnable(2929);
GL11.glDepthMask(true);
GL11.glDisable(3042);
GlStateManager.popMatrix();
}
}