diff --git a/src/main/java/net/minecraft/client/Minecraft.java b/src/main/java/net/minecraft/client/Minecraft.java index 66e050eb..a6861e50 100644 --- a/src/main/java/net/minecraft/client/Minecraft.java +++ b/src/main/java/net/minecraft/client/Minecraft.java @@ -1683,11 +1683,11 @@ public class Minecraft implements IThreadListener, IPlayerUsage */ public void runTick() throws IOException { - if(Minecraft.getMinecraft().thePlayer != null && Minecraft.getMinecraft().theWorld != null) { + //if(Minecraft.getMinecraft().thePlayer != null && Minecraft.getMinecraft().theWorld != null) { if(!Athena.INSTANCE.getEventBus().post(new ClientTickEvent())) { return; } - } + //} if (this.rightClickDelayTimer > 0) { diff --git a/src/main/java/rip/athena/api/config/save/Config.java b/src/main/java/rip/athena/api/config/save/Config.java index d79a33ed..79e55b87 100644 --- a/src/main/java/rip/athena/api/config/save/Config.java +++ b/src/main/java/rip/athena/api/config/save/Config.java @@ -7,16 +7,16 @@ import net.minecraft.util.EnumParticleTypes; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; +import rip.athena.api.macro.Macro; import rip.athena.api.module.Module; import rip.athena.client.Athena; import rip.athena.client.config.AbstractConfigEntry; -import rip.athena.client.cosmetics.cape.Cape; import rip.athena.client.events.client.ConfigChangeEvent; -import rip.athena.client.ui.clickgui.pages.SettingsPage; -import rip.athena.client.ui.hud.HUDElement; -import rip.athena.api.macro.Macro; import rip.athena.client.modules.render.Crosshair; import rip.athena.client.theme.impl.AccentTheme; +import rip.athena.client.theme.impl.PrimaryTheme; +import rip.athena.client.ui.clickgui.pages.SettingsPage; +import rip.athena.client.ui.hud.HUDElement; import rip.athena.client.utils.StringUtils; import rip.athena.client.utils.file.FileHandler; import rip.athena.client.utils.input.BindType; @@ -169,13 +169,21 @@ public class Config { } } + String primaryThemeIdentifier = obj.getString("primaryTheme"); + for (PrimaryTheme theme : PrimaryTheme.values()) { + if (theme.name().equalsIgnoreCase(primaryThemeIdentifier)) { + Athena.INSTANCE.getThemeManager().setPrimaryTheme(theme); + break; + } + } + String capeIdentifier = obj.getString("cape"); - for (Cape cape : Athena.INSTANCE.getCosmeticsController().getCapeManager().getCapes()) { + /*for (Cape cape : Athena.INSTANCE.getCosmeticsController().getCapeManager().getCapes()) { if (cape.getName().equalsIgnoreCase(capeIdentifier)) { Athena.INSTANCE.getCosmeticsController().getCapeManager().setSelectedCape(cape); break; } - } + }*/ List list = new ArrayList<>(); @@ -384,7 +392,8 @@ public class Config { } config.put("theme", Athena.INSTANCE.getThemeManager().getTheme().name()); - config.put("cape", Athena.INSTANCE.getCosmeticsController().getCapeManager().getSelectedCape().getName()); + config.put("primaryTheme", Athena.INSTANCE.getThemeManager().getPrimaryTheme().name()); + //config.put("cape", Athena.INSTANCE.getCosmeticsController().getCapeManager().getSelectedCape().getName()); JSONArray macros = new JSONArray(); diff --git a/src/main/java/rip/athena/client/cosmetics/CosmeticsController.java b/src/main/java/rip/athena/api/cosmetics/CosmeticsManager.java similarity index 71% rename from src/main/java/rip/athena/client/cosmetics/CosmeticsController.java rename to src/main/java/rip/athena/api/cosmetics/CosmeticsManager.java index d0e00925..55f13acd 100644 --- a/src/main/java/rip/athena/client/cosmetics/CosmeticsController.java +++ b/src/main/java/rip/athena/api/cosmetics/CosmeticsManager.java @@ -1,8 +1,8 @@ -package rip.athena.client.cosmetics; +package rip.athena.api.cosmetics; import lombok.Getter; +import rip.athena.api.cosmetics.cape.CapeManager; import rip.athena.client.Athena; -import rip.athena.client.cosmetics.cape.CapeManager; /** * @project Athena-Client @@ -11,10 +11,10 @@ import rip.athena.client.cosmetics.cape.CapeManager; */ @Getter -public class CosmeticsController { +public class CosmeticsManager { private final CapeManager capeManager; - public CosmeticsController() { + public CosmeticsManager() { Athena.INSTANCE.sendInitializationMessage("Cosmetics Controller", false); capeManager = new CapeManager(); diff --git a/src/main/java/rip/athena/api/cosmetics/cape/Cape.java b/src/main/java/rip/athena/api/cosmetics/cape/Cape.java new file mode 100644 index 00000000..115921a9 --- /dev/null +++ b/src/main/java/rip/athena/api/cosmetics/cape/Cape.java @@ -0,0 +1,100 @@ +package rip.athena.api.cosmetics.cape; + +import lombok.Getter; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.texture.DynamicTexture; +import net.minecraft.client.renderer.texture.TextureUtil; +import net.minecraft.util.ResourceLocation; +import org.json.JSONException; +import rip.athena.client.Athena; +import rip.athena.client.requests.ContentType; +import rip.athena.client.requests.WebRequest; + +import java.awt.*; +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.HashMap; +import java.util.Map; +import java.util.NoSuchElementException; + + +@Getter +public class Cape { + + private int id = 0; + private int totalFrames = 0; + + private final String capeName; + private String capeLocation; + private String name; + + private Map framesLocation; + private ResourceLocation preview; + + private Map preloads; + + private boolean isAnimated; + + public Cape(int id, String name, String capeName, String capeLocation, boolean isAnimated, int totalFrames) { + this.id = id; + this.name = name; + this.capeName = capeName; + this.capeLocation = capeLocation; + this.preloads = new HashMap<>(); + this.framesLocation = new HashMap<>(); + this.isAnimated = isAnimated; + this.totalFrames = totalFrames; + + if(!capeLocation.isEmpty()) { + try { + BufferedImage image = TextureUtil.readBufferedImage(Files.newInputStream(Paths.get(getFramePath(0)))); + DynamicTexture dynamicTexture = new DynamicTexture(image); + preview = Minecraft.getMinecraft().getTextureManager().getDynamicTextureLocation(getFramePath(0), dynamicTexture); + } catch (IOException e) { + Athena.INSTANCE.getLog().error("Failed to load cape asset, missing. " + e); + } + } + } + + public Cape(int id, String name, String capeName, final String capeLocation) { + this(id,name,capeName,capeLocation,false,0); + } + + public void updateSelectedCape() { + try { + WebRequest request = new WebRequest("http://athena.rip/api/updateecapeselected?uuid=" + Minecraft.getMinecraft().thePlayer.getUniqueID() + "&selected=" + this.capeName + "&hwid=" + IIIIIIIIIIIII(), "GET", ContentType.NONE, false); + request.connect(); + } catch (JSONException | NoSuchElementException | IOException | NoSuchAlgorithmException e) { + e.printStackTrace(); + } + + Athena.INSTANCE.getCosmeticsManager().getCapeManager().getCapeLookupThread().performUpdate(); + } + + public String IIIIIIIIIIIII() throws NoSuchAlgorithmException, IOException { + + String s = ""; + final String main = System.getenv("PROCESSOR_IDENTIFIER") + System.getenv("COMPUTERNAME") + + System.getProperty("user.name").trim(); + final byte[] bytes = main.getBytes("UTF-8"); + final MessageDigest messageDigest = MessageDigest.getInstance("MD5"); + final byte[] md5 = messageDigest.digest(bytes); + int i = 0; + for (final byte b : md5) { + s += Integer.toHexString((b & 0xFF) | 0x300).substring(0, 3); + if (i != md5.length - 1) { + s += "-"; + } + i++; + } + return s; + } + + public String getFramePath(int frame) { + return capeLocation.replace("#", frame + ""); + } +} diff --git a/src/main/java/rip/athena/api/cosmetics/cape/CapeLookupThread.java b/src/main/java/rip/athena/api/cosmetics/cape/CapeLookupThread.java new file mode 100644 index 00000000..d798cdd8 --- /dev/null +++ b/src/main/java/rip/athena/api/cosmetics/cape/CapeLookupThread.java @@ -0,0 +1,60 @@ +package rip.athena.api.cosmetics.cape; + +import net.minecraft.client.Minecraft; +import org.json.JSONException; +import rip.athena.client.requests.ContentType; +import rip.athena.client.requests.WebRequest; +import rip.athena.client.requests.WebRequestResult; + +import java.io.IOException; +import java.util.NoSuchElementException; + +public class CapeLookupThread extends Thread { + CapeManager capeManager; + WebRequest request; + + public CapeLookupThread(CapeManager capeManager) { + this.capeManager = capeManager; + + try { + request = new WebRequest("https://athena.rip/uploads/refreshlist.txt", "GET", ContentType.NONE, false); + } catch (JSONException | NoSuchElementException | IOException e) { + e.printStackTrace(); + } + } + + public void run() { + while (true) { + if (capeManager != null && capeManager.getSettings().getEnabled()) { + if (Minecraft.getMinecraft() != null && Minecraft.getMinecraft().theWorld != null && Minecraft.getMinecraft().thePlayer != null) { + performUpdate(); + } + } + try { + CapeLookupThread.sleep(15 * 1000); + } catch (InterruptedException interruptedexception) { + interruptedexception.printStackTrace(); + } + } + } + + public void performUpdate() { + try { + WebRequestResult result = request.connect(); + String med = result.getData(); + + if (!med.isEmpty()) { + String[] splitOne = med.split("\\s*,\\s*"); + capeManager.getUserCapes().clear(); + for (String s : splitOne) { + String[] split = s.split(":"); + String uuid = split[0]; + int capeID = Integer.parseInt(split[1]); + capeManager.getUserCapes().put(uuid, capeID); + } + } + } catch (JSONException | NoSuchElementException | IOException | ArrayIndexOutOfBoundsException e) { + e.printStackTrace(); + } + } +} \ No newline at end of file diff --git a/src/main/java/rip/athena/api/cosmetics/cape/CapeManager.java b/src/main/java/rip/athena/api/cosmetics/cape/CapeManager.java new file mode 100644 index 00000000..c0f26369 --- /dev/null +++ b/src/main/java/rip/athena/api/cosmetics/cape/CapeManager.java @@ -0,0 +1,230 @@ +package rip.athena.api.cosmetics.cape; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.model.ModelRenderer; +import org.json.JSONException; +import rip.athena.api.cosmetics.cape.player.PlayerCapeHandler; +import rip.athena.api.cosmetics.cape.settings.CapeSettings; +import rip.athena.client.Athena; +import rip.athena.client.requests.ContentType; +import rip.athena.client.requests.WebRequest; +import rip.athena.client.requests.WebRequestResult; +import rip.athena.client.ui.clickgui.pages.cosmetics.CapeType; + +import java.io.*; +import java.util.*; +import java.util.concurrent.CopyOnWriteArrayList; + +public class CapeManager { + + private CapeLookupThread capeLookupThread; + + private List players; + private List ownedCapes; + + private HashMap userCapes; + private ArrayList capes; + + public ModelRenderer bipedCloakShoulders; + public ModelRenderer miniBipedCloak; + public ModelRenderer miniBipedCloakShoulders; + + private CapeSettings settings; + + public CapeManager() { + loadSettings(); + + this.players = new ArrayList<>(); + this.userCapes = new HashMap<>(); + this.ownedCapes = new CopyOnWriteArrayList<>(); + + this.capes = new ArrayList<>(); + this.capes.add(new Cape(0, "None", "none", "none", false, 0)); + this.capes.add(new Cape(1, "Staff", "cape_staff", "Athena/cosmetics/capes/staff.png")); + + this.updateOwnedCapes(); + } + + private void updateOwnedCapes() { + new Thread(() -> { + try { + WebRequest request = new WebRequest("http://athena.rip/api/getcapes?uuid=" + Minecraft.getMinecraft().getSession().getProfile().getId(), "GET", ContentType.NONE, false); + WebRequestResult result = request.connect(); + + String userCapeList = result.getData(); + + List list = Arrays.asList(userCapeList.split("\\s*,\\s*")); + + for(int i = 0; i < list.size(); i++) { + String cape = list.get(i); + Cape toAdd = getCape(cape); + if(toAdd !=null && !ownedCapes.contains(toAdd)) { + ownedCapes.add(toAdd); + } + } + + ownedCapes.sort((o1, o2) -> { + String name1 = o1.getName().toUpperCase().replace("_", " "); + String name2 = o2.getName().toUpperCase().replace("_", " "); + return name1.compareTo(name2); + }); + } catch (JSONException | NoSuchElementException | IOException e) { + e.printStackTrace(); + } + }).start(); + } + + public void loadSettings() { + boolean isEnabled = true; + CapeType type = CapeType.NORMAL; + if(!Athena.INSTANCE.getMAIN_DIR().exists()) { + Athena.INSTANCE.getMAIN_DIR().mkdir(); + } + File capeFile = new File(Athena.INSTANCE.getMAIN_DIR() + File.separator + "capesettings.txt"); + if(!capeFile.exists()) { + try { + capeFile.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } + } else { + try { + BufferedReader bf = new BufferedReader(new FileReader(capeFile)); + String line; + while ((line = bf.readLine()) != null) { + String[] args = line.split("::"); + String name = args[0]; + if(name.equalsIgnoreCase("enabled")) { + isEnabled = Boolean.parseBoolean(args[1]); + } + if(name.equalsIgnoreCase("type")) { + type = CapeType.valueOf(args[1]); + } + } + bf.close(); + } + catch(Exception ex) { + + } + } + this.settings = new CapeSettings(isEnabled, type == null ? CapeType.NORMAL : type); + saveSettings(); + } + + public void saveSettings() { + if(!Athena.INSTANCE.getMAIN_DIR().exists()) { + Athena.INSTANCE.getMAIN_DIR().mkdir(); + } + File capeFile = new File(Athena.INSTANCE.getMAIN_DIR() + File.separator + "capesettings.txt"); + if(!capeFile.exists()) { + try { + capeFile.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } + } else { + capeFile.delete(); + try { + capeFile.createNewFile(); + } + catch(Exception e) { + e.printStackTrace(); + } + } + + try { + BufferedWriter writer = new BufferedWriter(new FileWriter(capeFile)); + StringBuilder builder1 = new StringBuilder(); + builder1.append("Enabled"); + builder1.append("::"); + builder1.append(getSettings().isEnabled); + builder1.append("\n"); + builder1.append("Type"); + builder1.append("::"); + builder1.append(getSettings().getType() == null ? CapeType.NORMAL.toString() : getSettings().getType().toString()); + writer.write(builder1.toString()); + writer.close(); + } + catch(Exception ex) { + ex.printStackTrace(); + } + } + + public CapeLookupThread getCapeLookupThread() { + return capeLookupThread; + } + + public CapeSettings getSettings() { + return this.settings; + } + + public ArrayList getCapes() { + return capes; + } + + public List getOwnedCapes() { + return ownedCapes; + } + + public HashMap getUserCapes() { + return this.userCapes; + } + + public List getPlayers() { + return players; + } + + /** + * Retrieves a player with the specified uuid. + * + * @param uuid The uuid of the player. + * @return The player with the specified uuid, or null if not found. + */ + public PlayerCapeHandler getPlayer(String uuid) { + for(PlayerCapeHandler player : players) { + if(player.getPlayerUUID().equalsIgnoreCase(uuid)) { + return player; + } + } + return null; + } + + + /** + * Retrieves a cape with the specified name. + * + * @param name The name of the cape. + * @return The cape with the specified name, or null if not found. + */ + public Cape getCape(String name) { + Cape requestedCape = capes + .stream() + .filter(cape -> cape.getName().equalsIgnoreCase(name)) + .findFirst() + .orElse(null); + if (requestedCape == null) { + // Log a message indicating that the cape is not found + Athena.INSTANCE.getLog().warn("Tried accessing non-existing cape: " + name); + } + return requestedCape; + } + + /** + * Retrieves a cape with the specified id. + * + * @param id The id of the cape. + * @return The cape with the specified id, or null if not found. + */ + public Cape getCapeByID(int id) { + Cape requestedCape = capes + .stream() + .filter(cape -> cape.getId() == id) + .findFirst() + .orElse(null); + if (requestedCape == null) { + // Log a message indicating that the cape is not found + Athena.INSTANCE.getLog().warn("Tried accessing non-existing cape: " + id); + } + return requestedCape; + } +} diff --git a/src/main/java/rip/athena/api/cosmetics/cape/player/PlayerCapeHandler.java b/src/main/java/rip/athena/api/cosmetics/cape/player/PlayerCapeHandler.java new file mode 100644 index 00000000..cb204c30 --- /dev/null +++ b/src/main/java/rip/athena/api/cosmetics/cape/player/PlayerCapeHandler.java @@ -0,0 +1,30 @@ +package rip.athena.api.cosmetics.cape.player; + +import lombok.Getter; +import lombok.Setter; +import net.minecraft.util.ResourceLocation; + +@Setter +@Getter +public class PlayerCapeHandler { + + private ResourceLocation location; + + private String playerUUID; + private String playerName; + + public long lastFrameTime; + public int lastFrame; + public int capeInterval; + + private boolean hasInfo; + + public PlayerCapeHandler(String playerName, String playerUUID) { + this.hasInfo = false; + this.playerUUID = playerUUID; + this.playerName = playerName; + this.lastFrameTime = 0L; + this.lastFrame = 0; + this.capeInterval = 100; + } +} diff --git a/src/main/java/rip/athena/api/cosmetics/cape/settings/CapeSettings.java b/src/main/java/rip/athena/api/cosmetics/cape/settings/CapeSettings.java new file mode 100644 index 00000000..1dfb4a01 --- /dev/null +++ b/src/main/java/rip/athena/api/cosmetics/cape/settings/CapeSettings.java @@ -0,0 +1,30 @@ +package rip.athena.api.cosmetics.cape.settings; + +import rip.athena.client.ui.clickgui.pages.cosmetics.CapeType; + +public class CapeSettings { + + public boolean isEnabled; + public CapeType capeType; + + public CapeSettings(boolean isEnabled, CapeType capeType) { + this.isEnabled = isEnabled; + this.capeType = capeType; + } + + public boolean getEnabled() { + return this.isEnabled; + } + + public CapeType getType() { + return this.capeType; + } + + public void setEnabled(boolean enabled) { + this.isEnabled = enabled; + } + + public void setType(CapeType type) { + this.capeType = type; + } +} \ No newline at end of file diff --git a/src/main/java/rip/athena/api/font/CustomFont.java b/src/main/java/rip/athena/api/font/CustomFont.java index 89df3dec..69b6d1a3 100644 --- a/src/main/java/rip/athena/api/font/CustomFont.java +++ b/src/main/java/rip/athena/api/font/CustomFont.java @@ -210,8 +210,6 @@ public class CustomFont { } glPopMatrix(); } - - public void glColor(final Color color) { final float red = color.getRed() / 255F, diff --git a/src/main/java/rip/athena/api/module/Module.java b/src/main/java/rip/athena/api/module/Module.java index 83ec8dab..f737b898 100644 --- a/src/main/java/rip/athena/api/module/Module.java +++ b/src/main/java/rip/athena/api/module/Module.java @@ -4,17 +4,16 @@ import lombok.Getter; import lombok.Setter; import net.minecraft.client.Minecraft; import org.lwjgl.input.Keyboard; +import rip.athena.api.config.ConfigValue; import rip.athena.api.module.annotations.IModuleMetaData; import rip.athena.client.Athena; import rip.athena.client.config.AbstractConfigEntry; -import rip.athena.api.config.ConfigValue; import rip.athena.client.config.entries.*; import rip.athena.client.ui.hud.HUDElement; import rip.athena.client.utils.input.BindType; import java.lang.annotation.Annotation; import java.lang.reflect.Field; -import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; @@ -125,13 +124,11 @@ public class Module { */ private void processFields() { for (Field field : getClass().getDeclaredFields()) { - Type fieldType = field.getType(); - if (!field.isAccessible()) { field.setAccessible(true); } - Object annotation = null; + Object annotation; if ((annotation = getAnnotation(field, ConfigValue.Boolean.class)) != null) { ConfigValue.Boolean boolAnnotation = (ConfigValue.Boolean) annotation; diff --git a/src/main/java/rip/athena/api/skin/Skin.java b/src/main/java/rip/athena/api/skin/Skin.java new file mode 100644 index 00000000..eeb9f0f3 --- /dev/null +++ b/src/main/java/rip/athena/api/skin/Skin.java @@ -0,0 +1,46 @@ +package rip.athena.api.skin; + +import rip.athena.client.utils.animations.simple.SimpleAnimation; +import rip.athena.client.utils.time.TimerUtil; + +/** + * @author Athena Development + * @project Athena-Client + * @date 6/10/2023 + */ +public class Skin { + + private String username; + private String info; + + public SimpleAnimation opacityAnimation = new SimpleAnimation(0.0F); + private final TimerUtil timer; + public boolean isDone; + + public Skin(String username) { + this.username = username; + this.info = ""; + this.timer = new TimerUtil(); + this.isDone = true; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getInfo() { + return info; + } + + public void setInfo(String info) { + this.info = info; + } + + public TimerUtil getTimer() { + return timer; + } +} diff --git a/src/main/java/rip/athena/api/skin/SkinManager.java b/src/main/java/rip/athena/api/skin/SkinManager.java new file mode 100644 index 00000000..eef6a6c6 --- /dev/null +++ b/src/main/java/rip/athena/api/skin/SkinManager.java @@ -0,0 +1,101 @@ +package rip.athena.api.skin; + +import rip.athena.client.Athena; + +import java.io.BufferedReader; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.PrintWriter; +import java.util.ArrayList; + +/** + * @project Athena-Client + * @author Athena Development + * @date 6/10/2023 + */ +public class SkinManager { + + private ArrayList skins = new ArrayList<>(); + + private Skin currentSkin; + + public boolean isFirstLogin = false; + + public SkinManager() { + Athena.INSTANCE.sendInitializationMessage("Skin Manager", false); + + if(Athena.INSTANCE.getSKINS_DIR().length() == 0) { + isFirstLogin = true; + } + + this.load(); + + Athena.INSTANCE.sendInitializationMessage("Skin Manager", true); + } + + public void save() { + ArrayList toSave = new ArrayList<>(); + + for (Skin a : Athena.INSTANCE.getSkinManager().getSkins()) { + toSave.add("Skin:" + a.getUsername()); + } + + if(getCurrentSkin() != null) { + toSave.add("Current:" + getCurrentSkin().getUsername()); + } + + try { + PrintWriter pw = new PrintWriter(Athena.INSTANCE.getSKINS_DIR()); + for (String str : toSave) { + pw.println(str); + } + pw.close(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + } + + public void load() { + ArrayList lines = new ArrayList<>(); + + try { + BufferedReader reader = new BufferedReader(new FileReader(Athena.INSTANCE.getSKINS_DIR())); + String line = reader.readLine(); + while (line != null) { + lines.add(line); + line = reader.readLine(); + } + reader.close(); + } catch (Exception e) { + e.printStackTrace(); + } + + for (String s : lines) { + String[] args = s.split(":"); + + if (s.toLowerCase().startsWith("skin:")) { + skins.add(new Skin(args[1])); + } + + if (s.toLowerCase().startsWith("current:")) { + setCurrentSkin(getSkinByUsername(args[1])); + } + } + } + + public Skin getSkinByUsername(String name) { + return skins.stream().filter(skin -> skin.getUsername().equalsIgnoreCase(name)).findFirst().orElse(null); + } + + public ArrayList getSkins() { + return skins; + } + + public Skin getCurrentSkin() { + return currentSkin; + } + + public void setCurrentSkin(Skin currentSkin) { + this.currentSkin = currentSkin; + } +} diff --git a/src/main/java/rip/athena/client/Athena.java b/src/main/java/rip/athena/client/Athena.java index a486b27e..e30e4cac 100644 --- a/src/main/java/rip/athena/client/Athena.java +++ b/src/main/java/rip/athena/client/Athena.java @@ -5,11 +5,12 @@ import net.minecraft.client.Minecraft; import org.lwjgl.opengl.Display; import rip.athena.api.account.AccountManager; import rip.athena.api.config.save.ConfigManager; +import rip.athena.api.cosmetics.CosmeticsManager; import rip.athena.api.event.EventBus; import rip.athena.api.event.SubscribeEvent; import rip.athena.api.macro.MacroManager; import rip.athena.api.module.ModuleRepository; -import rip.athena.client.cosmetics.CosmeticsController; +import rip.athena.api.skin.SkinManager; import rip.athena.client.events.client.ClientTickEvent; import rip.athena.client.socket.SocketClient; import rip.athena.client.theme.ThemeManager; @@ -20,8 +21,10 @@ import rip.athena.client.utils.discord.DiscordRPC; import rip.athena.client.utils.input.KeybindManager; import javax.swing.*; +import java.awt.*; import java.io.File; import java.io.IOException; +import java.net.URI; import java.nio.file.Paths; /** @@ -41,9 +44,10 @@ public class Athena { public static final Athena INSTANCE = new Athena(); - public final File MAIN_DIR = Paths.get(Minecraft.getMinecraft().mcDataDir.getAbsolutePath(), "settings").toFile(); - public final File CONFIGS_DIR = Paths.get(MAIN_DIR.getAbsolutePath(), "configs").toFile(); - public final File ACCOUNTS_DIR = new File(MAIN_DIR.getAbsolutePath(), "accounts.json"); + private final File MAIN_DIR = Paths.get(Minecraft.getMinecraft().mcDataDir.getAbsolutePath(), "settings").toFile(); + private final File CONFIGS_DIR = Paths.get(MAIN_DIR.getAbsolutePath(), "configs").toFile(); + private final File ACCOUNTS_DIR = new File(MAIN_DIR.getAbsolutePath(), "accounts.json"); + private final File SKINS_DIR = new File(MAIN_DIR.getAbsolutePath(), "skins.json"); private final PrefixedLogger log = new PrefixedLogger("Athena"); @@ -54,12 +58,14 @@ public class Athena { private final boolean debug = false; private NotificationManager notificationManager; - private CosmeticsController cosmeticsController; + //private CosmeticsController cosmeticsController; + private CosmeticsManager cosmeticsManager; private ModuleRepository moduleRepository; private AccountManager accountManager; private ConfigManager configManager; private ThemeManager themeManager; private MacroManager macroManager; + private SkinManager skinManager; private HUDManager hudManager; private DiscordRPC discordRPC; private EventBus eventBus; @@ -74,23 +80,25 @@ public class Athena { * connections with servers or other systems. */ public void initClient() { - sendInitializationMessage("Athena", false); createDirectoryIfNotExists(MAIN_DIR); createFileIfNotExists(ACCOUNTS_DIR); - postInit(); + preInit(); handleManagers(); registerEvents(); checkCosmetics(); logInformation(); - } - private void postInit() { + private void preInit() { + try { + Desktop.getDesktop().browse(URI.create("https://discord.gg/pdKz6UdyNX")); + } catch (Exception ignored) {} + this.discordRPC = new DiscordRPC(); if(SocketClient.isClientRunning()) { @@ -105,19 +113,21 @@ public class Athena { this.moduleRepository = new ModuleRepository(); this.themeManager = new ThemeManager(); this.macroManager = new MacroManager(); + this.skinManager = new SkinManager(); this.hudManager = new HUDManager(); this.eventBus = new EventBus(); this.notificationManager = new NotificationManager(); - this.cosmeticsController = new CosmeticsController(); + this.cosmeticsManager = new CosmeticsManager(); + //this.cosmeticsController = new CosmeticsController(); this.configManager.postInit(); } private void checkCosmetics() { - if(this.cosmeticsController.getCapeManager().getSelectedCape() == null) { + /*if(this.cosmeticsController.getCapeManager().getSelectedCape() == null) { this.cosmeticsController.getCapeManager().setSelectedCape(this.cosmeticsController.getCapeManager().getCape("None")); - } + }*/ } private void logInformation() { @@ -135,7 +145,7 @@ public class Athena { Athena.INSTANCE.getLog().info("Account Size: " + this.accountManager.getAccounts().size()); Athena.INSTANCE.getLog().info("Config Size: " + this.configManager.getConfigs().size()); Athena.INSTANCE.getLog().info("Macro Size: " + this.macroManager.getMacros().size()); - Athena.INSTANCE.getLog().info("Cape Size: " + this.cosmeticsController.getCapeManager().getCapes().size()); + //Athena.INSTANCE.getLog().info("Cape Size: " + this.cosmeticsController.getCapeManager().getCapes().size()); Athena.INSTANCE.getLog().info("--------------------------------"); Athena.INSTANCE.getLog().info("Active Primary Theme: " + this.themeManager.getPrimaryTheme().getTheme()); Athena.INSTANCE.getLog().info("Active Accent Theme: " + this.themeManager.getTheme().getTheme()); diff --git a/src/main/java/rip/athena/client/cosmetics/cape/Cape.java b/src/main/java/rip/athena/client/cosmetics/cape/Cape.java deleted file mode 100644 index 831791cd..00000000 --- a/src/main/java/rip/athena/client/cosmetics/cape/Cape.java +++ /dev/null @@ -1,24 +0,0 @@ -package rip.athena.client.cosmetics.cape; - -import lombok.Getter; -import net.minecraft.util.ResourceLocation; - -/** - * @author Athena Development - * @project Athena-Client - * @date 6/23/2023 - */ - -@Getter -public class Cape { - - private final String name; - private final ResourceLocation location; - private final ResourceLocation displayTexture; - - public Cape(String name, String location, String displayTexture) { - this.name = name; - this.location = new ResourceLocation("Athena/cosmetics/capes/" + location + ".png"); - this.displayTexture = new ResourceLocation("Athena/cosmetics/capes/" + displayTexture + ".png"); - } -} diff --git a/src/main/java/rip/athena/client/cosmetics/cape/CapeManager.java b/src/main/java/rip/athena/client/cosmetics/cape/CapeManager.java deleted file mode 100644 index ad3da948..00000000 --- a/src/main/java/rip/athena/client/cosmetics/cape/CapeManager.java +++ /dev/null @@ -1,43 +0,0 @@ -package rip.athena.client.cosmetics.cape; - -import lombok.Getter; -import lombok.Setter; -import rip.athena.client.Athena; - -import java.util.ArrayList; - -/** - * @author Athena Development - * @project Athena-Client - * @date 6/23/2023 - */ - -@Getter -@Setter -public class CapeManager { - - private final ArrayList capes = new ArrayList<>(); - private Cape selectedCape; - - public CapeManager() { - capes.add(new Cape("Minecon 2012", "Minecon-2012", "Minecon-2012-display")); - capes.add(new Cape("Minecon 2016", "Minecon-2016", "Minecon-2016-display")); - capes.add(new Cape("ziue's head", "ziue-head", "ziue-head-display")); - capes.add(new Cape("Cat", "cat", "cat-display")); - capes.add(new Cape("sleepy cats", "zam-cape", "zam")); - capes.add(new Cape("None", "None", "None")); - } - - public Cape getCape(String name) { - Cape requestedCape = capes - .stream() - .filter(m -> m.getName().equalsIgnoreCase(name)) - .findFirst() - .orElse(null); - if (requestedCape == null) { - // Log a message indicating that the cape is not found - Athena.INSTANCE.getLog().warn("Tried accessing non-existing cape: " + name); - } - return requestedCape; - } -} diff --git a/src/main/java/rip/athena/client/modules/fpssettings/FPSBoostMod.java b/src/main/java/rip/athena/client/modules/fpssettings/FPSBoostMod.java new file mode 100644 index 00000000..06e337b3 --- /dev/null +++ b/src/main/java/rip/athena/client/modules/fpssettings/FPSBoostMod.java @@ -0,0 +1,38 @@ +package rip.athena.client.modules.fpssettings; + +import net.minecraft.client.Minecraft; +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; + +@IModuleMetaData(name = "FPS Boost", type = EnumModuleType.OTHER, icon = "") +public class FPSBoostMod extends Module { + + @ConfigValue.Boolean(name = "Disable FPS Smoothing") + private boolean disableFpsSmoothing = true; + + // Previous settings + private boolean lastFpsSmoothing; + private boolean lastWorldSmoothing; + + @Override + public void onEnable() { + // Set prev value to current value for saving + lastFpsSmoothing = Minecraft.getMinecraft().gameSettings.ofSmoothFps; + lastWorldSmoothing = Minecraft.getMinecraft().gameSettings.ofSmoothWorld; + + if(disableFpsSmoothing) Minecraft.getMinecraft().gameSettings.ofSmoothFps = false; + if(lastWorldSmoothing) Minecraft.getMinecraft().gameSettings.ofSmoothFps = false; + + super.onEnable(); + } + + @Override + public void onDisable() { + Minecraft.getMinecraft().gameSettings.ofSmoothFps = lastFpsSmoothing; + Minecraft.getMinecraft().gameSettings.ofSmoothWorld = lastWorldSmoothing; + + super.onDisable(); + } +} diff --git a/src/main/java/rip/athena/client/modules/render/CustomHitColor.java b/src/main/java/rip/athena/client/modules/render/CustomHitColor.java index 1f1260fe..f607c01a 100644 --- a/src/main/java/rip/athena/client/modules/render/CustomHitColor.java +++ b/src/main/java/rip/athena/client/modules/render/CustomHitColor.java @@ -15,7 +15,7 @@ import java.awt.*; @IModuleMetaData(name = "Custom Hit Color", type = EnumModuleType.RENDER, icon = "Athena/gui/mods/hitcolor.png") public class CustomHitColor extends Module { - @ConfigValue.Color(name = "Hit Color", description = "Chose the color of your desires") + @ConfigValue.Color(name = "Hit Color", description = "Chose the hit color") public Color color = Color.WHITE; } diff --git a/src/main/java/rip/athena/client/modules/render/Overlay.java b/src/main/java/rip/athena/client/modules/render/Overlay.java new file mode 100644 index 00000000..64b252ba --- /dev/null +++ b/src/main/java/rip/athena/client/modules/render/Overlay.java @@ -0,0 +1,197 @@ +package rip.athena.client.modules.render; + +import net.minecraft.client.gui.Gui; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import org.lwjgl.opengl.GL11; +import rip.athena.api.config.ConfigValue; +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; +import rip.athena.client.events.render.RenderPlayerEvent; +import rip.athena.client.ui.hud.HUDElement; +import rip.athena.client.utils.font.FontManager; +import rip.athena.client.utils.render.ColorUtil; +import rip.athena.client.utils.render.RoundedUtils; + +import java.awt.*; +import java.util.ArrayList; + +/** + * @author Athena Development + * @project Athena-Client + * @date 6/1/2023 + */ +@IModuleMetaData(name = "Hypixel Overlay", type = EnumModuleType.RENDER, icon = "") +public class Overlay 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 = "Background Color") + private Color background = new Color(0, 0, 0, 150); + + @ConfigValue.Integer(name = "Transparency", min = 0, max = 255) + private int transparency = 255; + + @ConfigValue.Color(name = "Color") + private Color color = Color.WHITE; + + @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 = 150; + private int height = 100; + + private ArrayList playerUsernames = new ArrayList<>(); + + public Overlay() { + hud = new HUDElement("fps", width, height) { + @Override + public void onRender() { + render(); + } + }; + + hud.setX(200); + hud.setY(105); + + addHUD(hud); + } + + public void render() { + if (mc.gameSettings.showDebugInfo) { + return; + } + + GL11.glPushMatrix(); + + int width = hud.getWidth(); + int height = hud.getHeight(); + + int y = hud.getY(); + int x = hud.getX(); + + hud.setWidth(365); + + 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, transparency), ColorUtil.getClientColor(90, transparency), ColorUtil.getClientColor(180, transparency), ColorUtil.getClientColor(270, transparency)); + } 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()); + } + } + + FontManager.getProductSansRegular(30).drawString("HYPIXEL OVERLAY", hud.getX() + (hud.getWidth() - FontManager.getProductSansRegular(30).width("HYPIXEL OVERLAY")) / 2, y + 5, -1); + FontManager.getProductSansRegular(20).drawString("NAME", x + 25, y + 30, -1); + FontManager.getProductSansRegular(20).drawString("LEVEL", x + 100, y + 30, -1); + FontManager.getProductSansRegular(20).drawString("WLR", x + 175, y + 30, -1); + FontManager.getProductSansRegular(20).drawString("FKDR", x + 250, y + 30, -1); + FontManager.getProductSansRegular(20).drawString("BBLR", x + 325, y + 30, -1); + + RoundedUtils.drawRound(x + 10, y + 22, width - 20, 2, 2, new Color(-1)); + + int userY = 50; + y += 50; + + for (int i = 0; i < playerUsernames.size(); i++) { + String username = playerUsernames.get(i); + + // Center level text + String levelText = "LEVEL"; + String levelNumberText = "10"; + + int levelTextWidth = FontManager.getProductSansRegular(20).width(levelText); + int levelNumberTextWidth = FontManager.getProductSansRegular(20).width(levelNumberText); + int levelX = hud.getX() + 100 + (levelTextWidth - levelNumberTextWidth) / 2; + + // Center wlr text + String wlrText = "WLR"; + String wlrValueText = "10"; + + int wlrWidth = FontManager.getProductSansRegular(20).width(wlrText); + int wlrValueWidth = FontManager.getProductSansRegular(20).width(wlrValueText); + int wlrX = hud.getX() + 175 + (wlrWidth - wlrValueWidth) / 2; + + // Center fkdr text + String fkdrText = "FKDR"; + String fkdrValueText = "10"; + + int fkdrWidth = FontManager.getProductSansRegular(20).width(fkdrText); + int fkdrValueWidth = FontManager.getProductSansRegular(20).width(fkdrValueText); + int fkdrX = hud.getX() + 250 + (fkdrWidth - fkdrValueWidth) / 2; + + // Center bblr text + String bblrText = "BBLR"; + String bblrValueText = "10"; + + int bblrWidth = FontManager.getProductSansRegular(20).width(bblrText); + int bblrValueWidth = FontManager.getProductSansRegular(20).width(bblrValueText); + int bblrX = hud.getX() + 325 + (bblrWidth - bblrValueWidth) / 2; + + FontManager.getProductSansRegular(20).drawString(username, x + 5, y, -1); + FontManager.getProductSansRegular(20).drawString(levelNumberText, levelX, y, -1); + FontManager.getProductSansRegular(20).drawString(wlrValueText, wlrX, y, -1); + FontManager.getProductSansRegular(20).drawString(fkdrValueText, fkdrX, y, -1); + FontManager.getProductSansRegular(20).drawString(bblrValueText, bblrX, y, -1); + + userY += 11; + y += 11; + } + + hud.setHeight(userY); + + GL11.glPopMatrix(); + } + + @SubscribeEvent + public void onRenderPlayer(RenderPlayerEvent e) { + if(mc.thePlayer != null && mc.theWorld != null) { + for (Entity entity : mc.theWorld.loadedEntityList) { + if (entity instanceof EntityPlayer) { + if(playerUsernames.contains(e.getPlayer().getName())) return; + playerUsernames.add(e.getPlayer().getName()); + } + } + } + } + + @SubscribeEvent + public void onClientTick(ClientTickEvent e) { + if(mc.thePlayer == null || mc.theWorld == null || mc.getCurrentServerData() == null) { + Athena.INSTANCE.getLog().info("Clearing overlay users"); + playerUsernames.clear(); + } + } + + @Override + public void onEnable() { + super.onEnable(); + } + + @Override + public void onDisable() { + super.onDisable(); + } +} diff --git a/src/main/java/rip/athena/client/theme/impl/PrimaryTheme.java b/src/main/java/rip/athena/client/theme/impl/PrimaryTheme.java index 2a0cbf12..6e608f9f 100644 --- a/src/main/java/rip/athena/client/theme/impl/PrimaryTheme.java +++ b/src/main/java/rip/athena/client/theme/impl/PrimaryTheme.java @@ -15,7 +15,7 @@ import java.awt.*; public enum PrimaryTheme implements ColorUtil { DARK("Dark", new Color(30, 31, 35, 255).getRGB(), new Color(43, 44, 48, 255).getRGB(), new Color(35, 35, 35, 255).getRGB(), -1), - WHITE("White", new Color(255, 255, 255, 255).getRGB(), new Color(100, 100, 100, 255).getRGB(), new Color(50, 50, 50, 255).getRGB(), new Color(0,0,0).getRGB()), + WHITE("White", new Color(255, 255, 255, 255).getRGB(), new Color(100, 100, 100, 255).getRGB(), new Color(50, 50, 50, 255).getRGB(), new Color(67, 63, 63, 255).getRGB()), TRANSPARENT("Transparent", new Color(30, 31, 35, 200).getRGB(), new Color(43, 44, 48, 200).getRGB(), new Color(35, 35, 35, 200).getRGB(), -1); private final String theme; diff --git a/src/main/java/rip/athena/client/ui/clickgui/Category.java b/src/main/java/rip/athena/client/ui/clickgui/Category.java index acde15c0..53b5c52c 100644 --- a/src/main/java/rip/athena/client/ui/clickgui/Category.java +++ b/src/main/java/rip/athena/client/ui/clickgui/Category.java @@ -15,7 +15,7 @@ public enum Category { COSMETICS("COSMETICS", "Athena/gui/menu/cosmetics.png"), //COSMETICS("COSMETICS", "Athena/gui/menu/cosmetics.png"), SCREENSHOTS("SCREENSHOTS", "Athena/gui/menu/themes.png"), - THEMES("THEMES", "Athena/gui/menu/themes.png"); + THEMES("THEMES", "Athena/gui/mods/hitcolor.png"); private String name; private String icon; diff --git a/src/main/java/rip/athena/client/ui/clickgui/components/capes/CapeButton.java b/src/main/java/rip/athena/client/ui/clickgui/components/capes/CapeButton.java index 31e89332..9bb9136f 100644 --- a/src/main/java/rip/athena/client/ui/clickgui/components/capes/CapeButton.java +++ b/src/main/java/rip/athena/client/ui/clickgui/components/capes/CapeButton.java @@ -2,8 +2,8 @@ package rip.athena.client.ui.clickgui.components.capes; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.GlStateManager; +import rip.athena.api.cosmetics.cape.Cape; import rip.athena.client.Athena; -import rip.athena.client.cosmetics.cape.Cape; import rip.athena.api.font.FontManager; import rip.athena.client.ui.clickgui.IngameMenu; import rip.athena.client.ui.framework.components.MenuButton; @@ -63,7 +63,7 @@ public class CapeButton extends MenuButton { RoundedUtils.drawRound(x + 1, y + 1, width - 2, height - 2, 8, new Color(Athena.INSTANCE.getThemeManager().getPrimaryTheme().getThirdColor())); if (!cape.getName().equals("None")) { - DrawUtils.drawImage(cape.getDisplayTexture(), x + 25, y + 15, width - 50, height - 50); + DrawUtils.drawImage(cape.getPreview(), x + 25, y + 15, width - 50, height - 50); } if(selected) { diff --git a/src/main/java/rip/athena/client/ui/clickgui/components/mods/CategoryButton.java b/src/main/java/rip/athena/client/ui/clickgui/components/mods/CategoryButton.java index 74823f13..a363201b 100644 --- a/src/main/java/rip/athena/client/ui/clickgui/components/mods/CategoryButton.java +++ b/src/main/java/rip/athena/client/ui/clickgui/components/mods/CategoryButton.java @@ -71,7 +71,7 @@ public class CategoryButton extends MenuButton { GlStateManager.popMatrix(); } else { if (isActive()) { - RoundedUtils.drawRound(x + 30, y, width - 40, height, 12, new Color(10, 10, 10, 150)); + RoundedUtils.drawRound(x + 30, y, width - 40, height, 10, new Color(10, 10, 10, 150)); RoundedUtils.drawRoundedGradientOutlineCorner(x + 30, y, width + x - 10, height + y, 1, 12, ColorUtil.getClientColor(0, 255).getRGB(), ColorUtil.getClientColor(90, 255).getRGB(), ColorUtil.getClientColor(180, 255).getRGB(), ColorUtil.getClientColor(270, 255).getRGB()); } if (Settings.customGuiFont) { diff --git a/src/main/java/rip/athena/client/ui/clickgui/components/mods/MenuModNewColorPicker.java b/src/main/java/rip/athena/client/ui/clickgui/components/mods/MenuModNewColorPicker.java new file mode 100644 index 00000000..99e5d3ae --- /dev/null +++ b/src/main/java/rip/athena/client/ui/clickgui/components/mods/MenuModNewColorPicker.java @@ -0,0 +1,73 @@ +package rip.athena.client.ui.clickgui.components.mods; + +import net.minecraft.client.renderer.GlStateManager; +import rip.athena.client.ui.framework.components.MenuNewColorPicker; +import rip.athena.client.ui.framework.draw.ButtonState; +import rip.athena.client.ui.framework.draw.DrawType; +import org.lwjgl.input.Mouse; + +import java.awt.*; + +/** + * @author Athena Development + * @project Athena-Client + * @date 6/2/2023 + */ + +public class MenuModNewColorPicker extends MenuNewColorPicker { + public MenuModNewColorPicker(int x, int y, int width, int height, int defaultColor) { + super(x, y, width, height, defaultColor); + } + + @Override + public void onInitColors() { + super.onInitColors(); + + setColor(DrawType.LINE, ButtonState.NORMAL, new Color(43, 43, 43, 255)); + setColor(DrawType.LINE, ButtonState.ACTIVE, new Color(53, 53, 53, 255)); + setColor(DrawType.LINE, ButtonState.HOVER, new Color(48, 48, 48, 255)); + setColor(DrawType.LINE, ButtonState.HOVERACTIVE, new Color(59, 59, 59, 255)); + setColor(DrawType.LINE, ButtonState.DISABLED, new Color(100, 100, 100, 255)); + } + + @Override + public void onRender() { + int x = this.getRenderX(); + int y = this.getRenderY(); + int lineColor = getColor(DrawType.LINE, lastState); + + GlStateManager.color(1, 1, 1); + + /*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);*/ + + rip.athena.client.ui.framework.draw.DrawImpl.drawRect(x + 3, y + 2, width - 1, height - 3, lineColor); + + int index = 0; + + for(int h = y; h < y + height - 5; h++) { + rip.athena.client.ui.framework.draw.DrawImpl.drawRect(x + 5, h + 3, width - 5, 1, /*disabled ? */lightenColor(index, 0, color).getRGB()/* : darkenColor(index, 7, color).getRGB()*/); + index++; + } + + 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; + } +} diff --git a/src/main/java/rip/athena/client/ui/clickgui/components/mods/ModCategoryButton.java b/src/main/java/rip/athena/client/ui/clickgui/components/mods/ModCategoryButton.java index e146789b..7963fa21 100644 --- a/src/main/java/rip/athena/client/ui/clickgui/components/mods/ModCategoryButton.java +++ b/src/main/java/rip/athena/client/ui/clickgui/components/mods/ModCategoryButton.java @@ -72,7 +72,7 @@ public class ModCategoryButton extends MenuButton { } if (isActive()) { - RoundedUtils.drawRound(x + 17, y, width - 23, height - 4, 12, new Color(10, 10, 10, 150)); + RoundedUtils.drawRound(x + 17, y, width - 23, height - 4, 10, new Color(10, 10, 10, 150)); RoundedUtils.drawRoundedGradientOutlineCorner(x + 17, y, width + x - 7, height + y - 4, 1, 12, ColorUtil.getClientColor(0, 255).getRGB(), ColorUtil.getClientColor(90, 255).getRGB(), ColorUtil.getClientColor(180, 255).getRGB(), ColorUtil.getClientColor(270, 255).getRGB()); } @@ -86,7 +86,7 @@ public class ModCategoryButton extends MenuButton { } else { if (isActive()) { - RoundedUtils.drawRound(x + 17, y, width - 23, height - 4, 12, new Color(10, 10, 10, 150)); + RoundedUtils.drawRound(x + 17, y, width - 23, height - 4, 10, new Color(10, 10, 10, 150)); RoundedUtils.drawRoundedGradientOutlineCorner(x + 17, y, width + x - 7, height + y - 4, 1, 12, ColorUtil.getClientColor(0, 255).getRGB(), ColorUtil.getClientColor(90, 255).getRGB(), ColorUtil.getClientColor(180, 255).getRGB(), ColorUtil.getClientColor(270, 255).getRGB()); } diff --git a/src/main/java/rip/athena/client/ui/clickgui/components/mods/ModuleBox.java b/src/main/java/rip/athena/client/ui/clickgui/components/mods/ModuleBox.java index f1d763af..c2af6edf 100644 --- a/src/main/java/rip/athena/client/ui/clickgui/components/mods/ModuleBox.java +++ b/src/main/java/rip/athena/client/ui/clickgui/components/mods/ModuleBox.java @@ -180,7 +180,7 @@ public class ModuleBox extends MenuComponent { int defaultColor = getColor(DrawType.BACKGROUND, ButtonState.NORMAL); int drawColor = defaultColor; - GlStateManager.color(1,1,1); + //GlStateManager.color(1,1,1); RoundedUtils.drawRoundedRect(x, y, x + width, y + height, 26.0f, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getSecondColor()); RoundedUtils.drawRoundedRect(x + 1, y + 1, x + width - 1, y + height - 1, 26.0f, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getFirstColor()); @@ -244,7 +244,7 @@ public class ModuleBox extends MenuComponent { //rip.athena.client.gui.framework.draw.DrawImpl.drawRect(x + width - 14 - 17 - 3, y + 14 - 3, 23, 23, drawColor); //RoundedUtils.drawGradientRound(x + width - 14 - 17 - 3, y + 14 - 3, 23, 23, 6, Athena.INSTANCE.getThemeManager().getTheme().getFirstColor(), Athena.INSTANCE.getThemeManager().getTheme().getFirstColor(), Athena.INSTANCE.getThemeManager().getTheme().getSecondColor(), Athena.INSTANCE.getThemeManager().getTheme().getSecondColor()); - RoundedUtils.drawRound(x + width - 14 - 17 - 3, y + 14 - 3, 23, 23, 12, new Color(10,10,10, 150)); + RoundedUtils.drawRound(x + width - 14 - 17 - 3, y + 14 - 3, 23, 23, 9, new Color(10,10,10, 150)); RoundedUtils.drawRoundedGradientOutlineCorner(x + width - 14 - 17 - 3, y + 14 - 3, width + x - 11, 34 + y, 1, 12, ColorUtil.getClientColor(0, 255).getRGB(), ColorUtil.getClientColor(90, 255).getRGB(), ColorUtil.getClientColor(180, 255).getRGB(), ColorUtil.getClientColor(270, 255).getRGB()); diff --git a/src/main/java/rip/athena/client/ui/clickgui/pages/CosmeticsPage.java b/src/main/java/rip/athena/client/ui/clickgui/pages/CosmeticsPage.java index 88def545..30d3b79e 100644 --- a/src/main/java/rip/athena/client/ui/clickgui/pages/CosmeticsPage.java +++ b/src/main/java/rip/athena/client/ui/clickgui/pages/CosmeticsPage.java @@ -1,10 +1,9 @@ package rip.athena.client.ui.clickgui.pages; import net.minecraft.client.Minecraft; - import net.minecraft.client.renderer.GlStateManager; +import rip.athena.api.cosmetics.cape.Cape; import rip.athena.client.Athena; -import rip.athena.client.cosmetics.cape.Cape; import rip.athena.client.ui.clickgui.IngameMenu; import rip.athena.client.ui.clickgui.Page; import rip.athena.client.ui.clickgui.components.capes.CapeButton; @@ -126,17 +125,20 @@ public class CosmeticsPage extends Page { int maxWidth = cosmeticsPane.getWidth() - spacing * 2; - for(Cape cape : Athena.INSTANCE.getCosmeticsController().getCapeManager().getCapes()) { + for(Cape cape : Athena.INSTANCE.getCosmeticsManager().getCapeManager().getOwnedCapes()) { CapeButton capeButton = new CapeButton(cape, x, y, width, height) { @Override public void onAction() { setActive(false); - Athena.INSTANCE.getCosmeticsController().getCapeManager().setSelectedCape(cape); + new Thread(() -> { + cape.updateSelectedCape(); + }).start(); + populateCosmeticsScrollPane(); } }; - capeButton.setSelected(cape == Athena.INSTANCE.getCosmeticsController().getCapeManager().getSelectedCape()); + //capeButton.setSelected(cape == Athena.INSTANCE.getCosmeticsController().getCapeManager().getSelectedCape()); cosmeticsPane.addComponent(capeButton); diff --git a/src/main/java/rip/athena/client/ui/clickgui/pages/MacrosPage.java b/src/main/java/rip/athena/client/ui/clickgui/pages/MacrosPage.java index ef9cc00f..946b2615 100644 --- a/src/main/java/rip/athena/client/ui/clickgui/pages/MacrosPage.java +++ b/src/main/java/rip/athena/client/ui/clickgui/pages/MacrosPage.java @@ -168,7 +168,7 @@ public class MacrosPage extends Page { GlStateManager.translate(menu.getX() - 235, menu.getY() - 80, 0); GlStateManager.scale(2, 2, 2); GlStateManager.translate(-menu.getX(), -menu.getY(), 0); - rip.athena.client.utils.font.FontManager.getProductSansRegular(20).drawString("MACROS", menu.getX() + 235, menu.getY() + 80, IngameMenu.MENU_HEADER_TEXT_COLOR); + rip.athena.client.utils.font.FontManager.getProductSansRegular(20).drawString("MACROS", menu.getX() + 235, menu.getY() + 80, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); GlStateManager.popMatrix(); } else { Minecraft.getMinecraft().fontRendererObj.drawString("MACROS", menu.getX() + 235, menu.getY() + 80, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); diff --git a/src/main/java/rip/athena/client/ui/clickgui/pages/ModsPage.java b/src/main/java/rip/athena/client/ui/clickgui/pages/ModsPage.java index a0a24441..3f0bb7f0 100644 --- a/src/main/java/rip/athena/client/ui/clickgui/pages/ModsPage.java +++ b/src/main/java/rip/athena/client/ui/clickgui/pages/ModsPage.java @@ -99,7 +99,7 @@ public class ModsPage extends Page { int w = 86; int h = 76; - crosshair.drawPicker(menu.getX() + 255 + 25, menu.getY() + 290, w, h, menu.getMouseX(), menu.getMouseY()); + crosshair.drawPicker(menu.getX() + 255, menu.getY() + 350, w, h, menu.getMouseX(), menu.getMouseY()); } } } @@ -276,7 +276,7 @@ public class ModsPage extends Page { } else if (configEntry instanceof ColorEntry) { ColorEntry entry = (ColorEntry) configEntry; - toAdd.add(new MenuModColorPicker(0, 0, 35, 20, ((Color) entry.getValue(activeModule)).getRGB()) { + toAdd.add(new MenuModNewColorPicker(0, 0, 35, 90, ((Color) entry.getValue(activeModule)).getRGB()) { @Override public void onAction() { entry.setValue(activeModule, getColor()); diff --git a/src/main/java/rip/athena/client/ui/clickgui/pages/OldCosmeticsPage.java b/src/main/java/rip/athena/client/ui/clickgui/pages/OldCosmeticsPage.java index 29beb5ee..942e1929 100644 --- a/src/main/java/rip/athena/client/ui/clickgui/pages/OldCosmeticsPage.java +++ b/src/main/java/rip/athena/client/ui/clickgui/pages/OldCosmeticsPage.java @@ -1,11 +1,10 @@ package rip.athena.client.ui.clickgui.pages; -import rip.athena.api.font.FontManager; -import rip.athena.client.ui.framework.Menu; -import rip.athena.client.ui.framework.MenuComponent; -import rip.athena.client.ui.clickgui.IngameMenu; import net.minecraft.client.Minecraft; import org.lwjgl.input.Keyboard; +import rip.athena.api.font.FontManager; +import rip.athena.client.Athena; +import rip.athena.client.ui.clickgui.IngameMenu; import rip.athena.client.ui.clickgui.Page; import rip.athena.client.ui.clickgui.components.cosmetics.*; import rip.athena.client.ui.clickgui.components.macros.MacroButton; @@ -15,6 +14,8 @@ import rip.athena.client.ui.clickgui.components.mods.ModScrollPane; import rip.athena.client.ui.clickgui.pages.cosmetics.BandanaSize; import rip.athena.client.ui.clickgui.pages.cosmetics.CapeType; import rip.athena.client.ui.clickgui.pages.cosmetics.CosmeticType; +import rip.athena.client.ui.framework.Menu; +import rip.athena.client.ui.framework.MenuComponent; /** * @author Athena Development @@ -394,13 +395,13 @@ public class OldCosmeticsPage extends Page { rip.athena.client.ui.framework.draw.DrawImpl.drawRect(menu.getX() + menu.getWidth() - width, menu.getY() + 58, width, height + 1, ModCategoryButton.MAIN_COLOR); drawShadowDown(menu.getX() + menu.getWidth() - width, y + height, width); - rip.athena.client.utils.font.FontManager.getProductSansRegular(30).drawString("COSMETIC SETTINGS", menu.getX() + menu.getWidth() - width / 2 - rip.athena.client.utils.font.FontManager.getProductSansRegular(30).width("COSMETIC SETTINGS") / 2, y + height / 2 - FontManager.baloo17.getHeight("COSMETIC SETTINGS") / 2, IngameMenu.MENU_HEADER_TEXT_COLOR); + rip.athena.client.utils.font.FontManager.getProductSansRegular(30).drawString("COSMETIC SETTINGS", menu.getX() + menu.getWidth() - width / 2 - rip.athena.client.utils.font.FontManager.getProductSansRegular(30).width("COSMETIC SETTINGS") / 2, y + height / 2 - FontManager.baloo17.getHeight("COSMETIC SETTINGS") / 2, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); rip.athena.client.ui.framework.draw.DrawImpl.drawRect(menu.getX(), menu.getY() + 58, width, menu.getHeight() - 58, MacrosPage.MENU_SIDE_BG_COLOR); rip.athena.client.ui.framework.draw.DrawImpl.drawRect(menu.getX(), menu.getY() + 58, width, height + 1, ModCategoryButton.MAIN_COLOR); drawShadowDown(menu.getX(), y + height, width); - rip.athena.client.utils.font.FontManager.getProductSansRegular(30).drawString("COSMETICS", menu.getX() + width / 2 - rip.athena.client.utils.font.FontManager.getProductSansRegular(30).width("COSMETICS") / 2, y + height / 2 - FontManager.baloo17.getHeight("COSMETICS") / 2, IngameMenu.MENU_HEADER_TEXT_COLOR); + rip.athena.client.utils.font.FontManager.getProductSansRegular(30).drawString("COSMETICS", menu.getX() + width / 2 - rip.athena.client.utils.font.FontManager.getProductSansRegular(30).width("COSMETICS") / 2, y + height / 2 - FontManager.baloo17.getHeight("COSMETICS") / 2, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); drawShadowDown(menu.getX(), y - 1, width); drawShadowDown(menu.getX() + menu.getWidth() - width, y - 1, width); @@ -408,19 +409,19 @@ public class OldCosmeticsPage extends Page { x += 3; y += 50; - rip.athena.client.utils.font.FontManager.getProductSansRegular(30).drawString("EMOTE WHEEL KEYBIND", x, y, IngameMenu.MENU_HEADER_TEXT_COLOR); + rip.athena.client.utils.font.FontManager.getProductSansRegular(30).drawString("EMOTE WHEEL KEYBIND", x, y, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); y += 60; - rip.athena.client.utils.font.FontManager.getProductSansRegular(30).drawString("ENABLED EMOTES", x, y, IngameMenu.MENU_HEADER_TEXT_COLOR); + rip.athena.client.utils.font.FontManager.getProductSansRegular(30).drawString("ENABLED EMOTES", x, y, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); y += 150; - rip.athena.client.utils.font.FontManager.getProductSansRegular(30).drawString("CAPE LOCATION", x, y, IngameMenu.MENU_HEADER_TEXT_COLOR); + rip.athena.client.utils.font.FontManager.getProductSansRegular(30).drawString("CAPE LOCATION", x, y, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); y += 60; - rip.athena.client.utils.font.FontManager.getProductSansRegular(30).drawString("BANDANA LOCATION", x, y, IngameMenu.MENU_HEADER_TEXT_COLOR); + rip.athena.client.utils.font.FontManager.getProductSansRegular(30).drawString("BANDANA LOCATION", x, y, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); } @Override diff --git a/src/main/java/rip/athena/client/ui/clickgui/pages/ProfilesPage.java b/src/main/java/rip/athena/client/ui/clickgui/pages/ProfilesPage.java index a0bbd3b2..fe0901a0 100644 --- a/src/main/java/rip/athena/client/ui/clickgui/pages/ProfilesPage.java +++ b/src/main/java/rip/athena/client/ui/clickgui/pages/ProfilesPage.java @@ -240,10 +240,10 @@ public class ProfilesPage extends Page { GlStateManager.translate(menu.getX() - 235, menu.getY() - 80, 0); GlStateManager.scale(2, 2, 2); GlStateManager.translate(-menu.getX(), -menu.getY(), 0); - rip.athena.client.utils.font.FontManager.getProductSansRegular(20).drawString("PROFILES", menu.getX() + 235, menu.getY() + 80, IngameMenu.MENU_HEADER_TEXT_COLOR); + rip.athena.client.utils.font.FontManager.getProductSansRegular(20).drawString("PROFILES", menu.getX() + 235, menu.getY() + 80, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); GlStateManager.popMatrix(); } else { - Minecraft.getMinecraft().fontRendererObj.drawString("PROFILES", menu.getX() + 235, menu.getY() + 80, IngameMenu.MENU_HEADER_TEXT_COLOR); + Minecraft.getMinecraft().fontRendererObj.drawString("PROFILES", menu.getX() + 235, menu.getY() + 80, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); } if(Settings.customGuiFont) { @@ -251,10 +251,10 @@ public class ProfilesPage extends Page { GlStateManager.translate(menu.getX() - menu.getWidth() + (float) width / 2 + rip.athena.client.utils.font.FontManager.getProductSansRegular(20).width("CREATE NEW PROFILE") / 2,y - (float) height / 2 - FontManager.baloo17.getHeight("CREATE NEW PROFILE") / 2, 0); GlStateManager.scale(2, 2, 2); GlStateManager.translate(-menu.getX(), -y - 5 + (float) height / 2 + rip.athena.client.utils.font.FontManager.getProductSansRegular(20).height() / 2, 0); - rip.athena.client.utils.font.FontManager.getProductSansRegular(20).drawString("CREATE NEW PROFILE", menu.getX() + menu.getWidth() - (float) width / 2 - rip.athena.client.utils.font.FontManager.getProductSansRegular(30).width("CREATE NEW PROFILE") / 2, y + (float) height / 2 - FontManager.baloo17.getHeight("CREATE NEW PROFILE") / 2, IngameMenu.MENU_HEADER_TEXT_COLOR); + rip.athena.client.utils.font.FontManager.getProductSansRegular(20).drawString("CREATE NEW PROFILE", menu.getX() + menu.getWidth() - (float) width / 2 - rip.athena.client.utils.font.FontManager.getProductSansRegular(30).width("CREATE NEW PROFILE") / 2, y + (float) height / 2 - FontManager.baloo17.getHeight("CREATE NEW PROFILE") / 2, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); GlStateManager.popMatrix(); } else { - mc.fontRendererObj.drawString("CREATE NEW PROFILE", (int) (menu.getX() + menu.getWidth() - (float) width / 2 - mc.fontRendererObj.getStringWidth("CREATE NEW PROFILE") / 2), (int) (y + (float) height / 2 - mc.fontRendererObj.FONT_HEIGHT / 2), IngameMenu.MENU_HEADER_TEXT_COLOR); + mc.fontRendererObj.drawString("CREATE NEW PROFILE", (int) (menu.getX() + menu.getWidth() - (float) width / 2 - mc.fontRendererObj.getStringWidth("CREATE NEW PROFILE") / 2), (int) (y + (float) height / 2 - mc.fontRendererObj.FONT_HEIGHT / 2), Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); } y += 60; @@ -264,10 +264,10 @@ public class ProfilesPage extends Page { GlStateManager.translate(x,y, 0); GlStateManager.scale(2, 2, 2); GlStateManager.translate(-x, -y, 0); - rip.athena.client.utils.font.FontManager.getProductSansRegular(15).drawString("ENTER NAME", x, y, IngameMenu.MENU_HEADER_TEXT_COLOR); + rip.athena.client.utils.font.FontManager.getProductSansRegular(15).drawString("ENTER NAME", x, y, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); GlStateManager.popMatrix(); } else { - mc.fontRendererObj.drawString("ENTER NAME", x, y, IngameMenu.MENU_HEADER_TEXT_COLOR); + mc.fontRendererObj.drawString("ENTER NAME", x, y, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); } y += 120; @@ -277,10 +277,10 @@ public class ProfilesPage extends Page { GlStateManager.translate(menu.getX() - menu.getWidth() + (float) width / 2 + rip.athena.client.utils.font.FontManager.getProductSansRegular(20).width("DOWNLOAD PROFILE") / 2,y - (float) height / 2 - rip.athena.client.utils.font.FontManager.getProductSansRegular(20).height() / 2, 0); GlStateManager.scale(2, 2, 2); GlStateManager.translate(-menu.getX(), -y - 10 + (float) height / 2 + rip.athena.client.utils.font.FontManager.getProductSansRegular(20).height() / 2, 0); - rip.athena.client.utils.font.FontManager.getProductSansRegular(20).drawString("DOWNLOAD PROFILE", menu.getX() + menu.getWidth() - (float) width / 2 - rip.athena.client.utils.font.FontManager.getProductSansRegular(30).width("DOWNLOAD PROFILE") / 2, y + (float) height / 2 - FontManager.baloo17.getHeight("DOWNLOAD PROFILE") / 2, IngameMenu.MENU_HEADER_TEXT_COLOR); + rip.athena.client.utils.font.FontManager.getProductSansRegular(20).drawString("DOWNLOAD PROFILE", menu.getX() + menu.getWidth() - (float) width / 2 - rip.athena.client.utils.font.FontManager.getProductSansRegular(30).width("DOWNLOAD PROFILE") / 2, y + (float) height / 2 - FontManager.baloo17.getHeight("DOWNLOAD PROFILE") / 2, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); GlStateManager.popMatrix(); } else { - mc.fontRendererObj.drawString("DOWNLOAD PROFILE", (int) (menu.getX() + menu.getWidth() - (float) width / 2 - mc.fontRendererObj.getStringWidth("DOWNLOAD PROFILE") / 2), (int) (y + (float) height / 2 - mc.fontRendererObj.FONT_HEIGHT / 2), IngameMenu.MENU_HEADER_TEXT_COLOR); + mc.fontRendererObj.drawString("DOWNLOAD PROFILE", (int) (menu.getX() + menu.getWidth() - (float) width / 2 - mc.fontRendererObj.getStringWidth("DOWNLOAD PROFILE") / 2), (int) (y + (float) height / 2 - mc.fontRendererObj.FONT_HEIGHT / 2), Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); } y += 50; @@ -290,10 +290,10 @@ public class ProfilesPage extends Page { GlStateManager.translate(x,y, 0); GlStateManager.scale(2, 2, 2); GlStateManager.translate(-x, -y, 0); - rip.athena.client.utils.font.FontManager.getProductSansRegular(15).drawString("PROFILE CODE", x, y, IngameMenu.MENU_HEADER_TEXT_COLOR); + rip.athena.client.utils.font.FontManager.getProductSansRegular(15).drawString("PROFILE CODE", x, y, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); GlStateManager.popMatrix(); } else { - mc.fontRendererObj.drawString("PROFILE CODE", x, y, IngameMenu.MENU_HEADER_TEXT_COLOR); + mc.fontRendererObj.drawString("PROFILE CODE", x, y, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); } } diff --git a/src/main/java/rip/athena/client/ui/clickgui/pages/ScreenshotsPage.java b/src/main/java/rip/athena/client/ui/clickgui/pages/ScreenshotsPage.java index b8402ad5..cc8bedf8 100644 --- a/src/main/java/rip/athena/client/ui/clickgui/pages/ScreenshotsPage.java +++ b/src/main/java/rip/athena/client/ui/clickgui/pages/ScreenshotsPage.java @@ -2,6 +2,7 @@ package rip.athena.client.ui.clickgui.pages; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.GlStateManager; +import rip.athena.client.Athena; import rip.athena.client.ui.clickgui.IngameMenu; import rip.athena.client.ui.clickgui.Page; import rip.athena.client.ui.framework.Menu; @@ -30,7 +31,7 @@ public class ScreenshotsPage extends Page { GlStateManager.translate(menu.getX() - 235, menu.getY() - 80, 0); GlStateManager.scale(2, 2, 2); GlStateManager.translate(-menu.getX(), -menu.getY(), 0); - rip.athena.client.utils.font.FontManager.getProductSansRegular(20).drawString("SCREENSHOTS", menu.getX() + 235, menu.getY() + 80, IngameMenu.MENU_HEADER_TEXT_COLOR); + rip.athena.client.utils.font.FontManager.getProductSansRegular(20).drawString("SCREENSHOTS", menu.getX() + 235, menu.getY() + 80, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); GlStateManager.popMatrix(); } diff --git a/src/main/java/rip/athena/client/ui/clickgui/pages/SettingsPage.java b/src/main/java/rip/athena/client/ui/clickgui/pages/SettingsPage.java index 9bb370ac..9f6e5cc6 100644 --- a/src/main/java/rip/athena/client/ui/clickgui/pages/SettingsPage.java +++ b/src/main/java/rip/athena/client/ui/clickgui/pages/SettingsPage.java @@ -291,7 +291,7 @@ public class SettingsPage extends Page { drawShadowDown(menu.getX(), y + height, width); drawShadowDown(menu.getX(), y - 1, width); - Minecraft.getMinecraft().fontRendererObj.drawString("FPS", menu.getX() + width / 2 - Minecraft.getMinecraft().fontRendererObj.getStringWidth("FPS") / 2, y + height / 2 - Minecraft.getMinecraft().fontRendererObj.FONT_HEIGHT / 2, IngameMenu.MENU_HEADER_TEXT_COLOR); + Minecraft.getMinecraft().fontRendererObj.drawString("FPS", menu.getX() + width / 2 - Minecraft.getMinecraft().fontRendererObj.getStringWidth("FPS") / 2, y + height / 2 - Minecraft.getMinecraft().fontRendererObj.FONT_HEIGHT / 2, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); */} @Override diff --git a/src/main/java/rip/athena/client/ui/clickgui/pages/ThemesPage.java b/src/main/java/rip/athena/client/ui/clickgui/pages/ThemesPage.java index 7412dd6d..42221ab1 100644 --- a/src/main/java/rip/athena/client/ui/clickgui/pages/ThemesPage.java +++ b/src/main/java/rip/athena/client/ui/clickgui/pages/ThemesPage.java @@ -53,7 +53,7 @@ public class ThemesPage extends Page { GlStateManager.translate(menu.getX() - 235, menu.getY() - 80, 0); GlStateManager.scale(2, 2, 2); GlStateManager.translate(-menu.getX(), -menu.getY(), 0); - rip.athena.client.utils.font.FontManager.getProductSansRegular(20).drawString("THEMES | " + Athena.INSTANCE.getThemeManager().getTheme() + ", " + Athena.INSTANCE.getThemeManager().getPrimaryTheme(), menu.getX() + 235, menu.getY() + 80, IngameMenu.MENU_HEADER_TEXT_COLOR); + rip.athena.client.utils.font.FontManager.getProductSansRegular(20).drawString("THEMES | " + Athena.INSTANCE.getThemeManager().getTheme() + ", " + Athena.INSTANCE.getThemeManager().getPrimaryTheme(), menu.getX() + 235, menu.getY() + 80, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); GlStateManager.popMatrix(); } else { Minecraft.getMinecraft().fontRendererObj.drawString("THEMES", menu.getX() + 235, menu.getY() + 80, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); diff --git a/src/main/java/rip/athena/client/ui/clickgui/pages/WaypointsPage.java b/src/main/java/rip/athena/client/ui/clickgui/pages/WaypointsPage.java index 05ae5101..b9b2af18 100644 --- a/src/main/java/rip/athena/client/ui/clickgui/pages/WaypointsPage.java +++ b/src/main/java/rip/athena/client/ui/clickgui/pages/WaypointsPage.java @@ -207,28 +207,28 @@ public class WaypointsPage extends Page { drawVerticalLine(menu.getX() + 215, y + height - 30, height + 432, 3, new Color(0,0,0,0).getRGB()); if(Settings.customGuiFont) { - FontManager.vision16.drawString("WAYPOINTS", menu.getX() + 235, menu.getY() + 80, IngameMenu.MENU_HEADER_TEXT_COLOR); + FontManager.vision16.drawString("WAYPOINTS", menu.getX() + 235, menu.getY() + 80, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); } else { - mc.fontRendererObj.drawString("WAYPOINTS", menu.getX() + 235, menu.getY() + 80, IngameMenu.MENU_HEADER_TEXT_COLOR); + mc.fontRendererObj.drawString("WAYPOINTS", menu.getX() + 235, menu.getY() + 80, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); } //drawHorizontalLine(menu.getX() + 31, menu.getY() + 110, menu.getWidth() - width - 31 * 2, 3, IngameMenu.MENU_LINE_COLOR); - Minecraft.getMinecraft().fontRendererObj.drawString("ADD NEW WAYPOINT", menu.getX() + menu.getWidth() - width / 2 - Minecraft.getMinecraft().fontRendererObj.getStringWidth("ADD NEW WAYPOINT") / 2, y + height / 2 - Minecraft.getMinecraft().fontRendererObj.FONT_HEIGHT / 2, IngameMenu.MENU_HEADER_TEXT_COLOR); + Minecraft.getMinecraft().fontRendererObj.drawString("ADD NEW WAYPOINT", menu.getX() + menu.getWidth() - width / 2 - Minecraft.getMinecraft().fontRendererObj.getStringWidth("ADD NEW WAYPOINT") / 2, y + height / 2 - Minecraft.getMinecraft().fontRendererObj.FONT_HEIGHT / 2, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); y += 60; - Minecraft.getMinecraft().fontRendererObj.drawString("ENTER NAME", x, y, IngameMenu.MENU_HEADER_TEXT_COLOR); + Minecraft.getMinecraft().fontRendererObj.drawString("ENTER NAME", x, y, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); y += 70; - Minecraft.getMinecraft().fontRendererObj.drawString("DESCRIPTION", x, y, IngameMenu.MENU_HEADER_TEXT_COLOR); + Minecraft.getMinecraft().fontRendererObj.drawString("DESCRIPTION", x, y, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); y += 70; y += 30; y += 30; y += 30; - Minecraft.getMinecraft().fontRendererObj.drawString("COLOR", x, y, IngameMenu.MENU_HEADER_TEXT_COLOR); + Minecraft.getMinecraft().fontRendererObj.drawString("COLOR", x, y, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); } @Override diff --git a/src/main/java/rip/athena/client/ui/framework/components/MenuButton.java b/src/main/java/rip/athena/client/ui/framework/components/MenuButton.java index 73424413..0db4cefa 100644 --- a/src/main/java/rip/athena/client/ui/framework/components/MenuButton.java +++ b/src/main/java/rip/athena/client/ui/framework/components/MenuButton.java @@ -1,7 +1,7 @@ package rip.athena.client.ui.framework.components; import net.minecraft.client.renderer.GlStateManager; -import rip.athena.client.cosmetics.cape.Cape; +import rip.athena.api.cosmetics.cape.Cape; import rip.athena.client.ui.framework.MenuComponent; import rip.athena.client.ui.framework.draw.ButtonState; import rip.athena.client.ui.framework.draw.DrawType; @@ -41,7 +41,7 @@ public class MenuButton extends MenuComponent { this.theme = theme; } - public MenuButton(Cape cape, int x, int y, int width, int height) { + public MenuButton(rip.athena.api.cosmetics.cape.Cape cape, int x, int y, int width, int height) { super(x, y, width, height); this.cape = cape; } diff --git a/src/main/java/rip/athena/client/ui/framework/components/MenuNewColorPicker.java b/src/main/java/rip/athena/client/ui/framework/components/MenuNewColorPicker.java new file mode 100644 index 00000000..f3bf2295 --- /dev/null +++ b/src/main/java/rip/athena/client/ui/framework/components/MenuNewColorPicker.java @@ -0,0 +1,496 @@ +package rip.athena.client.ui.framework.components; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.ScaledResolution; +import net.minecraft.client.renderer.texture.DynamicTexture; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.input.Mouse; +import rip.athena.client.ui.framework.MenuComponent; +import rip.athena.client.ui.framework.MenuPriority; +import rip.athena.client.ui.framework.draw.ButtonState; +import rip.athena.client.ui.framework.draw.DrawType; +import rip.athena.client.utils.render.RoundedUtils; + +import java.awt.*; +import java.awt.image.BufferedImage; + +/** + * @author Athena Development + * @project Athena-Client + * @date 6/2/2023 + */ + +public class MenuNewColorPicker 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 = 20; + protected int alphaOffset = 10; + protected int pickerWindowWidth = size + colorOffset; + protected int pickerWindowHeight = size + alphaOffset; + protected MenuSlider alphaSlider; + + public MenuNewColorPicker(int x, int y, int width, int height, int defaultColor) { + super(x, y, width, height); + lastYPress = -1; + + Color theColor = new Color(defaultColor, true); + + color = theColor; + temp = theColor; + + alphaSlider = new MenuSlider(1f, 0f, 1f, 1, 0, 0, pickerWindowWidth, 10){ + @Override + public void onAction() { + color = new Color(color.getRed(), color.getGreen(), color.getBlue(), Math.round(alphaSlider.getValue() * 255)); + MenuNewColorPicker.this.onAction(); + } + }; + + alphaSlider.setValue((float)theColor.getAlpha() / 255); + } + + @Override + public void onInitColors() { + setColor(DrawType.BACKGROUND, ButtonState.NORMAL, new Color(35, 35, 35, 255)); + setColor(DrawType.BACKGROUND, ButtonState.ACTIVE, new Color(81, 108, 255, 255)); + setColor(DrawType.BACKGROUND, ButtonState.HOVER, new Color(50, 50, 50, 255)); + setColor(DrawType.BACKGROUND, ButtonState.HOVERACTIVE, new Color(100, 120, 255, 255)); + setColor(DrawType.BACKGROUND, ButtonState.POPUP, new Color(10, 10, 10, 255)); + setColor(DrawType.BACKGROUND, ButtonState.DISABLED, new Color(100, 100, 100, 255)); + + setColor(DrawType.LINE, ButtonState.NORMAL, new Color(10, 10, 10, 255)); + setColor(DrawType.LINE, ButtonState.ACTIVE, new Color(10, 10, 10, 255)); + setColor(DrawType.LINE, ButtonState.HOVER, new Color(10, 10, 10, 255)); + setColor(DrawType.LINE, ButtonState.HOVERACTIVE, new Color(10, 10, 10, 255)); + setColor(DrawType.LINE, ButtonState.POPUP, new Color(100, 120, 255, 255)); + setColor(DrawType.LINE, ButtonState.DISABLED, new Color(100, 100, 100, 255)); + + setColor(DrawType.TEXT, ButtonState.NORMAL, new Color(200, 200, 200, 255)); + setColor(DrawType.TEXT, ButtonState.ACTIVE, new Color(235, 235, 235, 255)); + setColor(DrawType.TEXT, ButtonState.HOVER, new Color(225, 225, 225, 255)); + setColor(DrawType.TEXT, ButtonState.HOVERACTIVE, new Color(235, 235, 235, 255)); + setColor(DrawType.TEXT, ButtonState.POPUP, new Color(100, 100, 100, 255)); + setColor(DrawType.TEXT, ButtonState.DISABLED, new Color(255, 255, 255, 255)); + } + + @Override + public void onMouseClick(int button) { + if(button == 0 && alphaSlider.passesThrough()) { + mouseDown = true; + } + + alphaSlider.onMouseClick(button); + } + + @Override + public void onMouseClickMove(int button) { + if(button == 0 && alphaSlider.passesThrough()) { + mouseDragging = true; + } + + alphaSlider.onMouseClickMove(button); + } + + @Override + public boolean onExitGui(int key) { + if(pickingColor) { + pickingColor = false; + } + + alphaSlider.onExitGui(key); + return false; + } + + @Override + public boolean passesThrough() { + if(pickingColor) { + return false; + } + + if(disabled) { + return true; + } + + int x = this.getRenderX(); + int y = this.getRenderY(); + int mouseX = parent.getMouseX(); + int mouseY = parent.getMouseY(); + + if(startPos != null) { + if(mouseX >= x && mouseX <= x + pickerWindowWidth) { + if(mouseY >= y && mouseY <= y + pickerWindowHeight) { + return false; + } + } + } else if(mouseDown) { + if(mouseX >= x && mouseX <= x + width) { + if(mouseY >= y && mouseY <= y + height + 1) { + return false; + } + } + } + + return true; + } + + @Override + public void onPreSort() { + if(alphaSlider.getParent() == null && getParent() != null) { + alphaSlider.setParent(getParent()); + } + + int x = this.getRenderX(); + int y = this.getRenderY(); + int mouseX = parent.getMouseX(); + int mouseY = parent.getMouseY(); + ButtonState state = ButtonState.NORMAL; + + if(!disabled) { + if(mouseX >= x && mouseX <= x + width) { + if(mouseY >= y && mouseY <= y + height + 1) { + state = ButtonState.HOVER; + } + } + + if(startPos != null) { + boolean hover = false; + + if(mouseX >= x && mouseX <= x + pickerWindowWidth) { + if(mouseY >= y && mouseY <= y + pickerWindowHeight + 1) { + hover = true; + } + } + + if(hover && mouseDown) { + wantsToDrag = true; + } + + pickingColor = (mouseDown && hover) || (!mouseDown && pickingColor); + + if(pickingColor) { + state = ButtonState.HOVER; + } + } else if(state == ButtonState.HOVER && mouseDown) { + pickingColor = true; + } + } else { + state = ButtonState.DISABLED; + } + + if(pickingColor) { + setPriority(MenuPriority.HIGHEST); + } else { + if(state == ButtonState.HOVER || state == ButtonState.HOVERACTIVE) { + setPriority(MenuPriority.HIGH); + } else { + setPriority(MenuPriority.MEDIUM); + } + } + + lastState = state; + } + + @Override + public void onRender() { + int x = this.getRenderX(); + int y = this.getRenderY(); + int lineColor = getColor(DrawType.LINE, lastState); + + int index = 0; + + for(int h = y; h < y + height; h++) { + RoundedUtils.drawRound(x + 1, h, width - 1, 1, 12, disabled ? lightenColor(index, 7, color) : darkenColor(index, 7, color)); + 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() { + int renderX = this.getRenderX() - 120; + int renderY = this.getRenderY() + 2; + + 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; + } + + ScaledResolution res = new ScaledResolution(Minecraft.getMinecraft()); + int windowX = renderX; + int windowY = renderY; + + if(windowX + pickerWindowWidth >= res.getScaledWidth()) { + windowX -= pickerWindowWidth; + } + + if(windowY + pickerWindowHeight >= res.getScaledHeight()) { + windowY -= pickerWindowHeight; + } + + startPos = new Point(windowX, windowY); + + alphaSlider.setX(renderX); + alphaSlider.setY(renderY + pickerWindowHeight - alphaSlider.getHeight()); + + if(canPick && startType == 0) { + if(mouseY > renderY && mouseY < renderY + pickerWindowHeight - alphaSlider.getHeight()) { + if(mouseX > renderX + pickerWindowWidth - colorOffset && mouseX < renderX + pickerWindowWidth) { + startType = 1; + } else if(mouseX > renderX && mouseX < renderX + size) { + startType = 2; + } + } else { + startType = -1; + canPick = false; + } + } + + if(startType != 0) { + if(startType == 2) { + if(mouseX >= renderX + pickerWindowWidth) { + mouseX = renderX + pickerWindowWidth - size - 1; + } else if(mouseX <= renderX) { + mouseX = renderX + pickerWindowWidth - size + 1; + } + } else { + if(mouseX >= renderX + pickerWindowWidth) { + mouseX = renderX + pickerWindowWidth - 1; + } else if(mouseX <= renderX + size) { + mouseX = renderX + size + 1; + } + } + + if(mouseY >= renderY + pickerWindowHeight - alphaSlider.getHeight()) { + mouseY = renderY + pickerWindowHeight - alphaSlider.getHeight() - 1; + } else if(mouseY <= renderY) { + mouseY = renderY + 1; + } + } + + rip.athena.client.ui.framework.draw.DrawImpl.drawRect(renderX + 1, renderY + 1, pickerWindowWidth - 1, pickerWindowHeight - 1, backgroundColor ); + drawHorizontalLine(renderX, renderY, pickerWindowWidth + 1, 1, lineColor); + drawVerticalLine(renderX, renderY + 1, pickerWindowHeight - 1, 1, lineColor); + drawHorizontalLine(renderX, renderY + pickerWindowHeight, pickerWindowWidth + 1, 1, lineColor); + drawVerticalLine(renderX + pickerWindowWidth, renderY + 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 > renderX && mouseX < renderX + size && mouseY > renderY && mouseY < renderY + size) { + int y = mouseY - renderY; + 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, renderX + 1, renderY + 1, size - 1, size - 1); + + float colorSpeed = size / 3.8f; + + float red = 275; + float green = 275; + float blue = 275; + + for(int y = renderY + 1; y < renderY + 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 = renderX + size + 1; x < renderX + 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(renderX + pickerWindowWidth - colorOffset, lastYPress, colorOffset, 1, lineColor); + } + + alphaSlider.onRender(); + drawVerticalLine(renderX + size, renderY + 1, pickerWindowHeight - alphaOffset - 1, 1, lineColor); + } + + 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 onMiniAction() {} +} diff --git a/src/main/java/rip/athena/client/ui/menu/AthenaMenu.java b/src/main/java/rip/athena/client/ui/menu/AthenaMenu.java index a22e21a8..917604be 100644 --- a/src/main/java/rip/athena/client/ui/menu/AthenaMenu.java +++ b/src/main/java/rip/athena/client/ui/menu/AthenaMenu.java @@ -20,6 +20,7 @@ import org.lwjgl.opengl.GLContext; import rip.athena.client.Athena; import rip.athena.client.ui.menu.altmanager.GuiAccountManager; import rip.athena.client.ui.menu.altmanager.GuiAltManager; +import rip.athena.client.ui.menu.skin.GuiSkinManager; import rip.athena.client.utils.animations.Animation; import rip.athena.client.utils.animations.impl.EaseBackIn; import rip.athena.client.utils.input.InputUtils; @@ -264,6 +265,7 @@ public class AthenaMenu extends GuiScreen implements GuiYesNoCallback DrawUtils.drawImage(new ResourceLocation("Athena/logo/Athena.png"), this.width / 2 - 50, y - 90, 100, 100); DrawUtils.drawImage(new ResourceLocation("Athena/menu/exit.png"),10, 10, 10, 10); DrawUtils.drawImage(new ResourceLocation("Athena/menu/usericon.png"), startX + startX - 24, 6, 18, 18); + DrawUtils.drawImage(new ResourceLocation("Athena/menu/usericon.png"), startX + startX - 49, 6, 18, 18); GlStateManager.popMatrix(); GlStateManager.pushMatrix(); @@ -271,6 +273,10 @@ public class AthenaMenu extends GuiScreen implements GuiYesNoCallback RoundedUtils.drawRoundedRect(startX+startX - 25, startY - startY + 5, startX+startX - 5, startY - startY + 25, 14, isOverAccountManager ? new Color(150,150,150,100).getRGB() : new Color(100,100,100,100).getRGB()); RoundedUtils.drawRoundedGradientOutlineCorner(startX+startX - 25 + 1, startY - startY + 5 + 1, startX+startX - 5 - 1, startY - startY + 25 - 1, 3, 12, ColorUtil.getClientColor(0, 255).getRGB(), ColorUtil.getClientColor(90, 255).getRGB(), ColorUtil.getClientColor(180, 255).getRGB(), ColorUtil.getClientColor(270, 255).getRGB()); + boolean isOverSkinManager = mouseX >= startX+startX-50 && mouseX <= startX+startX-30 && mouseY >= startY - startY + 5 && mouseY <= startY - startY + 25; + RoundedUtils.drawRoundedRect(startX+startX - 50, startY - startY + 5, startX+startX - 30, startY - startY + 25, 14, isOverSkinManager ? new Color(150,150,150,100).getRGB() : new Color(100,100,100,100).getRGB()); + RoundedUtils.drawRoundedGradientOutlineCorner(startX+startX - 50 + 1, startY - startY + 5 + 1, startX+startX - 30 - 1, startY - startY + 25 - 1, 3, 12, ColorUtil.getClientColor(0, 255).getRGB(), ColorUtil.getClientColor(90, 255).getRGB(), ColorUtil.getClientColor(180, 255).getRGB(), ColorUtil.getClientColor(270, 255).getRGB()); + boolean 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.drawRoundedGradientOutlineCorner(5 + 1, startY - startY + 5 + 1, 25 - 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()); @@ -292,6 +298,7 @@ public class AthenaMenu extends GuiScreen implements GuiYesNoCallback boolean isOverExit = mouseX >= 5 && mouseX <= 25 && mouseY >= startY - startY + 5 && mouseY <= startY - startY + 25; boolean isOverAccountManager = mouseX >= startX+startX-25 && mouseX <= startX+startX-5 && mouseY >= startY - startY + 5 && mouseY <= startY - startY + 25; + boolean isOverSkinManager = mouseX >= startX+startX-50 && mouseX <= startX+startX-30 && mouseY >= startY - startY + 5 && mouseY <= startY - startY + 25; if(isOverExit) { this.mc.shutdown(); @@ -301,6 +308,9 @@ public class AthenaMenu extends GuiScreen implements GuiYesNoCallback this.mc.displayGuiScreen(new GuiAccountManager(this)); } + if(isOverSkinManager) { + this.mc.displayGuiScreen(new GuiSkinManager(this)); + } synchronized (this.threadLock) { diff --git a/src/main/java/rip/athena/client/ui/menu/altmanager/GuiAccountManager.java b/src/main/java/rip/athena/client/ui/menu/altmanager/GuiAccountManager.java index 7f39098d..51e70f77 100644 --- a/src/main/java/rip/athena/client/ui/menu/altmanager/GuiAccountManager.java +++ b/src/main/java/rip/athena/client/ui/menu/altmanager/GuiAccountManager.java @@ -4,17 +4,15 @@ import fr.litarvan.openauth.microsoft.MicrosoftAuthResult; import fr.litarvan.openauth.microsoft.MicrosoftAuthenticationException; import fr.litarvan.openauth.microsoft.MicrosoftAuthenticator; import net.minecraft.client.Minecraft; -import net.minecraft.client.entity.AbstractClientPlayer; -import net.minecraft.client.gui.Gui; import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.ScaledResolution; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.util.ResourceLocation; import net.minecraft.util.Session; import org.apache.commons.lang3.RandomStringUtils; -import rip.athena.client.Athena; import rip.athena.api.account.Account; import rip.athena.api.account.AccountType; +import rip.athena.client.Athena; import rip.athena.client.socket.SocketClient; import rip.athena.client.ui.menu.altmanager.button.AltTextField; import rip.athena.client.utils.GLUtils; @@ -27,8 +25,10 @@ import rip.athena.client.utils.render.*; import rip.athena.client.utils.time.TimerUtil; import java.awt.*; -import java.util.*; +import java.util.ArrayList; +import java.util.Iterator; import java.util.List; +import java.util.Random; import java.util.concurrent.CompletableFuture; /** @@ -129,7 +129,7 @@ public class GuiAccountManager extends GuiScreen { FontManager.getProductSansRegular(22).drawString("Go back", x + 5, y + 213, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); StencilUtils.initStencilToWrite(); - RoundedUtils.drawRound(x, y + 28, width, height - 28.5F, 6, Color.WHITE); + RoundedUtils.drawRound(x, y + 28, width, height - 30.5F, 6, Color.WHITE); StencilUtils.readStencilBuffer(1); showAddAccountAnimation.setAnimation(showAddAccount ? 0 : 140, 16); @@ -285,7 +285,6 @@ public class GuiAccountManager extends GuiScreen { @Override public void mouseClicked(int mouseX, int mouseY, int mouseButton) { - ScaledResolution sr = new ScaledResolution(Minecraft.getMinecraft()); int addX = 140; @@ -351,22 +350,19 @@ public class GuiAccountManager extends GuiScreen { if(a.getAccountType().equals(AccountType.MICROSOFT)) { - new Thread() { - @Override - public void run() { - MicrosoftAuthenticator authenticator = new MicrosoftAuthenticator(); - a.setInfo("Loading..."); - try { - MicrosoftAuthResult acc = authenticator.loginWithRefreshToken(a.getToken()); - mc.session = new Session(acc.getProfile().getName(), acc.getProfile().getId(), acc.getAccessToken(), "mojang"); - Athena.INSTANCE.getAccountManager().setCurrentAccount(Athena.INSTANCE.getAccountManager().getAccountByUsername(acc.getProfile().getName())); - a.setInfo("Success!"); - } catch (MicrosoftAuthenticationException e) { - e.printStackTrace(); - a.setInfo("Error"); - } + new Thread(() -> { + MicrosoftAuthenticator authenticator = new MicrosoftAuthenticator(); + a.setInfo("Loading..."); + try { + MicrosoftAuthResult acc = authenticator.loginWithRefreshToken(a.getToken()); + mc.session = new Session(acc.getProfile().getName(), acc.getProfile().getId(), acc.getAccessToken(), "mojang"); + Athena.INSTANCE.getAccountManager().setCurrentAccount(Athena.INSTANCE.getAccountManager().getAccountByUsername(acc.getProfile().getName())); + a.setInfo("Success!"); + } catch (MicrosoftAuthenticationException e) { + e.printStackTrace(); + a.setInfo("Error"); } - }.start(); + }).start(); } if(a.getAccountType().equals(AccountType.SESSION)) { @@ -396,7 +392,6 @@ public class GuiAccountManager extends GuiScreen { @Override public void keyTyped(char typedChar, int keyCode) { - if(showAddAccount) { usernameField.textboxKeyTyped(typedChar, keyCode); } @@ -404,7 +399,7 @@ public class GuiAccountManager extends GuiScreen { if(keyCode == 1) { if(showAddAccount) { showAddAccount = false; - }else { + } else { Athena.INSTANCE.getAccountManager().save(); closeAccountManager = true; } @@ -416,12 +411,10 @@ public class GuiAccountManager extends GuiScreen { throw new IllegalArgumentException("Invalid UUID length. It should be 32 characters long."); } - String formattedUUID = uuidStr.substring(0, 8) + "-" + + return uuidStr.substring(0, 8) + "-" + uuidStr.substring(8, 12) + "-" + uuidStr.substring(12, 16) + "-" + uuidStr.substring(16, 20) + "-" + uuidStr.substring(20); - - return formattedUUID; } } \ No newline at end of file diff --git a/src/main/java/rip/athena/client/ui/menu/altmanager/panels/LoginPanel.java b/src/main/java/rip/athena/client/ui/menu/altmanager/panels/LoginPanel.java index fa50cc35..677c7576 100644 --- a/src/main/java/rip/athena/client/ui/menu/altmanager/panels/LoginPanel.java +++ b/src/main/java/rip/athena/client/ui/menu/altmanager/panels/LoginPanel.java @@ -6,9 +6,11 @@ import fr.litarvan.openauth.microsoft.MicrosoftAuthenticator; import net.minecraft.client.Minecraft; import net.minecraft.util.Session; import org.lwjgl.input.Keyboard; +import rip.athena.api.skin.Skin; import rip.athena.client.Athena; import rip.athena.api.account.Account; import rip.athena.api.account.AccountType; +import rip.athena.client.ui.menu.AthenaMenu; import rip.athena.client.ui.menu.altmanager.Panel; import rip.athena.client.ui.menu.altmanager.button.AltButton; import rip.athena.client.utils.animations.Animation; @@ -108,12 +110,28 @@ public class LoginPanel extends Panel { actionButton.setClickAction(() -> { if (actionButton.getName().equals("Offline Login")) { TextField cracked = textFields.get(0); + + if(cracked.getText() == null) { + status = "Username field is null"; + return; + } + Athena.INSTANCE.getAccountManager().getAccounts().add(new Account(AccountType.CRACKED, cracked.getText(), "0", "0")); Minecraft.getMinecraft().session = new Session(cracked.getText(), "0", "0", "legacy"); status = "Logged into " + cracked.getText(); Athena.INSTANCE.getAccountManager().setCurrentAccount(Athena.INSTANCE.getAccountManager().getAccountByUsername(cracked.getText())); Athena.INSTANCE.getAccountManager().isFirstLogin = false; Athena.INSTANCE.getAccountManager().save(); + + Athena.INSTANCE.getLog().info("Logged into " + cracked.getText()); + + Athena.INSTANCE.getSkinManager().getSkins().add(new Skin(cracked.getText())); + Athena.INSTANCE.getSkinManager().setCurrentSkin(Athena.INSTANCE.getSkinManager().getSkinByUsername(cracked.getText())); + Athena.INSTANCE.getSkinManager().save(); + + // Send to main menu + Minecraft.getMinecraft().displayGuiScreen(new AthenaMenu()); + } }); @@ -129,7 +147,7 @@ public class LoginPanel extends Panel { RoundedUtils.drawRound(microX, microsoftY, microWidth, microHeight, 5, ColorUtil.applyOpacity(Color.BLACK, .2f + (.25f * hoverMicrosoftAnim.getOutput().floatValue()))); FontManager.getProductSansRegular(26).drawString("Microsoft Login", microX + 10, microsoftY + 4, -1); - FontManager.getProductSansRegular(16).drawString("Login by entering login details and clicking here", microX + 10, microsoftY + 23, -1); + FontManager.getProductSansRegular(16).drawString("Enter details in fields above and click here to login", microX + 10, microsoftY + 23, -1); float logoSize = 22; DrawUtils.drawMicrosoftLogo(microX + microWidth - (10 + logoSize), microsoftY + (microHeight / 2f) - (logoSize / 2f), logoSize, 1.5f); @@ -155,10 +173,7 @@ public class LoginPanel extends Panel { } try { - - Athena.INSTANCE.getLog().info(email + password); MicrosoftAuthResult acc = authenticator.loginWithCredentials(email, password); - Minecraft.getMinecraft().session = new Session(acc.getProfile().getName(), acc.getProfile().getId(), acc.getAccessToken(), "legacy"); status = "Logged into " + acc.getProfile().getName(); @@ -166,7 +181,16 @@ public class LoginPanel extends Panel { Athena.INSTANCE.getAccountManager().setCurrentAccount(Athena.INSTANCE.getAccountManager().getAccountByUsername(acc.getProfile().getName())); Athena.INSTANCE.getAccountManager().isFirstLogin = false; Athena.INSTANCE.getAccountManager().save(); - Athena.INSTANCE.getLog().info("Success: Logged into " + acc.getProfile().getName()); + Athena.INSTANCE.getLog().info("Logged into " + acc.getProfile().getName()); + + if(Athena.INSTANCE.getSkinManager().getSkinByUsername(acc.getProfile().getName()) == null) { + Athena.INSTANCE.getSkinManager().getSkins().add(new Skin(acc.getProfile().getName())); + Athena.INSTANCE.getSkinManager().setCurrentSkin(Athena.INSTANCE.getSkinManager().getSkinByUsername(acc.getProfile().getName())); + Athena.INSTANCE.getSkinManager().save(); + } + + // Send to main menu + Minecraft.getMinecraft().displayGuiScreen(new AthenaMenu()); } catch (MicrosoftAuthenticationException e) { e.printStackTrace(); diff --git a/src/main/java/rip/athena/client/ui/menu/skin/GuiSkinManager.java b/src/main/java/rip/athena/client/ui/menu/skin/GuiSkinManager.java new file mode 100644 index 00000000..cae132da --- /dev/null +++ b/src/main/java/rip/athena/client/ui/menu/skin/GuiSkinManager.java @@ -0,0 +1,304 @@ +package rip.athena.client.ui.menu.skin; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.gui.ScaledResolution; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.Session; +import rip.athena.api.skin.Skin; +import rip.athena.client.Athena; +import rip.athena.client.ui.menu.altmanager.button.AltTextField; +import rip.athena.client.utils.GLUtils; +import rip.athena.client.utils.MouseUtils; +import rip.athena.client.utils.animations.Animation; +import rip.athena.client.utils.animations.impl.EaseBackIn; +import rip.athena.client.utils.animations.simple.SimpleAnimation; +import rip.athena.client.utils.font.FontManager; +import rip.athena.client.utils.render.*; +import rip.athena.client.utils.time.TimerUtil; + +import java.awt.*; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +/** + * @author Athena Development + * @project Athena-Client + * @date 6/10/2023 + */ +public class GuiSkinManager extends GuiScreen { + + private GuiScreen prevGuiScreen; + + private Animation showAccountAnimation; + private boolean closeAccountManager; + private boolean showAddAccount; + + private SimpleAnimation clickAnimation = new SimpleAnimation(0.0F); + private boolean click; + private TimerUtil clickTimer = new TimerUtil(); + + public ResourceLocation faceTexture; + + private SimpleAnimation showAddAccountAnimation = new SimpleAnimation(0.0F); + + private boolean delete; + private Skin deleteAccount; + + private double scrollY; + private SimpleAnimation scrollAnimation = new SimpleAnimation(0.0F); + + private SimpleAnimation addOpacityAnimation = new SimpleAnimation(0.0F); + + private AltTextField usernameField; + private SimpleAnimation selectAnimation = new SimpleAnimation(0.0F); + + private List clickEffects = new ArrayList<>(); + + public GuiSkinManager(GuiScreen prevGuiScreen) { + this.prevGuiScreen = prevGuiScreen; + } + + @Override + public void initGui() { + ScaledResolution sr = new ScaledResolution(Minecraft.getMinecraft()); + + int addX = 340; + int addY = 85; + int x = sr.getScaledWidth() / 2 - addX; + int y = sr.getScaledHeight() / 2 - addY; + + showAddAccount = false; + closeAccountManager = false; + showAccountAnimation = new EaseBackIn(450, 1, 1.5F); + usernameField = new AltTextField(1, mc.fontRendererObj, x + 38, y + 65, 220, 22, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); + click = false; + } + + @Override + public void drawScreen(int mouseX, int mouseY, float partialTicks) { + ScaledResolution sr = new ScaledResolution(Minecraft.getMinecraft()); + + int addX = 140; + int addY = 85; + int x = sr.getScaledWidth() / 2 - addX - 50; + int y = sr.getScaledHeight() / 2 - addY; + + int width = addX * 2; + int height = addY * 2; + int offsetY = 36; + int index = 1; + + if(closeAccountManager) { + mc.displayGuiScreen(prevGuiScreen); + } + + if(click) { + if(clickTimer.hasTimeElapsed(150)) { + click = false; + } + } else { + clickTimer.reset(); + } + + DrawUtils.drawImage(new ResourceLocation("Athena/menu/wallpaper3.png"), 0, 0, sr.getScaledWidth(), sr.getScaledHeight()); + + GlStateManager.pushMatrix(); + + RoundedUtils.drawGradientRound(x + width + 10, y, 20 + FontManager.getProductSansRegular(22).width("Active Skin | " + Athena.INSTANCE.getSkinManager().getCurrentSkin().getUsername()), height, 12, ColorUtil.getClientColor(0, 255), ColorUtil.getClientColor(90, 255), ColorUtil.getClientColor(180, 255), ColorUtil.getClientColor(270, 255)); + RoundedUtils.drawRound(x + width + 11, y + 1, 18 + FontManager.getProductSansRegular(22).width("Active Skin | " + Athena.INSTANCE.getSkinManager().getCurrentSkin().getUsername()), height - 2, 12, new Color(Athena.INSTANCE.getThemeManager().getPrimaryTheme().getFirstColor())); + FontManager.getProductSansRegular(22).drawString("Active Skin | " + Athena.INSTANCE.getSkinManager().getCurrentSkin().getUsername(), x + width + 20, y + 10, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); + + RoundedUtils.drawGradientRound(x, y, width, height, 12, ColorUtil.getClientColor(0, 255), ColorUtil.getClientColor(90, 255), ColorUtil.getClientColor(180, 255), ColorUtil.getClientColor(270, 255)); + RoundedUtils.drawRound(x + 1, y + 1, width - 2, height - 2, 12, new Color(Athena.INSTANCE.getThemeManager().getPrimaryTheme().getFirstColor())); + FontManager.getProductSansRegular(22).drawString("Skin Manager", x + 10, y + 10, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); + + RoundedUtils.drawGradientRound(x , y + 206, width, height - 148, 6, ColorUtil.getClientColor(0, 255), ColorUtil.getClientColor(90, 255), ColorUtil.getClientColor(180, 255), ColorUtil.getClientColor(270, 255)); + RoundedUtils.drawRound(x + 1, y + 207, width - 2, height - 150, 6, new Color(Athena.INSTANCE.getThemeManager().getPrimaryTheme().getFirstColor())); + FontManager.getProductSansRegular(22).drawString("Go back", x + 5, y + 213, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); + + StencilUtils.initStencilToWrite(); + RoundedUtils.drawRound(x, y + 28, width, height - 30.5F, 6, Color.WHITE); + StencilUtils.readStencilBuffer(1); + + showAddAccountAnimation.setAnimation(showAddAccount ? 0 : 140, 16); + + GLUtils.startTranslate(0, (140 - showAddAccountAnimation.getValue())); + + if(Athena.INSTANCE.getSkinManager().getSkins().isEmpty()) { + FontManager.getProductSansRegular(22).drawString("Empty...", sr.getScaledWidth() / 2 - (FontManager.getProductSansRegular(22).height() / 2), (sr.getScaledHeight() / 2) - (FontManager.getProductSansRegular(22).height() / 2), Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); + } + + for(Skin a : Athena.INSTANCE.getSkinManager().getSkins()) { + RoundedUtils.drawRound(x + 9, y + offsetY + scrollAnimation.getValue() - 1, width - 18, 100, 4, new Color(Athena.INSTANCE.getThemeManager().getPrimaryTheme().getSecondColor())); + RoundedUtils.drawRound(x + 10, y + offsetY + scrollAnimation.getValue(), width - 20, 98, 4, new Color(Athena.INSTANCE.getThemeManager().getPrimaryTheme().getFirstColor())); + RoundedUtils.drawGradientRound(x + width - 36, y + offsetY + 7 + scrollAnimation.getValue(), 20, 20, 4, ColorUtil.getClientColor(0, 255), ColorUtil.getClientColor(90, 255), ColorUtil.getClientColor(180, 255), ColorUtil.getClientColor(270, 255)); + + mc.getTextureManager().bindTexture(new ResourceLocation("Athena/menu/head.png")); + + GlStateManager.enableBlend(); + RoundedUtils.drawRoundTextured(x + 17, y + offsetY + 6 + scrollAnimation.getValue(), 24, 24, 4, 1.0F); + GlStateManager.disableBlend(); + + GlStateManager.pushMatrix(); + DrawUtils.drawImage(new ResourceLocation("Athena/menu/exit.png"),x + width - 31, (int) (y + offsetY + 12 + scrollAnimation.getValue()), 10, 10); + GlStateManager.popMatrix(); + + FontManager.getProductSansRegular(22).drawString(a.getUsername(), x + 50, y + offsetY + 15 + scrollAnimation.getValue(), Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); + + a.opacityAnimation.setAnimation(a.isDone ? 0 : 255, 16); + + FontManager.getProductSansRegular(22).drawCenteredString(a.getInfo(), x + width - 64, y + 14.5F + offsetY + scrollAnimation.getValue(), Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); + + if(a.getInfo().equals("Success") || a.getInfo().equals("Error")) { + if(a.getTimer().hasTimeElapsed(3500)) { + a.isDone = true; + a.getTimer().reset(); + } + } else { + a.getTimer().reset(); + } + + offsetY+=120; + index++; + } + + GLUtils.stopTranslate(); + StencilUtils.uninitStencilBuffer(); + GLUtils.stopScale(); + + final MouseUtils.Scroll scroll = MouseUtils.scroll(); + + if(scroll != null) { + switch (scroll) { + case DOWN: + if(index > 4){ + if(scrollY > -((index - 3.5) * 220)) { + scrollY -=40; + } + + if(index > 4) { + if(scrollY < -((index - 3.8) * 220)) { + scrollY = -((index - 3.9) * 220); + } + } + }else { + scrollY = 0; + } + break; + case UP: + if(scrollY > 0) { + scrollY = -18; + } + + if(scrollY < -0) { + scrollY +=20; + }else { + if(index > 5) { + scrollY = 10; + } + } + break; + } + } + + scrollAnimation.setAnimation((float) scrollY, 10); + + if(delete) { + Athena.INSTANCE.getSkinManager().getSkins().remove(deleteAccount); + scrollY = 0; + delete = false; + } + + if(clickEffects.size() > 0) { + Iterator clickEffectIterator= clickEffects.iterator(); + while(clickEffectIterator.hasNext()){ + ClickEffect clickEffect = clickEffectIterator.next(); + clickEffect.draw(); + if (clickEffect.canRemove()) clickEffectIterator.remove(); + } + } + } + + @Override + public void mouseClicked(int mouseX, int mouseY, int mouseButton) { + ScaledResolution sr = new ScaledResolution(Minecraft.getMinecraft()); + + int addX = 140; + int addY = 85; + int x = sr.getScaledWidth() / 2 - addX; + int y = sr.getScaledHeight() / 2 - addY; + int width = addX * 2; + int offsetY = 36; + + ClickEffect clickEffect = new ClickEffect(mouseX, mouseY); + clickEffects.add(clickEffect); + + if(mouseButton == 0) { + if(MouseUtils.isInside(mouseX, mouseY, x , y + 206, width, 25)) { + mc.displayGuiScreen(prevGuiScreen); + } + + usernameField.mouseClicked(mouseX, mouseY, mouseButton); + + if(MouseUtils.isInside(mouseX, mouseY, (x + width) - 135, y + 91, 100, 20)) { + if(!usernameField.getText().isEmpty()) { + Athena.INSTANCE.getSkinManager().getSkins().add(new Skin(usernameField.getText())); + mc.session = new Session(usernameField.getText(), "0", "0", "legacy"); + showAddAccount = false; + usernameField.setText(""); + } + } + + for(Skin a : Athena.INSTANCE.getSkinManager().getSkins()) { + if(MouseUtils.isInside(mouseX, mouseY, x + width - 36, y + offsetY + 7 + scrollAnimation.getValue(), 20, 20)) { + deleteAccount = a; + delete = true; + } + + // Clear info for other accounts + a.setInfo(""); + + if(!showAddAccount) { + if(MouseUtils.isInside(mouseX, mouseY, x + 10, y + offsetY + scrollAnimation.getValue(), width - 50, 98)) { + a.isDone = false; + a.setInfo("clicked"); + Athena.INSTANCE.getSkinManager().setCurrentSkin(a); + + // TODO: send change skin request based on username + } + } + + offsetY+=120; + } + } + } + + @Override + public void keyTyped(char typedChar, int keyCode) { + usernameField.textboxKeyTyped(typedChar, keyCode); + + if(keyCode == 1) { + if(showAddAccount) { + showAddAccount = false; + } else { + Athena.INSTANCE.getSkinManager().save(); + closeAccountManager = true; + } + } + } + + public String formatMinecraftUUID(String uuidStr) { + if (uuidStr.length() != 32) { + throw new IllegalArgumentException("Invalid UUID length. It should be 32 characters long."); + } + + return uuidStr.substring(0, 8) + "-" + + uuidStr.substring(8, 12) + "-" + + uuidStr.substring(12, 16) + "-" + + uuidStr.substring(16, 20) + "-" + + uuidStr.substring(20); + } +} \ No newline at end of file diff --git a/src/main/java/rip/athena/client/utils/font/FontManager.java b/src/main/java/rip/athena/client/utils/font/FontManager.java index 76ebc3fc..bad4a588 100644 --- a/src/main/java/rip/athena/client/utils/font/FontManager.java +++ b/src/main/java/rip/athena/client/utils/font/FontManager.java @@ -7,8 +7,6 @@ import java.util.HashMap; public class FontManager { - // FOR ANYONE WHO VISITS THIS CLASS: CREATE A HASHMAP FOR EACH FONT AND BASICALLY COPY THE GIVEN METHOD - private static final HashMap INTERNATIONAL = new HashMap<>(); private static final HashMap MONTSERRAT_MAP = new HashMap<>(); private static final HashMap ROBOTO_MAP = new HashMap<>(); @@ -55,7 +53,6 @@ public class FontManager { private static final HashMap HACK = new HashMap<>(); - // COPY THIS METHOD FOR EACH METHOD AND REPLACE FONTNAME WITH THE USED FONT FILE NAME public static Font getMontserratMedium(final int size) { return get(MONTSERRAT_MAP, size, "Montserrat-Medium", true, true); } diff --git a/src/main/java/rip/athena/client/utils/render/DrawUtils.java b/src/main/java/rip/athena/client/utils/render/DrawUtils.java index 3285428e..764f9f5b 100644 --- a/src/main/java/rip/athena/client/utils/render/DrawUtils.java +++ b/src/main/java/rip/athena/client/utils/render/DrawUtils.java @@ -11,6 +11,9 @@ import net.minecraft.client.renderer.vertex.DefaultVertexFormats; import net.minecraft.util.ResourceLocation; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL13; +import rip.athena.client.Athena; +import rip.athena.client.theme.impl.PrimaryTheme; +import rip.athena.client.ui.clickgui.IngameMenu; import rip.athena.client.utils.font.Font; import rip.athena.client.utils.shader.ShaderUtil; @@ -180,7 +183,11 @@ public enum DrawUtils { GlStateManager.enableBlend(); GlStateManager.enableAlpha(); GlStateManager.alphaFunc(GL11.GL_GREATER, 0.0F); - color(-1); + if(Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTheme().equals(PrimaryTheme.WHITE.getTheme()) && Minecraft.getMinecraft().currentScreen instanceof IngameMenu) { + color(new Color(0,0,0, 255).getRGB()); + } else { + color(-1); + } OpenGlHelper.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ZERO); Minecraft.getMinecraft().getTextureManager().bindTexture(image); Gui.drawModalRectWithCustomSizedTexture(x, y, 0, 0, width, height, width, height); diff --git a/workspace/logs/latest.log b/workspace/logs/latest.log index da93269e..a5cacfb6 100644 --- a/workspace/logs/latest.log +++ b/workspace/logs/latest.log @@ -1,120 +1,157 @@ -[17:10:32] [Client thread/INFO]: Setting user: Player329 -[17:10:32] [Client thread/INFO]: (Session ID is token:0:Player329) -[17:10:32] [Client thread/INFO]: [OptiFine] *** Reflector Forge *** -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.model.Attributes -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: mods.betterfoliage.client.BetterFoliageClient -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.common.asm.transformers.BlamingTransformer -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.event.world.ChunkWatchEvent$UnWatch -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.relauncher.CoreModManager -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.common.DimensionManager -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.GuiScreenEvent$DrawScreenEvent$Pre -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.GuiScreenEvent$DrawScreenEvent$Post -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.EntityViewRenderEvent$CameraSetup -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.EntityViewRenderEvent$FogColors -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.common.eventhandler.Event -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.common.eventhandler.EventBus -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.common.eventhandler.Event$Result -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.common.property.ExtendedBlockState -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.client.FMLClientHandler -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.common.FMLCommonHandler -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.world.biome.BiomeGenBase.getWaterColorMultiplier -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.addDestroyEffects -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.addHitEffects -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.canCreatureSpawn -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.canRenderInLayer -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.doesSideBlockRendering -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.getBedDirection -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.getExtendedState -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.hasTileEntity -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.isAir -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.isBed -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.isBedFoot -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.isSideSolid -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.entity.Entity.canRiderInteract -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Field not present: net.minecraft.entity.Entity.captureDrops -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Field not present: net.minecraft.entity.Entity.capturedDrops -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.entity.Entity.shouldRenderInPass -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.entity.Entity.shouldRiderSit -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.event.ForgeEventFactory -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.common.ForgeHooks -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.ForgeHooksClient -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.item.Item.getDurabilityForDisplay -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.item.Item.getModel -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.item.Item.onEntitySwing -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.item.Item.shouldCauseReequipAnimation -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.item.Item.showDurabilityBar -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.item.ItemRecord.getRecordResource -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.common.ForgeModContainer -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.potion.PotionEffect.isCurativeItem -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.tileentity.TileEntity.canRenderBreaking -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.tileentity.TileEntity.getRenderBoundingBox -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.tileentity.TileEntity.hasFastRenderer -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.tileentity.TileEntity.shouldRenderInPass -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher.preDrawBatch -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher.drawBatch -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.client.renderer.vertex.VertexFormatElement$EnumUsage.preDraw -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.client.renderer.vertex.VertexFormatElement$EnumUsage.postDraw -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.world.World.countEntities -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.world.World.getPerWorldStorage -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.world.WorldProvider.getCloudRenderer -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.world.WorldProvider.getSkyRenderer -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.world.WorldProvider.getWeatherRenderer -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.client.GuiModList -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.model.IColoredBakedQuad -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.common.property.IExtendedBlockState -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.IRenderHandler -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.model.ISmartBlockModel -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.ItemModelMesherForge -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraft.launchwrapper.Launch -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.model.pipeline.LightUtil -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.common.MinecraftForge -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.MinecraftForgeClient -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.model.ModelLoader -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.RenderBlockOverlayEvent$OverlayType -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.client.registry.RenderingRegistry -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.RenderItemInFrameEvent -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.RenderLivingEvent$Pre -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.RenderLivingEvent$Post -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.RenderLivingEvent$Specials$Pre -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.RenderLivingEvent$Specials$Post -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.client.SplashProgress -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.event.world.WorldEvent$Load -[17:10:32] [Client thread/INFO]: [OptiFine] *** Reflector Vanilla *** -[17:10:32] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: optifine.OptiFineClassTransformer -[17:10:33] [Client thread/WARN]: [Athena] Tried accessing non-existing module: theme -[17:10:33] [Client thread/WARN]: [Athena] Tried accessing non-existing module: cape -[17:10:33] [Client thread/INFO]: LWJGL Version: 2.9.4 -[17:10:33] [Client thread/INFO]: [OptiFine] -[17:10:33] [Client thread/INFO]: [OptiFine] OptiFine_1.8.8_HD_U_H8 -[17:10:33] [Client thread/INFO]: [OptiFine] Build: null -[17:10:33] [Client thread/INFO]: [OptiFine] OS: Windows 10 (amd64) version 10.0 -[17:10:33] [Client thread/INFO]: [OptiFine] Java: 1.8.0_202, Oracle Corporation -[17:10:33] [Client thread/INFO]: [OptiFine] VM: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation -[17:10:33] [Client thread/INFO]: [OptiFine] LWJGL: 2.9.4 -[17:10:33] [Client thread/INFO]: [OptiFine] OpenGL: Intel(R) Iris(R) Xe Graphics, version 4.6.0 - Build 31.0.101.4255, Intel -[17:10:33] [Client thread/INFO]: [OptiFine] OpenGL Version: 4.6.0 -[17:10:33] [Client thread/INFO]: [OptiFine] OpenGL Fancy fog: Not available (GL_NV_fog_distance) -[17:10:33] [Client thread/INFO]: [OptiFine] Maximum texture size: 16384x16384 -[17:10:33] [Client thread/INFO]: [Shaders] ShadersMod version: 2.4.12 -[17:10:33] [Client thread/INFO]: [Shaders] OpenGL Version: 4.6.0 - Build 31.0.101.4255 -[17:10:33] [Client thread/INFO]: [Shaders] Vendor: Intel -[17:10:33] [Client thread/INFO]: [Shaders] Renderer: Intel(R) Iris(R) Xe Graphics -[17:10:33] [Client thread/INFO]: [Shaders] Capabilities: 2.0 2.1 3.0 3.2 4.0 -[17:10:33] [Client thread/INFO]: [Shaders] GL_MAX_DRAW_BUFFERS: 8 -[17:10:33] [Client thread/INFO]: [Shaders] GL_MAX_COLOR_ATTACHMENTS_EXT: 8 -[17:10:33] [Client thread/INFO]: [Shaders] GL_MAX_TEXTURE_IMAGE_UNITS: 32 -[17:10:33] [Client thread/INFO]: [Shaders] Load ShadersMod configuration. -[17:10:33] [Client thread/INFO]: [Shaders] Shaders can not be loaded, Fast Render is enabled. -[17:10:33] [Client thread/INFO]: [Shaders] No shaderpack loaded. -[17:10:33] [Client thread/INFO]: Reloading ResourceManager: Default, ! §bPotfast 5kay.zip -[17:10:33] [Client thread/INFO]: [OptiFine] *** Reloading textures *** -[17:10:33] [Client thread/INFO]: [OptiFine] Resource packs: ! §bPotfast 5kay.zip -[17:10:33] [Sound Library Loader/INFO]: Starting up SoundSystem... -[17:10:34] [Thread-7/INFO]: Initializing LWJGL OpenAL -[17:10:34] [Thread-7/INFO]: (The LWJGL binding of OpenAL. For more information, see http://www.lwjgl.org) -[17:10:35] [Client thread/INFO]: [OptiFine] Multitexture: false -[17:10:35] [Thread-7/INFO]: OpenAL initialized. -[17:10:35] [Sound Library Loader/INFO]: Sound engine started -[17:10:35] [Client thread/INFO]: Created: 2048x2048 textures-atlas -[17:10:35] [Client thread/INFO]: [OptiFine] *** Reloading custom textures *** -[17:10:35] [Client thread/INFO]: [OptiFine] Enable face culling: acacia_leaves, birch_leaves, dark_oak_leaves, jungle_leaves, oak_leaves, spruce_leaves +[10:47:02] [Client thread/INFO]: Setting user: Player299 +[10:47:02] [Client thread/INFO]: (Session ID is token:0:Player299) +[10:47:03] [Client thread/INFO]: [OptiFine] *** Reflector Forge *** +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.model.Attributes +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: mods.betterfoliage.client.BetterFoliageClient +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.common.asm.transformers.BlamingTransformer +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.event.world.ChunkWatchEvent$UnWatch +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.relauncher.CoreModManager +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.common.DimensionManager +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.GuiScreenEvent$DrawScreenEvent$Pre +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.GuiScreenEvent$DrawScreenEvent$Post +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.EntityViewRenderEvent$CameraSetup +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.EntityViewRenderEvent$FogColors +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.common.eventhandler.Event +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.common.eventhandler.EventBus +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.common.eventhandler.Event$Result +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.common.property.ExtendedBlockState +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.client.FMLClientHandler +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.common.FMLCommonHandler +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.world.biome.BiomeGenBase.getWaterColorMultiplier +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.addDestroyEffects +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.addHitEffects +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.canCreatureSpawn +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.canRenderInLayer +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.doesSideBlockRendering +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.getBedDirection +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.getExtendedState +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.hasTileEntity +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.isAir +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.isBed +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.isBedFoot +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.isSideSolid +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.entity.Entity.canRiderInteract +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Field not present: net.minecraft.entity.Entity.captureDrops +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Field not present: net.minecraft.entity.Entity.capturedDrops +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.entity.Entity.shouldRenderInPass +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.entity.Entity.shouldRiderSit +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.event.ForgeEventFactory +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.common.ForgeHooks +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.ForgeHooksClient +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.item.Item.getDurabilityForDisplay +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.item.Item.getModel +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.item.Item.onEntitySwing +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.item.Item.shouldCauseReequipAnimation +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.item.Item.showDurabilityBar +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.item.ItemRecord.getRecordResource +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.common.ForgeModContainer +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.potion.PotionEffect.isCurativeItem +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.tileentity.TileEntity.canRenderBreaking +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.tileentity.TileEntity.getRenderBoundingBox +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.tileentity.TileEntity.hasFastRenderer +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.tileentity.TileEntity.shouldRenderInPass +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher.preDrawBatch +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher.drawBatch +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.client.renderer.vertex.VertexFormatElement$EnumUsage.preDraw +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.client.renderer.vertex.VertexFormatElement$EnumUsage.postDraw +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.world.World.countEntities +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.world.World.getPerWorldStorage +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.world.WorldProvider.getCloudRenderer +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.world.WorldProvider.getSkyRenderer +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.world.WorldProvider.getWeatherRenderer +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.client.GuiModList +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.model.IColoredBakedQuad +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.common.property.IExtendedBlockState +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.IRenderHandler +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.model.ISmartBlockModel +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.ItemModelMesherForge +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraft.launchwrapper.Launch +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.model.pipeline.LightUtil +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.common.MinecraftForge +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.MinecraftForgeClient +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.model.ModelLoader +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.RenderBlockOverlayEvent$OverlayType +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.client.registry.RenderingRegistry +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.RenderItemInFrameEvent +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.RenderLivingEvent$Pre +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.RenderLivingEvent$Post +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.RenderLivingEvent$Specials$Pre +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.RenderLivingEvent$Specials$Post +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.client.SplashProgress +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.event.world.WorldEvent$Load +[10:47:03] [Client thread/INFO]: [OptiFine] *** Reflector Vanilla *** +[10:47:03] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: optifine.OptiFineClassTransformer +[10:47:04] [Client thread/ERROR]: [Athena] Failed to load cape asset, missing. java.nio.file.NoSuchFileException: none +[10:47:04] [Client thread/ERROR]: [Athena] Failed to load cape asset, missing. java.nio.file.NoSuchFileException: Athena\cosmetics\capes\staff.png +[10:47:04] [Client thread/ERROR]: [Athena] Failed to load config default, improper json.org.json.JSONException: A JSONObject text must begin with '{' at 3 [character 1 line 2] +[10:47:04] [Client thread/INFO]: LWJGL Version: 2.9.4 +[10:47:04] [Thread-8/WARN]: [Athena] Tried accessing non-existing cape: +301 Moved Permanently + +

301 Moved Permanently

+
nginx/1.18.0 (Ubuntu)
+ + + +[10:47:04] [Client thread/INFO]: [OptiFine] +[10:47:04] [Client thread/INFO]: [OptiFine] OptiFine_1.8.8_HD_U_H8 +[10:47:04] [Client thread/INFO]: [OptiFine] Build: null +[10:47:04] [Client thread/INFO]: [OptiFine] OS: Windows 10 (amd64) version 10.0 +[10:47:04] [Client thread/INFO]: [OptiFine] Java: 1.8.0_202, Oracle Corporation +[10:47:04] [Client thread/INFO]: [OptiFine] VM: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation +[10:47:04] [Client thread/INFO]: [OptiFine] LWJGL: 2.9.4 +[10:47:04] [Client thread/INFO]: [OptiFine] OpenGL: Intel(R) Iris(R) Xe Graphics, version 4.6.0 - Build 31.0.101.4255, Intel +[10:47:04] [Client thread/INFO]: [OptiFine] OpenGL Version: 4.6.0 +[10:47:04] [Client thread/INFO]: [OptiFine] OpenGL Fancy fog: Not available (GL_NV_fog_distance) +[10:47:04] [Client thread/INFO]: [OptiFine] Maximum texture size: 16384x16384 +[10:47:04] [Client thread/INFO]: [Shaders] ShadersMod version: 2.4.12 +[10:47:04] [Client thread/INFO]: [Shaders] OpenGL Version: 4.6.0 - Build 31.0.101.4255 +[10:47:04] [Client thread/INFO]: [Shaders] Vendor: Intel +[10:47:04] [Client thread/INFO]: [Shaders] Renderer: Intel(R) Iris(R) Xe Graphics +[10:47:04] [Client thread/INFO]: [Shaders] Capabilities: 2.0 2.1 3.0 3.2 4.0 +[10:47:04] [Client thread/INFO]: [Shaders] GL_MAX_DRAW_BUFFERS: 8 +[10:47:04] [Client thread/INFO]: [Shaders] GL_MAX_COLOR_ATTACHMENTS_EXT: 8 +[10:47:04] [Client thread/INFO]: [Shaders] GL_MAX_TEXTURE_IMAGE_UNITS: 32 +[10:47:04] [Client thread/INFO]: [Shaders] Load ShadersMod configuration. +[10:47:04] [Client thread/INFO]: [Shaders] Shaders can not be loaded, Fast Render is enabled. +[10:47:04] [Client thread/INFO]: [Shaders] No shaderpack loaded. +[10:47:04] [Client thread/INFO]: Reloading ResourceManager: Default, ! §bPotfast 5kay.zip +[10:47:04] [Client thread/INFO]: [OptiFine] *** Reloading textures *** +[10:47:04] [Client thread/INFO]: [OptiFine] Resource packs: ! §bPotfast 5kay.zip +[10:47:04] [Sound Library Loader/INFO]: Starting up SoundSystem... +[10:47:05] [Thread-9/INFO]: Initializing LWJGL OpenAL +[10:47:05] [Thread-9/INFO]: (The LWJGL binding of OpenAL. For more information, see http://www.lwjgl.org) +[10:47:05] [Client thread/INFO]: [OptiFine] Multitexture: false +[10:47:06] [Thread-9/INFO]: OpenAL initialized. +[10:47:06] [Sound Library Loader/INFO]: Sound engine started +[10:47:06] [Client thread/INFO]: Created: 2048x2048 textures-atlas +[10:47:07] [Client thread/INFO]: [OptiFine] *** Reloading custom textures *** +[10:47:07] [Client thread/INFO]: [OptiFine] Enable face culling: acacia_leaves, birch_leaves, dark_oak_leaves, jungle_leaves, oak_leaves, spruce_leaves +[10:47:13] [Server thread/INFO]: Starting integrated minecraft server version 1.8.8 +[10:47:13] [Server thread/INFO]: Generating keypair +[10:47:13] [Server thread/INFO]: Preparing start region for level 0 +[10:47:13] [Server thread/INFO]: Changing view distance to 8, from 10 +[10:47:13] [Server thread/INFO]: ziuedev[local:E:ddd721d2] logged in with entity id 115 at (899.1709840730459, 65.0, 633.9132997148439) +[10:47:13] [Server thread/INFO]: ziuedev joined the game +[10:48:41] [Server thread/INFO]: Saving and pausing game... +[10:48:41] [Server thread/INFO]: Saving chunks for level 'mcpworld'/Overworld +[10:48:41] [Server thread/INFO]: Saving chunks for level 'mcpworld'/Nether +[10:48:41] [Server thread/INFO]: Saving chunks for level 'mcpworld'/The End +[10:48:50] [Server thread/INFO]: Saving and pausing game... +[10:48:51] [Server thread/INFO]: Saving chunks for level 'mcpworld'/Overworld +[10:48:51] [Server thread/INFO]: Saving chunks for level 'mcpworld'/Nether +[10:48:51] [Server thread/INFO]: Saving chunks for level 'mcpworld'/The End +[10:49:00] [Server thread/INFO]: Saving and pausing game... +[10:49:00] [Server thread/INFO]: Saving chunks for level 'mcpworld'/Overworld +[10:49:00] [Server thread/INFO]: Saving chunks for level 'mcpworld'/Nether +[10:49:00] [Server thread/INFO]: Saving chunks for level 'mcpworld'/The End +[10:49:01] [Server thread/INFO]: Saving and pausing game... +[10:49:01] [Server thread/INFO]: Saving chunks for level 'mcpworld'/Overworld +[10:49:01] [Server thread/INFO]: Saving chunks for level 'mcpworld'/Nether +[10:49:01] [Server thread/INFO]: Saving chunks for level 'mcpworld'/The End +[10:54:00] [Client Shutdown Thread/INFO]: Stopping server diff --git a/workspace/saves/Copy of Copy of mcpworldppdsa_/data/Temple.dat b/workspace/saves/Copy of Copy of mcpworldppdsa_/data/Temple.dat index 839d30aa..d691dbf0 100644 Binary files a/workspace/saves/Copy of Copy of mcpworldppdsa_/data/Temple.dat and b/workspace/saves/Copy of Copy of mcpworldppdsa_/data/Temple.dat differ diff --git a/workspace/saves/Copy of Copy of mcpworldppdsa_/data/Village.dat b/workspace/saves/Copy of Copy of mcpworldppdsa_/data/Village.dat index d2f6a416..cf713260 100644 Binary files a/workspace/saves/Copy of Copy of mcpworldppdsa_/data/Village.dat and b/workspace/saves/Copy of Copy of mcpworldppdsa_/data/Village.dat differ diff --git a/workspace/saves/Copy of Copy of mcpworldppdsa_/data/villages.dat b/workspace/saves/Copy of Copy of mcpworldppdsa_/data/villages.dat index a36107b4..aaa8b34e 100644 Binary files a/workspace/saves/Copy of Copy of mcpworldppdsa_/data/villages.dat and b/workspace/saves/Copy of Copy of mcpworldppdsa_/data/villages.dat differ diff --git a/workspace/saves/Copy of Copy of mcpworldppdsa_/data/villages_end.dat b/workspace/saves/Copy of Copy of mcpworldppdsa_/data/villages_end.dat index a36107b4..aaa8b34e 100644 Binary files a/workspace/saves/Copy of Copy of mcpworldppdsa_/data/villages_end.dat and b/workspace/saves/Copy of Copy of mcpworldppdsa_/data/villages_end.dat differ diff --git a/workspace/saves/Copy of Copy of mcpworldppdsa_/data/villages_nether.dat b/workspace/saves/Copy of Copy of mcpworldppdsa_/data/villages_nether.dat index a36107b4..aaa8b34e 100644 Binary files a/workspace/saves/Copy of Copy of mcpworldppdsa_/data/villages_nether.dat and b/workspace/saves/Copy of Copy of mcpworldppdsa_/data/villages_nether.dat differ diff --git a/workspace/saves/Copy of Copy of mcpworldppdsa_/level.dat b/workspace/saves/Copy of Copy of mcpworldppdsa_/level.dat index bd01d972..69cd8878 100644 Binary files a/workspace/saves/Copy of Copy of mcpworldppdsa_/level.dat and b/workspace/saves/Copy of Copy of mcpworldppdsa_/level.dat differ diff --git a/workspace/saves/Copy of Copy of mcpworldppdsa_/level.dat_new b/workspace/saves/Copy of Copy of mcpworldppdsa_/level.dat_new deleted file mode 100644 index a291fbe0..00000000 Binary files a/workspace/saves/Copy of Copy of mcpworldppdsa_/level.dat_new and /dev/null differ diff --git a/workspace/saves/Copy of Copy of mcpworldppdsa_/level.dat_old b/workspace/saves/Copy of Copy of mcpworldppdsa_/level.dat_old index e3094b2c..3b90d45d 100644 Binary files a/workspace/saves/Copy of Copy of mcpworldppdsa_/level.dat_old and b/workspace/saves/Copy of Copy of mcpworldppdsa_/level.dat_old differ diff --git a/workspace/saves/Copy of Copy of mcpworldppdsa_/region/r.-1.0.mca b/workspace/saves/Copy of Copy of mcpworldppdsa_/region/r.-1.0.mca index a4485c3b..f9488397 100644 Binary files a/workspace/saves/Copy of Copy of mcpworldppdsa_/region/r.-1.0.mca and b/workspace/saves/Copy of Copy of mcpworldppdsa_/region/r.-1.0.mca differ diff --git a/workspace/saves/Copy of Copy of mcpworldppdsa_/region/r.-1.1.mca b/workspace/saves/Copy of Copy of mcpworldppdsa_/region/r.-1.1.mca index ad4b4ba7..cefaedc2 100644 Binary files a/workspace/saves/Copy of Copy of mcpworldppdsa_/region/r.-1.1.mca and b/workspace/saves/Copy of Copy of mcpworldppdsa_/region/r.-1.1.mca differ diff --git a/workspace/saves/Copy of Copy of mcpworldppdsa_/region/r.0.0.mca b/workspace/saves/Copy of Copy of mcpworldppdsa_/region/r.0.0.mca index f26afb92..95af1a97 100644 Binary files a/workspace/saves/Copy of Copy of mcpworldppdsa_/region/r.0.0.mca and b/workspace/saves/Copy of Copy of mcpworldppdsa_/region/r.0.0.mca differ diff --git a/workspace/saves/Copy of Copy of mcpworldppdsa_/region/r.0.1.mca b/workspace/saves/Copy of Copy of mcpworldppdsa_/region/r.0.1.mca index 41682cf5..4972e704 100644 Binary files a/workspace/saves/Copy of Copy of mcpworldppdsa_/region/r.0.1.mca and b/workspace/saves/Copy of Copy of mcpworldppdsa_/region/r.0.1.mca differ diff --git a/workspace/saves/Copy of Copy of mcpworldppdsa_/session.lock b/workspace/saves/Copy of Copy of mcpworldppdsa_/session.lock index 0a0fe0e9..88460aac 100644 Binary files a/workspace/saves/Copy of Copy of mcpworldppdsa_/session.lock and b/workspace/saves/Copy of Copy of mcpworldppdsa_/session.lock differ diff --git a/workspace/saves/MCP Development World/data/villages.dat b/workspace/saves/MCP Development World/data/villages.dat index 233318ce..862454cb 100644 Binary files a/workspace/saves/MCP Development World/data/villages.dat and b/workspace/saves/MCP Development World/data/villages.dat differ diff --git a/workspace/saves/MCP Development World/data/villages_end.dat b/workspace/saves/MCP Development World/data/villages_end.dat index 233318ce..862454cb 100644 Binary files a/workspace/saves/MCP Development World/data/villages_end.dat and b/workspace/saves/MCP Development World/data/villages_end.dat differ diff --git a/workspace/saves/MCP Development World/data/villages_nether.dat b/workspace/saves/MCP Development World/data/villages_nether.dat index 233318ce..862454cb 100644 Binary files a/workspace/saves/MCP Development World/data/villages_nether.dat and b/workspace/saves/MCP Development World/data/villages_nether.dat differ diff --git a/workspace/saves/MCP Development World/level.dat b/workspace/saves/MCP Development World/level.dat index 347b63d5..72a012ed 100644 Binary files a/workspace/saves/MCP Development World/level.dat and b/workspace/saves/MCP Development World/level.dat differ diff --git a/workspace/saves/MCP Development World/level.dat_old b/workspace/saves/MCP Development World/level.dat_old index 7a76f433..774277fc 100644 Binary files a/workspace/saves/MCP Development World/level.dat_old and b/workspace/saves/MCP Development World/level.dat_old differ diff --git a/workspace/saves/MCP Development World/region/r.0.-1.mca b/workspace/saves/MCP Development World/region/r.0.-1.mca index facc8303..ea4e9d55 100644 Binary files a/workspace/saves/MCP Development World/region/r.0.-1.mca and b/workspace/saves/MCP Development World/region/r.0.-1.mca differ diff --git a/workspace/saves/MCP Development World/region/r.0.0.mca b/workspace/saves/MCP Development World/region/r.0.0.mca index 0eab4e88..f543d7c6 100644 Binary files a/workspace/saves/MCP Development World/region/r.0.0.mca and b/workspace/saves/MCP Development World/region/r.0.0.mca differ diff --git a/workspace/saves/MCP Development World/region/r.1.-1.mca b/workspace/saves/MCP Development World/region/r.1.-1.mca index 9b1544e9..d27fa695 100644 Binary files a/workspace/saves/MCP Development World/region/r.1.-1.mca and b/workspace/saves/MCP Development World/region/r.1.-1.mca differ diff --git a/workspace/saves/MCP Development World/region/r.1.0.mca b/workspace/saves/MCP Development World/region/r.1.0.mca index 3a7cded6..4231a701 100644 Binary files a/workspace/saves/MCP Development World/region/r.1.0.mca and b/workspace/saves/MCP Development World/region/r.1.0.mca differ diff --git a/workspace/saves/MCP Development World/region/r.1.1.mca b/workspace/saves/MCP Development World/region/r.1.1.mca index 99045f13..af8cd911 100644 Binary files a/workspace/saves/MCP Development World/region/r.1.1.mca and b/workspace/saves/MCP Development World/region/r.1.1.mca differ diff --git a/workspace/saves/MCP Development World/region/r.2.0.mca b/workspace/saves/MCP Development World/region/r.2.0.mca index 8fe18c83..57dd0697 100644 Binary files a/workspace/saves/MCP Development World/region/r.2.0.mca and b/workspace/saves/MCP Development World/region/r.2.0.mca differ diff --git a/workspace/saves/MCP Development World/region/r.2.1.mca b/workspace/saves/MCP Development World/region/r.2.1.mca index b5b76d50..a87109b7 100644 Binary files a/workspace/saves/MCP Development World/region/r.2.1.mca and b/workspace/saves/MCP Development World/region/r.2.1.mca differ diff --git a/workspace/saves/MCP Development World/session.lock b/workspace/saves/MCP Development World/session.lock index 9521a94e..00e85902 100644 Binary files a/workspace/saves/MCP Development World/session.lock and b/workspace/saves/MCP Development World/session.lock differ diff --git a/workspace/servers.dat b/workspace/servers.dat index 8a72a4e9..6da7bc13 100644 Binary files a/workspace/servers.dat and b/workspace/servers.dat differ diff --git a/workspace/settings/configs/default.json b/workspace/settings/configs/default.json deleted file mode 100644 index 096b4233..00000000 --- a/workspace/settings/configs/default.json +++ /dev/null @@ -1,818 +0,0 @@ -{ - "No Hurt Cam": { - "settings": {}, - "bind": 0, - "hud": {}, - "bindtype": "Toggle", - "enabled": false - }, - "Optimizer": { - "settings": { - "Better skin loading": true, - "Culling fix": true, - "Chunk update limiter": false, - "Chunk updates per second": 155, - "Better Chests": false, - "Static particle color": true, - "Static drops": true, - "Tile Entity Render Distance": 32, - "Remove mob spawner entity": true, - "Entity Render Distance": 32, - "Remove light calculation": true, - "Custom Cane Renderer": false, - "Remove Water": false - }, - "bind": 0, - "hud": {}, - "bindtype": "Toggle", - "enabled": false - }, - "Crosshair": { - "settings": { - "Draw color": { - "red": 255, - "green": 0, - "blue": 0, - "alpha": 255 - }, - "Brush size": 2, - "Rainbow color": false, - "Delete mode": false - }, - "bind": 0, - "hud": {}, - "bindtype": "Toggle", - "enabled": false - }, - "Fullbright": { - "settings": {}, - "bind": 0, - "hud": {}, - "bindtype": "Toggle", - "enabled": false - }, - "CPS": { - "settings": { - "Transparency": 255, - "Static Chroma": false, - "Background": true, - "Custom Font": true, - "Wave Chroma": false, - "Color": { - "red": 53, - "green": 0, - "blue": 242, - "alpha": 255 - }, - "Background Color": { - "red": 0, - "green": 0, - "blue": 0, - "alpha": 153 - }, - "Display Mode": "Circle", - "Right Click Counter": false - }, - "bind": 0, - "hud": {"cps": { - "visible": true, - "x": 48, - "y": 176, - "scale": 1 - }}, - "bindtype": "Toggle", - "enabled": false - }, - "Minimal Bobbing": { - "settings": { - "Remove Screen Bobbing": true, - "Remove Hand Bobbing": true - }, - "bind": 0, - "hud": {}, - "bindtype": "Toggle", - "enabled": false - }, - "FPS": { - "settings": { - "Transparency": 255, - "Static Chroma": false, - "Background": true, - "Custom Font": true, - "Wave Chroma": false, - "Background Color": { - "red": 0, - "green": 0, - "blue": 0, - "alpha": 153 - }, - "Color": { - "red": 255, - "green": 255, - "blue": 255, - "alpha": 255 - }, - "Display Mode": "Circle" - }, - "bind": 0, - "hud": {"fps": { - "visible": true, - "x": 451, - "y": 28, - "scale": 1 - }}, - "bindtype": "Toggle", - "enabled": true - }, - "Block Overlay": { - "settings": { - "Chroma": false, - "Outline Color": { - "red": 0, - "green": 0, - "blue": 255, - "alpha": 255 - }, - "Line Width": 1, - "Mode": "Outline", - "Highlight Color": { - "red": 0, - "green": 0, - "blue": 255, - "alpha": 255 - } - }, - "bind": 0, - "hud": {}, - "bindtype": "Toggle", - "enabled": false - }, - "Potion Effects": { - "settings": {"Background": true}, - "bind": 0, - "hud": {"potioneffects": { - "visible": true, - "x": 8, - "y": 202, - "scale": 1 - }}, - "bindtype": "Toggle", - "enabled": true - }, - "Clock": { - "settings": { - "Transparency": 255, - "Static Chroma": false, - "Background": true, - "Custom Font": false, - "Wave Chroma": false, - "Color": { - "red": 255, - "green": 255, - "blue": 255, - "alpha": 255 - }, - "Background Color": { - "red": 0, - "green": 0, - "blue": 0, - "alpha": 153 - }, - "Display Mode": "Circle", - "Clock Format": "yyyy/MM/dd HH:mm:ss" - }, - "bind": 0, - "hud": {"time": { - "visible": true, - "x": 1, - "y": 190, - "scale": 1 - }}, - "bindtype": "Toggle", - "enabled": false - }, - "Custom Text": { - "settings": { - "Transparency": 255, - "Static Chroma": false, - "Custom Font": false, - "Background": true, - "Wave Chroma": false, - "Color": { - "red": 255, - "green": 255, - "blue": 255, - "alpha": 255 - }, - "Background Color": { - "red": 0, - "green": 0, - "blue": 0, - "alpha": 153 - }, - "Display Mode": "Circle", - "Custom Text": "Custom Text Here" - }, - "bind": 0, - "hud": {"customtext": { - "visible": true, - "x": 1, - "y": 200, - "scale": 1 - }}, - "bindtype": "Toggle", - "enabled": false - }, - "Aim Trainer": { - "settings": { - "Speed": 1.8, - "Static Chroma": false, - "Background": true, - "Custom Font": false, - "Wave Chroma": false, - "Move": true, - "Background Color": { - "red": 223, - "green": 0, - "blue": 0, - "alpha": 255 - }, - "Color": { - "red": 0, - "green": 124, - "blue": 124, - "alpha": 255 - }, - "Display Mode": "Circle", - "Distance": 1.7 - }, - "bind": 0, - "hud": {"time": { - "visible": true, - "x": 1, - "y": 190, - "scale": 1 - }}, - "bindtype": "Toggle", - "enabled": false - }, - "Potion Counter": { - "settings": { - "Transparency": 255, - "Static Chroma": false, - "Background": true, - "Custom Font": false, - "Wave Chroma": false, - "Potion Type": "Instant Health II", - "Color": { - "red": 255, - "green": 255, - "blue": 255, - "alpha": 255 - }, - "Background Color": { - "red": 0, - "green": 0, - "blue": 0, - "alpha": 150 - }, - "Display Mode": "Circle" - }, - "bind": 0, - "hud": {"potioncounter": { - "visible": true, - "x": 1, - "y": 200, - "scale": 1 - }}, - "bindtype": "Toggle", - "enabled": false - }, - "Pack Display": { - "settings": { - "Transparency": 255, - "Static Chroma": false, - "Background": true, - "Custom Font": false, - "Wave Chroma": false, - "Background Color": { - "red": 0, - "green": 0, - "blue": 0, - "alpha": 150 - }, - "Color": { - "red": 255, - "green": 255, - "blue": 255, - "alpha": 255 - }, - "Display Mode": "Circle" - }, - "bind": 0, - "hud": {"packdisplay": { - "visible": true, - "x": 1, - "y": 175, - "scale": 1 - }}, - "bindtype": "Toggle", - "enabled": false - }, - "Scoreboard": { - "settings": { - "Background": true, - "Background Color": { - "red": 0, - "green": 0, - "blue": 0, - "alpha": 150 - }, - "Free Move": false, - "Display Mode": "Default", - "Show Numbers": true - }, - "bind": 0, - "hud": {"scoreboard": { - "visible": true, - "x": 0, - "y": 0, - "scale": 1 - }}, - "bindtype": "Toggle", - "enabled": false - }, - "TPS": { - "settings": { - "Custom Font": false, - "Background": true, - "Mode": "Number", - "Background Color": { - "red": 0, - "green": 0, - "blue": 0, - "alpha": 90 - }, - "Display Mode": "Circle", - "Preset Color": true, - "TPS Color": { - "red": 255, - "green": 255, - "blue": 255, - "alpha": 255 - } - }, - "bind": 0, - "hud": {"tps": { - "visible": true, - "x": 0, - "y": 0, - "scale": 1 - }}, - "bindtype": "Toggle", - "enabled": false - }, - "Armor Status": { - "settings": { - "Value Display": "Value Damage", - "Item Name": false, - "Item Equipped": false, - "Custom Font": true, - "Value Left/Right": "Left", - "Durability Color": { - "red": 255, - "green": 255, - "blue": 255, - "alpha": 255 - }, - "Direction": "Vertical", - "Preset Durability Colors": true - }, - "bind": 0, - "hud": {"armorstatus": { - "visible": true, - "x": 0, - "y": 200, - "scale": 1 - }}, - "bindtype": "Toggle", - "enabled": false - }, - "Keystrokes": { - "settings": { - "Static Chroma": false, - "Show CPS": true, - "Custom Font": false, - "Key Unpressed Color": { - "red": 255, - "green": 255, - "blue": 255, - "alpha": 255 - }, - "Wave Chroma": false, - "Show Spacebar": true, - "Background Color": { - "red": 0, - "green": 0, - "blue": 0, - "alpha": 150 - }, - "Show Mouse Buttons": true, - "Key Pressed Color": { - "red": 0, - "green": 0, - "blue": 0, - "alpha": 255 - } - }, - "bind": 0, - "hud": {"keystrokes": { - "visible": true, - "x": 0, - "y": 120, - "scale": 1 - }}, - "bindtype": "Toggle", - "enabled": false - }, - "Chat": { - "settings": { - "Background Opacity": 96, - "Infinite Chat": false - }, - "bind": 0, - "hud": {}, - "bindtype": "Toggle", - "enabled": false - }, - "Zoom": { - "settings": { - "Scroll Zoom": false, - "Inverted": false, - "Smooth Zoom": false, - "Zoom Factor": 1 - }, - "bind": 0, - "hud": {}, - "bindtype": "Toggle", - "enabled": false - }, - "GUI": { - "settings": {}, - "bind": 54, - "hud": {}, - "bindtype": "Toggle", - "enabled": false - }, - "theme": "ATHENA", - "Freelook": { - "settings": { - "Perspective Key": 56, - "Require Hold": true - }, - "bind": 0, - "hud": {}, - "bindtype": "Toggle", - "enabled": false - }, - "Hit Delay Fix": { - "settings": {}, - "bind": 0, - "hud": {}, - "bindtype": "Toggle", - "enabled": false - }, - "macros": [{ - "name": "r", - "command": "sdfsdfsdfsdfsdfsdfdsafsdf", - "key": 19, - "enabled": true - }], - "Coordinates": { - "settings": { - "Show Compass": true, - "Compass Color": { - "red": 255, - "green": 255, - "blue": 255, - "alpha": 255 - }, - "Transparency": 255, - "Background": true, - "Show Direction": true, - "Display Mode": "Circle", - "Shout Coordinates Key": 0, - "Chat Format": "X: {x}, Y: {y}, Z: {z}", - "Show Label": true, - "Show Biome": true, - "Show Avatar": false, - "Value Color": { - "red": 255, - "green": 255, - "blue": 255, - "alpha": 255 - }, - "Biome Preset Color": true, - "Custom Font": false, - "Label Color": { - "red": 255, - "green": 255, - "blue": 255, - "alpha": 255 - }, - "Biome Color": { - "red": 255, - "green": 255, - "blue": 255, - "alpha": 255 - }, - "Background Color": { - "red": 0, - "green": 0, - "blue": 0, - "alpha": 153 - } - }, - "bind": 0, - "hud": {"coordinates": { - "visible": true, - "x": 22, - "y": 29, - "scale": 1 - }}, - "bindtype": "Toggle", - "enabled": false - }, - "Screenshot Uploader": { - "settings": { - "Delete": true, - "Copy": true, - "Link": true, - "Open": true - }, - "bind": 0, - "hud": {}, - "bindtype": "Toggle", - "enabled": false - }, - "fps": { - "entities": [], - "blocks": [], - "tile-entities": [], - "particles": [] - }, - "crosshair-data": "[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]", - "Time Changer": { - "settings": {"Time": 16000}, - "bind": 0, - "hud": {}, - "bindtype": "Toggle", - "enabled": false - }, - "Entity HUD": { - "settings": { - "Transparency": 255, - "Static Chroma": false, - "Background": true, - "Custom Font": false, - "Wave Chroma": false, - "Color": { - "red": 255, - "green": 255, - "blue": 255, - "alpha": 255 - }, - "Background Color": { - "red": 0, - "green": 0, - "blue": 0, - "alpha": 150 - }, - "Display Mode": "Circle" - }, - "bind": 0, - "hud": {"entityhud": { - "visible": true, - "x": 1, - "y": 175, - "scale": 1 - }}, - "bindtype": "Toggle", - "enabled": false - }, - "Item Physics": { - "settings": {}, - "bind": 0, - "hud": {}, - "bindtype": "Toggle", - "enabled": false - }, - "Custom Hit Color": { - "settings": {"Hit Color": { - "red": 255, - "green": 255, - "blue": 255, - "alpha": 255 - }}, - "bind": 0, - "hud": {}, - "bindtype": "Toggle", - "enabled": false - }, - "Toggle Sprint": { - "settings": { - "Toggle Sprint": true, - "Double Tap Sprint": false, - "Background": false, - "Fly Boost Speed Vertical": 2, - "Fly Boost Speed Horizontal": 2, - "Custom Font": false, - "Toggle Sneak": true, - "Background Color": { - "red": 0, - "green": 0, - "blue": 0, - "alpha": 150 - }, - "Color": { - "red": 255, - "green": 255, - "blue": 255, - "alpha": 255 - }, - "Display Mode": "Circle", - "Fly Boost": true - }, - "bind": 0, - "hud": {"togglesprint": { - "visible": true, - "x": 0, - "y": 0, - "scale": 1 - }}, - "bindtype": "Toggle", - "enabled": false - }, - "Memory Usage": { - "settings": { - "Transparency": 255, - "Static Chroma": false, - "Background": true, - "Custom Font": false, - "Wave Chroma": false, - "Percentage": false, - "Color": { - "red": 255, - "green": 255, - "blue": 255, - "alpha": 255 - }, - "Background Color": { - "red": 0, - "green": 0, - "blue": 0, - "alpha": 150 - }, - "Display Mode": "Circle" - }, - "bind": 0, - "hud": {"memory usage": { - "visible": true, - "x": 1, - "y": 175, - "scale": 1 - }}, - "bindtype": "Toggle", - "enabled": false - }, - "General Settings": { - "settings": { - "Minimize Side Bar": false, - "F5 Nametags": true, - "Render Socket Logo": true, - "Custom GUI Font": true - }, - "bind": 0, - "hud": {}, - "bindtype": "Toggle", - "enabled": false - }, - "Nick Hider": { - "settings": {"Nick": "Custom Nick"}, - "bind": 0, - "hud": {}, - "bindtype": "Toggle", - "enabled": false - }, - "Reach Display": { - "settings": { - "Transparency": 255, - "Static Chroma": false, - "Background": true, - "Custom Font": false, - "Wave Chroma": false, - "Background Color": { - "red": 0, - "green": 0, - "blue": 0, - "alpha": 153 - }, - "Color": { - "red": 255, - "green": 255, - "blue": 255, - "alpha": 255 - }, - "Display Mode": "Circle" - }, - "bind": 0, - "hud": {"reachdisplay": { - "visible": true, - "x": 1, - "y": 175, - "scale": 1 - }}, - "bindtype": "Toggle", - "enabled": false - }, - "Mouse Delay Fix": { - "settings": {}, - "bind": 0, - "hud": {}, - "bindtype": "Toggle", - "enabled": false - }, - "Test Module": { - "settings": { - "Color 2": { - "red": 225, - "green": 255, - "blue": 255, - "alpha": 255 - }, - "Color 1": { - "red": 225, - "green": 255, - "blue": 255, - "alpha": 255 - }, - "Color 4": { - "red": 225, - "green": 255, - "blue": 255, - "alpha": 255 - }, - "Color 3": { - "red": 225, - "green": 255, - "blue": 255, - "alpha": 255 - }, - "Boolean 3": false, - "Boolean 2": false, - "Color 5": { - "red": 225, - "green": 255, - "blue": 255, - "alpha": 255 - }, - "Boolean 1": false, - "Boolean 7": false, - "Boolean 6": false, - "Boolean 5": false, - "Boolean 4": false - }, - "bind": 0, - "hud": {"test": { - "visible": true, - "x": 217, - "y": 123, - "scale": 1 - }}, - "bindtype": "Toggle", - "enabled": false - }, - "Motion Blur": { - "settings": {"Amount": 3}, - "bind": 0, - "hud": {}, - "bindtype": "Toggle", - "enabled": false - }, - "1.7 Animations": { - "settings": { - "Armor Damage Flash": true, - "Blocking Hitting": true, - "Item Held": true, - "Eat/Break Animation": true, - "Blocking": true, - "Bow": true, - "Disable Health Flash": true - }, - "bind": 0, - "hud": {}, - "bindtype": "Toggle", - "enabled": true - }, - "cape": "Minecon 2016" -} \ No newline at end of file diff --git a/workspace/settings/configs/last.txt b/workspace/settings/configs/last.txt deleted file mode 100644 index 331d858c..00000000 --- a/workspace/settings/configs/last.txt +++ /dev/null @@ -1 +0,0 @@ -default \ No newline at end of file diff --git a/workspace/usercache.json b/workspace/usercache.json index 2e6d758d..3db9099a 100644 --- a/workspace/usercache.json +++ b/workspace/usercache.json @@ -1 +1 @@ -[{"name":"etert","uuid":"a12f6b57-b314-305d-a4de-14e5b61e7068","expiresOn":"2023-08-04 14:43:35 +0200"},{"name":"Player831","uuid":"7daaf105-640b-34bc-83e6-6c045d1c9591","expiresOn":"2023-08-02 17:44:01 +0200"},{"name":"ziue","uuid":"ae330cf9-3749-3ca0-ba31-8447e2a2786f","expiresOn":"2023-08-01 16:58:31 +0200"},{"name":"Player995","uuid":"93bfa0b6-cc14-3c0c-8efa-0bcc48245274","expiresOn":"2023-08-02 16:21:08 +0200"},{"name":"ziue","uuid":"74e89738-6c9e-4f59-83ef-d365849e6049","expiresOn":"2023-08-01 19:27:12 +0200"},{"name":"Player665","uuid":"5daba5f8-966b-3165-8089-02aaa9b1e740","expiresOn":"2023-08-02 11:22:29 +0200"},{"name":"Player119","uuid":"8fbcb74c-bd8d-3181-a022-3c858a10477d","expiresOn":"2023-08-02 10:47:11 +0200"},{"name":"Player504","uuid":"eb08048d-a3b9-3008-984c-fcc8bb7d8893","expiresOn":"2023-08-02 10:04:23 +0200"},{"name":"Player311","uuid":"d4625839-68ff-34de-8208-19f0e474753e","expiresOn":"2023-08-02 16:20:03 +0200"}] \ No newline at end of file +[{"name":"ziuedev","uuid":"a588da93-fe7a-3a00-87de-d96fd4924107","expiresOn":"2023-08-10 10:47:13 +0200"},{"name":"Player311","uuid":"d4625839-68ff-34de-8208-19f0e474753e","expiresOn":"2023-08-02 16:20:03 +0200"},{"name":"Player119","uuid":"8fbcb74c-bd8d-3181-a022-3c858a10477d","expiresOn":"2023-08-02 10:47:11 +0200"},{"name":"Player665","uuid":"5daba5f8-966b-3165-8089-02aaa9b1e740","expiresOn":"2023-08-02 11:22:29 +0200"},{"name":"ziue","uuid":"74e89738-6c9e-4f59-83ef-d365849e6049","expiresOn":"2023-08-01 19:27:12 +0200"},{"name":"ziue","uuid":"ae330cf9-3749-3ca0-ba31-8447e2a2786f","expiresOn":"2023-08-01 16:58:31 +0200"},{"name":"Player831","uuid":"7daaf105-640b-34bc-83e6-6c045d1c9591","expiresOn":"2023-08-02 17:44:01 +0200"},{"name":"Player995","uuid":"93bfa0b6-cc14-3c0c-8efa-0bcc48245274","expiresOn":"2023-08-02 16:21:08 +0200"},{"name":"Player504","uuid":"eb08048d-a3b9-3008-984c-fcc8bb7d8893","expiresOn":"2023-08-02 10:04:23 +0200"},{"name":"etert","uuid":"a12f6b57-b314-305d-a4de-14e5b61e7068","expiresOn":"2023-08-08 16:23:11 +0200"}] \ No newline at end of file