Merge branch 'main' of https://github.com/Athena-Operations/Athena-Client
# Conflicts: # src/main/java/net/minecraft/client/Minecraft.java # src/main/java/rip/athena/client/Athena.java
@ -9,6 +9,7 @@ import com.mojang.authlib.minecraft.MinecraftSessionService;
|
|||||||
import com.mojang.authlib.properties.Property;
|
import com.mojang.authlib.properties.Property;
|
||||||
import com.mojang.authlib.properties.PropertyMap;
|
import com.mojang.authlib.properties.PropertyMap;
|
||||||
import com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService;
|
import com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService;
|
||||||
|
import lombok.Setter;
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.block.material.Material;
|
import net.minecraft.block.material.Material;
|
||||||
import net.minecraft.client.audio.MusicTicker;
|
import net.minecraft.client.audio.MusicTicker;
|
||||||
@ -170,6 +171,8 @@ public class Minecraft implements IThreadListener, IPlayerUsage
|
|||||||
private Entity renderViewEntity;
|
private Entity renderViewEntity;
|
||||||
public Entity pointedEntity;
|
public Entity pointedEntity;
|
||||||
public EffectRenderer effectRenderer;
|
public EffectRenderer effectRenderer;
|
||||||
|
|
||||||
|
@Setter
|
||||||
public Session session;
|
public Session session;
|
||||||
private boolean isGamePaused;
|
private boolean isGamePaused;
|
||||||
|
|
||||||
@ -1175,7 +1178,7 @@ public class Minecraft implements IThreadListener, IPlayerUsage
|
|||||||
|
|
||||||
if(athenaSplashScreen.isDone) {
|
if(athenaSplashScreen.isDone) {
|
||||||
if(Athena.INSTANCE.getModuleRepository().get(MotionBlur.class).isToggled()) {
|
if(Athena.INSTANCE.getModuleRepository().get(MotionBlur.class).isToggled()) {
|
||||||
if(Minecraft.getMinecraft().thePlayer != null) {
|
if(Minecraft.getMinecraft().thePlayer != null && Minecraft.getMinecraft().currentScreen == null) {
|
||||||
MotionBlur.createAccumulation();
|
MotionBlur.createAccumulation();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,9 @@ import net.minecraft.client.resources.I18n;
|
|||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
import org.lwjgl.input.Keyboard;
|
import org.lwjgl.input.Keyboard;
|
||||||
|
import rip.athena.client.Athena;
|
||||||
|
|
||||||
|
import javax.swing.table.AbstractTableModel;
|
||||||
|
|
||||||
public class GuiMultiplayer extends GuiScreen implements GuiYesNoCallback
|
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 (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;
|
String s4 = ((ServerListEntryNormal)guilistextended$iguilistentry).getServerData().serverName;
|
||||||
|
|
||||||
if (s4 != null)
|
if (s4 != null)
|
||||||
@ -174,6 +181,10 @@ public class GuiMultiplayer extends GuiScreen implements GuiYesNoCallback
|
|||||||
}
|
}
|
||||||
else if (button.id == 7 && guilistextended$iguilistentry instanceof ServerListEntryNormal)
|
else if (button.id == 7 && guilistextended$iguilistentry instanceof ServerListEntryNormal)
|
||||||
{
|
{
|
||||||
|
if(Athena.INSTANCE.getPartnerManager().isPartner(((ServerListEntryNormal)guilistextended$iguilistentry).getServerData().serverIP)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
this.editingServer = true;
|
this.editingServer = true;
|
||||||
ServerData serverdata = ((ServerListEntryNormal)guilistextended$iguilistentry).getServerData();
|
ServerData serverdata = ((ServerListEntryNormal)guilistextended$iguilistentry).getServerData();
|
||||||
this.selectedServer = new ServerData(serverdata.serverName, serverdata.serverIP, false);
|
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_)
|
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;
|
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);
|
this.savedServerList.swapServers(p_175391_2_, i);
|
||||||
|
|
||||||
if (this.serverListSelector.func_148193_k() == p_175391_2_)
|
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_)
|
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;
|
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);
|
this.savedServerList.swapServers(p_175393_2_, i);
|
||||||
|
|
||||||
if (this.serverListSelector.func_148193_k() == p_175393_2_)
|
if (this.serverListSelector.func_148193_k() == p_175393_2_)
|
||||||
|
@ -660,7 +660,9 @@ public abstract class GuiScreen extends Gui implements GuiYesNoCallback
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
GlStateManager.pushMatrix();
|
||||||
DrawUtils.drawImage(new ResourceLocation("Athena/menu/wallpaper3.png"), 0, 0, width, height);
|
DrawUtils.drawImage(new ResourceLocation("Athena/menu/wallpaper3.png"), 0, 0, width, height);
|
||||||
|
GlStateManager.popMatrix();
|
||||||
//this.drawBackground(tint);
|
//this.drawBackground(tint);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,6 +21,8 @@ import net.minecraft.util.ResourceLocation;
|
|||||||
import org.apache.commons.lang3.Validate;
|
import org.apache.commons.lang3.Validate;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
|
import rip.athena.client.Athena;
|
||||||
|
import rip.athena.client.utils.render.DrawUtils;
|
||||||
|
|
||||||
public class ServerListEntryNormal implements GuiListExtended.IGuiListEntry
|
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)
|
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)
|
if (!this.field_148301_e.field_78841_f)
|
||||||
{
|
{
|
||||||
this.field_148301_e.field_78841_f = true;
|
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 (this.field_148303_c.func_175392_a(this, slotIndex))
|
||||||
{
|
{
|
||||||
if (k1 < 16 && l1 < 16)
|
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 (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());
|
this.field_148303_c.func_175391_a(this, slotIndex, GuiScreen.isShiftKeyDown());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p_148278_5_ < 16 && p_148278_6_ > 16 && this.field_148303_c.func_175394_b(this, slotIndex))
|
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());
|
this.field_148303_c.func_175393_b(this, slotIndex, GuiScreen.isShiftKeyDown());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -70,13 +70,11 @@ public class ModelPlayer extends ModelBiped
|
|||||||
/**
|
/**
|
||||||
* Sets the models various rotation angles then renders the model.
|
* 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);
|
super.render(entityIn, p_78088_2_, p_78088_3_, p_78088_4_, p_78088_5_, p_78088_6_, scale);
|
||||||
GlStateManager.pushMatrix();
|
GlStateManager.pushMatrix();
|
||||||
|
|
||||||
if (this.isChild)
|
if (this.isChild) {
|
||||||
{
|
|
||||||
float f = 2.0F;
|
float f = 2.0F;
|
||||||
GlStateManager.scale(1.0F / f, 1.0F / f, 1.0F / f);
|
GlStateManager.scale(1.0F / f, 1.0F / f, 1.0F / f);
|
||||||
GlStateManager.translate(0.0F, 24.0F * scale, 0.0F);
|
GlStateManager.translate(0.0F, 24.0F * scale, 0.0F);
|
||||||
@ -85,11 +83,8 @@ public class ModelPlayer extends ModelBiped
|
|||||||
this.bipedLeftArmwear.render(scale);
|
this.bipedLeftArmwear.render(scale);
|
||||||
this.bipedRightArmwear.render(scale);
|
this.bipedRightArmwear.render(scale);
|
||||||
this.bipedBodyWear.render(scale);
|
this.bipedBodyWear.render(scale);
|
||||||
}
|
} else {
|
||||||
else
|
if (entityIn.isSneaking()) {
|
||||||
{
|
|
||||||
if (entityIn.isSneaking())
|
|
||||||
{
|
|
||||||
GlStateManager.translate(0.0F, 0.2F, 0.0F);
|
GlStateManager.translate(0.0F, 0.2F, 0.0F);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package net.minecraft.client.multiplayer;
|
package net.minecraft.client.multiplayer;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.InetAddress;
|
import java.net.InetAddress;
|
||||||
import java.net.UnknownHostException;
|
import java.net.UnknownHostException;
|
||||||
@ -18,6 +19,7 @@ import net.minecraft.util.ChatComponentText;
|
|||||||
import net.minecraft.util.ChatComponentTranslation;
|
import net.minecraft.util.ChatComponentTranslation;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
|
import rip.athena.client.utils.render.RoundedUtils;
|
||||||
|
|
||||||
public class GuiConnecting extends GuiScreen
|
public class GuiConnecting extends GuiScreen
|
||||||
{
|
{
|
||||||
|
@ -9,6 +9,8 @@ import net.minecraft.nbt.NBTTagCompound;
|
|||||||
import net.minecraft.nbt.NBTTagList;
|
import net.minecraft.nbt.NBTTagList;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
|
import rip.athena.api.partner.Partner;
|
||||||
|
import rip.athena.client.Athena;
|
||||||
|
|
||||||
public class ServerList
|
public class ServerList
|
||||||
{
|
{
|
||||||
@ -33,6 +35,11 @@ public class ServerList
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
this.servers.clear();
|
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"));
|
NBTTagCompound nbttagcompound = CompressedStreamTools.read(new File(this.mc.mcDataDir, "servers.dat"));
|
||||||
|
|
||||||
if (nbttagcompound == null)
|
if (nbttagcompound == null)
|
||||||
@ -65,6 +72,10 @@ public class ServerList
|
|||||||
|
|
||||||
for (ServerData serverdata : this.servers)
|
for (ServerData serverdata : this.servers)
|
||||||
{
|
{
|
||||||
|
if(Athena.INSTANCE.getPartnerManager().isPartner(serverdata.serverIP)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
nbttaglist.appendTag(serverdata.getNBTCompound());
|
nbttaglist.appendTag(serverdata.getNBTCompound());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -178,7 +178,7 @@ public class EntityRenderer implements IResourceManagerReloadListener
|
|||||||
private double cameraZoom = 1.0D;
|
private double cameraZoom = 1.0D;
|
||||||
private double cameraYaw;
|
private double cameraYaw;
|
||||||
private double cameraPitch;
|
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")};
|
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;
|
public static final int shaderCount = shaderResourceLocations.length;
|
||||||
private int shaderIndex;
|
private int shaderIndex;
|
||||||
|
@ -465,35 +465,11 @@ public abstract class Render<T extends Entity>
|
|||||||
}*/
|
}*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (str.equals("deadmau5"))
|
if (str.equals("deadmau5"))
|
||||||
{
|
{
|
||||||
b0 = -10;
|
b0 = -10;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (entityIn instanceof AbstractClientPlayer) {
|
|
||||||
String username = ((AbstractClientPlayer) entityIn).getGameProfile().getId().toString();
|
|
||||||
|
|
||||||
/*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;
|
int i = fontrenderer.getStringWidth(str) / 2;
|
||||||
GlStateManager.disableTexture2D();
|
GlStateManager.disableTexture2D();
|
||||||
worldrenderer.begin(7, DefaultVertexFormats.POSITION_COLOR);
|
worldrenderer.begin(7, DefaultVertexFormats.POSITION_COLOR);
|
||||||
@ -511,26 +487,7 @@ public abstract class Render<T extends Entity>
|
|||||||
GlStateManager.disableBlend();
|
GlStateManager.disableBlend();
|
||||||
GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
|
GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
|
||||||
GlStateManager.popMatrix();
|
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();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11,6 +11,7 @@ import net.minecraft.block.BlockBed;
|
|||||||
import net.minecraft.block.BlockDirectional;
|
import net.minecraft.block.BlockDirectional;
|
||||||
import net.minecraft.block.material.Material;
|
import net.minecraft.block.material.Material;
|
||||||
import net.minecraft.block.state.IBlockState;
|
import net.minecraft.block.state.IBlockState;
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.command.server.CommandBlockLogic;
|
import net.minecraft.command.server.CommandBlockLogic;
|
||||||
import net.minecraft.enchantment.EnchantmentHelper;
|
import net.minecraft.enchantment.EnchantmentHelper;
|
||||||
import net.minecraft.entity.Entity;
|
import net.minecraft.entity.Entity;
|
||||||
@ -176,6 +177,9 @@ public abstract class EntityPlayer extends EntityLivingBase
|
|||||||
*/
|
*/
|
||||||
public EntityFishHook fishEntity;
|
public EntityFishHook fishEntity;
|
||||||
|
|
||||||
|
public int totalViolations;
|
||||||
|
public int airTicks;
|
||||||
|
|
||||||
public EntityPlayer(World worldIn, GameProfile gameProfileIn)
|
public EntityPlayer(World worldIn, GameProfile gameProfileIn)
|
||||||
{
|
{
|
||||||
super(worldIn);
|
super(worldIn);
|
||||||
@ -268,6 +272,12 @@ public abstract class EntityPlayer extends EntityLivingBase
|
|||||||
*/
|
*/
|
||||||
public void onUpdate()
|
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();
|
this.noClip = this.isSpectator();
|
||||||
|
|
||||||
if (this.isSpectator())
|
if (this.isSpectator())
|
||||||
|
37
src/main/java/rip/athena/api/anticheat/AbstractCheck.java
Normal 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);
|
||||||
|
|
||||||
|
}
|
82
src/main/java/rip/athena/api/anticheat/CheckRepository.java
Normal 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
27
src/main/java/rip/athena/api/anticheat/EnumCheckType.java
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
@ -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();
|
||||||
|
}
|
24
src/main/java/rip/athena/api/partner/Partner.java
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
78
src/main/java/rip/athena/api/partner/PartnerManager.java
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
@ -5,18 +5,24 @@ import net.minecraft.client.Minecraft;
|
|||||||
import net.minecraft.client.renderer.texture.TextureManager;
|
import net.minecraft.client.renderer.texture.TextureManager;
|
||||||
import org.lwjgl.opengl.Display;
|
import org.lwjgl.opengl.Display;
|
||||||
import rip.athena.api.account.AccountManager;
|
import rip.athena.api.account.AccountManager;
|
||||||
|
import rip.athena.api.anticheat.CheckRepository;
|
||||||
import rip.athena.api.config.save.ConfigManager;
|
import rip.athena.api.config.save.ConfigManager;
|
||||||
import rip.athena.api.cosmetics.CosmeticsManager;
|
import rip.athena.api.cosmetics.CosmeticsManager;
|
||||||
import rip.athena.api.event.EventBus;
|
import rip.athena.api.event.EventBus;
|
||||||
import rip.athena.api.event.SubscribeEvent;
|
import rip.athena.api.event.SubscribeEvent;
|
||||||
import rip.athena.api.macro.MacroManager;
|
import rip.athena.api.macro.MacroManager;
|
||||||
import rip.athena.api.module.ModuleRepository;
|
import rip.athena.api.module.ModuleRepository;
|
||||||
|
import rip.athena.api.partner.PartnerManager;
|
||||||
import rip.athena.api.skin.SkinManager;
|
import rip.athena.api.skin.SkinManager;
|
||||||
import rip.athena.client.events.client.ClientTickEvent;
|
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.socket.SocketClient;
|
||||||
import rip.athena.client.theme.ThemeManager;
|
import rip.athena.client.theme.ThemeManager;
|
||||||
import rip.athena.client.ui.hud.HUDManager;
|
import rip.athena.client.ui.hud.HUDManager;
|
||||||
import rip.athena.client.ui.notifications.NotificationManager;
|
import rip.athena.client.ui.notifications.NotificationManager;
|
||||||
|
import rip.athena.client.utils.ClientSidedAntiCheat;
|
||||||
import rip.athena.client.utils.PrefixedLogger;
|
import rip.athena.client.utils.PrefixedLogger;
|
||||||
import rip.athena.client.utils.discord.DiscordRPC;
|
import rip.athena.client.utils.discord.DiscordRPC;
|
||||||
import rip.athena.client.utils.input.KeybindManager;
|
import rip.athena.client.utils.input.KeybindManager;
|
||||||
@ -27,8 +33,7 @@ import java.io.File;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
import java.nio.file.Paths;
|
import java.nio.file.Paths;
|
||||||
import java.security.MessageDigest;
|
|
||||||
import java.security.NoSuchAlgorithmException;
|
|
||||||
/**
|
/**
|
||||||
* The Athena class represents the main class of the Athena Client.
|
* The Athena class represents the main class of the Athena Client.
|
||||||
* It encapsulates the client's name, version, build, and provides
|
* 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 PrefixedLogger log = new PrefixedLogger("Athena");
|
||||||
|
|
||||||
private final String clientName = "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 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 NotificationManager notificationManager;
|
||||||
//private CosmeticsController cosmeticsController;
|
//private CosmeticsController cosmeticsController;
|
||||||
private CosmeticsManager cosmeticsManager;
|
private CosmeticsManager cosmeticsManager;
|
||||||
private ModuleRepository moduleRepository;
|
private ModuleRepository moduleRepository;
|
||||||
|
private CheckRepository checkRepository;
|
||||||
private AccountManager accountManager;
|
private AccountManager accountManager;
|
||||||
|
private PartnerManager partnerManager;
|
||||||
private ConfigManager configManager;
|
private ConfigManager configManager;
|
||||||
private ThemeManager themeManager;
|
private ThemeManager themeManager;
|
||||||
private MacroManager macroManager;
|
private MacroManager macroManager;
|
||||||
@ -73,10 +81,10 @@ public class Athena {
|
|||||||
private DiscordRPC discordRPC;
|
private DiscordRPC discordRPC;
|
||||||
private EventBus eventBus;
|
private EventBus eventBus;
|
||||||
|
|
||||||
|
private boolean hasSent = false;
|
||||||
private TextureManager renderEngine;
|
private TextureManager renderEngine;
|
||||||
|
|
||||||
private boolean isGameRunningForeground = true;
|
private boolean isGameRunningForeground = true;
|
||||||
private boolean hasSent = false;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initializes the client resources and setup.
|
* Initializes the client resources and setup.
|
||||||
@ -129,7 +137,10 @@ public class Athena {
|
|||||||
private void handleManagers() {
|
private void handleManagers() {
|
||||||
this.configManager = new ConfigManager(CONFIGS_DIR);
|
this.configManager = new ConfigManager(CONFIGS_DIR);
|
||||||
this.accountManager = new AccountManager();
|
this.accountManager = new AccountManager();
|
||||||
|
this.checkRepository = new CheckRepository();
|
||||||
this.moduleRepository = new ModuleRepository();
|
this.moduleRepository = new ModuleRepository();
|
||||||
|
this.clientSidedAntiCheat = new ClientSidedAntiCheat();
|
||||||
|
this.partnerManager = new PartnerManager();
|
||||||
this.themeManager = new ThemeManager();
|
this.themeManager = new ThemeManager();
|
||||||
this.macroManager = new MacroManager();
|
this.macroManager = new MacroManager();
|
||||||
this.skinManager = new SkinManager();
|
this.skinManager = new SkinManager();
|
||||||
@ -143,6 +154,7 @@ public class Athena {
|
|||||||
Minecraft.athenaSplashScreen.step("Metadata", this.renderEngine);
|
Minecraft.athenaSplashScreen.step("Metadata", this.renderEngine);
|
||||||
|
|
||||||
this.configManager.postInit();
|
this.configManager.postInit();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void checkCosmetics() {
|
private void checkCosmetics() {
|
||||||
@ -190,6 +202,10 @@ public class Athena {
|
|||||||
eventBus.register(macroManager);
|
eventBus.register(macroManager);
|
||||||
eventBus.register(hudManager);
|
eventBus.register(hudManager);
|
||||||
eventBus.register(this);
|
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) {
|
public void onClientTick(ClientTickEvent event) {
|
||||||
if (Minecraft.getMinecraft().thePlayer != null && Minecraft.getMinecraft().theWorld != null) {
|
if (Minecraft.getMinecraft().thePlayer != null && Minecraft.getMinecraft().theWorld != null) {
|
||||||
String currentUsername = Minecraft.getMinecraft().thePlayer.getGameProfile().getName();
|
String currentUsername = Minecraft.getMinecraft().thePlayer.getGameProfile().getName();
|
||||||
|
|
||||||
if (!hasSent || !currentUsername.equals(SocketClient.getCurrentUsername())) {
|
if (!hasSent || !currentUsername.equals(SocketClient.getCurrentUsername())) {
|
||||||
if (hasSent) {
|
if (hasSent) {
|
||||||
// Player has changed their Minecraft account, disconnect the previous user
|
// 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
|
// Send the modified "start" request with the username and UUID
|
||||||
System.out.println(SocketClient.sendRequest("start", currentUsername + ":" + uuid + ":true"));
|
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);
|
SocketClient.setCurrentUsername(currentUsername);
|
||||||
hasSent = true;
|
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()) {
|
clientSidedAntiCheat.runChecks();
|
||||||
isGameRunningForeground = true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -257,19 +264,4 @@ public class Athena {
|
|||||||
public void shutdownClient() {
|
public void shutdownClient() {
|
||||||
log.info("Shutting down client");
|
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();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
@ -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();
|
||||||
|
}
|
||||||
|
}
|
@ -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);*/
|
||||||
|
}
|
||||||
|
}
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
21
src/main/java/rip/athena/client/anticheat/other/Blink.java
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,7 @@
|
|||||||
|
package rip.athena.client.events.forge;
|
||||||
|
|
||||||
|
import rip.athena.api.event.Event;
|
||||||
|
|
||||||
|
public class FMLInitializationEvent extends Event {
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,7 @@
|
|||||||
|
package rip.athena.client.events.forge;
|
||||||
|
|
||||||
|
import rip.athena.api.event.Event;
|
||||||
|
|
||||||
|
public class FMLPostInitializationEvent extends Event {
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,7 @@
|
|||||||
|
package rip.athena.client.events.forge;
|
||||||
|
|
||||||
|
import rip.athena.api.event.Event;
|
||||||
|
|
||||||
|
public class FMLPreInitializationEvent extends Event {
|
||||||
|
|
||||||
|
}
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
@ -12,6 +12,9 @@ public class FPSBoostMod extends Module {
|
|||||||
@ConfigValue.Boolean(name = "Disable FPS Smoothing")
|
@ConfigValue.Boolean(name = "Disable FPS Smoothing")
|
||||||
private boolean disableFpsSmoothing = true;
|
private boolean disableFpsSmoothing = true;
|
||||||
|
|
||||||
|
@ConfigValue.Boolean(name = "Disable World Smoothing")
|
||||||
|
private boolean disableWorldSmoothing = true;
|
||||||
|
|
||||||
// Previous settings
|
// Previous settings
|
||||||
private boolean lastFpsSmoothing;
|
private boolean lastFpsSmoothing;
|
||||||
private boolean lastWorldSmoothing;
|
private boolean lastWorldSmoothing;
|
||||||
@ -23,7 +26,7 @@ public class FPSBoostMod extends Module {
|
|||||||
lastWorldSmoothing = Minecraft.getMinecraft().gameSettings.ofSmoothWorld;
|
lastWorldSmoothing = Minecraft.getMinecraft().gameSettings.ofSmoothWorld;
|
||||||
|
|
||||||
if(disableFpsSmoothing) Minecraft.getMinecraft().gameSettings.ofSmoothFps = false;
|
if(disableFpsSmoothing) Minecraft.getMinecraft().gameSettings.ofSmoothFps = false;
|
||||||
if(lastWorldSmoothing) Minecraft.getMinecraft().gameSettings.ofSmoothFps = false;
|
if(disableWorldSmoothing) Minecraft.getMinecraft().gameSettings.ofSmoothFps = false;
|
||||||
|
|
||||||
super.onEnable();
|
super.onEnable();
|
||||||
}
|
}
|
||||||
|
@ -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();
|
||||||
|
}
|
||||||
|
}
|
@ -1,6 +1,7 @@
|
|||||||
package rip.athena.client.modules.render;
|
package rip.athena.client.modules.render;
|
||||||
|
|
||||||
import net.minecraft.client.gui.Gui;
|
import net.minecraft.client.gui.Gui;
|
||||||
|
import net.minecraft.client.renderer.GlStateManager;
|
||||||
import org.lwjgl.opengl.GL11;
|
import org.lwjgl.opengl.GL11;
|
||||||
import rip.athena.api.module.EnumModuleType;
|
import rip.athena.api.module.EnumModuleType;
|
||||||
import rip.athena.api.module.Module;
|
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());
|
mc.fontRendererObj.drawStringWithShadow(string, (float) (posX), (float) posY+ 3, color.getRGB());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
GL11.glColor3f(1, 1, 1);
|
|
||||||
GL11.glPopMatrix();
|
GL11.glPopMatrix();
|
||||||
|
GlStateManager.color(1,1,1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
|
@ -72,6 +72,7 @@ public class Crosshair extends Module {
|
|||||||
*/
|
*/
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public void onTick(ClientTickEvent event) {
|
public void onTick(ClientTickEvent event) {
|
||||||
|
if(mc.thePlayer == null) return;
|
||||||
if(rainbowSpeedNerfProg >= rainbowSpeedNerf) {
|
if(rainbowSpeedNerfProg >= rainbowSpeedNerf) {
|
||||||
if(rainbowR == 255 && rainbowG != 255 && rainbowB == 0)
|
if(rainbowR == 255 && rainbowG != 255 && rainbowB == 0)
|
||||||
rainbowG++;
|
rainbowG++;
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package rip.athena.client.modules.render;
|
package rip.athena.client.modules.render;
|
||||||
|
|
||||||
import net.minecraft.client.gui.Gui;
|
import net.minecraft.client.gui.Gui;
|
||||||
|
import net.minecraft.client.renderer.GlStateManager;
|
||||||
import org.lwjgl.opengl.GL11;
|
import org.lwjgl.opengl.GL11;
|
||||||
import rip.athena.api.module.EnumModuleType;
|
import rip.athena.api.module.EnumModuleType;
|
||||||
import rip.athena.api.module.Module;
|
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());
|
mc.fontRendererObj.drawStringWithShadow(string, (float) (posX), (float) posY+ 3, color.getRGB());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
GL11.glColor3f(1, 1, 1);
|
|
||||||
GL11.glPopMatrix();
|
GL11.glPopMatrix();
|
||||||
|
GlStateManager.color(1,1,1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
133
src/main/java/rip/athena/client/modules/render/Ping.java
Normal 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();
|
||||||
|
}
|
||||||
|
}
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
284
src/main/java/rip/athena/client/modules/render/PotionStatus.java
Normal 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();
|
||||||
|
}
|
||||||
|
}
|
@ -8,6 +8,9 @@ import java.net.SocketException;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
import java.util.concurrent.Executors;
|
||||||
|
import java.util.concurrent.ScheduledExecutorService;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Athena Development
|
* @author Athena Development
|
||||||
@ -18,6 +21,7 @@ public class SocketClient {
|
|||||||
|
|
||||||
public static final Client client = new Client("141.145.209.142", 45376);
|
public static final Client client = new Client("141.145.209.142", 45376);
|
||||||
private static final Map<String, Boolean> userCache = new HashMap<>();
|
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, String> rankCache = new HashMap<>();
|
||||||
private static Map<String, Long> cacheTime = 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) {
|
public static Object sendRequest(String command, String payload) {
|
||||||
return client.request(command, payload);
|
return client.request(command, payload);
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,8 @@ package rip.athena.client.ui.clickgui;
|
|||||||
|
|
||||||
import net.minecraft.client.gui.ScaledResolution;
|
import net.minecraft.client.gui.ScaledResolution;
|
||||||
import net.minecraft.client.renderer.GlStateManager;
|
import net.minecraft.client.renderer.GlStateManager;
|
||||||
|
import net.minecraft.client.renderer.OpenGlHelper;
|
||||||
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.util.ResourceLocation;
|
import net.minecraft.util.ResourceLocation;
|
||||||
import rip.athena.api.config.save.Config;
|
import rip.athena.api.config.save.Config;
|
||||||
import rip.athena.api.module.Module;
|
import rip.athena.api.module.Module;
|
||||||
|
@ -34,7 +34,7 @@ public class MenuModColorPicker extends MenuColorPicker {
|
|||||||
public void onRender() {
|
public void onRender() {
|
||||||
int x = this.getRenderX();
|
int x = this.getRenderX();
|
||||||
int y = this.getRenderY();
|
int y = this.getRenderY();
|
||||||
int lineColor = getColor(DrawType.LINE, lastState);
|
//int lineColor = getColor(DrawType.LINE, lastState);
|
||||||
|
|
||||||
GlStateManager.color(1, 1, 1);
|
GlStateManager.color(1, 1, 1);
|
||||||
|
|
||||||
@ -43,16 +43,16 @@ public class MenuModColorPicker extends MenuColorPicker {
|
|||||||
drawHorizontalLine(x, y + height, width + 1, 1, lineColor);
|
drawHorizontalLine(x, y + height, width + 1, 1, lineColor);
|
||||||
drawVerticalLine(x + width, y + 1, height - 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;
|
int index = 0;
|
||||||
|
|
||||||
for(int h = y; h < y + height - 5; h++) {
|
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()*/);
|
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++;
|
//index++;
|
||||||
}
|
//}
|
||||||
|
|
||||||
if(startType <= 0) {
|
/*if(startType <= 0) {
|
||||||
if(alphaSlider.getParent() == null) {
|
if(alphaSlider.getParent() == null) {
|
||||||
alphaSlider.setParent(getParent());
|
alphaSlider.setParent(getParent());
|
||||||
}
|
}
|
||||||
@ -68,6 +68,6 @@ public class MenuModColorPicker extends MenuColorPicker {
|
|||||||
}
|
}
|
||||||
|
|
||||||
mouseDown = false;
|
mouseDown = false;
|
||||||
mouseDragging = false;
|
mouseDragging = false;*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,6 +11,7 @@ import rip.athena.client.config.entries.*;
|
|||||||
import rip.athena.client.ui.framework.Menu;
|
import rip.athena.client.ui.framework.Menu;
|
||||||
import rip.athena.client.ui.framework.TextPattern;
|
import rip.athena.client.ui.framework.TextPattern;
|
||||||
import rip.athena.client.ui.framework.components.MenuButton;
|
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.framework.components.MenuTextField;
|
||||||
import rip.athena.client.ui.clickgui.IngameMenu;
|
import rip.athena.client.ui.clickgui.IngameMenu;
|
||||||
import rip.athena.client.ui.clickgui.Page;
|
import rip.athena.client.ui.clickgui.Page;
|
||||||
|
@ -760,7 +760,7 @@ public class SettingsPage extends Page {
|
|||||||
} else if(configEntry instanceof ColorEntry) {
|
} else if(configEntry instanceof ColorEntry) {
|
||||||
ColorEntry entry = (ColorEntry) configEntry;
|
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
|
@Override
|
||||||
public void onAction() {
|
public void onAction() {
|
||||||
entry.setValue(module, getColor());
|
entry.setValue(module, getColor());
|
||||||
|
@ -3,6 +3,9 @@ package rip.athena.client.ui.framework;
|
|||||||
import net.minecraft.client.gui.GuiScreen;
|
import net.minecraft.client.gui.GuiScreen;
|
||||||
import net.minecraft.client.gui.ScaledResolution;
|
import net.minecraft.client.gui.ScaledResolution;
|
||||||
import net.minecraft.client.renderer.GlStateManager;
|
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.Keyboard;
|
||||||
import org.lwjgl.input.Mouse;
|
import org.lwjgl.input.Mouse;
|
||||||
import rip.athena.api.module.Module;
|
import rip.athena.api.module.Module;
|
||||||
@ -38,6 +41,14 @@ public class MinecraftMenuImpl extends GuiScreen {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void initGui() {
|
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);
|
Keyboard.enableRepeatEvents(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -142,6 +153,10 @@ public class MinecraftMenuImpl extends GuiScreen {
|
|||||||
if(feature != null) {
|
if(feature != null) {
|
||||||
feature.setEnabled(false);
|
feature.setEnabled(false);
|
||||||
}
|
}
|
||||||
|
if (mc.entityRenderer.theShaderGroup != null) {
|
||||||
|
mc.entityRenderer.theShaderGroup.deleteShaderGroup();
|
||||||
|
mc.entityRenderer.theShaderGroup = null;
|
||||||
|
}
|
||||||
|
|
||||||
ready = false;
|
ready = false;
|
||||||
super.onGuiClosed();
|
super.onGuiClosed();
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package rip.athena.client.ui.framework.components;
|
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.MenuComponent;
|
||||||
import rip.athena.client.ui.framework.MenuPriority;
|
import rip.athena.client.ui.framework.MenuPriority;
|
||||||
import rip.athena.client.ui.framework.draw.ButtonState;
|
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.client.renderer.texture.DynamicTexture;
|
||||||
import net.minecraft.util.ResourceLocation;
|
import net.minecraft.util.ResourceLocation;
|
||||||
import org.lwjgl.input.Mouse;
|
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.*;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
@ -20,46 +23,9 @@ import java.awt.image.BufferedImage;
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
public class MenuColorPicker extends MenuComponent {
|
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) {
|
public MenuColorPicker(int x, int y, int width, int height, int defaultColor) {
|
||||||
super(x, y, width, height);
|
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
|
@Override
|
||||||
@ -88,421 +54,44 @@ public class MenuColorPicker extends MenuComponent {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onMouseClick(int button) {
|
public void onMouseClick(int button) {
|
||||||
if(button == 0 && alphaSlider.passesThrough()) {
|
|
||||||
mouseDown = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
alphaSlider.onMouseClick(button);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onMouseClickMove(int button) {
|
public void onMouseClickMove(int button) {
|
||||||
if(button == 0 && alphaSlider.passesThrough()) {
|
|
||||||
mouseDragging = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
alphaSlider.onMouseClickMove(button);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onExitGui(int key) {
|
public boolean onExitGui(int key) {
|
||||||
if(pickingColor) {
|
|
||||||
pickingColor = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
alphaSlider.onExitGui(key);
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean passesThrough() {
|
public boolean passesThrough() {
|
||||||
if(pickingColor) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(disabled) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
int x = this.getRenderX();
|
int x = this.getRenderX();
|
||||||
int y = this.getRenderY();
|
int y = this.getRenderY();
|
||||||
int mouseX = parent.getMouseX();
|
int mouseX = parent.getMouseX();
|
||||||
int mouseY = parent.getMouseY();
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPreSort() {
|
public void onPreSort() {
|
||||||
if(alphaSlider.getParent() == null && getParent() != null) {
|
|
||||||
alphaSlider.setParent(getParent());
|
|
||||||
}
|
|
||||||
|
|
||||||
int x = this.getRenderX();
|
int x = this.getRenderX();
|
||||||
int y = this.getRenderY();
|
int y = this.getRenderY();
|
||||||
int mouseX = parent.getMouseX();
|
int mouseX = parent.getMouseX();
|
||||||
int mouseY = parent.getMouseY();
|
int mouseY = parent.getMouseY();
|
||||||
ButtonState state = ButtonState.NORMAL;
|
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
|
@Override
|
||||||
public void onRender() {
|
public void onRender() {
|
||||||
int x = this.getRenderX();
|
int x = this.getRenderX();
|
||||||
int y = this.getRenderY();
|
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() {}
|
public void onAction() {}
|
||||||
|
@ -411,7 +411,7 @@ public class MenuScrollPane extends MenuComponent {
|
|||||||
for(MenuComponent component : components) {
|
for(MenuComponent component : components) {
|
||||||
if(component instanceof MenuColorPicker) {
|
if(component instanceof MenuColorPicker) {
|
||||||
MenuColorPicker picker = (MenuColorPicker) component;
|
MenuColorPicker picker = (MenuColorPicker) component;
|
||||||
picker.drawPicker();
|
//picker.drawPicker();
|
||||||
} else if(component instanceof MenuLabel) {
|
} else if(component instanceof MenuLabel) {
|
||||||
MenuLabel label = (MenuLabel) component;
|
MenuLabel label = (MenuLabel) component;
|
||||||
label.drawTooltip();
|
label.drawTooltip();
|
||||||
|
@ -247,7 +247,9 @@ public class AthenaMenu extends GuiScreen implements GuiYesNoCallback
|
|||||||
|
|
||||||
public void drawScreen(int mouseX, int mouseY, float partialTicks)
|
public void drawScreen(int mouseX, int mouseY, float partialTicks)
|
||||||
{
|
{
|
||||||
|
GlStateManager.pushMatrix();
|
||||||
DrawUtils.drawImage(new ResourceLocation("Athena/menu/wallpaper3.png"), 0, 0, width, height);
|
DrawUtils.drawImage(new ResourceLocation("Athena/menu/wallpaper3.png"), 0, 0, width, height);
|
||||||
|
GlStateManager.popMatrix();
|
||||||
|
|
||||||
int[] size = InputUtils.getWindowsSize();
|
int[] size = InputUtils.getWindowsSize();
|
||||||
int startX = size[0] / 2;
|
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.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());
|
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;
|
//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.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());
|
//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;
|
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());
|
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 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 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) {
|
if(isOverExit) {
|
||||||
this.mc.shutdown();
|
this.mc.shutdown();
|
||||||
@ -308,9 +310,9 @@ public class AthenaMenu extends GuiScreen implements GuiYesNoCallback
|
|||||||
this.mc.displayGuiScreen(new GuiAccountManager(this));
|
this.mc.displayGuiScreen(new GuiAccountManager(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
if(isOverSkinManager) {
|
/*if(isOverSkinManager) {
|
||||||
this.mc.displayGuiScreen(new GuiSkinManager(this));
|
this.mc.displayGuiScreen(new GuiSkinManager(this));
|
||||||
}
|
}*/
|
||||||
|
|
||||||
synchronized (this.threadLock)
|
synchronized (this.threadLock)
|
||||||
{
|
{
|
||||||
|
@ -30,6 +30,8 @@ public class LoginPanel extends Panel {
|
|||||||
public final List<TextField> textFields = new ArrayList<>();
|
public final List<TextField> textFields = new ArrayList<>();
|
||||||
private String status = "";
|
private String status = "";
|
||||||
|
|
||||||
|
private boolean sendToMenu = false;
|
||||||
|
|
||||||
public LoginPanel() {
|
public LoginPanel() {
|
||||||
setHeight(200);
|
setHeight(200);
|
||||||
actionButtons.add(new AltButton("Offline Login"));
|
actionButtons.add(new AltButton("Offline Login"));
|
||||||
@ -111,7 +113,7 @@ public class LoginPanel extends Panel {
|
|||||||
if (actionButton.getName().equals("Offline Login")) {
|
if (actionButton.getName().equals("Offline Login")) {
|
||||||
TextField cracked = textFields.get(0);
|
TextField cracked = textFields.get(0);
|
||||||
|
|
||||||
if(cracked.getText() == null) {
|
if(cracked.getText().isEmpty()) {
|
||||||
status = "Username field is null";
|
status = "Username field is null";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -151,6 +153,10 @@ public class LoginPanel extends Panel {
|
|||||||
|
|
||||||
float logoSize = 22;
|
float logoSize = 22;
|
||||||
DrawUtils.drawMicrosoftLogo(microX + microWidth - (10 + logoSize), microsoftY + (microHeight / 2f) - (logoSize / 2f), logoSize, 1.5f);
|
DrawUtils.drawMicrosoftLogo(microX + microWidth - (10 + logoSize), microsoftY + (microHeight / 2f) - (logoSize / 2f), logoSize, 1.5f);
|
||||||
|
|
||||||
|
if(sendToMenu) {
|
||||||
|
Minecraft.getMinecraft().displayGuiScreen(new AthenaMenu());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -174,6 +180,9 @@ public class LoginPanel extends Panel {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
MicrosoftAuthResult acc = authenticator.loginWithCredentials(email, password);
|
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");
|
Minecraft.getMinecraft().session = new Session(acc.getProfile().getName(), acc.getProfile().getId(), acc.getAccessToken(), "legacy");
|
||||||
|
|
||||||
status = "Logged into " + acc.getProfile().getName();
|
status = "Logged into " + acc.getProfile().getName();
|
||||||
@ -190,9 +199,10 @@ public class LoginPanel extends Panel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Send to main menu
|
// Send to main menu
|
||||||
Minecraft.getMinecraft().displayGuiScreen(new AthenaMenu());
|
sendToMenu = true;
|
||||||
|
|
||||||
} catch (MicrosoftAuthenticationException e) {
|
} catch (Exception e) {
|
||||||
|
status = e.getMessage();
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -72,7 +72,7 @@ public class AsyncScreenshot implements Runnable {
|
|||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
||||||
String clientID = "";
|
String clientID = "05134ff84f31635";
|
||||||
|
|
||||||
String data = "";
|
String data = "";
|
||||||
data = URLEncoder.encode("image", "UTF-8") + "=" + URLEncoder.encode(Base64.getEncoder().encodeToString(byteArrayOutputStream.toByteArray()), "UTF-8");
|
data = URLEncoder.encode("image", "UTF-8") + "=" + URLEncoder.encode(Base64.getEncoder().encodeToString(byteArrayOutputStream.toByteArray()), "UTF-8");
|
||||||
|
BIN
src/main/resources/assets/minecraft/Athena/gui/partner/star.png
Normal file
After Width: | Height: | Size: 51 KiB |
37
src/main/resources/assets/minecraft/shaders/post/blur.json
Normal 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 ]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 989 B |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 1.0 KiB |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 733 B |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 650 B |
After Width: | Height: | Size: 727 B |
After Width: | Height: | Size: 682 B |
After Width: | Height: | Size: 814 B |
After Width: | Height: | Size: 699 B |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 2.7 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 977 B |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 605 B |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 4.4 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 698 B |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 993 B |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 2.7 KiB |
After Width: | Height: | Size: 1.9 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 935 B |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 567 B |
After Width: | Height: | Size: 1019 B |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 812 B |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 882 B |