# Conflicts:
#	src/main/java/net/minecraft/client/Minecraft.java
#	src/main/java/rip/athena/client/Athena.java
This commit is contained in:
Rxn69 2023-07-12 23:05:07 +05:30
commit 0a3ffa6d9a
439 changed files with 5121 additions and 803 deletions

View File

@ -9,6 +9,7 @@ import com.mojang.authlib.minecraft.MinecraftSessionService;
import com.mojang.authlib.properties.Property;
import com.mojang.authlib.properties.PropertyMap;
import com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService;
import lombok.Setter;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.client.audio.MusicTicker;
@ -170,6 +171,8 @@ public class Minecraft implements IThreadListener, IPlayerUsage
private Entity renderViewEntity;
public Entity pointedEntity;
public EffectRenderer effectRenderer;
@Setter
public Session session;
private boolean isGamePaused;
@ -1175,7 +1178,7 @@ public class Minecraft implements IThreadListener, IPlayerUsage
if(athenaSplashScreen.isDone) {
if(Athena.INSTANCE.getModuleRepository().get(MotionBlur.class).isToggled()) {
if(Minecraft.getMinecraft().thePlayer != null) {
if(Minecraft.getMinecraft().thePlayer != null && Minecraft.getMinecraft().currentScreen == null) {
MotionBlur.createAccumulation();
}
}

View File

@ -13,6 +13,9 @@ import net.minecraft.client.resources.I18n;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.lwjgl.input.Keyboard;
import rip.athena.client.Athena;
import javax.swing.table.AbstractTableModel;
public class GuiMultiplayer extends GuiScreen implements GuiYesNoCallback
{
@ -145,6 +148,10 @@ public class GuiMultiplayer extends GuiScreen implements GuiYesNoCallback
if (button.id == 2 && guilistextended$iguilistentry instanceof ServerListEntryNormal)
{
if(Athena.INSTANCE.getPartnerManager().isPartner(((ServerListEntryNormal)guilistextended$iguilistentry).getServerData().serverIP)) {
return;
}
String s4 = ((ServerListEntryNormal)guilistextended$iguilistentry).getServerData().serverName;
if (s4 != null)
@ -174,6 +181,10 @@ public class GuiMultiplayer extends GuiScreen implements GuiYesNoCallback
}
else if (button.id == 7 && guilistextended$iguilistentry instanceof ServerListEntryNormal)
{
if(Athena.INSTANCE.getPartnerManager().isPartner(((ServerListEntryNormal)guilistextended$iguilistentry).getServerData().serverIP)) {
return;
}
this.editingServer = true;
ServerData serverdata = ((ServerListEntryNormal)guilistextended$iguilistentry).getServerData();
this.selectedServer = new ServerData(serverdata.serverName, serverdata.serverIP, false);
@ -465,6 +476,11 @@ public class GuiMultiplayer extends GuiScreen implements GuiYesNoCallback
public void func_175391_a(ServerListEntryNormal p_175391_1_, int p_175391_2_, boolean p_175391_3_)
{
int i = p_175391_3_ ? 0 : p_175391_2_ - 1;
if(Athena.INSTANCE.getPartnerManager().isPartner(getServerList().getServerData(i).serverIP)) {
return;
}
this.savedServerList.swapServers(p_175391_2_, i);
if (this.serverListSelector.func_148193_k() == p_175391_2_)
@ -478,6 +494,11 @@ public class GuiMultiplayer extends GuiScreen implements GuiYesNoCallback
public void func_175393_b(ServerListEntryNormal p_175393_1_, int p_175393_2_, boolean p_175393_3_)
{
int i = p_175393_3_ ? this.savedServerList.countServers() - 1 : p_175393_2_ + 1;
if(Athena.INSTANCE.getPartnerManager().isPartner(getServerList().getServerData(i).serverIP)) {
return;
}
this.savedServerList.swapServers(p_175393_2_, i);
if (this.serverListSelector.func_148193_k() == p_175393_2_)

View File

@ -660,7 +660,9 @@ public abstract class GuiScreen extends Gui implements GuiYesNoCallback
}
else
{
GlStateManager.pushMatrix();
DrawUtils.drawImage(new ResourceLocation("Athena/menu/wallpaper3.png"), 0, 0, width, height);
GlStateManager.popMatrix();
//this.drawBackground(tint);
}
}

View File

@ -21,6 +21,8 @@ import net.minecraft.util.ResourceLocation;
import org.apache.commons.lang3.Validate;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import rip.athena.client.Athena;
import rip.athena.client.utils.render.DrawUtils;
public class ServerListEntryNormal implements GuiListExtended.IGuiListEntry
{
@ -47,6 +49,12 @@ public class ServerListEntryNormal implements GuiListExtended.IGuiListEntry
public void drawEntry(int slotIndex, int x, int y, int listWidth, int slotHeight, int mouseX, int mouseY, boolean isSelected)
{
if(Athena.INSTANCE.getPartnerManager().isPartner(field_148303_c.getServerList().getServerData(slotIndex).serverIP)) {
GlStateManager.pushMatrix();
DrawUtils.drawImage(new ResourceLocation("Athena/gui/partner/star.png"), x-20, y+8, 10, 10);
GlStateManager.popMatrix();
}
if (!this.field_148301_e.field_78841_f)
{
this.field_148301_e.field_78841_f = true;
@ -202,6 +210,10 @@ public class ServerListEntryNormal implements GuiListExtended.IGuiListEntry
}
}
if(Athena.INSTANCE.getPartnerManager().isPartner(field_148303_c.getServerList().getServerData(slotIndex).serverIP)) {
return;
}
if (this.field_148303_c.func_175392_a(this, slotIndex))
{
if (k1 < 16 && l1 < 16)
@ -303,12 +315,20 @@ public class ServerListEntryNormal implements GuiListExtended.IGuiListEntry
if (p_148278_5_ < 16 && p_148278_6_ < 16 && this.field_148303_c.func_175392_a(this, slotIndex))
{
if(Athena.INSTANCE.getPartnerManager().isPartner(field_148303_c.getServerList().getServerData(slotIndex).serverIP)) {
return true;
}
this.field_148303_c.func_175391_a(this, slotIndex, GuiScreen.isShiftKeyDown());
return true;
}
if (p_148278_5_ < 16 && p_148278_6_ > 16 && this.field_148303_c.func_175394_b(this, slotIndex))
{
if(Athena.INSTANCE.getPartnerManager().isPartner(field_148303_c.getServerList().getServerData(slotIndex).serverIP)) {
return true;
}
this.field_148303_c.func_175393_b(this, slotIndex, GuiScreen.isShiftKeyDown());
return true;
}

View File

@ -70,13 +70,11 @@ public class ModelPlayer extends ModelBiped
/**
* Sets the models various rotation angles then renders the model.
*/
public void render(Entity entityIn, float p_78088_2_, float p_78088_3_, float p_78088_4_, float p_78088_5_, float p_78088_6_, float scale)
{
public void render(Entity entityIn, float p_78088_2_, float p_78088_3_, float p_78088_4_, float p_78088_5_, float p_78088_6_, float scale) {
super.render(entityIn, p_78088_2_, p_78088_3_, p_78088_4_, p_78088_5_, p_78088_6_, scale);
GlStateManager.pushMatrix();
if (this.isChild)
{
if (this.isChild) {
float f = 2.0F;
GlStateManager.scale(1.0F / f, 1.0F / f, 1.0F / f);
GlStateManager.translate(0.0F, 24.0F * scale, 0.0F);
@ -85,11 +83,8 @@ public class ModelPlayer extends ModelBiped
this.bipedLeftArmwear.render(scale);
this.bipedRightArmwear.render(scale);
this.bipedBodyWear.render(scale);
}
else
{
if (entityIn.isSneaking())
{
} else {
if (entityIn.isSneaking()) {
GlStateManager.translate(0.0F, 0.2F, 0.0F);
}

View File

@ -1,5 +1,6 @@
package net.minecraft.client.multiplayer;
import java.awt.*;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
@ -18,6 +19,7 @@ import net.minecraft.util.ChatComponentText;
import net.minecraft.util.ChatComponentTranslation;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import rip.athena.client.utils.render.RoundedUtils;
public class GuiConnecting extends GuiScreen
{

View File

@ -9,6 +9,8 @@ import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import rip.athena.api.partner.Partner;
import rip.athena.client.Athena;
public class ServerList
{
@ -33,6 +35,11 @@ public class ServerList
try
{
this.servers.clear();
for(Partner partner : Athena.INSTANCE.getPartnerManager().getPartners()) {
servers.add(new ServerData(partner.getName(), partner.getIp(), false));
}
NBTTagCompound nbttagcompound = CompressedStreamTools.read(new File(this.mc.mcDataDir, "servers.dat"));
if (nbttagcompound == null)
@ -65,6 +72,10 @@ public class ServerList
for (ServerData serverdata : this.servers)
{
if(Athena.INSTANCE.getPartnerManager().isPartner(serverdata.serverIP)) {
continue;
}
nbttaglist.appendTag(serverdata.getNBTCompound());
}

View File

@ -178,7 +178,7 @@ public class EntityRenderer implements IResourceManagerReloadListener
private double cameraZoom = 1.0D;
private double cameraYaw;
private double cameraPitch;
private ShaderGroup theShaderGroup;
public ShaderGroup theShaderGroup;
private static final ResourceLocation[] shaderResourceLocations = new ResourceLocation[] {new ResourceLocation("shaders/post/notch.json"), new ResourceLocation("shaders/post/fxaa.json"), new ResourceLocation("shaders/post/art.json"), new ResourceLocation("shaders/post/bumpy.json"), new ResourceLocation("shaders/post/blobs2.json"), new ResourceLocation("shaders/post/pencil.json"), new ResourceLocation("shaders/post/color_convolve.json"), new ResourceLocation("shaders/post/deconverge.json"), new ResourceLocation("shaders/post/flip.json"), new ResourceLocation("shaders/post/invert.json"), new ResourceLocation("shaders/post/ntsc.json"), new ResourceLocation("shaders/post/outline.json"), new ResourceLocation("shaders/post/phosphor.json"), new ResourceLocation("shaders/post/scan_pincushion.json"), new ResourceLocation("shaders/post/sobel.json"), new ResourceLocation("shaders/post/bits.json"), new ResourceLocation("shaders/post/desaturate.json"), new ResourceLocation("shaders/post/green.json"), new ResourceLocation("shaders/post/blur.json"), new ResourceLocation("shaders/post/wobble.json"), new ResourceLocation("shaders/post/blobs.json"), new ResourceLocation("shaders/post/antialias.json"), new ResourceLocation("shaders/post/creeper.json"), new ResourceLocation("shaders/post/spider.json")};
public static final int shaderCount = shaderResourceLocations.length;
private int shaderIndex;

View File

@ -465,72 +465,29 @@ public abstract class Render<T extends Entity>
}*/
}
if (str.equals("deadmau5"))
{
b0 = -10;
}
if (entityIn instanceof AbstractClientPlayer) {
String username = ((AbstractClientPlayer) entityIn).getGameProfile().getId().toString();
int i = fontrenderer.getStringWidth(str) / 2;
GlStateManager.disableTexture2D();
worldrenderer.begin(7, DefaultVertexFormats.POSITION_COLOR);
worldrenderer.pos((double)(-i - 1), (double)(-1 + b0), 0.0D).color(0.0F, 0.0F, 0.0F, 0.25F).endVertex();
worldrenderer.pos((double)(-i - 1), (double)(8 + b0), 0.0D).color(0.0F, 0.0F, 0.0F, 0.25F).endVertex();
worldrenderer.pos((double)(i + 1), (double)(8 + b0), 0.0D).color(0.0F, 0.0F, 0.0F, 0.25F).endVertex();
worldrenderer.pos((double)(i + 1), (double)(-1 + b0), 0.0D).color(0.0F, 0.0F, 0.0F, 0.25F).endVertex();
tessellator.draw();
GlStateManager.enableTexture2D();
fontrenderer.drawString(str, -fontrenderer.getStringWidth(str) / 2, b0, 553648127);
GlStateManager.enableDepth();
GlStateManager.depthMask(true);
fontrenderer.drawString(str, -fontrenderer.getStringWidth(str) / 2, b0, -1);
GlStateManager.enableLighting();
GlStateManager.disableBlend();
GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
GlStateManager.popMatrix();
/*if (SocketClient.isUser(username) && Settings.socketLogo) {
int i = fontrenderer.getStringWidth(str) / 2;
GlStateManager.disableTexture2D();
worldrenderer.begin(7, DefaultVertexFormats.POSITION_COLOR);
worldrenderer.pos((double) (-i - 14), (double) (-1 + b0), 0.0D).color(0.0F, 0.0F, 0.0F, 0.25F).endVertex();
worldrenderer.pos((double) (-i - 11), (double) (8 + b0), 0.0D).color(0.0F, 0.0F, 0.0F, 0.25F).endVertex();
worldrenderer.pos((double) (i + 1), (double) (8 + b0), 0.0D).color(0.0F, 0.0F, 0.0F, 0.25F).endVertex();
worldrenderer.pos((double) (i + 1), (double) (-1 + b0), 0.0D).color(0.0F, 0.0F, 0.0F, 0.25F).endVertex();
tessellator.draw();
GlStateManager.enableTexture2D();
fontrenderer.drawString(str, -fontrenderer.getStringWidth(str) / 2, b0, 553648127);
GlStateManager.enableDepth();
GlStateManager.depthMask(true);
fontrenderer.drawString(str, -fontrenderer.getStringWidth(str) / 2, b0, -1);
GlStateManager.enableLighting();
GlStateManager.disableBlend();
GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
GlStateManager.popMatrix();
} else {*/
int i = fontrenderer.getStringWidth(str) / 2;
GlStateManager.disableTexture2D();
worldrenderer.begin(7, DefaultVertexFormats.POSITION_COLOR);
worldrenderer.pos((double)(-i - 1), (double)(-1 + b0), 0.0D).color(0.0F, 0.0F, 0.0F, 0.25F).endVertex();
worldrenderer.pos((double)(-i - 1), (double)(8 + b0), 0.0D).color(0.0F, 0.0F, 0.0F, 0.25F).endVertex();
worldrenderer.pos((double)(i + 1), (double)(8 + b0), 0.0D).color(0.0F, 0.0F, 0.0F, 0.25F).endVertex();
worldrenderer.pos((double)(i + 1), (double)(-1 + b0), 0.0D).color(0.0F, 0.0F, 0.0F, 0.25F).endVertex();
tessellator.draw();
GlStateManager.enableTexture2D();
fontrenderer.drawString(str, -fontrenderer.getStringWidth(str) / 2, b0, 553648127);
GlStateManager.enableDepth();
GlStateManager.depthMask(true);
fontrenderer.drawString(str, -fontrenderer.getStringWidth(str) / 2, b0, -1);
GlStateManager.enableLighting();
GlStateManager.disableBlend();
GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
GlStateManager.popMatrix();
//}
} else {
int i = fontrenderer.getStringWidth(str) / 2;
GlStateManager.disableTexture2D();
worldrenderer.begin(7, DefaultVertexFormats.POSITION_COLOR);
worldrenderer.pos((double)(-i - 1), (double)(-1 + b0), 0.0D).color(0.0F, 0.0F, 0.0F, 0.25F).endVertex();
worldrenderer.pos((double)(-i - 1), (double)(8 + b0), 0.0D).color(0.0F, 0.0F, 0.0F, 0.25F).endVertex();
worldrenderer.pos((double)(i + 1), (double)(8 + b0), 0.0D).color(0.0F, 0.0F, 0.0F, 0.25F).endVertex();
worldrenderer.pos((double)(i + 1), (double)(-1 + b0), 0.0D).color(0.0F, 0.0F, 0.0F, 0.25F).endVertex();
tessellator.draw();
GlStateManager.enableTexture2D();
fontrenderer.drawString(str, -fontrenderer.getStringWidth(str) / 2, b0, 553648127);
GlStateManager.enableDepth();
GlStateManager.depthMask(true);
fontrenderer.drawString(str, -fontrenderer.getStringWidth(str) / 2, b0, -1);
GlStateManager.enableLighting();
GlStateManager.disableBlend();
GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
GlStateManager.popMatrix();
}
}
}

View File

@ -11,6 +11,7 @@ import net.minecraft.block.BlockBed;
import net.minecraft.block.BlockDirectional;
import net.minecraft.block.material.Material;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.Minecraft;
import net.minecraft.command.server.CommandBlockLogic;
import net.minecraft.enchantment.EnchantmentHelper;
import net.minecraft.entity.Entity;
@ -176,6 +177,9 @@ public abstract class EntityPlayer extends EntityLivingBase
*/
public EntityFishHook fishEntity;
public int totalViolations;
public int airTicks;
public EntityPlayer(World worldIn, GameProfile gameProfileIn)
{
super(worldIn);
@ -268,6 +272,12 @@ public abstract class EntityPlayer extends EntityLivingBase
*/
public void onUpdate()
{
if(Minecraft.getMinecraft().theWorld.getBlockState(new BlockPos(this.posX, this.posY - 1, this.posZ)).getBlock() == Blocks.air) {
airTicks++;
} else {
airTicks = 0;
}
this.noClip = this.isSpectator();
if (this.isSpectator())

View File

@ -0,0 +1,37 @@
package rip.athena.api.anticheat;
import lombok.Getter;
import lombok.Setter;
import net.minecraft.entity.player.EntityPlayer;
import rip.athena.api.anticheat.annotations.ICheckMetaData;
import rip.athena.api.module.annotations.IModuleMetaData;
import java.lang.annotation.Annotation;
/**
* @author Athena Development
* @project Athena-Client
* @date 7/11/2023
*/
@Getter
@Setter
public abstract class AbstractCheck {
private String checkName;
private String checkDisplayName;
private String extraDetails;
private EnumCheckType checkType;
private long lastViolated;
public AbstractCheck() {
ICheckMetaData metaData = this.getClass().getAnnotation(ICheckMetaData.class);
this.checkDisplayName = metaData.displayName();
this.checkName = metaData.name();
this.checkType = metaData.type();
this.extraDetails = metaData.extraDetails();
}
public abstract boolean executeCheck(EntityPlayer player);
}

View File

@ -0,0 +1,82 @@
package rip.athena.api.anticheat;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.EnumChatFormatting;
import org.reflections.Reflections;
import rip.athena.api.module.Module;
import rip.athena.client.Athena;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Set;
/**
* @author Athena Development
* @project Athena-Client
* @date 7/11/2023
*/
public class CheckRepository {
private final HashMap<Class<? extends AbstractCheck>, AbstractCheck> checkList = new HashMap<>();
public CheckRepository() {
Athena.INSTANCE.sendInitializationMessage("Check Repository", false);
Reflections reflections = new Reflections("rip.athena.client.anticheat");
Set<Class<? extends AbstractCheck>> classes = reflections.getSubTypesOf(AbstractCheck.class);
for (Class<?> clazz : classes) {
try {
AbstractCheck check = (AbstractCheck) clazz.newInstance();
checkList.put(check.getClass(), check);
} catch (InstantiationException | IllegalAccessException e) {
e.printStackTrace();
}
}
Athena.INSTANCE.sendInitializationMessage("Check Repository", true);
}
public String getViolationMessage(EntityPlayer player, AbstractCheck check) {
if(check.getExtraDetails().isEmpty()) {
return EnumChatFormatting.GRAY + "[" + EnumChatFormatting.AQUA + "DETECTION" + EnumChatFormatting.GRAY + "] ┃ " + EnumChatFormatting.AQUA + player.getName() + EnumChatFormatting.WHITE + " has flagged " + EnumChatFormatting.AQUA + check.getCheckDisplayName() + EnumChatFormatting.GRAY + " ┃ [" + EnumChatFormatting.AQUA + player.totalViolations + EnumChatFormatting.GRAY + "]";
} else {
return EnumChatFormatting.GRAY + "[" + EnumChatFormatting.AQUA + "DETECTION" + EnumChatFormatting.GRAY + "] ┃ " + EnumChatFormatting.AQUA + player.getName() + EnumChatFormatting.WHITE + " has flagged " + EnumChatFormatting.AQUA + check.getCheckDisplayName() + EnumChatFormatting.GRAY + "" + EnumChatFormatting.AQUA + check.getExtraDetails() + EnumChatFormatting.GRAY + " ┃ [" + EnumChatFormatting.AQUA + player.totalViolations + EnumChatFormatting.GRAY + "]";
}
}
/**
* Retrieves a list of all registered modules.
*
* @return A list of all registered modules.
*/
public List<AbstractCheck> getChecks() {
List<AbstractCheck> checks = new ArrayList<>(checkList.values());
if (checks.isEmpty()) {
// Log a warning message indicating that there are no modules
Athena.INSTANCE.getLog().warn("No checks registered.");
}
return checks;
}
/**
* Retrieves a check with the specified name.
*
* @param name The name of the check.
* @return The check with the specified name, or null if not found.
*/
public AbstractCheck getCheck(String name) {
AbstractCheck requestedCheck = checkList.values()
.stream()
.filter(c -> c.getCheckName().equalsIgnoreCase(name))
.findFirst()
.orElse(null);
if (requestedCheck == null) {
// Log a message indicating that the module is not found
Athena.INSTANCE.getLog().warn("Tried accessing non-existing check: " + name);
}
return requestedCheck;
}
}

View File

@ -0,0 +1,27 @@
package rip.athena.api.anticheat;
import lombok.Getter;
/**
* The Category enum represents the categories of modules in the Athena Client.
* It provides predefined categories for organizing and classifying modules.
*
* @author Athena Development
* @project Athena-Client
* @date 6/1/2023
*/
@Getter
public enum EnumCheckType {
COMBAT("Combat", "COMBAT"),
MOVEMENT("Movement", "MOVEMENT"),
OTHER("Other", "OTHER");
private final String checkTypeDisplayName;
private final String checkTypeName;
EnumCheckType(String checkTypeDisplayName, String checkTypeName) {
this.checkTypeDisplayName = checkTypeDisplayName;
this.checkTypeName = checkTypeName;
}
}

View File

@ -0,0 +1,18 @@
package rip.athena.api.anticheat.annotations;
import rip.athena.api.anticheat.EnumCheckType;
import rip.athena.api.module.EnumModuleType;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface ICheckMetaData {
String name();
String displayName();
String extraDetails();
EnumCheckType type();
}

View File

@ -0,0 +1,24 @@
package rip.athena.api.partner;
/**
* @author Athena Development
* @project Athena-Client
* @date 7/12/2023
*/
public class Partner {
private String name;
private String ip;
public Partner(String name, String ip) {
this.name = name;
this.ip = ip;
}
public String getName() {
return name;
}
public String getIp() {
return ip;
}
}

View File

@ -0,0 +1,78 @@
package rip.athena.api.partner;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import rip.athena.client.Athena;
import rip.athena.client.requests.ContentType;
import rip.athena.client.requests.WebRequest;
import rip.athena.client.requests.WebRequestResult;
import java.io.IOException;
import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.List;
import java.util.NoSuchElementException;
/**
* @author Athena Development
* @project Athena-Client
* @date 7/12/2023
*/
public class PartnerManager {
private final List<Partner> partners = new ArrayList<>();
public PartnerManager() {
WebRequest request;
try {
request = new WebRequest("https://athena.rip/uploads/partners.json", "GET", ContentType.NONE, false);
} catch (MalformedURLException e) {
Athena.INSTANCE.getLog().error("Failed to make URL for partner URL." + e.getMessage());
return;
}
WebRequestResult result;
try {
result = request.connect();
Athena.INSTANCE.getLog().info(result.getData());
} catch (NoSuchElementException | IOException | JSONException e) {
Athena.INSTANCE.getLog().error("Failed to reach partner page." + e.getMessage());
return;
}
JSONArray jsonArray;
try {
jsonArray = new JSONArray(result.getData());
} catch (JSONException e) {
return;
}
for (int i = 0; i < jsonArray.length(); i++) {
try {
JSONObject partnerObject = jsonArray.getJSONObject(i);
String name = partnerObject.getString("name");
String ip = partnerObject.getString("ip");
partners.add(new Partner(name, ip));
} catch (JSONException e) {
Athena.INSTANCE.getLog().error("Failed to parse partner entry. " + e.getMessage());
}
}
}
public List<Partner> getPartners() {
return partners;
}
public boolean isPartner(String ip) {
for (Partner partner : partners) {
if (partner.getIp().equalsIgnoreCase(ip)) {
return true;
}
}
return false;
}
}

View File

@ -5,18 +5,24 @@ import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.texture.TextureManager;
import org.lwjgl.opengl.Display;
import rip.athena.api.account.AccountManager;
import rip.athena.api.anticheat.CheckRepository;
import rip.athena.api.config.save.ConfigManager;
import rip.athena.api.cosmetics.CosmeticsManager;
import rip.athena.api.event.EventBus;
import rip.athena.api.event.SubscribeEvent;
import rip.athena.api.macro.MacroManager;
import rip.athena.api.module.ModuleRepository;
import rip.athena.api.partner.PartnerManager;
import rip.athena.api.skin.SkinManager;
import rip.athena.client.events.client.ClientTickEvent;
import rip.athena.client.events.forge.FMLInitializationEvent;
import rip.athena.client.events.forge.FMLPostInitializationEvent;
import rip.athena.client.events.forge.FMLPreInitializationEvent;
import rip.athena.client.socket.SocketClient;
import rip.athena.client.theme.ThemeManager;
import rip.athena.client.ui.hud.HUDManager;
import rip.athena.client.ui.notifications.NotificationManager;
import rip.athena.client.utils.ClientSidedAntiCheat;
import rip.athena.client.utils.PrefixedLogger;
import rip.athena.client.utils.discord.DiscordRPC;
import rip.athena.client.utils.input.KeybindManager;
@ -27,8 +33,7 @@ import java.io.File;
import java.io.IOException;
import java.net.URI;
import java.nio.file.Paths;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
/**
* The Athena class represents the main class of the Athena Client.
* It encapsulates the client's name, version, build, and provides
@ -54,17 +59,20 @@ public class Athena {
private final PrefixedLogger log = new PrefixedLogger("Athena");
private final String clientName = "ATHENA";
private final String clientVersionInteger = "0.0.3";
private final String clientVersionInteger = "0.0.4";
private final String clientVersion = "(" + clientVersionInteger + ")";
private final String clientBuild = "062623";
private final String clientBuild = "071023";
private final boolean debug = false;
private final boolean debug = true;
private ClientSidedAntiCheat clientSidedAntiCheat;
private NotificationManager notificationManager;
//private CosmeticsController cosmeticsController;
private CosmeticsManager cosmeticsManager;
private ModuleRepository moduleRepository;
private CheckRepository checkRepository;
private AccountManager accountManager;
private PartnerManager partnerManager;
private ConfigManager configManager;
private ThemeManager themeManager;
private MacroManager macroManager;
@ -73,10 +81,10 @@ public class Athena {
private DiscordRPC discordRPC;
private EventBus eventBus;
private boolean hasSent = false;
private TextureManager renderEngine;
private boolean isGameRunningForeground = true;
private boolean hasSent = false;
/**
* Initializes the client resources and setup.
@ -129,7 +137,10 @@ public class Athena {
private void handleManagers() {
this.configManager = new ConfigManager(CONFIGS_DIR);
this.accountManager = new AccountManager();
this.checkRepository = new CheckRepository();
this.moduleRepository = new ModuleRepository();
this.clientSidedAntiCheat = new ClientSidedAntiCheat();
this.partnerManager = new PartnerManager();
this.themeManager = new ThemeManager();
this.macroManager = new MacroManager();
this.skinManager = new SkinManager();
@ -143,6 +154,7 @@ public class Athena {
Minecraft.athenaSplashScreen.step("Metadata", this.renderEngine);
this.configManager.postInit();
}
private void checkCosmetics() {
@ -190,6 +202,10 @@ public class Athena {
eventBus.register(macroManager);
eventBus.register(hudManager);
eventBus.register(this);
eventBus.post(new FMLPreInitializationEvent());
eventBus.post(new FMLInitializationEvent());
eventBus.post(new FMLPostInitializationEvent());
}
/**
@ -201,7 +217,6 @@ public class Athena {
public void onClientTick(ClientTickEvent event) {
if (Minecraft.getMinecraft().thePlayer != null && Minecraft.getMinecraft().theWorld != null) {
String currentUsername = Minecraft.getMinecraft().thePlayer.getGameProfile().getName();
if (!hasSent || !currentUsername.equals(SocketClient.getCurrentUsername())) {
if (hasSent) {
// Player has changed their Minecraft account, disconnect the previous user
@ -213,21 +228,13 @@ public class Athena {
// Send the modified "start" request with the username and UUID
System.out.println(SocketClient.sendRequest("start", currentUsername + ":" + uuid + ":true"));
Athena.INSTANCE.getLog().debug("Sent player initialize request");
Athena.INSTANCE.getLog().debug("Sent player initialize request" + hasSent);
SocketClient.setCurrentUsername(currentUsername);
hasSent = true;
}
} else {
if (hasSent && isGameRunningForeground) {
// Minecraft game is not running in the foreground, disconnect the user
hasSent = false; // Reset the hasSent flag
}
isGameRunningForeground = false;
}
if (Minecraft.getMinecraft().isFullScreen() || Display.isActive()) {
isGameRunningForeground = true;
clientSidedAntiCheat.runChecks();
}
}
@ -257,19 +264,4 @@ public class Athena {
public void shutdownClient() {
log.info("Shutting down client");
}
public static String getStringHash(String str, String hashType) throws NoSuchAlgorithmException
{
// hash string into byte array
MessageDigest md = MessageDigest.getInstance(hashType);
byte[] hashbytes = md.digest(str.getBytes());
// convert byte array into hex string and return
StringBuffer stringBuffer = new StringBuffer();
for (int i = 0; i < 3; i++) {
stringBuffer.append(Integer.toString((hashbytes[i] & 0xff) + 0x100, 16)
.substring(1));
}
return stringBuffer.toString();
}
}

View File

@ -0,0 +1,27 @@
package rip.athena.client.anticheat.movement.fly;
import net.minecraft.client.Minecraft;
import net.minecraft.entity.player.EntityPlayer;
import rip.athena.api.anticheat.AbstractCheck;
import rip.athena.api.anticheat.EnumCheckType;
import rip.athena.api.anticheat.annotations.ICheckMetaData;
import rip.athena.client.Athena;
/**
* @author Athena Development
* @project Athena-Client
* @date 7/11/2023
*/
@ICheckMetaData(displayName = "Fly A", name = "FlyA", extraDetails = "", type = EnumCheckType.MOVEMENT)
public class FlyA extends AbstractCheck {
@Override
public boolean executeCheck(EntityPlayer player) {
return !player.onGround && player.motionY == 0 && isMoving(player);
}
public static boolean isMoving(EntityPlayer player) {
return player.moveForward != 0F || player.moveStrafing != 0F;
}
}

View File

@ -0,0 +1,25 @@
package rip.athena.client.anticheat.movement.fly;
import net.minecraft.entity.player.EntityPlayer;
import rip.athena.api.anticheat.AbstractCheck;
import rip.athena.api.anticheat.EnumCheckType;
import rip.athena.api.anticheat.annotations.ICheckMetaData;
/**
* @author Athena Development
* @project Athena-Client
* @date 7/11/2023
*/
@ICheckMetaData(displayName = "Fly B", name = "FlyB", extraDetails = "", type = EnumCheckType.MOVEMENT)
public class FlyB extends AbstractCheck {
@Override
public boolean executeCheck(EntityPlayer player) {
return player.airTicks > 20 && player.motionY == 0 && isMoving(player);
}
public static boolean isMoving(EntityPlayer player) {
return player.moveForward != 0F || player.moveStrafing != 0F;
}
}

View File

@ -0,0 +1,21 @@
package rip.athena.client.anticheat.movement.noslow;
import net.minecraft.entity.player.EntityPlayer;
import rip.athena.api.anticheat.AbstractCheck;
import rip.athena.api.anticheat.EnumCheckType;
import rip.athena.api.anticheat.annotations.ICheckMetaData;
/**
* @author Athena Development
* @project Athena-Client
* @date 7/11/2023
*/
@ICheckMetaData(displayName = "NoSlowDown A", name = "NoSlowDownA", extraDetails = "", type = EnumCheckType.MOVEMENT)
public class NoSlownDownA extends AbstractCheck {
@Override
public boolean executeCheck(EntityPlayer player) {
return player.isBlocking() && player.isSprinting();
}
}

View File

@ -0,0 +1,43 @@
package rip.athena.client.anticheat.movement.speed;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.potion.Potion;
import net.minecraft.util.ChatComponentText;
import net.minecraft.util.EnumChatFormatting;
import rip.athena.api.anticheat.AbstractCheck;
import rip.athena.api.anticheat.EnumCheckType;
import rip.athena.api.anticheat.annotations.ICheckMetaData;
/**
* @author Athena Development
* @project Athena-Client
* @date 7/11/2023
*/
@ICheckMetaData(displayName = "Speed A", name = "SpeedA", extraDetails = "", type = EnumCheckType.MOVEMENT)
public class SpeedA extends AbstractCheck {
private double lastDist;
@Override
public boolean executeCheck(EntityPlayer player) {
return false;
/*double distX = player.posX - player.prevPosX;
double distZ = player.posZ - player.prevPosZ;
double dist = (distX * distX) + (distZ * distZ);
double lastDist = this.lastDist;
this.lastDist = dist;
float friction = 1.08F;
double shiftedLastDist = lastDist * friction;
double equalness = dist - shiftedLastDist;
// Max Jumping Speed
boolean maxSpeed = player.isPotionActive(Potion.moveSpeed) ? equalness >= 0.39 : equalness >= 0.03;
setExtraDetails(!player.onGround && maxSpeed ? "A Speed: " + EnumChatFormatting.WHITE + (Math.round(equalness * 100.0) / 100.0) : "G Speed: " + EnumChatFormatting.WHITE + (Math.round(equalness * 100.0) / 100.0));
return (maxSpeed && !player.onGround) || (equalness >= 0.07 && player.onGround);*/
}
}

View File

@ -0,0 +1,25 @@
package rip.athena.client.anticheat.movement.speed;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.potion.Potion;
import net.minecraft.util.ChatComponentText;
import net.minecraft.util.EnumChatFormatting;
import rip.athena.api.anticheat.AbstractCheck;
import rip.athena.api.anticheat.EnumCheckType;
import rip.athena.api.anticheat.annotations.ICheckMetaData;
import rip.athena.client.Athena;
/**
* @author Athena Development
* @project Athena-Client
* @date 7/11/2023
*/
@ICheckMetaData(displayName = "Speed B", name = "SpeedB", extraDetails = "", type = EnumCheckType.MOVEMENT)
public class SpeedB extends AbstractCheck {
@Override
public boolean executeCheck(EntityPlayer player) {
return false;
}
}

View File

@ -0,0 +1,21 @@
package rip.athena.client.anticheat.other;
import net.minecraft.entity.player.EntityPlayer;
import rip.athena.api.anticheat.AbstractCheck;
import rip.athena.api.anticheat.EnumCheckType;
import rip.athena.api.anticheat.annotations.ICheckMetaData;
/**
* @author Athena Development
* @project Athena-Client
* @date 7/11/2023
*/
@ICheckMetaData(displayName = "Blink", name = "BLINK", extraDetails = "", type = EnumCheckType.OTHER)
public class Blink extends AbstractCheck {
@Override
public boolean executeCheck(EntityPlayer player) {
return false;
}
}

View File

@ -0,0 +1,7 @@
package rip.athena.client.events.forge;
import rip.athena.api.event.Event;
public class FMLInitializationEvent extends Event {
}

View File

@ -0,0 +1,7 @@
package rip.athena.client.events.forge;
import rip.athena.api.event.Event;
public class FMLPostInitializationEvent extends Event {
}

View File

@ -0,0 +1,7 @@
package rip.athena.client.events.forge;
import rip.athena.api.event.Event;
public class FMLPreInitializationEvent extends Event {
}

View File

@ -0,0 +1,15 @@
package rip.athena.client.events.network;
import rip.athena.api.event.Event;
public class ServerSwitchEvent extends Event {
private String serverData;
public ServerSwitchEvent(String serverData) {
this.serverData = serverData;
}
public String getServerData() {
return serverData;
}
}

View File

@ -12,6 +12,9 @@ public class FPSBoostMod extends Module {
@ConfigValue.Boolean(name = "Disable FPS Smoothing")
private boolean disableFpsSmoothing = true;
@ConfigValue.Boolean(name = "Disable World Smoothing")
private boolean disableWorldSmoothing = true;
// Previous settings
private boolean lastFpsSmoothing;
private boolean lastWorldSmoothing;
@ -23,7 +26,7 @@ public class FPSBoostMod extends Module {
lastWorldSmoothing = Minecraft.getMinecraft().gameSettings.ofSmoothWorld;
if(disableFpsSmoothing) Minecraft.getMinecraft().gameSettings.ofSmoothFps = false;
if(lastWorldSmoothing) Minecraft.getMinecraft().gameSettings.ofSmoothFps = false;
if(disableWorldSmoothing) Minecraft.getMinecraft().gameSettings.ofSmoothFps = false;
super.onEnable();
}

View File

@ -0,0 +1,54 @@
package rip.athena.client.modules.mods;
import net.minecraft.client.Minecraft;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.ChatComponentText;
import net.minecraft.util.EnumChatFormatting;
import rip.athena.api.anticheat.AbstractCheck;
import rip.athena.api.event.SubscribeEvent;
import rip.athena.api.module.EnumModuleType;
import rip.athena.api.module.Module;
import rip.athena.api.module.annotations.IModuleMetaData;
import rip.athena.client.Athena;
import rip.athena.client.events.client.ClientTickEvent;
/**
* @author Athena Development
* @project Athena-Client
* @date 7/11/2023
*/
@IModuleMetaData(name = "Hacker Detector", type = EnumModuleType.MODS, icon = "")
public class HackerDetector extends Module {
@SubscribeEvent
public void onTick(ClientTickEvent event) {
if(mc.theWorld == null || mc.thePlayer == null) return;
for(Entity entity : mc.theWorld.getLoadedEntityList()) {
if(entity instanceof EntityPlayer) {
EntityPlayer entityPlayer = (EntityPlayer) entity;
if(entityPlayer != mc.thePlayer) {
for (AbstractCheck check : Athena.INSTANCE.getCheckRepository().getChecks()) {
if (check.executeCheck(entityPlayer) && System.currentTimeMillis() > check.getLastViolated() + 500) {
entityPlayer.totalViolations++;
check.setLastViolated(System.currentTimeMillis());
Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText(Athena.INSTANCE.getCheckRepository().getViolationMessage(entityPlayer, check)));
}
}
}
}
}
}
@Override
public void onEnable() {
super.onEnable();
}
@Override
public void onDisable() {
super.onDisable();
}
}

View File

@ -1,6 +1,7 @@
package rip.athena.client.modules.render;
import net.minecraft.client.gui.Gui;
import net.minecraft.client.renderer.GlStateManager;
import org.lwjgl.opengl.GL11;
import rip.athena.api.module.EnumModuleType;
import rip.athena.api.module.Module;
@ -127,8 +128,8 @@ public class CPS extends Module {
mc.fontRendererObj.drawStringWithShadow(string, (float) (posX), (float) posY+ 3, color.getRGB());
}
}
GL11.glColor3f(1, 1, 1);
GL11.glPopMatrix();
GlStateManager.color(1,1,1);
}
@SubscribeEvent

View File

@ -72,6 +72,7 @@ public class Crosshair extends Module {
*/
@SubscribeEvent
public void onTick(ClientTickEvent event) {
if(mc.thePlayer == null) return;
if(rainbowSpeedNerfProg >= rainbowSpeedNerf) {
if(rainbowR == 255 && rainbowG != 255 && rainbowB == 0)
rainbowG++;

View File

@ -1,6 +1,7 @@
package rip.athena.client.modules.render;
import net.minecraft.client.gui.Gui;
import net.minecraft.client.renderer.GlStateManager;
import org.lwjgl.opengl.GL11;
import rip.athena.api.module.EnumModuleType;
import rip.athena.api.module.Module;
@ -121,8 +122,8 @@ public class FPSMod extends Module {
mc.fontRendererObj.drawStringWithShadow(string, (float) (posX), (float) posY+ 3, color.getRGB());
}
}
GL11.glColor3f(1, 1, 1);
GL11.glPopMatrix();
GlStateManager.color(1,1,1);
}

View File

@ -0,0 +1,133 @@
package rip.athena.client.modules.render;
import net.minecraft.client.Minecraft;
import net.minecraft.client.entity.EntityPlayerSP;
import net.minecraft.client.gui.Gui;
import net.minecraft.client.network.NetworkPlayerInfo;
import org.lwjgl.opengl.GL11;
import rip.athena.api.config.ConfigValue;
import rip.athena.api.font.FontManager;
import rip.athena.api.module.EnumModuleType;
import rip.athena.api.module.Module;
import rip.athena.api.module.annotations.IModuleMetaData;
import rip.athena.client.Athena;
import rip.athena.client.ui.hud.HUDElement;
import rip.athena.client.utils.render.ColorUtil;
import rip.athena.client.utils.render.DrawUtils;
import rip.athena.client.utils.render.RoundedUtils;
import java.awt.*;
/**
* @author Athena Development
* @project Athena-Client
* @date 7/12/2023
*/
@IModuleMetaData(name = "Ping Display", type = EnumModuleType.RENDER, icon = "")
public class Ping extends Module {
@ConfigValue.List(name = "Display Mode", values = {"Circle", "Modern", "Fade", "Old"}, description = "Chose display of background")
private String backgroundMode = "Circle";
@ConfigValue.Boolean(name = "Background")
private boolean backGround = true;
@ConfigValue.Color(name = "Color")
private Color color = Color.WHITE;
@ConfigValue.Double(name = "Scale", min = 0.5D, max = 1.5D)
private double scaled = 1.0;
@ConfigValue.Color(name = "Background Color")
private Color background = new Color(0, 0, 0, 150);
@ConfigValue.Boolean(name = "Custom Font")
private boolean customFont = false;
@ConfigValue.Boolean(name = "Static Chroma")
private boolean isUsingStaticChroma = false;
@ConfigValue.Boolean(name = "Wave Chroma")
private boolean isUsingWaveChroma = false;
private HUDElement hud;
private int width = 56;
private int height = 18;
public Ping() {
hud = new HUDElement("ping", width, height) {
@Override
public void onRender() {
render();
}
};
hud.setX(1);
hud.setY(117);
addHUD(hud);
}
public void render() {
if (mc.gameSettings.showDebugInfo) {
return;
}
GL11.glPushMatrix();
EntityPlayerSP thePlayer = Minecraft.getMinecraft().thePlayer;
String string = "0 ms";
if (thePlayer != null) {
NetworkPlayerInfo playerInfo = Minecraft.getMinecraft().getNetHandler().getPlayerInfo(Minecraft.getMinecraft().thePlayer.getUniqueID());
string = (playerInfo == null ? "0" : playerInfo.getResponseTime()) + " ms";
}
int width = hud.getWidth();
int height = hud.getHeight();
if(backGround) {
if(backgroundMode.equalsIgnoreCase("Modern")) {
if(Athena.INSTANCE.getThemeManager().getTheme().isTriColor()) {
RoundedUtils.drawGradientRound(hud.getX(), hud.getY(), hud.getWidth(), hud.getHeight(), 6, Athena.INSTANCE.getThemeManager().getTheme().getFirstColor(), Athena.INSTANCE.getThemeManager().getTheme().getSecondColor(), Athena.INSTANCE.getThemeManager().getTheme().getThirdColor(), Athena.INSTANCE.getThemeManager().getTheme().getFirstColor());
} else {
RoundedUtils.drawGradientRound(hud.getX(), hud.getY(), hud.getWidth(), hud.getHeight(), 6, Athena.INSTANCE.getThemeManager().getTheme().getFirstColor(), Athena.INSTANCE.getThemeManager().getTheme().getFirstColor(), Athena.INSTANCE.getThemeManager().getTheme().getSecondColor(), Athena.INSTANCE.getThemeManager().getTheme().getSecondColor());
}
} else if (backgroundMode.equalsIgnoreCase("Circle")) {
RoundedUtils.drawGradientRound(hud.getX(), hud.getY(), hud.getWidth(), hud.getHeight(), 6, ColorUtil.getClientColor(0, 255), ColorUtil.getClientColor(90, 255), ColorUtil.getClientColor(180, 255), ColorUtil.getClientColor(270, 255));
} else if (backgroundMode.equalsIgnoreCase("Fade")) {
RoundedUtils.drawRoundedRect(hud.getX(), hud.getY(), hud.getX() + width, hud.getY() + height, 8.0f, Athena.INSTANCE.getThemeManager().getTheme().getAccentColor().getRGB());
} else {
Gui.drawRect(hud.getX(), hud.getY(), hud.getX() + width, hud.getY() + height, background.getRGB());
}
}
float posY = hud.getY() + 2;
float posX = hud.getX() + 9;
if(customFont) {
hud.setWidth(rip.athena.client.utils.font.FontManager.getProductSansRegular(25).width(string) + 16);
hud.setHeight((int) FontManager.baloo17.getHeight(string) + 5);
if(isUsingStaticChroma) {
DrawUtils.drawCustomFontChromaString(rip.athena.client.utils.font.FontManager.getProductSansRegular(25), string, (int) (posX), (int) posY, true, true);
} else if(isUsingWaveChroma) {
DrawUtils.drawCustomFontChromaString(rip.athena.client.utils.font.FontManager.getProductSansRegular(25), string, (int) (posX), (int) posY, false, true);
} else {
rip.athena.client.utils.font.FontManager.getProductSansRegular(25).drawString(string,(int) (posX), (int)posY, color.getRGB());
}
} else {
hud.setWidth(mc.fontRendererObj.getStringWidth(string) + 16);
hud.setHeight(mc.fontRendererObj.FONT_HEIGHT + 9);
if(isUsingStaticChroma) {
DrawUtils.drawChromaString(string, posX, posY + 3, true, true);
} else if(isUsingWaveChroma) {
DrawUtils.drawChromaString(string, posX, posY+ 3, false, true);
} else {
mc.fontRendererObj.drawStringWithShadow(string, (float) (posX), (float) posY+ 3, color.getRGB());
}
}
GL11.glColor3f(1, 1, 1);
GL11.glPopMatrix();
}
}

View File

@ -1,96 +0,0 @@
package rip.athena.client.modules.render;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.resources.I18n;
import net.minecraft.potion.Potion;
import net.minecraft.potion.PotionEffect;
import net.minecraft.util.ResourceLocation;
import rip.athena.api.config.ConfigValue;
import rip.athena.api.module.EnumModuleType;
import rip.athena.api.module.Module;
import rip.athena.api.module.annotations.IModuleMetaData;
import rip.athena.client.ui.hud.HUDElement;
import rip.athena.client.utils.font.FontManager;
import rip.athena.client.utils.render.RoundedUtils;
import java.awt.*;
import java.util.Collection;
@IModuleMetaData(name = "Potion Effects", type = EnumModuleType.RENDER, icon = "")
public class PotionEffects extends Module {
@ConfigValue.Boolean(name = "Background")
private boolean background = true;
protected static final ResourceLocation inventoryBackground = new ResourceLocation("textures/gui/container/inventory.png");
HUDElement hud;
private int width = 140;
private int height = 32;
public PotionEffects() {
hud = new HUDElement("potioneffects", width, height) {
@Override
public void onRender() {
render();
}
};
hud.setX(5);
hud.setY(300);
addHUD(hud);
}
private void render() {
int x = hud.getX();
int y = hud.getY();
int width = hud.getWidth();
int height = hud.getHeight();
Collection<PotionEffect> collection = mc.thePlayer.getActivePotionEffects();
if (!collection.isEmpty()) {
GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
GlStateManager.disableLighting();
int spacing = 35;
if (collection.size() > 5) {
spacing = 132 / (collection.size() - 1);
}
for (PotionEffect potioneffect : mc.thePlayer.getActivePotionEffects()) {
Potion potion = Potion.potionTypes[potioneffect.getPotionID()];
GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
mc.getTextureManager().bindTexture(inventoryBackground);
if(background) {
RoundedUtils.drawRound(x, y, width, height, 6, new Color(0, 0, 0, 150));
}
if (potion.hasStatusIcon()) {
int statusIconIndex = potion.getStatusIconIndex();
//Gui.drawTexturedModalRect(x, y + 7, statusIconIndex % 8 * 18, 198 + statusIconIndex / 8 * 18, 18, 18);
}
String s1 = I18n.format(potion.getName());
if (potioneffect.getAmplifier() == 1) {
s1 = s1 + " " + I18n.format("enchantment.level.2");
} else if (potioneffect.getAmplifier() == 2) {
s1 = s1 + " " + I18n.format("enchantment.level.3");
} else if (potioneffect.getAmplifier() == 3) {
s1 = s1 + " " + I18n.format("enchantment.level.4");
}
FontManager.getProductSansRegular(20).drawString(s1, x + 28, y + 6, -1);
String s = Potion.getDurationString(potioneffect);
FontManager.getProductSansRegular(20).drawString(s, (float) (x + 10 + 18), (float) (y + 6 + 10), -1);
// Spacing between each element
y += spacing;
}
}
}
}

View File

@ -0,0 +1,284 @@
package rip.athena.client.modules.render;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.WorldRenderer;
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
import net.minecraft.potion.Potion;
import net.minecraft.potion.PotionEffect;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.StatCollector;
import org.lwjgl.opengl.GL11;
import rip.athena.api.config.ConfigValue;
import rip.athena.api.module.EnumModuleType;
import rip.athena.api.module.Module;
import rip.athena.api.module.annotations.IModuleMetaData;
import rip.athena.client.ui.hud.HUDElement;
import rip.athena.client.utils.render.ColorUtil;
import rip.athena.client.utils.render.DrawUtils;
import rip.athena.client.utils.render.RoundedUtils;
import java.awt.*;
import java.util.*;
import java.util.List;
/**
* @author Athena Development
* @project Athena-Client
* @date 7/12/2023
*/
@IModuleMetaData(name = "Potion Status", type = EnumModuleType.RENDER, icon = "")
public class PotionStatus extends Module {
@ConfigValue.List(name = "Design", values = { "Boxes", "Icon", "Slim" })
private static String potionstatusdesign = "Boxes";
@ConfigValue.Boolean(name = "Preset Potion Color")
private boolean presetColor = true;
@ConfigValue.Boolean(name = "Custom Font")
private boolean customFont = false;
@ConfigValue.Boolean(name = "Theme Colored Box")
private boolean themeColoredBox = false;
@ConfigValue.Boolean(name = "Static Chroma")
private boolean isUsingStaticChroma = false;
@ConfigValue.Boolean(name = "Wave Chroma")
private boolean isUsingWaveChroma = false;
@ConfigValue.Color(name = "Potion Color")
private Color potionColor = Color.WHITE;
private Map<PotionEffect, Integer> potionMaxDurationMap = new HashMap<PotionEffect, Integer>();
protected float zLevel = -150.0F;
public int xOffset = 0;
public int yOffset = 10;
public int yBase;
private HUDElement hud;
private int width = 10;
private int height = 10;
public PotionStatus() {
hud = new HUDElement("potionstatus", width, height) {
@Override
public void onRender() {
render();
}
};
hud.setX(0);
hud.setY(175);
addHUD(hud);
}
public void render() {
if (mc.gameSettings.showDebugInfo) {
return;
}
Collection<?> activeEffects = mc.thePlayer.getActivePotionEffects();
if (!activeEffects.isEmpty()) {
GL11.glPushMatrix();
yBase = 0;
for (Object activeEffect : activeEffects) {
PotionEffect potionEffect = (PotionEffect) activeEffect;
if (!potionMaxDurationMap.containsKey(potionEffect)
|| potionMaxDurationMap.get(potionEffect) < potionEffect.getDuration())
potionMaxDurationMap.put(potionEffect, potionEffect.getDuration());
Potion potion = Potion.potionTypes[potionEffect.getPotionID()];
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
mc.getTextureManager().bindTexture(new ResourceLocation("textures/gui/container/inventory.png"));
boolean enableBackground = true;
int xBase = 0;
String potionName = "";
potionName = StatCollector.translateToLocal(potion.getName());
if (potionEffect.getAmplifier() == 1) {
potionName = potionName + " II";
} else if (potionEffect.getAmplifier() == 2) {
potionName = potionName + " III";
} else if (potionEffect.getAmplifier() == 3) {
potionName = potionName + " IV";
} else if (potionEffect.getAmplifier() == 4) {
potionName = potionName + " V";
} else if (potionEffect.getAmplifier() == 5) {
potionName = potionName + " VI";
} else if (potionEffect.getAmplifier() == 6) {
potionName = potionName + " VII";
} else if (potionEffect.getAmplifier() == 7) {
potionName = potionName + " VIII";
} else if (potionEffect.getAmplifier() == 8) {
potionName = potionName + " IX";
} else if (potionEffect.getAmplifier() == 9) {
potionName = potionName + " X";
} else if (potionEffect.getAmplifier() > 9) {
potionName = potionName + " " + (potionEffect.getAmplifier() + 1);
}
int posX = hud.getX();
int posY = hud.getY();
String effectDuration = Potion.getDurationString(potionEffect);
if (potionstatusdesign.contains("Boxes")) {
RoundedUtils.drawRound(1, 1, 1, 1, 1, new Color(0,0,0));
if (potion.hasStatusIcon()) {
int potionStatusIcon = potion.getStatusIconIndex();
drawTexturedModalRect((int) posX + xBase + 5, (int) posY + yBase + (enableBackground ? 7 : 0),
0 + potionStatusIcon % 8 * 18, 166 + 32 + potionStatusIcon / 8 * 18, 18, 18, zLevel);
}
if(themeColoredBox) {
RoundedUtils.drawRoundedGradientOutlineCorner(posX + xBase, (int) posY + yBase, 140 + xBase + posX, 32 + yBase + posY, 2, 6, ColorUtil.getClientColor(0, 255).getRGB(), ColorUtil.getClientColor(90, 255).getRGB(), ColorUtil.getClientColor(180, 255).getRGB(), ColorUtil.getClientColor(270, 255).getRGB());
} else {
RoundedUtils.drawRoundedOutline(posX + xBase, (int) posY + yBase, 140 + xBase + posX, 32 + yBase + posY, 6, 2, new Color(0, 0, 0, 150).getRGB());
}
if(customFont) {
if (isUsingStaticChroma) {
DrawUtils.drawCustomFontChromaString(rip.athena.client.utils.font.FontManager.getProductSansRegular(25), potionName, posX + xBase + 26, posY + yBase + 7, true, true);
DrawUtils.drawCustomFontChromaString(rip.athena.client.utils.font.FontManager.getProductSansRegular(20), effectDuration, posX + xBase + 26, posY + yBase + 18, true, true);
} else if (isUsingWaveChroma) {
DrawUtils.drawCustomFontChromaString(rip.athena.client.utils.font.FontManager.getProductSansRegular(25), potionName, posX + xBase + 26, posY + yBase + 7, false, true);
DrawUtils.drawCustomFontChromaString(rip.athena.client.utils.font.FontManager.getProductSansRegular(20), effectDuration, posX + xBase + 26, posY + yBase + 18, true, true);
} else {
rip.athena.client.utils.font.FontManager.getProductSansRegular(25).drawString(potionName, posX + xBase + 26, posY + yBase + 7, presetColor ? new Color(potion.getLiquidColor()).getRGB() : potionColor.getRGB());
rip.athena.client.utils.font.FontManager.getProductSansRegular(20).drawString(effectDuration, posX + xBase + 26, posY + yBase + 18, -1);
}
} else {
if (isUsingStaticChroma) {
DrawUtils.drawChromaString(potionName, posX + xBase + 26, posY + yBase + 7, true, true);
DrawUtils.drawChromaString(effectDuration, posX + xBase + 26, posY + yBase + 17, true, true);
} else if (isUsingWaveChroma) {
DrawUtils.drawChromaString(potionName, posX + xBase + 26, posY + yBase + 7, false, true);
DrawUtils.drawChromaString(effectDuration, posX + xBase + 26, posY + yBase + 17, false, true);
} else {
mc.fontRendererObj.drawStringWithShadow(potionName, (float) posX + xBase + 26,
(float) posY + yBase + 7, presetColor ? potion.getLiquidColor() : potionColor.getRGB());
mc.fontRendererObj.drawStringWithShadow(effectDuration, (float) posX + xBase + 26,
(float) posY + yBase + 17, 0xffffff);
}
}
/*mc.fontRendererObj.drawStringWithShadow(potionName, (float) posX + xBase + 26,
(float) posY + yBase + 7, presetColor ? potion.getLiquidColor() : potionColor.getRGB());
mc.fontRendererObj.drawStringWithShadow(effectDuration, (float) posX + xBase + 26,
(float) posY + yBase + 17, 0xffffff);*/
yBase += 35;
} else if (potionstatusdesign.contains("Slim")) {
if(customFont) {
if (isUsingStaticChroma) {
DrawUtils.drawCustomFontChromaString(rip.athena.client.utils.font.FontManager.getProductSansRegular(25), potionName + " - " + effectDuration, posX, posY + yBase + 7, true, true);
} else if (isUsingWaveChroma) {
DrawUtils.drawCustomFontChromaString(rip.athena.client.utils.font.FontManager.getProductSansRegular(25), potionName + " - " + effectDuration, posX, posY + yBase + 7, false, true);
} else {
rip.athena.client.utils.font.FontManager.getProductSansRegular(25).drawString(potionName + " - " + effectDuration, posX, posY + yBase + 7, presetColor ? new Color(potion.getLiquidColor()).getRGB() : potionColor.getRGB());
}
} else {
if (isUsingStaticChroma) {
DrawUtils.drawChromaString(potionName + " - " + effectDuration, posX, posY + yBase + 7, true, true);
} else if (isUsingWaveChroma) {
DrawUtils.drawChromaString(potionName + " - " + effectDuration, posX, posY + yBase + 7, false, true);
} else {
mc.fontRendererObj.drawStringWithShadow(potionName + " - " + effectDuration, (float) posX,
(float) posY + yBase + 7, presetColor ? potion.getLiquidColor() : potionColor.getRGB());
}
}
/*mc.fontRendererObj.drawStringWithShadow(potionName + " - " + effectDuration, (float) posX,
(float) posY + yBase + 7, presetColor ? potion.getLiquidColor() : potionColor.getRGB());*/
yBase += 10;
} else if (potionstatusdesign.contains("Icon")) {
RoundedUtils.drawRound(1, 1, 1, 1, 1, new Color(0,0,0));
if (potion.hasStatusIcon()) {
int potionStatusIcon = potion.getStatusIconIndex();
drawTexturedModalRect((int) posX + xBase, (int) posY + yBase - 2, 0 + potionStatusIcon % 8 * 18,
166 + 32 + potionStatusIcon / 8 * 18, 18, 18, zLevel);
}
if(customFont) {
if (isUsingStaticChroma) {
DrawUtils.drawCustomFontChromaString(rip.athena.client.utils.font.FontManager.getProductSansRegular(25), potionName, posX + xBase + 21, posY + yBase, true, true);
DrawUtils.drawCustomFontChromaString(rip.athena.client.utils.font.FontManager.getProductSansRegular(20), effectDuration, posX + xBase + 21, posY + yBase + 10, true, true);
} else if (isUsingWaveChroma) {
DrawUtils.drawCustomFontChromaString(rip.athena.client.utils.font.FontManager.getProductSansRegular(25), potionName, posX + xBase + 21, posY + yBase, false, true);
DrawUtils.drawCustomFontChromaString(rip.athena.client.utils.font.FontManager.getProductSansRegular(20), effectDuration, posX + xBase + 21, posY + yBase + 10, true, true);
} else {
rip.athena.client.utils.font.FontManager.getProductSansRegular(25).drawString(potionName, posX + xBase + 21, posY + yBase, presetColor ? new Color(potion.getLiquidColor()).getRGB() : potionColor.getRGB());
rip.athena.client.utils.font.FontManager.getProductSansRegular(20).drawString(effectDuration, posX + xBase + 21, posY + yBase + 10, -1);
}
} else {
if (isUsingStaticChroma) {
DrawUtils.drawChromaString(potionName, posX + xBase + 21, posY + yBase, true, true);
DrawUtils.drawChromaString(effectDuration, posX + xBase + 21, posY + yBase + 9, true, true);
} else if (isUsingWaveChroma) {
DrawUtils.drawChromaString(potionName, posX + xBase + 21, posY + yBase, false, true);
DrawUtils.drawChromaString(effectDuration, posX + xBase + 21, posY + yBase + 9, false, true);
} else {
mc.fontRendererObj.drawStringWithShadow(potionName, (float) posX + xBase + 21,
(float) posY + yBase, presetColor ? potion.getLiquidColor() : potionColor.getRGB());
mc.fontRendererObj.drawStringWithShadow(effectDuration, (float) posX + xBase + 21,
(float) posY + yBase + 9, 0xffffff);
}
}
/*mc.fontRendererObj.drawStringWithShadow(potionName, (float) posX + xBase + 21, (float) posY + yBase,
presetColor ? potion.getLiquidColor() : potionColor.getRGB());
mc.fontRendererObj.drawStringWithShadow(effectDuration, (float) posX + xBase + 21,
(float) posY + yBase + 9, presetColor ? potion.getLiquidColor() : potionColor.getRGB());*/
yBase += 24;
}
}
GL11.glScaled(1, 1, 1);
GL11.glColor3f(1, 1, 1);
GL11.glPopMatrix();
}
width = 10;
if (activeEffects.isEmpty()) {
yBase = 10;
}
if (PotionStatus.potionstatusdesign.contains("Slim")) {
width += 110;
yBase += 5;
} else {
width += 120;
}
hud.setHeight(yBase);
hud.setWidth(width);
List<PotionEffect> toRemove = new LinkedList<PotionEffect>();
for (PotionEffect pe : potionMaxDurationMap.keySet())
if (!activeEffects.contains(pe))
toRemove.add(pe);
for (PotionEffect pe : toRemove)
potionMaxDurationMap.remove(pe);
}
public void drawTexturedModalRect(int x, int y, int u, int v, int width, int height, float zLevel) {
float var7 = 0.00390625F;
float var8 = 0.00390625F;
WorldRenderer tessellator = Tessellator.getInstance().getWorldRenderer();
tessellator.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
tessellator.pos((x + 0), (y + height), zLevel).tex(((u + 0) * var7), ((v + height) * var8)).endVertex();
tessellator.pos((x + width), (y + height), zLevel).tex(((u + width) * var7), ((v + height) * var8)).endVertex();
tessellator.pos((x + width), (y + 0), zLevel).tex(((u + width) * var7), ((v + 0) * var8)).endVertex();
tessellator.pos((x + 0), (y + 0), zLevel).tex(((u + 0) * var7), ((v + 0) * var8)).endVertex();
Tessellator.getInstance().draw();
}
}

View File

@ -8,6 +8,9 @@ import java.net.SocketException;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
/**
* @author Athena Development
@ -18,6 +21,7 @@ public class SocketClient {
public static final Client client = new Client("141.145.209.142", 45376);
private static final Map<String, Boolean> userCache = new HashMap<>();
private static final long HEARTBEAT_INTERVAL = 3000;
private static Map<String, String> rankCache = new HashMap<>();
private static Map<String, Long> cacheTime = new HashMap<>();
@ -38,6 +42,14 @@ public class SocketClient {
}
}
public static void startHeartbeatCheck() {
ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
executorService.scheduleAtFixedRate(() -> {
// Send a heartbeat message to the server
client.request("heartbeat", SocketClient.getCurrentUsername());
}, 0, HEARTBEAT_INTERVAL, TimeUnit.MILLISECONDS);
}
public static Object sendRequest(String command, String payload) {
return client.request(command, payload);
}

View File

@ -2,6 +2,8 @@ package rip.athena.client.ui.clickgui;
import net.minecraft.client.gui.ScaledResolution;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.OpenGlHelper;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.ResourceLocation;
import rip.athena.api.config.save.Config;
import rip.athena.api.module.Module;

View File

@ -34,7 +34,7 @@ public class MenuModColorPicker extends MenuColorPicker {
public void onRender() {
int x = this.getRenderX();
int y = this.getRenderY();
int lineColor = getColor(DrawType.LINE, lastState);
//int lineColor = getColor(DrawType.LINE, lastState);
GlStateManager.color(1, 1, 1);
@ -43,16 +43,16 @@ public class MenuModColorPicker extends MenuColorPicker {
drawHorizontalLine(x, y + height, width + 1, 1, lineColor);
drawVerticalLine(x + width, y + 1, height - 1, 1, lineColor);*/
rip.athena.client.ui.framework.draw.DrawImpl.drawRect(x + 3, y + 2, width - 1, height - 3, lineColor);
/*rip.athena.client.ui.framework.draw.DrawImpl.drawRect(x + 3, y + 2, width - 1, height - 3, lineColor);
int index = 0;
for(int h = y; h < y + height - 5; h++) {
rip.athena.client.ui.framework.draw.DrawImpl.drawRect(x + 5, h + 3, width - 5, 1, /*disabled ? */lightenColor(index, 0, color).getRGB()/* : darkenColor(index, 7, color).getRGB()*/);
index++;
}
rip.athena.client.ui.framework.draw.DrawImpl.drawRect(x + 5, h + 3, width - 5, 1, /*disabled ? *///lightenColor(index, 0, color).getRGB()/* : darkenColor(index, 7, color).getRGB()*/);
//index++;
//}
if(startType <= 0) {
/*if(startType <= 0) {
if(alphaSlider.getParent() == null) {
alphaSlider.setParent(getParent());
}
@ -68,6 +68,6 @@ public class MenuModColorPicker extends MenuColorPicker {
}
mouseDown = false;
mouseDragging = false;
mouseDragging = false;*/
}
}

View File

@ -11,6 +11,7 @@ import rip.athena.client.config.entries.*;
import rip.athena.client.ui.framework.Menu;
import rip.athena.client.ui.framework.TextPattern;
import rip.athena.client.ui.framework.components.MenuButton;
import rip.athena.client.ui.framework.components.MenuColorPicker;
import rip.athena.client.ui.framework.components.MenuTextField;
import rip.athena.client.ui.clickgui.IngameMenu;
import rip.athena.client.ui.clickgui.Page;

View File

@ -760,7 +760,7 @@ public class SettingsPage extends Page {
} else if(configEntry instanceof ColorEntry) {
ColorEntry entry = (ColorEntry) configEntry;
toAdd.add(new MenuModColorPicker(0, 0, 15, 15, ((Color) entry.getValue(module)).getRGB()) {
toAdd.add(new MenuModNewColorPicker(0, 0, 15, 15, ((Color) entry.getValue(module)).getRGB()) {
@Override
public void onAction() {
entry.setValue(module, getColor());

View File

@ -3,6 +3,9 @@ package rip.athena.client.ui.framework;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.gui.ScaledResolution;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.OpenGlHelper;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.ResourceLocation;
import org.lwjgl.input.Keyboard;
import org.lwjgl.input.Mouse;
import rip.athena.api.module.Module;
@ -38,6 +41,14 @@ public class MinecraftMenuImpl extends GuiScreen {
*/
@Override
public void initGui() {
if (OpenGlHelper.shadersSupported && mc.getRenderViewEntity() instanceof EntityPlayer) {
if (mc.entityRenderer.theShaderGroup != null) {
mc.entityRenderer.theShaderGroup.deleteShaderGroup();
}
mc.entityRenderer.loadShader(new ResourceLocation("shaders/post/blur.json"));
}
Keyboard.enableRepeatEvents(true);
}
@ -142,7 +153,11 @@ public class MinecraftMenuImpl extends GuiScreen {
if(feature != null) {
feature.setEnabled(false);
}
if (mc.entityRenderer.theShaderGroup != null) {
mc.entityRenderer.theShaderGroup.deleteShaderGroup();
mc.entityRenderer.theShaderGroup = null;
}
ready = false;
super.onGuiClosed();
}

View File

@ -1,5 +1,6 @@
package rip.athena.client.ui.framework.components;
import net.minecraft.client.gui.Gui;
import rip.athena.client.ui.framework.MenuComponent;
import rip.athena.client.ui.framework.MenuPriority;
import rip.athena.client.ui.framework.draw.ButtonState;
@ -9,6 +10,8 @@ import net.minecraft.client.gui.ScaledResolution;
import net.minecraft.client.renderer.texture.DynamicTexture;
import net.minecraft.util.ResourceLocation;
import org.lwjgl.input.Mouse;
import rip.athena.client.utils.render.ColorUtil;
import rip.athena.client.utils.render.RoundedUtils;
import java.awt.*;
import java.awt.image.BufferedImage;
@ -20,46 +23,9 @@ import java.awt.image.BufferedImage;
*/
public class MenuColorPicker extends MenuComponent {
protected Color color;
protected Color temp;
protected Point startPos;
protected ButtonState lastState = ButtonState.NORMAL;
protected ResourceLocation colorPickerMain;
protected boolean mouseDown = false;
protected int lastYPress;
protected int startType = 0;
protected boolean wantsToDrag = false;
protected boolean mouseDragging = false;
protected boolean pickingColor = false;
protected boolean canPick = true;
protected int size = 80;
protected int colorOffset = 10;
protected int alphaOffset = 10;
protected int pickerWindowWidth = size + colorOffset;
protected int pickerWindowHeight = size + alphaOffset;
protected MenuSlider alphaSlider;
public MenuColorPicker(int x, int y, int width, int height, int defaultColor) {
super(x, y, width, height);
lastYPress = -1;
Color theColor = new Color(defaultColor, true);
color = theColor;
temp = theColor;
alphaSlider = new MenuSlider(1f, 0f, 1f, 1, 0, 0, pickerWindowWidth, 10){
@Override
public void onAction() {
color = new Color(color.getRed(), color.getGreen(), color.getBlue(), Math.round(alphaSlider.getValue() * 255));
MenuColorPicker.this.onAction();
}
};
alphaSlider.setValue((float)theColor.getAlpha() / 255);
}
@Override
@ -88,421 +54,44 @@ public class MenuColorPicker extends MenuComponent {
@Override
public void onMouseClick(int button) {
if(button == 0 && alphaSlider.passesThrough()) {
mouseDown = true;
}
alphaSlider.onMouseClick(button);
}
@Override
public void onMouseClickMove(int button) {
if(button == 0 && alphaSlider.passesThrough()) {
mouseDragging = true;
}
alphaSlider.onMouseClickMove(button);
}
@Override
public boolean onExitGui(int key) {
if(pickingColor) {
pickingColor = false;
}
alphaSlider.onExitGui(key);
return false;
}
@Override
public boolean passesThrough() {
if(pickingColor) {
return false;
}
if(disabled) {
return true;
}
int x = this.getRenderX();
int y = this.getRenderY();
int mouseX = parent.getMouseX();
int mouseY = parent.getMouseY();
if(startPos != null) {
if(mouseX >= startPos.x && mouseX <= startPos.x + pickerWindowWidth) {
if(mouseY >= startPos.y && mouseY <= startPos.y + pickerWindowHeight) {
return false;
}
}
} else if(mouseDown) {
if(mouseX >= x && mouseX <= x + width) {
if(mouseY >= y && mouseY <= y + height + 1) {
return false;
}
}
}
return true;
}
@Override
public void onPreSort() {
if(alphaSlider.getParent() == null && getParent() != null) {
alphaSlider.setParent(getParent());
}
int x = this.getRenderX();
int y = this.getRenderY();
int mouseX = parent.getMouseX();
int mouseY = parent.getMouseY();
ButtonState state = ButtonState.NORMAL;
if(!disabled) {
if(mouseX >= x && mouseX <= x + width) {
if(mouseY >= y && mouseY <= y + height + 1) {
state = ButtonState.HOVER;
}
}
if(startPos != null) {
boolean hover = false;
if(mouseX >= startPos.x && mouseX <= startPos.x + pickerWindowWidth) {
if(mouseY >= startPos.y && mouseY <= startPos.y + pickerWindowHeight + 1) {
hover = true;
}
}
if(hover && mouseDown) {
wantsToDrag = true;
}
pickingColor = (mouseDown && hover) || (!mouseDown && pickingColor);
if(pickingColor) {
state = ButtonState.HOVER;
}
} else if(state == ButtonState.HOVER && mouseDown) {
pickingColor = true;
}
} else {
state = ButtonState.DISABLED;
}
if(pickingColor) {
setPriority(MenuPriority.HIGHEST);
} else {
if(state == ButtonState.HOVER || state == ButtonState.HOVERACTIVE) {
setPriority(MenuPriority.HIGH);
} else {
setPriority(MenuPriority.MEDIUM);
}
}
lastState = state;
}
@Override
public void onRender() {
int x = this.getRenderX();
int y = this.getRenderY();
int lineColor = getColor(DrawType.LINE, lastState);
int index = 0;
for(int h = y; h < y + height; h++) {
rip.athena.client.ui.framework.draw.DrawImpl.drawRect(x + 1, h, width - 1, 1, disabled ? lightenColor(index, 7, color).getRGB() : darkenColor(index, 7, color).getRGB());
index++;
}
drawHorizontalLine(x, y, width + 1, 1, lineColor);
drawVerticalLine(x, y + 1, height - 1, 1, lineColor);
drawHorizontalLine(x, y + height, width + 1, 1, lineColor);
drawVerticalLine(x + width, y + 1, height - 1, 1, lineColor);
if(startType <= 0) {
if(alphaSlider.getParent() == null) {
alphaSlider.setParent(getParent());
}
alphaSlider.onPreSort();
}
drawPicker();
if(wantsToDrag) {
mouseDragging = Mouse.isButtonDown(0);
wantsToDrag = mouseDragging;
}
mouseDown = false;
mouseDragging = false;
}
public void drawPicker() {
if(pickingColor) {
int mouseX = parent.getMouseX();
int mouseY = parent.getMouseY();
int backgroundColor = getColor(DrawType.BACKGROUND, ButtonState.POPUP);
int lineColor = getColor(DrawType.LINE, lastState);
if(!mouseDown) {
canPick = true;
}
if(!wantsToDrag) {
startType = 0;
}
if(startPos == null) {
ScaledResolution res = new ScaledResolution(Minecraft.getMinecraft());
int windowX = mouseX;
int windowY = mouseY;
if(windowX + pickerWindowWidth >= res.getScaledWidth()) {
windowX -= pickerWindowWidth;
}
if(windowY + pickerWindowHeight >= res.getScaledHeight()) {
windowY -= pickerWindowHeight;
}
startPos = new Point(windowX, windowY);
alphaSlider.setX(startPos.x);
alphaSlider.setY(startPos.y + pickerWindowHeight - alphaSlider.getHeight());
canPick = false;
}
if(canPick && startType == 0) {
if(mouseY > startPos.y && mouseY < startPos.y + pickerWindowHeight - alphaSlider.getHeight()) {
if(mouseX > startPos.x + pickerWindowWidth - colorOffset && mouseX < startPos.x + pickerWindowWidth) {
startType = 1;
} else if(mouseX > startPos.x && mouseX < startPos.x + size) {
startType = 2;
}
} else {
startType = -1;
canPick = false;
}
}
if(startType != 0) {
if(startType == 2) {
if(mouseX >= startPos.x + pickerWindowWidth) {
mouseX = startPos.x + pickerWindowWidth - size - 1;
} else if(mouseX <= startPos.x) {
mouseX = startPos.x + pickerWindowWidth - size + 1;
}
} else {
if(mouseX >= startPos.x + pickerWindowWidth) {
mouseX = startPos.x + pickerWindowWidth - 1;
} else if(mouseX <= startPos.x + size) {
mouseX = startPos.x + size + 1;
}
}
if(mouseY >= startPos.y + pickerWindowHeight - alphaSlider.getHeight()) {
mouseY = startPos.y + pickerWindowHeight - alphaSlider.getHeight() - 1;
} else if(mouseY <= startPos.y) {
mouseY = startPos.y + 1;
}
}
rip.athena.client.ui.framework.draw.DrawImpl.drawRect(startPos.x + 1, startPos.y + 1, pickerWindowWidth - 1, pickerWindowHeight - 1, backgroundColor );
drawHorizontalLine(startPos.x, startPos.y, pickerWindowWidth + 1, 1, lineColor);
drawVerticalLine(startPos.x, startPos.y + 1, pickerWindowHeight - 1, 1, lineColor);
drawHorizontalLine(startPos.x, startPos.y + pickerWindowHeight, pickerWindowWidth + 1, 1, lineColor);
drawVerticalLine(startPos.x + pickerWindowWidth, startPos.y + 1, pickerWindowHeight - 1, 1, lineColor);
if(colorPickerMain == null) {
BufferedImage bufferedPicker = new BufferedImage(size, size, BufferedImage.TYPE_INT_ARGB);
for(int y = 0; y < size; y++) {
float blackMod = 255 * (float)y / size;
for(int x = 0; x < size; x++) {
Color color = new Color(clampColor(temp.getRed() - blackMod), clampColor(temp.getGreen() - blackMod), clampColor(temp.getBlue() - blackMod));
bufferedPicker.setRGB(x, y, color.getRGB());
}
}
DynamicTexture texture = new DynamicTexture(bufferedPicker);
bufferedPicker.getRGB(0, 0, bufferedPicker.getWidth(), bufferedPicker.getHeight(), texture.getTextureData(), 0, bufferedPicker.getWidth());
final ResourceLocation resource = Minecraft.getMinecraft().getTextureManager().getDynamicTextureLocation("color-picker-active", texture);
colorPickerMain = resource;
}
if((mouseDown || mouseDragging || wantsToDrag) && canPick && startType == 2) {
if(mouseX > startPos.x && mouseX < startPos.x + size && mouseY > startPos.y && mouseY < startPos.y + size) {
int y = mouseY - startPos.y;
float blackMod = 255 * (float)y / size;
this.color = new Color(clampColor(temp.getRed() - blackMod), clampColor(temp.getGreen() - blackMod), clampColor(temp.getBlue() - blackMod));
onAction();
}
}
drawImage(colorPickerMain, startPos.x + 1, startPos.y + 1, size - 1, size - 1);
float colorSpeed = size / 3.8f;
float red = 275;
float green = 275;
float blue = 275;
for(int y = startPos.y + 1; y < startPos.y + size; y++) {
if(red > 255) {
red--;
}
if(green > 255) {
green--;
}
if(blue > 255) {
blue--;
}
if(red >= 255 && green >= 255 && blue > 0) {
blue -= colorSpeed;
} else if(red >= 255 && green > 0 && blue <= 0) {
green -= colorSpeed;
} else if(red >= 255 && green <= 0 && blue < 255) {
blue += colorSpeed;
} else if(red > 0 && green <= 0 && blue >= 255) {
red -= colorSpeed;
} else if(red <= 0 && green < 255 && blue >= 255) {
green += colorSpeed;
} else if(red <= 0 && green >= 255 && blue > 0) {
blue -= colorSpeed;
} else if(red < 255 && green >= 255 && blue <= 0) {
red += colorSpeed;
}
for(int x = startPos.x + size + 1; x < startPos.x + pickerWindowWidth; x++) {
Color color = new Color(clampColor(red), clampColor(green), clampColor(blue));
if((mouseDown || mouseDragging || wantsToDrag) && canPick && startType == 1 && isInPixel(mouseX, mouseY, x, y)) {
temp = color;
lastYPress = y;
onMiniAction();
Minecraft.getMinecraft().getTextureManager().deleteTexture(colorPickerMain);
colorPickerMain = null;
}
if(lastYPress == -1) {
if(Math.abs(color.getRGB() - temp.getRGB()) < 3) {
lastYPress = y;
}
}
drawPixel(x, y, color.getRGB());
}
}
if(lastYPress != -1) {
drawHorizontalLine(startPos.x + pickerWindowWidth - colorOffset, lastYPress, colorOffset, 1, lineColor);
}
alphaSlider.onRender();
drawVerticalLine(startPos.x + size, startPos.y + 1, pickerWindowHeight - alphaOffset - 1, 1, lineColor);
} else if(startPos != null) {
startPos = null;
if(colorPickerMain != null) {
Minecraft.getMinecraft().getTextureManager().deleteTexture(colorPickerMain);
colorPickerMain = null;
}
alphaSlider.setX(Integer.MAX_VALUE);
alphaSlider.setY(Integer.MAX_VALUE);
}
}
private boolean isInPixel(int mouseX, int mouseY, int x, int y) {
return mouseX == x && mouseY == y;
}
private int clampColor(float color) {
int theColor = Math.round(color);
if(theColor > 255) {
return 255;
}
else if(theColor < 0) {
return 0;
}
return theColor;
}
protected Color darkenColor(int index, int modifier, Color color) {
int newRed = color.getRed() - index * modifier;
int newGreen = color.getGreen() - index * modifier;
int newBlue = color.getBlue() - index * modifier;
if(newRed < 0) {
newRed = 0;
}
if(newGreen < 0) {
newGreen = 0;
}
if(newBlue < 0) {
newBlue = 0;
}
return new Color(newRed, newGreen, newBlue, Math.round(alphaSlider.getValue() * 255));
}
protected Color lightenColor(int index, int modifier, Color color) {
int newRed = color.getRed() + index * modifier;
int newGreen = color.getGreen() + index * modifier;
int newBlue = color.getBlue() + index * modifier;
if(newRed > 255) {
newRed = 255;
}
if(newGreen > 255) {
newGreen = 255;
}
if(newBlue > 255) {
newBlue = 255;
}
return new Color(newRed, newGreen, newBlue, color.getAlpha());
}
public Color getColor() {
return color;
}
public void setColor(int color) {
this.color = new Color(color);
Minecraft.getMinecraft().getTextureManager().deleteTexture(colorPickerMain);
colorPickerMain = null;
}
public Color getColorCategory() {
return temp;
}
public void setColorCategory(int color) {
this.temp = new Color(color);
lastYPress = -1;
}
public MenuSlider getAlphaSlider() {
return alphaSlider;
}
public void onAction() {}

View File

@ -411,7 +411,7 @@ public class MenuScrollPane extends MenuComponent {
for(MenuComponent component : components) {
if(component instanceof MenuColorPicker) {
MenuColorPicker picker = (MenuColorPicker) component;
picker.drawPicker();
//picker.drawPicker();
} else if(component instanceof MenuLabel) {
MenuLabel label = (MenuLabel) component;
label.drawTooltip();

View File

@ -247,7 +247,9 @@ public class AthenaMenu extends GuiScreen implements GuiYesNoCallback
public void drawScreen(int mouseX, int mouseY, float partialTicks)
{
GlStateManager.pushMatrix();
DrawUtils.drawImage(new ResourceLocation("Athena/menu/wallpaper3.png"), 0, 0, width, height);
GlStateManager.popMatrix();
int[] size = InputUtils.getWindowsSize();
int startX = size[0] / 2;
@ -273,9 +275,9 @@ public class AthenaMenu extends GuiScreen implements GuiYesNoCallback
RoundedUtils.drawRoundedRect(startX+startX - 25, startY - startY + 5, startX+startX - 5, startY - startY + 25, 14, isOverAccountManager ? new Color(150,150,150,100).getRGB() : new Color(100,100,100,100).getRGB());
RoundedUtils.drawRoundedGradientOutlineCorner(startX+startX - 25 + 1, startY - startY + 5 + 1, startX+startX - 5 - 1, startY - startY + 25 - 1, 3, 12, ColorUtil.getClientColor(0, 255).getRGB(), ColorUtil.getClientColor(90, 255).getRGB(), ColorUtil.getClientColor(180, 255).getRGB(), ColorUtil.getClientColor(270, 255).getRGB());
boolean isOverSkinManager = mouseX >= startX+startX-50 && mouseX <= startX+startX-30 && mouseY >= startY - startY + 5 && mouseY <= startY - startY + 25;
RoundedUtils.drawRoundedRect(startX+startX - 50, startY - startY + 5, startX+startX - 30, startY - startY + 25, 14, isOverSkinManager ? new Color(150,150,150,100).getRGB() : new Color(100,100,100,100).getRGB());
RoundedUtils.drawRoundedGradientOutlineCorner(startX+startX - 50 + 1, startY - startY + 5 + 1, startX+startX - 30 - 1, startY - startY + 25 - 1, 3, 12, ColorUtil.getClientColor(0, 255).getRGB(), ColorUtil.getClientColor(90, 255).getRGB(), ColorUtil.getClientColor(180, 255).getRGB(), ColorUtil.getClientColor(270, 255).getRGB());
//boolean isOverSkinManager = mouseX >= startX+startX-50 && mouseX <= startX+startX-30 && mouseY >= startY - startY + 5 && mouseY <= startY - startY + 25;
//RoundedUtils.drawRoundedRect(startX+startX - 50, startY - startY + 5, startX+startX - 30, startY - startY + 25, 14, isOverSkinManager ? new Color(150,150,150,100).getRGB() : new Color(100,100,100,100).getRGB());
//RoundedUtils.drawRoundedGradientOutlineCorner(startX+startX - 50 + 1, startY - startY + 5 + 1, startX+startX - 30 - 1, startY - startY + 25 - 1, 3, 12, ColorUtil.getClientColor(0, 255).getRGB(), ColorUtil.getClientColor(90, 255).getRGB(), ColorUtil.getClientColor(180, 255).getRGB(), ColorUtil.getClientColor(270, 255).getRGB());
boolean isOverExit = mouseX >= 5 && mouseX <= 25 && mouseY >= startY - startY + 5 && mouseY <= startY - startY + 25;
RoundedUtils.drawRoundedRect(5, startY - startY + 5, 25, startY - startY + 25, 14, isOverExit ? new Color(150,150,150,100).getRGB() : new Color(100,100,100,100).getRGB());
@ -298,7 +300,7 @@ public class AthenaMenu extends GuiScreen implements GuiYesNoCallback
boolean isOverExit = mouseX >= 5 && mouseX <= 25 && mouseY >= startY - startY + 5 && mouseY <= startY - startY + 25;
boolean isOverAccountManager = mouseX >= startX+startX-25 && mouseX <= startX+startX-5 && mouseY >= startY - startY + 5 && mouseY <= startY - startY + 25;
boolean isOverSkinManager = mouseX >= startX+startX-50 && mouseX <= startX+startX-30 && mouseY >= startY - startY + 5 && mouseY <= startY - startY + 25;
//boolean isOverSkinManager = mouseX >= startX+startX-50 && mouseX <= startX+startX-30 && mouseY >= startY - startY + 5 && mouseY <= startY - startY + 25;
if(isOverExit) {
this.mc.shutdown();
@ -308,9 +310,9 @@ public class AthenaMenu extends GuiScreen implements GuiYesNoCallback
this.mc.displayGuiScreen(new GuiAccountManager(this));
}
if(isOverSkinManager) {
/*if(isOverSkinManager) {
this.mc.displayGuiScreen(new GuiSkinManager(this));
}
}*/
synchronized (this.threadLock)
{

View File

@ -30,6 +30,8 @@ public class LoginPanel extends Panel {
public final List<TextField> textFields = new ArrayList<>();
private String status = "";
private boolean sendToMenu = false;
public LoginPanel() {
setHeight(200);
actionButtons.add(new AltButton("Offline Login"));
@ -111,7 +113,7 @@ public class LoginPanel extends Panel {
if (actionButton.getName().equals("Offline Login")) {
TextField cracked = textFields.get(0);
if(cracked.getText() == null) {
if(cracked.getText().isEmpty()) {
status = "Username field is null";
return;
}
@ -151,6 +153,10 @@ public class LoginPanel extends Panel {
float logoSize = 22;
DrawUtils.drawMicrosoftLogo(microX + microWidth - (10 + logoSize), microsoftY + (microHeight / 2f) - (logoSize / 2f), logoSize, 1.5f);
if(sendToMenu) {
Minecraft.getMinecraft().displayGuiScreen(new AthenaMenu());
}
}
@Override
@ -174,6 +180,9 @@ public class LoginPanel extends Panel {
try {
MicrosoftAuthResult acc = authenticator.loginWithCredentials(email, password);
//MicrosoftAuthResult acc = authenticator.loginWithWebview();
//Minecraft.getMinecraft().setSession(new Session(acc.getProfile().getName(), acc.getProfile().getId(), acc.getAccessToken(), "mojang"));
Minecraft.getMinecraft().session = new Session(acc.getProfile().getName(), acc.getProfile().getId(), acc.getAccessToken(), "legacy");
status = "Logged into " + acc.getProfile().getName();
@ -190,9 +199,10 @@ public class LoginPanel extends Panel {
}
// Send to main menu
Minecraft.getMinecraft().displayGuiScreen(new AthenaMenu());
sendToMenu = true;
} catch (MicrosoftAuthenticationException e) {
} catch (Exception e) {
status = e.getMessage();
e.printStackTrace();
}

View File

@ -0,0 +1,26 @@
package rip.athena.client.utils;
import net.minecraft.client.Minecraft;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import rip.athena.api.anticheat.AbstractCheck;
import rip.athena.api.event.SubscribeEvent;
import rip.athena.client.Athena;
/**
* @author Athena Development
* @project Athena-Client
* @date 7/11/2023
*/
public class ClientSidedAntiCheat {
public void runChecks() {
if(Minecraft.getMinecraft().theWorld == null || Minecraft.getMinecraft().thePlayer == null) return;
for(AbstractCheck check : Athena.INSTANCE.getCheckRepository().getChecks()) {
if (check.executeCheck(Minecraft.getMinecraft().thePlayer) && System.currentTimeMillis() > check.getLastViolated() + 500) {
Minecraft.getMinecraft().thePlayer.totalViolations++;
check.setLastViolated(System.currentTimeMillis());
}
}
}
}

View File

@ -72,7 +72,7 @@ public class AsyncScreenshot implements Runnable {
e.printStackTrace();
}
String clientID = "";
String clientID = "05134ff84f31635";
String data = "";
data = URLEncoder.encode("image", "UTF-8") + "=" + URLEncoder.encode(Base64.getEncoder().encodeToString(byteArrayOutputStream.toByteArray()), "UTF-8");

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

View File

@ -0,0 +1,37 @@
{
"targets": [
"swap"
],
"passes": [
{
"name": "blur",
"intarget": "minecraft:main",
"outtarget": "swap",
"uniforms": [
{
"name": "BlurDir",
"values": [ 1.0, 0.0 ]
},
{
"name": "Radius",
"values": [ 20.0 ]
}
]
},
{
"name": "blur",
"intarget": "swap",
"outtarget": "minecraft:main",
"uniforms": [
{
"name": "BlurDir",
"values": [ 0.0, 1.0 ]
},
{
"name": "Radius",
"values": [ 20.0 ]
}
]
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 989 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 733 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 650 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 727 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 682 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 814 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 699 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 977 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 605 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 698 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 993 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 935 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 567 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1019 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 812 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 882 B

Some files were not shown because too many files have changed in this diff Show More