diff --git a/libs/src/de/jcm/discordgamesdk/ActivityManager.class b/libs/src/de/jcm/discordgamesdk/ActivityManager.class new file mode 100644 index 00000000..d22265f8 Binary files /dev/null and b/libs/src/de/jcm/discordgamesdk/ActivityManager.class differ diff --git a/libs/src/de/jcm/discordgamesdk/Core.class b/libs/src/de/jcm/discordgamesdk/Core.class new file mode 100644 index 00000000..aac24573 Binary files /dev/null and b/libs/src/de/jcm/discordgamesdk/Core.class differ diff --git a/libs/src/de/jcm/discordgamesdk/CoreClosedException.class b/libs/src/de/jcm/discordgamesdk/CoreClosedException.class new file mode 100644 index 00000000..3e3705cf Binary files /dev/null and b/libs/src/de/jcm/discordgamesdk/CoreClosedException.class differ diff --git a/libs/src/de/jcm/discordgamesdk/CreateParams$Flags.class b/libs/src/de/jcm/discordgamesdk/CreateParams$Flags.class new file mode 100644 index 00000000..f82a598a Binary files /dev/null and b/libs/src/de/jcm/discordgamesdk/CreateParams$Flags.class differ diff --git a/libs/src/de/jcm/discordgamesdk/CreateParams.class b/libs/src/de/jcm/discordgamesdk/CreateParams.class new file mode 100644 index 00000000..76963e38 Binary files /dev/null and b/libs/src/de/jcm/discordgamesdk/CreateParams.class differ diff --git a/libs/src/de/jcm/discordgamesdk/DiscordEventAdapter.class b/libs/src/de/jcm/discordgamesdk/DiscordEventAdapter.class new file mode 100644 index 00000000..cb9dd4ac Binary files /dev/null and b/libs/src/de/jcm/discordgamesdk/DiscordEventAdapter.class differ diff --git a/libs/src/de/jcm/discordgamesdk/DiscordEventHandler.class b/libs/src/de/jcm/discordgamesdk/DiscordEventHandler.class new file mode 100644 index 00000000..2b4aa923 Binary files /dev/null and b/libs/src/de/jcm/discordgamesdk/DiscordEventHandler.class differ diff --git a/libs/src/de/jcm/discordgamesdk/DiscordUtils.class b/libs/src/de/jcm/discordgamesdk/DiscordUtils.class new file mode 100644 index 00000000..032a1aaf Binary files /dev/null and b/libs/src/de/jcm/discordgamesdk/DiscordUtils.class differ diff --git a/libs/src/de/jcm/discordgamesdk/GameSDKException.class b/libs/src/de/jcm/discordgamesdk/GameSDKException.class new file mode 100644 index 00000000..ea645531 Binary files /dev/null and b/libs/src/de/jcm/discordgamesdk/GameSDKException.class differ diff --git a/libs/src/de/jcm/discordgamesdk/ImageManager.class b/libs/src/de/jcm/discordgamesdk/ImageManager.class new file mode 100644 index 00000000..ad1f2cb0 Binary files /dev/null and b/libs/src/de/jcm/discordgamesdk/ImageManager.class differ diff --git a/libs/src/de/jcm/discordgamesdk/LobbyManager.class b/libs/src/de/jcm/discordgamesdk/LobbyManager.class new file mode 100644 index 00000000..a83bed27 Binary files /dev/null and b/libs/src/de/jcm/discordgamesdk/LobbyManager.class differ diff --git a/libs/src/de/jcm/discordgamesdk/LogLevel.class b/libs/src/de/jcm/discordgamesdk/LogLevel.class new file mode 100644 index 00000000..0b0fa4be Binary files /dev/null and b/libs/src/de/jcm/discordgamesdk/LogLevel.class differ diff --git a/libs/src/de/jcm/discordgamesdk/NetworkManager.class b/libs/src/de/jcm/discordgamesdk/NetworkManager.class new file mode 100644 index 00000000..a6180fda Binary files /dev/null and b/libs/src/de/jcm/discordgamesdk/NetworkManager.class differ diff --git a/libs/src/de/jcm/discordgamesdk/OverlayManager.class b/libs/src/de/jcm/discordgamesdk/OverlayManager.class new file mode 100644 index 00000000..efcb7d5c Binary files /dev/null and b/libs/src/de/jcm/discordgamesdk/OverlayManager.class differ diff --git a/libs/src/de/jcm/discordgamesdk/RelationshipManager.class b/libs/src/de/jcm/discordgamesdk/RelationshipManager.class new file mode 100644 index 00000000..4d3c28e6 Binary files /dev/null and b/libs/src/de/jcm/discordgamesdk/RelationshipManager.class differ diff --git a/libs/src/de/jcm/discordgamesdk/Result.class b/libs/src/de/jcm/discordgamesdk/Result.class new file mode 100644 index 00000000..7104d97c Binary files /dev/null and b/libs/src/de/jcm/discordgamesdk/Result.class differ diff --git a/libs/src/de/jcm/discordgamesdk/UserManager.class b/libs/src/de/jcm/discordgamesdk/UserManager.class new file mode 100644 index 00000000..1d8ad0e8 Binary files /dev/null and b/libs/src/de/jcm/discordgamesdk/UserManager.class differ diff --git a/libs/src/de/jcm/discordgamesdk/VoiceManager.class b/libs/src/de/jcm/discordgamesdk/VoiceManager.class new file mode 100644 index 00000000..10c63c96 Binary files /dev/null and b/libs/src/de/jcm/discordgamesdk/VoiceManager.class differ diff --git a/libs/src/de/jcm/discordgamesdk/activity/Activity$ActivityReference.class b/libs/src/de/jcm/discordgamesdk/activity/Activity$ActivityReference.class new file mode 100644 index 00000000..2d1feb80 Binary files /dev/null and b/libs/src/de/jcm/discordgamesdk/activity/Activity$ActivityReference.class differ diff --git a/libs/src/de/jcm/discordgamesdk/activity/Activity.class b/libs/src/de/jcm/discordgamesdk/activity/Activity.class new file mode 100644 index 00000000..5a0a60e0 Binary files /dev/null and b/libs/src/de/jcm/discordgamesdk/activity/Activity.class differ diff --git a/libs/src/de/jcm/discordgamesdk/activity/ActivityActionType.class b/libs/src/de/jcm/discordgamesdk/activity/ActivityActionType.class new file mode 100644 index 00000000..fb07974c Binary files /dev/null and b/libs/src/de/jcm/discordgamesdk/activity/ActivityActionType.class differ diff --git a/libs/src/de/jcm/discordgamesdk/activity/ActivityAssets.class b/libs/src/de/jcm/discordgamesdk/activity/ActivityAssets.class new file mode 100644 index 00000000..0c589a6f Binary files /dev/null and b/libs/src/de/jcm/discordgamesdk/activity/ActivityAssets.class differ diff --git a/libs/src/de/jcm/discordgamesdk/activity/ActivityJoinRequestReply.class b/libs/src/de/jcm/discordgamesdk/activity/ActivityJoinRequestReply.class new file mode 100644 index 00000000..ca854fc3 Binary files /dev/null and b/libs/src/de/jcm/discordgamesdk/activity/ActivityJoinRequestReply.class differ diff --git a/libs/src/de/jcm/discordgamesdk/activity/ActivityParty.class b/libs/src/de/jcm/discordgamesdk/activity/ActivityParty.class new file mode 100644 index 00000000..70d50b5a Binary files /dev/null and b/libs/src/de/jcm/discordgamesdk/activity/ActivityParty.class differ diff --git a/libs/src/de/jcm/discordgamesdk/activity/ActivityPartySize.class b/libs/src/de/jcm/discordgamesdk/activity/ActivityPartySize.class new file mode 100644 index 00000000..5cc30ac1 Binary files /dev/null and b/libs/src/de/jcm/discordgamesdk/activity/ActivityPartySize.class differ diff --git a/libs/src/de/jcm/discordgamesdk/activity/ActivitySecrets.class b/libs/src/de/jcm/discordgamesdk/activity/ActivitySecrets.class new file mode 100644 index 00000000..f9846856 Binary files /dev/null and b/libs/src/de/jcm/discordgamesdk/activity/ActivitySecrets.class differ diff --git a/libs/src/de/jcm/discordgamesdk/activity/ActivityTimestamps.class b/libs/src/de/jcm/discordgamesdk/activity/ActivityTimestamps.class new file mode 100644 index 00000000..692f001a Binary files /dev/null and b/libs/src/de/jcm/discordgamesdk/activity/ActivityTimestamps.class differ diff --git a/libs/src/de/jcm/discordgamesdk/activity/ActivityType.class b/libs/src/de/jcm/discordgamesdk/activity/ActivityType.class new file mode 100644 index 00000000..8a6fbf7a Binary files /dev/null and b/libs/src/de/jcm/discordgamesdk/activity/ActivityType.class differ diff --git a/libs/src/de/jcm/discordgamesdk/image/ImageDimensions.class b/libs/src/de/jcm/discordgamesdk/image/ImageDimensions.class new file mode 100644 index 00000000..b022f15d Binary files /dev/null and b/libs/src/de/jcm/discordgamesdk/image/ImageDimensions.class differ diff --git a/libs/src/de/jcm/discordgamesdk/image/ImageHandle.class b/libs/src/de/jcm/discordgamesdk/image/ImageHandle.class new file mode 100644 index 00000000..c7ac5499 Binary files /dev/null and b/libs/src/de/jcm/discordgamesdk/image/ImageHandle.class differ diff --git a/libs/src/de/jcm/discordgamesdk/image/ImageType.class b/libs/src/de/jcm/discordgamesdk/image/ImageType.class new file mode 100644 index 00000000..a349f18e Binary files /dev/null and b/libs/src/de/jcm/discordgamesdk/image/ImageType.class differ diff --git a/libs/src/de/jcm/discordgamesdk/lobby/Lobby.class b/libs/src/de/jcm/discordgamesdk/lobby/Lobby.class new file mode 100644 index 00000000..999eb745 Binary files /dev/null and b/libs/src/de/jcm/discordgamesdk/lobby/Lobby.class differ diff --git a/libs/src/de/jcm/discordgamesdk/lobby/LobbyMemberTransaction.class b/libs/src/de/jcm/discordgamesdk/lobby/LobbyMemberTransaction.class new file mode 100644 index 00000000..4c111d77 Binary files /dev/null and b/libs/src/de/jcm/discordgamesdk/lobby/LobbyMemberTransaction.class differ diff --git a/libs/src/de/jcm/discordgamesdk/lobby/LobbySearchQuery$Cast.class b/libs/src/de/jcm/discordgamesdk/lobby/LobbySearchQuery$Cast.class new file mode 100644 index 00000000..75f1be61 Binary files /dev/null and b/libs/src/de/jcm/discordgamesdk/lobby/LobbySearchQuery$Cast.class differ diff --git a/libs/src/de/jcm/discordgamesdk/lobby/LobbySearchQuery$Comparison.class b/libs/src/de/jcm/discordgamesdk/lobby/LobbySearchQuery$Comparison.class new file mode 100644 index 00000000..b5b0753b Binary files /dev/null and b/libs/src/de/jcm/discordgamesdk/lobby/LobbySearchQuery$Comparison.class differ diff --git a/libs/src/de/jcm/discordgamesdk/lobby/LobbySearchQuery$Distance.class b/libs/src/de/jcm/discordgamesdk/lobby/LobbySearchQuery$Distance.class new file mode 100644 index 00000000..a1e95022 Binary files /dev/null and b/libs/src/de/jcm/discordgamesdk/lobby/LobbySearchQuery$Distance.class differ diff --git a/libs/src/de/jcm/discordgamesdk/lobby/LobbySearchQuery.class b/libs/src/de/jcm/discordgamesdk/lobby/LobbySearchQuery.class new file mode 100644 index 00000000..39675f55 Binary files /dev/null and b/libs/src/de/jcm/discordgamesdk/lobby/LobbySearchQuery.class differ diff --git a/libs/src/de/jcm/discordgamesdk/lobby/LobbyTransaction.class b/libs/src/de/jcm/discordgamesdk/lobby/LobbyTransaction.class new file mode 100644 index 00000000..4035b78b Binary files /dev/null and b/libs/src/de/jcm/discordgamesdk/lobby/LobbyTransaction.class differ diff --git a/libs/src/de/jcm/discordgamesdk/lobby/LobbyType.class b/libs/src/de/jcm/discordgamesdk/lobby/LobbyType.class new file mode 100644 index 00000000..20e0201e Binary files /dev/null and b/libs/src/de/jcm/discordgamesdk/lobby/LobbyType.class differ diff --git a/libs/src/de/jcm/discordgamesdk/user/DiscordUser.class b/libs/src/de/jcm/discordgamesdk/user/DiscordUser.class new file mode 100644 index 00000000..0d3d04c0 Binary files /dev/null and b/libs/src/de/jcm/discordgamesdk/user/DiscordUser.class differ diff --git a/libs/src/de/jcm/discordgamesdk/user/OnlineStatus.class b/libs/src/de/jcm/discordgamesdk/user/OnlineStatus.class new file mode 100644 index 00000000..f35bf5fe Binary files /dev/null and b/libs/src/de/jcm/discordgamesdk/user/OnlineStatus.class differ diff --git a/libs/src/de/jcm/discordgamesdk/user/PremiumType.class b/libs/src/de/jcm/discordgamesdk/user/PremiumType.class new file mode 100644 index 00000000..47d64ca3 Binary files /dev/null and b/libs/src/de/jcm/discordgamesdk/user/PremiumType.class differ diff --git a/libs/src/de/jcm/discordgamesdk/user/Presence.class b/libs/src/de/jcm/discordgamesdk/user/Presence.class new file mode 100644 index 00000000..4cf8eb6f Binary files /dev/null and b/libs/src/de/jcm/discordgamesdk/user/Presence.class differ diff --git a/libs/src/de/jcm/discordgamesdk/user/Relationship.class b/libs/src/de/jcm/discordgamesdk/user/Relationship.class new file mode 100644 index 00000000..ff3802f2 Binary files /dev/null and b/libs/src/de/jcm/discordgamesdk/user/Relationship.class differ diff --git a/libs/src/de/jcm/discordgamesdk/user/RelationshipType.class b/libs/src/de/jcm/discordgamesdk/user/RelationshipType.class new file mode 100644 index 00000000..3e40bfcf Binary files /dev/null and b/libs/src/de/jcm/discordgamesdk/user/RelationshipType.class differ diff --git a/libs/src/de/jcm/discordgamesdk/voice/VoiceInputMode$InputModeType.class b/libs/src/de/jcm/discordgamesdk/voice/VoiceInputMode$InputModeType.class new file mode 100644 index 00000000..77e3a888 Binary files /dev/null and b/libs/src/de/jcm/discordgamesdk/voice/VoiceInputMode$InputModeType.class differ diff --git a/libs/src/de/jcm/discordgamesdk/voice/VoiceInputMode.class b/libs/src/de/jcm/discordgamesdk/voice/VoiceInputMode.class new file mode 100644 index 00000000..80846922 Binary files /dev/null and b/libs/src/de/jcm/discordgamesdk/voice/VoiceInputMode.class differ diff --git a/libs/src/native/linux/amd64/libdiscord_game_sdk_jni.so b/libs/src/native/linux/amd64/libdiscord_game_sdk_jni.so new file mode 100644 index 00000000..8e36260c Binary files /dev/null and b/libs/src/native/linux/amd64/libdiscord_game_sdk_jni.so differ diff --git a/libs/src/native/macos/amd64/libdiscord_game_sdk_jni.dylib b/libs/src/native/macos/amd64/libdiscord_game_sdk_jni.dylib new file mode 100644 index 00000000..82a22f4d Binary files /dev/null and b/libs/src/native/macos/amd64/libdiscord_game_sdk_jni.dylib differ diff --git a/libs/src/native/windows/amd64/discord_game_sdk_jni.dll b/libs/src/native/windows/amd64/discord_game_sdk_jni.dll new file mode 100644 index 00000000..9125a736 Binary files /dev/null and b/libs/src/native/windows/amd64/discord_game_sdk_jni.dll differ diff --git a/libs/src/native/windows/x86/discord_game_sdk_jni.dll b/libs/src/native/windows/x86/discord_game_sdk_jni.dll new file mode 100644 index 00000000..dfb803a6 Binary files /dev/null and b/libs/src/native/windows/x86/discord_game_sdk_jni.dll differ diff --git a/src/main/java/fr/litarvan/openauth/AuthPoints.java b/src/main/java/fr/litarvan/openauth/AuthPoints.java new file mode 100644 index 00000000..6ceb46a6 --- /dev/null +++ b/src/main/java/fr/litarvan/openauth/AuthPoints.java @@ -0,0 +1,130 @@ +/* + * Copyright 2015 TheShark34 + * + * This file is part of OpenAuth. + + * OpenAuth is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAuth is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with OpenAuth. If not, see . + */ +package fr.litarvan.openauth; + +/** + * The server Auth Points + * + *

+ * Contains the pages url of a server + *

+ * + * @version 1.0.4 + * @author Litarvan + */ +public class AuthPoints { + + /** + * The Mojang auth server auth points + */ + public static final AuthPoints NORMAL_AUTH_POINTS = new AuthPoints("authenticate", "refresh", "validate", "signout", "invalidate"); + + /** + * The server authenticate point + */ + private String authenticatePoint; + + /** + * The server refresh point + */ + private String refreshPoint; + + /** + * The server validate point + */ + private String validatePoint; + + /** + * The server signout point + */ + private String signoutPoint; + + /** + * The server invalidate point + */ + private String invalidatePoint; + + /** + * AuthPoints constructor + * + * @param authenticatePoint + * Authenticate point + * @param refreshPoint + * Refresh point + * @param validatePoint + * Validate point + * @param signoutPoint + * Signout point + * @param invalidatePoint + * Invalidate point + */ + public AuthPoints(String authenticatePoint, String refreshPoint, String validatePoint, String signoutPoint, String invalidatePoint) { + this.authenticatePoint = authenticatePoint; + this.refreshPoint = refreshPoint; + this.validatePoint = validatePoint; + this.signoutPoint = signoutPoint; + this.invalidatePoint = invalidatePoint; + } + + /** + * Returns the server authenticate point + * + * @return The authenticate point + */ + public String getAuthenticatePoint() { + return this.authenticatePoint; + } + + /** + * Returns the server refresh point + * + * @return The refresh point + */ + public String getRefreshPoint() { + return this.refreshPoint; + } + + /** + * Returns the server validate point + * + * @return The validate point + */ + public String getValidatePoint() { + return this.validatePoint; + } + + /** + * Returns the server signout point + * + * @return The signout point + */ + public String getSignoutPoint() { + return this.signoutPoint; + } + + /** + * Returns the server invalidate point + * + * @return The invalidate point + */ + public String getInvalidatePoint() { + return this.invalidatePoint; + } + +} diff --git a/src/main/java/fr/litarvan/openauth/AuthenticationException.java b/src/main/java/fr/litarvan/openauth/AuthenticationException.java new file mode 100644 index 00000000..f3884bbf --- /dev/null +++ b/src/main/java/fr/litarvan/openauth/AuthenticationException.java @@ -0,0 +1,55 @@ +/* + * Copyright 2015 TheShark34 + * + * This file is part of OpenAuth. + + * OpenAuth is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAuth is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with OpenAuth. If not, see . + */ +package fr.litarvan.openauth; + +import fr.litarvan.openauth.model.AuthError; + +/** + * Authentication exceptions + * + * @version 1.0.4 + * @author Litarvan + */ +public class AuthenticationException extends Exception { + + /** + * The given JSON model instance of the error + */ + private AuthError model; + + /** + * Create a new Authentication Exception + * + * @param model + * The given JSON model instance of the error + */ + public AuthenticationException(AuthError model) { + super(model.getErrorMessage()); + this.model = model; + } + + /** + * Returns the given JSON model instance of the error + * + * @return The error model + */ + public AuthError getErrorModel() { + return model; + } +} \ No newline at end of file diff --git a/src/main/java/fr/litarvan/openauth/Authenticator.java b/src/main/java/fr/litarvan/openauth/Authenticator.java new file mode 100644 index 00000000..5d1c8e36 --- /dev/null +++ b/src/main/java/fr/litarvan/openauth/Authenticator.java @@ -0,0 +1,263 @@ +/* + * Copyright 2015-2021 Adrien 'Litarvan' Navratil + * + * This file is part of OpenAuth. + + * OpenAuth is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAuth is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with OpenAuth. If not, see . + */ +package fr.litarvan.openauth; + +import com.google.gson.Gson; +import fr.litarvan.openauth.model.AuthAgent; +import fr.litarvan.openauth.model.request.*; +import fr.litarvan.openauth.model.response.*; +import fr.litarvan.openauth.model.AuthError; + +import java.io.*; +import java.net.HttpURLConnection; +import java.net.URL; +import java.nio.charset.StandardCharsets; + +/** + * The Authenticator + * + *

+ * The main class of the lib, use it to authenticate a user ! + *

+ * + * @version 1.0.4 + * @author Litarvan + */ +public class Authenticator { + + /** + * The Mojang official auth server + */ + public static final String MOJANG_AUTH_URL = "https://authserver.mojang.com/"; + + /** + * The auth server URL + */ + private String authURL; + + /** + * The server auth points + */ + private AuthPoints authPoints; + + /** + * Create an authenticator + * + * @param authURL + * The auth server URL + * + * @param authPoints + * The URIs of the multiple requests + */ + public Authenticator(String authURL, AuthPoints authPoints) { + this.authURL = authURL; + this.authPoints = authPoints; + } + + /** + * Authenticates an user using his password. + * + * @param agent + * The auth agent (optional) + * @param username + * User mojang account name + * @param password + * User mojang account password + * @param clientToken + * The client token (optional, like a key for the access token) + * + * @throws AuthenticationException If the server returned an error as a JSON + * + * @return The response sent by the server (parsed from a JSON) + */ + public AuthResponse authenticate(AuthAgent agent, String username, String password, String clientToken) throws AuthenticationException { + AuthRequest request = new AuthRequest(agent, username, password, clientToken); + return (AuthResponse) sendRequest(request, AuthResponse.class, authPoints.getAuthenticatePoint()); + } + + /** + * Refresh a valid access token. It can be uses to keep a user logged in between gaming sessions + * and is preferred over storing the user's password in a file. + * + * @param accessToken + * The saved access token + * @param clientToken + * The saved client token (need to be the same used when authenticated to get the acces token) + * + * @throws AuthenticationException If the server returned an error as a JSON + * + * @return The response sent by the server (parsed from a JSON) + */ + public RefreshResponse refresh(String accessToken, String clientToken) throws AuthenticationException { + RefreshRequest request = new RefreshRequest(accessToken, clientToken); + return (RefreshResponse) sendRequest(request, RefreshResponse.class, authPoints.getRefreshPoint()); + } + + /** + * Check if an access token is a valid session token with a currently-active session. + * Note: this method will not respond successfully to all currently-logged-in sessions, + * just the most recently-logged-in for each user. It is intended to be used by servers to validate + * that a user should be connecting (and reject users who have logged in elsewhere since starting Minecraft), + * NOT to auth that a particular session token is valid for authentication purposes. + * To authenticate a user by session token, use the refresh verb and catch resulting errors. + * + * @param accessToken + * The access token to check + * + * @throws AuthenticationException If the server returned an error as a JSON + */ + public void validate(String accessToken) throws AuthenticationException { + ValidateRequest request = new ValidateRequest(accessToken); + sendRequest(request, null, authPoints.getValidatePoint()); + } + + /** + * Invalidates accessTokens using an account's username and password + * + * @param username + * User mojang account name + * @param password + * User mojang account password + * + * @throws AuthenticationException If the server returned an error as a JSON + */ + public void signout(String username, String password) throws AuthenticationException { + SignoutRequest request = new SignoutRequest(username, password); + sendRequest(request, null, authPoints.getSignoutPoint()); + } + + /** + * Invalidates accessTokens using a client/access token pair + * + * @param accessToken + * Valid access token to invalidate + * @param clientToken + * Client token used when authenticated to get the access token + * + * @throws AuthenticationException If the server returned an error as a JSON + */ + public void invalidate(String accessToken, String clientToken) throws AuthenticationException { + InvalidateRequest request = new InvalidateRequest(accessToken, clientToken); + sendRequest(request, null, authPoints.getInvalidatePoint()); + } + + /** + * Send a request to the auth server + * + * @param request + * The auth request to send + * @param model + * The model of the reponse + * @param authPoint + * The auth point of the request + * @throws AuthenticationException + * If it returned an error or the request failed + * + * @throws AuthenticationException If the server returned an error as a JSON + * + * @return Instance of the given reponse model if it not null + */ + private Object sendRequest(Object request, Class model, String authPoint) throws AuthenticationException { + Gson gson = new Gson(); + String response; + + try { + response = sendPostRequest(this.authURL + authPoint, gson.toJson(request)); + } catch (IOException e) { + throw new AuthenticationException(new AuthError("Can't send the request : " + e.getClass().getName(), e.getMessage(), "Unknown")); + } + + if(model != null) + return gson.fromJson(response, model); + else + return null; + } + + /** + * Sends a post request of a json + * + * @param url + * The url to send the request + * @param json + * The json to send + * @throws IOException + * If it failed + * + * @throws AuthenticationException If the request returned an error JSON or not a JSON + * + * @return The request response + */ + private String sendPostRequest(String url, String json) throws AuthenticationException, IOException { + byte[] jsonBytes = json.getBytes(StandardCharsets.UTF_8); + URL serverURL = new URL(url); + HttpURLConnection connection = (HttpURLConnection) serverURL.openConnection(); + connection.setRequestMethod("POST"); + + // Sending post request + connection.setDoOutput(true); + connection.setRequestProperty("Accept-Charset", "UTF-8"); + connection.setRequestProperty("Content-Type", "application/json;charset=utf-8"); + connection.setRequestProperty("Content-Length", String.valueOf(jsonBytes.length)); + DataOutputStream wr = new DataOutputStream(connection.getOutputStream()); + wr.write(jsonBytes, 0, jsonBytes.length); + wr.flush(); + wr.close(); + + connection.connect(); + + int responseCode = connection.getResponseCode(); + + if(responseCode == 204) { + connection.disconnect(); + return null; + } + + InputStream is; + if(responseCode == 200) + is = connection.getInputStream(); + else + is = connection.getErrorStream(); + + String response; + + BufferedReader br = new BufferedReader(new InputStreamReader(is)); + response = br.readLine(); + try { + br.close(); + } catch (IOException e) { + e.printStackTrace(); + } + connection.disconnect(); + + while (response != null && response.startsWith("\uFEFF")) + response = response.substring(1); + + if (responseCode != 200) { + Gson gson = new Gson(); + + if (response != null && !response.startsWith("{")) + throw new AuthenticationException(new AuthError("Internal server error", response, "Remote")); + + throw new AuthenticationException(gson.fromJson(response, AuthError.class)); + } + + return response; + } + +} diff --git a/src/main/java/fr/litarvan/openauth/microsoft/AuthTokens.java b/src/main/java/fr/litarvan/openauth/microsoft/AuthTokens.java new file mode 100644 index 00000000..d2a9db86 --- /dev/null +++ b/src/main/java/fr/litarvan/openauth/microsoft/AuthTokens.java @@ -0,0 +1,41 @@ +/* + * Copyright 2015-2021 Adrien 'Litarvan' Navratil + * + * This file is part of OpenAuth. + + * OpenAuth is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAuth is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with OpenAuth. If not, see . + */ +package fr.litarvan.openauth.microsoft; + +public class AuthTokens +{ + private final String accessToken; + private final String refreshToken; + + public AuthTokens(String accessToken, String refreshToken) + { + this.accessToken = accessToken; + this.refreshToken = refreshToken; + } + + public String getAccessToken() + { + return accessToken; + } + + public String getRefreshToken() + { + return refreshToken; + } +} diff --git a/src/main/java/fr/litarvan/openauth/microsoft/HttpClient.java b/src/main/java/fr/litarvan/openauth/microsoft/HttpClient.java new file mode 100644 index 00000000..e92aceec --- /dev/null +++ b/src/main/java/fr/litarvan/openauth/microsoft/HttpClient.java @@ -0,0 +1,166 @@ +/* + * Copyright 2015-2021 Adrien 'Litarvan' Navratil + * + * This file is part of OpenAuth. + + * OpenAuth is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAuth is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with OpenAuth. If not, see . + */ +package fr.litarvan.openauth.microsoft; + +import com.google.gson.Gson; + + +import javax.net.ssl.HttpsURLConnection; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.UnsupportedEncodingException; +import java.net.*; +import java.nio.charset.StandardCharsets; +import java.util.Map; + + +public class HttpClient +{ + public static final String MIME_TYPE_JSON = "application/json"; + public static final String MIME_TYPE_URLENCODED_FORM = "application/x-www-form-urlencoded"; + + + private final Gson gson; + + public HttpClient() + { + this.gson = new Gson(); + } + + + public String getText(String url, Map params) throws MicrosoftAuthenticationException + { + return readResponse(createConnection(url + '?' + buildParams(params))); + } + + public T getJson(String url, String token, Class responseClass) throws MicrosoftAuthenticationException + { + HttpsURLConnection connection = createConnection(url); + connection.addRequestProperty("Authorization", "Bearer " + token); + connection.addRequestProperty("Accept", MIME_TYPE_JSON); + + return readJson(connection, responseClass); + } + + public HttpsURLConnection postForm(String url, Map params) throws MicrosoftAuthenticationException + { + return post(url, MIME_TYPE_URLENCODED_FORM, "*/*", buildParams(params)); + } + + public T postJson(String url, Object request, Class responseClass) throws MicrosoftAuthenticationException + { + HttpsURLConnection connection = post(url, MIME_TYPE_JSON, MIME_TYPE_JSON, gson.toJson(request)); + return readJson(connection, responseClass); + } + + public T postFormGetJson(String url, Map params, Class responseClass) throws MicrosoftAuthenticationException + { + return readJson(postForm(url, params), responseClass); + } + + + protected HttpsURLConnection post(String url, String contentType, String accept, String data) throws MicrosoftAuthenticationException + { + HttpsURLConnection connection = createConnection(url); + connection.setDoOutput(true); + connection.addRequestProperty("Content-Type", contentType); + connection.addRequestProperty("Accept", accept); + + try { + connection.setRequestMethod("POST"); + connection.getOutputStream().write(data.getBytes(StandardCharsets.UTF_8)); + } catch (IOException e) { + throw new MicrosoftAuthenticationException(e); + } + + return connection; + } + + protected T readJson(HttpsURLConnection connection, Class responseType) throws MicrosoftAuthenticationException + { + return gson.fromJson(readResponse(connection), responseType); + } + + protected String readResponse(HttpsURLConnection connection) throws MicrosoftAuthenticationException + { + String redirection = connection.getHeaderField("Location"); + if (redirection != null) { + return readResponse(createConnection(redirection)); + } + + StringBuilder response = new StringBuilder(); + try (BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream()))) { + String line; + while ((line = br.readLine()) != null) { + response.append(line).append('\n'); + } + } catch (IOException e) { + throw new MicrosoftAuthenticationException(e); + } + + return response.toString(); + } + + protected HttpsURLConnection followRedirects(HttpsURLConnection connection) throws MicrosoftAuthenticationException + { + String redirection = connection.getHeaderField("Location"); + if (redirection != null) { + connection = followRedirects(createConnection(redirection)); + } + + return connection; + } + + protected String buildParams(Map params) + { + StringBuilder query = new StringBuilder(); + params.forEach((key, value) -> { + if (query.length() > 0) { + query.append('&'); + } + + try { + query.append(key).append('=').append(URLEncoder.encode(value, "UTF-8")); + } catch (UnsupportedEncodingException ignored) { + // Can't happen + } + }); + + return query.toString(); + } + + protected HttpsURLConnection createConnection(String url) throws MicrosoftAuthenticationException + { + HttpsURLConnection connection; + try { + connection = (HttpsURLConnection) new URL(url).openConnection(); + } catch (IOException e) { + throw new MicrosoftAuthenticationException(e); + } + + String userAgent = "Mozilla/5.0 (XboxReplay; XboxLiveAuth/3.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"; + + connection.setRequestProperty("Accept-Language", "en-US"); + connection.setRequestProperty("Accept-Charset", "UTF-8"); + connection.setRequestProperty("User-Agent", userAgent); + + return connection; + } +} diff --git a/src/main/java/fr/litarvan/openauth/microsoft/MicrosoftAuthResult.java b/src/main/java/fr/litarvan/openauth/microsoft/MicrosoftAuthResult.java new file mode 100644 index 00000000..2ae5b70e --- /dev/null +++ b/src/main/java/fr/litarvan/openauth/microsoft/MicrosoftAuthResult.java @@ -0,0 +1,71 @@ +/* + * Copyright 2015-2021 Adrien 'Litarvan' Navratil + * + * This file is part of OpenAuth. + + * OpenAuth is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAuth is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with OpenAuth. If not, see . + */ +package fr.litarvan.openauth.microsoft; + +import fr.litarvan.openauth.microsoft.model.response.MinecraftProfile; + +/** + * Microsoft authentication result + * + *

+ * This class contains the result of a successful Microsoft authentication: a player profile and its tokens (both + * access and refresh token). + *

+ * + * @author Litarvan + * @version 1.1.0 + */ +public class MicrosoftAuthResult +{ + private final MinecraftProfile profile; + private final String accessToken; + private final String refreshToken; + + public MicrosoftAuthResult(MinecraftProfile profile, String accessToken, String refreshToken) + { + this.profile = profile; + this.accessToken = accessToken; + this.refreshToken = refreshToken; + } + + /** + * @return The player Minecraft profile (contains its UUID and username) + */ + public MinecraftProfile getProfile() + { + return profile; + } + + /** + * @return The Minecraft access token + */ + public String getAccessToken() + { + return accessToken; + } + + /** + * @return The Microsoft refresh token that can be used to log the user back silently using + * {@link MicrosoftAuthenticator#loginWithRefreshToken(String)} + */ + public String getRefreshToken() + { + return refreshToken; + } +} diff --git a/src/main/java/fr/litarvan/openauth/microsoft/MicrosoftAuthenticationException.java b/src/main/java/fr/litarvan/openauth/microsoft/MicrosoftAuthenticationException.java new file mode 100644 index 00000000..f91c7ab8 --- /dev/null +++ b/src/main/java/fr/litarvan/openauth/microsoft/MicrosoftAuthenticationException.java @@ -0,0 +1,39 @@ +/* + * Copyright 2015-2021 Adrien 'Litarvan' Navratil + * + * This file is part of OpenAuth. + + * OpenAuth is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAuth is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with OpenAuth. If not, see . + */ +package fr.litarvan.openauth.microsoft; + +import java.io.IOException; + +public class MicrosoftAuthenticationException extends Exception +{ + public MicrosoftAuthenticationException(String message) + { + super(message); + } + + public MicrosoftAuthenticationException(IOException cause) + { + super("I/O exception thrown during Microsoft HTTP requests", cause); + } + + public MicrosoftAuthenticationException(Throwable cause) + { + super(cause); + } +} diff --git a/src/main/java/fr/litarvan/openauth/microsoft/MicrosoftAuthenticator.java b/src/main/java/fr/litarvan/openauth/microsoft/MicrosoftAuthenticator.java new file mode 100644 index 00000000..78f70d72 --- /dev/null +++ b/src/main/java/fr/litarvan/openauth/microsoft/MicrosoftAuthenticator.java @@ -0,0 +1,333 @@ +/* + * Copyright 2015-2021 Adrien 'Litarvan' Navratil + * + * This file is part of OpenAuth. + + * OpenAuth is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAuth is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with OpenAuth. If not, see . + */ +package fr.litarvan.openauth.microsoft; + +/* + * Ported from the amazing work of Alexis Bize on @xboxreplay/xboxlive-auth + * + * https://github.com/Alexis-Bize + * https://github.com/XboxReplay/xboxlive-auth + */ + +import fr.litarvan.openauth.microsoft.model.request.MinecraftLoginRequest; +import fr.litarvan.openauth.microsoft.model.request.XSTSAuthorizationProperties; +import fr.litarvan.openauth.microsoft.model.request.XboxLiveLoginProperties; +import fr.litarvan.openauth.microsoft.model.request.XboxLoginRequest; +import fr.litarvan.openauth.microsoft.model.response.*; + +import javax.net.ssl.HttpsURLConnection; +import java.io.UnsupportedEncodingException; +import java.net.*; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.CompletionException; +import java.util.concurrent.ExecutionException; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * Microsoft authenticator + * + *

+ * This class can be used to authenticate a player using its Microsoft account. + * Use {@link #loginWithCredentials} to retrieve a player profile from his Microsoft credentials, + * or loginWithWebview to use a webview with Microsoft login form. + *

+ * + * @version 1.1.0 + * @author Litarvan + */ +public class MicrosoftAuthenticator +{ + public static final String MICROSOFT_AUTHORIZATION_ENDPOINT = "https://login.live.com/oauth20_authorize.srf"; + public static final String MICROSOFT_TOKEN_ENDPOINT = "https://login.live.com/oauth20_token.srf"; + public static final String MICROSOFT_REDIRECTION_ENDPOINT = "https://login.live.com/oauth20_desktop.srf"; + + public static final String XBOX_LIVE_AUTH_HOST = "user.auth.xboxlive.com"; + public static final String XBOX_LIVE_CLIENT_ID = "000000004C12AE6F"; + public static final String XBOX_LIVE_SERVICE_SCOPE = "service::user.auth.xboxlive.com::MBI_SSL"; + + public static final String XBOX_LIVE_AUTHORIZATION_ENDPOINT = "https://user.auth.xboxlive.com/user/authenticate"; + public static final String XSTS_AUTHORIZATION_ENDPOINT = "https://xsts.auth.xboxlive.com/xsts/authorize"; + public static final String MINECRAFT_AUTH_ENDPOINT = "https://api.minecraftservices.com/authentication/login_with_xbox"; + + public static final String XBOX_LIVE_AUTH_RELAY = "http://auth.xboxlive.com"; + public static final String MINECRAFT_AUTH_RELAY = "rp://api.minecraftservices.com/"; + + public static final String MINECRAFT_STORE_ENDPOINT = "https://api.minecraftservices.com/entitlements/mcstore"; + public static final String MINECRAFT_PROFILE_ENDPOINT = "https://api.minecraftservices.com/minecraft/profile"; + + public static final String MINECRAFT_STORE_IDENTIFIER = "game_minecraft"; + + + private final HttpClient http; + + public MicrosoftAuthenticator() + { + this.http = new HttpClient(); + } + + + /** + * Logs in a player using its Microsoft account credentials, and retrieve its Minecraft profile + * + * @param email Player Microsoft account e-mail + * @param password Player Microsoft account password + * + * @return The player Minecraft profile + * + * @throws MicrosoftAuthenticationException Thrown if one of the several HTTP requests failed at some point + */ + public MicrosoftAuthResult loginWithCredentials(String email, String password) throws MicrosoftAuthenticationException + { + CookieHandler currentHandler = CookieHandler.getDefault(); + CookieHandler.setDefault(new CookieManager(null, CookiePolicy.ACCEPT_ALL)); + + Map params = new HashMap<>(); + params.put("login", email); + params.put("loginfmt", email); + params.put("passwd", password); + + HttpsURLConnection result; + + try { + PreAuthData authData = preAuthRequest(); + params.put("PPFT", authData.getPPFT()); + + result = http.followRedirects(http.postForm(authData.getUrlPost(), params)); + } finally { + CookieHandler.setDefault(currentHandler); + } + + try { + return loginWithTokens(extractTokens(result.getURL().toString())); + } catch (MicrosoftAuthenticationException e) { + if (match("identity/confirm", http.readResponse(result)) != null) { + throw new MicrosoftAuthenticationException( + "User has enabled double-authentication or must allow sign-in on https://account.live.com/activity" + ); + } + + throw e; + } + } + +// /** +// * Logs in a player using a webview to display Microsoft login page. +// * This function blocks the current thread until the process is finished; this can cause your application to +// * freeze. When calling from the JavaFX thread or any thread which must not be blocked, use +// * {@link #loginWithAsyncWebview()} +// * +// * @return The player Minecraft profile +// * +// * @throws MicrosoftAuthenticationException Thrown if one of the several HTTP requests failed at some point +// */ +// public MicrosoftAuthResult loginWithWebview() throws MicrosoftAuthenticationException +// { +// try { +// return loginWithAsyncWebview().get(); +// } catch (InterruptedException | ExecutionException e) { +// throw new MicrosoftAuthenticationException(e); +// } +// } + +// /** +// * Logs in a player using a webview to display Microsoft login page. This function does not block the current thread. +// * +// * @return A future resolved by the player Minecraft profile +// */ +// public CompletableFuture loginWithAsyncWebview() +// { +// String url = String.format("%s?%s", MICROSOFT_AUTHORIZATION_ENDPOINT, http.buildParams(getLoginParams())); +// LoginFrame frame = new LoginFrame(); +// +// return frame.start(url).thenApplyAsync(result -> { +// try { +// return loginWithTokens(extractTokens(result)); +// } catch (MicrosoftAuthenticationException e) { +// throw new CompletionException(e); +// } +// }); +// } + + /*public MicrosoftAuthResult loginWithWebview() throws MicrosoftAuthenticationException + { + try { + return loginWithAsyncWebview().get(); + } catch (InterruptedException | ExecutionException e) { + throw new MicrosoftAuthenticationException(e); + } + }*/ + + /*public CompletableFuture loginWithAsyncWebview() + { + String url = String.format("%s?%s", MICROSOFT_AUTHORIZATION_ENDPOINT, http.buildParams(getLoginParams())); + LoginFrame frame = new LoginFrame(); + return frame.start(url).thenApplyAsync(result -> { + try { + return loginWithTokens(extractTokens(result)); + } catch (MicrosoftAuthenticationException e) { + throw new CompletionException(e); + } + }); + }*/ + + /** + * Logs in a player using a Microsoft account refresh token retrieved earlier. + * + * @param refreshToken Player Microsoft account refresh token + * + * @return The player Minecraft profile + * + * @throws MicrosoftAuthenticationException Thrown if one of the several HTTP requests failed at some point + */ + public MicrosoftAuthResult loginWithRefreshToken(String refreshToken) throws MicrosoftAuthenticationException + { + Map params = getLoginParams(); + params.put("refresh_token", refreshToken); + params.put("grant_type", "refresh_token"); + + MicrosoftRefreshResponse response = http.postFormGetJson( + MICROSOFT_TOKEN_ENDPOINT, + params, MicrosoftRefreshResponse.class + ); + + return loginWithTokens(new AuthTokens(response.getAccessToken() , response.getRefreshToken())); + } + + /** + * Logs in a player using a Microsoft account tokens retrieved earlier. + * If the token was retrieved using Azure AAD/MSAL, it should be prefixed with d= + * + * @param tokens Player Microsoft account tokens pair + * + * @return The player Minecraft profile + * + * @throws MicrosoftAuthenticationException Thrown if one of the several HTTP requests failed at some point + */ + public MicrosoftAuthResult loginWithTokens(AuthTokens tokens) throws MicrosoftAuthenticationException + { + XboxLoginResponse xboxLiveResponse = xboxLiveLogin(tokens.getAccessToken()); + XboxLoginResponse xstsResponse = xstsLogin(xboxLiveResponse.getToken()); + + String userHash = xstsResponse.getDisplayClaims().getUsers()[0].getUserHash(); + MinecraftLoginResponse minecraftResponse = minecraftLogin(userHash, xstsResponse.getToken()); + MinecraftStoreResponse storeResponse = http.getJson( + MINECRAFT_STORE_ENDPOINT, + minecraftResponse.getAccessToken(), + MinecraftStoreResponse.class + ); + + if (Arrays.stream(storeResponse.getItems()).noneMatch(item -> item.getName().equals(MINECRAFT_STORE_IDENTIFIER))) { + throw new MicrosoftAuthenticationException("Player didn't buy Minecraft Java Edition or did not migrate its account"); + } + + MinecraftProfile profile = http.getJson( + MINECRAFT_PROFILE_ENDPOINT, + minecraftResponse.getAccessToken(), + MinecraftProfile.class + ); + + return new MicrosoftAuthResult(profile, minecraftResponse.getAccessToken(), tokens.getRefreshToken()); + } + + + protected PreAuthData preAuthRequest() throws MicrosoftAuthenticationException + { + Map params = getLoginParams(); + params.put("display", "touch"); + params.put("locale", "en"); + + String result = http.getText(MICROSOFT_AUTHORIZATION_ENDPOINT, params); + + String ppft = match("sFTTag:'.*value=\"([^\"]*)\"", result); + String urlPost = match("urlPost: ?'(.+?(?='))", result); + + return new PreAuthData(ppft, urlPost); + } + + protected XboxLoginResponse xboxLiveLogin(String accessToken) throws MicrosoftAuthenticationException + { + XboxLiveLoginProperties properties = new XboxLiveLoginProperties("RPS", XBOX_LIVE_AUTH_HOST, accessToken); + XboxLoginRequest request = new XboxLoginRequest<>( + properties, XBOX_LIVE_AUTH_RELAY, "JWT" + ); + + return http.postJson(XBOX_LIVE_AUTHORIZATION_ENDPOINT, request, XboxLoginResponse.class); + } + + protected XboxLoginResponse xstsLogin(String xboxLiveToken) throws MicrosoftAuthenticationException + { + XSTSAuthorizationProperties properties = new XSTSAuthorizationProperties("RETAIL", new String[] { xboxLiveToken }); + XboxLoginRequest request = new XboxLoginRequest<>( + properties, MINECRAFT_AUTH_RELAY, "JWT" + ); + + return http.postJson(XSTS_AUTHORIZATION_ENDPOINT, request, XboxLoginResponse.class); + } + + protected MinecraftLoginResponse minecraftLogin(String userHash, String xstsToken) throws MicrosoftAuthenticationException + { + MinecraftLoginRequest request = new MinecraftLoginRequest(String.format("XBL3.0 x=%s;%s", userHash, xstsToken)); + return http.postJson(MINECRAFT_AUTH_ENDPOINT, request, MinecraftLoginResponse.class); + } + + + protected Map getLoginParams() + { + Map params = new HashMap<>(); + params.put("client_id", XBOX_LIVE_CLIENT_ID); + params.put("redirect_uri", MICROSOFT_REDIRECTION_ENDPOINT); + params.put("scope", XBOX_LIVE_SERVICE_SCOPE); + params.put("response_type", "token"); + + return params; + } + + protected AuthTokens extractTokens(String url) throws MicrosoftAuthenticationException + { + return new AuthTokens(extractValue(url, "access_token"), extractValue(url, "refresh_token")); + } + + protected String extractValue(String url, String key) throws MicrosoftAuthenticationException + { + String matched = match(key + "=([^&]*)", url); + if (matched == null) { + throw new MicrosoftAuthenticationException("Invalid credentials or tokens"); + } + + try { + return URLDecoder.decode(matched, "UTF-8"); + } catch (UnsupportedEncodingException e) { + throw new MicrosoftAuthenticationException(e); + } + } + + protected String match(String regex, String content) + { + Matcher matcher = Pattern.compile(regex).matcher(content); + if (!matcher.find()) { + return null; + } + + return matcher.group(1); + } +} diff --git a/src/main/java/fr/litarvan/openauth/microsoft/MicrosoftPatchedHttpURLConnection.java b/src/main/java/fr/litarvan/openauth/microsoft/MicrosoftPatchedHttpURLConnection.java new file mode 100644 index 00000000..42d07e97 --- /dev/null +++ b/src/main/java/fr/litarvan/openauth/microsoft/MicrosoftPatchedHttpURLConnection.java @@ -0,0 +1,150 @@ +package fr.litarvan.openauth.microsoft; + +/* + * Thanks a lot to Mickaƫl Guessant for this trick + * + * https://github.com/mguessan + * https://github.com/mguessan/davmail/blob/master/src/java/davmail/exchange/auth/O365InteractiveAuthenticatorFrame.java + */ + +import java.io.*; +import java.net.*; +import java.nio.charset.StandardCharsets; +import java.util.List; +import java.util.Map; + +/** + * HttpURLConnection Microsoft-patched wrapped + * + *

+ * This class serves as HttpURLConnection, but actually wraps a real one and + * patch its input to disable Microsoft meta integrity check, which can fail + * on Java >=11 on non-macOS platforms. + *

+ * + * @version 1.1.1 + * @author Litarvan + */ +public class MicrosoftPatchedHttpURLConnection extends HttpURLConnection +{ + private final HttpURLConnection inner; + + public MicrosoftPatchedHttpURLConnection(URL url, HttpURLConnection inner) + { + super(url); + + this.inner = inner; + } + + @Override + public void setRequestMethod(String method) throws ProtocolException + { + this.inner.setRequestMethod(method); + } + + @Override + public void setInstanceFollowRedirects(boolean followRedirects) + { + this.inner.setInstanceFollowRedirects(followRedirects); + } + + @Override + public boolean getInstanceFollowRedirects() + { + return this.inner.getInstanceFollowRedirects(); + } + + @Override + public String getRequestMethod() + { + return this.inner.getRequestMethod(); + } + + @Override + public int getResponseCode() throws IOException + { + return this.inner.getResponseCode(); + } + + @Override + public String getResponseMessage() throws IOException + { + return this.inner.getResponseMessage(); + } + + @Override + public Map> getHeaderFields() + { + return this.inner.getHeaderFields(); + } + + @Override + public String getHeaderField(String name) + { + return this.inner.getHeaderField(name); + } + + @Override + public String getHeaderField(int n) + { + return this.inner.getHeaderField(n); + } + + @Override + public void disconnect() + { + this.inner.disconnect(); + } + + @Override + public void setDoOutput(boolean dooutput) + { + this.inner.setDoOutput(dooutput); + } + + @Override + public boolean usingProxy() + { + return this.inner.usingProxy(); + } + + @Override + public void connect() throws IOException + { + this.inner.connect(); + } + + @Override + public InputStream getInputStream() throws IOException + { + ByteArrayOutputStream buffer = new ByteArrayOutputStream(); + try (InputStream in = this.inner.getInputStream()) { + int n; + byte[] data = new byte[8192]; + + while ((n = in.read(data, 0, data.length)) != -1) { + buffer.write(data, 0, n); + } + } + + byte[] patched = buffer + .toString("UTF-8") + .replaceAll("integrity ?=", "integrity.disabled=") + .replaceAll("setAttribute\\(\"integrity\"", "setAttribute(\"integrity.disabled\"") + .getBytes(StandardCharsets.UTF_8); + + return new ByteArrayInputStream(patched); + } + + @Override + public OutputStream getOutputStream() throws IOException + { + return this.inner.getOutputStream(); + } + + @Override + public InputStream getErrorStream() + { + return this.inner.getErrorStream(); + } +} diff --git a/src/main/java/fr/litarvan/openauth/microsoft/PreAuthData.java b/src/main/java/fr/litarvan/openauth/microsoft/PreAuthData.java new file mode 100644 index 00000000..ffcf2e45 --- /dev/null +++ b/src/main/java/fr/litarvan/openauth/microsoft/PreAuthData.java @@ -0,0 +1,41 @@ +/* + * Copyright 2015-2021 Adrien 'Litarvan' Navratil + * + * This file is part of OpenAuth. + + * OpenAuth is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAuth is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with OpenAuth. If not, see . + */ +package fr.litarvan.openauth.microsoft; + +public class PreAuthData +{ + private final String ppft; + private final String urlPost; + + public PreAuthData(String ppft, String urlPost) + { + this.ppft = ppft; + this.urlPost = urlPost; + } + + public String getPPFT() + { + return ppft; + } + + public String getUrlPost() + { + return urlPost; + } +} diff --git a/src/main/java/fr/litarvan/openauth/microsoft/model/request/MinecraftLoginRequest.java b/src/main/java/fr/litarvan/openauth/microsoft/model/request/MinecraftLoginRequest.java new file mode 100644 index 00000000..fa708fff --- /dev/null +++ b/src/main/java/fr/litarvan/openauth/microsoft/model/request/MinecraftLoginRequest.java @@ -0,0 +1,34 @@ +/* + * Copyright 2015-2021 Adrien 'Litarvan' Navratil + * + * This file is part of OpenAuth. + + * OpenAuth is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAuth is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with OpenAuth. If not, see . + */ +package fr.litarvan.openauth.microsoft.model.request; + +public class MinecraftLoginRequest +{ + private final String identityToken; + + public MinecraftLoginRequest(String identityToken) + { + this.identityToken = identityToken; + } + + public String getIdentityToken() + { + return identityToken; + } +} diff --git a/src/main/java/fr/litarvan/openauth/microsoft/model/request/XSTSAuthorizationProperties.java b/src/main/java/fr/litarvan/openauth/microsoft/model/request/XSTSAuthorizationProperties.java new file mode 100644 index 00000000..7e439494 --- /dev/null +++ b/src/main/java/fr/litarvan/openauth/microsoft/model/request/XSTSAuthorizationProperties.java @@ -0,0 +1,41 @@ +/* + * Copyright 2015-2021 Adrien 'Litarvan' Navratil + * + * This file is part of OpenAuth. + + * OpenAuth is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAuth is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with OpenAuth. If not, see . + */ +package fr.litarvan.openauth.microsoft.model.request; + +public class XSTSAuthorizationProperties +{ + private final String SandboxId; + private final String[] UserTokens; + + public XSTSAuthorizationProperties(String SandboxId, String[] UserTokens) + { + this.SandboxId = SandboxId; + this.UserTokens = UserTokens; + } + + public String getSandboxId() + { + return SandboxId; + } + + public String[] getUserTokens() + { + return UserTokens; + } +} diff --git a/src/main/java/fr/litarvan/openauth/microsoft/model/request/XboxLiveLoginProperties.java b/src/main/java/fr/litarvan/openauth/microsoft/model/request/XboxLiveLoginProperties.java new file mode 100644 index 00000000..b8f8dc61 --- /dev/null +++ b/src/main/java/fr/litarvan/openauth/microsoft/model/request/XboxLiveLoginProperties.java @@ -0,0 +1,48 @@ +/* + * Copyright 2015-2021 Adrien 'Litarvan' Navratil + * + * This file is part of OpenAuth. + + * OpenAuth is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAuth is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with OpenAuth. If not, see . + */ +package fr.litarvan.openauth.microsoft.model.request; + +public class XboxLiveLoginProperties +{ + private final String AuthMethod; + private final String SiteName; + private final String RpsTicket; + + public XboxLiveLoginProperties(String AuthMethod, String SiteName, String RpsTicket) + { + this.AuthMethod = AuthMethod; + this.SiteName = SiteName; + this.RpsTicket = RpsTicket; + } + + public String getAuthMethod() + { + return AuthMethod; + } + + public String getSiteName() + { + return SiteName; + } + + public String getRpsTicket() + { + return RpsTicket; + } +} diff --git a/src/main/java/fr/litarvan/openauth/microsoft/model/request/XboxLoginRequest.java b/src/main/java/fr/litarvan/openauth/microsoft/model/request/XboxLoginRequest.java new file mode 100644 index 00000000..7948f38d --- /dev/null +++ b/src/main/java/fr/litarvan/openauth/microsoft/model/request/XboxLoginRequest.java @@ -0,0 +1,48 @@ +/* + * Copyright 2015-2021 Adrien 'Litarvan' Navratil + * + * This file is part of OpenAuth. + + * OpenAuth is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAuth is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with OpenAuth. If not, see . + */ +package fr.litarvan.openauth.microsoft.model.request; + +public class XboxLoginRequest +{ + private final T Properties; + private final String RelyingParty; + private final String TokenType; + + public XboxLoginRequest(T Properties, String RelyingParty, String TokenType) + { + this.Properties = Properties; + this.RelyingParty = RelyingParty; + this.TokenType = TokenType; + } + + public T getProperties() + { + return Properties; + } + + public String getSiteName() + { + return RelyingParty; + } + + public String getTokenType() + { + return TokenType; + } +} diff --git a/src/main/java/fr/litarvan/openauth/microsoft/model/response/MicrosoftRefreshResponse.java b/src/main/java/fr/litarvan/openauth/microsoft/model/response/MicrosoftRefreshResponse.java new file mode 100644 index 00000000..c1a126a0 --- /dev/null +++ b/src/main/java/fr/litarvan/openauth/microsoft/model/response/MicrosoftRefreshResponse.java @@ -0,0 +1,69 @@ +/* + * Copyright 2015-2021 Adrien 'Litarvan' Navratil + * + * This file is part of OpenAuth. + + * OpenAuth is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAuth is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with OpenAuth. If not, see . + */ +package fr.litarvan.openauth.microsoft.model.response; + +public class MicrosoftRefreshResponse +{ + private final String token_type; + private final long expires_in; + private final String scope; + private final String access_token; + private final String refresh_token; + private final String user_id; + + public MicrosoftRefreshResponse(String token_type, long expires_in, String scope, String access_token, String refresh_token, String user_id) + { + this.token_type = token_type; + this.expires_in = expires_in; + this.scope = scope; + this.access_token = access_token; + this.refresh_token = refresh_token; + this.user_id = user_id; + } + + public String getTokenType() + { + return token_type; + } + + public long getExpiresIn() + { + return expires_in; + } + + public String getScope() + { + return scope; + } + + public String getAccessToken() + { + return access_token; + } + + public String getRefreshToken() + { + return refresh_token; + } + + public String getUserId() + { + return user_id; + } +} diff --git a/src/main/java/fr/litarvan/openauth/microsoft/model/response/MinecraftLoginResponse.java b/src/main/java/fr/litarvan/openauth/microsoft/model/response/MinecraftLoginResponse.java new file mode 100644 index 00000000..dee3cb93 --- /dev/null +++ b/src/main/java/fr/litarvan/openauth/microsoft/model/response/MinecraftLoginResponse.java @@ -0,0 +1,55 @@ +/* + * Copyright 2015-2021 Adrien 'Litarvan' Navratil + * + * This file is part of OpenAuth. + + * OpenAuth is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAuth is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with OpenAuth. If not, see . + */ +package fr.litarvan.openauth.microsoft.model.response; + +public class MinecraftLoginResponse +{ + private final String username; + private final String access_token; + private final String token_type; + private final long expires_in; + + public MinecraftLoginResponse(String username, String access_token, String token_type, long expires_in) + { + this.username = username; + this.access_token = access_token; + this.token_type = token_type; + this.expires_in = expires_in; + } + + public String getUsername() + { + return username; + } + + public String getAccessToken() + { + return access_token; + } + + public String getTokenType() + { + return token_type; + } + + public long getExpiresIn() + { + return expires_in; + } +} diff --git a/src/main/java/fr/litarvan/openauth/microsoft/model/response/MinecraftProfile.java b/src/main/java/fr/litarvan/openauth/microsoft/model/response/MinecraftProfile.java new file mode 100644 index 00000000..38d6e2c7 --- /dev/null +++ b/src/main/java/fr/litarvan/openauth/microsoft/model/response/MinecraftProfile.java @@ -0,0 +1,107 @@ +/* + * Copyright 2015-2021 Adrien 'Litarvan' Navratil + * + * This file is part of OpenAuth. + + * OpenAuth is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAuth is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with OpenAuth. If not, see . + */ +package fr.litarvan.openauth.microsoft.model.response; + +/** + * Minecraft player profile + * + *

+ * Represents a Minecraft player profile data. UUID is {@link #id} and username is {@link #name}. + *

+ * + * @version 1.1.0 + * @author Litarvan + */ +public class MinecraftProfile +{ + private final String id; + private final String name; + private final MinecraftSkin[] skins; + + public MinecraftProfile(String id, String name, MinecraftSkin[] skins) + { + this.id = id; + this.name = name; + this.skins = skins; + } + + /** + * @return The player Minecraft UUID + */ + public String getId() + { + return id; + } + + /** + * @return The player Minecraft username + */ + public String getName() + { + return name; + } + + public MinecraftSkin[] getSkins() + { + return skins; + } + + public static class MinecraftSkin + { + private final String id; + private final String state; + private final String url; + private final String variant; + private final String alias; + + public MinecraftSkin(String id, String state, String url, String variant, String alias) + { + this.id = id; + this.state = state; + this.url = url; + this.variant = variant; + this.alias = alias; + } + + public String getId() + { + return id; + } + + public String getState() + { + return state; + } + + public String getUrl() + { + return url; + } + + public String getVariant() + { + return variant; + } + + public String getAlias() + { + return alias; + } + } +} diff --git a/src/main/java/fr/litarvan/openauth/microsoft/model/response/MinecraftStoreResponse.java b/src/main/java/fr/litarvan/openauth/microsoft/model/response/MinecraftStoreResponse.java new file mode 100644 index 00000000..00f7bf2d --- /dev/null +++ b/src/main/java/fr/litarvan/openauth/microsoft/model/response/MinecraftStoreResponse.java @@ -0,0 +1,70 @@ +/* + * Copyright 2015-2021 Adrien 'Litarvan' Navratil + * + * This file is part of OpenAuth. + + * OpenAuth is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAuth is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with OpenAuth. If not, see . + */ +package fr.litarvan.openauth.microsoft.model.response; + +public class MinecraftStoreResponse +{ + private final StoreProduct[] items; + private final String signature; + private final String keyId; + + public MinecraftStoreResponse(StoreProduct[] items, String signature, String keyId) + { + this.items = items; + this.signature = signature; + this.keyId = keyId; + } + + public StoreProduct[] getItems() + { + return items; + } + + public String getSignature() + { + return signature; + } + + public String getKeyId() + { + return keyId; + } + + public static class StoreProduct + { + private final String name; + private final String signature; + + public StoreProduct(String name, String signature) + { + this.name = name; + this.signature = signature; + } + + public String getName() + { + return name; + } + + public String getSignature() + { + return signature; + } + } +} diff --git a/src/main/java/fr/litarvan/openauth/microsoft/model/response/XboxLoginResponse.java b/src/main/java/fr/litarvan/openauth/microsoft/model/response/XboxLoginResponse.java new file mode 100644 index 00000000..f9c35c4a --- /dev/null +++ b/src/main/java/fr/litarvan/openauth/microsoft/model/response/XboxLoginResponse.java @@ -0,0 +1,85 @@ +/* + * Copyright 2015-2021 Adrien 'Litarvan' Navratil + * + * This file is part of OpenAuth. + + * OpenAuth is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAuth is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with OpenAuth. If not, see . + */ +package fr.litarvan.openauth.microsoft.model.response; + +public class XboxLoginResponse +{ + private final String IssueInstant; + private final String NotAfter; + private final String Token; + private final XboxLiveLoginResponseClaims DisplayClaims; + + public XboxLoginResponse(String IssueInstant, String NotAfter, String Token, XboxLiveLoginResponseClaims DisplayClaims) + { + this.IssueInstant = IssueInstant; + this.NotAfter = NotAfter; + this.Token = Token; + this.DisplayClaims = DisplayClaims; + } + + public String getIssueInstant() + { + return IssueInstant; + } + + public String getNotAfter() + { + return NotAfter; + } + + public String getToken() + { + return Token; + } + + public XboxLiveLoginResponseClaims getDisplayClaims() + { + return DisplayClaims; + } + + public static class XboxLiveLoginResponseClaims + { + private final XboxLiveUserInfo[] xui; + + public XboxLiveLoginResponseClaims(XboxLiveUserInfo[] xui) + { + this.xui = xui; + } + + public XboxLiveUserInfo[] getUsers() + { + return xui; + } + } + + public static class XboxLiveUserInfo + { + private final String uhs; + + public XboxLiveUserInfo(String uhs) + { + this.uhs = uhs; + } + + public String getUserHash() + { + return uhs; + } + } +} diff --git a/src/main/java/fr/litarvan/openauth/model/AuthAgent.java b/src/main/java/fr/litarvan/openauth/model/AuthAgent.java new file mode 100644 index 00000000..2e0b1db5 --- /dev/null +++ b/src/main/java/fr/litarvan/openauth/model/AuthAgent.java @@ -0,0 +1,100 @@ +/* + * Copyright 2015 TheShark34 + * + * This file is part of OpenAuth. + + * OpenAuth is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAuth is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with OpenAuth. If not, see . + */ +package fr.litarvan.openauth.model; + +/** + * JSON model of an auth agent + * + * @version 1.0.4 + * @author Litarvan + */ +public class AuthAgent { + + /** + * The Minecraft auth agent + */ + public static final AuthAgent MINECRAFT = new AuthAgent("Minecraft", 1); + + /** + * The Scroll auth agent + */ + public static final AuthAgent SCROLLS = new AuthAgent("Scrolls", 1); + + /** + * The agent name + */ + private String name; + + /** + * The agent version + */ + private int version; + + /** + * Agent constructor + * + * @param name + * The name of the agent + * @param version + * The version of the agent (1 by default) + */ + public AuthAgent(String name, int version) { + this.name = name; + this.version = version; + } + + /** + * Sets a new name + * + * @param name + * The new name + */ + public void setName(String name) { + this.name = name; + } + + /** + * Returns the name of the agent + * + * @return The agent name + */ + public String getName() { + return this.name; + } + + /** + * Sets a new version + * + * @param version + * The new version + */ + public void setVersion(int version) { + this.version = version; + } + + /** + * Returns the version of the agent + * + * @return The agent version + */ + public int getVersion() { + return this.version; + } + +} diff --git a/src/main/java/fr/litarvan/openauth/model/AuthError.java b/src/main/java/fr/litarvan/openauth/model/AuthError.java new file mode 100644 index 00000000..9c597aaa --- /dev/null +++ b/src/main/java/fr/litarvan/openauth/model/AuthError.java @@ -0,0 +1,87 @@ +/* + * Copyright 2015 TheShark34 + * + * This file is part of OpenAuth. + + * OpenAuth is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAuth is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with OpenAuth. If not, see . + */ +package fr.litarvan.openauth.model; + +/** + * JSON model of an error + * + * @version 1.0.4 + * @author Litarvan + */ +public class AuthError { + + /** + * Short description of the error + */ + private String error; + + /** + * Longer description wich can be shown to the user + */ + private String errorMessage; + + /** + * Cause of the error (optional) + */ + private String cause; + + /** + * Auth Error constructor + * + * @param error + * Short description of the error + * @param errorMessage + * Longer description wich can be shown to the user + * @param cause + * Cause of the error + */ + public AuthError(String error, String errorMessage, String cause) { + this.error = error; + this.errorMessage = errorMessage; + this.cause = cause; + } + + /** + * Returns the error (Short description of the error) + * + * @return The error + */ + public String getError() { + return error; + } + + /** + * Returns the error message (Longer description of the error) + * + * @return The error message + */ + public String getErrorMessage() { + return this.errorMessage; + } + + /** + * Returns the cause of the error + * + * @return The cause + */ + public String getCause() { + return cause; + } + +} diff --git a/src/main/java/fr/litarvan/openauth/model/AuthProfile.java b/src/main/java/fr/litarvan/openauth/model/AuthProfile.java new file mode 100644 index 00000000..d70c0616 --- /dev/null +++ b/src/main/java/fr/litarvan/openauth/model/AuthProfile.java @@ -0,0 +1,78 @@ +/* + * Copyright 2015 TheShark34 + * + * This file is part of OpenAuth. + + * OpenAuth is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAuth is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with OpenAuth. If not, see . + */ +package fr.litarvan.openauth.model; + +/** + * JSON model of a profile + * + * @version 1.0.4 + * @author Litarvan + */ +public class AuthProfile { + + /** + * The profile name + */ + private String name; + + /** + * The profile UUID + */ + private String id; + + /** + * Blank auth profile + */ + public AuthProfile() { + this.name = ""; + this.id = ""; + } + + /** + * Normal auth profile + * + * @param name + * The profile name + * @param id + * The profile UUID + */ + public AuthProfile(String name, String id) { + this.name = name; + this.id = id; + } + + /** + * Returns the name of the profile + * + * @return The profile name + */ + public String getName() { + return this.name; + } + + /** + * Returns the profile UUID + * + * @return The profile UUID + */ + public String getId() { + return this.id; + } + +} diff --git a/src/main/java/fr/litarvan/openauth/model/request/AuthRequest.java b/src/main/java/fr/litarvan/openauth/model/request/AuthRequest.java new file mode 100644 index 00000000..bda92ed6 --- /dev/null +++ b/src/main/java/fr/litarvan/openauth/model/request/AuthRequest.java @@ -0,0 +1,146 @@ +/* + * Copyright 2015 TheShark34 + * + * This file is part of OpenAuth. + + * OpenAuth is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAuth is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with OpenAuth. If not, see . + */ +package fr.litarvan.openauth.model.request; + +import fr.litarvan.openauth.model.AuthAgent; + +/** + * JSON Model of an authentication request + * + * @version 1.0.4 + * @author Litarvan + */ +public class AuthRequest { + + /** + * The authentication agent (Optional, the game profile you want to use, Minecraft, Scrolls, etc...) + */ + private AuthAgent agent; + + /** + * The username (The username of the player you want to authenticate) + */ + private String username; + + /** + * The password (The password of the player you want to authenticate) + */ + private String password; + + /** + * The client token (Optional, it's like a password for the access token) + */ + private String clientToken; + + /** + * Authentication Request + * + * @param agent + * The authentication agent (Optional, the game you want to use, Minecraft, Scrolls, etc...) + * @param username + * The username (The username of the player you want to authenticate) + * @param password + * The password (The password of the player you want to authenticate) + * @param clientToken + * The client token (Optional, It's like a password for the access token) + */ + public AuthRequest(AuthAgent agent, String username, String password, String clientToken) { + this.agent = agent; + this.username = username; + this.password = password; + this.clientToken = clientToken; + } + + /** + * Sets a new authentication agent (Optional, the game you want to use, Minecraft, Scrolls, etc...) + * + * @param agent + * The new agent + */ + public void setAgent(AuthAgent agent) { + this.agent = agent; + } + + /** + * Returns the authentication agent (Given with the constructor or the setter) + * + * @return The given auth agent + */ + public AuthAgent getAgent() { + return this.agent; + } + + /** + * Sets a new username (The username of the player you want to authenticate) + * + * @param username + * The new username + */ + public void setUsername(String username) { + this.username = username; + } + + /** + * Returns the username (Given with the constructor or the setter) + * + * @return The given username + */ + public String getUsername() { + return this.username; + } + + /** + * Sets a new password (The password of the player you want to authenticate) + * + * @param password + * The new password + */ + public void setPassword(String password) { + this.password = password; + } + + /** + * Returns the password (Given with the constructor or the setter) + * + * @return The given password + */ + public String getPassword() { + return this.password; + } + + /** + * Sets a new client token (It's like a password for the access token) + * + * @param clientToken + * The new client token + */ + public void setClientToken(String clientToken) { + this.clientToken = clientToken; + } + + /** + * Returns the client token (Given with the constructor or the setter) + * + * @return The given client token + */ + public String getClientToken() { + return clientToken; + } + +} diff --git a/src/main/java/fr/litarvan/openauth/model/request/InvalidateRequest.java b/src/main/java/fr/litarvan/openauth/model/request/InvalidateRequest.java new file mode 100644 index 00000000..5689627d --- /dev/null +++ b/src/main/java/fr/litarvan/openauth/model/request/InvalidateRequest.java @@ -0,0 +1,90 @@ +/* + * Copyright 2015 TheShark34 + * + * This file is part of OpenAuth. + + * OpenAuth is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAuth is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with OpenAuth. If not, see . + */ +package fr.litarvan.openauth.model.request; + +/** + * JSON Model of an invalidate request + * + * @version 1.0.4 + * @author Litarvan + */ +public class InvalidateRequest { + + /** + * The access token you want to invalidate + */ + private String accessToken; + + /** + * The client token associated with the access token + */ + private String clientToken; + + /** + * Invalidate Request constructor + * + * @param accessToken + * The access token you want to invalidate + * @param clientToken + * The client token associated with the access token + */ + public InvalidateRequest(String accessToken, String clientToken) { + this.accessToken = accessToken; + this.clientToken = clientToken; + } + + /** + * Sets a new access token (That you want to invalidate) + * + * @param accessToken + * The new access token + */ + public void setAccessToken(String accessToken) { + this.accessToken = accessToken; + } + + /** + * Returns the access token (Given by the constructor or the setter) + * + * @return The given access token + */ + public String getAccessToken() { + return this.accessToken; + } + + /** + * Sets a new client token (Need to be associated with the access token) + * + * @param clientToken + * The new client token + */ + public void setClientToken(String clientToken) { + this.clientToken = clientToken; + } + + /** + * Returns the client token (Given by the constructor or the setter) + * + * @return The given client token + */ + public String getClientToken() { + return clientToken; + } + +} diff --git a/src/main/java/fr/litarvan/openauth/model/request/RefreshRequest.java b/src/main/java/fr/litarvan/openauth/model/request/RefreshRequest.java new file mode 100644 index 00000000..a6833790 --- /dev/null +++ b/src/main/java/fr/litarvan/openauth/model/request/RefreshRequest.java @@ -0,0 +1,90 @@ +/* + * Copyright 2015 TheShark34 + * + * This file is part of OpenAuth. + + * OpenAuth is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAuth is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with OpenAuth. If not, see . + */ +package fr.litarvan.openauth.model.request; + +/** + * JSON model of a refresh request + * + * @version 1.0.4 + * @author Litarvan + */ +public class RefreshRequest { + + /** + * The saved access token that you want to refresh + */ + private String accessToken; + + /** + * The saved client token associated with the access token + */ + private String clientToken; + + /** + * Refresh Request constructor + * + * @param accessToken + * The saved access token that you want to refresh + * @param clientToken + * The saved client token associated with the access token + */ + public RefreshRequest(String accessToken, String clientToken) { + this.accessToken = accessToken; + this.clientToken = clientToken; + } + + /** + * Sets a new access token (That you want to refresh) + * + * @param accessToken + * The new access token + */ + public void setAccessToken(String accessToken) { + this.accessToken = accessToken; + } + + /** + * Returns the access token (Given by the constructor or the setter) + * + * @return The given access token + */ + public String getAccessToken() { + return this.accessToken; + } + + /** + * Sets a new client token (Need to be associated with the access token) + * + * @param clientToken + * The new client token + */ + public void setClientToken(String clientToken) { + this.clientToken = clientToken; + } + + /** + * Returns the client token (Given by the constructor or the setter) + * + * @return The given client token + */ + public String getClientToken() { + return this.clientToken; + } + +} diff --git a/src/main/java/fr/litarvan/openauth/model/request/SignoutRequest.java b/src/main/java/fr/litarvan/openauth/model/request/SignoutRequest.java new file mode 100644 index 00000000..917fedb5 --- /dev/null +++ b/src/main/java/fr/litarvan/openauth/model/request/SignoutRequest.java @@ -0,0 +1,90 @@ +/* + * Copyright 2015 TheShark34 + * + * This file is part of OpenAuth. + + * OpenAuth is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAuth is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with OpenAuth. If not, see . + */ +package fr.litarvan.openauth.model.request; + +/** + * JSON Model of an signout request + * + * @version 1.0.4 + * @author Litarvan + */ +public class SignoutRequest { + + /** + * The username of the player that you want to signout + */ + private String username; + + /** + * The password of the player that you want to signout + */ + private String password; + + /** + * Signout Request constructor + * + * @param username + * The username of the player that you want to signout + * @param password + * The password of the player that you want to signout + */ + public SignoutRequest(String username, String password) { + this.username = username; + this.password = password; + } + + /** + * Sets a new username (Of the player that you want to signout) + * + * @param username + * The new username + */ + public void setUsername(String username) { + this.username = username; + } + + /** + * Returns the username (Given by the constructor or the setter) + * + * @return The given username + */ + public String getUsername() { + return this.username; + } + + /** + * Sets a new password (Of the player that you want to signout) + * + * @param password + * The new password + */ + public void setPassword(String password) { + this.password = password; + } + + /** + * Returns the password (Given by the constructor or the setter) + * + * @return The given password + */ + public String getPassword() { + return password; + } + +} diff --git a/src/main/java/fr/litarvan/openauth/model/request/ValidateRequest.java b/src/main/java/fr/litarvan/openauth/model/request/ValidateRequest.java new file mode 100644 index 00000000..d85b090c --- /dev/null +++ b/src/main/java/fr/litarvan/openauth/model/request/ValidateRequest.java @@ -0,0 +1,63 @@ +/* + * Copyright 2015 TheShark34 + * + * This file is part of OpenAuth. + + * OpenAuth is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAuth is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with OpenAuth. If not, see . + */ +package fr.litarvan.openauth.model.request; + +/** + * JSON Model of an validate request + * + * @version 1.0.4 + * @author Litarvan + */ +public class ValidateRequest { + + /** + * The access token that you want to validate + */ + private String accessToken; + + /** + * Validate Request constructor + * + * @param accessToken + * The access token that you want to validate + */ + public ValidateRequest(String accessToken) { + this.accessToken = accessToken; + } + + /** + * Sets a new access token + * + * @param accessToken + * The new access token + */ + public void setAccessToken(String accessToken) { + this.accessToken = accessToken; + } + + /** + * Returns the access token (Given by the constructor or the setter) + * + * @return The given access token + */ + public String getAccessToken() { + return accessToken; + } + +} diff --git a/src/main/java/fr/litarvan/openauth/model/response/AuthResponse.java b/src/main/java/fr/litarvan/openauth/model/response/AuthResponse.java new file mode 100644 index 00000000..e29d449f --- /dev/null +++ b/src/main/java/fr/litarvan/openauth/model/response/AuthResponse.java @@ -0,0 +1,106 @@ +/* + * Copyright 2015 TheShark34 + * + * This file is part of OpenAuth. + + * OpenAuth is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAuth is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with OpenAuth. If not, see . + */ +package fr.litarvan.openauth.model.response; + +import fr.litarvan.openauth.model.AuthProfile; + +/** + * JSON Model of an authentication response + * + * @version 1.0.4 + * @author Litarvan + */ +public class AuthResponse { + + /** + * The access token + */ + private String accessToken; + + /** + * The client token (same as the one given by the request) + */ + private String clientToken; + + /** + * All available profiles + */ + private AuthProfile[] availableProfiles; + + /** + * The current selected profile from the agent + */ + private AuthProfile selectedProfile; + + /** + * Auth Response constructor + * + * @param accessToken + * The access token + * @param clientToken + * The client token (same as the one given by the request) + * @param availableProfiles + * All available profiles + * @param selectedProfile + * The current selected profile from the agent + */ + public AuthResponse(String accessToken, String clientToken, AuthProfile[] availableProfiles, AuthProfile selectedProfile) { + this.accessToken = accessToken; + this.clientToken = clientToken; + this.availableProfiles = availableProfiles; + this.selectedProfile = selectedProfile; + } + + /** + * Returns the access token + * + * @return The access token + */ + public String getAccessToken() { + return this.accessToken; + } + + /** + * Returns the client token (same as the one given by the request) + * + * @return The client token + */ + public String getClientToken() { + return this.clientToken; + } + + /** + * Returns the available profiles + * + * @return The available profiles + */ + public AuthProfile[] getAvailableProfiles() { + return this.availableProfiles; + } + + /** + * Returns the selected profile from the agent + * + * @return The selected profile + */ + public AuthProfile getSelectedProfile() { + return this.selectedProfile; + } + +} diff --git a/src/main/java/fr/litarvan/openauth/model/response/RefreshResponse.java b/src/main/java/fr/litarvan/openauth/model/response/RefreshResponse.java new file mode 100644 index 00000000..2381d9de --- /dev/null +++ b/src/main/java/fr/litarvan/openauth/model/response/RefreshResponse.java @@ -0,0 +1,91 @@ +/* + * Copyright 2015 TheShark34 + * + * This file is part of OpenAuth. + + * OpenAuth is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAuth is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with OpenAuth. If not, see . + */ +package fr.litarvan.openauth.model.response; + +import fr.litarvan.openauth.model.AuthProfile; + +/** + * JSON Model of an refresh response + * + * @version 1.0.4 + * @author Litarvan + */ +public class RefreshResponse { + + /** + * The access token (not the same as the one given by the request) + */ + private String accessToken; + + /** + * The client token (same as the one given by the request) + */ + private String clientToken; + + /** + * The selected profile + */ + private AuthProfile selectedProfile; + + /** + * Refresh Response constructor + * + * @param accessToken + * The access token (not the same as the one given by the request) + * @param clientToken + * The client token (same as the one given by the request) + * @param selectedProfile + * The profile selected (depending of the sent AuthAgent) containing + * more information about the agent (the game) selected, like the + * username for Minecraft + */ + public RefreshResponse(String accessToken, String clientToken, AuthProfile selectedProfile) { + this.accessToken = accessToken; + this.clientToken = clientToken; + this.selectedProfile = selectedProfile; + } + + /** + * Returns the access token (not the same as the one given by the request) + * + * @return The access token + */ + public String getAccessToken() { + return accessToken; + } + + /** + * Returns the client token (same as the one given by the request) + * + * @return The client token + */ + public String getClientToken() { + return clientToken; + } + + /** + * Returns the selected profile + * + * @return The selected profile + */ + public AuthProfile getSelectedProfile() { + return selectedProfile; + } + +} diff --git a/src/main/java/net/minecraft/client/Minecraft.java b/src/main/java/net/minecraft/client/Minecraft.java index cb28f35f..75730886 100644 --- a/src/main/java/net/minecraft/client/Minecraft.java +++ b/src/main/java/net/minecraft/client/Minecraft.java @@ -196,6 +196,7 @@ import rip.athena.client.events.types.render.RenderEvent; import rip.athena.client.events.types.render.RenderType; import rip.athena.client.gui.menu.AthenaMenu; import rip.athena.client.modules.impl.fpssettings.OptimizerMod; +import rip.athena.client.modules.impl.mods.HitDelayFix; public class Minecraft implements IThreadListener, IPlayerUsage { @@ -1536,7 +1537,11 @@ public class Minecraft implements IThreadListener, IPlayerUsage if (this.playerController.isNotCreative()) { - this.leftClickCounter = 10; + if(Athena.INSTANCE.getModuleManager().get(HitDelayFix.class).isToggled()) { + this.leftClickCounter = 0; + } else { + this.leftClickCounter = 10; + } } } else @@ -3182,7 +3187,7 @@ public class Minecraft implements IThreadListener, IPlayerUsage } else { - GuiStreamUnavailable.func_152321_a(this.currentScreen); + //GuiStreamUnavailable.func_152321_a(this.currentScreen); } } else if (i == this.gameSettings.keyBindStreamPauseUnpause.getKeyCode()) diff --git a/src/main/java/net/minecraft/client/entity/EntityPlayerSP.java b/src/main/java/net/minecraft/client/entity/EntityPlayerSP.java index ef53142b..17bf3d7b 100644 --- a/src/main/java/net/minecraft/client/entity/EntityPlayerSP.java +++ b/src/main/java/net/minecraft/client/entity/EntityPlayerSP.java @@ -42,15 +42,11 @@ import net.minecraft.potion.Potion; import net.minecraft.stats.StatBase; import net.minecraft.stats.StatFileWriter; import net.minecraft.tileentity.TileEntitySign; -import net.minecraft.util.BlockPos; -import net.minecraft.util.DamageSource; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.EnumParticleTypes; -import net.minecraft.util.IChatComponent; -import net.minecraft.util.MovementInput; -import net.minecraft.util.ResourceLocation; +import net.minecraft.util.*; import net.minecraft.world.IInteractionObject; import net.minecraft.world.World; +import rip.athena.client.Athena; +import rip.athena.client.modules.impl.mods.ToggleSprint; public class EntityPlayerSP extends AbstractClientPlayer { @@ -783,7 +779,12 @@ public class EntityPlayerSP extends AbstractClientPlayer boolean flag1 = this.movementInput.sneak; float f = 0.8F; boolean flag2 = this.movementInput.moveForward >= f; - this.movementInput.updatePlayerMoveState(); + + if(Athena.INSTANCE.getModuleManager().get(ToggleSprint.class).isToggled()) { + ToggleSprint.update(mc, (MovementInputFromOptions) this.movementInput, this); + } else { + this.movementInput.updatePlayerMoveState(); + } if (this.isUsingItem() && !this.isRiding()) { @@ -820,19 +821,27 @@ public class EntityPlayerSP extends AbstractClientPlayer this.setSprinting(false); } - if (this.capabilities.allowFlying) - { - if (this.mc.playerController.isSpectatorMode()) + if(Athena.INSTANCE.getModuleManager().get(ToggleSprint.class).isToggled()) { + + if(ToggleSprint.optionEnableFlyBoost && this.capabilities.isFlying && ToggleSprint.sprint) { - if (!this.capabilities.isFlying) - { - this.capabilities.isFlying = true; - this.sendPlayerAbilities(); + if(ToggleSprint.sprint && ToggleSprint.optionEnableFlyBoost) { + this.capabilities.setFlySpeed(0.05F * (float) ToggleSprint.flyboostspeedHorizontal); + if(this.movementInput.sneak) this.motionY -= 0.15D * (double) ToggleSprint.flyboostspeedVertical; + if(this.movementInput.jump) this.motionY += 0.15D * (double) ToggleSprint.flyboostspeedVertical; + } else if(!ToggleSprint.optionEnableFlyBoost && this.mc.gameSettings.keyBindSprint.isKeyDown()) { + this.capabilities.setFlySpeed(0.05F * (float) ToggleSprint.flyboostspeedHorizontal); + if(this.movementInput.sneak) this.motionY -= 0.15D * (double) ToggleSprint.flyboostspeedVertical; + if(this.movementInput.jump) this.motionY += 0.15D * (double) ToggleSprint.flyboostspeedVertical; } } - else if (!flag && this.movementInput.jump) + else if(this.capabilities.getFlySpeed() != 0.05F) { - if (this.flyToggleTimer == 0) + this.capabilities.setFlySpeed(0.05F); + } + if(this.capabilities.allowFlying && !isJumping && this.movementInput.jump) + { + if(this.flyToggleTimer == 0) { this.flyToggleTimer = 7; } @@ -843,18 +852,44 @@ public class EntityPlayerSP extends AbstractClientPlayer this.flyToggleTimer = 0; } } - } - if (this.capabilities.isFlying && this.isCurrentViewEntity()) - { - if (this.movementInput.sneak) + if(this.capabilities.isFlying) { - this.motionY -= (double)(this.capabilities.getFlySpeed() * 3.0F); + if(this.movementInput.sneak) + { + this.motionY -= 0.15D; + } + if(this.movementInput.jump) + { + this.motionY += 0.15D; + } + } + } else { + if (this.capabilities.allowFlying) { + if (this.mc.playerController.isSpectatorMode()) { + if (!this.capabilities.isFlying) { + this.capabilities.isFlying = true; + this.sendPlayerAbilities(); + } + } else if (!flag && this.movementInput.jump) { + if (this.flyToggleTimer == 0) { + this.flyToggleTimer = 7; + } else { + this.capabilities.isFlying = !this.capabilities.isFlying; + this.sendPlayerAbilities(); + this.flyToggleTimer = 0; + } + } } - if (this.movementInput.jump) - { - this.motionY += (double)(this.capabilities.getFlySpeed() * 3.0F); + if (this.capabilities.isFlying && this.isCurrentViewEntity()) { + if (this.movementInput.sneak) { + this.motionY -= (double) (this.capabilities.getFlySpeed() * 3.0F); + } + + if (this.movementInput.jump) { + this.motionY += (double) (this.capabilities.getFlySpeed() * 3.0F); + } } } diff --git a/src/main/java/net/minecraft/client/gui/FontRenderer.java b/src/main/java/net/minecraft/client/gui/FontRenderer.java index 04021bfd..7db75664 100644 --- a/src/main/java/net/minecraft/client/gui/FontRenderer.java +++ b/src/main/java/net/minecraft/client/gui/FontRenderer.java @@ -27,6 +27,8 @@ import optifine.FontUtils; import org.apache.commons.io.IOUtils; import org.lwjgl.opengl.GL11; +import rip.athena.client.Athena; +import rip.athena.client.modules.impl.other.NickHider; public class FontRenderer implements IResourceManagerReloadListener { @@ -433,6 +435,16 @@ public class FontRenderer implements IResourceManagerReloadListener */ private void renderStringAtPos(String p_78255_1_, boolean p_78255_2_) { + NickHider mod = (NickHider) Athena.INSTANCE.getModuleManager().get(NickHider.class); + + if(Athena.INSTANCE.getModuleManager().get(NickHider.class).isToggled()) { + if(Minecraft.getMinecraft().thePlayer != null) { + if (p_78255_1_.contains(Minecraft.getMinecraft().thePlayer.getName())) { + p_78255_1_ = p_78255_1_.replace(Minecraft.getMinecraft().thePlayer.getName(), mod.nick); + } + } + } + for (int i = 0; i < p_78255_1_.length(); ++i) { char c0 = p_78255_1_.charAt(i); @@ -654,6 +666,16 @@ public class FontRenderer implements IResourceManagerReloadListener */ public int getStringWidth(String text) { + NickHider mod = (NickHider) Athena.INSTANCE.getModuleManager().get(NickHider.class); + + if (Athena.INSTANCE.getModuleManager().get(NickHider.class).isToggled()) { + if (Minecraft.getMinecraft().thePlayer != null) { + if (text.contains(Minecraft.getMinecraft().thePlayer.getName())) { + text = text.replace(Minecraft.getMinecraft().thePlayer.getName(), mod.nick); + } + } + } + if (text == null) { return 0; diff --git a/src/main/java/net/minecraft/client/gui/Gui.java b/src/main/java/net/minecraft/client/gui/Gui.java index 7bf18b6c..77fc0066 100644 --- a/src/main/java/net/minecraft/client/gui/Gui.java +++ b/src/main/java/net/minecraft/client/gui/Gui.java @@ -7,6 +7,8 @@ import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.client.renderer.vertex.DefaultVertexFormats; import net.minecraft.util.ResourceLocation; +import static org.lwjgl.opengl.GL11.*; + public class Gui { public static final ResourceLocation optionsBackground = new ResourceLocation("textures/gui/options_background.png"); @@ -44,6 +46,28 @@ public class Gui drawRect(x, startY + 1, x + 1, endY, color); } + public static void drawRect2(double x, double y, double width, double height, int color) { + GlStateManager.color(1,1,1,1); + GlStateManager.enableAlpha(); + GlStateManager.alphaFunc(GL_GREATER, (float) (0 * .01)); + GlStateManager.enableBlend(); + GlStateManager.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + GlStateManager.disableTexture2D(); + + Tessellator tessellator = Tessellator.getInstance(); + WorldRenderer worldrenderer = tessellator.getWorldRenderer(); + + worldrenderer.begin(GL_QUADS, DefaultVertexFormats.POSITION_COLOR); + worldrenderer.pos(x, y, 0.0D).color(color).endVertex(); + worldrenderer.pos(x, y + height, 0.0D).color(color).endVertex(); + worldrenderer.pos(x + width, y + height, 0.0D).color(color).endVertex(); + worldrenderer.pos(x + width, y, 0.0D).color(color).endVertex(); + tessellator.draw(); + + GlStateManager.enableTexture2D(); + GlStateManager.disableBlend(); + } + /** * Draws a solid color rectangle with the specified coordinates and color (ARGB format). Args: x1, y1, x2, y2, color */ diff --git a/src/main/java/net/minecraft/client/gui/GuiButton.java b/src/main/java/net/minecraft/client/gui/GuiButton.java index d69dee2e..86f94ea2 100644 --- a/src/main/java/net/minecraft/client/gui/GuiButton.java +++ b/src/main/java/net/minecraft/client/gui/GuiButton.java @@ -5,7 +5,9 @@ import net.minecraft.client.audio.PositionedSoundRecord; import net.minecraft.client.audio.SoundHandler; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.util.ResourceLocation; +import rip.athena.client.Athena; import rip.athena.client.font.FontManager; +import rip.athena.client.utils.render.ColorUtil; import rip.athena.client.utils.render.DrawUtils; import rip.athena.client.utils.render.RoundedUtils; @@ -98,7 +100,8 @@ public class GuiButton extends Gui int j = 14737632; RoundedUtils.drawRoundedRect(this.xPosition, this.yPosition, this.xPosition + this.width, this.yPosition + this.height, 12, hovered ? new Color(200,200,200,100).getRGB() : new Color(100,100,100,100).getRGB()); - RoundedUtils.drawRoundedRect(this.xPosition + 1, this.yPosition + 1, (this.xPosition + this.width) - 1, (this.yPosition + this.height) - 1, 12, new Color(22, 24, 27,100).getRGB()); + RoundedUtils.drawGradientRound(this.xPosition + 1, this.yPosition + 1, (this.width) - 1, (this.height) - 1, 6, ColorUtil.getClientColor(0, 255), ColorUtil.getClientColor(90, 255), ColorUtil.getClientColor(180, 255), ColorUtil.getClientColor(270, 255)); + //RoundedUtils.drawRoundedRect(this.xPosition + 1, this.yPosition + 1, (this.xPosition + this.width) - 1, (this.yPosition + this.height) - 1, 12, new Color(22, 24, 27,100).getRGB()); if (!this.enabled) diff --git a/src/main/java/net/minecraft/client/gui/GuiNewChat.java b/src/main/java/net/minecraft/client/gui/GuiNewChat.java index 7fa01469..8f855295 100644 --- a/src/main/java/net/minecraft/client/gui/GuiNewChat.java +++ b/src/main/java/net/minecraft/client/gui/GuiNewChat.java @@ -11,6 +11,7 @@ import net.minecraft.util.IChatComponent; import net.minecraft.util.MathHelper; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import rip.athena.client.Athena; import rip.athena.client.font.FontManager; import rip.athena.client.modules.impl.render.Chat; @@ -85,11 +86,7 @@ public class GuiNewChat extends Gui String s = chatline.getChatComponent().getFormattedText(); GlStateManager.color(1,1,1); GlStateManager.enableBlend(); - if(Chat.customFont) { - rip.athena.client.utils.font.FontManager.getProductSansRegular(30).drawStringWithShadow(s, (float) i2, (float) (j2 - 10), 16777215 + (l1 << 24)); - } else { - this.mc.fontRendererObj.drawStringWithShadow(s, (float) i2, (float) (j2 - 8), 16777215 + (l1 << 24)); - } + this.mc.fontRendererObj.drawStringWithShadow(s, (float) i2, (float) (j2 - 8), 16777215 + (l1 << 24)); GlStateManager.disableAlpha(); GlStateManager.disableBlend(); } @@ -175,9 +172,12 @@ public class GuiNewChat extends Gui { this.chatLines.add(0, new ChatLine(p_146237_3_, p_146237_1_, p_146237_2_)); - while (this.chatLines.size() > 100) - { - this.chatLines.remove(this.chatLines.size() - 1); + Chat mod = (Chat) Athena.INSTANCE.getModuleManager().get(Chat.class); + + if(!mod.isToggled() && !mod.infiniteChat) { + while (this.chatLines.size() > 100) { + this.chatLines.remove(this.chatLines.size() - 1); + } } } } diff --git a/src/main/java/net/minecraft/client/gui/GuiOptions.java b/src/main/java/net/minecraft/client/gui/GuiOptions.java index cefdfbf4..d5d24405 100644 --- a/src/main/java/net/minecraft/client/gui/GuiOptions.java +++ b/src/main/java/net/minecraft/client/gui/GuiOptions.java @@ -214,11 +214,11 @@ public class GuiOptions extends GuiScreen implements GuiYesNoCallback if (istream.func_152936_l() && istream.func_152928_D()) { - this.mc.displayGuiScreen(new GuiStreamOptions(this, this.game_settings_1)); + //this.mc.displayGuiScreen(new GuiStreamOptions(this, this.game_settings_1)); } else { - GuiStreamUnavailable.func_152321_a(this); + //GuiStreamUnavailable.func_152321_a(this); } } } diff --git a/src/main/java/net/minecraft/client/gui/stream/GuiStreamOptions.java b/src/main/java/net/minecraft/client/gui/stream/GuiStreamOptions.java index 490bba29..3ea10e7f 100644 --- a/src/main/java/net/minecraft/client/gui/stream/GuiStreamOptions.java +++ b/src/main/java/net/minecraft/client/gui/stream/GuiStreamOptions.java @@ -33,8 +33,8 @@ public class GuiStreamOptions extends GuiScreen public void initGui() { int i = 0; - this.field_152319_i = I18n.format("options.stream.title", new Object[0]); - this.field_152313_r = I18n.format("options.stream.chat.title", new Object[0]); + //this.field_152319_i = I18n.format("options.stream.title", new Object[0]); + //this.field_152313_r = I18n.format("options.stream.chat.title", new Object[0]); for (GameSettings.Options gamesettings$options : field_152312_a) { diff --git a/src/main/java/net/minecraft/client/multiplayer/PlayerControllerMP.java b/src/main/java/net/minecraft/client/multiplayer/PlayerControllerMP.java index 495b3061..9fdbdbf7 100644 --- a/src/main/java/net/minecraft/client/multiplayer/PlayerControllerMP.java +++ b/src/main/java/net/minecraft/client/multiplayer/PlayerControllerMP.java @@ -28,6 +28,8 @@ import net.minecraft.util.ResourceLocation; import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraft.world.WorldSettings; +import rip.athena.client.Athena; +import rip.athena.client.events.types.entity.AttackEntityEvent; public class PlayerControllerMP { @@ -490,6 +492,8 @@ public class PlayerControllerMP */ public void attackEntity(EntityPlayer playerIn, Entity targetEntity) { + if(!Athena.INSTANCE.getEventBus().post(new AttackEntityEvent(playerIn, targetEntity))) return; + this.syncCurrentPlayItem(); this.netClientHandler.addToSendQueue(new C02PacketUseEntity(targetEntity, C02PacketUseEntity.Action.ATTACK)); diff --git a/src/main/java/net/minecraft/client/renderer/EntityRenderer.java b/src/main/java/net/minecraft/client/renderer/EntityRenderer.java index bf21e9a9..7461b57e 100644 --- a/src/main/java/net/minecraft/client/renderer/EntityRenderer.java +++ b/src/main/java/net/minecraft/client/renderer/EntityRenderer.java @@ -87,10 +87,7 @@ import org.lwjgl.util.glu.Project; import rip.athena.client.Athena; import rip.athena.client.events.types.render.RenderEvent; import rip.athena.client.events.types.render.RenderType; -import rip.athena.client.modules.impl.mods.NoHurtCam; -import rip.athena.client.modules.impl.mods.Zoom; -import rip.athena.client.modules.impl.mods.Freelook; -import rip.athena.client.modules.impl.mods.OldAnimations; +import rip.athena.client.modules.impl.mods.*; import shadersmod.client.Shaders; import shadersmod.client.ShadersRender; @@ -941,7 +938,12 @@ public class EntityRenderer implements IResourceManagerReloadListener if (this.mc.gameSettings.viewBobbing) { - this.setupViewBobbing(partialTicks); + MinimalBobbing module = (MinimalBobbing) Athena.INSTANCE.getModuleManager().get(MinimalBobbing.class); + if(Athena.INSTANCE.getModuleManager().get(MinimalBobbing.class).isToggled() && module.screenBobbing) { + } else { + this.setupViewBobbing(partialTicks); + } + //this.setupViewBobbing(partialTicks); } float f1 = this.mc.thePlayer.prevTimeInPortal + (this.mc.thePlayer.timeInPortal - this.mc.thePlayer.prevTimeInPortal) * partialTicks; @@ -1040,7 +1042,11 @@ public class EntityRenderer implements IResourceManagerReloadListener if (this.mc.gameSettings.viewBobbing) { - this.setupViewBobbing(p_renderHand_1_); + MinimalBobbing module = (MinimalBobbing) Athena.INSTANCE.getModuleManager().get(MinimalBobbing.class); + if(Athena.INSTANCE.getModuleManager().get(MinimalBobbing.class).isToggled() && module.handBobbing) { + } else { + this.setupViewBobbing(p_renderHand_1_); + } } flag = this.mc.getRenderViewEntity() instanceof EntityLivingBase && ((EntityLivingBase)this.mc.getRenderViewEntity()).isPlayerSleeping(); @@ -1080,7 +1086,12 @@ public class EntityRenderer implements IResourceManagerReloadListener if (this.mc.gameSettings.viewBobbing) { - this.setupViewBobbing(p_renderHand_1_); + MinimalBobbing module = (MinimalBobbing) Athena.INSTANCE.getModuleManager().get(MinimalBobbing.class); + if(Athena.INSTANCE.getModuleManager().get(MinimalBobbing.class).isToggled() && module.handBobbing) { + } else { + this.setupViewBobbing(p_renderHand_1_); + } + //this.setupViewBobbing(p_renderHand_1_); } } } diff --git a/src/main/java/net/minecraft/client/renderer/WorldRenderer.java b/src/main/java/net/minecraft/client/renderer/WorldRenderer.java index c276928e..d99f12ec 100644 --- a/src/main/java/net/minecraft/client/renderer/WorldRenderer.java +++ b/src/main/java/net/minecraft/client/renderer/WorldRenderer.java @@ -484,6 +484,10 @@ public class WorldRenderer return this.color((int)(p_181666_1_ * 255.0F), (int)(p_181666_2_ * 255.0F), (int)(p_181666_3_ * 255.0F), (int)(p_181666_4_ * 255.0F)); } + public WorldRenderer color(int colorHex) { + return this.color(colorHex >> 16 & 255, colorHex >> 8 & 255, colorHex & 255, colorHex >> 24 & 255); + } + public WorldRenderer color(int p_181669_1_, int p_181669_2_, int p_181669_3_, int p_181669_4_) { if (this.needsUpdate) diff --git a/src/main/java/net/minecraft/client/renderer/entity/Render.java b/src/main/java/net/minecraft/client/renderer/entity/Render.java index 242b24d4..6aabe190 100644 --- a/src/main/java/net/minecraft/client/renderer/entity/Render.java +++ b/src/main/java/net/minecraft/client/renderer/entity/Render.java @@ -23,6 +23,8 @@ import net.minecraft.world.World; import optifine.Config; import org.lwjgl.opengl.GL11; +import rip.athena.client.Athena; +import rip.athena.client.modules.impl.other.NickHider; import rip.athena.client.socket.SocketClient; import shadersmod.client.Shaders; @@ -348,6 +350,7 @@ public abstract class Render */ protected void renderLivingLabel(T entityIn, String str, double x, double y, double z, int maxDistance) { + double d0 = entityIn.getDistanceSqToEntity(this.renderManager.livingPlayer); if (d0 <= (double)(maxDistance * maxDistance)) diff --git a/src/main/java/net/minecraft/client/renderer/entity/RendererLivingEntity.java b/src/main/java/net/minecraft/client/renderer/entity/RendererLivingEntity.java index c136c4ea..89417a3c 100644 --- a/src/main/java/net/minecraft/client/renderer/entity/RendererLivingEntity.java +++ b/src/main/java/net/minecraft/client/renderer/entity/RendererLivingEntity.java @@ -31,6 +31,7 @@ import org.apache.logging.log4j.Logger; import org.lwjgl.opengl.GL11; import rip.athena.client.Athena; import rip.athena.client.events.types.render.RenderEntityEvent; +import rip.athena.client.modules.impl.other.NickHider; import rip.athena.client.modules.impl.other.Settings; import rip.athena.client.modules.impl.render.CustomHitColor; import shadersmod.client.Shaders; @@ -553,8 +554,8 @@ public abstract class RendererLivingEntity extends R { Settings settings = (Settings) Athena.INSTANCE.getModuleManager().get(Settings.class); - if (this.canRenderName(entity) || settings.F5Nametags && entity instanceof EntityPlayer && entity == Minecraft.getMinecraft().thePlayer) - { + if (this.canRenderName(entity) || settings.F5Nametags && entity instanceof EntityPlayer && entity == Minecraft.getMinecraft().thePlayer) { + double d0 = entity.getDistanceSqToEntity(this.renderManager.livingPlayer); float f = entity.isSneaking() ? NAME_TAG_RANGE_SNEAK : NAME_TAG_RANGE; diff --git a/src/main/java/net/minecraft/entity/player/EntityPlayer.java b/src/main/java/net/minecraft/entity/player/EntityPlayer.java index 72344557..3f626d9e 100644 --- a/src/main/java/net/minecraft/entity/player/EntityPlayer.java +++ b/src/main/java/net/minecraft/entity/player/EntityPlayer.java @@ -75,6 +75,7 @@ import net.minecraft.world.LockCode; import net.minecraft.world.World; import net.minecraft.world.WorldSettings; import rip.athena.client.Athena; +import rip.athena.client.events.types.entity.AttackEntityEvent; import rip.athena.client.events.types.entity.PlayerInteractEvent; import rip.athena.client.events.types.entity.PlayerTickEvent; diff --git a/src/main/java/rip/athena/client/Athena.java b/src/main/java/rip/athena/client/Athena.java index ec12cec5..2dd8fdd6 100644 --- a/src/main/java/rip/athena/client/Athena.java +++ b/src/main/java/rip/athena/client/Athena.java @@ -5,6 +5,7 @@ import net.minecraft.client.Minecraft; import org.json.JSONException; import org.lwjgl.Sys; import org.lwjgl.opengl.Display; +import rip.athena.client.account.AccountManager; import rip.athena.client.config.save.ConfigManager; import rip.athena.client.events.EventBus; import rip.athena.client.events.SubscribeEvent; @@ -13,6 +14,7 @@ import rip.athena.client.gui.hud.HUDManager; import rip.athena.client.gui.notifications.NotificationManager; import rip.athena.client.macros.MacroManager; import rip.athena.client.modules.ModuleManager; +import rip.athena.client.modules.impl.other.AimTrainer; import rip.athena.client.requests.ContentType; import rip.athena.client.requests.WebRequest; import rip.athena.client.requests.WebRequestResult; @@ -49,6 +51,7 @@ public class Athena { public static final File MAIN_DIR = Paths.get(Minecraft.getMinecraft().mcDataDir.getAbsolutePath(), "settings").toFile(); public static final File CONFIGS_DIR = Paths.get(MAIN_DIR.getAbsolutePath(), "configs").toFile(); + public static final File ACCOUNTS_DIR = new File(MAIN_DIR.getAbsolutePath(), "accounts.json"); private final PrefixedLogger log = new PrefixedLogger("Athena"); @@ -57,6 +60,7 @@ public class Athena { private final String clientBuild = "230601"; private NotificationManager notificationManager; + private AccountManager accountManager; private ConfigManager configManager; private ModuleManager moduleManager; private ThemeManager themeManager; @@ -80,12 +84,21 @@ public class Athena { MAIN_DIR.mkdir(); } + if(!ACCOUNTS_DIR.exists()) { + try { + ACCOUNTS_DIR.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } + } + if(SocketClient.isClientRunning()) { JOptionPane.showMessageDialog(null, "Port 1337 already in use."); System.exit(0); } this.configManager = new ConfigManager(CONFIGS_DIR); + this.accountManager = new AccountManager(); this.moduleManager = new ModuleManager(); this.themeManager = new ThemeManager(); this.macroManager = new MacroManager(); diff --git a/src/main/java/rip/athena/client/account/Account.java b/src/main/java/rip/athena/client/account/Account.java new file mode 100644 index 00000000..310ec333 --- /dev/null +++ b/src/main/java/rip/athena/client/account/Account.java @@ -0,0 +1,77 @@ +package rip.athena.client.account; + +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 Account { + + private AccountType accountType; + + private String username, uuid, token; + + private String info; + + private TimerUtil timer; + + public SimpleAnimation opacityAnimation = new SimpleAnimation(0.0F); + public boolean isDone; + + public Account(AccountType accountType, String username, String uuid, String token) { + this.accountType = accountType; + this.username = username; + this.uuid = uuid; + this.token = token; + this.info = ""; + this.timer = new TimerUtil(); + this.isDone = true; + } + + public AccountType getAccountType() { + return accountType; + } + + public void setAccountType(AccountType accountType) { + this.accountType = accountType; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getToken() { + return token; + } + + public void setToken(String token) { + this.token = token; + } + + 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/client/account/AccountManager.java b/src/main/java/rip/athena/client/account/AccountManager.java new file mode 100644 index 00000000..9baaa88f --- /dev/null +++ b/src/main/java/rip/athena/client/account/AccountManager.java @@ -0,0 +1,157 @@ +package rip.athena.client.account; + +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.util.EnumChatFormatting; +import net.minecraft.util.Session; +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 AccountManager { + + private Minecraft mc = Minecraft.getMinecraft(); + + private ArrayList accounts = new ArrayList<>(); + + public boolean isFirstLogin = false; + + private Account currentAccount; + + public AccountManager() { + + if(Athena.ACCOUNTS_DIR.length() == 0) { + isFirstLogin = true; + } + + this.load(); + this.login(currentAccount); + } + + public void save() { + ArrayList toSave = new ArrayList<>(); + + for (Account a : Athena.INSTANCE.getAccountManager().getAccounts()) { + toSave.add("Account:" + a.getAccountType().toString() + ":" + a.getUsername() + ":" + a.getUuid() + ":" + a.getToken()); + } + + toSave.add("Current:" + getCurrentAccount().getUsername()); + + try { + PrintWriter pw = new PrintWriter(Athena.ACCOUNTS_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.ACCOUNTS_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("account:")) { + + AccountType accountType = AccountType.MICROSOFT; + + if(args[1].equals("MICROSOFT")) { + accountType = AccountType.MICROSOFT; + } + + if(args[1].equals("SESSION")) { + accountType = AccountType.SESSION; + } + + if(args[1].equals("CRACKED")) { + accountType = AccountType.CRACKED; + } + + accounts.add(new Account(accountType, args[2], args[3], args[4])); + } + + if (s.toLowerCase().startsWith("current:")) { + setCurrentAccount(getAccountByUsername(args[1])); + } + } + } + + private void login(Account a) { + + if(a == null) { + return; + } + + if(a.getAccountType().equals(AccountType.MICROSOFT)) { + 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(), "legacy"); + a.setInfo("Success"); + } catch (MicrosoftAuthenticationException e) { + e.printStackTrace(); + a.setInfo("Error"); + } + } + + if(a.getAccountType().equals(AccountType.SESSION)) { + a.setInfo("Loading..."); + try { + mc.session = new Session(a.getUsername(), a.getUuid(), a.getToken(), "mojang"); + a.setInfo("Success!"); + } catch (Exception e) { + e.printStackTrace(); + a.setInfo("Error"); + } + } + + if(a.getAccountType().equals(AccountType.CRACKED)) { + a.setInfo("Success"); + mc.session = new Session(a.getUsername(), "0", "0", "legacy"); + } + } + + public Account getAccountByUsername(String name) { + return accounts.stream().filter(account -> account.getUsername().equalsIgnoreCase(name)).findFirst().orElse(null); + } + + public ArrayList getAccounts() { + return accounts; + } + + public Account getCurrentAccount() { + return currentAccount; + } + + public void setCurrentAccount(Account currentAccount) { + this.currentAccount = currentAccount; + } +} diff --git a/src/main/java/rip/athena/client/account/AccountType.java b/src/main/java/rip/athena/client/account/AccountType.java new file mode 100644 index 00000000..bb97ae97 --- /dev/null +++ b/src/main/java/rip/athena/client/account/AccountType.java @@ -0,0 +1,10 @@ +package rip.athena.client.account; + +/** + * @author Athena Development + * @project Athena-Client + * @date 6/10/2023 + */ +public enum AccountType { + MICROSOFT, CRACKED, SESSION; +} \ No newline at end of file diff --git a/src/main/java/rip/athena/client/config/save/Config.java b/src/main/java/rip/athena/client/config/save/Config.java index ffef14ea..4391b20e 100644 --- a/src/main/java/rip/athena/client/config/save/Config.java +++ b/src/main/java/rip/athena/client/config/save/Config.java @@ -15,7 +15,7 @@ import rip.athena.client.gui.hud.HUDElement; import rip.athena.client.macros.Macro; import rip.athena.client.modules.Module; import rip.athena.client.modules.impl.render.Crosshair; -import rip.athena.client.theme.Theme; +import rip.athena.client.theme.impl.AccentTheme; import rip.athena.client.utils.StringUtils; import rip.athena.client.utils.file.FileHandler; import rip.athena.client.utils.input.BindType; @@ -147,7 +147,7 @@ public class Config { String themeIdentifier = obj.getString("theme"); - for (Theme theme : Theme.values()) { + for (AccentTheme theme : AccentTheme.values()) { if (theme.name().equalsIgnoreCase(themeIdentifier)) { Athena.INSTANCE.getThemeManager().setTheme(theme); break; diff --git a/src/main/java/rip/athena/client/gui/clickgui/IngameMenu.java b/src/main/java/rip/athena/client/gui/clickgui/IngameMenu.java index 386f77d6..183975f1 100644 --- a/src/main/java/rip/athena/client/gui/clickgui/IngameMenu.java +++ b/src/main/java/rip/athena/client/gui/clickgui/IngameMenu.java @@ -45,13 +45,13 @@ public class IngameMenu extends MinecraftMenuImpl implements DrawImpl { private static boolean initd; private static int savedWidth = -1; private static int savedHeight = -1; - + public IngameMenu(Module feature, Menu menu) { super(feature, menu); - + pageManager = new PageManager(this, menu); } - + @Override public void initGui() { @@ -59,14 +59,14 @@ public class IngameMenu extends MinecraftMenuImpl implements DrawImpl { menu.getComponents().clear(); initd = false; } - + if(!initd) { for(IPage page : pageManager.getPages().values()) { page.onInit(); } - + menu.addComponent(new MenuDraggable(0, 0, menu.getWidth(), 58)); - + int x = 175; //int y = 58 / 2 + 2; @@ -80,24 +80,24 @@ public class IngameMenu extends MinecraftMenuImpl implements DrawImpl { if(IngameMenu.category != null) { pageManager.getPage(IngameMenu.category).onUnload(); } - + IngameMenu.category = category; - + for(MenuComponent component : menu.getComponents()) { if(component instanceof CategoryButton) { CategoryButton button = (CategoryButton) component; button.setActive(component == this); } } - + initPage(); } }; - + if(category == IngameMenu.category) { comp.setActive(true); } - + menu.addComponent(comp); if(Settings.customGuiFont) { x += rip.athena.client.utils.font.FontManager.getProductSansRegular(30).width(category.getName()) + 20; @@ -110,14 +110,14 @@ public class IngameMenu extends MinecraftMenuImpl implements DrawImpl { initPage(); initd = true; } - + if(category != null) { pageManager.getPage(category).onOpen(); } - + super.initGui(); } - + @Override public void drawScreen(int mouseX, int mouseY, float partialTicks) { if(savedWidth != mc.displayWidth || savedHeight != mc.displayHeight) { @@ -136,10 +136,10 @@ public class IngameMenu extends MinecraftMenuImpl implements DrawImpl { drawShadowDown(menu.getX(), menu.getY() + 58, menu.getWidth()); - RoundedUtils.drawRoundedOutline(menu.getX(), menu.getY(), menu.getX() + menu.getWidth(), menu.getY() + menu.getHeight(), 32, 5, new Color(50, 50, 50, 255).getRGB()); - RoundedUtils.drawRoundedRect(menu.getX(), menu.getY(), menu.getX() + menu.getWidth(), menu.getY() + menu.getHeight(), 32, new Color(30, 30, 30, 255).getRGB()); + RoundedUtils.drawRoundedOutline(menu.getX(), menu.getY(), menu.getX() + menu.getWidth(), menu.getY() + menu.getHeight(), 32, 5, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getSecondColor()); + RoundedUtils.drawRoundedRect(menu.getX(), menu.getY(), menu.getX() + menu.getWidth(), menu.getY() + menu.getHeight(), 32, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getFirstColor()); - rip.athena.client.utils.font.FontManager.getNunitoBold(50).drawString(Athena.INSTANCE.getClientName().toUpperCase(), menu.getX() + 60, menu.getY() + 17, MENU_HEADER_TEXT_COLOR); + rip.athena.client.utils.font.FontManager.getNunitoBold(50).drawString(Athena.INSTANCE.getClientName().toUpperCase(), menu.getX() + 60, menu.getY() + 17, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); //DrawUtils.drawImage(new ResourceLocation("Athena/logo/pride.png"), (int) (menu.getX() + FontManager.font1.getStringWidth(Athena.INSTANCE.getClientName().toUpperCase()) + 70), (int) (menu.getY() - 10 + FontManager.font1.getHeight(Athena.INSTANCE.getClientName().toUpperCase())), 30, 30); @@ -149,38 +149,38 @@ public class IngameMenu extends MinecraftMenuImpl implements DrawImpl { if(category != null) { pageManager.getPage(category).onRender(); } - + GlStateManager.popMatrix(); - + super.drawScreen(mouseX, mouseY, partialTicks); GlStateManager.pushMatrix(); GlStateManager.scale(value, value, value); - + for(MenuComponent component : menu.getComponents()) { if(component instanceof MenuScrollPane) { MenuScrollPane scrollpane = (MenuScrollPane) component; - + scrollpane.drawExtras(); } } - + GlStateManager.popMatrix(); } - + public void initPage() { List remove = new ArrayList<>(); - + for(MenuComponent component : menu.getComponents()) { if(component instanceof CategoryButton || component instanceof MenuDraggable) { continue; } - + remove.add(component); } - + menu.getComponents().removeAll(remove); - + pageManager.getPage(category).onLoad(); } @@ -188,25 +188,25 @@ public class IngameMenu extends MinecraftMenuImpl implements DrawImpl { if(category != null) { pageManager.getPage(category).onUnload(); } - + category = Category.MODS; - + pageManager.getPage(ModsPage.class, Category.MODS).activeModule = parent; - + initPage(); } - + @Override public void onGuiClosed() { if(category != null) { pageManager.getPage(category).onClose(); } - + super.onGuiClosed(); - + new Thread(() -> { Config config = Athena.INSTANCE.getConfigManager().getLoadedConfig(); - + if(config != null) { config.save(); } diff --git a/src/main/java/rip/athena/client/gui/clickgui/components/macros/MacroBase.java b/src/main/java/rip/athena/client/gui/clickgui/components/macros/MacroBase.java index 4c527432..142017dd 100644 --- a/src/main/java/rip/athena/client/gui/clickgui/components/macros/MacroBase.java +++ b/src/main/java/rip/athena/client/gui/clickgui/components/macros/MacroBase.java @@ -2,6 +2,7 @@ package rip.athena.client.gui.clickgui.components.macros; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.GlStateManager; +import rip.athena.client.Athena; import rip.athena.client.font.FontManager; import rip.athena.client.gui.framework.MenuComponent; import rip.athena.client.gui.framework.MenuPriority; @@ -69,7 +70,7 @@ public class MacroBase extends MenuComponent { //rip.athena.client.gui.framework.draw.DrawImpl.drawRect(x, y, width, height, backgroundColor); GlStateManager.color(1,1,1); - RoundedUtils.drawRoundedRect(x, y, x + width, y + height, 12.0f, backgroundColor); + RoundedUtils.drawRoundedRect(x, y, x + width, y + height, 12.0f, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getThirdColor()); /*drawHorizontalLine(x, y, width + 1, 1, lineColor); drawVerticalLine(x, y + 1, height - 1, 1, lineColor); diff --git a/src/main/java/rip/athena/client/gui/clickgui/components/mods/CategoryButton.java b/src/main/java/rip/athena/client/gui/clickgui/components/mods/CategoryButton.java index 636681b0..aae043af 100644 --- a/src/main/java/rip/athena/client/gui/clickgui/components/mods/CategoryButton.java +++ b/src/main/java/rip/athena/client/gui/clickgui/components/mods/CategoryButton.java @@ -64,9 +64,9 @@ public class CategoryButton extends MenuButton { //RoundedUtils.drawRoundedRect(x + 30, y, x + width - 20, y + height, 12, new Color(25,25,25,255).getRGB()); } if(Settings.customGuiFont) { - rip.athena.client.utils.font.FontManager.getNunitoBold(20).drawString(text, x + 70, y + height / 2 - (getStringHeight(text) / 2) + 2, textColor); + rip.athena.client.utils.font.FontManager.getNunitoBold(20).drawString(text, x + 70, y + height / 2 - (getStringHeight(text) / 2) + 2, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); } else { - Minecraft.getMinecraft().fontRendererObj.drawString(text, x + (width / 2 - getStringWidth(text) / 2), y + height / 2 - (getStringHeight(text) / 2), textColor); + Minecraft.getMinecraft().fontRendererObj.drawString(text, x + (width / 2 - getStringWidth(text) / 2), y + height / 2 - (getStringHeight(text) / 2), Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); } DrawUtils.drawImage(image, x + 35, y + 3, 25, 25); diff --git a/src/main/java/rip/athena/client/gui/clickgui/components/mods/FeatureText.java b/src/main/java/rip/athena/client/gui/clickgui/components/mods/FeatureText.java index ddca572c..f02fe87c 100644 --- a/src/main/java/rip/athena/client/gui/clickgui/components/mods/FeatureText.java +++ b/src/main/java/rip/athena/client/gui/clickgui/components/mods/FeatureText.java @@ -1,6 +1,7 @@ package rip.athena.client.gui.clickgui.components.mods; import net.minecraft.client.Minecraft; +import rip.athena.client.Athena; import rip.athena.client.font.FontManager; import rip.athena.client.gui.framework.components.MenuLabel; import rip.athena.client.gui.framework.draw.ButtonState; @@ -37,9 +38,9 @@ public class FeatureText extends MenuLabel { @Override public void drawText(String text, int x, int y, int color) { if(Settings.customGuiFont) { - rip.athena.client.utils.font.FontManager.getNunitoBold(30).drawString(text, x, y, color); + rip.athena.client.utils.font.FontManager.getNunitoBold(30).drawString(text, x, y, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); } else { - Minecraft.getMinecraft().fontRendererObj.drawString(text, x, y, color); + Minecraft.getMinecraft().fontRendererObj.drawString(text, x, y, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); } } diff --git a/src/main/java/rip/athena/client/gui/clickgui/components/mods/GoBackButton.java b/src/main/java/rip/athena/client/gui/clickgui/components/mods/GoBackButton.java index 5a985331..650a0b7b 100644 --- a/src/main/java/rip/athena/client/gui/clickgui/components/mods/GoBackButton.java +++ b/src/main/java/rip/athena/client/gui/clickgui/components/mods/GoBackButton.java @@ -2,6 +2,7 @@ package rip.athena.client.gui.clickgui.components.mods; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.GlStateManager; +import rip.athena.client.Athena; import rip.athena.client.font.FontManager; import rip.athena.client.gui.framework.components.MenuButton; import rip.athena.client.gui.framework.draw.ButtonState; @@ -121,7 +122,7 @@ public class GoBackButton extends MenuButton { GlStateManager.color(1, 1,1); - DrawUtils.drawRoundedRect(x - 4, y - 4, x + width + 5, y + height + 5, rounding, 83886080); + DrawUtils.drawRoundedRect(x - 4, y - 4, x + width + 5, y + height + 5, rounding, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getFirstColor()); DrawUtils.drawRoundedRect(x - 3, y - 3, x + width + 4, y + height + 4, rounding, 335544320); DrawUtils.drawRoundedRect(x - 2, y - 2, x + width + 3, y + height + 3, rounding, 436207616); @@ -135,9 +136,9 @@ public class GoBackButton extends MenuButton { DrawUtils.drawRoundedRect(x + 1, y + 1, x + width, y + height, rounding, backgroundColor);*/ if(Settings.customGuiFont) { - rip.athena.client.utils.font.FontManager.getProductSansRegular(30).drawString(text, x + (width / 2 - getStringWidth(text) / 2), y + height / 2 - (getStringHeight(text) / 2), textColor); + rip.athena.client.utils.font.FontManager.getProductSansRegular(30).drawString(text, x + (width / 2 - getStringWidth(text) / 2), y + height / 2 - (getStringHeight(text) / 2), Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); } else { - Minecraft.getMinecraft().fontRendererObj.drawString(text, x + (width / 2 - getStringWidth(text) / 2), y + height / 2 - (getStringHeight(text) / 2), textColor); + Minecraft.getMinecraft().fontRendererObj.drawString(text, x + (width / 2 - getStringWidth(text) / 2), y + height / 2 - (getStringHeight(text) / 2), Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); } x -= 20; width = 30; @@ -147,9 +148,9 @@ public class GoBackButton extends MenuButton { x -= 2; y -= 2; - DrawUtils.drawRoundedRect(x - 4, y - 4, x + width + 5, y + height + 5, rounding, 83886080); - DrawUtils.drawRoundedRect(x - 3, y - 3, x + width + 4, y + height + 4, rounding, 335544320); - DrawUtils.drawRoundedRect(x - 2, y - 2, x + width + 3, y + height + 3, rounding, 436207616); + DrawUtils.drawRoundedRect(x - 4, y - 4, x + width + 5, y + height + 5, rounding, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getFirstColor()); + DrawUtils.drawRoundedRect(x - 3, y - 3, x + width + 4, y + height + 4, rounding, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getSecondColor()); + DrawUtils.drawRoundedRect(x - 2, y - 2, x + width + 3, y + height + 3, rounding, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getFirstColor()); height -= 4; width -= 4; @@ -157,8 +158,8 @@ public class GoBackButton extends MenuButton { y += 2; DrawUtils.drawRoundedRect(x - 1, y - 1, x + width + 2, y + height + 2, rounding, lineColor); - DrawUtils.drawRoundedRect(x, y, x + width + 1, y + height + 1, rounding, lineColor); - DrawUtils.drawRoundedRect(x + 1, y + 1, x + width, y + height, rounding, backgroundColor); + DrawUtils.drawRoundedRect(x, y, x + width + 1, y + height + 1, rounding, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getSecondColor()); + DrawUtils.drawRoundedRect(x + 1, y + 1, x + width, y + height, rounding, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getFirstColor()); mouseDown = false; } diff --git a/src/main/java/rip/athena/client/gui/clickgui/components/mods/MenuModKeybind.java b/src/main/java/rip/athena/client/gui/clickgui/components/mods/MenuModKeybind.java index 5a3be8cf..34297f61 100644 --- a/src/main/java/rip/athena/client/gui/clickgui/components/mods/MenuModKeybind.java +++ b/src/main/java/rip/athena/client/gui/clickgui/components/mods/MenuModKeybind.java @@ -163,7 +163,7 @@ public class MenuModKeybind extends MenuComponent { GlStateManager.color(1,1,1); - DrawUtils.drawRoundedRect(x, y, x + width, y + height, 4.0f, new Color(50, 50, 50, 255).getRGB()); + DrawUtils.drawRoundedRect(x, y, x + width, y + height, 4.0f, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getSecondColor()); RoundedUtils.drawRoundedGradientOutlineCorner(x, y, x + width, y + height, 1, 12, Athena.INSTANCE.getThemeManager().getTheme().getFirstColor().getRGB(), Athena.INSTANCE.getThemeManager().getTheme().getFirstColor().getRGB(), Athena.INSTANCE.getThemeManager().getTheme().getSecondColor().getRGB(), Athena.INSTANCE.getThemeManager().getTheme().getSecondColor().getRGB()); //DrawUtils.drawRoundedRect(x + 1, y + 1, x + width - 1, y + height - 1, 4.0f, new Color(35, 35, 35, 255).getRGB()); @@ -202,7 +202,7 @@ public class MenuModKeybind extends MenuComponent { text = "BOUND: " + Keyboard.getKeyName(getBind()).toUpperCase(); } - drawText(text, x + width / 2 - getStringWidth(text) / 2, y + height / 2 - getStringHeight(text) / 2, textColor); + drawText(text, x + width / 2 - getStringWidth(text) / 2, y + height / 2 - getStringHeight(text) / 2, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); mouseDown = false; } diff --git a/src/main/java/rip/athena/client/gui/clickgui/components/mods/MenuModList.java b/src/main/java/rip/athena/client/gui/clickgui/components/mods/MenuModList.java index 38d15bb0..2db40c13 100644 --- a/src/main/java/rip/athena/client/gui/clickgui/components/mods/MenuModList.java +++ b/src/main/java/rip/athena/client/gui/clickgui/components/mods/MenuModList.java @@ -114,7 +114,7 @@ public class MenuModList extends MenuDropdown { GlStateManager.color(1,1,1); - RoundedUtils.drawRoundedRect(x, y, x + width, y + height, 12.0f, new Color(50, 50, 50, 255).getRGB()); + RoundedUtils.drawRoundedRect(x, y, x + width, y + height, 12.0f, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getSecondColor()); //RoundedUtils.drawRoundedRect(x + 1, y + 1, x + width - 1, y + height - 1, 12.0f, new Color(35, 35, 35, 255).getRGB()); RoundedUtils.drawRoundedGradientOutlineCorner(x, y, x + width, y + height, 1, 12, Athena.INSTANCE.getThemeManager().getTheme().getFirstColor().getRGB(), Athena.INSTANCE.getThemeManager().getTheme().getFirstColor().getRGB(), Athena.INSTANCE.getThemeManager().getTheme().getSecondColor().getRGB(), Athena.INSTANCE.getThemeManager().getTheme().getSecondColor().getRGB()); @@ -135,7 +135,7 @@ public class MenuModList extends MenuDropdown { //rip.athena.client.gui.framework.draw.DrawImpl.drawRect(x, y, cursorWidth, height + 1, popupColor); //rip.athena.client.gui.framework.draw.DrawImpl.drawRect(x + 1, y + 1, cursorWidth - 2, height - 1, backgroundColor); - drawText("<", x + (cursorWidth / 2) - getStringWidth("<") / 2, y + height / 2 - getStringHeight("<") / 2, textColor); + drawText("<", x + (cursorWidth / 2) - getStringWidth("<") / 2, y + height / 2 - getStringHeight("<") / 2, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); if(mouseX < x + width - cursorWidth - 1) { backgroundColor = defBg; @@ -145,10 +145,10 @@ public class MenuModList extends MenuDropdown { //rip.athena.client.gui.framework.draw.DrawImpl.drawRect(x + width - cursorWidth, y, cursorWidth, height + 1, popupColor); //rip.athena.client.gui.framework.draw.DrawImpl.drawRect(x + width - cursorWidth + 1, y + 1, cursorWidth - 2, height - 1, backgroundColor); - drawText(">", x + width - cursorWidth + 3 + (cursorWidth / 2) - getStringWidth(">") / 2, y + height / 2 - getStringHeight(">") / 2, textColor); + drawText(">", x + width - cursorWidth + 3 + (cursorWidth / 2) - getStringWidth(">") / 2, y + height / 2 - getStringHeight(">") / 2, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); String text = values[index].toUpperCase(); - drawText(text, x + width / 2 - getStringWidth(text) / 2, y + height / 2 - getStringHeight(text) / 2, textColor); + drawText(text, x + width / 2 - getStringWidth(text) / 2, y + height / 2 - getStringHeight(text) / 2, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); mouseDown = false; } diff --git a/src/main/java/rip/athena/client/gui/clickgui/components/mods/MenuModSlider.java b/src/main/java/rip/athena/client/gui/clickgui/components/mods/MenuModSlider.java index c1626260..2dec564d 100644 --- a/src/main/java/rip/athena/client/gui/clickgui/components/mods/MenuModSlider.java +++ b/src/main/java/rip/athena/client/gui/clickgui/components/mods/MenuModSlider.java @@ -75,8 +75,8 @@ public class MenuModSlider extends MenuSlider { GlStateManager.color(1,1,1); - RoundedUtils.drawRoundedRect(x, y, x + width, y + height, 12.0f, new Color(50, 50, 50, 255).getRGB()); - RoundedUtils.drawRoundedRect(x + 1, y + 1, x + width - 1, y + height - 1, 12.0f, new Color(35, 35, 35, 255).getRGB()); + RoundedUtils.drawRoundedRect(x, y, x + width, y + height, 12.0f, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getSecondColor()); + RoundedUtils.drawRoundedRect(x + 1, y + 1, x + width - 1, y + height - 1, 12.0f, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getFirstColor()); /*drawHorizontalLine(x, y, width + 1, 1, lineColor); drawVerticalLine(x, y + 1, height - 1, 1, lineColor); @@ -112,7 +112,7 @@ public class MenuModSlider extends MenuSlider { } rip.athena.client.gui.framework.draw.DrawImpl.drawRect(x + cursorPos - cursorWidth, y, cursorWidth + 2, height + 1, linePopupColor); - rip.athena.client.gui.framework.draw.DrawImpl.drawRect(x + 1 + cursorPos - cursorWidth, y + 1, cursorWidth, height - 1, backgroundPopupColor); + rip.athena.client.gui.framework.draw.DrawImpl.drawRect(x + 1 + cursorPos - cursorWidth, y + 1, cursorWidth, height - 1, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); drawText(">", x + 3 + cursorPos - (cursorWidth / 2) - getStringWidth(">") / 2, y + height / 2 - getStringHeight(">") / 2, textColor); if(wantToDrag || (mouseDown && lastState == ButtonState.HOVER)) { if(mouseDown) { diff --git a/src/main/java/rip/athena/client/gui/clickgui/components/mods/ModCategoryButton.java b/src/main/java/rip/athena/client/gui/clickgui/components/mods/ModCategoryButton.java index 7d2dab44..ffdf9d1a 100644 --- a/src/main/java/rip/athena/client/gui/clickgui/components/mods/ModCategoryButton.java +++ b/src/main/java/rip/athena/client/gui/clickgui/components/mods/ModCategoryButton.java @@ -73,9 +73,13 @@ public class ModCategoryButton extends MenuButton { } if(Settings.customGuiFont) { - rip.athena.client.utils.font.FontManager.getNunitoBold(25).drawString(text, x + (width / 2 - getStringWidth(text) / 2), y + height / 2 - (getStringHeight(text) / 2) - 3, textColor); + if(text.equalsIgnoreCase("EDIT HUD")) { + rip.athena.client.utils.font.FontManager.getNunitoBold(25).drawString(text, x + (width / 2 - getStringWidth(text) / 2) - 7, y + height / 2 - (getStringHeight(text) / 2) - 3, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); + } else { + rip.athena.client.utils.font.FontManager.getNunitoBold(25).drawString(text, x + (width / 2 - getStringWidth(text) / 2), y + height / 2 - (getStringHeight(text) / 2) - 3, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); + } } else { - Minecraft.getMinecraft().fontRendererObj.drawString(text, x + (width / 2 - getStringWidth(text) / 2), y + height / 2 - (getStringHeight(text) / 2) - 3, textColor); + Minecraft.getMinecraft().fontRendererObj.drawString(text, x + (width / 2 - getStringWidth(text) / 2), y + height / 2 - (getStringHeight(text) / 2) - 3, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); } if(text.equalsIgnoreCase("EDIT HUD")) { diff --git a/src/main/java/rip/athena/client/gui/clickgui/components/mods/ModScrollPane.java b/src/main/java/rip/athena/client/gui/clickgui/components/mods/ModScrollPane.java index f2572883..e8ae58d5 100644 --- a/src/main/java/rip/athena/client/gui/clickgui/components/mods/ModScrollPane.java +++ b/src/main/java/rip/athena/client/gui/clickgui/components/mods/ModScrollPane.java @@ -237,7 +237,7 @@ public class ModScrollPane extends MenuScrollPane { //rip.athena.client.gui.framework.draw.DrawImpl.drawRect(scrollerX, y + 1, scrollerWidth, scrollerHeight + 2, getColor(DrawType.LINE, ButtonState.NORMAL)); //rip.athena.client.gui.framework.draw.DrawImpl.drawRect(scrollerX + 1, y + 2, scrollerWidth - 2, scrollerHeight, getColor(DrawType.BACKGROUND, ButtonState.NORMAL)); - RoundedUtils.drawRoundedRect(scrollerX + 2, y + 2, scrollerX + scrollerWidth - 2, y + scrollerHeight, 6, getColor(DrawType.BACKGROUND, ButtonState.NORMAL)); + RoundedUtils.drawRoundedRect(scrollerX + 2, y + 2, scrollerX + scrollerWidth - 2, y + scrollerHeight, 6, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getSecondColor()); //RoundedUtils.drawRoundedRect(scrollerX - 3, newY - 3, scrollerWidth + 6, newSize + 6, 12, -1); diff --git a/src/main/java/rip/athena/client/gui/clickgui/components/mods/ModTextbox.java b/src/main/java/rip/athena/client/gui/clickgui/components/mods/ModTextbox.java index dbde667f..aeefaed8 100644 --- a/src/main/java/rip/athena/client/gui/clickgui/components/mods/ModTextbox.java +++ b/src/main/java/rip/athena/client/gui/clickgui/components/mods/ModTextbox.java @@ -11,6 +11,7 @@ import org.lwjgl.input.Keyboard; import rip.athena.client.gui.clickgui.IngameMenu; import rip.athena.client.modules.impl.other.Settings; import rip.athena.client.utils.render.DrawUtils; +import rip.athena.client.utils.render.RoundedUtils; import java.awt.*; @@ -63,9 +64,9 @@ public class ModTextbox extends MenuTextField { GlStateManager.color(1, 1,1); - DrawUtils.drawRoundedRect(x - 4, y - 4, x + width + 5, y + height + 5, 4, 83886080); - DrawUtils.drawRoundedRect(x - 3, y - 3, x + width + 4, y + height + 4, 4, 369098752); - DrawUtils.drawRoundedRect(x - 2, y - 2, x + width + 3, y + height + 3, 4, 587202560); + RoundedUtils.drawRoundedRect(x - 4, y - 4, x + width + 5, y + height + 5, 12, 83886080); + RoundedUtils.drawRoundedRect(x - 3, y - 3, x + width + 4, y + height + 4, 12, 369098752); + RoundedUtils.drawRoundedRect(x - 2, y - 2, x + width + 3, y + height + 3, 12, 587202560); //DrawUtils.drawRoundedRect(x - 1, y - 1, x + width + 2, y + height + 2, 10, lineColor); //DrawUtils.drawRoundedRect(x, y, x + width + 1, y + height + 1, 10, lineColor); diff --git a/src/main/java/rip/athena/client/gui/clickgui/components/mods/ModsButton.java b/src/main/java/rip/athena/client/gui/clickgui/components/mods/ModsButton.java index 4cea4552..ddb86994 100644 --- a/src/main/java/rip/athena/client/gui/clickgui/components/mods/ModsButton.java +++ b/src/main/java/rip/athena/client/gui/clickgui/components/mods/ModsButton.java @@ -117,7 +117,7 @@ public class ModsButton extends MenuButton { GlStateManager.color(1,1,1); - RoundedUtils.drawRoundedRect(x, y, x + width, y + height, 12.0f, new Color(50, 50, 50, 255).getRGB()); + RoundedUtils.drawRoundedRect(x, y, x + width, y + height, 12.0f, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getSecondColor()); RoundedUtils.drawRoundedGradientOutlineCorner(x, y, x + width, y + height, 1, 12, Athena.INSTANCE.getThemeManager().getTheme().getFirstColor().getRGB(), Athena.INSTANCE.getThemeManager().getTheme().getFirstColor().getRGB(), Athena.INSTANCE.getThemeManager().getTheme().getSecondColor().getRGB(), Athena.INSTANCE.getThemeManager().getTheme().getSecondColor().getRGB()); //RoundedUtils.drawRoundedRect(x + 1, y + 1, x + width - 1, y + height - 1, 12.0f, new Color(35, 35, 35, 255).getRGB()); @@ -128,9 +128,9 @@ public class ModsButton extends MenuButton { drawVerticalLine(x + width, y + 1, height - 1, 1, lineColor);*/ if(Settings.customGuiFont) { - rip.athena.client.utils.font.FontManager.getProductSansRegular(30).drawString(text, x + (width / 2 - getStringWidth(text) / 2), y + height / 2 - (getStringHeight(text) / 2), textColor); + rip.athena.client.utils.font.FontManager.getProductSansRegular(30).drawString(text, x + (width / 2 - getStringWidth(text) / 2), y + height / 2 - (getStringHeight(text) / 2), Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); } else { - Minecraft.getMinecraft().fontRendererObj.drawString(text, x + (width / 2 - getStringWidth(text) / 2), y + height / 2 - (getStringHeight(text) / 2), textColor); + Minecraft.getMinecraft().fontRendererObj.drawString(text, x + (width / 2 - getStringWidth(text) / 2), y + height / 2 - (getStringHeight(text) / 2), Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); } mouseDown = false; } diff --git a/src/main/java/rip/athena/client/gui/clickgui/components/mods/ModuleBox.java b/src/main/java/rip/athena/client/gui/clickgui/components/mods/ModuleBox.java index 7a19413a..2de1f91c 100644 --- a/src/main/java/rip/athena/client/gui/clickgui/components/mods/ModuleBox.java +++ b/src/main/java/rip/athena/client/gui/clickgui/components/mods/ModuleBox.java @@ -182,18 +182,18 @@ public class ModuleBox extends MenuComponent { GlStateManager.color(1,1,1); - RoundedUtils.drawRoundedRect(x, y, x + width, y + height, 26.0f, new Color(50,50,50,255).getRGB()); - RoundedUtils.drawRoundedRect(x + 1, y + 1, x + width - 1, y + height - 1, 26.0f, new Color(35,35,35,255).getRGB()); + 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()); int yPos = y + (height / 2) - tHeight / 2 + 10; for (String line : lines) { if(Settings.customGuiFont) { - rip.athena.client.utils.font.FontManager.getNunitoBold(30).drawString(line, x + (float) width / 2 - (double) rip.athena.client.utils.font.FontManager.getNunitoBold(30).width(line) / 2, yPos, textColor); + rip.athena.client.utils.font.FontManager.getNunitoBold(30).drawString(line, x + (float) width / 2 - (double) rip.athena.client.utils.font.FontManager.getNunitoBold(30).width(line) / 2, yPos, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); //FontManager.baloo30.drawString(line, x + (float) width / 2 - FontManager.baloo30.getStringWidth(line) / 2, yPos, textColor); yPos += FontManager.baloo30.getHeight(line); } else { - Minecraft.getMinecraft().fontRendererObj.drawString(line, (int) (x + (float) width / 2 - Minecraft.getMinecraft().fontRendererObj.getStringWidth(line) / 2), yPos, textColor); + Minecraft.getMinecraft().fontRendererObj.drawString(line, (int) (x + (float) width / 2 - Minecraft.getMinecraft().fontRendererObj.getStringWidth(line) / 2), yPos, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); yPos += Minecraft.getMinecraft().fontRendererObj.FONT_HEIGHT; } } @@ -215,10 +215,10 @@ public class ModuleBox extends MenuComponent { String text = module.isToggled() ? "ENABLED" : "DISABLED"; if(Settings.customGuiFont) { - rip.athena.client.utils.font.FontManager.getNunitoBold(25).drawString(text, x + (float) width / 2 - (double) rip.athena.client.utils.font.FontManager.getNunitoBold(25).width(text) / 2, y + height - 10 - 15, -1); + rip.athena.client.utils.font.FontManager.getNunitoBold(25).drawString(text, x + (float) width / 2 - (double) rip.athena.client.utils.font.FontManager.getNunitoBold(25).width(text) / 2, y + height - 10 - 15, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); //rip.athena.client.utils.font.FontManager.getProductSansRegular(30).drawString(text, x + (float) width / 2 - rip.athena.client.utils.font.FontManager.getProductSansRegular(30).width(text) / 2, y + height - 10 - 15, -1); } else { - Minecraft.getMinecraft().fontRendererObj.drawString(text, (int) (x + (float) width / 2 - Minecraft.getMinecraft().fontRendererObj.getStringWidth(text) / 2), y + height - 10 - 15, -1); + Minecraft.getMinecraft().fontRendererObj.drawString(text, (int) (x + (float) width / 2 - Minecraft.getMinecraft().fontRendererObj.getStringWidth(text) / 2), y + height - 10 - 15, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); } if (!module.getEntries().isEmpty()) { drawColor = defaultColor; diff --git a/src/main/java/rip/athena/client/gui/clickgui/components/mods/SearchTextfield.java b/src/main/java/rip/athena/client/gui/clickgui/components/mods/SearchTextfield.java index 7a0c8c41..ec228c72 100644 --- a/src/main/java/rip/athena/client/gui/clickgui/components/mods/SearchTextfield.java +++ b/src/main/java/rip/athena/client/gui/clickgui/components/mods/SearchTextfield.java @@ -162,9 +162,9 @@ public class SearchTextfield extends MenuTextField { } if(Settings.customGuiFont) { - rip.athena.client.utils.font.FontManager.getNunito(20).drawString(textToDraw, x + 10 + minOffset + xAdd, y + 2 + (float) height / 2 - (float) (int) rip.athena.client.utils.font.FontManager.getNunito(20).height() / 2, textColor); + rip.athena.client.utils.font.FontManager.getNunito(20).drawString(textToDraw, x + 10 + minOffset + xAdd, y + 2 + (float) height / 2 - (float) (int) rip.athena.client.utils.font.FontManager.getNunito(20).height() / 2, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); } else { - Minecraft.getMinecraft().fontRendererObj.drawString(textToDraw, x + 10 + minOffset + xAdd, (int) (y + (float) height / 2 - (float) (int) Minecraft.getMinecraft().fontRendererObj.FONT_HEIGHT / 2), textColor); + Minecraft.getMinecraft().fontRendererObj.drawString(textToDraw, x + 10 + minOffset + xAdd, (int) (y + (float) height / 2 - (float) (int) Minecraft.getMinecraft().fontRendererObj.FONT_HEIGHT / 2), Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); } if(lastState == ButtonState.HOVER && mouseDown) { focused = true; diff --git a/src/main/java/rip/athena/client/gui/clickgui/components/themes/SimpleGradientButton.java b/src/main/java/rip/athena/client/gui/clickgui/components/themes/accent/SimpleGradientButton.java similarity index 93% rename from src/main/java/rip/athena/client/gui/clickgui/components/themes/SimpleGradientButton.java rename to src/main/java/rip/athena/client/gui/clickgui/components/themes/accent/SimpleGradientButton.java index 5745ec35..fe6067e9 100644 --- a/src/main/java/rip/athena/client/gui/clickgui/components/themes/SimpleGradientButton.java +++ b/src/main/java/rip/athena/client/gui/clickgui/components/themes/accent/SimpleGradientButton.java @@ -1,16 +1,14 @@ -package rip.athena.client.gui.clickgui.components.themes; +package rip.athena.client.gui.clickgui.components.themes.accent; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.GlStateManager; -import rip.athena.client.Athena; import rip.athena.client.font.FontManager; import rip.athena.client.gui.clickgui.IngameMenu; import rip.athena.client.gui.framework.components.MenuButton; import rip.athena.client.gui.framework.draw.ButtonState; import rip.athena.client.gui.framework.draw.DrawType; import rip.athena.client.modules.impl.other.Settings; -import rip.athena.client.theme.Theme; -import rip.athena.client.utils.render.DrawUtils; +import rip.athena.client.theme.impl.AccentTheme; import rip.athena.client.utils.render.RoundedUtils; import java.awt.*; @@ -24,7 +22,7 @@ import java.awt.*; public class SimpleGradientButton extends MenuButton { protected boolean leftColorChange; - public SimpleGradientButton(Theme theme, int x, int y, int width, int height, boolean leftColorChange) { + public SimpleGradientButton(AccentTheme theme, int x, int y, int width, int height, boolean leftColorChange) { super(theme, x, y, width, height); this.leftColorChange = leftColorChange; } diff --git a/src/main/java/rip/athena/client/gui/clickgui/components/themes/TriColorGradientButton.java b/src/main/java/rip/athena/client/gui/clickgui/components/themes/accent/TriColorGradientButton.java similarity index 94% rename from src/main/java/rip/athena/client/gui/clickgui/components/themes/TriColorGradientButton.java rename to src/main/java/rip/athena/client/gui/clickgui/components/themes/accent/TriColorGradientButton.java index e55503e4..5a5eeaed 100644 --- a/src/main/java/rip/athena/client/gui/clickgui/components/themes/TriColorGradientButton.java +++ b/src/main/java/rip/athena/client/gui/clickgui/components/themes/accent/TriColorGradientButton.java @@ -1,4 +1,4 @@ -package rip.athena.client.gui.clickgui.components.themes; +package rip.athena.client.gui.clickgui.components.themes.accent; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.GlStateManager; @@ -8,7 +8,7 @@ import rip.athena.client.gui.framework.components.MenuButton; import rip.athena.client.gui.framework.draw.ButtonState; import rip.athena.client.gui.framework.draw.DrawType; import rip.athena.client.modules.impl.other.Settings; -import rip.athena.client.theme.Theme; +import rip.athena.client.theme.impl.AccentTheme; import rip.athena.client.utils.render.RoundedUtils; import java.awt.*; @@ -22,7 +22,7 @@ import java.awt.*; public class TriColorGradientButton extends MenuButton { protected boolean leftColorChange; - public TriColorGradientButton(Theme theme, int x, int y, int width, int height, boolean leftColorChange) { + public TriColorGradientButton(AccentTheme theme, int x, int y, int width, int height, boolean leftColorChange) { super(theme, x, y, width, height); this.leftColorChange = leftColorChange; } diff --git a/src/main/java/rip/athena/client/gui/clickgui/components/themes/primary/PrimaryGradientButton.java b/src/main/java/rip/athena/client/gui/clickgui/components/themes/primary/PrimaryGradientButton.java new file mode 100644 index 00000000..01420a9e --- /dev/null +++ b/src/main/java/rip/athena/client/gui/clickgui/components/themes/primary/PrimaryGradientButton.java @@ -0,0 +1,100 @@ +package rip.athena.client.gui.clickgui.components.themes.primary; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import rip.athena.client.font.FontManager; +import rip.athena.client.gui.clickgui.IngameMenu; +import rip.athena.client.gui.framework.components.MenuButton; +import rip.athena.client.gui.framework.draw.ButtonState; +import rip.athena.client.gui.framework.draw.DrawType; +import rip.athena.client.modules.impl.other.Settings; +import rip.athena.client.theme.impl.AccentTheme; +import rip.athena.client.theme.impl.PrimaryTheme; +import rip.athena.client.utils.render.RoundedUtils; + +import java.awt.*; + +/** + * @author Athena Development + * @project Athena-Client + * @date 6/2/2023 + */ + +public class PrimaryGradientButton extends MenuButton { + protected boolean leftColorChange; + + public PrimaryGradientButton(PrimaryTheme theme, int x, int y, int width, int height, boolean leftColorChange) { + super(theme, x, y, width, height); + this.leftColorChange = leftColorChange; + } + + @Override + public void onInitColors() { + setColor(DrawType.BACKGROUND, ButtonState.NORMAL, new Color(35, 35, 35, IngameMenu.MENU_ALPHA)); + setColor(DrawType.BACKGROUND, ButtonState.ACTIVE, new Color(35, 35, 35, IngameMenu.MENU_ALPHA)); + setColor(DrawType.BACKGROUND, ButtonState.HOVER, new Color(35, 35, 35, IngameMenu.MENU_ALPHA)); + setColor(DrawType.BACKGROUND, ButtonState.HOVERACTIVE, new Color(35, 35, 35, IngameMenu.MENU_ALPHA)); + setColor(DrawType.BACKGROUND, ButtonState.DISABLED, new Color(255, 255, 255, IngameMenu.MENU_ALPHA)); + + setColor(DrawType.LINE, ButtonState.NORMAL, new Color(52, 52, 53, IngameMenu.MENU_ALPHA)); + setColor(DrawType.LINE, ButtonState.ACTIVE, new Color(52, 52, 53, IngameMenu.MENU_ALPHA)); + setColor(DrawType.LINE, ButtonState.HOVER, new Color(52, 52, 53, IngameMenu.MENU_ALPHA)); + setColor(DrawType.LINE, ButtonState.HOVERACTIVE, new Color(52, 52, 53, IngameMenu.MENU_ALPHA)); + setColor(DrawType.LINE, ButtonState.DISABLED, new Color(255, 255, 255, IngameMenu.MENU_ALPHA)); + setColor(DrawType.LINE, ButtonState.POPUP, new Color(28, 28, 30, IngameMenu.MENU_ALPHA)); + + setColor(DrawType.TEXT, ButtonState.NORMAL, new Color(56, 56, 58, IngameMenu.MENU_ALPHA)); + setColor(DrawType.TEXT, ButtonState.ACTIVE, new Color(90, 90, 94, IngameMenu.MENU_ALPHA)); + setColor(DrawType.TEXT, ButtonState.HOVER, new Color(75, 75, 78, IngameMenu.MENU_ALPHA)); + setColor(DrawType.TEXT, ButtonState.HOVERACTIVE, new Color(100, 100, 104, IngameMenu.MENU_ALPHA)); + setColor(DrawType.TEXT, ButtonState.DISABLED, new Color(255, 255, 255, IngameMenu.MENU_ALPHA)); + } + + @Override + public void onRender() { + int x = this.getRenderX(); + int y = this.getRenderY(); + int mouseX = parent.getMouseX(); + int width = this.width; + + int backgroundColor = getColor(DrawType.BACKGROUND, lastState); + int lineColor = getColor(DrawType.LINE, lastState); + int textColor = getColor(DrawType.TEXT, lastState); + int linePopupColor = getColor(DrawType.LINE, ButtonState.POPUP); + + GlStateManager.color(1,1,1); + //RoundedUtils.drawRoundedRect(x, y, x + width, y + height, 12.0f, new Color(50,50,50,255).getRGB()); + + RoundedUtils.drawGradientRound(x, y, width, height, 6, new Color(primaryTheme.getFirstColor()), new Color(primaryTheme.getFirstColor()), new Color(primaryTheme.getSecondColor()), new Color(primaryTheme.getSecondColor())); + GlStateManager.color(1,1,1); + + mouseDown = false; + } + + @Override + public void drawText(String string, int x, int y, int color) { + if(Settings.customGuiFont) { + rip.athena.client.utils.font.FontManager.getProductSansRegular(30).drawString(string, x - 3, y, color); + } else { + Minecraft.getMinecraft().fontRendererObj.drawString(string, x, y, color); + } + } + + @Override + public int getStringWidth(String string) { + if(Settings.customGuiFont) { + return (int) rip.athena.client.utils.font.FontManager.getProductSansRegular(30).width(string) - 1; + } else { + return Minecraft.getMinecraft().fontRendererObj.getStringWidth(string); + } + } + + @Override + public int getStringHeight(String string) { + if(Settings.customGuiFont) { + return (int) FontManager.baloo17.getHeight(string) + 1; + } else { + return Minecraft.getMinecraft().fontRendererObj.FONT_HEIGHT; + } + } +} diff --git a/src/main/java/rip/athena/client/gui/clickgui/pages/MacrosPage.java b/src/main/java/rip/athena/client/gui/clickgui/pages/MacrosPage.java index 4ec231c1..90acbfcd 100644 --- a/src/main/java/rip/athena/client/gui/clickgui/pages/MacrosPage.java +++ b/src/main/java/rip/athena/client/gui/clickgui/pages/MacrosPage.java @@ -165,42 +165,42 @@ public class MacrosPage extends Page { drawVerticalLine(menu.getX() + 215, y + height - 30, height + 432, 3, new Color(32, 32, 32, 225).getRGB()); if(Settings.customGuiFont) { - FontManager.getNunitoBold(30).drawString("MACROS", menu.getX() + 235, menu.getY() + 80, IngameMenu.MENU_HEADER_TEXT_COLOR); + FontManager.getNunitoBold(30).drawString("MACROS", menu.getX() + 235, menu.getY() + 80, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); } else { - Minecraft.getMinecraft().fontRendererObj.drawString("MACROS", menu.getX() + 235, menu.getY() + 80, IngameMenu.MENU_HEADER_TEXT_COLOR); + Minecraft.getMinecraft().fontRendererObj.drawString("MACROS", 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); - rip.athena.client.gui.framework.draw.DrawImpl.drawRect(menu.getX() + menu.getWidth() - width, menu.getY() + 58, width, menu.getHeight() - 58, MENU_SIDE_BG_COLOR); + rip.athena.client.gui.framework.draw.DrawImpl.drawRect(menu.getX() + menu.getWidth() - width, menu.getY() + 58, width, menu.getHeight() - 58, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getFirstColor()); - rip.athena.client.gui.framework.draw.DrawImpl.drawRect(menu.getX() + menu.getWidth() - width, menu.getY() + 58, width, height + 1, ModCategoryButton.MAIN_COLOR); + rip.athena.client.gui.framework.draw.DrawImpl.drawRect(menu.getX() + menu.getWidth() - width, menu.getY() + 58, width, height + 1, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getFirstColor()); drawShadowDown(menu.getX() + menu.getWidth() - width, y + height, width); if(Settings.customGuiFont) { - rip.athena.client.utils.font.FontManager.getProductSansRegular(30).drawString("ADD NEW MACRO", menu.getX() + menu.getWidth() - width / 2 - (double) FontManager.getProductSansRegular(30).width("ADD NEW MACRO") / 2, y + height / 2 - Minecraft.getMinecraft().fontRendererObj.FONT_HEIGHT / 2, IngameMenu.MENU_HEADER_TEXT_COLOR); + rip.athena.client.utils.font.FontManager.getProductSansRegular(30).drawString("ADD NEW MACRO", menu.getX() + menu.getWidth() - width / 2 - (double) FontManager.getProductSansRegular(30).width("ADD NEW MACRO") / 2, y + height / 2 - Minecraft.getMinecraft().fontRendererObj.FONT_HEIGHT / 2, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); } else { - Minecraft.getMinecraft().fontRendererObj.drawString("ADD NEW MACRO", menu.getX() + menu.getWidth() - width / 2 - Minecraft.getMinecraft().fontRendererObj.getStringWidth("ADD NEW MACRO") / 2, y + height / 2 - Minecraft.getMinecraft().fontRendererObj.FONT_HEIGHT / 2, IngameMenu.MENU_HEADER_TEXT_COLOR); + Minecraft.getMinecraft().fontRendererObj.drawString("ADD NEW MACRO", menu.getX() + menu.getWidth() - width / 2 - Minecraft.getMinecraft().fontRendererObj.getStringWidth("ADD NEW MACRO") / 2, y + height / 2 - Minecraft.getMinecraft().fontRendererObj.FONT_HEIGHT / 2, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); } drawShadowDown(menu.getX() + menu.getWidth() - width, y - 1, width); y += 60; if(Settings.customGuiFont) { - rip.athena.client.utils.font.FontManager.getProductSansRegular(30).drawString("ENTER NAME", x, y, IngameMenu.MENU_HEADER_TEXT_COLOR); + rip.athena.client.utils.font.FontManager.getProductSansRegular(30).drawString("ENTER NAME", x, y, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); } else { - 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; if(Settings.customGuiFont) { - rip.athena.client.utils.font.FontManager.getProductSansRegular(30).drawString("ENTER COMMAND LINE", x, y, IngameMenu.MENU_HEADER_TEXT_COLOR); + rip.athena.client.utils.font.FontManager.getProductSansRegular(30).drawString("ENTER COMMAND LINE", x, y, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); } else { - Minecraft.getMinecraft().fontRendererObj.drawString("ENTER COMMAND LINE", x, y, IngameMenu.MENU_HEADER_TEXT_COLOR); + Minecraft.getMinecraft().fontRendererObj.drawString("ENTER COMMAND LINE", x, y, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); } y += 70; if(Settings.customGuiFont) { - rip.athena.client.utils.font.FontManager.getProductSansRegular(30).drawString("ADD KEYBIND", x, y, IngameMenu.MENU_HEADER_TEXT_COLOR); + rip.athena.client.utils.font.FontManager.getProductSansRegular(30).drawString("ADD KEYBIND", x, y, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); } else { - Minecraft.getMinecraft().fontRendererObj.drawString("ADD KEYBIND", x, y, IngameMenu.MENU_HEADER_TEXT_COLOR); + Minecraft.getMinecraft().fontRendererObj.drawString("ADD KEYBIND", x, y, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); } } diff --git a/src/main/java/rip/athena/client/gui/clickgui/pages/ModsPage.java b/src/main/java/rip/athena/client/gui/clickgui/pages/ModsPage.java index c6bd4414..702a2a8a 100644 --- a/src/main/java/rip/athena/client/gui/clickgui/pages/ModsPage.java +++ b/src/main/java/rip/athena/client/gui/clickgui/pages/ModsPage.java @@ -86,10 +86,10 @@ public class ModsPage extends Page { if (modCategory != null) { if (Settings.customGuiFont) { - rip.athena.client.utils.font.FontManager.getProductSansRegular(30).drawString(activeModule != null ? activeModule.getName().toUpperCase() : modCategory.getText(), menu.getX() + 255, menu.getY() + 20, IngameMenu.MENU_HEADER_TEXT_COLOR); - rip.athena.client.utils.font.FontManager.getProductSansRegular(20).drawString("Configure build-in client mods", menu.getX() + 255, menu.getY() + 35, IngameMenu.MENU_HEADER_TEXT_COLOR); + rip.athena.client.utils.font.FontManager.getProductSansRegular(30).drawString(activeModule != null ? activeModule.getName().toUpperCase() : modCategory.getText(), menu.getX() + 255, menu.getY() + 20, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); + rip.athena.client.utils.font.FontManager.getProductSansRegular(20).drawString("Configure build-in client mods", menu.getX() + 255, menu.getY() + 35, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); } else { - mc.fontRendererObj.drawString(activeModule != null ? "SETTINGS | " : modCategory.getText(), menu.getX() + 255, menu.getY() + 25, IngameMenu.MENU_HEADER_TEXT_COLOR); + mc.fontRendererObj.drawString(activeModule != null ? "SETTINGS | " : modCategory.getText(), menu.getX() + 255, menu.getY() + 25, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); } if (activeModule != null) { int offset = (int) rip.athena.client.utils.font.FontManager.getProductSansRegular(30).width("SETTINGS | "); @@ -105,8 +105,8 @@ public class ModsPage extends Page { drawShadowDown(menu.getX() + 255, menu.getY() + menu.getHeight() - 27 - 5, menu.getWidth() - 286); drawShadowRight(menu.getX() + menu.getWidth() - 33, menu.getY() + 110 + 25, menu.getHeight() - 110 - 50 - 5); - rip.athena.client.gui.framework.draw.DrawImpl.drawRect(menu.getX() + 255, menu.getY() + 110 + 25, menu.getWidth() - 255 - 31, menu.getHeight() - 110 - 50 - 5, MENU_BG_COLOR_MOD_BORDER); - rip.athena.client.gui.framework.draw.DrawImpl.drawRect(menu.getX() + 255 + 1, menu.getY() + 110 + 25 + 1, menu.getWidth() - 255 - 33, menu.getHeight() - 110 - 52 - 5, MENU_BG_COLOR_MOD); + rip.athena.client.gui.framework.draw.DrawImpl.drawRect(menu.getX() + 255, menu.getY() + 110 + 25, menu.getWidth() - 255 - 31, menu.getHeight() - 110 - 50 - 5, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getSecondColor()); + rip.athena.client.gui.framework.draw.DrawImpl.drawRect(menu.getX() + 255 + 1, menu.getY() + 110 + 25 + 1, menu.getWidth() - 255 - 33, menu.getHeight() - 110 - 52 - 5, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getFirstColor()); if (activeModule instanceof Crosshair) { Crosshair crosshair = (Crosshair) activeModule; diff --git a/src/main/java/rip/athena/client/gui/clickgui/pages/ThemesPage.java b/src/main/java/rip/athena/client/gui/clickgui/pages/ThemesPage.java index c4b3ac0f..084b4263 100644 --- a/src/main/java/rip/athena/client/gui/clickgui/pages/ThemesPage.java +++ b/src/main/java/rip/athena/client/gui/clickgui/pages/ThemesPage.java @@ -1,38 +1,20 @@ package rip.athena.client.gui.clickgui.pages; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiScreen; -import org.apache.commons.lang3.RandomStringUtils; -import org.json.JSONException; import rip.athena.client.Athena; -import rip.athena.client.config.save.Config; import rip.athena.client.gui.clickgui.IngameMenu; import rip.athena.client.gui.clickgui.Page; -import rip.athena.client.gui.clickgui.components.macros.MacroButton; -import rip.athena.client.gui.clickgui.components.macros.MacroTextfield; -import rip.athena.client.gui.clickgui.components.macros.SimpleTextButton; -import rip.athena.client.gui.clickgui.components.mods.ModCategoryButton; import rip.athena.client.gui.clickgui.components.mods.ModScrollPane; -import rip.athena.client.gui.clickgui.components.profiles.ProfilesBase; -import rip.athena.client.gui.clickgui.components.profiles.ProfilesBlueButton; -import rip.athena.client.gui.clickgui.components.themes.SimpleGradientButton; -import rip.athena.client.gui.clickgui.components.themes.TriColorGradientButton; +import rip.athena.client.gui.clickgui.components.themes.accent.SimpleGradientButton; +import rip.athena.client.gui.clickgui.components.themes.accent.TriColorGradientButton; +import rip.athena.client.gui.clickgui.components.themes.primary.PrimaryGradientButton; import rip.athena.client.gui.framework.Menu; -import rip.athena.client.gui.framework.TextPattern; -import rip.athena.client.gui.framework.draw.DrawImpl; import rip.athena.client.modules.impl.other.Settings; -import rip.athena.client.requests.ContentType; -import rip.athena.client.requests.WebRequest; -import rip.athena.client.requests.WebRequestResult; -import rip.athena.client.theme.Theme; -import rip.athena.client.utils.font.FontManager; -import rip.athena.client.utils.render.DrawUtils; +import rip.athena.client.theme.impl.AccentTheme; +import rip.athena.client.theme.impl.PrimaryTheme; import rip.athena.client.utils.render.RoundedUtils; import java.awt.*; -import java.io.IOException; -import java.net.URLEncoder; -import java.util.NoSuchElementException; /** * @author Athena Development @@ -42,8 +24,9 @@ import java.util.NoSuchElementException; public class ThemesPage extends Page { + private ModScrollPane scrollPane2; private ModScrollPane scrollPane; - private Theme activeTheme; + private AccentTheme activeTheme; public ThemesPage(Minecraft mc, Menu menu, IngameMenu parent) { super(mc, menu, parent); @@ -53,7 +36,8 @@ public class ThemesPage extends Page { public void onInit() { int width = 300; - scrollPane = new ModScrollPane(260, 140, menu.getWidth() - width - 10 * 2, menu.getHeight() - 141, false); + scrollPane2 = new ModScrollPane(260, 130, menu.getWidth() - width - 10, menu.getHeight() - 341, false); + scrollPane = new ModScrollPane(260, 225, menu.getWidth() - width - 10 * 2, menu.getHeight() - 241, false); populateScrollPane(); } @@ -64,18 +48,20 @@ public class ThemesPage extends Page { int height = 32; if(Settings.customGuiFont) { - rip.athena.client.utils.font.FontManager.getNunitoBold(30).drawString("THEMES | " + Athena.INSTANCE.getThemeManager().getTheme().getTheme(), menu.getX() + 235, menu.getY() + 80, IngameMenu.MENU_HEADER_TEXT_COLOR); + rip.athena.client.utils.font.FontManager.getNunitoBold(30).drawString("THEMES | " + Athena.INSTANCE.getThemeManager().getTheme() + ", " + Athena.INSTANCE.getThemeManager().getPrimaryTheme(), menu.getX() + 235, menu.getY() + 80, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); } else { - Minecraft.getMinecraft().fontRendererObj.drawString("THEMES", menu.getX() + 235, menu.getY() + 80, IngameMenu.MENU_HEADER_TEXT_COLOR); + Minecraft.getMinecraft().fontRendererObj.drawString("THEMES", menu.getX() + 235, menu.getY() + 80, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); } - RoundedUtils.drawGradientRound(menu.getX() + 275, menu.getY() + 110, 85 + menu.getWidth() / 2, 20, 6, Athena.INSTANCE.getThemeManager().getTheme().getFirstColor(), Athena.INSTANCE.getThemeManager().getTheme().getFirstColor(), Athena.INSTANCE.getThemeManager().getTheme().getSecondColor(), Athena.INSTANCE.getThemeManager().getTheme().getSecondColor()); + RoundedUtils.drawGradientRound(menu.getX() + 295, menu.getY() + 110, menu.getWidth() / 4, 20, 6, Athena.INSTANCE.getThemeManager().getTheme().getFirstColor(), Athena.INSTANCE.getThemeManager().getTheme().getFirstColor(), Athena.INSTANCE.getThemeManager().getTheme().getSecondColor(), Athena.INSTANCE.getThemeManager().getTheme().getSecondColor()); + RoundedUtils.drawGradientRound(menu.getX() + 595, menu.getY() + 110, menu.getWidth() / 4, 20, 6, new Color(Athena.INSTANCE.getThemeManager().getPrimaryTheme().getFirstColor()), new Color(Athena.INSTANCE.getThemeManager().getPrimaryTheme().getFirstColor()), new Color(Athena.INSTANCE.getThemeManager().getPrimaryTheme().getSecondColor()), new Color(Athena.INSTANCE.getThemeManager().getPrimaryTheme().getSecondColor())); drawVerticalLine(menu.getX() + 215, y + height - 30, height + 432, 3, new Color(32, 32, 32, 225).getRGB()); } private void populateScrollPane() { + scrollPane2.getComponents().clear(); scrollPane.getComponents().clear(); int spacing = 15; @@ -84,12 +70,35 @@ public class ThemesPage extends Page { int y = spacing; int x = spacing; + int y2 = spacing; + int x2 = spacing; + int defaultX = spacing; + int defaultX2 = spacing; int width = 190; + int width2 = 190; int maxWidth = scrollPane.getWidth() - spacing * 2; + int maxWidth2 = scrollPane.getWidth() - spacing * 2; - for(Theme theme : Theme.values()) { + for(PrimaryTheme primaryTheme : PrimaryTheme.values()) { + scrollPane2.addComponent(new PrimaryGradientButton(primaryTheme, x2, y2, width2, height, false) { + @Override + public void onAction() { + setActive(false); + Athena.INSTANCE.getThemeManager().setPrimaryTheme(primaryTheme); + populateScrollPane(); + } + }); + + x2 += spacing + width2; + + if(x2 + spacing + width2 > maxWidth2) { + x2 = defaultX2; + } + } + + for(AccentTheme theme : AccentTheme.values()) { if (theme.isTriColor()) { scrollPane.addComponent(new TriColorGradientButton(theme, x, y, width, height, false) { @Override @@ -122,6 +131,7 @@ public class ThemesPage extends Page { @Override public void onLoad() { + menu.addComponent(scrollPane2); menu.addComponent(scrollPane); } diff --git a/src/main/java/rip/athena/client/gui/framework/components/MenuButton.java b/src/main/java/rip/athena/client/gui/framework/components/MenuButton.java index 3b4e4219..9e9ed551 100644 --- a/src/main/java/rip/athena/client/gui/framework/components/MenuButton.java +++ b/src/main/java/rip/athena/client/gui/framework/components/MenuButton.java @@ -4,7 +4,8 @@ import net.minecraft.client.renderer.GlStateManager; import rip.athena.client.gui.framework.MenuComponent; import rip.athena.client.gui.framework.draw.ButtonState; import rip.athena.client.gui.framework.draw.DrawType; -import rip.athena.client.theme.Theme; +import rip.athena.client.theme.impl.AccentTheme; +import rip.athena.client.theme.impl.PrimaryTheme; import java.awt.*; @@ -19,7 +20,8 @@ public class MenuButton extends MenuComponent { protected int minOffset = 2; protected boolean mouseDown = false; protected boolean active = false; - protected Theme theme; + protected AccentTheme theme; + protected PrimaryTheme primaryTheme; protected ButtonState lastState = ButtonState.NORMAL; public MenuButton(String text, int x, int y){ @@ -32,10 +34,15 @@ public class MenuButton extends MenuComponent { this.text = text; } - public MenuButton(Theme theme, int x, int y, int width, int height) { + public MenuButton(AccentTheme theme, int x, int y, int width, int height) { super(x, y, width, height); this.theme = theme; } + + public MenuButton(PrimaryTheme theme, int x, int y, int width, int height) { + super(x, y, width, height); + this.primaryTheme = theme; + } @Override public void onInitColors() { diff --git a/src/main/java/rip/athena/client/gui/framework/components/MenuCheckbox.java b/src/main/java/rip/athena/client/gui/framework/components/MenuCheckbox.java index c100abc7..9b0737f2 100644 --- a/src/main/java/rip/athena/client/gui/framework/components/MenuCheckbox.java +++ b/src/main/java/rip/athena/client/gui/framework/components/MenuCheckbox.java @@ -1,5 +1,6 @@ package rip.athena.client.gui.framework.components; +import rip.athena.client.Athena; import rip.athena.client.gui.framework.MenuPriority; import rip.athena.client.gui.framework.draw.ButtonState; import rip.athena.client.gui.framework.draw.DrawType; @@ -194,7 +195,7 @@ public class MenuCheckbox extends MenuComponent { drawVerticalLine(mouseX, mouseY + 1, tipHeight - 1, 1, lineColor); drawHorizontalLine(mouseX, mouseY + tipHeight, tipWidth + 1, 1, lineColor); drawVerticalLine(mouseX + tipWidth, mouseY + 1, tipHeight - 1, 1, lineColor); - drawText(tooltip, mouseX + minOffset, mouseY + minOffset, getColor(DrawType.TEXT, ButtonState.POPUP)); + drawText(tooltip, mouseX + minOffset, mouseY + minOffset, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); } } diff --git a/src/main/java/rip/athena/client/gui/hud/HUDEditor.java b/src/main/java/rip/athena/client/gui/hud/HUDEditor.java index f440b1d9..40a9e19a 100644 --- a/src/main/java/rip/athena/client/gui/hud/HUDEditor.java +++ b/src/main/java/rip/athena/client/gui/hud/HUDEditor.java @@ -121,13 +121,12 @@ public class HUDEditor extends MinecraftMenuImpl implements DrawImpl { int mouseX = Math.round((float)mX / value); int mouseY = Math.round((float)mY / value); - if(selected != null || !mouseDownCache) { for(HUDElement element : Athena.INSTANCE.getHudManager().getElements()) { if(!element.getParent().isToggled()) { continue; } - + int x = Math.round(element.getX() * SCALE); int y = Math.round(element.getY() * SCALE); int width = Math.round(element.getWidth() * SCALE * (float)(element.getScale())); @@ -260,10 +259,14 @@ public class HUDEditor extends MinecraftMenuImpl implements DrawImpl { if(mouseDown) { if(selected != null) { + + int maxPosX = (int) Math.round((menu.getWidth() - selected.getWidth() * selected.getScale()) / SCALE); + int maxPosY = (int) Math.round((menu.getHeight() - selected.getHeight() * selected.getScale()) / SCALE); + if(resizing) { int xDelta = mouseX / SCALE - cachedX; int yDelta = mouseY / SCALE - cachedY; - + double maxDelta = 1 + Math.max(xDelta, yDelta) / 30D; double delta = maxDelta * originalScale; @@ -277,7 +280,7 @@ public class HUDEditor extends MinecraftMenuImpl implements DrawImpl { } else if(moving) { int xDelta = mouseX / SCALE + cachedX; int yDelta = mouseY / SCALE + cachedY; - + int x = xDelta; int y = yDelta; int width = Math.round(selected.getWidth() * (float)(selected.getScale())); @@ -343,12 +346,12 @@ public class HUDEditor extends MinecraftMenuImpl implements DrawImpl { @Override public void drawText(String text, int x, int y, int color) { - rip.athena.client.utils.font.FontManager.getProductSansRegular(30).drawString(text, x, y, color); + rip.athena.client.utils.font.FontManager.getProductSansRegular(25).drawString(text, x, y, color); } @Override public int getStringWidth(String string) { - return (int) rip.athena.client.utils.font.FontManager.getProductSansRegular(30).width(string); + return (int) rip.athena.client.utils.font.FontManager.getProductSansRegular(25).width(string); } @Override diff --git a/src/main/java/rip/athena/client/gui/hud/HUDElement.java b/src/main/java/rip/athena/client/gui/hud/HUDElement.java index fbea23f2..c11e1e8d 100644 --- a/src/main/java/rip/athena/client/gui/hud/HUDElement.java +++ b/src/main/java/rip/athena/client/gui/hud/HUDElement.java @@ -1,6 +1,9 @@ package rip.athena.client.gui.hud; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.ScaledResolution; import rip.athena.client.modules.Module; +import sun.net.www.MimeEntry; /** * @author Athena Development @@ -41,7 +44,7 @@ public abstract class HUDElement implements IHUD { public void setIdentifier(String identifier) { this.identifier = identifier; } - + public int getX() { return x; } diff --git a/src/main/java/rip/athena/client/gui/menu/AthenaMenu.java b/src/main/java/rip/athena/client/gui/menu/AthenaMenu.java index 804f49f7..cd4d4365 100644 --- a/src/main/java/rip/athena/client/gui/menu/AthenaMenu.java +++ b/src/main/java/rip/athena/client/gui/menu/AthenaMenu.java @@ -1,6 +1,6 @@ package rip.athena.client.gui.menu; -import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.gui.*; import java.awt.Color; import java.awt.Desktop; @@ -24,16 +24,7 @@ import org.lwjgl.util.glu.Project; import com.google.common.collect.Lists; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiButton; -import net.minecraft.client.gui.GuiButtonLanguage; -import net.minecraft.client.gui.GuiConfirmOpenLink; -import net.minecraft.client.gui.GuiLanguage; -import net.minecraft.client.gui.GuiMultiplayer; -import net.minecraft.client.gui.GuiOptions; import net.minecraft.client.gui.GuiScreen; -import net.minecraft.client.gui.GuiSelectWorld; -import net.minecraft.client.gui.GuiYesNo; -import net.minecraft.client.gui.GuiYesNoCallback; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.renderer.Tessellator; @@ -51,6 +42,12 @@ import net.minecraft.world.storage.ISaveFormat; import net.minecraft.world.storage.WorldInfo; import rip.athena.client.Athena; import rip.athena.client.font.FontManager; +import rip.athena.client.gui.menu.altmanager.GuiAccountManager; +import rip.athena.client.gui.menu.altmanager.GuiAltManager; +import rip.athena.client.utils.MouseUtils; +import rip.athena.client.utils.animations.Animation; +import rip.athena.client.utils.animations.Direction; +import rip.athena.client.utils.animations.impl.EaseBackIn; import rip.athena.client.utils.input.InputUtils; import rip.athena.client.utils.render.DrawUtils; @@ -89,6 +86,11 @@ public class AthenaMenu extends GuiScreen implements GuiYesNoCallback private boolean field_183502_L; private GuiScreen field_183503_M; + public Animation introAnimation; + public boolean closeIntro; + + private CloseType closeType; + public AthenaMenu() { this.openGLWarning2 = field_96138_a; @@ -174,25 +176,14 @@ public class AthenaMenu extends GuiScreen implements GuiYesNoCallback public void initGui() { + if(Athena.INSTANCE.getAccountManager().isFirstLogin) { + mc.displayGuiScreen(new GuiAltManager()); + } + introAnimation = new EaseBackIn(450, 1, 1.5F); + this.viewportTexture = new DynamicTexture(256, 256); this.backgroundTexture = this.mc.getTextureManager().getDynamicTextureLocation("background", this.viewportTexture); - Calendar calendar = Calendar.getInstance(); - calendar.setTime(new Date()); - if (calendar.get(2) + 1 == 12 && calendar.get(5) == 24) - { - this.splashText = "Merry X-mas!"; - } - else if (calendar.get(2) + 1 == 1 && calendar.get(5) == 1) - { - this.splashText = "Happy new year!"; - } - else if (calendar.get(2) + 1 == 10 && calendar.get(5) == 31) - { - this.splashText = "OOoooOOOoooo! Spooky!"; - } - - int i = 24; int j = this.height / 4 + 48; if (this.mc.isDemo()) @@ -335,7 +326,7 @@ public class AthenaMenu extends GuiScreen implements GuiYesNoCallback GlStateManager.pushMatrix(); DrawUtils.drawImage(new ResourceLocation("Athena/menu/exit.png"),startX + startX - 20, 10, 10, 10); - DrawUtils.drawImage(new ResourceLocation("Athena/menu/usericon.png"), startX + startX - 45, 10, 10, 10); + DrawUtils.drawImage(new ResourceLocation("Athena/menu/usericon.png"), startX + startX - 49, 6, 18, 18); GlStateManager.popMatrix(); GlStateManager.pushMatrix(); @@ -355,6 +346,9 @@ public class AthenaMenu extends GuiScreen implements GuiYesNoCallback protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException { super.mouseClicked(mouseX, mouseY, mouseButton); + + ScaledResolution sr = new ScaledResolution(Minecraft.getMinecraft()); + int[] size = InputUtils.getWindowsSize(); int startX = size[0] / 2; int startY = size[1] / 2; @@ -367,7 +361,7 @@ public class AthenaMenu extends GuiScreen implements GuiYesNoCallback } if(isOverAccountManager) { - this.mc.displayGuiScreen(new SessionGui(this)); + this.mc.displayGuiScreen(new GuiAccountManager(this)); } diff --git a/src/main/java/rip/athena/client/gui/menu/CloseType.java b/src/main/java/rip/athena/client/gui/menu/CloseType.java new file mode 100644 index 00000000..7a1aeeba --- /dev/null +++ b/src/main/java/rip/athena/client/gui/menu/CloseType.java @@ -0,0 +1,10 @@ +package rip.athena.client.gui.menu; + +/** + * @author Athena Development + * @project Athena-Client + * @date 6/10/2023 + */ +public enum CloseType { + ACCOUNT, CREDIT; +} diff --git a/src/main/java/rip/athena/client/gui/menu/altmanager/GuiAccountManager.java b/src/main/java/rip/athena/client/gui/menu/altmanager/GuiAccountManager.java new file mode 100644 index 00000000..6c192044 --- /dev/null +++ b/src/main/java/rip/athena/client/gui/menu/altmanager/GuiAccountManager.java @@ -0,0 +1,407 @@ +package rip.athena.client.gui.menu.altmanager; + +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.gui.GuiScreen; +import net.minecraft.client.gui.ScaledResolution; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.texture.DynamicTexture; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.Session; +import org.apache.commons.lang3.RandomStringUtils; +import rip.athena.client.Athena; +import rip.athena.client.account.Account; +import rip.athena.client.account.AccountType; +import rip.athena.client.gui.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.Direction; +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.ClickEffect; +import rip.athena.client.utils.render.DrawUtils; +import rip.athena.client.utils.render.RoundedUtils; +import rip.athena.client.utils.render.StencilUtils; +import rip.athena.client.utils.time.TimerUtil; + +import javax.imageio.ImageIO; +import java.awt.*; +import java.awt.image.BufferedImage; +import java.io.File; +import java.util.*; +import java.util.List; + +/** + * @author Athena Development + * @project Athena-Client + * @date 6/10/2023 + */ +public class GuiAccountManager 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 Account 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 GuiAccountManager(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 - addY; + 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; + int y = sr.getScaledHeight() / 2 - addY; + + int width = addX * 2; + int height = addY * 2; + int offsetY = 36; + int index = 1; + + if(closeAccountManager) { + showAccountAnimation.setDirection(Direction.BACKWARDS); + if(showAccountAnimation.isDone(Direction.BACKWARDS)) { + closeAccountManager = false; + mc.displayGuiScreen(prevGuiScreen); + } + } + + if(click) { + if(clickTimer.hasTimeElapsed(150)) { + click = false; + } + }else { + clickTimer.reset(); + } + + DrawUtils.drawImage(new ResourceLocation("Athena/menu/test.png"), 0, 0, sr.getScaledWidth(), sr.getScaledHeight()); + + GlStateManager.pushMatrix(); + + RoundedUtils.drawGradientRound(x, y, width, height, 6, Athena.INSTANCE.getThemeManager().getTheme().getFirstColor(), Athena.INSTANCE.getThemeManager().getTheme().getFirstColor(), Athena.INSTANCE.getThemeManager().getTheme().getFirstColor(), Athena.INSTANCE.getThemeManager().getTheme().getSecondColor()); + RoundedUtils.drawRound(x + 1, y + 1, width - 2, height - 2, 6, new Color(Athena.INSTANCE.getThemeManager().getPrimaryTheme().getFirstColor())); + FontManager.getProductSansRegular(22).drawString("Account Manager " + Athena.INSTANCE.getAccountManager().getCurrentAccount() != null ? "Account Manager | " + Athena.INSTANCE.getAccountManager().getCurrentAccount().getUsername() : "Account Manager | No Account", x + 10, y + 10, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); + + RoundedUtils.drawGradientRound(x , y + 179, width, height - 148, 6, Athena.INSTANCE.getThemeManager().getTheme().getFirstColor(), Athena.INSTANCE.getThemeManager().getTheme().getFirstColor(), Athena.INSTANCE.getThemeManager().getTheme().getSecondColor(), Athena.INSTANCE.getThemeManager().getTheme().getSecondColor()); + RoundedUtils.drawRound(x + 1, y + 180, width - 2, height - 150, 6, new Color(Athena.INSTANCE.getThemeManager().getPrimaryTheme().getFirstColor())); + FontManager.getProductSansRegular(22).drawString("Add Account", x + 5, y + 186, Athena.INSTANCE.getThemeManager().getPrimaryTheme().getTextColor()); + + + StencilUtils.initStencilToWrite(); + RoundedUtils.drawRound(x, y + 28, width, height - 28.5F, 6, Color.WHITE); + StencilUtils.readStencilBuffer(1); + + showAddAccountAnimation.setAnimation(showAddAccount ? 0 : 140, 16); + + GLUtils.startTranslate(0, (140 - showAddAccountAnimation.getValue())); + + if(Athena.INSTANCE.getAccountManager().getAccounts().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(Account a : Athena.INSTANCE.getAccountManager().getAccounts()) { + + RoundedUtils.drawRound(x + 9, y + offsetY + scrollAnimation.getValue() - 1, width - 18, 37, 4, new Color(Athena.INSTANCE.getThemeManager().getPrimaryTheme().getSecondColor())); + + RoundedUtils.drawRound(x + 10, y + offsetY + scrollAnimation.getValue(), width - 20, 35, 4, new Color(Athena.INSTANCE.getThemeManager().getPrimaryTheme().getFirstColor())); + + if(a.getAccountType().equals(AccountType.MICROSOFT) || a.getAccountType().equals(AccountType.SESSION)) { + //mc.getTextureManager().bindTexture(face(a.getUsername(), UUID.fromString(a.getUuid()))); + } else { + mc.getTextureManager().bindTexture(new ResourceLocation("head.png")); + } + + GlStateManager.enableBlend(); + RoundedUtils.drawRoundTextured(x + 17, y + offsetY + 6 + scrollAnimation.getValue(), 24, 24, 4, 1.0F); + GlStateManager.disableBlend(); + + 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 - 54, 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+=45; + 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) * 45)) { + scrollY -=20; + } + + if(index > 4) { + if(scrollY < -((index - 3.8) * 45)) { + scrollY = -((index - 3.9) * 45); + } + } + }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, 16); + + if(delete) { + Athena.INSTANCE.getAccountManager().getAccounts().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 + width) - 50, y, 50, 26)) { + showAddAccount = true; + } + + if(MouseUtils.isInside(mouseX, mouseY, x , y + 179, width, height - 148)) { + mc.displayGuiScreen(new GuiAltManager()); + //Soar.instance.settingsManager.getSettingByClass(ClientMod.class, "DarkMode").setValBoolean(!Soar.instance.settingsManager.getSettingByClass(ClientMod.class, "DarkMode").getValBoolean()); + } + + if (MouseUtils.isInside(mouseX, mouseY, sr.getScaledWidth() - 25, 5.0, 20.0, 20.0)) { + + } + + if(showAddAccount) { + + usernameField.mouseClicked(mouseX, mouseY, mouseButton); + + if(MouseUtils.isInside(mouseX, mouseY, x + 35, y + 120, 210, 30)) { + click = true; + new Thread() { + @Override + public void run() { + MicrosoftAuthenticator authenticator = new MicrosoftAuthenticator(); + /*try { + MicrosoftAuthResult acc = authenticator.loginWithWebview(); + Athena.INSTANCE.getAccountManager().getAccounts().add(new Account(AccountType.MICROSOFT, acc.getProfile().getName(), acc.getProfile().getId(), acc.getRefreshToken())); + mc.session = new Session(acc.getProfile().getName(), acc.getProfile().getId(), acc.getAccessToken(), "legacy"); + showAddAccount = false; + } catch (MicrosoftAuthenticationException e) { + e.printStackTrace(); + }*/ + } + }.start(); + } + + if(MouseUtils.isInside(mouseX, mouseY, x + 35, y + 91, 100, 20)) { + Random random = new Random(); + int randomValue = random.nextInt(8) + 3; + + String username = RandomStringUtils.randomAlphabetic(randomValue); + + Athena.INSTANCE.getAccountManager().getAccounts().add(new Account(AccountType.CRACKED, username, "0", "0")); + mc.session = new Session(username, "0", "0", "legacy"); + showAddAccount = false; + } + + if(MouseUtils.isInside(mouseX, mouseY, (x + width) - 135, y + 91, 100, 20)) { + if(!usernameField.getText().isEmpty()) { + Athena.INSTANCE.getAccountManager().getAccounts().add(new Account(AccountType.CRACKED, usernameField.getText(), "0", "0")); + mc.session = new Session(usernameField.getText(), "0", "0", "legacy"); + showAddAccount = false; + usernameField.setText(""); + } + } + } + + for(Account a : Athena.INSTANCE.getAccountManager().getAccounts()) { + + if(MouseUtils.isInside(mouseX, mouseY, x + width - 36, y + offsetY + 7 + scrollAnimation.getValue(), 20, 20)) { + deleteAccount = a; + delete = true; + } + + if(!showAddAccount) { + if(MouseUtils.isInside(mouseX, mouseY, x + 10, y + offsetY + scrollAnimation.getValue(), width - 50, 35)) { + a.isDone = false; + + 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"); + } + } + }.start(); + } + + if(a.getAccountType().equals(AccountType.SESSION)) { + a.setInfo("Loading..."); + try { + mc.session = new Session(a.getUsername(), a.getUuid(), a.getToken(), "mojang"); + Athena.INSTANCE.getAccountManager().setCurrentAccount(Athena.INSTANCE.getAccountManager().getAccountByUsername(a.getUsername())); + a.setInfo("Success!"); + } catch (Exception e) { + e.printStackTrace(); + a.setInfo("Error"); + } + } + + if(a.getAccountType().equals(AccountType.CRACKED)) { + a.setInfo("Success!"); + mc.session = new Session(a.getUsername(), "0", "0", "legacy"); + Athena.INSTANCE.getAccountManager().setCurrentAccount(Athena.INSTANCE.getAccountManager().getAccountByUsername(a.getUsername())); + } + } + } + + offsetY+=45; + } + } + } + + @Override + public void keyTyped(char typedChar, int keyCode) { + + if(showAddAccount) { + usernameField.textboxKeyTyped(typedChar, keyCode); + } + + if(keyCode == 1) { + if(showAddAccount) { + showAddAccount = false; + }else { + Athena.INSTANCE.getAccountManager().save(); + closeAccountManager = true; + } + } + } + + private ResourceLocation face(String username, UUID uuid) { + + File model = new File(new File(mc.mcDataDir, "Athena/cachedImages/models"), username + ".png"); + File face = new File(new File(mc.mcDataDir, "Athena/cachedImages/faces"), username + ".png"); + + //loadSkin(mc, username, uuid, model, face); + + try { + BufferedImage t = ImageIO.read(face); + DynamicTexture nibt = new DynamicTexture(t); + + this.faceTexture = mc.getTextureManager().getDynamicTextureLocation("iasface_" + username.hashCode(), nibt); + } catch (Throwable throwable) { + this.faceTexture = new ResourceLocation("iaserror", "skin"); + } + + return this.faceTexture; + } +} diff --git a/src/main/java/rip/athena/client/gui/menu/altmanager/GuiAltManager.java b/src/main/java/rip/athena/client/gui/menu/altmanager/GuiAltManager.java new file mode 100644 index 00000000..32780169 --- /dev/null +++ b/src/main/java/rip/athena/client/gui/menu/altmanager/GuiAltManager.java @@ -0,0 +1,114 @@ +package rip.athena.client.gui.menu.altmanager; + +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 org.lwjgl.input.Keyboard; +import rip.athena.client.Athena; +import rip.athena.client.gui.menu.AthenaMenu; +import rip.athena.client.gui.menu.altmanager.helpers.*; +import rip.athena.client.gui.menu.altmanager.panels.*; +import rip.athena.client.gui.screen.Screen; +import rip.athena.client.utils.render.ColorUtil; +import rip.athena.client.utils.render.DrawUtils; +import rip.athena.client.utils.render.RoundedUtils; + +import java.util.ArrayList; +import java.util.List; + +import static org.lwjgl.opengl.GL11.GL_ONE_MINUS_SRC_ALPHA; +import static org.lwjgl.opengl.GL11.GL_SRC_ALPHA; + +public class GuiAltManager extends GuiScreen { + private final AltManagerUtils utils = new AltManagerUtils(); + private List panels; + public final rip.athena.client.utils.render.TextField searchField = new rip.athena.client.utils.render.TextField(); + + public GuiAltManager() { + if (panels == null) { + panels = new ArrayList<>(); + panels.add(new LoginPanel()); + } + } + + @Override + protected void keyTyped(char typedChar, int keyCode) { + if (keyCode == Keyboard.KEY_ESCAPE) { + mc.displayGuiScreen(new AthenaMenu()); + searchField.setFocused(false); + } + searchField.keyTyped(typedChar, keyCode); + panels.forEach(panel -> panel.keyTyped(typedChar, keyCode)); + } + + @Override + public void initGui() { + if (mc.gameSettings.guiScale != 2) { + mc.gameSettings.guiScale = 2; + } + + panels.forEach(Screen::initGui); + } + + + @Override + public void drawScreen(int mouseX, int mouseY, float partialTicks) { + GlStateManager.enableBlend(); + GlStateManager.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + ScaledResolution sr = new ScaledResolution(mc); + int screenWidth = sr.getScaledWidth(); + int screenHeight = sr.getScaledHeight(); + + int xOffset = (screenWidth - 325) / 2; // Calculate horizontal offset to center the panels + int yOffset = (screenHeight - getTotalPanelsHeight()) / 2; // Calculate vertical offset to center the panels + int width = screenWidth - (2 * xOffset); + + DrawUtils.drawImage(new ResourceLocation("Athena/menu/test.png"), 0, 0, (int) screenWidth, (int) screenHeight); + + RoundedUtils.drawGradientRound(xOffset + 15, yOffset - 1, width + 1, getTotalPanelsHeight() - 23, 6, Athena.INSTANCE.getThemeManager().getTheme().getFirstColor(), Athena.INSTANCE.getThemeManager().getTheme().getFirstColor(), Athena.INSTANCE.getThemeManager().getTheme().getSecondColor(), Athena.INSTANCE.getThemeManager().getTheme().getSecondColor()); + + int count = 0; + int separation = 0; + for (Panel panel : panels) { + panel.setX(xOffset + 16); + panel.setY(yOffset + separation); + panel.setWidth(325); + + panel.drawScreen(mouseX, mouseY); + separation += panel.getHeight() + (count >= 1 ? 10 : 25); + count++; + } + } + + private int getTotalPanelsHeight() { + int totalHeight = 0; + for (Panel panel : panels) { + totalHeight += panel.getHeight() + (totalHeight >= 1 ? 10 : 25); + } + return totalHeight; + } + + @Override + protected void mouseClicked(int mouseX, int mouseY, int mouseButton) { + searchField.mouseClicked(mouseX, mouseY, mouseButton); + panels.forEach(panel -> panel.mouseClicked(mouseX, mouseY, mouseButton)); + } + + @Override + protected void mouseReleased(int mouseX, int mouseY, int state) { + panels.forEach(panel -> panel.mouseReleased(mouseX, mouseY, state)); + } + + @Override + public void onGuiClosed() { + + } + + public AltManagerUtils getUtils() { + return utils; + } + +} diff --git a/src/main/java/rip/athena/client/gui/menu/altmanager/Panel.java b/src/main/java/rip/athena/client/gui/menu/altmanager/Panel.java new file mode 100644 index 00000000..590ec5ee --- /dev/null +++ b/src/main/java/rip/athena/client/gui/menu/altmanager/Panel.java @@ -0,0 +1,18 @@ +package rip.athena.client.gui.menu.altmanager; + +import lombok.Getter; +import lombok.Setter; +import rip.athena.client.gui.screen.Screen; +import rip.athena.client.utils.render.ColorUtil; +import rip.athena.client.utils.render.RoundedUtils; + +@Getter +@Setter +public abstract class Panel implements Screen { + private float x, y, width, height; + + @Override + public void drawScreen(int mouseX, int mouseY) { + RoundedUtils.drawRound(x, y, width, height, 5, ColorUtil.tripleColor(27)); + } +} diff --git a/src/main/java/rip/athena/client/gui/menu/altmanager/button/AltButton.java b/src/main/java/rip/athena/client/gui/menu/altmanager/button/AltButton.java new file mode 100644 index 00000000..999b9bfc --- /dev/null +++ b/src/main/java/rip/athena/client/gui/menu/altmanager/button/AltButton.java @@ -0,0 +1,76 @@ +package rip.athena.client.gui.menu.altmanager.button; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import lombok.Setter; +import rip.athena.client.gui.screen.Screen; +import rip.athena.client.utils.animations.Animation; +import rip.athena.client.utils.animations.Direction; +import rip.athena.client.utils.animations.impl.DecelerateAnimation; +import rip.athena.client.utils.font.FontManager; +import rip.athena.client.utils.render.ColorUtil; +import rip.athena.client.utils.render.HoveringUtil; +import rip.athena.client.utils.render.RoundedUtils; + +import java.awt.*; + +/** + * @author Athena Development + * @project Athena-Client + * @date 6/9/2023 + */ + +@Setter +@Getter +@RequiredArgsConstructor +public class AltButton implements Screen { + + private float x, y, width, height, alpha; + private boolean bypass = false; + private final String name; + private boolean bold = false; + private Color color = ColorUtil.tripleColor(55); + private Runnable clickAction; + + private final Animation hoverAnimation = new DecelerateAnimation(250, 1); + + @Override + public void initGui() { + + } + + @Override + public void keyTyped(char typedChar, int keyCode) { + + } + + @Override + public void drawScreen(int mouseX, int mouseY) { + boolean hovering = HoveringUtil.isHovering(x, y, width, height, mouseX, mouseY); + + hoverAnimation.setDirection(hovering ? Direction.FORWARDS : Direction.BACKWARDS); + + Color rectColor = ColorUtil.interpolateColorC(color, color.brighter(), hoverAnimation.getOutput().floatValue()); + RoundedUtils.drawRound(x, y, width, height, 5, ColorUtil.applyOpacity(rectColor, alpha)); + FontManager.getProductSansRegular(22).drawCenteredString(name, x + width / 2f, y + height - FontManager.getProductSansRegular(25).height(), ColorUtil.applyOpacity(-1, alpha)); + + + } + + @Override + public void mouseClicked(int mouseX, int mouseY, int button) { + boolean hovering = HoveringUtil.isHovering(x, y, width, height, mouseX, mouseY); + + if (hovering && button == 0) { + if (clickAction != null) { + clickAction.run(); + } + } + + } + + @Override + public void mouseReleased(int mouseX, int mouseY, int state) { + + } +} diff --git a/src/main/java/rip/athena/client/gui/menu/altmanager/button/AltTextField.java b/src/main/java/rip/athena/client/gui/menu/altmanager/button/AltTextField.java new file mode 100644 index 00000000..fb808878 --- /dev/null +++ b/src/main/java/rip/athena/client/gui/menu/altmanager/button/AltTextField.java @@ -0,0 +1,784 @@ +package rip.athena.client.gui.menu.altmanager.button; + +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; + +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.gui.GuiPageButtonList; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.WorldRenderer; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.ChatAllowedCharacters; +import net.minecraft.util.MathHelper; +import rip.athena.client.utils.font.FontManager; + +/** + * @author Athena Development + * @project Athena-Client + * @date 6/10/2023 + */ +public class AltTextField extends Gui +{ + private final int id; + private final FontRenderer fontRendererInstance; + public int xPosition; + public int yPosition; + /** The width of this text field. */ + private final int width; + private final int height; + /** Has the current text being edited on the textbox. */ + private String text = ""; + private int maxStringLength = 32; + private int cursorCounter; + private boolean enableBackgroundDrawing = true; + /** if true the textbox can lose focus by clicking elsewhere on the screen */ + private boolean canLoseFocus = true; + /** If this value is true along with isEnabled, keyTyped will process the keys. */ + private boolean isFocused; + /** If this value is true along with isFocused, keyTyped will process the keys. */ + private boolean isEnabled = true; + /** The current character index that should be used as start of the rendered text. */ + private int lineScrollOffset; + private int cursorPosition; + /** other selection position, maybe the same as the cursor */ + private int selectionEnd; + /** True if this textbox is visible */ + private boolean visible = true; + private GuiPageButtonList.GuiResponder field_175210_x; + private Predicate validator = Predicates.alwaysTrue(); + + private int color; + + public AltTextField(int componentId, FontRenderer fontrendererObj, int x, int y, int par5Width, int par6Height, int color) + { + this.id = componentId; + this.fontRendererInstance = fontrendererObj; + this.xPosition = x; + this.yPosition = y; + this.width = par5Width; + this.height = par6Height; + this.color = color; + } + + public void func_175207_a(GuiPageButtonList.GuiResponder p_175207_1_) + { + this.field_175210_x = p_175207_1_; + } + + /** + * Increments the cursor counter + */ + public void updateCursorCounter() + { + ++this.cursorCounter; + } + + /** + * Sets the text of the textbox + */ + public void setText(String p_146180_1_) + { + if (this.validator.apply(p_146180_1_)) + { + if (p_146180_1_.length() > this.maxStringLength) + { + this.text = p_146180_1_.substring(0, this.maxStringLength); + } + else + { + this.text = p_146180_1_; + } + + this.setCursorPositionEnd(); + } + } + + /** + * Returns the contents of the textbox + */ + public String getText() + { + return this.text; + } + + /** + * returns the text between the cursor and selectionEnd + */ + public String getSelectedText() + { + int i = this.cursorPosition < this.selectionEnd ? this.cursorPosition : this.selectionEnd; + int j = this.cursorPosition < this.selectionEnd ? this.selectionEnd : this.cursorPosition; + return this.text.substring(i, j); + } + + public void setValidator(Predicate theValidator) + { + this.validator = theValidator; + } + + /** + * replaces selected text, or inserts text at the position on the cursor + */ + public void writeText(String p_146191_1_) + { + String s = ""; + String s1 = ChatAllowedCharacters.filterAllowedCharacters(p_146191_1_); + int i = this.cursorPosition < this.selectionEnd ? this.cursorPosition : this.selectionEnd; + int j = this.cursorPosition < this.selectionEnd ? this.selectionEnd : this.cursorPosition; + int k = this.maxStringLength - this.text.length() - (i - j); + int l = 0; + + if (this.text.length() > 0) + { + s = s + this.text.substring(0, i); + } + + if (k < s1.length()) + { + s = s + s1.substring(0, k); + l = k; + } + else + { + s = s + s1; + l = s1.length(); + } + + if (this.text.length() > 0 && j < this.text.length()) + { + s = s + this.text.substring(j); + } + + if (this.validator.apply(s)) + { + this.text = s; + this.moveCursorBy(i - this.selectionEnd + l); + + if (this.field_175210_x != null) + { + this.field_175210_x.func_175319_a(this.id, this.text); + } + } + } + + /** + * Deletes the specified number of words starting at the cursor position. Negative numbers will delete words left of + * the cursor. + */ + public void deleteWords(int p_146177_1_) + { + if (this.text.length() != 0) + { + if (this.selectionEnd != this.cursorPosition) + { + this.writeText(""); + } + else + { + this.deleteFromCursor(this.getNthWordFromCursor(p_146177_1_) - this.cursorPosition); + } + } + } + + /** + * delete the selected text, otherwsie deletes characters from either side of the cursor. params: delete num + */ + public void deleteFromCursor(int p_146175_1_) + { + if (this.text.length() != 0) + { + if (this.selectionEnd != this.cursorPosition) + { + this.writeText(""); + } + else + { + boolean flag = p_146175_1_ < 0; + int i = flag ? this.cursorPosition + p_146175_1_ : this.cursorPosition; + int j = flag ? this.cursorPosition : this.cursorPosition + p_146175_1_; + String s = ""; + + if (i >= 0) + { + s = this.text.substring(0, i); + } + + if (j < this.text.length()) + { + s = s + this.text.substring(j); + } + + if (this.validator.apply(s)) + { + this.text = s; + + if (flag) + { + this.moveCursorBy(p_146175_1_); + } + + if (this.field_175210_x != null) + { + this.field_175210_x.func_175319_a(this.id, this.text); + } + } + } + } + } + + public int getId() + { + return this.id; + } + + /** + * see @getNthNextWordFromPos() params: N, position + */ + public int getNthWordFromCursor(int p_146187_1_) + { + return this.getNthWordFromPos(p_146187_1_, this.getCursorPosition()); + } + + /** + * gets the position of the nth word. N may be negative, then it looks backwards. params: N, position + */ + public int getNthWordFromPos(int p_146183_1_, int p_146183_2_) + { + return this.func_146197_a(p_146183_1_, p_146183_2_, true); + } + + public int func_146197_a(int p_146197_1_, int p_146197_2_, boolean p_146197_3_) + { + int i = p_146197_2_; + boolean flag = p_146197_1_ < 0; + int j = Math.abs(p_146197_1_); + + for (int k = 0; k < j; ++k) + { + if (!flag) + { + int l = this.text.length(); + i = this.text.indexOf(32, i); + + if (i == -1) + { + i = l; + } + else + { + while (p_146197_3_ && i < l && this.text.charAt(i) == 32) + { + ++i; + } + } + } + else + { + while (p_146197_3_ && i > 0 && this.text.charAt(i - 1) == 32) + { + --i; + } + + while (i > 0 && this.text.charAt(i - 1) != 32) + { + --i; + } + } + } + + return i; + } + + /** + * Moves the text cursor by a specified number of characters and clears the selection + */ + public void moveCursorBy(int p_146182_1_) + { + this.setCursorPosition(this.selectionEnd + p_146182_1_); + } + + /** + * sets the position of the cursor to the provided index + */ + public void setCursorPosition(int p_146190_1_) + { + this.cursorPosition = p_146190_1_; + int i = this.text.length(); + this.cursorPosition = MathHelper.clamp_int(this.cursorPosition, 0, i); + this.setSelectionPos(this.cursorPosition); + } + + /** + * sets the cursors position to the beginning + */ + public void setCursorPositionZero() + { + this.setCursorPosition(0); + } + + /** + * sets the cursors position to after the text + */ + public void setCursorPositionEnd() + { + this.setCursorPosition(this.text.length()); + } + + /** + * Call this method from your GuiScreen to process the keys into the textbox + */ + public boolean textboxKeyTyped(char p_146201_1_, int p_146201_2_) + { + if (!this.isFocused) + { + return false; + } + else if (GuiScreen.isKeyComboCtrlA(p_146201_2_)) + { + this.setCursorPositionEnd(); + this.setSelectionPos(0); + return true; + } + else if (GuiScreen.isKeyComboCtrlC(p_146201_2_)) + { + GuiScreen.setClipboardString(this.getSelectedText()); + return true; + } + else if (GuiScreen.isKeyComboCtrlV(p_146201_2_)) + { + if (this.isEnabled) + { + this.writeText(GuiScreen.getClipboardString()); + } + + return true; + } + else if (GuiScreen.isKeyComboCtrlX(p_146201_2_)) + { + GuiScreen.setClipboardString(this.getSelectedText()); + + if (this.isEnabled) + { + this.writeText(""); + } + + return true; + } + else + { + switch (p_146201_2_) + { + case 14: + + if (GuiScreen.isCtrlKeyDown()) + { + if (this.isEnabled) + { + this.deleteWords(-1); + } + } + else if (this.isEnabled) + { + this.deleteFromCursor(-1); + } + + return true; + case 199: + + if (GuiScreen.isShiftKeyDown()) + { + this.setSelectionPos(0); + } + else + { + this.setCursorPositionZero(); + } + + return true; + case 203: + + if (GuiScreen.isShiftKeyDown()) + { + if (GuiScreen.isCtrlKeyDown()) + { + this.setSelectionPos(this.getNthWordFromPos(-1, this.getSelectionEnd())); + } + else + { + this.setSelectionPos(this.getSelectionEnd() - 1); + } + } + else if (GuiScreen.isCtrlKeyDown()) + { + this.setCursorPosition(this.getNthWordFromCursor(-1)); + } + else + { + this.moveCursorBy(-1); + } + + return true; + case 205: + + if (GuiScreen.isShiftKeyDown()) + { + if (GuiScreen.isCtrlKeyDown()) + { + this.setSelectionPos(this.getNthWordFromPos(1, this.getSelectionEnd())); + } + else + { + this.setSelectionPos(this.getSelectionEnd() + 1); + } + } + else if (GuiScreen.isCtrlKeyDown()) + { + this.setCursorPosition(this.getNthWordFromCursor(1)); + } + else + { + this.moveCursorBy(1); + } + + return true; + case 207: + + if (GuiScreen.isShiftKeyDown()) + { + this.setSelectionPos(this.text.length()); + } + else + { + this.setCursorPositionEnd(); + } + + return true; + case 211: + + if (GuiScreen.isCtrlKeyDown()) + { + if (this.isEnabled) + { + this.deleteWords(1); + } + } + else if (this.isEnabled) + { + this.deleteFromCursor(1); + } + + return true; + default: + + if (ChatAllowedCharacters.isAllowedCharacter(p_146201_1_)) + { + if (this.isEnabled) + { + this.writeText(Character.toString(p_146201_1_)); + } + + return true; + } + else + { + return false; + } + } + } + } + + /** + * Args: x, y, buttonClicked + */ + public void mouseClicked(int p_146192_1_, int p_146192_2_, int p_146192_3_) + { + boolean flag = p_146192_1_ >= this.xPosition && p_146192_1_ < this.xPosition + this.width && p_146192_2_ >= this.yPosition && p_146192_2_ < this.yPosition + this.height; + + if (this.canLoseFocus) + { + this.setFocused(flag); + } + + if (this.isFocused && flag && p_146192_3_ == 0) + { + int i = p_146192_1_ - this.xPosition; + + if (this.enableBackgroundDrawing) + { + i -= 4; + } + + String s = this.fontRendererInstance.trimStringToWidth(this.text.substring(this.lineScrollOffset), this.getWidth()); + this.setCursorPosition(this.fontRendererInstance.trimStringToWidth(s, i).length() + this.lineScrollOffset); + } + } + + /** + * Draws the textbox + */ + public void drawTextBox() + { + if (this.getVisible()) + { + int j = this.cursorPosition - this.lineScrollOffset; + int k = this.selectionEnd - this.lineScrollOffset; + String s = this.fontRendererInstance.trimStringToWidth(this.text.substring(this.lineScrollOffset), this.getWidth()); + boolean flag = j >= 0 && j <= s.length(); + boolean flag1 = this.isFocused && this.cursorCounter / 6 % 2 == 0 && flag; + int l = this.enableBackgroundDrawing ? this.xPosition + 4 : this.xPosition; + int i1 = this.enableBackgroundDrawing ? this.yPosition + (this.height - 8) / 2 : this.yPosition; + int j1 = l; + + if (k > s.length()) + { + k = s.length(); + } + + if (s.length() > 0) + { + String s1 = flag ? s.substring(0, j) : s; + j1 = FontManager.getProductSansRegular(20).drawString(s1, (float)l, (float)i1, color); + } + + boolean flag2 = this.cursorPosition < this.text.length() || this.text.length() >= this.getMaxStringLength(); + int k1 = j1; + + if (!flag) + { + k1 = j > 0 ? l + this.width : l; + } + else if (flag2) + { + k1 = j1 - 1; + --j1; + } + + if (s.length() > 0 && flag && j < s.length()) + { + j1 = FontManager.getProductSansRegular(20).drawString(s.substring(j), (float)j1, (float)i1, color); + } + + if (flag1) + { + if (flag2) + { + Gui.drawRect(k1, i1 - 1, k1 + 1, i1 + 1 + this.fontRendererInstance.FONT_HEIGHT, -3092272); + } + else + { + FontManager.getProductSansRegular(20).drawString("_", (float)k1, (float)i1, color); + } + } + + if (k != j) + { + int l1 = l + this.fontRendererInstance.getStringWidth(s.substring(0, k)); + this.drawCursorVertical(k1, i1 - 1, l1 - 1, i1 + 1 + this.fontRendererInstance.FONT_HEIGHT); + } + } + } + + /** + * draws the vertical line cursor in the textbox + */ + private void drawCursorVertical(int p_146188_1_, int p_146188_2_, int p_146188_3_, int p_146188_4_) + { + if (p_146188_1_ < p_146188_3_) + { + int i = p_146188_1_; + p_146188_1_ = p_146188_3_; + p_146188_3_ = i; + } + + if (p_146188_2_ < p_146188_4_) + { + int j = p_146188_2_; + p_146188_2_ = p_146188_4_; + p_146188_4_ = j; + } + + if (p_146188_3_ > this.xPosition + this.width) + { + p_146188_3_ = this.xPosition + this.width; + } + + if (p_146188_1_ > this.xPosition + this.width) + { + p_146188_1_ = this.xPosition + this.width; + } + + Tessellator tessellator = Tessellator.getInstance(); + WorldRenderer worldrenderer = tessellator.getWorldRenderer(); + GlStateManager.color(0.0F, 0.0F, 255.0F, 255.0F); + GlStateManager.disableTexture2D(); + GlStateManager.enableColorLogic(); + GlStateManager.colorLogicOp(5387); + worldrenderer.begin(7, DefaultVertexFormats.POSITION); + worldrenderer.pos((double)p_146188_1_, (double)p_146188_4_, 0.0D).endVertex(); + worldrenderer.pos((double)p_146188_3_, (double)p_146188_4_, 0.0D).endVertex(); + worldrenderer.pos((double)p_146188_3_, (double)p_146188_2_, 0.0D).endVertex(); + worldrenderer.pos((double)p_146188_1_, (double)p_146188_2_, 0.0D).endVertex(); + tessellator.draw(); + GlStateManager.disableColorLogic(); + GlStateManager.enableTexture2D(); + } + + public void setMaxStringLength(int p_146203_1_) + { + this.maxStringLength = p_146203_1_; + + if (this.text.length() > p_146203_1_) + { + this.text = this.text.substring(0, p_146203_1_); + } + } + + /** + * returns the maximum number of character that can be contained in this textbox + */ + public int getMaxStringLength() + { + return this.maxStringLength; + } + + /** + * returns the current position of the cursor + */ + public int getCursorPosition() + { + return this.cursorPosition; + } + + /** + * get enable drawing background and outline + */ + public boolean getEnableBackgroundDrawing() + { + return this.enableBackgroundDrawing; + } + + /** + * enable drawing background and outline + */ + public void setEnableBackgroundDrawing(boolean p_146185_1_) + { + this.enableBackgroundDrawing = p_146185_1_; + } + + /** + * Sets focus to this gui element + */ + public void setFocused(boolean p_146195_1_) + { + if (p_146195_1_ && !this.isFocused) + { + this.cursorCounter = 0; + } + + this.isFocused = p_146195_1_; + } + + /** + * Getter for the focused field + */ + public boolean isFocused() + { + return this.isFocused; + } + + public void setEnabled(boolean p_146184_1_) + { + this.isEnabled = p_146184_1_; + } + + /** + * the side of the selection that is not the cursor, may be the same as the cursor + */ + public int getSelectionEnd() + { + return this.selectionEnd; + } + + /** + * returns the width of the textbox depending on if background drawing is enabled + */ + public int getWidth() + { + return this.getEnableBackgroundDrawing() ? this.width - 8 : this.width; + } + + /** + * Sets the position of the selection anchor (i.e. position the selection was started at) + */ + public void setSelectionPos(int p_146199_1_) + { + int i = this.text.length(); + + if (p_146199_1_ > i) + { + p_146199_1_ = i; + } + + if (p_146199_1_ < 0) + { + p_146199_1_ = 0; + } + + this.selectionEnd = p_146199_1_; + + if (this.fontRendererInstance != null) + { + if (this.lineScrollOffset > i) + { + this.lineScrollOffset = i; + } + + int j = this.getWidth(); + String s = this.fontRendererInstance.trimStringToWidth(this.text.substring(this.lineScrollOffset), j); + int k = s.length() + this.lineScrollOffset; + + if (p_146199_1_ == this.lineScrollOffset) + { + this.lineScrollOffset -= this.fontRendererInstance.trimStringToWidth(this.text, j, true).length(); + } + + if (p_146199_1_ > k) + { + this.lineScrollOffset += p_146199_1_ - k; + } + else if (p_146199_1_ <= this.lineScrollOffset) + { + this.lineScrollOffset -= this.lineScrollOffset - p_146199_1_; + } + + this.lineScrollOffset = MathHelper.clamp_int(this.lineScrollOffset, 0, i); + } + } + + /** + * if true the textbox can lose focus by clicking elsewhere on the screen + */ + public void setCanLoseFocus(boolean p_146205_1_) + { + this.canLoseFocus = p_146205_1_; + } + + /** + * returns true if this textbox is visible + */ + public boolean getVisible() + { + return this.visible; + } + + /** + * Sets whether or not this textbox is visible + */ + public void setVisible(boolean p_146189_1_) + { + this.visible = p_146189_1_; + } +} diff --git a/src/main/java/rip/athena/client/gui/menu/altmanager/helpers/AltManagerUtils.java b/src/main/java/rip/athena/client/gui/menu/altmanager/helpers/AltManagerUtils.java new file mode 100644 index 00000000..ebc8edca --- /dev/null +++ b/src/main/java/rip/athena/client/gui/menu/altmanager/helpers/AltManagerUtils.java @@ -0,0 +1,171 @@ +package rip.athena.client.gui.menu.altmanager.helpers; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; + +import fr.litarvan.openauth.microsoft.MicrosoftAuthResult; +import fr.litarvan.openauth.microsoft.MicrosoftAuthenticationException; +import fr.litarvan.openauth.microsoft.MicrosoftAuthenticator; +import lombok.Getter; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.texture.DynamicTexture; +import net.minecraft.util.Session; +import rip.athena.client.Athena; +import rip.athena.client.account.Account; +import rip.athena.client.account.AccountType; +import rip.athena.client.utils.render.TextField; +import rip.athena.client.utils.time.TimerUtil; + +import javax.imageio.ImageIO; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import java.net.URL; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.CompletableFuture; + +public class AltManagerUtils { + + /*@Getter + private final TimerUtil timerUtil = new TimerUtil(); + public static File altsFile = new File(Athena.MAIN_DIR, "alts.json"); + + public AltManagerUtils() { + + } + + public void writeAltsToFile() { + if (timerUtil.hasTimeElapsed(15000, true)) { + new Thread(() -> { + try { + if (!altsFile.exists()) { + if (altsFile.getParentFile().mkdirs()) { + altsFile.createNewFile(); + } + } + Files.write(altsFile.toPath(), new GsonBuilder().setPrettyPrinting().excludeFieldsWithoutExposeAnnotation().create().toJson(alts.toArray(new Alt[0])).getBytes(StandardCharsets.UTF_8)); + } catch (IOException e) { + e.printStackTrace(); + } + }).start(); + } + } + + public void login(TextField username, TextField password) { + String usernameS; + String passwordS; + if (username.getText().contains(":")) { + String[] combo = username.getText().split(":"); + usernameS = combo[0]; + passwordS = combo[1]; + } else { + usernameS = username.getText(); + passwordS = password.getText(); + } + boolean microsoft = Alt.currentLoginMethod == Alt.AltType.MICROSOFT; + + if (usernameS.isEmpty() && passwordS.isEmpty()) return; + + loginWithString(usernameS, passwordS, false); + } + + + public void microsoftLoginAsync(String email, String password) { + microsoftLoginAsync(null, email, password); + } + + + public void microsoftLoginAsync(Alt alt, String email, String password) { + //if (alt == null) { + //alt = new Alt(email, password); + //} + //Alt finalAlt = alt; + new Thread() { + @Override + public void run() { + MicrosoftAuthenticator authenticator = new MicrosoftAuthenticator(); + try { + MicrosoftAuthResult acc = authenticator.loginWithWebview(); + Athena.INSTANCE.getAccountManager().getAccounts().add(new Account(AccountType.MICROSOFT, acc.getProfile().getName(), acc.getProfile().getId(), acc.getRefreshToken())); + Minecraft.getMinecraft().session = new Session(acc.getProfile().getName(), acc.getProfile().getId(), acc.getAccessToken(), "legacy"); + } catch (MicrosoftAuthenticationException e) { + e.printStackTrace(); + } + } + }.start(); + /*Multithreading.runAsync(() -> { + CompletableFuture future = new CompletableFuture<>(); + MicrosoftLogin.getRefreshToken(refreshToken -> { + if (refreshToken != null) { + //MicrosoftLogin.LoginData login = MicrosoftLogin.login(refreshToken); + //future.complete(new Session(login.username, login.uuid, login.mcToken, "microsoft")); + } + }); + Session auth = future.join(); + if (auth != null) { + //mc.session = auth; + finalAlt.uuid = auth.getPlayerID(); + finalAlt.altType = Alt.AltType.MICROSOFT; + finalAlt.username = auth.getUsername(); + if (auth.getUsername() == null) { + //NotificationManager.post(NotificationType.WARNING, "Alt Manager", "Please set an username on your Minecraft account!", 12); + } + Alt.stage = 2; + finalAlt.altState = Alt.AltState.LOGIN_SUCCESS; + AltManagerUtils.getAlts().add(finalAlt); + //writeAlts(); + //Tenacity.INSTANCE.getAltManager().currentSessionAlt = finalAlt; + //Tenacity.INSTANCE.getAltManager().getAltPanel().refreshAlts(); + } else { + Alt.stage = 1; + finalAlt.altState = Alt.AltState.LOGIN_FAIL; + } + });*/ + + // } + + /*public void loginWithString(String username, String password, boolean microsoft) { + for (Alt alt : alts) { + if (alt.email.equals(username) && alt.password.equals(password)) { + Alt.stage = 0; + alt.loginAsync(microsoft); + return; + } + } + Alt alt = new Alt(username, password); + alts.add(alt); + Alt.stage = 0; + alt.loginAsync(microsoft); + }*/ + + /*public void getHead(Alt alt) { + if (alt.uuid == null || alt.head != null || alt.headTexture || alt.headTries > 5) return; + /*Multithreading.runAsync(() -> { + alt.headTries++; + try { + BufferedImage image = ImageIO.read(new URL("https://visage.surgeplay.com/bust/160/" + alt.uuid)); + alt.headTexture = true; + // run on main thread for OpenGL context + mc.addScheduledTask(() -> { + DynamicTexture texture = new DynamicTexture(image); + alt.head = mc.getTextureManager().getDynamicTextureLocation("HEAD-" + alt.uuid, texture); + }); + } catch (IOException e) { + alt.headTexture = false; + } + });*/ + //} + + public static void microsoftLoginAsync() { + //if (alt == null) { + //alt = new Alt(email, password); + //} + //Alt finalAlt = alt; + + } + +} diff --git a/src/main/java/rip/athena/client/gui/menu/altmanager/panels/LoginPanel.java b/src/main/java/rip/athena/client/gui/menu/altmanager/panels/LoginPanel.java new file mode 100644 index 00000000..e043e7a3 --- /dev/null +++ b/src/main/java/rip/athena/client/gui/menu/altmanager/panels/LoginPanel.java @@ -0,0 +1,225 @@ +package rip.athena.client.gui.menu.altmanager.panels; + +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +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.util.ResourceLocation; +import net.minecraft.util.Session; +import org.apache.commons.io.IOUtils; +import org.lwjgl.input.Keyboard; +import rip.athena.client.Athena; +import rip.athena.client.account.Account; +import rip.athena.client.account.AccountType; +import rip.athena.client.gui.menu.altmanager.Panel; +import rip.athena.client.gui.menu.altmanager.button.AltButton; +import rip.athena.client.gui.menu.altmanager.helpers.AltManagerUtils; +import rip.athena.client.utils.animations.Animation; +import rip.athena.client.utils.animations.Direction; +import rip.athena.client.utils.animations.impl.DecelerateAnimation; +import rip.athena.client.utils.font.FontManager; +import rip.athena.client.utils.render.*; +import rip.athena.client.utils.render.TextField; + +import java.awt.*; +import java.io.IOException; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.ArrayList; +import java.util.List; + +public class LoginPanel extends Panel { + + private final List actionButtons = new ArrayList<>(); + public final List textFields = new ArrayList<>(); + private String status = "Session:"; + + public LoginPanel() { + setHeight(200); + actionButtons.add(new AltButton("Cracked")); + actionButtons.add(new AltButton("Session")); + textFields.add(new TextField()); + textFields.add(new TextField()); + } + + + @Override + public void initGui() { + + } + + public static boolean cracked = false; + + @Override + public void keyTyped(char typedChar, int keyCode) { + textFields.forEach(textField -> textField.keyTyped(typedChar, keyCode)); + if (keyCode == Keyboard.KEY_TAB) { + TextField username = textFields.get(0); + TextField pass = textFields.get(1); + if (username.isFocused()) { + username.setFocused(false); + pass.setFocused(true); + return; + } + if (pass.isFocused()) { + pass.setFocused(false); + username.setFocused(true); + } + } + + } + + private boolean hoveringMicrosoft = false; + private final Animation hoverMicrosoftAnim = new DecelerateAnimation(250, 1); + + @Override + public void drawScreen(int mouseX, int mouseY) { + super.drawScreen(mouseX, mouseY); + setHeight(180); + FontManager.getProductSansRegular(28).drawCenteredString("Login", getX() + getWidth() / 2f, getY() + 10, ColorUtil.applyOpacity(-1, .75f)); + FontManager.getProductSansRegular(12).drawCenteredString(status, getX() + getWidth() / 2f, getY() + 25, ColorUtil.applyOpacity(-1, .75f)); + Color noColor = ColorUtil.applyOpacity(Color.WHITE, 0); + + int count = 0; + int spacing = 8; + float diff = 35; + for (TextField textField : textFields) { + textField.setXPosition(getX() + (diff / 2f)); + textField.setYPosition(getY() + 35 + count); + textField.setWidth(getWidth() - diff); + textField.setHeight(22); + textField.setBackgroundText(count == 0 ? "Email or username" : "Password"); + textField.setOutline(noColor); + textField.setFill(ColorUtil.tripleColor(17)); + textField.setTextAlpha(.35f); + textField.setMaxStringLength(560); + textField.drawTextBox(); + + count += textField.getHeight() + spacing; + } + + float actionY = getY() + 98; + float actionWidth = 90; + float buttonSpacing = 10; + float firstX = getX() + getWidth() / 2f - ((actionButtons.size() * actionWidth) + 10) / 2f; + int seperation = 0; + for (AltButton actionButton : actionButtons) { + actionButton.setBypass(true); + actionButton.setColor(ColorUtil.tripleColor(55)); + actionButton.setAlpha(1); + actionButton.setX(firstX + seperation); + actionButton.setY(actionY); + actionButton.setWidth(actionWidth); + actionButton.setHeight(20); + + actionButton.setClickAction(() -> { + switch (actionButton.getName()) { + case "Cracked": + TextField cracked = textFields.get(0); + 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(); + + break; + case "Session": + TextField sessionID = textFields.get(0); + + try { + String user, uuid, token, session = sessionID.getText(); + + if (session.contains(":")) { //if fully formatted string (ign:uuid:token) + //split string to data + user = session.split(":")[0]; + uuid = session.split(":")[1]; + token = session.split(":")[2]; + } else { //if only token + //make request + HttpURLConnection c = (HttpURLConnection) new URL("https://api.minecraftservices.com/minecraft/profile/").openConnection(); + c.setRequestProperty("Content-type", "application/json"); + c.setRequestProperty("Authorization", "Bearer " + sessionID.getText()); + c.setDoOutput(true); + + //get json + JsonObject json = new JsonParser().parse(IOUtils.toString(c.getInputStream())).getAsJsonObject(); + + //get data + user = json.get("name").getAsString(); + uuid = json.get("id").getAsString(); + token = session; + } + + //set session and return to previous screen + Minecraft.getMinecraft().session = new Session(user, uuid, token, "mojang"); + status = "Logged into " + user; + Athena.INSTANCE.getAccountManager().getAccounts().add(new Account(AccountType.SESSION, user, uuid, token)); + Athena.INSTANCE.getAccountManager().setCurrentAccount(Athena.INSTANCE.getAccountManager().getAccountByUsername(user)); + Athena.INSTANCE.getAccountManager().isFirstLogin = false; + Athena.INSTANCE.getAccountManager().save(); + Athena.INSTANCE.getLog().info("Success: Logged into " + user); + //mc.displayGuiScreen(previousScreen); + } catch (Exception e) { + status = "Failed to login"; + Athena.INSTANCE.getLog().error("Failed to login"); + System.out.println(sessionID.getText()); + e.printStackTrace(); + } + break; + } + }); + + + actionButton.drawScreen(mouseX, mouseY); + + seperation += actionWidth + buttonSpacing; + } + + float microsoftY = actionY + 35, microWidth = 240, microHeight = 35; + float microX = getX() + getWidth() / 2f - microWidth / 2f; + + hoveringMicrosoft = HoveringUtil.isHovering(microX - 2, microsoftY - 2, microWidth + 4, microHeight + 4, mouseX, mouseY); + hoverMicrosoftAnim.setDirection(hoveringMicrosoft ? Direction.FORWARDS : Direction.BACKWARDS); + + 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 to your migrated account", microX + 10, microsoftY + 23, -1); + + float logoSize = 22; + DrawUtils.drawMicrosoftLogo(microX + microWidth - (10 + logoSize), microsoftY + (microHeight / 2f) - (logoSize / 2f), logoSize, 1.5f); + } + + @Override + public void mouseClicked(int mouseX, int mouseY, int button) { + textFields.forEach(textField -> textField.mouseClicked(mouseX, mouseY, button)); + actionButtons.forEach(actionButton -> actionButton.mouseClicked(mouseX, mouseY, button)); + + if (hoveringMicrosoft && button == 0) { + new Thread(() -> { + MicrosoftAuthenticator authenticator = new MicrosoftAuthenticator(); + /*try { + MicrosoftAuthResult acc = authenticator.loginWithWebview(); + Athena.INSTANCE.getAccountManager().getAccounts().add(new Account(AccountType.MICROSOFT, acc.getProfile().getName(), acc.getProfile().getId(), acc.getRefreshToken())); + Minecraft.getMinecraft().session = new Session(acc.getProfile().getName(), acc.getProfile().getId(), acc.getAccessToken(), "legacy"); + Athena.INSTANCE.getAccountManager().isFirstLogin = false; + } catch (MicrosoftAuthenticationException e) { + e.printStackTrace(); + }*/ + }).start(); + resetTextFields(); + } + } + + @Override + public void mouseReleased(int mouseX, int mouseY, int state) { + + } + + private void resetTextFields() { + textFields.forEach(textField -> textField.setText("")); + } +} diff --git a/src/main/java/rip/athena/client/gui/screen/Screen.java b/src/main/java/rip/athena/client/gui/screen/Screen.java new file mode 100644 index 00000000..f5db1418 --- /dev/null +++ b/src/main/java/rip/athena/client/gui/screen/Screen.java @@ -0,0 +1,20 @@ +package rip.athena.client.gui.screen; + +/** + * @author Athena Development + * @project Athena-Client + * @date 6/9/2023 + */ +public interface Screen { + + void initGui(); + + void keyTyped(char typedChar, int keyCode); + + void drawScreen(int mouseX, int mouseY); + + void mouseClicked(int mouseX, int mouseY, int button); + + void mouseReleased(int mouseX, int mouseY, int state); + +} diff --git a/src/main/java/rip/athena/client/modules/impl/mods/HitDelayFix.java b/src/main/java/rip/athena/client/modules/impl/mods/HitDelayFix.java new file mode 100644 index 00000000..c2730123 --- /dev/null +++ b/src/main/java/rip/athena/client/modules/impl/mods/HitDelayFix.java @@ -0,0 +1,16 @@ +package rip.athena.client.modules.impl.mods; + +import rip.athena.client.modules.Category; +import rip.athena.client.modules.Module; + +/** + * @author Athena Development + * @project Athena-Client + * @date 6/4/2023 + */ +public class HitDelayFix extends Module { + + public HitDelayFix() { + super("HitDelayFix", Category.MODS, "Athena/gui/mods/cps.png"); + } +} diff --git a/src/main/java/rip/athena/client/modules/impl/mods/MinimalBobbing.java b/src/main/java/rip/athena/client/modules/impl/mods/MinimalBobbing.java new file mode 100644 index 00000000..bd1bccbb --- /dev/null +++ b/src/main/java/rip/athena/client/modules/impl/mods/MinimalBobbing.java @@ -0,0 +1,23 @@ +package rip.athena.client.modules.impl.mods; + +import rip.athena.client.config.ConfigValue; +import rip.athena.client.modules.Category; +import rip.athena.client.modules.Module; + +/** + * @author Athena Development + * @project Athena-Client + * @date 6/9/2023 + */ +public class MinimalBobbing extends Module { + + @ConfigValue.Boolean(name = "Remove Hand Bobbing") + public boolean handBobbing = true; + + @ConfigValue.Boolean(name = "Remove Screen Bobbing") + public boolean screenBobbing = true; + + public MinimalBobbing() { + super("Minimal Bobbing", Category.MODS, "Athena/gui/mods/nobobbing.png"); + } +} diff --git a/src/main/java/rip/athena/client/modules/impl/mods/ToggleSprint.java b/src/main/java/rip/athena/client/modules/impl/mods/ToggleSprint.java new file mode 100644 index 00000000..f25832e6 --- /dev/null +++ b/src/main/java/rip/athena/client/modules/impl/mods/ToggleSprint.java @@ -0,0 +1,281 @@ +package rip.athena.client.modules.impl.mods; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.settings.GameSettings; +import net.minecraft.util.MovementInputFromOptions; +import org.lwjgl.opengl.GL11; +import rip.athena.client.Athena; +import rip.athena.client.config.ConfigValue; +import rip.athena.client.gui.hud.HUDElement; +import rip.athena.client.modules.Category; +import rip.athena.client.modules.Module; +import rip.athena.client.utils.font.FontManager; +import rip.athena.client.utils.render.DrawUtils; +import rip.athena.client.utils.render.RoundedUtils; + +import java.awt.*; +import java.text.DecimalFormat; + +/** + * @author Athena Development + * @project Athena-Client + * @date 6/9/2023 + */ +public class ToggleSprint 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 = false; + + @ConfigValue.Color(name = "Background Color") + private Color background = new Color(0, 0, 0, 150); + + @ConfigValue.Boolean(name = "Toggle Sneak") + private static boolean optionToggleSneak = true; + + @ConfigValue.Boolean(name = "Toggle Sprint") + public + static boolean optionToggleSprint = true; + + @ConfigValue.Boolean(name = "Double Tap Sprint") + public + static boolean optionDoubleTap = false; + + @ConfigValue.Boolean(name = "Fly Boost") + public + static boolean optionEnableFlyBoost = true; + + @ConfigValue.Double(name = "Fly Boost Speed Vertical" , min = 0.1D, max = 20D) + public + static double flyboostspeedVertical = 2.0; + + @ConfigValue.Double(name = "Fly Boost Speed Horizontal" , min = 0.1D, max = 20D) + public + static double flyboostspeedHorizontal = 2.0; + + @ConfigValue.Boolean(name = "Custom Font") + private static boolean customFont = false; + + @ConfigValue.Color(name = "Color") + private Color color = Color.WHITE; + + public static boolean isDisabled; + public static boolean canDoubleTap; + + public static boolean sprint = false; + public static boolean sprintHeldAndReleased = false; + public static boolean sprintDoubleTapped = false; + + public static long lastPressed; + public static long lastSprintPressed; + public static boolean handledSneakPress; + public static boolean handledSprintPress; + public static boolean wasRiding; + + public static boolean wasSprintDisabled = false; + public static String textForHUD = ""; + + private HUDElement hud; + private int width = 20; + private int height = 10; + + public ToggleSprint() { + super("ToggleSprint", Category.MODS, "Athena/gui/mods/entityhud.png"); + hud = new HUDElement("togglesprint", width, height) { + @Override + public void onRender() { + render(); + } + }; + addHUD(hud); + } + + public static void update(Minecraft mc, MovementInputFromOptions options, EntityPlayerSP thisPlayer) { + options.moveStrafe = 0.0F; + options.moveForward = 0.0F; + + GameSettings settings = mc.gameSettings; + + if(settings.keyBindForward.isKeyDown()) { + ++options.moveForward; + } + + if(settings.keyBindBack.isKeyDown()) { + --options.moveForward; + } + + if(settings.keyBindLeft.isKeyDown()) { + ++options.moveStrafe; + } + + if(settings.keyBindRight.isKeyDown()) { + --options.moveStrafe; + } + + options.jump = settings.keyBindJump.isKeyDown(); + + + if (optionToggleSneak) { + if (settings.keyBindSneak.isKeyDown() && !handledSneakPress) { + if(thisPlayer.isRiding() || thisPlayer.capabilities.isFlying) { + options.sneak = true; + wasRiding = thisPlayer.isRiding(); + } else { + options.sneak = !options.sneak; + } + + lastPressed = System.currentTimeMillis(); + handledSneakPress = true; + } + + if (!settings.keyBindSneak.isKeyDown() && handledSneakPress) { + if(thisPlayer.capabilities.isFlying || wasRiding) { + options.sneak = false; + wasRiding = false; + } else if(System.currentTimeMillis() - lastPressed > 300L) { + options.sneak = false; + } + + handledSneakPress = false; + } + } else { + options.sneak = settings.keyBindSneak.isKeyDown(); + } + + if(options.sneak) { + options.moveStrafe = (float)((double)options.moveStrafe * 0.3D); + options.moveForward = (float)((double)options.moveForward * 0.3D); + } + + boolean enoughHunger = (float)thisPlayer.getFoodStats().getFoodLevel() > 6.0F; + boolean canSprint = !options.sneak && enoughHunger; + + isDisabled = !optionToggleSprint; + canDoubleTap = optionDoubleTap; + + if((canSprint || isDisabled) && settings.keyBindSprint.isKeyDown() && !handledSprintPress) { + if(!isDisabled) { + sprint = !sprint; + lastSprintPressed = System.currentTimeMillis(); + handledSprintPress = true; + sprintHeldAndReleased = false; + } + } + + if((canSprint || isDisabled) && !settings.keyBindSprint.isKeyDown() && handledSprintPress) { + if(System.currentTimeMillis() - lastSprintPressed > 300L) { + sprintHeldAndReleased = true; + } + handledSprintPress = false; + } + + UpdateStatus(options, thisPlayer, settings); + } + + public static void UpdateSprint(boolean newValue, boolean doubleTapped) + { + sprint = newValue; + sprintDoubleTapped = doubleTapped; + } + + public static void UpdateStatus(MovementInputFromOptions options, EntityPlayerSP thisPlayer, GameSettings settings) + { + + String output = ""; + + boolean isFlying = thisPlayer.capabilities.isFlying; + boolean isRiding = thisPlayer.isRiding(); + boolean isHoldingSneak = settings.keyBindSneak.isKeyDown(); + boolean isHoldingSprint = settings.keyBindSprint.isKeyDown(); + + if(isFlying) + { + DecimalFormat numFormat = new DecimalFormat("#.00"); + + String speedVert = numFormat.format(flyboostspeedVertical); + String speedHori = numFormat.format(flyboostspeedHorizontal); + String label = speedVert + "x, " + speedHori + "x"; + + if(speedVert.equalsIgnoreCase(speedHori)) { + label = speedVert + "x"; + } + + if (optionEnableFlyBoost && sprint) output += "[Flying (" + label + " boost)] "; + else output += "[Flying] "; + } + if(isRiding) output += "[Riding] "; + + if (options.sneak) { + if(isFlying) output += "[Descending] "; + else if(isRiding) output += "[Dismounting] "; + else if(isHoldingSneak) output += "[Sneaking (Key Held)] "; + else output += "[Sneaking (Toggled)] "; + } else if (sprint) { + + if(!isFlying && !isRiding) { + boolean isVanilla = sprintHeldAndReleased || isDisabled || sprintDoubleTapped; + + if(isHoldingSprint) output += "[Sprinting (Key Held)]"; + else if(isVanilla) output += "[Sprinting (Vanilla)]"; + else output += "[Sprinting (Toggled)]"; + } + } else { + output += "[Inactive] "; + } + textForHUD = output; + } + + + public void render() { + if(!customFont) { + hud.setWidth(mc.fontRendererObj.getStringWidth(textForHUD) + 1); + hud.setHeight(mc.fontRendererObj.FONT_HEIGHT + 1); + } else { + hud.setWidth(FontManager.getProductSansRegular(25).width(textForHUD)); + hud.setHeight((int) (FontManager.getProductSansRegular(25).height() + 3)); + } + + if (mc.gameSettings.showDebugInfo) { + return; + } + + GL11.glPushMatrix(); + + 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("Fade")) { + RoundedUtils.drawRoundedRect(hud.getX(), hud.getY(), hud.getX() + hud.getWidth(), hud.getY() + hud.getHeight(), 8.0f, Athena.INSTANCE.getThemeManager().getTheme().getAccentColorWave().getRGB()); + } else { + RoundedUtils.drawRoundedRect(hud.getX(), hud.getY(), hud.getX() + hud.getWidth(), hud.getY() + hud.getHeight(), 12,background.getRGB()); + } + } + + if(!customFont) { + if(color.getBlue() == 5 && color.getRed() == 5 && color.getGreen() == 5) { + DrawUtils.drawChromaString(textForHUD, hud.getX() + 1, hud.getY() + 1, true ,true); + } else if(color.getBlue() == 6 && color.getRed() == 6 && color.getGreen() == 6) { + DrawUtils.drawChromaString(textForHUD, hud.getX() + 1, hud.getY() + 1, false ,true); + } else { + mc.fontRendererObj.drawStringWithShadow(textForHUD, (float) hud.getX() + 1, (float)hud.getY() + 1, color.getRGB()); + } + } else { + if(color.getBlue() == 5 && color.getRed() == 5 && color.getGreen() == 5) { + DrawUtils.drawCustomFontChromaString(FontManager.getProductSansRegular(25),textForHUD, hud.getX() + 1, hud.getY() + 3, true ,true); + } else if(color.getBlue() == 6 && color.getRed() == 6 && color.getGreen() == 6) { + DrawUtils.drawCustomFontChromaString(FontManager.getProductSansRegular(25),textForHUD, hud.getX() + 1, hud.getY() + 3, false ,true); + } else { + FontManager.getProductSansRegular(25).drawString(textForHUD, hud.getX() + 1, hud.getY() + 3, color.getRGB()); + } + } + GL11.glColor3f(1, 1, 1); + GL11.glPopMatrix(); + } +} diff --git a/src/main/java/rip/athena/client/modules/impl/other/AimTrainer.java b/src/main/java/rip/athena/client/modules/impl/other/AimTrainer.java new file mode 100644 index 00000000..d75239e3 --- /dev/null +++ b/src/main/java/rip/athena/client/modules/impl/other/AimTrainer.java @@ -0,0 +1,316 @@ +package rip.athena.client.modules.impl.other; + +import com.mojang.authlib.GameProfile; +import net.minecraft.client.entity.EntityOtherPlayerMP; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.Vec3; +import rip.athena.client.Athena; +import rip.athena.client.config.ConfigValue; +import rip.athena.client.events.SubscribeEvent; +import rip.athena.client.events.types.client.ClientTickEvent; +import rip.athena.client.events.types.entity.AttackEntityEvent; +import rip.athena.client.events.types.input.MouseDownEvent; +import rip.athena.client.events.types.render.RenderEvent; +import rip.athena.client.events.types.render.RenderType; +import rip.athena.client.gui.hud.HUDElement; +import rip.athena.client.modules.Category; +import rip.athena.client.modules.Module; +import rip.athena.client.utils.NumberUtils; +import rip.athena.client.utils.font.FontManager; +import rip.athena.client.utils.render.ColorUtil; +import rip.athena.client.utils.render.DrawUtils; +import rip.athena.client.utils.render.RoundedUtils; + +import java.awt.*; +import java.text.DecimalFormat; +import java.text.Format; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +/** + * @author Athena Development + * @project Athena-Client + * @date 6/10/2023 + */ +public class AimTrainer extends Module { + + @ConfigValue.List(name = "Display Mode", values = {"Circle", "Modern", "Fade", "Old"}, description = "Chose display of background") + private String backgroundMode = "Circle"; + + @ConfigValue.Boolean(name = "Move") + private boolean move = true; + + @ConfigValue.Float(name = "Speed", min = 1f, max = 10f) + private float speed = 4f; + + @ConfigValue.Float(name = "Distance", min = 1f, max = 10f) + private float distance = 3f; + + @ConfigValue.Boolean(name = "Background") + private boolean backGround = true; + + @ConfigValue.Color(name = "Background Color") + private Color background = new Color(0, 0, 0, 150); + + @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; + + public List bots = new ArrayList<>(); + public EntityOtherPlayerMP bot; + + public int hitCount = 0; + public int failedHit = 0; + public float accuracy; + + public Vec3 position; + + private HUDElement hud; + private int width = 56; + private int height = 18; + + public AimTrainer() { + super("Aim Trainer", Category.RENDER, "Athena/gui/mods/time.png"); + + hud = new HUDElement("time", width, height) { + @Override + public void onRender() { + render(); + } + }; + + hud.setX(1); + hud.setY(190); + + addHUD(hud); + } + + public void render() { + int width = hud.getWidth(); + int height = hud.getHeight(); + + if(backGround) { + if(backgroundMode.equalsIgnoreCase("Modern")) { + if(Athena.INSTANCE.getThemeManager().getTheme().isTriColor()) { + RoundedUtils.drawGradientRound(hud.getX(), hud.getY(), hud.getWidth(), hud.getHeight(), 6, Athena.INSTANCE.getThemeManager().getTheme().getFirstColor(), Athena.INSTANCE.getThemeManager().getTheme().getSecondColor(), Athena.INSTANCE.getThemeManager().getTheme().getThirdColor(), Athena.INSTANCE.getThemeManager().getTheme().getFirstColor()); + } else { + RoundedUtils.drawGradientRound(hud.getX(), hud.getY(), hud.getWidth(), hud.getHeight(), 6, Athena.INSTANCE.getThemeManager().getTheme().getFirstColor(), Athena.INSTANCE.getThemeManager().getTheme().getFirstColor(), Athena.INSTANCE.getThemeManager().getTheme().getSecondColor(), Athena.INSTANCE.getThemeManager().getTheme().getSecondColor()); + } + } else if (backgroundMode.equalsIgnoreCase("Circle")) { + RoundedUtils.drawGradientRound(hud.getX(), hud.getY(), hud.getWidth(), hud.getHeight(), 6, ColorUtil.getClientColor(0, 255), ColorUtil.getClientColor(90, 255), ColorUtil.getClientColor(180, 255), ColorUtil.getClientColor(270, 255)); + } else if (backgroundMode.equalsIgnoreCase("Fade")) { + RoundedUtils.drawRoundedRect(hud.getX(), hud.getY(), hud.getX() + width, hud.getY() + height, 8.0f, Athena.INSTANCE.getThemeManager().getTheme().getAccentColor().getRGB()); + } else { + RoundedUtils.drawRoundedRect(hud.getX(), hud.getY(), hud.getX() + width, hud.getY() + height, 12,background.getRGB()); + } + } + + float posY = hud.getY() + 2; + float posX = hud.getX() + 9; + + if(customFont) { + hud.setWidth((int)rip.athena.client.utils.font.FontManager.getProductSansRegular(25).width(accuracy + "%" + 20)); + hud.setHeight((int) FontManager.getProductSansRegular(25).height()); + + if(isUsingStaticChroma) { + DrawUtils.drawCustomFontChromaString(rip.athena.client.utils.font.FontManager.getProductSansRegular(25), accuracy + "%", (int) (posX), (int) posY, true, true); + } else if(isUsingWaveChroma) { + DrawUtils.drawCustomFontChromaString(rip.athena.client.utils.font.FontManager.getProductSansRegular(25), accuracy + "%", (int) (posX), (int) posY, false, true); + } else { + rip.athena.client.utils.font.FontManager.getProductSansRegular(25).drawString(accuracy + "%",(int) (posX), (int)posY, color.getRGB()); + } + } else { + hud.setWidth(mc.fontRendererObj.getStringWidth(accuracy + "%") + 16); + hud.setHeight(mc.fontRendererObj.FONT_HEIGHT + 9); + + + if(isUsingStaticChroma) { + DrawUtils.drawChromaString(accuracy + "%", posX, posY + 3, true ,true); + } else if(isUsingWaveChroma) { + DrawUtils.drawChromaString(accuracy + "%", posX, posY + 3, false ,true); + } else { + mc.fontRendererObj.drawStringWithShadow(accuracy + "%", (float) (posX), (float) posY+ 3, color.getRGB()); + } + } + } + + @SubscribeEvent + public void onAttack(AttackEntityEvent event) { + if (event.getTarget() == getBot("ziue")) { + hitCount++; + delBot("ziue"); + createBotRandomPosition("ziue"); + Athena.INSTANCE.getLog().info("you have hit the bot"); + event.setCancelled(true); + } + + updateAccuracy(); + } + + @SubscribeEvent + public void onMouseDown(MouseDownEvent event) { + if(event.getButton() == 0) { + if(mc.objectMouseOver != null) { + if (mc.objectMouseOver.entityHit == null) { + failedHit++; + Athena.INSTANCE.getLog().info("YOU MISSED A HIT: " + failedHit); + updateAccuracy(); + } + } + } + } + + private void updateAccuracy() { + if(failedHit > 0) { + this.accuracy = Float.parseFloat(NumberUtils.getStringValueOfFloat((float) hitCount / failedHit * 100, NumberUtils.Format.Hundredths)); + } else { + accuracy = 100; + } + + accuracy = Math.min(accuracy, 100); + + Athena.INSTANCE.getLog().info("Accuracy: " + accuracy + "%"); + } + + /** + * Creates a bot with the given username. + * @param username The username of the bot. + */ + public void createBot(String username) { + if (!isBot(username) && mc.thePlayer != null) { + + EntityOtherPlayerMP bot = new EntityOtherPlayerMP(mc.thePlayer.getEntityWorld(), new GameProfile(UUID.randomUUID(), username)); + mc.theWorld.addEntityToWorld(bot.getEntityId(), bot); + bot.setPositionAndRotation(mc.thePlayer.posX, mc.thePlayer.posY, mc.thePlayer.posZ, mc.thePlayer.rotationYaw, mc.thePlayer.rotationPitch); + bots.add(bot); + } + } + + /** + * Creates a bot with the given username. + * @param username The username of the bot. + */ + public void createBotRandomPosition(String username) { + if (!isBot(username) && mc.thePlayer != null) { + + double x = mc.thePlayer.posX; + double y = mc.thePlayer.posY; + double z = mc.thePlayer.posZ; + + double randomX = randomDoubleNumber(false, x - 3, x + 3); + double randomY = randomDoubleNumber(false, y, y + 2); + double randomZ = randomDoubleNumber(false, z - 3, z + 3); + + EntityOtherPlayerMP bot = new EntityOtherPlayerMP(mc.thePlayer.getEntityWorld(), new GameProfile(UUID.randomUUID(), username)); + mc.theWorld.addEntityToWorld(bot.getEntityId(), bot); + bot.setPositionAndRotation(randomX, randomY, randomZ, mc.thePlayer.rotationYaw, mc.thePlayer.rotationPitch); + + position = new Vec3(bot.posX, bot.posY, bot.posZ); + + bots.add(bot); + } + } + + @SubscribeEvent + public void onTick(RenderEvent event) { + if(event.getRenderType() != RenderType.INGAME_OVERLAY) return; + + bot = getBot("ziue"); + if(bot != null && move) { + bot.setPositionAndRotation2(position.xCoord - Math.sin(bot.ticksExisted * speed / 10) * distance, position.yCoord, position.zCoord + Math.cos(bot.ticksExisted * speed / 10) * distance, bot.rotationYaw, bot.rotationPitch, 3, true); + } + } + + /** + * Deletes the bot with the given username. + * @param username The username of the bot to delete. + */ + public void delBot(String username) { + if(isBot(username)) { + mc.theWorld.removeEntityFromWorld(getBot(username).getEntityId()); + bots.remove(getBot(username)); + } + } + + /** + * Returns the number of bots in the list. + * @return The number of bots. + */ + public void botList() { + if(bots.size() != 0) { + int numberList = 1; + for(EntityOtherPlayerMP b : bots) { + numberList++; + } + } else { + return; + } + } + + public static double randomDoubleNumber(boolean round, double min, double max) { + return round ? Math.round(Math.random() * (max - min) + min) : (Math.random() * (max - min) + min); + } + + /** + * Retrieves the bot with the given username. + * @param name The username of the bot to retrieve. + * @return The bot with the specified username, or null if not found. + */ + public EntityOtherPlayerMP getBot(String name) { + for (EntityOtherPlayerMP bot : bots) { + if (bot.getName().equalsIgnoreCase(name)) { + return bot; + } + } + return null; + } + + /** + * Checks if a bot with the given username exists. + * @param name The username to check. + * @return true if a bot with the username exists, false otherwise. + */ + public boolean isBot(String name) { + for (EntityOtherPlayerMP bot : bots) { + if (bot.getName().equalsIgnoreCase(name)) { + return true; + } + } + return false; + } + + public void clearBots() { + for(EntityOtherPlayerMP bot : bots) { + mc.theWorld.removeEntityFromWorld(bot.getEntityId()); + } + } + + @Override + public void onEnable() { + createBot("ziue"); + accuracy = 100; + + super.onEnable(); + } + + @Override + public void onDisable() { + + clearBots(); + bots.clear(); + accuracy = 0; + hitCount = 0; + failedHit = 0; + + super.onDisable(); + } +} diff --git a/src/main/java/rip/athena/client/modules/impl/other/NickHider.java b/src/main/java/rip/athena/client/modules/impl/other/NickHider.java new file mode 100644 index 00000000..9b749f50 --- /dev/null +++ b/src/main/java/rip/athena/client/modules/impl/other/NickHider.java @@ -0,0 +1,20 @@ +package rip.athena.client.modules.impl.other; + +import rip.athena.client.config.ConfigValue; +import rip.athena.client.modules.Category; +import rip.athena.client.modules.Module; + +/** + * @author Athena Development + * @project Athena-Client + * @date 6/9/2023 + */ +public class NickHider extends Module { + + @ConfigValue.Text(name = "Nick", description = "Enter the name of your custom nickname") + public String nick = "Custom Nick"; + + public NickHider() { + super("Nick Hider", Category.OTHER, "Athena/gui/mods/nickhider.png"); + } +} diff --git a/src/main/java/rip/athena/client/modules/impl/render/CPS.java b/src/main/java/rip/athena/client/modules/impl/render/CPS.java index 81b3216c..0aa7dfd4 100644 --- a/src/main/java/rip/athena/client/modules/impl/render/CPS.java +++ b/src/main/java/rip/athena/client/modules/impl/render/CPS.java @@ -10,6 +10,7 @@ import rip.athena.client.gui.hud.HUDElement; import rip.athena.client.modules.Category; import rip.athena.client.modules.Module; import rip.athena.client.utils.ClickCounter; +import rip.athena.client.utils.render.ColorUtil; import rip.athena.client.utils.render.DrawUtils; import rip.athena.client.utils.render.RoundedUtils; @@ -34,8 +35,8 @@ public class CPS extends Module { @ConfigValue.Boolean(name = "Background") private boolean backGround = true; - @ConfigValue.List(name = "Display Mode", values = {"Modern", "Fade", "Old"}, description = "Chose display of background") - private String backgroundMode = "Modern"; + @ConfigValue.List(name = "Display Mode", values = {"Circle", "Modern", "Fade", "Old"}, description = "Chose display of background") + private String backgroundMode = "Circle"; @ConfigValue.Color(name = "Background Color") private Color background = new Color(0, 0, 0, 150); @@ -81,16 +82,18 @@ public class CPS extends Module { int height = hud.getHeight(); if(backGround) { - if(backgroundMode.equalsIgnoreCase("Modern")) { + 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()); + RoundedUtils.drawGradientRound(hud.getX(), hud.getY(), hud.getWidth(), hud.getHeight(), 6, Athena.INSTANCE.getThemeManager().getTheme().getFirstColor(), Athena.INSTANCE.getThemeManager().getTheme().getFirstColor(), Athena.INSTANCE.getThemeManager().getTheme().getSecondColor(), Athena.INSTANCE.getThemeManager().getTheme().getSecondColor()); } + } else if (backgroundMode.equalsIgnoreCase("Circle")) { + RoundedUtils.drawGradientRound(hud.getX(), hud.getY(), hud.getWidth(), hud.getHeight(), 6, ColorUtil.getClientColor(0, 255), ColorUtil.getClientColor(90, 255), ColorUtil.getClientColor(180, 255), ColorUtil.getClientColor(270, 255)); } else if (backgroundMode.equalsIgnoreCase("Fade")) { RoundedUtils.drawRoundedRect(hud.getX(), hud.getY(), hud.getX() + width, hud.getY() + height, 8.0f, Athena.INSTANCE.getThemeManager().getTheme().getAccentColor().getRGB()); } else { - DrawUtils.drawGradientRect(hud.getX(), hud.getY(), hud.getX() + width, hud.getY() + height, background.getRGB(), background.getRGB()); + RoundedUtils.drawRoundedRect(hud.getX(), hud.getY(), hud.getX() + width, hud.getY() + height, 12,background.getRGB()); } } @@ -98,7 +101,7 @@ public class CPS extends Module { float posX = hud.getX() + 9; if(customFont) { - hud.setWidth((int) rip.athena.client.utils.font.FontManager.getProductSansRegular(30).width(string) + 16); + hud.setWidth((int) rip.athena.client.utils.font.FontManager.getProductSansRegular(25).width(string) + 16); hud.setHeight((int)FontManager.baloo17.getHeight(string) + 7); if(isUsingStaticChroma) { diff --git a/src/main/java/rip/athena/client/modules/impl/render/Chat.java b/src/main/java/rip/athena/client/modules/impl/render/Chat.java index 974ff1ba..3897d285 100644 --- a/src/main/java/rip/athena/client/modules/impl/render/Chat.java +++ b/src/main/java/rip/athena/client/modules/impl/render/Chat.java @@ -11,8 +11,8 @@ import rip.athena.client.modules.Module; */ public class Chat extends Module { - @ConfigValue.Boolean(name = "Custom Font") - public static boolean customFont = false; + @ConfigValue.Boolean(name = "Infinite Chat") + public boolean infiniteChat = false; public Chat() { super("Chat", Category.RENDER, "Athena/gui/mods/chat.png"); diff --git a/src/main/java/rip/athena/client/modules/impl/render/Clock.java b/src/main/java/rip/athena/client/modules/impl/render/Clock.java index 4d40b975..be240687 100644 --- a/src/main/java/rip/athena/client/modules/impl/render/Clock.java +++ b/src/main/java/rip/athena/client/modules/impl/render/Clock.java @@ -3,10 +3,11 @@ package rip.athena.client.modules.impl.render; import org.lwjgl.opengl.GL11; import rip.athena.client.Athena; import rip.athena.client.config.ConfigValue; -import rip.athena.client.font.FontManager; import rip.athena.client.gui.hud.HUDElement; import rip.athena.client.modules.Category; import rip.athena.client.modules.Module; +import rip.athena.client.utils.font.FontManager; +import rip.athena.client.utils.render.ColorUtil; import rip.athena.client.utils.render.DrawUtils; import rip.athena.client.utils.render.RoundedUtils; @@ -26,8 +27,8 @@ public class Clock extends Module { @ConfigValue.List(name = "Clock Format", values = {"yyyy/MM/dd HH:mm:ss","MM/dd/yyyy", "dd/MM/yyyy", "dd/MM/yyyy hh:mm a" , "MM/dd/yyyy hh:mm a" ,"E, MMM dd yyyy","hh:mm a", "hh:mm:ss a", "yyyy-MM-dd"}) private String format = "yyyy/MM/dd HH:mm:ss"; - @ConfigValue.List(name = "Display Mode", values = {"Modern", "Fade", "Old"}, description = "Chose display of background") - private String backgroundMode = "Modern"; + @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; @@ -85,11 +86,17 @@ public class Clock extends Module { if(backGround) { if(backgroundMode.equalsIgnoreCase("Modern")) { - 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()); + if(Athena.INSTANCE.getThemeManager().getTheme().isTriColor()) { + RoundedUtils.drawGradientRound(hud.getX(), hud.getY(), hud.getWidth(), hud.getHeight(), 6, Athena.INSTANCE.getThemeManager().getTheme().getFirstColor(), Athena.INSTANCE.getThemeManager().getTheme().getSecondColor(), Athena.INSTANCE.getThemeManager().getTheme().getThirdColor(), Athena.INSTANCE.getThemeManager().getTheme().getFirstColor()); + } else { + RoundedUtils.drawGradientRound(hud.getX(), hud.getY(), hud.getWidth(), hud.getHeight(), 6, Athena.INSTANCE.getThemeManager().getTheme().getFirstColor(), Athena.INSTANCE.getThemeManager().getTheme().getFirstColor(), Athena.INSTANCE.getThemeManager().getTheme().getSecondColor(), Athena.INSTANCE.getThemeManager().getTheme().getSecondColor()); + } + } else if (backgroundMode.equalsIgnoreCase("Circle")) { + RoundedUtils.drawGradientRound(hud.getX(), hud.getY(), hud.getWidth(), hud.getHeight(), 6, ColorUtil.getClientColor(0, 255), ColorUtil.getClientColor(90, 255), ColorUtil.getClientColor(180, 255), ColorUtil.getClientColor(270, 255)); } else if (backgroundMode.equalsIgnoreCase("Fade")) { RoundedUtils.drawRoundedRect(hud.getX(), hud.getY(), hud.getX() + width, hud.getY() + height, 8.0f, Athena.INSTANCE.getThemeManager().getTheme().getAccentColor().getRGB()); } else { - DrawUtils.drawGradientRect(hud.getX(), hud.getY(), hud.getX() + width, hud.getY() + height, background.getRGB(), background.getRGB()); + RoundedUtils.drawRoundedRect(hud.getX(), hud.getY(), hud.getX() + width, hud.getY() + height, 12,background.getRGB()); } } @@ -97,15 +104,15 @@ public class Clock extends Module { float posX = hud.getX() + 9; if(customFont) { - hud.setWidth((int)rip.athena.client.utils.font.FontManager.getProductSansRegular(30).width(string) + 16); - hud.setHeight((int)FontManager.baloo17.getHeight(string) + 7); + hud.setWidth((int)rip.athena.client.utils.font.FontManager.getProductSansRegular(25).width(string) + 16); + hud.setHeight((int) FontManager.getProductSansRegular(25).height()); if(isUsingStaticChroma) { DrawUtils.drawCustomFontChromaString(rip.athena.client.utils.font.FontManager.getProductSansRegular(25), string, (int) (posX), (int) posY, true, true); } else if(isUsingWaveChroma) { DrawUtils.drawCustomFontChromaString(rip.athena.client.utils.font.FontManager.getProductSansRegular(25), string, (int) (posX), (int) posY, false, true); } else { - rip.athena.client.utils.font.FontManager.getProductSansRegular(30).drawString(string,(int) (posX), (int)posY, color.getRGB()); + rip.athena.client.utils.font.FontManager.getProductSansRegular(25).drawString(string,(int) (posX), (int)posY, color.getRGB()); } } else { hud.setWidth(mc.fontRendererObj.getStringWidth(string) + 16); diff --git a/src/main/java/rip/athena/client/modules/impl/render/Coordinates.java b/src/main/java/rip/athena/client/modules/impl/render/Coordinates.java index a5f36b26..a747d7c7 100644 --- a/src/main/java/rip/athena/client/modules/impl/render/Coordinates.java +++ b/src/main/java/rip/athena/client/modules/impl/render/Coordinates.java @@ -21,6 +21,7 @@ import rip.athena.client.font.FontManager; import rip.athena.client.gui.hud.HUDElement; import rip.athena.client.modules.Category; import rip.athena.client.modules.Module; +import rip.athena.client.utils.render.ColorUtil; import rip.athena.client.utils.render.DrawUtils; import rip.athena.client.utils.render.RoundedUtils; @@ -65,8 +66,8 @@ public class Coordinates extends Module { @ConfigValue.List(name = "Display Mode", values = {"Horizontal", "Vertical"}, description = "How the hud should be displayed") private String displayMode = "Vertical"; - @ConfigValue.List(name = "Display Mode", values = {"Modern", "Fade", "Old"}, description = "Chose display of background") - private String backgroundMode = "Modern"; + @ConfigValue.List(name = "Display Mode", values = {"Circle", "Modern", "Fade", "Old"}, description = "Chose display of background") + private String backgroundMode = "Circle"; @ConfigValue.Color(name = "Background Color") private Color backgroundColor = new Color(0, 0, 0, 150); @@ -199,12 +200,19 @@ public class Coordinates extends Module { if(this.shadedCoords) { if(backgroundMode.equalsIgnoreCase("Modern")) { - 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()); + if(Athena.INSTANCE.getThemeManager().getTheme().isTriColor()) { + RoundedUtils.drawGradientRound(hud.getX(), hud.getY(), hud.getWidth(), hud.getHeight(), 6, Athena.INSTANCE.getThemeManager().getTheme().getFirstColor(), Athena.INSTANCE.getThemeManager().getTheme().getSecondColor(), Athena.INSTANCE.getThemeManager().getTheme().getThirdColor(), Athena.INSTANCE.getThemeManager().getTheme().getFirstColor()); + } else { + RoundedUtils.drawGradientRound(hud.getX(), hud.getY(), hud.getWidth(), hud.getHeight(), 6, Athena.INSTANCE.getThemeManager().getTheme().getFirstColor(), Athena.INSTANCE.getThemeManager().getTheme().getFirstColor(), Athena.INSTANCE.getThemeManager().getTheme().getSecondColor(), Athena.INSTANCE.getThemeManager().getTheme().getSecondColor()); + } + } else if (backgroundMode.equalsIgnoreCase("Circle")) { + RoundedUtils.drawGradientRound(hud.getX(), hud.getY(), hud.getWidth(), hud.getHeight(), 6, ColorUtil.getClientColor(0, 255), ColorUtil.getClientColor(90, 255), ColorUtil.getClientColor(180, 255), ColorUtil.getClientColor(270, 255)); } else if (backgroundMode.equalsIgnoreCase("Fade")) { - RoundedUtils.drawRoundedRect(hud.getX(), hud.getY(), hud.getX() + width, hud.getY() + height, 8.0f, Athena.INSTANCE.getThemeManager().getTheme().getAccentColor().getRGB()); + RoundedUtils.drawRoundedRect(hud.getX(), hud.getY(), hud.getX() + width, hud.getY() + height, 8.0f, Athena.INSTANCE.getThemeManager().getTheme().getAccentColorWave().getRGB()); } else { - DrawUtils.drawGradientRect(hud.getX(), hud.getY(), hud.getX() + width, hud.getY() + height, backgroundColor.getRGB(), backgroundColor.getRGB()); + RoundedUtils.drawRoundedRect(hud.getX(), hud.getY(), hud.getX() + width, hud.getY() + height, 12,backgroundColor.getRGB()); } + } drawString(med, (float) (posX - 2 + (width / 2 - (getStringWidth(med) / 2))), (float) posY + 5, vColor); @@ -266,6 +274,8 @@ public class Coordinates extends Module { 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("Fade")) { RoundedUtils.drawRoundedRect(hud.getX(), hud.getY(), hud.getX() + width, hud.getY() + height, 8.0f, Athena.INSTANCE.getThemeManager().getTheme().getAccentColor().getRGB()); + } else if (backgroundMode.equalsIgnoreCase("Circle")) { + RoundedUtils.drawGradientRound(hud.getX(), hud.getY(), hud.getWidth(), hud.getHeight(), 6, ColorUtil.getClientColor(0, 255), ColorUtil.getClientColor(90, 255), ColorUtil.getClientColor(180, 255), ColorUtil.getClientColor(270, 255)); } else { DrawUtils.drawGradientRect(hud.getX(), hud.getY(), hud.getX() + width, hud.getY() + height, backgroundColor.getRGB(), backgroundColor.getRGB()); } diff --git a/src/main/java/rip/athena/client/modules/impl/render/CustomText.java b/src/main/java/rip/athena/client/modules/impl/render/CustomText.java index 08d3dba4..c8070723 100644 --- a/src/main/java/rip/athena/client/modules/impl/render/CustomText.java +++ b/src/main/java/rip/athena/client/modules/impl/render/CustomText.java @@ -28,8 +28,8 @@ public class CustomText extends Module { @ConfigValue.Boolean(name = "Custom Font") private boolean customFont = false; - @ConfigValue.List(name = "Display Mode", values = {"Modern", "Fade", "Old"}, description = "Chose display of background") - private String backgroundMode = "Modern"; + @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; @@ -72,16 +72,16 @@ public class CustomText extends Module { int height = hud.getHeight(); if(backGround) { - if(backgroundMode.equalsIgnoreCase("Modern")) { + 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("Fade")) { - RoundedUtils.drawRoundedRect(hud.getX(), hud.getY(), hud.getX() + width, hud.getY() + height, 8.0f, Athena.INSTANCE.getThemeManager().getTheme().getAccentColor().getRGB()); + RoundedUtils.drawRoundedRect(hud.getX(), hud.getY(), hud.getX() + width, hud.getY() + height, 8.0f, Athena.INSTANCE.getThemeManager().getTheme().getAccentColorWave().getRGB()); } else { - DrawUtils.drawGradientRect(hud.getX(), hud.getY(), hud.getX() + width, hud.getY() + height, background.getRGB(), background.getRGB()); + RoundedUtils.drawRoundedRect(hud.getX(), hud.getY(), hud.getX() + width, hud.getY() + height, 12,background.getRGB()); } } @@ -89,7 +89,7 @@ public class CustomText extends Module { float posX = hud.getX() + 9; if(customFont) { - hud.setWidth((int) rip.athena.client.utils.font.FontManager.getProductSansRegular(30).width(customText) + 16); + hud.setWidth((int) rip.athena.client.utils.font.FontManager.getProductSansRegular(25).width(customText) + 16); hud.setHeight((int)FontManager.baloo17.getHeight(customText) + 7); if(isUsingStaticChroma) { @@ -97,7 +97,7 @@ public class CustomText extends Module { } else if(isUsingWaveChroma) { DrawUtils.drawCustomFontChromaString(rip.athena.client.utils.font.FontManager.getProductSansRegular(25), customText, (int) (posX), (int) posY + 1, false, true); } else { - rip.athena.client.utils.font.FontManager.getProductSansRegular(30).drawString(customText,(int) (posX), (int)posY + 1, color.getRGB()); + rip.athena.client.utils.font.FontManager.getProductSansRegular(25).drawString(customText,(int) (posX), (int)posY + 1, color.getRGB()); } } else { hud.setWidth(mc.fontRendererObj.getStringWidth(customText) + 16); diff --git a/src/main/java/rip/athena/client/modules/impl/render/EntityHUD.java b/src/main/java/rip/athena/client/modules/impl/render/EntityHUD.java index 2c555deb..0071ddc0 100644 --- a/src/main/java/rip/athena/client/modules/impl/render/EntityHUD.java +++ b/src/main/java/rip/athena/client/modules/impl/render/EntityHUD.java @@ -19,8 +19,8 @@ import java.awt.*; */ public class EntityHUD extends Module { - @ConfigValue.List(name = "Display Mode", values = {"Modern", "Fade", "Old"}, description = "Chose display of background") - private String backgroundMode = "Modern"; + @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; @@ -73,11 +73,15 @@ public class EntityHUD extends Module { if(backGround) { if(backgroundMode.equalsIgnoreCase("Modern")) { - 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()); + 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("Fade")) { - RoundedUtils.drawRoundedRect(hud.getX(), hud.getY(), hud.getX() + width, hud.getY() + height, 8.0f, Athena.INSTANCE.getThemeManager().getTheme().getAccentColor().getRGB()); + RoundedUtils.drawRoundedRect(hud.getX(), hud.getY(), hud.getX() + width, hud.getY() + height, 8.0f, Athena.INSTANCE.getThemeManager().getTheme().getAccentColorWave().getRGB()); } else { - DrawUtils.drawGradientRect(hud.getX(), hud.getY(), hud.getX() + width, hud.getY() + height, background.getRGB(), background.getRGB()); + RoundedUtils.drawRoundedRect(hud.getX(), hud.getY(), hud.getX() + width, hud.getY() + height, 12,background.getRGB()); } } diff --git a/src/main/java/rip/athena/client/modules/impl/render/FPSMod.java b/src/main/java/rip/athena/client/modules/impl/render/FPSMod.java index b2b80b85..175bdcbc 100644 --- a/src/main/java/rip/athena/client/modules/impl/render/FPSMod.java +++ b/src/main/java/rip/athena/client/modules/impl/render/FPSMod.java @@ -14,6 +14,7 @@ import rip.athena.client.gui.hud.HUDElement; import rip.athena.client.gui.menu.AthenaMenu; import rip.athena.client.modules.Category; import rip.athena.client.modules.Module; +import rip.athena.client.utils.render.ColorUtil; import rip.athena.client.utils.render.DrawUtils; import rip.athena.client.utils.render.RoundedUtils; @@ -28,8 +29,8 @@ import static org.lwjgl.opengl.GL11.GL_GREATER; */ public class FPSMod extends Module { - @ConfigValue.List(name = "Display Mode", values = {"Modern", "Fade", "Old"}, description = "Chose display of background") - private String backgroundMode = "Modern"; + @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; @@ -85,12 +86,14 @@ public class FPSMod extends Module { 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()); + RoundedUtils.drawGradientRound(hud.getX(), hud.getY(), hud.getWidth(), hud.getHeight(), 6, Athena.INSTANCE.getThemeManager().getTheme().getFirstColor(), Athena.INSTANCE.getThemeManager().getTheme().getFirstColor(), Athena.INSTANCE.getThemeManager().getTheme().getSecondColor(), Athena.INSTANCE.getThemeManager().getTheme().getSecondColor()); } + } else if (backgroundMode.equalsIgnoreCase("Circle")) { + RoundedUtils.drawGradientRound(hud.getX(), hud.getY(), hud.getWidth(), hud.getHeight(), 6, ColorUtil.getClientColor(0, 255), ColorUtil.getClientColor(90, 255), ColorUtil.getClientColor(180, 255), ColorUtil.getClientColor(270, 255)); } else if (backgroundMode.equalsIgnoreCase("Fade")) { - RoundedUtils.drawRoundedRect(hud.getX(), hud.getY(), hud.getX() + width, hud.getY() + height, 8.0f, Athena.INSTANCE.getThemeManager().getTheme().getAccentColorWave().getRGB()); + RoundedUtils.drawRoundedRect(hud.getX(), hud.getY(), hud.getX() + width, hud.getY() + height, 8.0f, Athena.INSTANCE.getThemeManager().getTheme().getAccentColor().getRGB()); } else { - DrawUtils.drawGradientRect(hud.getX(), hud.getY(), hud.getX() + width, hud.getY() + height, background.getRGB(), background.getRGB()); + RoundedUtils.drawRoundedRect(hud.getX(), hud.getY(), hud.getX() + width, hud.getY() + height, 12,background.getRGB()); } } @@ -98,7 +101,7 @@ public class FPSMod extends Module { float posX = hud.getX() + 9; if(customFont) { - hud.setWidth((int)rip.athena.client.utils.font.FontManager.getProductSansRegular(30).width(string) + 16); + hud.setWidth((int)rip.athena.client.utils.font.FontManager.getProductSansRegular(25).width(string) + 16); hud.setHeight((int)FontManager.baloo17.getHeight(string) + 7); if(isUsingStaticChroma) { diff --git a/src/main/java/rip/athena/client/modules/impl/render/MemoryUsage.java b/src/main/java/rip/athena/client/modules/impl/render/MemoryUsage.java index ecd126a4..82aba02c 100644 --- a/src/main/java/rip/athena/client/modules/impl/render/MemoryUsage.java +++ b/src/main/java/rip/athena/client/modules/impl/render/MemoryUsage.java @@ -7,6 +7,7 @@ import rip.athena.client.font.FontManager; import rip.athena.client.gui.hud.HUDElement; import rip.athena.client.modules.Category; import rip.athena.client.modules.Module; +import rip.athena.client.utils.render.ColorUtil; import rip.athena.client.utils.render.DrawUtils; import rip.athena.client.utils.render.RoundedUtils; @@ -21,8 +22,8 @@ public class MemoryUsage extends Module { @ConfigValue.Boolean(name = "Percentage", description = "Show memory usage in percentage.") private boolean percentage = false; - @ConfigValue.List(name = "Display Mode", values = {"Modern", "Fade", "Old"}, description = "Chose display of background") - private String backgroundMode = "Modern"; + @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; @@ -89,11 +90,17 @@ public class MemoryUsage extends Module { if(backGround) { if(backgroundMode.equalsIgnoreCase("Modern")) { - 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()); + if(Athena.INSTANCE.getThemeManager().getTheme().isTriColor()) { + RoundedUtils.drawGradientRound(hud.getX(), hud.getY(), hud.getWidth(), hud.getHeight(), 6, Athena.INSTANCE.getThemeManager().getTheme().getFirstColor(), Athena.INSTANCE.getThemeManager().getTheme().getSecondColor(), Athena.INSTANCE.getThemeManager().getTheme().getThirdColor(), Athena.INSTANCE.getThemeManager().getTheme().getFirstColor()); + } else { + RoundedUtils.drawGradientRound(hud.getX(), hud.getY(), hud.getWidth(), hud.getHeight(), 6, Athena.INSTANCE.getThemeManager().getTheme().getFirstColor(), Athena.INSTANCE.getThemeManager().getTheme().getFirstColor(), Athena.INSTANCE.getThemeManager().getTheme().getSecondColor(), Athena.INSTANCE.getThemeManager().getTheme().getSecondColor()); + } + } else if (backgroundMode.equalsIgnoreCase("Circle")) { + RoundedUtils.drawGradientRound(hud.getX(), hud.getY(), hud.getWidth(), hud.getHeight(), 6, ColorUtil.getClientColor(0, 255), ColorUtil.getClientColor(90, 255), ColorUtil.getClientColor(180, 255), ColorUtil.getClientColor(270, 255)); } else if (backgroundMode.equalsIgnoreCase("Fade")) { RoundedUtils.drawRoundedRect(hud.getX(), hud.getY(), hud.getX() + width, hud.getY() + height, 8.0f, Athena.INSTANCE.getThemeManager().getTheme().getAccentColor().getRGB()); } else { - DrawUtils.drawGradientRect(hud.getX(), hud.getY(), hud.getX() + width, hud.getY() + height, background.getRGB(), background.getRGB()); + RoundedUtils.drawRoundedRect(hud.getX(), hud.getY(), hud.getX() + width, hud.getY() + height, 12,background.getRGB()); } } @@ -101,7 +108,7 @@ public class MemoryUsage extends Module { float posX = hud.getX() + 9; if(customFont) { - hud.setWidth((int)rip.athena.client.utils.font.FontManager.getProductSansRegular(30).width(string) + 16); + hud.setWidth((int)rip.athena.client.utils.font.FontManager.getProductSansRegular(25).width(string) + 16); hud.setHeight((int)FontManager.baloo17.getHeight(string) + 7); if(isUsingStaticChroma) { @@ -109,7 +116,7 @@ public class MemoryUsage extends Module { } else if(isUsingWaveChroma) { DrawUtils.drawCustomFontChromaString(rip.athena.client.utils.font.FontManager.getProductSansRegular(25), string, (int) (posX), (int) posY, false, true); } else { - rip.athena.client.utils.font.FontManager.getProductSansRegular(30).drawString(string,(int) (posX), (int)posY, color.getRGB()); + rip.athena.client.utils.font.FontManager.getProductSansRegular(25).drawString(string,(int) (posX), (int)posY, color.getRGB()); } } else { hud.setWidth(mc.fontRendererObj.getStringWidth(string) + 16); diff --git a/src/main/java/rip/athena/client/modules/impl/render/PotCounter.java b/src/main/java/rip/athena/client/modules/impl/render/PotCounter.java index f4aebf00..b35d2b52 100644 --- a/src/main/java/rip/athena/client/modules/impl/render/PotCounter.java +++ b/src/main/java/rip/athena/client/modules/impl/render/PotCounter.java @@ -12,6 +12,7 @@ import rip.athena.client.font.FontManager; import rip.athena.client.gui.hud.HUDElement; import rip.athena.client.modules.Category; import rip.athena.client.modules.Module; +import rip.athena.client.utils.render.ColorUtil; import rip.athena.client.utils.render.DrawUtils; import rip.athena.client.utils.render.RoundedUtils; @@ -27,8 +28,8 @@ public class PotCounter extends Module { @ConfigValue.Color(name = "Color") private Color color = Color.WHITE; - @ConfigValue.List(name = "Display Mode", values = {"Modern", "Fade", "Old"}, description = "Chose display of background") - private String backgroundMode = "Modern"; + @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; @@ -72,8 +73,6 @@ public class PotCounter extends Module { public void render() { if(mc.gameSettings.showDebugInfo) return; - GL11.glPushMatrix(); - counter = 0; if(mc.thePlayer != null && mc.theWorld != null) { @@ -96,16 +95,18 @@ public class PotCounter extends Module { int height = hud.getHeight(); if(background) { - if(backgroundMode.equalsIgnoreCase("Modern")) { + 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()); + RoundedUtils.drawGradientRound(hud.getX(), hud.getY(), hud.getWidth(), hud.getHeight(), 6, Athena.INSTANCE.getThemeManager().getTheme().getFirstColor(), Athena.INSTANCE.getThemeManager().getTheme().getFirstColor(), Athena.INSTANCE.getThemeManager().getTheme().getSecondColor(), Athena.INSTANCE.getThemeManager().getTheme().getSecondColor()); } + } else if (backgroundMode.equalsIgnoreCase("Circle")) { + RoundedUtils.drawGradientRound(hud.getX(), hud.getY(), hud.getWidth(), hud.getHeight(), 6, ColorUtil.getClientColor(0, 255), ColorUtil.getClientColor(90, 255), ColorUtil.getClientColor(180, 255), ColorUtil.getClientColor(270, 255)); } else if (backgroundMode.equalsIgnoreCase("Fade")) { RoundedUtils.drawRoundedRect(hud.getX(), hud.getY(), hud.getX() + width, hud.getY() + height, 8.0f, Athena.INSTANCE.getThemeManager().getTheme().getAccentColor().getRGB()); } else { - DrawUtils.drawGradientRect(hud.getX(), hud.getY(), hud.getX() + width, hud.getY() + height, backgroundColor.getRGB(), backgroundColor.getRGB()); + RoundedUtils.drawRoundedRect(hud.getX(), hud.getY(), hud.getX() + width, hud.getY() + height, 12,backgroundColor.getRGB()); } } @@ -113,7 +114,7 @@ public class PotCounter extends Module { float posX = hud.getX() + 9; if(customFont) { - hud.setWidth((int) (rip.athena.client.utils.font.FontManager.getProductSansRegular(30).width(str) + 16)); + hud.setWidth((int) (rip.athena.client.utils.font.FontManager.getProductSansRegular(25).width(str) + 16)); hud.setHeight((int) (FontManager.baloo17.getHeight(str) + 7)); if(isUsingStaticChroma) { @@ -121,7 +122,7 @@ public class PotCounter extends Module { } else if (isUsingWaveChroma) { DrawUtils.drawCustomFontChromaString(rip.athena.client.utils.font.FontManager.getProductSansRegular(25), str, (int) posX, (int) posY + 1, false, true); } else { - rip.athena.client.utils.font.FontManager.getProductSansRegular(30).drawString(str, (int) posX, (int) posY + 1, color.getRGB()); + rip.athena.client.utils.font.FontManager.getProductSansRegular(25).drawString(str, (int) posX, (int) posY + 1, color.getRGB()); } } else { hud.setWidth(mc.fontRendererObj.getStringWidth(str) + 16); @@ -135,9 +136,5 @@ public class PotCounter extends Module { mc.fontRendererObj.drawString(str, (int) posX, (int) posY + 3, color.getRGB()); } } - - GL11.glColor3f(1,1,1); - GL11.glPopMatrix(); - } } diff --git a/src/main/java/rip/athena/client/modules/impl/render/Scoreboard.java b/src/main/java/rip/athena/client/modules/impl/render/Scoreboard.java new file mode 100644 index 00000000..e6d1767e --- /dev/null +++ b/src/main/java/rip/athena/client/modules/impl/render/Scoreboard.java @@ -0,0 +1,204 @@ +package rip.athena.client.modules.impl.render; + +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.gui.ScaledResolution; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.scoreboard.Score; +import net.minecraft.scoreboard.ScoreObjective; +import net.minecraft.scoreboard.ScorePlayerTeam; +import net.minecraft.util.EnumChatFormatting; +import org.lwjgl.opengl.GL11; +import rip.athena.client.Athena; +import rip.athena.client.config.ConfigValue; +import rip.athena.client.events.SubscribeEvent; +import rip.athena.client.events.types.render.RenderEvent; +import rip.athena.client.events.types.render.RenderType; +import rip.athena.client.font.FontManager; +import rip.athena.client.gui.hud.HUDElement; +import rip.athena.client.modules.Category; +import rip.athena.client.modules.Module; + +import java.awt.*; +import java.util.Collection; +import java.util.List; + +import com.google.common.base.Predicate; +import rip.athena.client.utils.render.ColorUtil; +import rip.athena.client.utils.render.RoundedUtils; + +/** + * @author Athena Development + * @project Athena-Client + * @date 6/9/2023 + */ +public class Scoreboard extends Module { + + @ConfigValue.List(name = "Display Mode", values = {"Modern", "Fade", "Custom", "Default"}, description = "Chose display of background") + private String backgroundMode = "Modern"; + + @ConfigValue.Color(name = "Background Color") + private Color backgroundColor = new Color(0, 0, 0, 150); + + @ConfigValue.Boolean(name = "Background") + private boolean background = true; + + @ConfigValue.Boolean(name = "Show Numbers") + private boolean showNumbers = true; + + @ConfigValue.Boolean(name = "Free Move") + private boolean freeMove = false; + + private HUDElement hud; + private int width = -1; + private int height = -1; + + public Scoreboard() { + super("Scoreboard", Category.RENDER, "Athena/gui/mods/scoreboard.png"); + + hud = new HUDElement("scoreboard", width, height) { + @Override + public void onRender() { + render(); + } + }; + + addHUD(hud); + } + + @SubscribeEvent + public void onRender(RenderEvent event) { + if(event.getRenderType() != RenderType.SCOREBOARD) { + return; + } + + event.setCancelled(true); + } + + public void render() { + ScaledResolution scaledresolution = new ScaledResolution(mc); + + net.minecraft.scoreboard.Scoreboard scoreboard = mc.theWorld.getScoreboard(); + ScoreObjective scoreobjective = null; + ScorePlayerTeam scoreplayerteam = scoreboard.getPlayersTeam(mc.thePlayer.getName()); + + if(scoreplayerteam != null) { + int i1 = scoreplayerteam.getChatFormat().getColorIndex(); + + if(i1 >= 0) { + scoreobjective = scoreboard.getObjectiveInDisplaySlot(3 + i1); + } + } + + ScoreObjective scoreobjective1 = scoreobjective != null ? scoreobjective : scoreboard.getObjectiveInDisplaySlot(1); + + if(scoreobjective1 != null) { + renderScoreboard(scoreobjective1, scaledresolution); + } + } + + private void renderScoreboard(ScoreObjective p_180475_1_, ScaledResolution p_180475_2_) { + net.minecraft.scoreboard.Scoreboard scoreboard = p_180475_1_.getScoreboard(); + Collection collection = scoreboard.getSortedScores(p_180475_1_); + List list = Lists.newArrayList(Iterables.filter(collection, new Predicate() { + public boolean apply(Score p_apply_1_) { + return p_apply_1_.getPlayerName() != null && !p_apply_1_.getPlayerName().startsWith("#"); + } + })); + + if (list.size() > 15) { + collection = Lists.newArrayList(Iterables.skip(list, collection.size() - 15)); + } else { + collection = list; + } + + int i = mc.fontRendererObj.getStringWidth(p_180475_1_.getDisplayName()); + + for (Score score : collection) { + ScorePlayerTeam scoreplayerteam = scoreboard.getPlayersTeam(score.getPlayerName()); + String s = ScorePlayerTeam.formatPlayerName(scoreplayerteam, score.getPlayerName()); + + if(showNumbers) { + s += ": " + score.getScorePoints(); + } else { + s += ":"; + } + + i = Math.max(i, mc.fontRendererObj.getStringWidth(s)); + } + + int i1 = collection.size() * mc.fontRendererObj.FONT_HEIGHT; + int j1 = p_180475_2_.getScaledHeight() / 2 + i1 / 3; + int k1 = 3; + int l1 = j1; + int j = 0; + int yPos = 0; + + if(freeMove) { + l1 = hud.getX() + 2; + yPos += hud.getY(); + } else { + l1 = p_180475_2_.getScaledWidth() - i; + yPos = p_180475_2_.getScaledHeight() / 2 - i1 / 2; + + hud.setX(l1 - 2); + hud.setY(yPos); + } + + + if(background) { + if(backgroundMode.equalsIgnoreCase("Modern")) { + if(Athena.INSTANCE.getThemeManager().getTheme().isTriColor()) { + RoundedUtils.drawGradientRound(hud.getX(), hud.getY(), hud.getWidth(), hud.getHeight(), 6, Athena.INSTANCE.getThemeManager().getTheme().getFirstColor(), Athena.INSTANCE.getThemeManager().getTheme().getSecondColor(), Athena.INSTANCE.getThemeManager().getTheme().getThirdColor(), Athena.INSTANCE.getThemeManager().getTheme().getFirstColor()); + } else { + RoundedUtils.drawGradientRound(hud.getX(), hud.getY(), hud.getWidth(), hud.getHeight(), 6, Athena.INSTANCE.getThemeManager().getTheme().getFirstColor(), Athena.INSTANCE.getThemeManager().getTheme().getFirstColor(), Athena.INSTANCE.getThemeManager().getTheme().getSecondColor(), Athena.INSTANCE.getThemeManager().getTheme().getSecondColor()); + } + } else if (backgroundMode.equalsIgnoreCase("Circle")) { + RoundedUtils.drawGradientRound(hud.getX(), hud.getY(), hud.getWidth(), hud.getHeight(), 6, ColorUtil.getClientColor(0, 255), ColorUtil.getClientColor(90, 255), ColorUtil.getClientColor(180, 255), ColorUtil.getClientColor(270, 255)); + } else if (backgroundMode.equalsIgnoreCase("Fade")) { + RoundedUtils.drawRoundedRect(hud.getX(), hud.getY(), hud.getX() + width, hud.getY() + height, 8.0f, Athena.INSTANCE.getThemeManager().getTheme().getAccentColor().getRGB()); + } else { + RoundedUtils.drawRoundedRect(hud.getX(), hud.getY(), hud.getX() + width, hud.getY() + height, 12,backgroundColor.getRGB()); + } + } + + for (Score score1 : collection) { + + ++j; + ScorePlayerTeam scoreplayerteam1 = scoreboard.getPlayersTeam(score1.getPlayerName()); + String s1 = ScorePlayerTeam.formatPlayerName(scoreplayerteam1, score1.getPlayerName()); + String s2 = EnumChatFormatting.RED + "" + score1.getScorePoints(); + int k = yPos + (i1 + 1 - ((j - 1) * mc.fontRendererObj.FONT_HEIGHT)); + + int l = hud.getX() + hud.getWidth(); + + + if(background && backgroundMode.equalsIgnoreCase("Default")) { + GuiScreen.drawRectangle(l1 - 2, k, l, k + mc.fontRendererObj.FONT_HEIGHT, 1342177280); + } + + mc.fontRendererObj.drawString(s1, l1, k, 553648127); + + if(showNumbers) { + mc.fontRendererObj.drawString(s2, l - mc.fontRendererObj.getStringWidth(s2), k, 553648127); + } + + if (j == collection.size()) { + String s3 = p_180475_1_.getDisplayName(); + if(background && backgroundMode.equalsIgnoreCase("Default")) { + GuiScreen.drawRectangle(l1 - 2, k - mc.fontRendererObj.FONT_HEIGHT - 1, l, k - 1, 1610612736); + GuiScreen.drawRectangle(l1 - 2, k - 1, l, k, 1342177280); + } + mc.fontRendererObj.drawString(s3, l1 + i / 2 - mc.fontRendererObj.getStringWidth(s3) / 2, k - mc.fontRendererObj.FONT_HEIGHT, 553648127); + } + } + + int height = (j + 1) * mc.fontRendererObj.FONT_HEIGHT; + + hud.setWidth(i); + hud.setHeight(height + 1); + + GL11.glColor4f(1F, 1F, 1F, 1F); + } +} diff --git a/src/main/java/rip/athena/client/modules/impl/render/TPS.java b/src/main/java/rip/athena/client/modules/impl/render/TPS.java index 99bf0db6..b1504d9e 100644 --- a/src/main/java/rip/athena/client/modules/impl/render/TPS.java +++ b/src/main/java/rip/athena/client/modules/impl/render/TPS.java @@ -21,8 +21,8 @@ import java.util.concurrent.CopyOnWriteArrayList; */ public class TPS extends Module { - @ConfigValue.List(name = "Display Mode", values = {"Modern", "Fade", "Old"}, description = "Chose display of background") - public static String backgroundMode = "Modern"; + @ConfigValue.List(name = "Display Mode", values = {"Circle", "Modern", "Fade", "Old"}, description = "Chose display of background") + public static String backgroundMode = "Circle"; @ConfigValue.Boolean(name = "Preset Color") private boolean presetColor = true; @@ -34,7 +34,7 @@ public class TPS extends Module { private String mode = "Number"; @ConfigValue.Boolean(name = "Custom Font") - private boolean customFont = false; + public static boolean customFont = false; @ConfigValue.Boolean(name = "Background") private boolean backGround = true; diff --git a/src/main/java/rip/athena/client/theme/ThemeManager.java b/src/main/java/rip/athena/client/theme/ThemeManager.java index ae7f441b..9f27c2cf 100644 --- a/src/main/java/rip/athena/client/theme/ThemeManager.java +++ b/src/main/java/rip/athena/client/theme/ThemeManager.java @@ -2,6 +2,8 @@ package rip.athena.client.theme; import lombok.Getter; import lombok.Setter; +import rip.athena.client.theme.impl.AccentTheme; +import rip.athena.client.theme.impl.PrimaryTheme; /** * @author Athena Development @@ -13,6 +15,7 @@ import lombok.Setter; @Setter public class ThemeManager { - private Theme theme = Theme.ATHENA; + private AccentTheme theme = AccentTheme.ATHENA; + private PrimaryTheme primaryTheme = PrimaryTheme.DARK; } diff --git a/src/main/java/rip/athena/client/theme/Theme.java b/src/main/java/rip/athena/client/theme/impl/AccentTheme.java similarity index 77% rename from src/main/java/rip/athena/client/theme/Theme.java rename to src/main/java/rip/athena/client/theme/impl/AccentTheme.java index f9003d03..084db14e 100644 --- a/src/main/java/rip/athena/client/theme/Theme.java +++ b/src/main/java/rip/athena/client/theme/impl/AccentTheme.java @@ -1,4 +1,4 @@ -package rip.athena.client.theme; +package rip.athena.client.theme.impl; import lombok.AllArgsConstructor; import lombok.Getter; @@ -20,9 +20,29 @@ import static net.minecraft.util.EnumChatFormatting.DARK_GREEN; */ @Getter -public enum Theme implements ColorUtil { +public enum AccentTheme implements ColorUtil { ATHENA("Athena", new Color(7, 64, 170), new Color(4, 83, 97), DARK_PURPLE, false, KeyColors.PURPLE, KeyColors.RED), + SAPPHIRE("Sapphire", new Color(0, 85, 255), new Color(0, 170, 255), BLUE, false, KeyColors.DARK_BLUE), + RUBY("Ruby", new Color(255, 0, 85), new Color(255, 0, 170), RED, false, KeyColors.RED), + EMERALD("Emerald", new Color(0, 255, 85), new Color(0, 255, 170), GREEN, false, KeyColors.DARK_GREEN), + SUNFLOWER_SKY("Sunflower Sky", new Color(255, 204, 0), new Color(0, 170, 255), EnumChatFormatting.AQUA, false, KeyColors.YELLOW, KeyColors.DARK_BLUE), + SKYFIRE("Skyfire", new Color(0, 153, 255), new Color(255, 68, 0), EnumChatFormatting.AQUA, false, KeyColors.DARK_BLUE, KeyColors.RED), + CITRINE("Citrine", new Color(255, 255, 0), new Color(255, 200, 0), GOLD, false, KeyColors.YELLOW), + LAVENDER_FIELDS("Lavender Fields", new Color(170, 102, 255), new Color(204, 153, 255), EnumChatFormatting.LIGHT_PURPLE, false, KeyColors.PURPLE, KeyColors.PINK), + PEACH_MANGO("Peach Mango", new Color(255, 153, 102), new Color(255, 187, 68), EnumChatFormatting.GOLD, false, KeyColors.ORANGE, KeyColors.YELLOW), + OCEAN_BREEZE("Ocean Breeze", new Color(0, 187, 255), new Color(68, 136, 255), EnumChatFormatting.AQUA, false, KeyColors.AQUA, KeyColors.DARK_BLUE), + ROSE_GOLD("Rose Gold", new Color(255, 102, 102), new Color(255, 204, 153), EnumChatFormatting.GOLD, false, KeyColors.PINK, KeyColors.ORANGE), + LEMON_LIME("Lemon Lime", new Color(217, 255, 0), new Color(0, 255, 68), EnumChatFormatting.AQUA, false, KeyColors.LIME, KeyColors.YELLOW), + MISTY_ROSE("Misty Rose", new Color(255, 228, 225), new Color(240, 128, 128), RED, false, KeyColors.PINK), + SERENE("Serene", new Color(183, 234, 220), new Color(92, 172, 149), GREEN, false, KeyColors.DARK_GREEN, KeyColors.DARK_GREEN), + SUNRISE("Sunrise", new Color(252, 186, 152), new Color(252, 97, 85), GREEN, false, KeyColors.ORANGE, KeyColors.RED), + COCOA("Cocoa", new Color(167, 129, 105), new Color(90, 58, 42), GRAY, false, KeyColors.GRAY, KeyColors.GRAY), + GARDEN("Garden", new Color(152, 226, 187), new Color(51, 160, 81), GREEN, false, KeyColors.DARK_GREEN, KeyColors.LIME), + MOONLIGHT("Moonlight", new Color(56, 59, 80), new Color(13, 22, 50), DARK_BLUE, false, KeyColors.DARK_BLUE, KeyColors.PURPLE), + SUNSET("Sunset", new Color(255, 163, 108), new Color(255, 85, 68), YELLOW, false, KeyColors.ORANGE, KeyColors.YELLOW), + AMETHYST("Amethyst", new Color(164, 148, 213), new Color(97, 83, 140), LIGHT_PURPLE, false, KeyColors.PURPLE, KeyColors.PURPLE), + TROPICAL("Tropical", new Color(0, 191, 165), new Color(255, 149, 0), GREEN, false, KeyColors.DARK_GREEN, KeyColors.YELLOW), AUBERGINE("Aubergine", new Color(170, 7, 107), new Color(97, 4, 95), DARK_PURPLE, false, KeyColors.PURPLE, KeyColors.RED), AQUA("Aqua", new Color(185, 250, 255), new Color(79, 199, 200), EnumChatFormatting.AQUA, false, KeyColors.AQUA), BANANA("Banana", new Color(253, 236, 177), new Color(255, 255, 255), YELLOW, false, KeyColors.YELLOW), @@ -59,7 +79,7 @@ public enum Theme implements ColorUtil { private final ArrayList keyColors; private final boolean triColor; - Theme(String theme, Color firstColor, Color secondColor, EnumChatFormatting chatAccentColor, boolean triColor, KeyColors... keyColors) { + AccentTheme(String theme, Color firstColor, Color secondColor, EnumChatFormatting chatAccentColor, boolean triColor, KeyColors... keyColors) { this.theme = theme; this.firstColor = this.thirdColor = firstColor; this.secondColor = secondColor; @@ -67,7 +87,7 @@ public enum Theme implements ColorUtil { this.keyColors = new ArrayList<>(Arrays.asList(keyColors)); this.triColor = triColor; } - Theme(String theme, Color firstColor, Color secondColor, Color thirdColor, EnumChatFormatting chatAccentColor, boolean triColor, KeyColors... keyColors) { + AccentTheme(String theme, Color firstColor, Color secondColor, Color thirdColor, EnumChatFormatting chatAccentColor, boolean triColor, KeyColors... keyColors) { this.theme = theme; this.firstColor = firstColor; this.secondColor = secondColor; diff --git a/src/main/java/rip/athena/client/theme/impl/PrimaryTheme.java b/src/main/java/rip/athena/client/theme/impl/PrimaryTheme.java new file mode 100644 index 00000000..4061790b --- /dev/null +++ b/src/main/java/rip/athena/client/theme/impl/PrimaryTheme.java @@ -0,0 +1,31 @@ +package rip.athena.client.theme.impl; + +import lombok.Getter; +import rip.athena.client.utils.render.ColorUtil; + +import java.awt.*; + +/** + * @author Athena Development + * @project Athena-Client + * @date 6/9/2023 + */ + +@Getter +public enum PrimaryTheme implements ColorUtil { + + DARK("Dark", new Color(30, 30, 30, 255).getRGB(), new Color(50, 50, 50, 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()), + TRANSPARENT("Transparent", new Color(200, 200, 200, 80).getRGB(), new Color(150, 150, 150, 100).getRGB(), new Color(100, 100, 100, 255).getRGB(), new Color(255, 255, 255).getRGB()); + + private final String theme; + private final int firstColor, secondColor, thirdColor, textColor; + + PrimaryTheme(String theme, int firstColor, int secondColor, int thirdColor, int textColor) { + this.theme = theme; + this.firstColor = firstColor; + this.secondColor = secondColor; + this.thirdColor = thirdColor; + this.textColor = textColor; + } +} diff --git a/src/main/java/rip/athena/client/utils/ClickCounter.java b/src/main/java/rip/athena/client/utils/ClickCounter.java index 8d402431..3849b6f7 100644 --- a/src/main/java/rip/athena/client/utils/ClickCounter.java +++ b/src/main/java/rip/athena/client/utils/ClickCounter.java @@ -24,5 +24,4 @@ public class ClickCounter { return clicks.size(); } - } diff --git a/src/main/java/rip/athena/client/utils/GLUtils.java b/src/main/java/rip/athena/client/utils/GLUtils.java new file mode 100644 index 00000000..8eb947f7 --- /dev/null +++ b/src/main/java/rip/athena/client/utils/GLUtils.java @@ -0,0 +1,103 @@ +package rip.athena.client.utils; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.shader.Framebuffer; +import org.lwjgl.opengl.GL11; + +/** + * @author Athena Development + * @project Athena-Client + * @date 6/10/2023 + */ +public class GLUtils { + + private static Minecraft mc = Minecraft.getMinecraft(); + + public static void scissor(float x, float y, float width, float height) { + final int scaleFactor = getScaleFactor(); + GL11.glScissor((int)(x * scaleFactor), (int)(mc.displayHeight - (y + height) * scaleFactor), (int)(((x + width) - x) * scaleFactor), (int)(((y + height) - y) * scaleFactor)); + } + + + public static int getScaleFactor() { + int scaleFactor = 1; + final boolean isUnicode = mc.isUnicode(); + int guiScale = mc.gameSettings.guiScale; + if (guiScale == 0) { + guiScale = 1000; + } + + while (scaleFactor < guiScale && mc.displayWidth / (scaleFactor + 1) >= 320 && mc.displayHeight / (scaleFactor + 1) >= 240) { + ++scaleFactor; + } + if (isUnicode && scaleFactor % 2 != 0 && scaleFactor != 1) { + --scaleFactor; + } + return scaleFactor; + } + + public static void setAlphaLimit(float limit) { + GlStateManager.enableAlpha(); + GlStateManager.alphaFunc(GL11.GL_GREATER, (float) (limit * .01)); + } + + public static Framebuffer createFrameBuffer(Framebuffer framebuffer) { + if (framebuffer == null || framebuffer.framebufferWidth != mc.displayWidth || framebuffer.framebufferHeight != mc.displayHeight) { + if (framebuffer != null) { + framebuffer.deleteFramebuffer(); + } + return new Framebuffer(mc.displayWidth, mc.displayHeight, true); + } + return framebuffer; + } + + public static void bindTexture(int texture) { + GL11.glBindTexture(GL11.GL_TEXTURE_2D, texture); + } + + public static void startScale(float x, float y, float scale) { + GlStateManager.pushMatrix(); + GlStateManager.translate(x, y, 0); + GlStateManager.scale(scale, scale, 1); + GlStateManager.translate(-x, -y, 0); + } + + public static void startScale(float x, float y, float width, float height, float scale) { + GlStateManager.pushMatrix(); + GlStateManager.translate((x + (x + width)) / 2, (y + (y + height)) / 2, 0); + GlStateManager.scale(scale, scale, 1); + GlStateManager.translate(-(x + (x + width)) / 2, -(y + (y + height)) / 2, 0); + } + + public static void stopScale() { + GlStateManager.popMatrix(); + } + + public static void startTranslate(float x, float y) { + GlStateManager.pushMatrix(); + GlStateManager.translate(x, y, 0); + } + + public static void stopTranslate() { + GlStateManager.popMatrix(); + } + + public static void fixEnchantment() { + GlStateManager.disableLighting(); + GlStateManager.disableDepth(); + GlStateManager.disableBlend(); + GlStateManager.enableLighting(); + GlStateManager.enableDepth(); + GlStateManager.disableLighting(); + GlStateManager.disableDepth(); + GlStateManager.disableTexture2D(); + GlStateManager.disableAlpha(); + GlStateManager.disableBlend(); + GlStateManager.enableBlend(); + GlStateManager.enableAlpha(); + GlStateManager.enableTexture2D(); + GlStateManager.enableLighting(); + GlStateManager.enableDepth(); + } +} \ No newline at end of file diff --git a/src/main/java/rip/athena/client/utils/MouseUtils.java b/src/main/java/rip/athena/client/utils/MouseUtils.java new file mode 100644 index 00000000..382e5d38 --- /dev/null +++ b/src/main/java/rip/athena/client/utils/MouseUtils.java @@ -0,0 +1,31 @@ +package rip.athena.client.utils; + +import org.lwjgl.input.Mouse; + +/** + * @author Athena Development + * @project Athena-Client + * @date 6/10/2023 + */ +public class MouseUtils { + + public enum Scroll { + UP, DOWN; + } + + public static Scroll scroll() { + int mouse = Mouse.getDWheel(); + + if(mouse > 0) { + return Scroll.UP; + }else if(mouse < 0) { + return Scroll.DOWN; + }else { + return null; + } + } + + public static boolean isInside(int mouseX, int mouseY, double x, double y, double width, double height) { + return (mouseX > x && mouseX < (x + width)) && (mouseY > y && mouseY < (y + height)); + } +} diff --git a/src/main/java/rip/athena/client/utils/NumberUtils.java b/src/main/java/rip/athena/client/utils/NumberUtils.java new file mode 100644 index 00000000..98113158 --- /dev/null +++ b/src/main/java/rip/athena/client/utils/NumberUtils.java @@ -0,0 +1,32 @@ +package rip.athena.client.utils; + +import java.text.DecimalFormat; + +/** + * @author Athena Development + * @project Athena-Client + * @date 6/10/2023 + */ +public class NumberUtils { + public static enum Format { + Ones, Tenths, Hundredths; + } + public static String getStringValueOfLong(long value, Format format) { + return String.valueOf((new DecimalFormat(getDecimalFormat(format))).format(value)); + } + public static String getStringValueOfFloat(float value, Format format) { + return String.valueOf((new DecimalFormat(getDecimalFormat(format))).format(value)); + } + public static String getDecimalFormat(Format decimalFormat) { + if(decimalFormat == Format.Ones) { + return "#"; + } + if(decimalFormat == Format.Tenths) { + return "#.#"; + } + if(decimalFormat == Format.Hundredths) { + return "#.##"; + } + return null; + } +} \ No newline at end of file diff --git a/src/main/java/rip/athena/client/utils/animations/Animation.java b/src/main/java/rip/athena/client/utils/animations/Animation.java new file mode 100644 index 00000000..03d24437 --- /dev/null +++ b/src/main/java/rip/athena/client/utils/animations/Animation.java @@ -0,0 +1,145 @@ +package rip.athena.client.utils.animations; + +import rip.athena.client.utils.time.TimerUtil; + +public abstract class Animation { + + public AnimationTimer timer = new AnimationTimer(); + public TimerUtil timerUtil = new TimerUtil(); + protected int duration; + protected double endPoint; + protected Direction direction; + + public Animation(int ms, double endPoint) { + this(ms, endPoint, Direction.FORWARDS); + } + + public Animation(int ms, double endPoint, Direction direction) { + this.duration = ms; //Time in milliseconds of how long you want the animation to take. + this.endPoint = endPoint; //The desired distance for the animated object to go. + this.direction = direction; //Direction in which the graph is going. If backwards, will start from endPoint and go to 0. + } + + + public boolean finished(Direction direction) { + return isDone() && this.direction.equals(direction); + } + + public double getLinearOutput() { + return 1 - ((timerUtil.getTime() / (double) duration) * endPoint); + } + + public double getEndPoint() { + return endPoint; + } + + public void setEndPoint(double endPoint) { + this.endPoint = endPoint; + } + + public void reset() { + timerUtil.reset(); + } + + public boolean isDone() { + return timerUtil.hasTimeElapsed(duration); + } + + public boolean isDone(Direction direction) { + return isDone() && this.direction.equals(direction); + } + + public void changeDirection() { + setDirection(direction.opposite()); + } + + public Direction getDirection() { + return direction; + } + + public Animation setDirection(Direction direction) { + if (this.direction != direction) { + this.direction = direction; + timerUtil.setTime(System.currentTimeMillis() - (duration - Math.min(duration, timerUtil.getTime()))); + } + return this; + } + + public void setDuration(int duration) { + this.duration = duration; + } + + protected boolean correctOutput() { + return false; + } + + public Double getOutput() { + if (direction.forwards()) { + if (isDone()) { + return endPoint; + } + + return getEquation(timerUtil.getTime() / (double) duration) * endPoint; + } else { + if (isDone()) { + return 0.0; + } + + if (correctOutput()) { + double revTime = Math.min(duration, Math.max(0, duration - timerUtil.getTime())); + return getEquation(revTime / (double) duration) * endPoint; + } + + return (1 - getEquation(timerUtil.getTime() / (double) duration)) * endPoint; + } + } + + public double getValue() { + if (direction == Direction.FORWARDS) { + if (isDone()) + return endPoint; + return (getEquation(timer.getTime()) * endPoint); + } else { + if (isDone()) return 0; + if (correctOutput()) { + double revTime = Math.min(duration, Math.max(0, duration - timer.getTime())); + return getEquation(revTime) * endPoint; + } else return (1 - getEquation(timer.getTime())) * endPoint; + } + } + + //This is where the animation equation should go, for example, a logistic function. Output should range from 0 - 1. + //This will take the timer's time as an input, x. + protected abstract double getEquation(double x); + +} +class AnimationTimer { + + public long lastMS = System.currentTimeMillis(); + + public void reset() { + lastMS = System.currentTimeMillis(); + } + + public boolean hasTimeElapsed(long time, boolean reset) { + if (System.currentTimeMillis() - lastMS > time) { + if (reset) reset(); + return true; + } + + return false; + } + + public boolean hasTimeElapsed(long time) { + return System.currentTimeMillis() - lastMS > time; + } + + public long getTime() { + return System.currentTimeMillis() - lastMS; + } + + public void setTime(long time) { + lastMS = time; + } + +} \ No newline at end of file diff --git a/src/main/java/rip/athena/client/utils/animations/ContinualAnimation.java b/src/main/java/rip/athena/client/utils/animations/ContinualAnimation.java new file mode 100644 index 00000000..aa47ac36 --- /dev/null +++ b/src/main/java/rip/athena/client/utils/animations/ContinualAnimation.java @@ -0,0 +1,32 @@ +package rip.athena.client.utils.animations; + +import lombok.Getter; +import rip.athena.client.utils.animations.impl.SmoothStepAnimation; + +public class ContinualAnimation { + + private float output, endpoint; + + @Getter + private Animation animation = new SmoothStepAnimation(0, 0, Direction.BACKWARDS); + + public void animate(float destination, int ms) { + output = endpoint - animation.getOutput().floatValue(); + endpoint = destination; + if (output != (endpoint - destination)) { + animation = new SmoothStepAnimation(ms, endpoint - output, Direction.BACKWARDS); + } + } + + + public boolean isDone() { + return output == endpoint || animation.isDone(); + } + + public float getOutput() { + output = endpoint - animation.getOutput().floatValue(); + return output; + } + + +} diff --git a/src/main/java/rip/athena/client/utils/animations/Direction.java b/src/main/java/rip/athena/client/utils/animations/Direction.java new file mode 100644 index 00000000..06e966ab --- /dev/null +++ b/src/main/java/rip/athena/client/utils/animations/Direction.java @@ -0,0 +1,22 @@ +package rip.athena.client.utils.animations; + +public enum Direction { + FORWARDS, + BACKWARDS; + + public Direction opposite() { + if (this == Direction.FORWARDS) { + return Direction.BACKWARDS; + } else return Direction.FORWARDS; + } + + + public boolean forwards() { + return this == Direction.FORWARDS; + } + + public boolean backwards() { + return this == Direction.BACKWARDS; + } + +} diff --git a/src/main/java/rip/athena/client/utils/animations/impl/DecelerateAnimation.java b/src/main/java/rip/athena/client/utils/animations/impl/DecelerateAnimation.java new file mode 100644 index 00000000..01262394 --- /dev/null +++ b/src/main/java/rip/athena/client/utils/animations/impl/DecelerateAnimation.java @@ -0,0 +1,21 @@ +package rip.athena.client.utils.animations.impl; + + +import rip.athena.client.utils.animations.Animation; +import rip.athena.client.utils.animations.Direction; + +public class DecelerateAnimation extends Animation { + + public DecelerateAnimation(int ms, double endPoint) { + super(ms, endPoint); + } + + public DecelerateAnimation(int ms, double endPoint, Direction direction) { + super(ms, endPoint, direction); + } + + + protected double getEquation(double x) { + return 1 - ((x - 1) * (x - 1)); + } +} diff --git a/src/main/java/rip/athena/client/utils/animations/impl/EaseBackIn.java b/src/main/java/rip/athena/client/utils/animations/impl/EaseBackIn.java new file mode 100644 index 00000000..039617e8 --- /dev/null +++ b/src/main/java/rip/athena/client/utils/animations/impl/EaseBackIn.java @@ -0,0 +1,30 @@ +package rip.athena.client.utils.animations.impl; + +import rip.athena.client.utils.animations.Animation; +import rip.athena.client.utils.animations.Direction; + +public class EaseBackIn extends Animation { + private final float easeAmount; + + public EaseBackIn(int ms, double endPoint, float easeAmount) { + super(ms, endPoint); + this.easeAmount = easeAmount; + } + + public EaseBackIn(int ms, double endPoint, float easeAmount, Direction direction) { + super(ms, endPoint, direction); + this.easeAmount = easeAmount; + } + + @Override + protected boolean correctOutput() { + return true; + } + + @Override + protected double getEquation(double x) { + float shrink = easeAmount + 1; + return Math.max(0, 1 + shrink * Math.pow(x - 1, 3) + easeAmount * Math.pow(x - 1, 2)); + } + +} diff --git a/src/main/java/rip/athena/client/utils/animations/impl/EaseInOutQuad.java b/src/main/java/rip/athena/client/utils/animations/impl/EaseInOutQuad.java new file mode 100644 index 00000000..54576917 --- /dev/null +++ b/src/main/java/rip/athena/client/utils/animations/impl/EaseInOutQuad.java @@ -0,0 +1,20 @@ +package rip.athena.client.utils.animations.impl; + +import rip.athena.client.utils.animations.Animation; +import rip.athena.client.utils.animations.Direction; + +public class EaseInOutQuad extends Animation { + + public EaseInOutQuad(int ms, double endPoint) { + super(ms, endPoint); + } + + public EaseInOutQuad(int ms, double endPoint, Direction direction) { + super(ms, endPoint, direction); + } + + protected double getEquation(double x) { + return x < 0.5 ? 2 * Math.pow(x, 2) : 1 - Math.pow(-2 * x + 2, 2) / 2; + } + +} diff --git a/src/main/java/rip/athena/client/utils/animations/impl/EaseOutSine.java b/src/main/java/rip/athena/client/utils/animations/impl/EaseOutSine.java new file mode 100644 index 00000000..0a3538bf --- /dev/null +++ b/src/main/java/rip/athena/client/utils/animations/impl/EaseOutSine.java @@ -0,0 +1,26 @@ +package rip.athena.client.utils.animations.impl; + +import rip.athena.client.utils.animations.Animation; +import rip.athena.client.utils.animations.Direction; + +public class EaseOutSine extends Animation { + + + public EaseOutSine(int ms, double endPoint) { + super(ms, endPoint); + } + + public EaseOutSine(int ms, double endPoint, Direction direction) { + super(ms, endPoint, direction); + } + + @Override + protected boolean correctOutput() { + return true; + } + + @Override + protected double getEquation(double x) { + return Math.sin(x * (Math.PI / 2)); + } +} diff --git a/src/main/java/rip/athena/client/utils/animations/impl/ElasticAnimation.java b/src/main/java/rip/athena/client/utils/animations/impl/ElasticAnimation.java new file mode 100644 index 00000000..d72c29ae --- /dev/null +++ b/src/main/java/rip/athena/client/utils/animations/impl/ElasticAnimation.java @@ -0,0 +1,32 @@ +package rip.athena.client.utils.animations.impl; + +import rip.athena.client.utils.animations.Animation; +import rip.athena.client.utils.animations.Direction; + +public class ElasticAnimation extends Animation { + + float easeAmount; + float smooth; + boolean reallyElastic; + + public ElasticAnimation(int ms, double endPoint, float elasticity, float smooth, boolean moreElasticity) { + super(ms, endPoint); + this.easeAmount = elasticity; + this.smooth = smooth; + this.reallyElastic = moreElasticity; + } + + public ElasticAnimation(int ms, double endPoint, float elasticity, float smooth, boolean moreElasticity, Direction direction) { + super(ms, endPoint, direction); + this.easeAmount = elasticity; + this.smooth = smooth; + this.reallyElastic = moreElasticity; + } + + @Override + protected double getEquation(double x) { + x = Math.pow(x, smooth); + double elasticity = easeAmount * .1f; + return Math.pow(2, -10 * (reallyElastic ? Math.sqrt(x) : x)) * Math.sin((x - (elasticity / 4)) * ((2 * Math.PI) / elasticity)) + 1; + } +} diff --git a/src/main/java/rip/athena/client/utils/animations/impl/SmoothStepAnimation.java b/src/main/java/rip/athena/client/utils/animations/impl/SmoothStepAnimation.java new file mode 100644 index 00000000..2645f788 --- /dev/null +++ b/src/main/java/rip/athena/client/utils/animations/impl/SmoothStepAnimation.java @@ -0,0 +1,20 @@ +package rip.athena.client.utils.animations.impl; + +import rip.athena.client.utils.animations.Animation; +import rip.athena.client.utils.animations.Direction; + +public class SmoothStepAnimation extends Animation { + + public SmoothStepAnimation(int ms, double endPoint) { + super(ms, endPoint); + } + + public SmoothStepAnimation(int ms, double endPoint, Direction direction) { + super(ms, endPoint, direction); + } + + protected double getEquation(double x) { + return -2 * Math.pow(x, 3) + (3 * Math.pow(x, 2)); + } + +} diff --git a/src/main/java/rip/athena/client/utils/animations/simple/AnimationUtils.java b/src/main/java/rip/athena/client/utils/animations/simple/AnimationUtils.java new file mode 100644 index 00000000..7f1dfe18 --- /dev/null +++ b/src/main/java/rip/athena/client/utils/animations/simple/AnimationUtils.java @@ -0,0 +1,36 @@ +package rip.athena.client.utils.animations.simple; + +/** + * @author Athena Development + * @project Athena-Client + * @date 6/10/2023 + */ +public class AnimationUtils { + + public static float calculateCompensation(final float target, float current, final double speed, long delta) { + + final float diff = current - target; + + double add = (delta * (speed / 50)); + + if (diff > speed){ + if(current - add > target) { + current -= add; + }else { + current = target; + } + } + else if (diff < -speed) { + if(current + add < target) { + current += add; + }else { + current = target; + } + } + else{ + current = target; + } + + return current; + } +} \ No newline at end of file diff --git a/src/main/java/rip/athena/client/utils/animations/simple/SimpleAnimation.java b/src/main/java/rip/athena/client/utils/animations/simple/SimpleAnimation.java new file mode 100644 index 00000000..de89b2de --- /dev/null +++ b/src/main/java/rip/athena/client/utils/animations/simple/SimpleAnimation.java @@ -0,0 +1,45 @@ +package rip.athena.client.utils.animations.simple; + +/** + * @author Athena Development + * @project Athena-Client + * @date 6/10/2023 + */ +public class SimpleAnimation { + + private float value; + private long lastMS; + + public SimpleAnimation(final float value){ + this.value = value; + this.lastMS = System.currentTimeMillis(); + } + + public void setAnimation(final float value, double speed){ + + final long currentMS = System.currentTimeMillis(); + final long delta = currentMS - this.lastMS; + this.lastMS = currentMS; + + double deltaValue = 0.0; + + if(speed > 28) { + speed = 28; + } + + if (speed != 0.0) + { + deltaValue = Math.abs(value - this.value) * 0.35f / (10.0 / speed); + } + + this.value = AnimationUtils.calculateCompensation(value, this.value, deltaValue, delta); + } + + public float getValue() { + return value; + } + + public void setValue(float value) { + this.value = value; + } +} \ No newline at end of file diff --git a/src/main/java/rip/athena/client/utils/font/Font.java b/src/main/java/rip/athena/client/utils/font/Font.java index fdacf350..5b3fbcd3 100644 --- a/src/main/java/rip/athena/client/utils/font/Font.java +++ b/src/main/java/rip/athena/client/utils/font/Font.java @@ -14,4 +14,6 @@ public abstract class Font { public abstract int drawRightString(final String text, final double x, final double y, final int color); public abstract float height(); + + } diff --git a/src/main/java/rip/athena/client/utils/font/impl/athena/FontRenderer.java b/src/main/java/rip/athena/client/utils/font/impl/athena/FontRenderer.java index 1699a291..02e6d6bc 100644 --- a/src/main/java/rip/athena/client/utils/font/impl/athena/FontRenderer.java +++ b/src/main/java/rip/athena/client/utils/font/impl/athena/FontRenderer.java @@ -71,6 +71,10 @@ public class FontRenderer extends rip.athena.client.utils.font.Font { this.fillCharacters(this.boldCharacters, Font.BOLD); } + public float getMiddleOfBox(float height) { + return height / 2f - (this.fontHeight - 8) / 2 / 2f; + } + public static void calculateColorCodes() { for (int i = 0; i < 32; ++i) { final int amplifier = (i >> 3 & 1) * 85; diff --git a/src/main/java/rip/athena/client/utils/render/ClickEffect.java b/src/main/java/rip/athena/client/utils/render/ClickEffect.java new file mode 100644 index 00000000..48ba560f --- /dev/null +++ b/src/main/java/rip/athena/client/utils/render/ClickEffect.java @@ -0,0 +1,34 @@ +package rip.athena.client.utils.render; + +import rip.athena.client.utils.animations.simple.SimpleAnimation; + +import java.awt.*; + +/** + * @author Athena Development + * @project Athena-Client + * @date 6/10/2023 + */ +public class ClickEffect { + + private float x, y; + + private SimpleAnimation animation = new SimpleAnimation(0.0F); + + public ClickEffect(float x, float y) { + this.x = x; + this.y = y; + animation.setValue(0); + } + + public void draw() { + animation.setAnimation(100, 12); + double radius = 8 * animation.getValue() / 100; + int alpha = (int)(255 - 255 * animation.getValue() / 100); + int color = new Color(255, 255, 255, alpha).getRGB(); + } + + public boolean canRemove() { + return animation.getValue() > 99; + } +} diff --git a/src/main/java/rip/athena/client/utils/render/ColorUtil.java b/src/main/java/rip/athena/client/utils/render/ColorUtil.java index eb34cf2b..3373fb82 100644 --- a/src/main/java/rip/athena/client/utils/render/ColorUtil.java +++ b/src/main/java/rip/athena/client/utils/render/ColorUtil.java @@ -1,6 +1,9 @@ package rip.athena.client.utils.render; import org.lwjgl.opengl.GL11; +import rip.athena.client.Athena; +import rip.athena.client.theme.ThemeManager; +import rip.athena.client.theme.impl.AccentTheme; import rip.athena.client.utils.MathUtil; import java.awt.*; @@ -20,6 +23,84 @@ public interface ColorUtil { GL11.glColor4f(r, g, b, a); } + /* + * Credits: Tenacity + */ + + public static Color getClientColor(int index, int alpha) { + + for(AccentTheme c : AccentTheme.values()) { + if(c.equals(Athena.INSTANCE.getThemeManager().getTheme())) { + return interpolateColorsBackAndForth(15, index, new Color(c.getFirstColor().getRed(), c.getFirstColor().getGreen(), c.getFirstColor().getBlue(), alpha), new Color(c.getSecondColor().getRed(), c.getSecondColor().getGreen(), c.getSecondColor().getBlue(), alpha), false); + } + } + + return interpolateColorsBackAndForth(15, index, new Color(234, 107, 149, alpha), new Color(238, 164, 123, alpha), false); + } + + public static Color interpolateColorsBackAndForth(int speed, int index, Color start, Color end, boolean trueColor) { + int angle = (int) (((System.currentTimeMillis()) / speed + index) % 360); + angle = (angle >= 180 ? 360 - angle : angle) * 2; + return trueColor ? interpolateColorHue(start, end, angle / 360f) : getInterpolateColor(start, end, angle / 360f); + } + + public static Color getInterpolateColor(Color color1, Color color2, float amount) { + amount = Math.min(1, Math.max(0, amount)); + return new Color(interpolateInt(color1.getRed(), color2.getRed(), amount), interpolateInt(color1.getGreen(), color2.getGreen(), amount), interpolateInt(color1.getBlue(), color2.getBlue(), amount), interpolateInt(color1.getAlpha(), color2.getAlpha(), amount)); + } + + public static Color interpolateColorHue(Color color1, Color color2, float amount) { + amount = Math.min(1, Math.max(0, amount)); + + float[] color1HSB = Color.RGBtoHSB(color1.getRed(), color1.getGreen(), color1.getBlue(), null); + float[] color2HSB = Color.RGBtoHSB(color2.getRed(), color2.getGreen(), color2.getBlue(), null); + + Color resultColor = Color.getHSBColor(interpolateFloat(color1HSB[0], color2HSB[0], amount), interpolateFloat(color1HSB[1], color2HSB[1], amount), interpolateFloat(color1HSB[2], color2HSB[2], amount)); + + return new Color(resultColor.getRed(), resultColor.getGreen(), resultColor.getBlue(), interpolateInt(color1.getAlpha(), color2.getAlpha(), amount)); + } + + + public static Color interpolateColorC(Color color1, Color color2, float amount) { + amount = Math.min(1, Math.max(0, amount)); + return new Color(interpolateInt(color1.getRed(), color2.getRed(), amount), + interpolateInt(color1.getGreen(), color2.getGreen(), amount), + interpolateInt(color1.getBlue(), color2.getBlue(), amount), + interpolateInt(color1.getAlpha(), color2.getAlpha(), amount)); + } + + public static float interpolateFloat(float oldValue, float newValue, double interpolationValue){ + return interpolate(oldValue, newValue, (float) interpolationValue).floatValue(); + } + + public static int interpolateInt(int oldValue, int newValue, double interpolationValue){ + return interpolate(oldValue, newValue, (float) interpolationValue).intValue(); + } + + public static Double interpolate(double oldValue, double newValue, double interpolationValue){ + return (oldValue + (newValue - oldValue) * interpolationValue); + } + + // END TENACITY + + public static Color applyOpacity(Color color, float opacity) { + opacity = Math.min(1, Math.max(0, opacity)); + return new Color(color.getRed(), color.getGreen(), color.getBlue(), (int) (color.getAlpha() * opacity)); + } + public static int applyOpacity(int color, float opacity) { + Color old = new Color(color); + return applyOpacity(old, opacity).getRGB(); + } + + public static Color tripleColor(int rgbValue) { + return tripleColor(rgbValue, 1); + } + + public static Color tripleColor(int rgbValue, float alpha) { + alpha = Math.min(1, Math.max(0, alpha)); + return new Color(rgbValue, rgbValue, rgbValue, (int) (255 * alpha)); + } + /** * Method which colors using a color * 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 146dec2b..7fd22865 100644 --- a/src/main/java/rip/athena/client/utils/render/DrawUtils.java +++ b/src/main/java/rip/athena/client/utils/render/DrawUtils.java @@ -57,6 +57,19 @@ public enum DrawUtils { private static final ShaderUtil gradientMaskShader = new ShaderUtil("gradientMask"); + public static void drawMicrosoftLogo(float x, float y, float size, float spacing) { + drawMicrosoftLogo(x, y, size, spacing, 1f); + } + + public static void drawMicrosoftLogo(float x, float y, float size, float spacing, float alpha) { + float rectSize = size /2f - spacing; + int alphaVal = (int) (255 * alpha); + Gui.drawRect2(x, y, rectSize, rectSize, new Color(244, 83, 38, alphaVal).getRGB()); + Gui.drawRect2(x + rectSize + spacing, y, rectSize, rectSize, new Color(130, 188, 6, alphaVal).getRGB()); + Gui.drawRect2(x, y + spacing + rectSize, rectSize, rectSize, new Color(5, 166, 241, alphaVal).getRGB()); + Gui.drawRect2(x + rectSize + spacing, y + spacing + rectSize, rectSize, rectSize, new Color(254, 186, 7, alphaVal).getRGB()); + } + public static void applyGradientHorizontal(float x, float y, float width, float height, float alpha, Color left, Color right, Runnable content) { applyGradient(x, y, width, height, alpha, left, left, right, right, content); } diff --git a/src/main/java/rip/athena/client/utils/render/HUDUtil.java b/src/main/java/rip/athena/client/utils/render/HUDUtil.java index 8f51f7f7..9dff7cc6 100644 --- a/src/main/java/rip/athena/client/utils/render/HUDUtil.java +++ b/src/main/java/rip/athena/client/utils/render/HUDUtil.java @@ -26,7 +26,13 @@ public class HUDUtil { if(bG) { if(TPS.backgroundMode.equalsIgnoreCase("Modern")) { - RoundedUtils.drawGradientRound(x, y, width, height, 6, Athena.INSTANCE.getThemeManager().getTheme().getFirstColor(), Athena.INSTANCE.getThemeManager().getTheme().getFirstColor(), Athena.INSTANCE.getThemeManager().getTheme().getSecondColor(), Athena.INSTANCE.getThemeManager().getTheme().getSecondColor()); + if(Athena.INSTANCE.getThemeManager().getTheme().isTriColor()) { + RoundedUtils.drawGradientRound(x, y, width, height, 6, Athena.INSTANCE.getThemeManager().getTheme().getFirstColor(), Athena.INSTANCE.getThemeManager().getTheme().getSecondColor(), Athena.INSTANCE.getThemeManager().getTheme().getThirdColor(), Athena.INSTANCE.getThemeManager().getTheme().getFirstColor()); + } else { + RoundedUtils.drawGradientRound(x, y, width, height, 6, Athena.INSTANCE.getThemeManager().getTheme().getFirstColor(), Athena.INSTANCE.getThemeManager().getTheme().getFirstColor(), Athena.INSTANCE.getThemeManager().getTheme().getSecondColor(), Athena.INSTANCE.getThemeManager().getTheme().getSecondColor()); + } + } else if (TPS.backgroundMode.equalsIgnoreCase("Circle")) { + RoundedUtils.drawGradientRound(x, y, width, height, 6, ColorUtil.getClientColor(0, 255), ColorUtil.getClientColor(90, 255), ColorUtil.getClientColor(180, 255), ColorUtil.getClientColor(270, 255)); } else if (TPS.backgroundMode.equalsIgnoreCase("Fade")) { RoundedUtils.drawRoundedRect(x, y, x + width, y + height, 8.0f, Athena.INSTANCE.getThemeManager().getTheme().getAccentColor().getRGB()); } else { @@ -56,7 +62,7 @@ public class HUDUtil { String tmp = String.valueOf(letter); if(customFont) { - rip.athena.client.utils.font.FontManager.getProductSansRegular(30).drawString(tmp, (int) xTmp, (int) y, i); + rip.athena.client.utils.font.FontManager.getProductSansRegular(25).drawString(tmp, (int) xTmp, (int) y, i); xTmp += FontManager.baloo17.getCharWidth(letter); } else { mc.fontRendererObj.drawString(tmp, (int) xTmp, (int) y, i); @@ -67,7 +73,7 @@ public class HUDUtil { } if(customFont) { - rip.athena.client.utils.font.FontManager.getProductSansRegular(30).drawString(message, x, y, c); + rip.athena.client.utils.font.FontManager.getProductSansRegular(25).drawString(message, x, y, c); } else { mc.fontRendererObj.drawString(message, x, y, c, false); } @@ -103,15 +109,6 @@ public class HUDUtil { float red = hColor.getRed()/ 255.0f; float green = hColor.getGreen()/ 255.0f; float blue = hColor.getBlue()/ 255.0f; - float alpha = hColor.getAlpha()/ 255.0f; - - - float bx, by, bz; - - Tessellator tessellator = Tessellator.getInstance(); - WorldRenderer vertexBuffer = tessellator.getWorldRenderer(); - - double renderPosX = mc.getRenderManager().viewerPosX; double renderPosY = mc.getRenderManager().viewerPosY; @@ -126,7 +123,6 @@ public class HUDUtil { GL11.glLineWidth(1); GL11.glColor4f(red, green, blue, 0.5F); - AxisAlignedBB bb = block.getSelectedBoundingBox(mc.theWorld, pos).expand(0.0020000000949949026D, -0.000000000949949026D, 0.0020000000949949026D).offset(-renderPosX, -renderPosY, -renderPosZ); drawFilledBoundingBox(bb); @@ -225,11 +221,19 @@ public class HUDUtil { } public static int getStringWidth(String string) { - return mc.fontRendererObj.getStringWidth(string); + if(TPS.customFont) { + return rip.athena.client.utils.font.FontManager.getProductSansRegular(25).width(string); + } else { + return mc.fontRendererObj.getStringWidth(string); + } } public static int getStringHeight() { - return mc.fontRendererObj.FONT_HEIGHT; + if(TPS.customFont) { + return (int) rip.athena.client.utils.font.FontManager.getProductSansRegular(25).height(); + } else { + return mc.fontRendererObj.FONT_HEIGHT; + } } } \ No newline at end of file diff --git a/src/main/java/rip/athena/client/utils/render/HoveringUtil.java b/src/main/java/rip/athena/client/utils/render/HoveringUtil.java new file mode 100644 index 00000000..3d41d4db --- /dev/null +++ b/src/main/java/rip/athena/client/utils/render/HoveringUtil.java @@ -0,0 +1,14 @@ +package rip.athena.client.utils.render; + +/** + * @author Athena Development + * @project Athena-Client + * @date 6/9/2023 + */ +public class HoveringUtil { + + public static boolean isHovering(float x, float y, float width, float height, int mouseX, int mouseY) { + return mouseX >= x && mouseY >= y && mouseX < x + width && mouseY < y + height; + } + +} diff --git a/src/main/java/rip/athena/client/utils/render/RoundedUtils.java b/src/main/java/rip/athena/client/utils/render/RoundedUtils.java index 170245f8..c6823adb 100644 --- a/src/main/java/rip/athena/client/utils/render/RoundedUtils.java +++ b/src/main/java/rip/athena/client/utils/render/RoundedUtils.java @@ -17,6 +17,41 @@ public class RoundedUtils { final static FontRenderer fr = mc.fontRendererObj; private static final ShaderUtil roundedGradientShader = new ShaderUtil("roundedRectGradient"); + private static ShaderUtil roundedTexturedShader = new ShaderUtil("roundRectTexture"); + public static ShaderUtil roundedShader = new ShaderUtil("roundedRect"); + + public static void drawRound(float x, float y, float width, float height, float radius, Color color) { + drawRound(x, y, width, height, radius, false, color); + } + + public static void drawRoundTextured(float x, float y, float width, float height, float radius, float alpha) { + GlStateManager.color(1,1,1); + roundedTexturedShader.init(); + roundedTexturedShader.setUniformi("textureIn", 0); + setupRoundedRectUniforms(x, y, width, height, radius, roundedTexturedShader); + roundedTexturedShader.setUniformf("alpha", alpha); + ShaderUtil.drawQuads(x - 1, y - 1, width + 2, height + 2); + roundedTexturedShader.unload(); + GlStateManager.disableBlend(); + } + + public static void drawRound(float x, float y, float width, float height, float radius, boolean blur, Color color) { + GlStateManager.color(1,1,1,1); + GlStateManager.enableBlend(); + GlStateManager.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + GlStateManager.enableAlpha(); + GlStateManager.alphaFunc(GL_GREATER, (float) (0 * .01)); + roundedShader.init(); + + setupRoundedRectUniforms(x, y, width, height, radius, roundedShader); + roundedShader.setUniformi("blur", blur ? 1 : 0); + roundedShader.setUniformf("color", color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, color.getAlpha() / 255f); + + ShaderUtil.drawQuads(x - 1, y - 1, width + 2, height + 2); + roundedShader.unload(); + GlStateManager.disableBlend(); + } public static void drawGradientRound(float x, float y, float width, float height, float radius, Color bottomLeft, Color topLeft, Color bottomRight, Color topRight) { GlStateManager.enableAlpha(); diff --git a/src/main/java/rip/athena/client/utils/render/StencilUtils.java b/src/main/java/rip/athena/client/utils/render/StencilUtils.java new file mode 100644 index 00000000..c5eb4024 --- /dev/null +++ b/src/main/java/rip/athena/client/utils/render/StencilUtils.java @@ -0,0 +1,58 @@ +package rip.athena.client.utils.render; + +import org.lwjgl.opengl.EXTFramebufferObject; +import org.lwjgl.opengl.EXTPackedDepthStencil; +import org.lwjgl.opengl.GL11; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.shader.Framebuffer; + +/** + * @author Athena Development + * @project Athena-Client + * @date 6/10/2023 + */ + +public class StencilUtils { + + private static Minecraft mc = Minecraft.getMinecraft(); + + public static void checkSetupFBO(Framebuffer framebuffer) { + if (framebuffer != null) { + if (framebuffer.depthBuffer > -1) { + setupFBO(framebuffer); + framebuffer.depthBuffer = -1; + } + } + } + + public static void setupFBO(Framebuffer framebuffer) { + EXTFramebufferObject.glDeleteRenderbuffersEXT(framebuffer.depthBuffer); + final int stencilDepthBufferID = EXTFramebufferObject.glGenRenderbuffersEXT(); + EXTFramebufferObject.glBindRenderbufferEXT(EXTFramebufferObject.GL_RENDERBUFFER_EXT, stencilDepthBufferID); + EXTFramebufferObject.glRenderbufferStorageEXT(EXTFramebufferObject.GL_RENDERBUFFER_EXT, EXTPackedDepthStencil.GL_DEPTH_STENCIL_EXT, mc.displayWidth, mc.displayHeight); + EXTFramebufferObject.glFramebufferRenderbufferEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, EXTFramebufferObject.GL_STENCIL_ATTACHMENT_EXT, EXTFramebufferObject.GL_RENDERBUFFER_EXT, stencilDepthBufferID); + EXTFramebufferObject.glFramebufferRenderbufferEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, EXTFramebufferObject.GL_DEPTH_ATTACHMENT_EXT, EXTFramebufferObject.GL_RENDERBUFFER_EXT, stencilDepthBufferID); + } + + public static void initStencilToWrite() { + mc.getFramebuffer().bindFramebuffer(false); + checkSetupFBO(mc.getFramebuffer()); + GL11.glClear(GL11.GL_STENCIL_BUFFER_BIT); + GL11.glEnable(GL11.GL_STENCIL_TEST); + + GL11.glStencilFunc(GL11.GL_ALWAYS, 1, 1); + GL11.glStencilOp(GL11.GL_REPLACE, GL11.GL_REPLACE, GL11.GL_REPLACE); + GL11.glColorMask(false, false, false, false); + } + + public static void readStencilBuffer(int ref) { + GL11.glColorMask(true, true, true, true); + GL11.glStencilFunc(GL11.GL_EQUAL, ref, 1); + GL11.glStencilOp(GL11.GL_KEEP, GL11.GL_KEEP, GL11.GL_KEEP); + } + + public static void uninitStencilBuffer() { + GL11.glDisable(GL11.GL_STENCIL_TEST); + } +} \ No newline at end of file diff --git a/src/main/java/rip/athena/client/utils/render/TextField.java b/src/main/java/rip/athena/client/utils/render/TextField.java new file mode 100644 index 00000000..dc00973b --- /dev/null +++ b/src/main/java/rip/athena/client/utils/render/TextField.java @@ -0,0 +1,660 @@ +package rip.athena.client.utils.render; + +import lombok.Getter; +import lombok.Setter; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.WorldRenderer; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.ChatAllowedCharacters; +import net.minecraft.util.MathHelper; +import org.lwjgl.input.Keyboard; +import rip.athena.client.utils.animations.Animation; +import rip.athena.client.utils.animations.Direction; +import rip.athena.client.utils.animations.impl.DecelerateAnimation; +import rip.athena.client.utils.font.FontManager; +import rip.athena.client.utils.font.impl.athena.FontRenderer; +import rip.athena.client.utils.font.impl.athena.FontUtil; +import rip.athena.client.utils.time.TimerUtil; + +import java.awt.*; + +public class TextField extends Gui { + @Setter + public FontManager font; + + @Getter + @Setter + private float xPosition, yPosition, radius = 2, alpha = 1; + + @Setter + private float width, height, textAlpha = 1; + + @Setter + @Getter + private Color outline = Color.WHITE, fill = ColorUtil.tripleColor(32); + + private Color focusedTextColor = new Color(224, 224, 224); + private Color unfocusedTextColor = new Color(130, 130, 130); + /** + * Has the current text being edited on the textbox. + */ + private String text = ""; + + @Setter + private String backgroundText; + + private int maxStringLength = 32; + + @Setter + @Getter + private boolean drawingBackground = true; + + /** + * if true the textbox can lose focus by clicking elsewhere on the screen + */ + private boolean canLoseFocus = true; + + /** + * If this value is true along with isEnabled, keyTyped will process the keys. + */ + @Setter + @Getter + private boolean isFocused; + + /** + * The current character index that should be used as start of the rendered text. + */ + private int lineScrollOffset; + private int cursorPosition; + + + /** + * other selection position, maybe the same as the cursor + */ + private int selectionEnd; + private final Animation textColor = new DecelerateAnimation(250, 1); + private final Animation cursorBlinkAnimation = new DecelerateAnimation(750, 1); + private final TimerUtil timerUtil = new TimerUtil(); + + /** + * True if this textbox is visible + */ + private boolean visible = true; + + public TextField() { + } + + public TextField(FontManager font, float x, float y, float par5Width, float par6Height) { + this.font = font; + this.xPosition = x; + this.yPosition = y; + this.width = par5Width; + this.height = par6Height; + } + + /** + * Sets the text of the textbox + */ + public void setText(String text) { + if (text.length() > this.maxStringLength) { + this.text = text.substring(0, this.maxStringLength); + } else { + this.text = text; + } + + setCursorPositionZero(); + } + + /** + * Returns the contents of the textbox + */ + public String getText() { + return this.text; + } + + /** + * returns the text between the cursor and selectionEnd + */ + public String getSelectedText() { + int i = Math.min(this.cursorPosition, this.selectionEnd); + int j = Math.max(this.cursorPosition, this.selectionEnd); + return this.text.substring(i, j); + } + + /** + * replaces selected text, or inserts text at the position on the cursor + */ + public void writeText(String text) { + String s = ""; + String s1 = ChatAllowedCharacters.filterAllowedCharacters(text); + int min = Math.min(this.cursorPosition, this.selectionEnd); + int max = Math.max(this.cursorPosition, this.selectionEnd); + int len = this.maxStringLength - this.text.length() - (min - max); + int l; + + if (this.text.length() > 0) { + s = s + this.text.substring(0, min); + } + + if (len < s1.length()) { + s = s + s1.substring(0, len); + l = len; + } else { + s = s + s1; + l = s1.length(); + } + + if (this.text.length() > 0 && max < this.text.length()) { + s = s + this.text.substring(max); + } + + this.text = s; + this.moveCursorBy(min - this.selectionEnd + l); + + + } + + /** + * Deletes the specified number of words starting at the cursor position. Negative numbers will delete words left of + * the cursor. + */ + public void deleteWords(int num) { + if (this.text.length() != 0) { + if (this.selectionEnd != this.cursorPosition) { + this.writeText(""); + } else { + this.deleteFromCursor(this.getNthWordFromCursor(num) - this.cursorPosition); + } + } + } + + /** + * delete the selected text, otherwsie deletes characters from either side of the cursor. params: delete num + */ + public void deleteFromCursor(int num) { + if (this.text.length() != 0) { + if (this.selectionEnd != this.cursorPosition) { + this.writeText(""); + } else { + boolean negative = num < 0; + int i = negative ? this.cursorPosition + num : this.cursorPosition; + int j = negative ? this.cursorPosition : this.cursorPosition + num; + String s = ""; + + if (i >= 0) { + s = this.text.substring(0, i); + } + + if (j < this.text.length()) { + s = s + this.text.substring(j); + } + + this.text = s; + + if (negative) { + this.moveCursorBy(num); + } + + } + } + } + + /** + * see @getNthNextWordFromPos() params: N, position + */ + public int getNthWordFromCursor(int n) { + return this.getNthWordFromPos(n, this.getCursorPosition()); + } + + /** + * gets the position of the nth word. N may be negative, then it looks backwards. params: N, position + */ + public int getNthWordFromPos(int n, int pos) { + return this.func_146197_a(n, pos); + } + + public int func_146197_a(int n, int pos) { + int i = pos; + boolean negative = n < 0; + int j = Math.abs(n); + + for (int k = 0; k < j; ++k) { + if (!negative) { + int l = this.text.length(); + i = this.text.indexOf(32, i); + + if (i == -1) { + i = l; + } else { + while (i < l && this.text.charAt(i) == 32) { + ++i; + } + } + } else { + while (i > 0 && this.text.charAt(i - 1) == 32) { + --i; + } + + while (i > 0 && this.text.charAt(i - 1) != 32) { + --i; + } + } + } + + return i; + } + + /** + * Moves the text cursor by a specified number of characters and clears the selection + */ + public void moveCursorBy(int p_146182_1_) { + this.setCursorPosition(this.selectionEnd + p_146182_1_); + } + + /** + * sets the position of the cursor to the provided index + */ + public void setCursorPosition(int p_146190_1_) { + this.cursorPosition = p_146190_1_; + int i = this.text.length(); + this.cursorPosition = MathHelper.clamp_int(this.cursorPosition, 0, i); + this.setSelectionPos(this.cursorPosition); + } + + /** + * sets the cursors position to the beginning + */ + public void setCursorPositionZero() { + this.setCursorPosition(0); + } + + /** + * sets the cursors position to after the text + */ + public void setCursorPositionEnd() { + this.setCursorPosition(this.text.length()); + } + + /** + * Call this method from your GuiScreen to process the keys into the textbox + */ + public boolean keyTyped(char cha, int keyCode) { + if (!this.isFocused) { + return false; + } + + timerUtil.reset(); + + if (GuiScreen.isKeyComboCtrlA(keyCode)) { + this.setCursorPositionEnd(); + this.setSelectionPos(0); + return true; + } else if (GuiScreen.isKeyComboCtrlC(keyCode)) { + GuiScreen.setClipboardString(this.getSelectedText()); + return true; + } else if (GuiScreen.isKeyComboCtrlV(keyCode)) { + this.writeText(GuiScreen.getClipboardString()); + + + return true; + } else if (GuiScreen.isKeyComboCtrlX(keyCode)) { + GuiScreen.setClipboardString(this.getSelectedText()); + this.writeText(""); + + + return true; + } else { + switch (keyCode) { + case Keyboard.KEY_BACK: + if (GuiScreen.isCtrlKeyDown()) { + this.deleteWords(-1); + } else { + this.deleteFromCursor(-1); + } + + return true; + + case Keyboard.KEY_HOME: + if (GuiScreen.isShiftKeyDown()) { + this.setSelectionPos(0); + } else { + this.setCursorPositionZero(); + } + + return true; + + case Keyboard.KEY_LEFT: + if (GuiScreen.isShiftKeyDown()) { + if (GuiScreen.isCtrlKeyDown()) { + this.setSelectionPos(this.getNthWordFromPos(-1, this.getSelectionEnd())); + } else { + this.setSelectionPos(this.getSelectionEnd() - 1); + } + } else if (GuiScreen.isCtrlKeyDown()) { + this.setCursorPosition(this.getNthWordFromCursor(-1)); + } else { + this.moveCursorBy(-1); + } + + return true; + + case Keyboard.KEY_RIGHT: + if (GuiScreen.isShiftKeyDown()) { + if (GuiScreen.isCtrlKeyDown()) { + this.setSelectionPos(this.getNthWordFromPos(1, this.getSelectionEnd())); + } else { + this.setSelectionPos(this.getSelectionEnd() + 1); + } + } else if (GuiScreen.isCtrlKeyDown()) { + this.setCursorPosition(this.getNthWordFromCursor(1)); + } else { + this.moveCursorBy(1); + } + + return true; + + case Keyboard.KEY_END: + if (GuiScreen.isShiftKeyDown()) { + this.setSelectionPos(this.text.length()); + } else { + this.setCursorPositionEnd(); + } + + return true; + + case Keyboard.KEY_DELETE: + if (GuiScreen.isCtrlKeyDown()) { + this.deleteWords(1); + } else { + this.deleteFromCursor(1); + } + + return true; + + default: + if (ChatAllowedCharacters.isAllowedCharacter(cha)) { + this.writeText(Character.toString(cha)); + + return true; + } else { + return false; + } + } + } + } + + /** + * Args: x, y, buttonClicked + */ + public void mouseClicked(int mouseX, int mouseY, int mouseButton) { + boolean flag = HoveringUtil.isHovering(xPosition, yPosition, width, height, mouseX, mouseY); + + if (this.canLoseFocus) { + this.setFocused(flag); + } + } + + /** + * Draws the textbox + */ + public void drawTextBox() { + if (this.getVisible()) { + + if (isFocused()) { + Keyboard.enableRepeatEvents(true); + } + + Color textColorWithAlpha = focusedTextColor; + if (textAlpha != 1) { + textColorWithAlpha = ColorUtil.applyOpacity(focusedTextColor, textAlpha); + } + + + float xPos = this.xPosition + 3; + float yPos = this.yPosition + height; + + if (this.isDrawingBackground()) { + if (outline != null) { + RoundedUtils.drawRound(this.xPosition - 1, this.yPosition - 1, this.width + 2f, this.height + 2f, radius + 1, outline); + } + + RoundedUtils.drawRound(this.xPosition, this.yPosition, this.width, this.height, radius, ColorUtil.applyOpacity(fill, alpha)); + } else { + float rectHeight = 1; + //Gui.drawRect2(xPosition, yPosition + height - rectHeight, width, rectHeight, ColorUtil.interpolateColor(focusedTextColor, unfocusedTextColor, textColor.getOutput().floatValue())); + } + + textColor.setDirection(isFocused() ? Direction.BACKWARDS : Direction.FORWARDS); + if (backgroundText != null) { + Color backgroundTextColor = ColorUtil.applyOpacity(ColorUtil.applyOpacity(unfocusedTextColor, textAlpha), textColor.getOutput().floatValue()); + + if (text.equals("") && !textColor.finished(Direction.BACKWARDS)) { + FontManager.getProductSansRegular(20).drawString(backgroundText, xPos, yPos - FontManager.getProductSansRegular(25).height(), backgroundTextColor.getRGB()); + } + } + + int cursorPos = this.cursorPosition - this.lineScrollOffset; + int selEnd = this.selectionEnd - this.lineScrollOffset; + String text = this.text.substring(this.lineScrollOffset); + boolean cursorInBounds = cursorPos >= 0 && cursorPos <= text.length(); + boolean canShowCursor = this.isFocused && cursorInBounds; + float j1 = xPos; + + if (selEnd > text.length()) { + selEnd = text.length(); + } + + if (text.length() > 0) { + String s1 = cursorInBounds ? text.substring(0, cursorPos) : text; + float textWidth = FontManager.getProductSansRegular(20).width(s1); // Measure the width of the text + + // Cut the text if it exceeds the width of the box + if (textWidth > width - 6) { + int endIndex = s1.length(); + while (textWidth > width - 6 && endIndex > 0) { + s1 = s1.substring(0, endIndex - 1); + textWidth = FontManager.getProductSansRegular(20).width(s1); + endIndex--; + } + if (endIndex > 0) { + s1 += "..."; + } + } + + j1 = FontManager.getProductSansRegular(20).drawStringWithShadow(s1, xPos, yPos - FontManager.getProductSansRegular(25).height(), textColorWithAlpha.getRGB()) + .5f; + } + + + boolean cursorEndPos = this.cursorPosition < this.text.length() || this.text.length() >= this.getMaxStringLength(); + float k1 = j1; + + if (!cursorInBounds) { + k1 = cursorPos > 0 ? xPos + this.width : xPos; + } else if (cursorEndPos) { + k1 = j1; + --j1; + } + + boolean cursorBlink = timerUtil.hasTimeElapsed(2000) || cursorEndPos; + + if (canShowCursor) { + if (cursorBlink) { + if (cursorBlinkAnimation.isDone()) { + cursorBlinkAnimation.changeDirection(); + } + } else cursorBlinkAnimation.setDirection(Direction.FORWARDS); + + Gui.drawRect2(k1 - FontManager.getProductSansRegular(20).width(text) + 4, yPos - FontManager.getProductSansRegular(25).height() - 5, .5f, FontManager.getProductSansRegular(25).height() + 3, + ColorUtil.applyOpacity(textColorWithAlpha, cursorBlinkAnimation.getOutput().floatValue()).getRGB()); + } + + if (selEnd != cursorPos) { + int l1 = (int) (xPos + FontManager.getProductSansRegular(25).width(text.substring(0, selEnd))); + int offset = selEnd > cursorPos ? 2 : 0; + float widthOffset = selEnd > cursorPos ? .5f : 0; + + drawSelectionBox(k1 + offset - FontManager.getProductSansRegular(25).width(text) + 10, yPos - 3 - FontManager.getProductSansRegular(25).height(), l1 + widthOffset, yPos - FontManager.getProductSansRegular(25).height() + 12); + } + } + + } + + /** + * draws the vertical line cursor in the textbox + */ + private void drawSelectionBox(float x, float y, float width, float height) { + if (x < width) { + float i = x; + x = width; + width = i; + } + + if (y < height) { + float j = y; + y = height; + height = j; + } + + if (width > this.xPosition + this.width) { + width = this.xPosition + this.width; + } + + if (x > this.xPosition + this.width) { + x = this.xPosition + this.width; + } + + Tessellator tessellator = Tessellator.getInstance(); + WorldRenderer worldrenderer = tessellator.getWorldRenderer(); + GlStateManager.color(0.0F, 0.0F, 255.0F, 255.0F); + GlStateManager.disableTexture2D(); + GlStateManager.enableColorLogic(); + GlStateManager.colorLogicOp(5387); + worldrenderer.begin(7, DefaultVertexFormats.POSITION); + worldrenderer.pos(x, height, 0.0D).endVertex(); + worldrenderer.pos(width, height, 0.0D).endVertex(); + worldrenderer.pos(width, y, 0.0D).endVertex(); + worldrenderer.pos(x, y, 0.0D).endVertex(); + tessellator.draw(); + GlStateManager.disableColorLogic(); + GlStateManager.enableTexture2D(); + } + + public void setMaxStringLength(int len) { + this.maxStringLength = len; + + if (this.text.length() > len) { + this.text = this.text.substring(0, len); + } + } + + /** + * returns the maximum number of character that can be contained in this textbox + */ + public int getMaxStringLength() { + return this.maxStringLength; + } + + /** + * returns the current position of the cursor + */ + public int getCursorPosition() { + return this.cursorPosition; + } + + /** + * Sets the text colour for this textbox (disabled text will not use this colour) + */ + public void setTextColor(Color color) { + this.focusedTextColor = color; + } + + public void setDisabledTextColour(Color color) { + this.unfocusedTextColor = color; + } + + /** + * the side of the selection that is not the cursor, may be the same as the cursor + */ + public int getSelectionEnd() { + return this.selectionEnd; + } + + /** + * returns the width of the textbox depending on if background drawing is enabled + */ + public float getWidth() { + boolean flag = backgroundText != null && backgroundText.equals("Search"); + return this.isDrawingBackground() ? this.width - (flag ? 17 : 4) : this.width; + } + + public float getRealWidth() { + return this.isDrawingBackground() ? this.width - 4 : this.width; + } + + public float getHeight() { + return this.height; + } + + /** + * Sets the position of the selection anchor (i.e. position the selection was started at) + */ + public void setSelectionPos(int selectionPos) { + int i = this.text.length(); + + if (selectionPos > i) { + selectionPos = i; + } + + if (selectionPos < 0) { + selectionPos = 0; + } + + this.selectionEnd = selectionPos; + + if (this.font != null) { + if (this.lineScrollOffset > i) { + this.lineScrollOffset = i; + } + + float j = this.getWidth(); + String s =this.text.substring(this.lineScrollOffset); + int k = s.length() + this.lineScrollOffset; + + if (selectionPos == this.lineScrollOffset) { + this.lineScrollOffset -= FontManager.getProductSansRegular(25).width(this.text); + } + + if (selectionPos > k) { + this.lineScrollOffset += selectionPos - k; + } else if (selectionPos <= this.lineScrollOffset) { + this.lineScrollOffset -= this.lineScrollOffset - selectionPos; + } + + this.lineScrollOffset = MathHelper.clamp_int(this.lineScrollOffset, 0, i); + } + } + + /** + * if true the textbox can lose focus by clicking elsewhere on the screen + */ + public void setCanLoseFocus(boolean canLoseFocus) { + this.canLoseFocus = canLoseFocus; + } + + /** + * returns true if this textbox is visible + */ + public boolean getVisible() { + return this.visible; + } + + /** + * Sets whether this textbox is visible + */ + public void setVisible(boolean visible) { + this.visible = visible; + } +} diff --git a/src/main/java/rip/athena/client/utils/shader/ShaderUtil.java b/src/main/java/rip/athena/client/utils/shader/ShaderUtil.java index ee2a5846..b99f2263 100644 --- a/src/main/java/rip/athena/client/utils/shader/ShaderUtil.java +++ b/src/main/java/rip/athena/client/utils/shader/ShaderUtil.java @@ -32,6 +32,9 @@ public class ShaderUtil { case "kawaseUpGlow": fragmentShaderID = createShader(new ByteArrayInputStream(kawaseUpGlow.getBytes()), GL_FRAGMENT_SHADER); break; + case "roundedRectTextured": + fragmentShaderID = createShader(new ByteArrayInputStream(roundedRectTextured.getBytes()), GL_FRAGMENT_SHADER); + break; case "glow": fragmentShaderID = createShader(new ByteArrayInputStream(glowShader.getBytes()), GL_FRAGMENT_SHADER); break; @@ -215,6 +218,23 @@ public class ShaderUtil { return shader; } + private String roundedRectTextured = "#version 120\n" + + "\n" + + "uniform vec2 location, rectSize;\n" + + "uniform sampler2D textureIn;\n" + + "uniform float radius, alpha;\n" + + "\n" + + "float roundedBoxSDF(vec2 centerPos, vec2 size, float radius) {\n" + + " return length(max(abs(centerPos) -size, 0.)) - radius;\n" + + "}\n" + + "\n" + + "\n" + + "void main() {\n" + + " float distance = roundedBoxSDF((rectSize * .5) - (gl_TexCoord[0].st * rectSize), (rectSize * .5) - radius - 1., radius);\n" + + " float smoothedAlpha = (1.0-smoothstep(0.0, 2.0, distance)) * alpha;\n" + + " gl_FragColor = vec4(texture2D(textureIn, gl_TexCoord[0].st).rgb, smoothedAlpha);\n" + + "}"; + private String kawaseUpGlow = "#version 120\n" + "\n" + "uniform sampler2D inTexture, textureToCheck;\n" + diff --git a/src/main/java/rip/athena/client/utils/time/TimerUtil.java b/src/main/java/rip/athena/client/utils/time/TimerUtil.java new file mode 100644 index 00000000..6768a4b7 --- /dev/null +++ b/src/main/java/rip/athena/client/utils/time/TimerUtil.java @@ -0,0 +1,36 @@ +package rip.athena.client.utils.time; + +public class TimerUtil { + + public long lastMS = System.currentTimeMillis(); + + public void reset() { + lastMS = System.currentTimeMillis(); + } + + public boolean hasTimeElapsed(long time, boolean reset) { + if (System.currentTimeMillis() - lastMS > time) { + if (reset) reset(); + return true; + } + + return false; + } + + public boolean hasTimeElapsed(long time) { + return System.currentTimeMillis() - lastMS > time; + } + + public boolean hasTimeElapsed(double time) { + return hasTimeElapsed((long) time); + } + + public long getTime() { + return System.currentTimeMillis() - lastMS; + } + + public void setTime(long time) { + lastMS = time; + } + +} diff --git a/src/main/resources/assets/minecraft/Athena/gui/mods/nickhider.png b/src/main/resources/assets/minecraft/Athena/gui/mods/nickhider.png new file mode 100644 index 00000000..b3ea7e33 Binary files /dev/null and b/src/main/resources/assets/minecraft/Athena/gui/mods/nickhider.png differ diff --git a/src/main/resources/assets/minecraft/Athena/gui/mods/nobobbing.png b/src/main/resources/assets/minecraft/Athena/gui/mods/nobobbing.png new file mode 100644 index 00000000..ec97a153 Binary files /dev/null and b/src/main/resources/assets/minecraft/Athena/gui/mods/nobobbing.png differ diff --git a/src/main/resources/assets/minecraft/Athena/gui/mods/scoreboard.png b/src/main/resources/assets/minecraft/Athena/gui/mods/scoreboard.png new file mode 100644 index 00000000..e72b8dc1 Binary files /dev/null and b/src/main/resources/assets/minecraft/Athena/gui/mods/scoreboard.png differ diff --git a/src/main/resources/assets/minecraft/Athena/menu/usericon.png b/src/main/resources/assets/minecraft/Athena/menu/usericon.png index 5d752807..490db919 100644 Binary files a/src/main/resources/assets/minecraft/Athena/menu/usericon.png and b/src/main/resources/assets/minecraft/Athena/menu/usericon.png differ diff --git a/workspace/assets/skins/12/12f0b47e6bfcf92d8481cbc77b224e5ab38ad728d8ae4621ccc719b4a2de61e0 b/workspace/assets/skins/12/12f0b47e6bfcf92d8481cbc77b224e5ab38ad728d8ae4621ccc719b4a2de61e0 new file mode 100644 index 00000000..424e66ea Binary files /dev/null and b/workspace/assets/skins/12/12f0b47e6bfcf92d8481cbc77b224e5ab38ad728d8ae4621ccc719b4a2de61e0 differ diff --git a/workspace/assets/skins/13/13850780a31e33cc9dd8978c78890b16f0fbd81f8000a149edc526fcac1fe201 b/workspace/assets/skins/13/13850780a31e33cc9dd8978c78890b16f0fbd81f8000a149edc526fcac1fe201 new file mode 100644 index 00000000..e77257d6 Binary files /dev/null and b/workspace/assets/skins/13/13850780a31e33cc9dd8978c78890b16f0fbd81f8000a149edc526fcac1fe201 differ diff --git a/workspace/assets/skins/13/13f2d12c6d9ecc5ebc6d7d4116dfcb426443119e849a53352153765d51fcb981 b/workspace/assets/skins/13/13f2d12c6d9ecc5ebc6d7d4116dfcb426443119e849a53352153765d51fcb981 new file mode 100644 index 00000000..90abf0d8 Binary files /dev/null and b/workspace/assets/skins/13/13f2d12c6d9ecc5ebc6d7d4116dfcb426443119e849a53352153765d51fcb981 differ diff --git a/workspace/assets/skins/15/15b52aa0f7eef8bb537b40e8d8727faaeea4ad868ba3eefe07da86ed2212740e b/workspace/assets/skins/15/15b52aa0f7eef8bb537b40e8d8727faaeea4ad868ba3eefe07da86ed2212740e new file mode 100644 index 00000000..7fbc6c8e Binary files /dev/null and b/workspace/assets/skins/15/15b52aa0f7eef8bb537b40e8d8727faaeea4ad868ba3eefe07da86ed2212740e differ diff --git a/workspace/assets/skins/16/16221b7bf822c3119072546f3ee9a14ef5e8da30c6bf892b19ffec9fc5a1178e b/workspace/assets/skins/16/16221b7bf822c3119072546f3ee9a14ef5e8da30c6bf892b19ffec9fc5a1178e new file mode 100644 index 00000000..a61ee469 Binary files /dev/null and b/workspace/assets/skins/16/16221b7bf822c3119072546f3ee9a14ef5e8da30c6bf892b19ffec9fc5a1178e differ diff --git a/workspace/assets/skins/1a/1aee6b06df0c83319e4712642973abd4a1e4fbb75ae7303ac97eeb6b4117e888 b/workspace/assets/skins/1a/1aee6b06df0c83319e4712642973abd4a1e4fbb75ae7303ac97eeb6b4117e888 new file mode 100644 index 00000000..369f12b8 Binary files /dev/null and b/workspace/assets/skins/1a/1aee6b06df0c83319e4712642973abd4a1e4fbb75ae7303ac97eeb6b4117e888 differ diff --git a/workspace/assets/skins/1d/1dc1a635b9851e1ed67aeaed4fcf6504063a7f142f5510e657dac9878af8eb35 b/workspace/assets/skins/1d/1dc1a635b9851e1ed67aeaed4fcf6504063a7f142f5510e657dac9878af8eb35 new file mode 100644 index 00000000..c40d719c Binary files /dev/null and b/workspace/assets/skins/1d/1dc1a635b9851e1ed67aeaed4fcf6504063a7f142f5510e657dac9878af8eb35 differ diff --git a/workspace/assets/skins/1f/1f239694dcbc612735f500abb394acfb4bb91b1586e1f5af42491a3297f05841 b/workspace/assets/skins/1f/1f239694dcbc612735f500abb394acfb4bb91b1586e1f5af42491a3297f05841 new file mode 100644 index 00000000..b787fa6d Binary files /dev/null and b/workspace/assets/skins/1f/1f239694dcbc612735f500abb394acfb4bb91b1586e1f5af42491a3297f05841 differ diff --git a/workspace/assets/skins/20/2098135e5f5bbc686874ad0fcd1261007f1f18d0f8a85eac8ae4def63b7b6021 b/workspace/assets/skins/20/2098135e5f5bbc686874ad0fcd1261007f1f18d0f8a85eac8ae4def63b7b6021 new file mode 100644 index 00000000..e7fad7c3 Binary files /dev/null and b/workspace/assets/skins/20/2098135e5f5bbc686874ad0fcd1261007f1f18d0f8a85eac8ae4def63b7b6021 differ diff --git a/workspace/assets/skins/22/220e247124c5d24b9b3d4066f57550800a6196dace67c9b93e71221ec7c9a1a9 b/workspace/assets/skins/22/220e247124c5d24b9b3d4066f57550800a6196dace67c9b93e71221ec7c9a1a9 new file mode 100644 index 00000000..eada4e3b Binary files /dev/null and b/workspace/assets/skins/22/220e247124c5d24b9b3d4066f57550800a6196dace67c9b93e71221ec7c9a1a9 differ diff --git a/workspace/assets/skins/22/224dc1d0ea30a84b072d063bf2ed19692060d8eb7ae72e9a69277017bb824ef1 b/workspace/assets/skins/22/224dc1d0ea30a84b072d063bf2ed19692060d8eb7ae72e9a69277017bb824ef1 new file mode 100644 index 00000000..9215a7e1 Binary files /dev/null and b/workspace/assets/skins/22/224dc1d0ea30a84b072d063bf2ed19692060d8eb7ae72e9a69277017bb824ef1 differ diff --git a/workspace/assets/skins/22/22b81504a296226bb22f7407b019faad5d7d45a97cd7893c91593d24d85227a b/workspace/assets/skins/22/22b81504a296226bb22f7407b019faad5d7d45a97cd7893c91593d24d85227a new file mode 100644 index 00000000..e2c6cad7 Binary files /dev/null and b/workspace/assets/skins/22/22b81504a296226bb22f7407b019faad5d7d45a97cd7893c91593d24d85227a differ diff --git a/workspace/assets/skins/22/22cfa60180a9240c6f6e02fd2d8138e5ae6219c955b8f7e34076ff4ce294d1e7 b/workspace/assets/skins/22/22cfa60180a9240c6f6e02fd2d8138e5ae6219c955b8f7e34076ff4ce294d1e7 new file mode 100644 index 00000000..47b72606 Binary files /dev/null and b/workspace/assets/skins/22/22cfa60180a9240c6f6e02fd2d8138e5ae6219c955b8f7e34076ff4ce294d1e7 differ diff --git a/workspace/assets/skins/22/22fb18bf46c3a003c6fd8d4e714cba246467252042fb1c0b3c7e12eeb90b34b0 b/workspace/assets/skins/22/22fb18bf46c3a003c6fd8d4e714cba246467252042fb1c0b3c7e12eeb90b34b0 new file mode 100644 index 00000000..073f712c Binary files /dev/null and b/workspace/assets/skins/22/22fb18bf46c3a003c6fd8d4e714cba246467252042fb1c0b3c7e12eeb90b34b0 differ diff --git a/workspace/assets/skins/23/2361e020e6b5560025b01079d4551a1cbe3708608e1add9a0f9f1ab461513198 b/workspace/assets/skins/23/2361e020e6b5560025b01079d4551a1cbe3708608e1add9a0f9f1ab461513198 new file mode 100644 index 00000000..b1219e0e Binary files /dev/null and b/workspace/assets/skins/23/2361e020e6b5560025b01079d4551a1cbe3708608e1add9a0f9f1ab461513198 differ diff --git a/workspace/assets/skins/25/252871b2f2a02f9d86f89f13818369b656e9bac2bb4d65e103bccb595e5b7401 b/workspace/assets/skins/25/252871b2f2a02f9d86f89f13818369b656e9bac2bb4d65e103bccb595e5b7401 new file mode 100644 index 00000000..460c5aa5 Binary files /dev/null and b/workspace/assets/skins/25/252871b2f2a02f9d86f89f13818369b656e9bac2bb4d65e103bccb595e5b7401 differ diff --git a/workspace/assets/skins/25/25cb603d5fa1bfb6214ac28c1bbfc1a8e17484cf9b4ca0e5209276ae3739c5c5 b/workspace/assets/skins/25/25cb603d5fa1bfb6214ac28c1bbfc1a8e17484cf9b4ca0e5209276ae3739c5c5 new file mode 100644 index 00000000..c9ade70e Binary files /dev/null and b/workspace/assets/skins/25/25cb603d5fa1bfb6214ac28c1bbfc1a8e17484cf9b4ca0e5209276ae3739c5c5 differ diff --git a/workspace/assets/skins/26/2691493c75dbd903d993bbd077ec8c2dd7b55a01cfc5561620536cf4fa42823c b/workspace/assets/skins/26/2691493c75dbd903d993bbd077ec8c2dd7b55a01cfc5561620536cf4fa42823c new file mode 100644 index 00000000..29c27159 Binary files /dev/null and b/workspace/assets/skins/26/2691493c75dbd903d993bbd077ec8c2dd7b55a01cfc5561620536cf4fa42823c differ diff --git a/workspace/assets/skins/27/27f5fac3c7156aab9ab0de27fd561c579023123146cadee05ed3ab51f882a623 b/workspace/assets/skins/27/27f5fac3c7156aab9ab0de27fd561c579023123146cadee05ed3ab51f882a623 new file mode 100644 index 00000000..64eaa144 Binary files /dev/null and b/workspace/assets/skins/27/27f5fac3c7156aab9ab0de27fd561c579023123146cadee05ed3ab51f882a623 differ diff --git a/workspace/assets/skins/28/284946bc30dfe7224961e38525c865b1b7846fc918e58e453b55a33080dd2400 b/workspace/assets/skins/28/284946bc30dfe7224961e38525c865b1b7846fc918e58e453b55a33080dd2400 new file mode 100644 index 00000000..324170a7 Binary files /dev/null and b/workspace/assets/skins/28/284946bc30dfe7224961e38525c865b1b7846fc918e58e453b55a33080dd2400 differ diff --git a/workspace/assets/skins/28/289bb9b09009cae540dbeac88b0172b5fb56f796c5bd4aa05729b17ddd48fef2 b/workspace/assets/skins/28/289bb9b09009cae540dbeac88b0172b5fb56f796c5bd4aa05729b17ddd48fef2 new file mode 100644 index 00000000..72cd0338 Binary files /dev/null and b/workspace/assets/skins/28/289bb9b09009cae540dbeac88b0172b5fb56f796c5bd4aa05729b17ddd48fef2 differ diff --git a/workspace/assets/skins/28/28ce283f6f2a6052510073ed58ff101e7bc09607b5b0d4b5453070e31f497396 b/workspace/assets/skins/28/28ce283f6f2a6052510073ed58ff101e7bc09607b5b0d4b5453070e31f497396 new file mode 100644 index 00000000..419617ef Binary files /dev/null and b/workspace/assets/skins/28/28ce283f6f2a6052510073ed58ff101e7bc09607b5b0d4b5453070e31f497396 differ diff --git a/workspace/assets/skins/29/290f936785a40372a140f13c52fd085e1d2494e82ecba3605ccae5974a5e7678 b/workspace/assets/skins/29/290f936785a40372a140f13c52fd085e1d2494e82ecba3605ccae5974a5e7678 new file mode 100644 index 00000000..99147316 Binary files /dev/null and b/workspace/assets/skins/29/290f936785a40372a140f13c52fd085e1d2494e82ecba3605ccae5974a5e7678 differ diff --git a/workspace/assets/skins/29/29a3ad6e8d4369c5edcfecd47b04b12d0aae28c7ce351488947283a291d288e6 b/workspace/assets/skins/29/29a3ad6e8d4369c5edcfecd47b04b12d0aae28c7ce351488947283a291d288e6 new file mode 100644 index 00000000..bbc6d3ba Binary files /dev/null and b/workspace/assets/skins/29/29a3ad6e8d4369c5edcfecd47b04b12d0aae28c7ce351488947283a291d288e6 differ diff --git a/workspace/assets/skins/29/29e453d728cb918b46c6b43897f4bfd2e0af32878ea8a79ed29e9d1b77d2780f b/workspace/assets/skins/29/29e453d728cb918b46c6b43897f4bfd2e0af32878ea8a79ed29e9d1b77d2780f new file mode 100644 index 00000000..bd91884f Binary files /dev/null and b/workspace/assets/skins/29/29e453d728cb918b46c6b43897f4bfd2e0af32878ea8a79ed29e9d1b77d2780f differ diff --git a/workspace/assets/skins/2b/2b2d430212b038c85c1a246a28e04e59506d1a506becfbd76bd78e1c8a7a7a05 b/workspace/assets/skins/2b/2b2d430212b038c85c1a246a28e04e59506d1a506becfbd76bd78e1c8a7a7a05 new file mode 100644 index 00000000..60df88b1 Binary files /dev/null and b/workspace/assets/skins/2b/2b2d430212b038c85c1a246a28e04e59506d1a506becfbd76bd78e1c8a7a7a05 differ diff --git a/workspace/assets/skins/2c/2cbe0ae7bc90b2e80f95a819cd4fd916870b36a6bda586fe60ea529022ef172c b/workspace/assets/skins/2c/2cbe0ae7bc90b2e80f95a819cd4fd916870b36a6bda586fe60ea529022ef172c new file mode 100644 index 00000000..f75dc23a Binary files /dev/null and b/workspace/assets/skins/2c/2cbe0ae7bc90b2e80f95a819cd4fd916870b36a6bda586fe60ea529022ef172c differ diff --git a/workspace/assets/skins/2e/2e50459e60914beb5050ff2916e9c6ca87a6243e0b4a469a3fe61a467eca1a3b b/workspace/assets/skins/2e/2e50459e60914beb5050ff2916e9c6ca87a6243e0b4a469a3fe61a467eca1a3b new file mode 100644 index 00000000..5f9ad7d1 Binary files /dev/null and b/workspace/assets/skins/2e/2e50459e60914beb5050ff2916e9c6ca87a6243e0b4a469a3fe61a467eca1a3b differ diff --git a/workspace/assets/skins/30/30b15be4c86ad3aa1f7facc0a4d8daafa35b479dcb700a86b471068a067337f3 b/workspace/assets/skins/30/30b15be4c86ad3aa1f7facc0a4d8daafa35b479dcb700a86b471068a067337f3 new file mode 100644 index 00000000..064d60ac Binary files /dev/null and b/workspace/assets/skins/30/30b15be4c86ad3aa1f7facc0a4d8daafa35b479dcb700a86b471068a067337f3 differ diff --git a/workspace/assets/skins/36/365d22632c358ba74ddfbf6ad02be42f54f5c828c8d2379a20e3e36f8d9e4953 b/workspace/assets/skins/36/365d22632c358ba74ddfbf6ad02be42f54f5c828c8d2379a20e3e36f8d9e4953 new file mode 100644 index 00000000..27f31f26 Binary files /dev/null and b/workspace/assets/skins/36/365d22632c358ba74ddfbf6ad02be42f54f5c828c8d2379a20e3e36f8d9e4953 differ diff --git a/workspace/assets/skins/37/37db46b4f0614d1e94e77a34341e6dbffdfa9a2dda30e5a28bf3d66213787bdd b/workspace/assets/skins/37/37db46b4f0614d1e94e77a34341e6dbffdfa9a2dda30e5a28bf3d66213787bdd new file mode 100644 index 00000000..4847b873 Binary files /dev/null and b/workspace/assets/skins/37/37db46b4f0614d1e94e77a34341e6dbffdfa9a2dda30e5a28bf3d66213787bdd differ diff --git a/workspace/assets/skins/38/3835df84768a222ac871631b3c582a3eaa7327f011207ffc73179b2641f6b2be b/workspace/assets/skins/38/3835df84768a222ac871631b3c582a3eaa7327f011207ffc73179b2641f6b2be new file mode 100644 index 00000000..1b5949f7 Binary files /dev/null and b/workspace/assets/skins/38/3835df84768a222ac871631b3c582a3eaa7327f011207ffc73179b2641f6b2be differ diff --git a/workspace/assets/skins/38/38d7522359269453106e0d02e1e41ac4e031316a9165f28823a5e5350bfcada6 b/workspace/assets/skins/38/38d7522359269453106e0d02e1e41ac4e031316a9165f28823a5e5350bfcada6 new file mode 100644 index 00000000..1f8a31e2 Binary files /dev/null and b/workspace/assets/skins/38/38d7522359269453106e0d02e1e41ac4e031316a9165f28823a5e5350bfcada6 differ diff --git a/workspace/assets/skins/39/390d75f7f32d6fae7a61112e13bf19a82caf1fe6dfa59244cb14e06dc6e04805 b/workspace/assets/skins/39/390d75f7f32d6fae7a61112e13bf19a82caf1fe6dfa59244cb14e06dc6e04805 new file mode 100644 index 00000000..d24d3b60 Binary files /dev/null and b/workspace/assets/skins/39/390d75f7f32d6fae7a61112e13bf19a82caf1fe6dfa59244cb14e06dc6e04805 differ diff --git a/workspace/assets/skins/39/397e1dce90c01c48574c113b88b7254bc09b902d3d23b71c4ea6bd6149499986 b/workspace/assets/skins/39/397e1dce90c01c48574c113b88b7254bc09b902d3d23b71c4ea6bd6149499986 new file mode 100644 index 00000000..63f9aa32 Binary files /dev/null and b/workspace/assets/skins/39/397e1dce90c01c48574c113b88b7254bc09b902d3d23b71c4ea6bd6149499986 differ diff --git a/workspace/assets/skins/39/39da792218672eb95f133e1da9896b4f1097ff43f99b50efaaf6093d561c50be b/workspace/assets/skins/39/39da792218672eb95f133e1da9896b4f1097ff43f99b50efaaf6093d561c50be new file mode 100644 index 00000000..6027b687 Binary files /dev/null and b/workspace/assets/skins/39/39da792218672eb95f133e1da9896b4f1097ff43f99b50efaaf6093d561c50be differ diff --git a/workspace/assets/skins/3b/3bf3faa185e07ad17276c3f18515f1169f6e28ca3965f6c5b1df930a54610fac b/workspace/assets/skins/3b/3bf3faa185e07ad17276c3f18515f1169f6e28ca3965f6c5b1df930a54610fac new file mode 100644 index 00000000..8c6a481e Binary files /dev/null and b/workspace/assets/skins/3b/3bf3faa185e07ad17276c3f18515f1169f6e28ca3965f6c5b1df930a54610fac differ diff --git a/workspace/assets/skins/3e/3eaea9140af5003f104184ad628b249866bd65a9c2b1781e0f09b7600f7495af b/workspace/assets/skins/3e/3eaea9140af5003f104184ad628b249866bd65a9c2b1781e0f09b7600f7495af new file mode 100644 index 00000000..d8681719 Binary files /dev/null and b/workspace/assets/skins/3e/3eaea9140af5003f104184ad628b249866bd65a9c2b1781e0f09b7600f7495af differ diff --git a/workspace/assets/skins/40/40553937f1ec6ec1472fd6cb87cd4dfd3283ed66d55ae985b64d482667a204a4 b/workspace/assets/skins/40/40553937f1ec6ec1472fd6cb87cd4dfd3283ed66d55ae985b64d482667a204a4 new file mode 100644 index 00000000..31c8d235 Binary files /dev/null and b/workspace/assets/skins/40/40553937f1ec6ec1472fd6cb87cd4dfd3283ed66d55ae985b64d482667a204a4 differ diff --git a/workspace/assets/skins/40/40909bccb6fe00ce39649adea4df63bb6a713bfc3c9f59c10c380b6d420d8733 b/workspace/assets/skins/40/40909bccb6fe00ce39649adea4df63bb6a713bfc3c9f59c10c380b6d420d8733 new file mode 100644 index 00000000..002276ec Binary files /dev/null and b/workspace/assets/skins/40/40909bccb6fe00ce39649adea4df63bb6a713bfc3c9f59c10c380b6d420d8733 differ diff --git a/workspace/assets/skins/40/40beb8bfc6a95a7769bb6ec9ab1013a19ffbc7e31565631eec02dcb008bdd412 b/workspace/assets/skins/40/40beb8bfc6a95a7769bb6ec9ab1013a19ffbc7e31565631eec02dcb008bdd412 new file mode 100644 index 00000000..4fef9a3c Binary files /dev/null and b/workspace/assets/skins/40/40beb8bfc6a95a7769bb6ec9ab1013a19ffbc7e31565631eec02dcb008bdd412 differ diff --git a/workspace/assets/skins/44/44d3d0993148bf7dcec6f767825b680b26265cb65db2349bacd858173388b48 b/workspace/assets/skins/44/44d3d0993148bf7dcec6f767825b680b26265cb65db2349bacd858173388b48 new file mode 100644 index 00000000..327c4a0c Binary files /dev/null and b/workspace/assets/skins/44/44d3d0993148bf7dcec6f767825b680b26265cb65db2349bacd858173388b48 differ diff --git a/workspace/assets/skins/46/4604e6993a1b6f861bb0d59336f83aa92c0460a471df14bca6985aeac24e7a68 b/workspace/assets/skins/46/4604e6993a1b6f861bb0d59336f83aa92c0460a471df14bca6985aeac24e7a68 new file mode 100644 index 00000000..3c636708 Binary files /dev/null and b/workspace/assets/skins/46/4604e6993a1b6f861bb0d59336f83aa92c0460a471df14bca6985aeac24e7a68 differ diff --git a/workspace/assets/skins/46/46b44336051a67a1a4177fb5cfe0b3f01d8e55fe2fa6d14a7c6642ddcafb4248 b/workspace/assets/skins/46/46b44336051a67a1a4177fb5cfe0b3f01d8e55fe2fa6d14a7c6642ddcafb4248 new file mode 100644 index 00000000..c74cd0c2 Binary files /dev/null and b/workspace/assets/skins/46/46b44336051a67a1a4177fb5cfe0b3f01d8e55fe2fa6d14a7c6642ddcafb4248 differ diff --git a/workspace/assets/skins/49/491dce6f471cbae0a17cc950b686eab44dcb3159a97c6ccf0ccb648829513b4 b/workspace/assets/skins/49/491dce6f471cbae0a17cc950b686eab44dcb3159a97c6ccf0ccb648829513b4 new file mode 100644 index 00000000..b34f9982 Binary files /dev/null and b/workspace/assets/skins/49/491dce6f471cbae0a17cc950b686eab44dcb3159a97c6ccf0ccb648829513b4 differ diff --git a/workspace/assets/skins/4a/4a070c09e9b2433f73217e1d9f0f724662cbc65a0a707ca5ed7dc11cfd8c9242 b/workspace/assets/skins/4a/4a070c09e9b2433f73217e1d9f0f724662cbc65a0a707ca5ed7dc11cfd8c9242 new file mode 100644 index 00000000..50d4af09 Binary files /dev/null and b/workspace/assets/skins/4a/4a070c09e9b2433f73217e1d9f0f724662cbc65a0a707ca5ed7dc11cfd8c9242 differ diff --git a/workspace/assets/skins/4b/4b71dd87dc3e7553cba7a3d12e4286c31fd3a24e581d0f6cbadc6740cab0a178 b/workspace/assets/skins/4b/4b71dd87dc3e7553cba7a3d12e4286c31fd3a24e581d0f6cbadc6740cab0a178 new file mode 100644 index 00000000..47fe932a Binary files /dev/null and b/workspace/assets/skins/4b/4b71dd87dc3e7553cba7a3d12e4286c31fd3a24e581d0f6cbadc6740cab0a178 differ diff --git a/workspace/assets/skins/4c/4c978ea73656e291eece446da0ffe7d8a5574c38d3b070792972a235aa8247ea b/workspace/assets/skins/4c/4c978ea73656e291eece446da0ffe7d8a5574c38d3b070792972a235aa8247ea new file mode 100644 index 00000000..81f6ddd9 Binary files /dev/null and b/workspace/assets/skins/4c/4c978ea73656e291eece446da0ffe7d8a5574c38d3b070792972a235aa8247ea differ diff --git a/workspace/assets/skins/4c/4cc0f1158903211d281f9bcae2d8b81de21d422925001cb7b316bd175d6fa3a3 b/workspace/assets/skins/4c/4cc0f1158903211d281f9bcae2d8b81de21d422925001cb7b316bd175d6fa3a3 new file mode 100644 index 00000000..e29c1cae Binary files /dev/null and b/workspace/assets/skins/4c/4cc0f1158903211d281f9bcae2d8b81de21d422925001cb7b316bd175d6fa3a3 differ diff --git a/workspace/assets/skins/50/50a08b43f01bde08528dc0442a185cec90523c72e4a0211459459e47a77ec87f b/workspace/assets/skins/50/50a08b43f01bde08528dc0442a185cec90523c72e4a0211459459e47a77ec87f new file mode 100644 index 00000000..3e5c3c73 Binary files /dev/null and b/workspace/assets/skins/50/50a08b43f01bde08528dc0442a185cec90523c72e4a0211459459e47a77ec87f differ diff --git a/workspace/assets/skins/50/50ee3b89e01e9f8dc4e3463551322d88d4e9a6e3cc715da4ae1f186024b56bda b/workspace/assets/skins/50/50ee3b89e01e9f8dc4e3463551322d88d4e9a6e3cc715da4ae1f186024b56bda new file mode 100644 index 00000000..85e486b4 Binary files /dev/null and b/workspace/assets/skins/50/50ee3b89e01e9f8dc4e3463551322d88d4e9a6e3cc715da4ae1f186024b56bda differ diff --git a/workspace/assets/skins/53/536bd50bc8711fab20635d2d0e48939add5f672e49581b06c3214523dc768a5a b/workspace/assets/skins/53/536bd50bc8711fab20635d2d0e48939add5f672e49581b06c3214523dc768a5a new file mode 100644 index 00000000..9dafa7ca Binary files /dev/null and b/workspace/assets/skins/53/536bd50bc8711fab20635d2d0e48939add5f672e49581b06c3214523dc768a5a differ diff --git a/workspace/assets/skins/53/538c9a46a8da426783c88ed342437c758d839b67ba77f8dcb57ff04b519db1ce b/workspace/assets/skins/53/538c9a46a8da426783c88ed342437c758d839b67ba77f8dcb57ff04b519db1ce new file mode 100644 index 00000000..9c55ac98 Binary files /dev/null and b/workspace/assets/skins/53/538c9a46a8da426783c88ed342437c758d839b67ba77f8dcb57ff04b519db1ce differ diff --git a/workspace/assets/skins/53/53fc088b6417a944853d68e1fb1db64680e90f86c1130c89c93a82a60ab9cc51 b/workspace/assets/skins/53/53fc088b6417a944853d68e1fb1db64680e90f86c1130c89c93a82a60ab9cc51 new file mode 100644 index 00000000..9f0853ea Binary files /dev/null and b/workspace/assets/skins/53/53fc088b6417a944853d68e1fb1db64680e90f86c1130c89c93a82a60ab9cc51 differ diff --git a/workspace/assets/skins/54/5410f7d7a156589ab8706d0a196351d7412fc7baec85567700eb6668b647897d b/workspace/assets/skins/54/5410f7d7a156589ab8706d0a196351d7412fc7baec85567700eb6668b647897d new file mode 100644 index 00000000..98fbc213 Binary files /dev/null and b/workspace/assets/skins/54/5410f7d7a156589ab8706d0a196351d7412fc7baec85567700eb6668b647897d differ diff --git a/workspace/assets/skins/54/545f9099eff2a61f046f77497b2b849c86fbcb7e874e20d1a27426a61217d48d b/workspace/assets/skins/54/545f9099eff2a61f046f77497b2b849c86fbcb7e874e20d1a27426a61217d48d new file mode 100644 index 00000000..0c585dc3 Binary files /dev/null and b/workspace/assets/skins/54/545f9099eff2a61f046f77497b2b849c86fbcb7e874e20d1a27426a61217d48d differ diff --git a/workspace/assets/skins/55/55b1f3a5a1757f2fe280bb76e6c314414067f51cc537a43e9849f3342039e54d b/workspace/assets/skins/55/55b1f3a5a1757f2fe280bb76e6c314414067f51cc537a43e9849f3342039e54d new file mode 100644 index 00000000..b714fb64 Binary files /dev/null and b/workspace/assets/skins/55/55b1f3a5a1757f2fe280bb76e6c314414067f51cc537a43e9849f3342039e54d differ diff --git a/workspace/assets/skins/57/5730ceae0ae5a2f56d919fa8dac221dbb5329e45e78019d1063e21c7fc327fc1 b/workspace/assets/skins/57/5730ceae0ae5a2f56d919fa8dac221dbb5329e45e78019d1063e21c7fc327fc1 new file mode 100644 index 00000000..21457ea6 Binary files /dev/null and b/workspace/assets/skins/57/5730ceae0ae5a2f56d919fa8dac221dbb5329e45e78019d1063e21c7fc327fc1 differ diff --git a/workspace/assets/skins/57/5773675e0fcaf5a123baaefa4957f848925fc7b6a69fb08893c9e26ccedf3780 b/workspace/assets/skins/57/5773675e0fcaf5a123baaefa4957f848925fc7b6a69fb08893c9e26ccedf3780 new file mode 100644 index 00000000..dd3c201c Binary files /dev/null and b/workspace/assets/skins/57/5773675e0fcaf5a123baaefa4957f848925fc7b6a69fb08893c9e26ccedf3780 differ diff --git a/workspace/assets/skins/58/5884d356f3a87834604cba65b92a063126b8872f2b33658e5a904d275c161ac b/workspace/assets/skins/58/5884d356f3a87834604cba65b92a063126b8872f2b33658e5a904d275c161ac new file mode 100644 index 00000000..13971148 Binary files /dev/null and b/workspace/assets/skins/58/5884d356f3a87834604cba65b92a063126b8872f2b33658e5a904d275c161ac differ diff --git a/workspace/assets/skins/59/5985d1761aac4c840bdab195c81bd25775811a66a79f519168e5ac9936466c63 b/workspace/assets/skins/59/5985d1761aac4c840bdab195c81bd25775811a66a79f519168e5ac9936466c63 new file mode 100644 index 00000000..f94cfddc Binary files /dev/null and b/workspace/assets/skins/59/5985d1761aac4c840bdab195c81bd25775811a66a79f519168e5ac9936466c63 differ diff --git a/workspace/assets/skins/59/59c08b62356a867b77886d8485beac495468a5d7d52e2977ee218d7fee89d00 b/workspace/assets/skins/59/59c08b62356a867b77886d8485beac495468a5d7d52e2977ee218d7fee89d00 new file mode 100644 index 00000000..f724b23a Binary files /dev/null and b/workspace/assets/skins/59/59c08b62356a867b77886d8485beac495468a5d7d52e2977ee218d7fee89d00 differ diff --git a/workspace/assets/skins/5a/5a2a37cbe9c814ba8a64ec5a0c4ed07294fda1b9d954889f65627710e0e57ec8 b/workspace/assets/skins/5a/5a2a37cbe9c814ba8a64ec5a0c4ed07294fda1b9d954889f65627710e0e57ec8 new file mode 100644 index 00000000..3a0c8523 Binary files /dev/null and b/workspace/assets/skins/5a/5a2a37cbe9c814ba8a64ec5a0c4ed07294fda1b9d954889f65627710e0e57ec8 differ diff --git a/workspace/assets/skins/5a/5a95135f149ecde071cdad8761ec257097d4b3d61d47322d6fe44e89b56531ab b/workspace/assets/skins/5a/5a95135f149ecde071cdad8761ec257097d4b3d61d47322d6fe44e89b56531ab new file mode 100644 index 00000000..649ea7d0 Binary files /dev/null and b/workspace/assets/skins/5a/5a95135f149ecde071cdad8761ec257097d4b3d61d47322d6fe44e89b56531ab differ diff --git a/workspace/assets/skins/5a/5ada5d8d0485f1ac268950353bbce6c18afbf22d0b4bc11626b20a19040eb5e0 b/workspace/assets/skins/5a/5ada5d8d0485f1ac268950353bbce6c18afbf22d0b4bc11626b20a19040eb5e0 new file mode 100644 index 00000000..a53f6dfd Binary files /dev/null and b/workspace/assets/skins/5a/5ada5d8d0485f1ac268950353bbce6c18afbf22d0b4bc11626b20a19040eb5e0 differ diff --git a/workspace/assets/skins/5b/5b282fb0898787b96c5137baa9875801358779782a4e91218306f5e9bf49d172 b/workspace/assets/skins/5b/5b282fb0898787b96c5137baa9875801358779782a4e91218306f5e9bf49d172 new file mode 100644 index 00000000..89776ced Binary files /dev/null and b/workspace/assets/skins/5b/5b282fb0898787b96c5137baa9875801358779782a4e91218306f5e9bf49d172 differ diff --git a/workspace/assets/skins/5b/5bdff0cdca673fa03a11404dc713b48ae81d96dd658f6eeda21d69583a8de821 b/workspace/assets/skins/5b/5bdff0cdca673fa03a11404dc713b48ae81d96dd658f6eeda21d69583a8de821 new file mode 100644 index 00000000..0e80374d Binary files /dev/null and b/workspace/assets/skins/5b/5bdff0cdca673fa03a11404dc713b48ae81d96dd658f6eeda21d69583a8de821 differ diff --git a/workspace/assets/skins/5c/5c13b196932b4c04491750791f5346276643fcdf33a4aecb2737439fb6f7dc87 b/workspace/assets/skins/5c/5c13b196932b4c04491750791f5346276643fcdf33a4aecb2737439fb6f7dc87 new file mode 100644 index 00000000..6298c38e Binary files /dev/null and b/workspace/assets/skins/5c/5c13b196932b4c04491750791f5346276643fcdf33a4aecb2737439fb6f7dc87 differ diff --git a/workspace/assets/skins/5c/5c6d4cf805acde5ec36872730f3ae4781ab764a01975bf3d3415de0ea6aa8f07 b/workspace/assets/skins/5c/5c6d4cf805acde5ec36872730f3ae4781ab764a01975bf3d3415de0ea6aa8f07 new file mode 100644 index 00000000..52ffdb75 Binary files /dev/null and b/workspace/assets/skins/5c/5c6d4cf805acde5ec36872730f3ae4781ab764a01975bf3d3415de0ea6aa8f07 differ diff --git a/workspace/assets/skins/5d/5d2f2ab1942739b2e09c70a34e436c98156e0db5f3c82ec1b66e1af3e6000dd2 b/workspace/assets/skins/5d/5d2f2ab1942739b2e09c70a34e436c98156e0db5f3c82ec1b66e1af3e6000dd2 new file mode 100644 index 00000000..a324fe35 Binary files /dev/null and b/workspace/assets/skins/5d/5d2f2ab1942739b2e09c70a34e436c98156e0db5f3c82ec1b66e1af3e6000dd2 differ diff --git a/workspace/assets/skins/5d/5dbf871a06e6798bc5f29876a094c08a7fb279ccb66e959cfb85aee8d9d421bf b/workspace/assets/skins/5d/5dbf871a06e6798bc5f29876a094c08a7fb279ccb66e959cfb85aee8d9d421bf new file mode 100644 index 00000000..7fbce1c4 Binary files /dev/null and b/workspace/assets/skins/5d/5dbf871a06e6798bc5f29876a094c08a7fb279ccb66e959cfb85aee8d9d421bf differ diff --git a/workspace/assets/skins/5f/5f0b683d50fd417c2f45e27a8e4992417f5fad798ac105be36048233a09f014b b/workspace/assets/skins/5f/5f0b683d50fd417c2f45e27a8e4992417f5fad798ac105be36048233a09f014b new file mode 100644 index 00000000..cb620807 Binary files /dev/null and b/workspace/assets/skins/5f/5f0b683d50fd417c2f45e27a8e4992417f5fad798ac105be36048233a09f014b differ diff --git a/workspace/assets/skins/5f/5f7f35eb51c4edfac9bd596ba078cac207ce49691446e337fea09c9f8301cc6f b/workspace/assets/skins/5f/5f7f35eb51c4edfac9bd596ba078cac207ce49691446e337fea09c9f8301cc6f new file mode 100644 index 00000000..12ac0a08 Binary files /dev/null and b/workspace/assets/skins/5f/5f7f35eb51c4edfac9bd596ba078cac207ce49691446e337fea09c9f8301cc6f differ diff --git a/workspace/assets/skins/60/602a192b910b6d4e005b0537b8b62537036f5b4502d3e9143546ab9b0084bd98 b/workspace/assets/skins/60/602a192b910b6d4e005b0537b8b62537036f5b4502d3e9143546ab9b0084bd98 new file mode 100644 index 00000000..b5e70076 Binary files /dev/null and b/workspace/assets/skins/60/602a192b910b6d4e005b0537b8b62537036f5b4502d3e9143546ab9b0084bd98 differ diff --git a/workspace/assets/skins/60/60988f5429e3cb53eb3cf5a34a89bea7abcb3a57177b81558d1b683de054cc21 b/workspace/assets/skins/60/60988f5429e3cb53eb3cf5a34a89bea7abcb3a57177b81558d1b683de054cc21 new file mode 100644 index 00000000..319f1746 Binary files /dev/null and b/workspace/assets/skins/60/60988f5429e3cb53eb3cf5a34a89bea7abcb3a57177b81558d1b683de054cc21 differ diff --git a/workspace/assets/skins/62/62af87e39c159772c498659508e1d3aa97ef9e5b3358d7d5383fcfc28e8466d6 b/workspace/assets/skins/62/62af87e39c159772c498659508e1d3aa97ef9e5b3358d7d5383fcfc28e8466d6 new file mode 100644 index 00000000..bab65cea Binary files /dev/null and b/workspace/assets/skins/62/62af87e39c159772c498659508e1d3aa97ef9e5b3358d7d5383fcfc28e8466d6 differ diff --git a/workspace/assets/skins/64/64c9c4db0b825ccd7b2872203c6e1de9d43523cf934d6907037edbeac20e8752 b/workspace/assets/skins/64/64c9c4db0b825ccd7b2872203c6e1de9d43523cf934d6907037edbeac20e8752 new file mode 100644 index 00000000..64b65c70 Binary files /dev/null and b/workspace/assets/skins/64/64c9c4db0b825ccd7b2872203c6e1de9d43523cf934d6907037edbeac20e8752 differ diff --git a/workspace/assets/skins/66/66f7ecbcd97a58baab92572e9ba3d19cb3a2f4db6d1cec274e48401b8ac7f447 b/workspace/assets/skins/66/66f7ecbcd97a58baab92572e9ba3d19cb3a2f4db6d1cec274e48401b8ac7f447 new file mode 100644 index 00000000..4105884c Binary files /dev/null and b/workspace/assets/skins/66/66f7ecbcd97a58baab92572e9ba3d19cb3a2f4db6d1cec274e48401b8ac7f447 differ diff --git a/workspace/assets/skins/67/67a1566cb5ea109dcababe2eff6545a640e86157f9c2882d18d1d514d0bd8376 b/workspace/assets/skins/67/67a1566cb5ea109dcababe2eff6545a640e86157f9c2882d18d1d514d0bd8376 new file mode 100644 index 00000000..0d360d06 Binary files /dev/null and b/workspace/assets/skins/67/67a1566cb5ea109dcababe2eff6545a640e86157f9c2882d18d1d514d0bd8376 differ diff --git a/workspace/assets/skins/6a/6a502e9acd6e0bc63c5bfc4d120706b1593a7c396914bdaf04f92b22faf69eaa b/workspace/assets/skins/6a/6a502e9acd6e0bc63c5bfc4d120706b1593a7c396914bdaf04f92b22faf69eaa new file mode 100644 index 00000000..074bb1e1 Binary files /dev/null and b/workspace/assets/skins/6a/6a502e9acd6e0bc63c5bfc4d120706b1593a7c396914bdaf04f92b22faf69eaa differ diff --git a/workspace/assets/skins/6b/6b297e7cc153d06e6bc2b072f63ff30a9829fe5d0831ceb31437914a7858e0e4 b/workspace/assets/skins/6b/6b297e7cc153d06e6bc2b072f63ff30a9829fe5d0831ceb31437914a7858e0e4 new file mode 100644 index 00000000..67cf5897 Binary files /dev/null and b/workspace/assets/skins/6b/6b297e7cc153d06e6bc2b072f63ff30a9829fe5d0831ceb31437914a7858e0e4 differ diff --git a/workspace/assets/skins/6c/6c3f02f8f1716bcfd9da35e43fcbead1e7b5e54975c7cf382fc5f8cdff1b9d39 b/workspace/assets/skins/6c/6c3f02f8f1716bcfd9da35e43fcbead1e7b5e54975c7cf382fc5f8cdff1b9d39 new file mode 100644 index 00000000..cf10e663 Binary files /dev/null and b/workspace/assets/skins/6c/6c3f02f8f1716bcfd9da35e43fcbead1e7b5e54975c7cf382fc5f8cdff1b9d39 differ diff --git a/workspace/assets/skins/6c/6cb5affb8f1df14fb0ff33a75464a09b4a424dea9fcb86ab3c5afaea223dfa2a b/workspace/assets/skins/6c/6cb5affb8f1df14fb0ff33a75464a09b4a424dea9fcb86ab3c5afaea223dfa2a new file mode 100644 index 00000000..f6ade4f1 Binary files /dev/null and b/workspace/assets/skins/6c/6cb5affb8f1df14fb0ff33a75464a09b4a424dea9fcb86ab3c5afaea223dfa2a differ diff --git a/workspace/assets/skins/6d/6d2d365ede780e911668b4c639ba912392c04d1392bc4a731ace1e004a7d9653 b/workspace/assets/skins/6d/6d2d365ede780e911668b4c639ba912392c04d1392bc4a731ace1e004a7d9653 new file mode 100644 index 00000000..ace82aae Binary files /dev/null and b/workspace/assets/skins/6d/6d2d365ede780e911668b4c639ba912392c04d1392bc4a731ace1e004a7d9653 differ diff --git a/workspace/assets/skins/6d/6d774ebd3f214210f13025671f25e29ae1575cbcc6b980cb1531191c4f75145d b/workspace/assets/skins/6d/6d774ebd3f214210f13025671f25e29ae1575cbcc6b980cb1531191c4f75145d new file mode 100644 index 00000000..549d96f8 Binary files /dev/null and b/workspace/assets/skins/6d/6d774ebd3f214210f13025671f25e29ae1575cbcc6b980cb1531191c4f75145d differ diff --git a/workspace/assets/skins/6f/6fdd448226a81097b3bbb1da0b8d9386843d1a7a92fd3b8d6e3a8960ab28ccee b/workspace/assets/skins/6f/6fdd448226a81097b3bbb1da0b8d9386843d1a7a92fd3b8d6e3a8960ab28ccee new file mode 100644 index 00000000..a54b7032 Binary files /dev/null and b/workspace/assets/skins/6f/6fdd448226a81097b3bbb1da0b8d9386843d1a7a92fd3b8d6e3a8960ab28ccee differ diff --git a/workspace/assets/skins/6f/6ff552f9a3a0e20277c07e86b745a0f2e2df88b9a60f7ae3935ff0e5b0b9bce5 b/workspace/assets/skins/6f/6ff552f9a3a0e20277c07e86b745a0f2e2df88b9a60f7ae3935ff0e5b0b9bce5 new file mode 100644 index 00000000..104452aa Binary files /dev/null and b/workspace/assets/skins/6f/6ff552f9a3a0e20277c07e86b745a0f2e2df88b9a60f7ae3935ff0e5b0b9bce5 differ diff --git a/workspace/assets/skins/70/7024fdf5ecb2f79b84a070787da985fe78bac06298d7003ad13cbd7da74061eb b/workspace/assets/skins/70/7024fdf5ecb2f79b84a070787da985fe78bac06298d7003ad13cbd7da74061eb new file mode 100644 index 00000000..eff4a19c Binary files /dev/null and b/workspace/assets/skins/70/7024fdf5ecb2f79b84a070787da985fe78bac06298d7003ad13cbd7da74061eb differ diff --git a/workspace/assets/skins/70/704d1523316ee2a0f6bc73a99297099c137b86e387f2e00208e35c405ad5265a b/workspace/assets/skins/70/704d1523316ee2a0f6bc73a99297099c137b86e387f2e00208e35c405ad5265a new file mode 100644 index 00000000..e5e42f3b Binary files /dev/null and b/workspace/assets/skins/70/704d1523316ee2a0f6bc73a99297099c137b86e387f2e00208e35c405ad5265a differ diff --git a/workspace/assets/skins/70/70a1004dd8c25d56caae395a1948a39eb562e2eb2cb3da38bb5deab1b19d09c5 b/workspace/assets/skins/70/70a1004dd8c25d56caae395a1948a39eb562e2eb2cb3da38bb5deab1b19d09c5 new file mode 100644 index 00000000..40a98c63 Binary files /dev/null and b/workspace/assets/skins/70/70a1004dd8c25d56caae395a1948a39eb562e2eb2cb3da38bb5deab1b19d09c5 differ diff --git a/workspace/assets/skins/72/7277c232f6281803a44966ed304f6d3779607ab1cfcd9a93959e8c6a69354b0a b/workspace/assets/skins/72/7277c232f6281803a44966ed304f6d3779607ab1cfcd9a93959e8c6a69354b0a new file mode 100644 index 00000000..0c9715a5 Binary files /dev/null and b/workspace/assets/skins/72/7277c232f6281803a44966ed304f6d3779607ab1cfcd9a93959e8c6a69354b0a differ diff --git a/workspace/assets/skins/74/74ae58c3531a2561a57c6e1cb8d284cbe507815a5394a98dfbe284ec70f78a90 b/workspace/assets/skins/74/74ae58c3531a2561a57c6e1cb8d284cbe507815a5394a98dfbe284ec70f78a90 new file mode 100644 index 00000000..90aba490 Binary files /dev/null and b/workspace/assets/skins/74/74ae58c3531a2561a57c6e1cb8d284cbe507815a5394a98dfbe284ec70f78a90 differ diff --git a/workspace/assets/skins/78/78c06b9555eb5d0ccbab3d18d3a444d01ed9964a401fdc00de0bd0221d0f0785 b/workspace/assets/skins/78/78c06b9555eb5d0ccbab3d18d3a444d01ed9964a401fdc00de0bd0221d0f0785 new file mode 100644 index 00000000..1bb40355 Binary files /dev/null and b/workspace/assets/skins/78/78c06b9555eb5d0ccbab3d18d3a444d01ed9964a401fdc00de0bd0221d0f0785 differ diff --git a/workspace/assets/skins/78/78c0dd9d6aa18265ea4366857b69b7fd4960c1b260dcc331cb5933a265fcf0a7 b/workspace/assets/skins/78/78c0dd9d6aa18265ea4366857b69b7fd4960c1b260dcc331cb5933a265fcf0a7 new file mode 100644 index 00000000..813d9392 Binary files /dev/null and b/workspace/assets/skins/78/78c0dd9d6aa18265ea4366857b69b7fd4960c1b260dcc331cb5933a265fcf0a7 differ diff --git a/workspace/assets/skins/7a/7a261e745ee23232b27f0257ca48001611d8a5a35c67e7e25920f829758aaae5 b/workspace/assets/skins/7a/7a261e745ee23232b27f0257ca48001611d8a5a35c67e7e25920f829758aaae5 new file mode 100644 index 00000000..f09fcfb1 Binary files /dev/null and b/workspace/assets/skins/7a/7a261e745ee23232b27f0257ca48001611d8a5a35c67e7e25920f829758aaae5 differ diff --git a/workspace/assets/skins/7b/7b18226ef7423330fe757518e15e081681ce2effb6ec0a2bb6dfe0570ddc16a2 b/workspace/assets/skins/7b/7b18226ef7423330fe757518e15e081681ce2effb6ec0a2bb6dfe0570ddc16a2 new file mode 100644 index 00000000..0e95ba00 Binary files /dev/null and b/workspace/assets/skins/7b/7b18226ef7423330fe757518e15e081681ce2effb6ec0a2bb6dfe0570ddc16a2 differ diff --git a/workspace/assets/skins/7b/7b44fbc0d18d4313ab203e38def5d229ef404920e5c93a58da3290db5d2d197e b/workspace/assets/skins/7b/7b44fbc0d18d4313ab203e38def5d229ef404920e5c93a58da3290db5d2d197e new file mode 100644 index 00000000..59ad3f0b Binary files /dev/null and b/workspace/assets/skins/7b/7b44fbc0d18d4313ab203e38def5d229ef404920e5c93a58da3290db5d2d197e differ diff --git a/workspace/assets/skins/7c/7c1e2e5a58474404e6711197184f3cdc6b120878b3a06a1535d11e65334736d b/workspace/assets/skins/7c/7c1e2e5a58474404e6711197184f3cdc6b120878b3a06a1535d11e65334736d new file mode 100644 index 00000000..e86b0b27 Binary files /dev/null and b/workspace/assets/skins/7c/7c1e2e5a58474404e6711197184f3cdc6b120878b3a06a1535d11e65334736d differ diff --git a/workspace/assets/skins/7c/7c2a57de464e4822f9ea5c5a375c9e3b9d2513fc3f2ed84672ec4d8e7752455 b/workspace/assets/skins/7c/7c2a57de464e4822f9ea5c5a375c9e3b9d2513fc3f2ed84672ec4d8e7752455 new file mode 100644 index 00000000..98f027f0 Binary files /dev/null and b/workspace/assets/skins/7c/7c2a57de464e4822f9ea5c5a375c9e3b9d2513fc3f2ed84672ec4d8e7752455 differ diff --git a/workspace/assets/skins/7c/7cb85770e32247b85f634d6c6d29904126a63dec212fde4e6d17fa5e6b9b7d95 b/workspace/assets/skins/7c/7cb85770e32247b85f634d6c6d29904126a63dec212fde4e6d17fa5e6b9b7d95 new file mode 100644 index 00000000..82d1894f Binary files /dev/null and b/workspace/assets/skins/7c/7cb85770e32247b85f634d6c6d29904126a63dec212fde4e6d17fa5e6b9b7d95 differ diff --git a/workspace/assets/skins/7f/7fd5365c1f6b1a6859869665c753f5024922ae953d446aeef32044778051ac7b b/workspace/assets/skins/7f/7fd5365c1f6b1a6859869665c753f5024922ae953d446aeef32044778051ac7b new file mode 100644 index 00000000..3b3625d5 Binary files /dev/null and b/workspace/assets/skins/7f/7fd5365c1f6b1a6859869665c753f5024922ae953d446aeef32044778051ac7b differ diff --git a/workspace/assets/skins/7f/7feca845b4c00c56b01099ab0402ec8986b73845f5da57a266ceb923e141dc4b b/workspace/assets/skins/7f/7feca845b4c00c56b01099ab0402ec8986b73845f5da57a266ceb923e141dc4b new file mode 100644 index 00000000..59b5a55e Binary files /dev/null and b/workspace/assets/skins/7f/7feca845b4c00c56b01099ab0402ec8986b73845f5da57a266ceb923e141dc4b differ diff --git a/workspace/assets/skins/81/814fbd72ff704969f0dd6b428fd3a331f08f4b082010e0d755c727eeb12181f1 b/workspace/assets/skins/81/814fbd72ff704969f0dd6b428fd3a331f08f4b082010e0d755c727eeb12181f1 new file mode 100644 index 00000000..f5e94b8b Binary files /dev/null and b/workspace/assets/skins/81/814fbd72ff704969f0dd6b428fd3a331f08f4b082010e0d755c727eeb12181f1 differ diff --git a/workspace/assets/skins/82/828da47d0d92cfb91b4ea367e149a2b0cc5b1874e08fb8318e2b4d7cfae3c53 b/workspace/assets/skins/82/828da47d0d92cfb91b4ea367e149a2b0cc5b1874e08fb8318e2b4d7cfae3c53 new file mode 100644 index 00000000..93be7a40 Binary files /dev/null and b/workspace/assets/skins/82/828da47d0d92cfb91b4ea367e149a2b0cc5b1874e08fb8318e2b4d7cfae3c53 differ diff --git a/workspace/assets/skins/82/82b1099fa4dc796bbfdb0a9a5ced400767050cca834d90defe9816c3d37625a9 b/workspace/assets/skins/82/82b1099fa4dc796bbfdb0a9a5ced400767050cca834d90defe9816c3d37625a9 new file mode 100644 index 00000000..4a1aa098 Binary files /dev/null and b/workspace/assets/skins/82/82b1099fa4dc796bbfdb0a9a5ced400767050cca834d90defe9816c3d37625a9 differ diff --git a/workspace/assets/skins/83/834c2d05d80a4b12716fae5ec8e8ccffbd872551b579638a5fecd581fda90f90 b/workspace/assets/skins/83/834c2d05d80a4b12716fae5ec8e8ccffbd872551b579638a5fecd581fda90f90 new file mode 100644 index 00000000..904a64cc Binary files /dev/null and b/workspace/assets/skins/83/834c2d05d80a4b12716fae5ec8e8ccffbd872551b579638a5fecd581fda90f90 differ diff --git a/workspace/assets/skins/83/83cdf2055b8eca146110a4a320aa39eb4053f6fd4ba37d503812e91c23bca33a b/workspace/assets/skins/83/83cdf2055b8eca146110a4a320aa39eb4053f6fd4ba37d503812e91c23bca33a new file mode 100644 index 00000000..bfe41f5e Binary files /dev/null and b/workspace/assets/skins/83/83cdf2055b8eca146110a4a320aa39eb4053f6fd4ba37d503812e91c23bca33a differ diff --git a/workspace/assets/skins/83/83dffe832d2b5c0c17d648bdd3274e7849a50ab8204049a5a8a13f925c362765 b/workspace/assets/skins/83/83dffe832d2b5c0c17d648bdd3274e7849a50ab8204049a5a8a13f925c362765 new file mode 100644 index 00000000..6b2dc5d9 Binary files /dev/null and b/workspace/assets/skins/83/83dffe832d2b5c0c17d648bdd3274e7849a50ab8204049a5a8a13f925c362765 differ diff --git a/workspace/assets/skins/84/8414d93790790d43c79ad3bebe89dc3f78fd87490a448786fa7683f044f4d993 b/workspace/assets/skins/84/8414d93790790d43c79ad3bebe89dc3f78fd87490a448786fa7683f044f4d993 new file mode 100644 index 00000000..f1c7b830 Binary files /dev/null and b/workspace/assets/skins/84/8414d93790790d43c79ad3bebe89dc3f78fd87490a448786fa7683f044f4d993 differ diff --git a/workspace/assets/skins/84/8431ae499b4074cb89ddbbf9cb310201d8ea8a4b3cccb81e488dd1d515bce0e5 b/workspace/assets/skins/84/8431ae499b4074cb89ddbbf9cb310201d8ea8a4b3cccb81e488dd1d515bce0e5 new file mode 100644 index 00000000..f0b10afc Binary files /dev/null and b/workspace/assets/skins/84/8431ae499b4074cb89ddbbf9cb310201d8ea8a4b3cccb81e488dd1d515bce0e5 differ diff --git a/workspace/assets/skins/84/84ec54040026c391b2e371df292d0f0cb03c4e225cfc0c8d17ef073dd8b0e54 b/workspace/assets/skins/84/84ec54040026c391b2e371df292d0f0cb03c4e225cfc0c8d17ef073dd8b0e54 new file mode 100644 index 00000000..bbc4f1de Binary files /dev/null and b/workspace/assets/skins/84/84ec54040026c391b2e371df292d0f0cb03c4e225cfc0c8d17ef073dd8b0e54 differ diff --git a/workspace/assets/skins/86/86309fae5eca8dc1ccb9c6fae4227d27c70a75959159d14c2b1d12851c4ed18f b/workspace/assets/skins/86/86309fae5eca8dc1ccb9c6fae4227d27c70a75959159d14c2b1d12851c4ed18f new file mode 100644 index 00000000..1efa2a13 Binary files /dev/null and b/workspace/assets/skins/86/86309fae5eca8dc1ccb9c6fae4227d27c70a75959159d14c2b1d12851c4ed18f differ diff --git a/workspace/assets/skins/86/868f94bc8317f02b7211533e4a4df32ffdb3351ac1325d0040c4dcc0872b8c0f b/workspace/assets/skins/86/868f94bc8317f02b7211533e4a4df32ffdb3351ac1325d0040c4dcc0872b8c0f new file mode 100644 index 00000000..529fecd8 Binary files /dev/null and b/workspace/assets/skins/86/868f94bc8317f02b7211533e4a4df32ffdb3351ac1325d0040c4dcc0872b8c0f differ diff --git a/workspace/assets/skins/88/8827552adea642a0fedc5d1b32b7a851ab42c64a56f6175ebbd7c17cc2fcc596 b/workspace/assets/skins/88/8827552adea642a0fedc5d1b32b7a851ab42c64a56f6175ebbd7c17cc2fcc596 new file mode 100644 index 00000000..72f9d9b6 Binary files /dev/null and b/workspace/assets/skins/88/8827552adea642a0fedc5d1b32b7a851ab42c64a56f6175ebbd7c17cc2fcc596 differ diff --git a/workspace/assets/skins/88/88c56a9d1d90a61b971e1fa83717c3ff2f3372926f40ed9c85f5c181011e2df4 b/workspace/assets/skins/88/88c56a9d1d90a61b971e1fa83717c3ff2f3372926f40ed9c85f5c181011e2df4 new file mode 100644 index 00000000..db3a19cc Binary files /dev/null and b/workspace/assets/skins/88/88c56a9d1d90a61b971e1fa83717c3ff2f3372926f40ed9c85f5c181011e2df4 differ diff --git a/workspace/assets/skins/89/890be1d05cf881761e5c2a52a58c3ac5f95a67d9cf0fc3c079114e0377e712f9 b/workspace/assets/skins/89/890be1d05cf881761e5c2a52a58c3ac5f95a67d9cf0fc3c079114e0377e712f9 new file mode 100644 index 00000000..530c6189 Binary files /dev/null and b/workspace/assets/skins/89/890be1d05cf881761e5c2a52a58c3ac5f95a67d9cf0fc3c079114e0377e712f9 differ diff --git a/workspace/assets/skins/89/89f289106b2accb1938f167c6b585687983289e7510559f671ac23187310dc00 b/workspace/assets/skins/89/89f289106b2accb1938f167c6b585687983289e7510559f671ac23187310dc00 new file mode 100644 index 00000000..8a8e04de Binary files /dev/null and b/workspace/assets/skins/89/89f289106b2accb1938f167c6b585687983289e7510559f671ac23187310dc00 differ diff --git a/workspace/assets/skins/8b/8bb56569539eb30b8d6bd5b5ebfba3e78bc3043115b19616d9ca4fd1054fda7c b/workspace/assets/skins/8b/8bb56569539eb30b8d6bd5b5ebfba3e78bc3043115b19616d9ca4fd1054fda7c new file mode 100644 index 00000000..b778e6a0 Binary files /dev/null and b/workspace/assets/skins/8b/8bb56569539eb30b8d6bd5b5ebfba3e78bc3043115b19616d9ca4fd1054fda7c differ diff --git a/workspace/assets/skins/8c/8c94523fef1d9054a2f5371a93b979abb3de6e23fa20c5238e606ab55e0e6941 b/workspace/assets/skins/8c/8c94523fef1d9054a2f5371a93b979abb3de6e23fa20c5238e606ab55e0e6941 new file mode 100644 index 00000000..977b5b89 Binary files /dev/null and b/workspace/assets/skins/8c/8c94523fef1d9054a2f5371a93b979abb3de6e23fa20c5238e606ab55e0e6941 differ diff --git a/workspace/assets/skins/8c/8cfd5c69aceb6a88d0c8cfbc133c06bd6b041fc87c0b030bd55abeedc360f3ba b/workspace/assets/skins/8c/8cfd5c69aceb6a88d0c8cfbc133c06bd6b041fc87c0b030bd55abeedc360f3ba new file mode 100644 index 00000000..6b0f95dc Binary files /dev/null and b/workspace/assets/skins/8c/8cfd5c69aceb6a88d0c8cfbc133c06bd6b041fc87c0b030bd55abeedc360f3ba differ diff --git a/workspace/assets/skins/8d/8d66b0d16dfe207ac18097f996d1b14de941163c6e71d4858bb071c2d94387bd b/workspace/assets/skins/8d/8d66b0d16dfe207ac18097f996d1b14de941163c6e71d4858bb071c2d94387bd new file mode 100644 index 00000000..441f7f65 Binary files /dev/null and b/workspace/assets/skins/8d/8d66b0d16dfe207ac18097f996d1b14de941163c6e71d4858bb071c2d94387bd differ diff --git a/workspace/assets/skins/8e/8e27d21c48a4783b37190ae6d7116710a21ac15de5f670a0e62fdb5d297a955d b/workspace/assets/skins/8e/8e27d21c48a4783b37190ae6d7116710a21ac15de5f670a0e62fdb5d297a955d new file mode 100644 index 00000000..50d82d38 Binary files /dev/null and b/workspace/assets/skins/8e/8e27d21c48a4783b37190ae6d7116710a21ac15de5f670a0e62fdb5d297a955d differ diff --git a/workspace/assets/skins/90/907e7e43daa31e9fd47befbfefff1084ef58a45092666d53205390c6ec4d3506 b/workspace/assets/skins/90/907e7e43daa31e9fd47befbfefff1084ef58a45092666d53205390c6ec4d3506 new file mode 100644 index 00000000..5366ce39 Binary files /dev/null and b/workspace/assets/skins/90/907e7e43daa31e9fd47befbfefff1084ef58a45092666d53205390c6ec4d3506 differ diff --git a/workspace/assets/skins/90/90901c9004d2714cee44f352be9ab02eb60474aae4b7f954fd1f6d15c12cccd3 b/workspace/assets/skins/90/90901c9004d2714cee44f352be9ab02eb60474aae4b7f954fd1f6d15c12cccd3 new file mode 100644 index 00000000..0c766164 Binary files /dev/null and b/workspace/assets/skins/90/90901c9004d2714cee44f352be9ab02eb60474aae4b7f954fd1f6d15c12cccd3 differ diff --git a/workspace/assets/skins/91/910107a59d96ecbcd7c96f7641dc45f5b481f4fd693325e17a3f143d4e1be030 b/workspace/assets/skins/91/910107a59d96ecbcd7c96f7641dc45f5b481f4fd693325e17a3f143d4e1be030 new file mode 100644 index 00000000..ff069460 Binary files /dev/null and b/workspace/assets/skins/91/910107a59d96ecbcd7c96f7641dc45f5b481f4fd693325e17a3f143d4e1be030 differ diff --git a/workspace/assets/skins/91/91e90cafce32ab67af1e60901a9a7d6b646382b8e6ce99999e2ee25435a6d1e8 b/workspace/assets/skins/91/91e90cafce32ab67af1e60901a9a7d6b646382b8e6ce99999e2ee25435a6d1e8 new file mode 100644 index 00000000..1b0dc6bb Binary files /dev/null and b/workspace/assets/skins/91/91e90cafce32ab67af1e60901a9a7d6b646382b8e6ce99999e2ee25435a6d1e8 differ diff --git a/workspace/assets/skins/92/9242a22c7c876f9c51d0ceb2320763dd7b21767717019e4e8eb0204efb368130 b/workspace/assets/skins/92/9242a22c7c876f9c51d0ceb2320763dd7b21767717019e4e8eb0204efb368130 new file mode 100644 index 00000000..dedcd8bd Binary files /dev/null and b/workspace/assets/skins/92/9242a22c7c876f9c51d0ceb2320763dd7b21767717019e4e8eb0204efb368130 differ diff --git a/workspace/assets/skins/92/925b4f8c3db46c1bfc82fa0c25159a5f969f3cc50f60dfb81c32808481ca79ae b/workspace/assets/skins/92/925b4f8c3db46c1bfc82fa0c25159a5f969f3cc50f60dfb81c32808481ca79ae new file mode 100644 index 00000000..c551f6ee Binary files /dev/null and b/workspace/assets/skins/92/925b4f8c3db46c1bfc82fa0c25159a5f969f3cc50f60dfb81c32808481ca79ae differ diff --git a/workspace/assets/skins/93/933ee21c909d9320b1736ec10919f29e37ab496e192b2ded04ae21c84479e7f6 b/workspace/assets/skins/93/933ee21c909d9320b1736ec10919f29e37ab496e192b2ded04ae21c84479e7f6 new file mode 100644 index 00000000..7c17ca52 Binary files /dev/null and b/workspace/assets/skins/93/933ee21c909d9320b1736ec10919f29e37ab496e192b2ded04ae21c84479e7f6 differ diff --git a/workspace/assets/skins/95/9599cb4d4dafea3334ccb5cccd29a302415d1dda76a262286df31126ca05cf85 b/workspace/assets/skins/95/9599cb4d4dafea3334ccb5cccd29a302415d1dda76a262286df31126ca05cf85 new file mode 100644 index 00000000..311a9af7 Binary files /dev/null and b/workspace/assets/skins/95/9599cb4d4dafea3334ccb5cccd29a302415d1dda76a262286df31126ca05cf85 differ diff --git a/workspace/assets/skins/95/95b0c83c53876dc4e4d239e3f6dc3699283b5f19c42baff5fe272ae9f3e82be9 b/workspace/assets/skins/95/95b0c83c53876dc4e4d239e3f6dc3699283b5f19c42baff5fe272ae9f3e82be9 new file mode 100644 index 00000000..dab304af Binary files /dev/null and b/workspace/assets/skins/95/95b0c83c53876dc4e4d239e3f6dc3699283b5f19c42baff5fe272ae9f3e82be9 differ diff --git a/workspace/assets/skins/97/9778fa9cd8b85091b28db3f85973f2934733bba82531cf40fb4920149de1432f b/workspace/assets/skins/97/9778fa9cd8b85091b28db3f85973f2934733bba82531cf40fb4920149de1432f new file mode 100644 index 00000000..dc7e4e77 Binary files /dev/null and b/workspace/assets/skins/97/9778fa9cd8b85091b28db3f85973f2934733bba82531cf40fb4920149de1432f differ diff --git a/workspace/assets/skins/98/98610ecb5e813839330608c2d4979bc13c8999b7f88f17ce582e2b501dcea48f b/workspace/assets/skins/98/98610ecb5e813839330608c2d4979bc13c8999b7f88f17ce582e2b501dcea48f new file mode 100644 index 00000000..5cd28dd0 Binary files /dev/null and b/workspace/assets/skins/98/98610ecb5e813839330608c2d4979bc13c8999b7f88f17ce582e2b501dcea48f differ diff --git a/workspace/assets/skins/98/986463bd95ab242bdbced6180278675ca4e3730692ad0c3873a961b1d3452248 b/workspace/assets/skins/98/986463bd95ab242bdbced6180278675ca4e3730692ad0c3873a961b1d3452248 new file mode 100644 index 00000000..d4ff4fb3 Binary files /dev/null and b/workspace/assets/skins/98/986463bd95ab242bdbced6180278675ca4e3730692ad0c3873a961b1d3452248 differ diff --git a/workspace/assets/skins/99/99652e15d9b18f51701ec181297c3f97b1f7f02bc25aba39f184f97d8e692d38 b/workspace/assets/skins/99/99652e15d9b18f51701ec181297c3f97b1f7f02bc25aba39f184f97d8e692d38 new file mode 100644 index 00000000..98076f39 Binary files /dev/null and b/workspace/assets/skins/99/99652e15d9b18f51701ec181297c3f97b1f7f02bc25aba39f184f97d8e692d38 differ diff --git a/workspace/assets/skins/99/99b8c045ae42f0e832a5d325a78ada06f1aaf4f9bd1d1a1965dd582467ab5c15 b/workspace/assets/skins/99/99b8c045ae42f0e832a5d325a78ada06f1aaf4f9bd1d1a1965dd582467ab5c15 new file mode 100644 index 00000000..249bf14d Binary files /dev/null and b/workspace/assets/skins/99/99b8c045ae42f0e832a5d325a78ada06f1aaf4f9bd1d1a1965dd582467ab5c15 differ diff --git a/workspace/assets/skins/9a/9a62e7e611631fa871344347d519e98e9d220752728ec9a8bd5fcb57beacc84c b/workspace/assets/skins/9a/9a62e7e611631fa871344347d519e98e9d220752728ec9a8bd5fcb57beacc84c new file mode 100644 index 00000000..314ccca1 Binary files /dev/null and b/workspace/assets/skins/9a/9a62e7e611631fa871344347d519e98e9d220752728ec9a8bd5fcb57beacc84c differ diff --git a/workspace/assets/skins/9a/9acba2424b72638e4cf59d63ffb2393bfd9c107d3ba4cdc7e6c716eab98a0e2d b/workspace/assets/skins/9a/9acba2424b72638e4cf59d63ffb2393bfd9c107d3ba4cdc7e6c716eab98a0e2d new file mode 100644 index 00000000..91f7d19b Binary files /dev/null and b/workspace/assets/skins/9a/9acba2424b72638e4cf59d63ffb2393bfd9c107d3ba4cdc7e6c716eab98a0e2d differ diff --git a/workspace/assets/skins/9b/9bcaecadb8be3be3b58d22d33588062b753c4aa6f9b4f96192283ffe703ca720 b/workspace/assets/skins/9b/9bcaecadb8be3be3b58d22d33588062b753c4aa6f9b4f96192283ffe703ca720 new file mode 100644 index 00000000..472183a8 Binary files /dev/null and b/workspace/assets/skins/9b/9bcaecadb8be3be3b58d22d33588062b753c4aa6f9b4f96192283ffe703ca720 differ diff --git a/workspace/assets/skins/9d/9deadea1a3b1faf4183f83affbc03f242e92a1d5ebc4f76c2a4fa6fd48cb82b6 b/workspace/assets/skins/9d/9deadea1a3b1faf4183f83affbc03f242e92a1d5ebc4f76c2a4fa6fd48cb82b6 new file mode 100644 index 00000000..9dec7dcc Binary files /dev/null and b/workspace/assets/skins/9d/9deadea1a3b1faf4183f83affbc03f242e92a1d5ebc4f76c2a4fa6fd48cb82b6 differ diff --git a/workspace/assets/skins/9f/9fc359dfdb7c71de5737b2aa748f271066debcaeff1211ac85bfc43c1cad9d59 b/workspace/assets/skins/9f/9fc359dfdb7c71de5737b2aa748f271066debcaeff1211ac85bfc43c1cad9d59 new file mode 100644 index 00000000..bd5084ba Binary files /dev/null and b/workspace/assets/skins/9f/9fc359dfdb7c71de5737b2aa748f271066debcaeff1211ac85bfc43c1cad9d59 differ diff --git a/workspace/assets/skins/a0/a0eab4679d20f05402b2fb810d424e908b2da08486663492c1bd88544b4a7c24 b/workspace/assets/skins/a0/a0eab4679d20f05402b2fb810d424e908b2da08486663492c1bd88544b4a7c24 new file mode 100644 index 00000000..7f701dd1 Binary files /dev/null and b/workspace/assets/skins/a0/a0eab4679d20f05402b2fb810d424e908b2da08486663492c1bd88544b4a7c24 differ diff --git a/workspace/assets/skins/a2/a28e8d7706e8c0a1e1cea18aa1c0edebb73ef7329e2a1e8b4a73cafa11e322a7 b/workspace/assets/skins/a2/a28e8d7706e8c0a1e1cea18aa1c0edebb73ef7329e2a1e8b4a73cafa11e322a7 new file mode 100644 index 00000000..dd9c70d3 Binary files /dev/null and b/workspace/assets/skins/a2/a28e8d7706e8c0a1e1cea18aa1c0edebb73ef7329e2a1e8b4a73cafa11e322a7 differ diff --git a/workspace/assets/skins/a2/a290d89bbc675583dab19b2b21ec1d0a9c01334ab24d27d89f2e850406af7f19 b/workspace/assets/skins/a2/a290d89bbc675583dab19b2b21ec1d0a9c01334ab24d27d89f2e850406af7f19 new file mode 100644 index 00000000..cb537099 Binary files /dev/null and b/workspace/assets/skins/a2/a290d89bbc675583dab19b2b21ec1d0a9c01334ab24d27d89f2e850406af7f19 differ diff --git a/workspace/assets/skins/a5/a511b261708c9dcf5d9b80a312996cdce93035e721b3cebccee3e5dbc2511ad9 b/workspace/assets/skins/a5/a511b261708c9dcf5d9b80a312996cdce93035e721b3cebccee3e5dbc2511ad9 new file mode 100644 index 00000000..127d29fe Binary files /dev/null and b/workspace/assets/skins/a5/a511b261708c9dcf5d9b80a312996cdce93035e721b3cebccee3e5dbc2511ad9 differ diff --git a/workspace/assets/skins/a6/a689f649644fa47735cc1013e77f2371f89593236023b61484ba6ce9625b7c15 b/workspace/assets/skins/a6/a689f649644fa47735cc1013e77f2371f89593236023b61484ba6ce9625b7c15 new file mode 100644 index 00000000..b13b5b91 Binary files /dev/null and b/workspace/assets/skins/a6/a689f649644fa47735cc1013e77f2371f89593236023b61484ba6ce9625b7c15 differ diff --git a/workspace/assets/skins/a7/a74ab8e0e17ebd4aca0ff093071837fdff9e21d0027ddf9e6d99d90c474d002b b/workspace/assets/skins/a7/a74ab8e0e17ebd4aca0ff093071837fdff9e21d0027ddf9e6d99d90c474d002b new file mode 100644 index 00000000..1dc309dc Binary files /dev/null and b/workspace/assets/skins/a7/a74ab8e0e17ebd4aca0ff093071837fdff9e21d0027ddf9e6d99d90c474d002b differ diff --git a/workspace/assets/skins/a7/a75c8094890d7011e08f01208f94679fb04904b1f6ef2e084dd430bdd8827195 b/workspace/assets/skins/a7/a75c8094890d7011e08f01208f94679fb04904b1f6ef2e084dd430bdd8827195 new file mode 100644 index 00000000..b91cdce6 Binary files /dev/null and b/workspace/assets/skins/a7/a75c8094890d7011e08f01208f94679fb04904b1f6ef2e084dd430bdd8827195 differ diff --git a/workspace/assets/skins/a8/a864bd0f29f204ea3fa1cd592ef67b880779d8684e617268c13f8f54664538bb b/workspace/assets/skins/a8/a864bd0f29f204ea3fa1cd592ef67b880779d8684e617268c13f8f54664538bb new file mode 100644 index 00000000..fce55a2a Binary files /dev/null and b/workspace/assets/skins/a8/a864bd0f29f204ea3fa1cd592ef67b880779d8684e617268c13f8f54664538bb differ diff --git a/workspace/assets/skins/a9/a9d916b70962cf904e61d5b38ec1e6fee42012db548c21e901ba7744c4e94c0c b/workspace/assets/skins/a9/a9d916b70962cf904e61d5b38ec1e6fee42012db548c21e901ba7744c4e94c0c new file mode 100644 index 00000000..972d22fe Binary files /dev/null and b/workspace/assets/skins/a9/a9d916b70962cf904e61d5b38ec1e6fee42012db548c21e901ba7744c4e94c0c differ diff --git a/workspace/assets/skins/ab/abc4587cbaed7dbcba6fe58fd844d3d8ec8061810f6f631d8efe7b9ae7b2a3d4 b/workspace/assets/skins/ab/abc4587cbaed7dbcba6fe58fd844d3d8ec8061810f6f631d8efe7b9ae7b2a3d4 new file mode 100644 index 00000000..2775653a Binary files /dev/null and b/workspace/assets/skins/ab/abc4587cbaed7dbcba6fe58fd844d3d8ec8061810f6f631d8efe7b9ae7b2a3d4 differ diff --git a/workspace/assets/skins/ac/ac0e6c6481fea3012f88d5e4123e3bca33ff8f4fa3570b9af73b43a8eec05743 b/workspace/assets/skins/ac/ac0e6c6481fea3012f88d5e4123e3bca33ff8f4fa3570b9af73b43a8eec05743 new file mode 100644 index 00000000..881de5a8 Binary files /dev/null and b/workspace/assets/skins/ac/ac0e6c6481fea3012f88d5e4123e3bca33ff8f4fa3570b9af73b43a8eec05743 differ diff --git a/workspace/assets/skins/ac/ac2d1e6efae032215710b60e1af680d826b86a59ad4282bdbe010b53785b002 b/workspace/assets/skins/ac/ac2d1e6efae032215710b60e1af680d826b86a59ad4282bdbe010b53785b002 new file mode 100644 index 00000000..9a21c9b1 Binary files /dev/null and b/workspace/assets/skins/ac/ac2d1e6efae032215710b60e1af680d826b86a59ad4282bdbe010b53785b002 differ diff --git a/workspace/assets/skins/ac/ac81ca45c2476d4282a64fcb56bd8f17569b237197d63e779c16ef85c350bc26 b/workspace/assets/skins/ac/ac81ca45c2476d4282a64fcb56bd8f17569b237197d63e779c16ef85c350bc26 new file mode 100644 index 00000000..52ccdcc4 Binary files /dev/null and b/workspace/assets/skins/ac/ac81ca45c2476d4282a64fcb56bd8f17569b237197d63e779c16ef85c350bc26 differ diff --git a/workspace/assets/skins/ac/acdaf5c34feaec4a82430435b8e3f9fdd33d2879bc3a9d3b0dd0a6653f413de0 b/workspace/assets/skins/ac/acdaf5c34feaec4a82430435b8e3f9fdd33d2879bc3a9d3b0dd0a6653f413de0 new file mode 100644 index 00000000..eb3966bb Binary files /dev/null and b/workspace/assets/skins/ac/acdaf5c34feaec4a82430435b8e3f9fdd33d2879bc3a9d3b0dd0a6653f413de0 differ diff --git a/workspace/assets/skins/ad/ad796ebad971260db0339fda3121fb39c57a6e6b405f055e68c6abe6ccd51bca b/workspace/assets/skins/ad/ad796ebad971260db0339fda3121fb39c57a6e6b405f055e68c6abe6ccd51bca new file mode 100644 index 00000000..362cfeaf Binary files /dev/null and b/workspace/assets/skins/ad/ad796ebad971260db0339fda3121fb39c57a6e6b405f055e68c6abe6ccd51bca differ diff --git a/workspace/assets/skins/ae/ae46fda348a116e04ea0d87b517ab816bc7c5f0266769f674763520364170b49 b/workspace/assets/skins/ae/ae46fda348a116e04ea0d87b517ab816bc7c5f0266769f674763520364170b49 new file mode 100644 index 00000000..bcf9e08d Binary files /dev/null and b/workspace/assets/skins/ae/ae46fda348a116e04ea0d87b517ab816bc7c5f0266769f674763520364170b49 differ diff --git a/workspace/assets/skins/ae/ae79442e47c588bd707874b6ee7a6a1c625e77251a974679460a570bc89b9a71 b/workspace/assets/skins/ae/ae79442e47c588bd707874b6ee7a6a1c625e77251a974679460a570bc89b9a71 new file mode 100644 index 00000000..71bce772 Binary files /dev/null and b/workspace/assets/skins/ae/ae79442e47c588bd707874b6ee7a6a1c625e77251a974679460a570bc89b9a71 differ diff --git a/workspace/assets/skins/b0/b047b8362feec3d84c255c6692c03dea46838e5843f217f36bf087cd629ce5f7 b/workspace/assets/skins/b0/b047b8362feec3d84c255c6692c03dea46838e5843f217f36bf087cd629ce5f7 new file mode 100644 index 00000000..8ce0dc2d Binary files /dev/null and b/workspace/assets/skins/b0/b047b8362feec3d84c255c6692c03dea46838e5843f217f36bf087cd629ce5f7 differ diff --git a/workspace/assets/skins/b0/b0573a5ef325eaca1decaa0fd658632b29f4409d99fea3f4fb6c4b47d8b7d447 b/workspace/assets/skins/b0/b0573a5ef325eaca1decaa0fd658632b29f4409d99fea3f4fb6c4b47d8b7d447 new file mode 100644 index 00000000..532d657a Binary files /dev/null and b/workspace/assets/skins/b0/b0573a5ef325eaca1decaa0fd658632b29f4409d99fea3f4fb6c4b47d8b7d447 differ diff --git a/workspace/assets/skins/b0/b0c1baf19507c1973b5274fa455d9b84a0716c33d1b845e2ae946d04d1c3ffdb b/workspace/assets/skins/b0/b0c1baf19507c1973b5274fa455d9b84a0716c33d1b845e2ae946d04d1c3ffdb new file mode 100644 index 00000000..f75e75d4 Binary files /dev/null and b/workspace/assets/skins/b0/b0c1baf19507c1973b5274fa455d9b84a0716c33d1b845e2ae946d04d1c3ffdb differ diff --git a/workspace/assets/skins/b1/b121ce6b151a552c2ac5d43bd835d0e10a5cfebf75e029bf4ebc49d94ff32b64 b/workspace/assets/skins/b1/b121ce6b151a552c2ac5d43bd835d0e10a5cfebf75e029bf4ebc49d94ff32b64 new file mode 100644 index 00000000..c52ca4e5 Binary files /dev/null and b/workspace/assets/skins/b1/b121ce6b151a552c2ac5d43bd835d0e10a5cfebf75e029bf4ebc49d94ff32b64 differ diff --git a/workspace/assets/skins/b1/b13d846cb510b09f0260eea4a11a976ed01b869e9d936b0644837270ac246bd9 b/workspace/assets/skins/b1/b13d846cb510b09f0260eea4a11a976ed01b869e9d936b0644837270ac246bd9 new file mode 100644 index 00000000..2981df58 Binary files /dev/null and b/workspace/assets/skins/b1/b13d846cb510b09f0260eea4a11a976ed01b869e9d936b0644837270ac246bd9 differ diff --git a/workspace/assets/skins/b2/b2fd830249df1dbc7a2b2539bec2f32e878ed674522354acf0311f608299b42b b/workspace/assets/skins/b2/b2fd830249df1dbc7a2b2539bec2f32e878ed674522354acf0311f608299b42b new file mode 100644 index 00000000..4c1a01b3 Binary files /dev/null and b/workspace/assets/skins/b2/b2fd830249df1dbc7a2b2539bec2f32e878ed674522354acf0311f608299b42b differ diff --git a/workspace/assets/skins/b4/b4ac1f69649084bc5b43738b361bc0481f18a3ac50ff3f19d41a7c7afe33b1ed b/workspace/assets/skins/b4/b4ac1f69649084bc5b43738b361bc0481f18a3ac50ff3f19d41a7c7afe33b1ed new file mode 100644 index 00000000..4238c009 Binary files /dev/null and b/workspace/assets/skins/b4/b4ac1f69649084bc5b43738b361bc0481f18a3ac50ff3f19d41a7c7afe33b1ed differ diff --git a/workspace/assets/skins/b4/b4c4b86a61b1ce3e7c4a99bc632f0858d86e32dc0903fb4fe62675d83ef6ff46 b/workspace/assets/skins/b4/b4c4b86a61b1ce3e7c4a99bc632f0858d86e32dc0903fb4fe62675d83ef6ff46 new file mode 100644 index 00000000..8f7bb54b Binary files /dev/null and b/workspace/assets/skins/b4/b4c4b86a61b1ce3e7c4a99bc632f0858d86e32dc0903fb4fe62675d83ef6ff46 differ diff --git a/workspace/assets/skins/b5/b5df0c828a093fc9a0e364a3380e18919d32e5f7c52c09d5b484c9c7891c7b84 b/workspace/assets/skins/b5/b5df0c828a093fc9a0e364a3380e18919d32e5f7c52c09d5b484c9c7891c7b84 new file mode 100644 index 00000000..2c7a35e2 Binary files /dev/null and b/workspace/assets/skins/b5/b5df0c828a093fc9a0e364a3380e18919d32e5f7c52c09d5b484c9c7891c7b84 differ diff --git a/workspace/assets/skins/b6/b641fd9b805a66ad652568bfc2adc142a15fe774240be71bdc60349abc020ba1 b/workspace/assets/skins/b6/b641fd9b805a66ad652568bfc2adc142a15fe774240be71bdc60349abc020ba1 new file mode 100644 index 00000000..cc8f4f5f Binary files /dev/null and b/workspace/assets/skins/b6/b641fd9b805a66ad652568bfc2adc142a15fe774240be71bdc60349abc020ba1 differ diff --git a/workspace/assets/skins/b7/b7ce48a7b5e9a5b31227b6212246a90b1dd58c9910169cfda703df6cb695212f b/workspace/assets/skins/b7/b7ce48a7b5e9a5b31227b6212246a90b1dd58c9910169cfda703df6cb695212f new file mode 100644 index 00000000..7932618c Binary files /dev/null and b/workspace/assets/skins/b7/b7ce48a7b5e9a5b31227b6212246a90b1dd58c9910169cfda703df6cb695212f differ diff --git a/workspace/assets/skins/b8/b8dfda28c858a0728d835ab3f4dea2e697d067292db0698873692657ade24b7f b/workspace/assets/skins/b8/b8dfda28c858a0728d835ab3f4dea2e697d067292db0698873692657ade24b7f new file mode 100644 index 00000000..53ce282b Binary files /dev/null and b/workspace/assets/skins/b8/b8dfda28c858a0728d835ab3f4dea2e697d067292db0698873692657ade24b7f differ diff --git a/workspace/assets/skins/b9/b94e86a10529da4c02abd83acbe31c4a4d7df284241ce710adcdfc887bc55880 b/workspace/assets/skins/b9/b94e86a10529da4c02abd83acbe31c4a4d7df284241ce710adcdfc887bc55880 new file mode 100644 index 00000000..0ee63ec1 Binary files /dev/null and b/workspace/assets/skins/b9/b94e86a10529da4c02abd83acbe31c4a4d7df284241ce710adcdfc887bc55880 differ diff --git a/workspace/assets/skins/b9/b96555ae7f500361fd79730f36e0ea703e7ed56e998b294cd1c492dee455e677 b/workspace/assets/skins/b9/b96555ae7f500361fd79730f36e0ea703e7ed56e998b294cd1c492dee455e677 new file mode 100644 index 00000000..617354a4 Binary files /dev/null and b/workspace/assets/skins/b9/b96555ae7f500361fd79730f36e0ea703e7ed56e998b294cd1c492dee455e677 differ diff --git a/workspace/assets/skins/b9/b9a11acafd607f70691813d1e256e36431940dcf396522be1f5a08c45829d79e b/workspace/assets/skins/b9/b9a11acafd607f70691813d1e256e36431940dcf396522be1f5a08c45829d79e new file mode 100644 index 00000000..6571933a Binary files /dev/null and b/workspace/assets/skins/b9/b9a11acafd607f70691813d1e256e36431940dcf396522be1f5a08c45829d79e differ diff --git a/workspace/assets/skins/b9/b9cc5facd2e22fc0da445c5341ab65f9983641dbfca2eaeda3e85572274cbea5 b/workspace/assets/skins/b9/b9cc5facd2e22fc0da445c5341ab65f9983641dbfca2eaeda3e85572274cbea5 new file mode 100644 index 00000000..5dfab135 Binary files /dev/null and b/workspace/assets/skins/b9/b9cc5facd2e22fc0da445c5341ab65f9983641dbfca2eaeda3e85572274cbea5 differ diff --git a/workspace/assets/skins/b9/b9ef546b83a7f0fd225752691b2f1b5c475f5a38bc1f2b869fd9342dd251f9ec b/workspace/assets/skins/b9/b9ef546b83a7f0fd225752691b2f1b5c475f5a38bc1f2b869fd9342dd251f9ec new file mode 100644 index 00000000..e6a9aed7 Binary files /dev/null and b/workspace/assets/skins/b9/b9ef546b83a7f0fd225752691b2f1b5c475f5a38bc1f2b869fd9342dd251f9ec differ diff --git a/workspace/assets/skins/ba/ba1b9156e4c2108a1ccd75320bc0d3d575a63d3216dccf3c3247f076cb947c0 b/workspace/assets/skins/ba/ba1b9156e4c2108a1ccd75320bc0d3d575a63d3216dccf3c3247f076cb947c0 new file mode 100644 index 00000000..8bbf8f6f Binary files /dev/null and b/workspace/assets/skins/ba/ba1b9156e4c2108a1ccd75320bc0d3d575a63d3216dccf3c3247f076cb947c0 differ diff --git a/workspace/assets/skins/ba/baf0fabbfe4ce28c573cff3a5e8d42d830107df849ad116a7d750f240373ede2 b/workspace/assets/skins/ba/baf0fabbfe4ce28c573cff3a5e8d42d830107df849ad116a7d750f240373ede2 new file mode 100644 index 00000000..f9ca35f7 Binary files /dev/null and b/workspace/assets/skins/ba/baf0fabbfe4ce28c573cff3a5e8d42d830107df849ad116a7d750f240373ede2 differ diff --git a/workspace/assets/skins/bb/bb904e70e4743ba45b84f4a2577fd4bf4c48d8c9cc2f051a8af0f8f0a1c78118 b/workspace/assets/skins/bb/bb904e70e4743ba45b84f4a2577fd4bf4c48d8c9cc2f051a8af0f8f0a1c78118 new file mode 100644 index 00000000..5f95cb44 Binary files /dev/null and b/workspace/assets/skins/bb/bb904e70e4743ba45b84f4a2577fd4bf4c48d8c9cc2f051a8af0f8f0a1c78118 differ diff --git a/workspace/assets/skins/bd/bd7ba82feaba23ccecccd1b10da785a828417ccf1ec83f8f25847616d52309e0 b/workspace/assets/skins/bd/bd7ba82feaba23ccecccd1b10da785a828417ccf1ec83f8f25847616d52309e0 new file mode 100644 index 00000000..e14f6e26 Binary files /dev/null and b/workspace/assets/skins/bd/bd7ba82feaba23ccecccd1b10da785a828417ccf1ec83f8f25847616d52309e0 differ diff --git a/workspace/assets/skins/bd/bda00c0daf2bc2b8d2fd80cf4f6f6e4c867df359e9dbd5b27ba933231b87b73 b/workspace/assets/skins/bd/bda00c0daf2bc2b8d2fd80cf4f6f6e4c867df359e9dbd5b27ba933231b87b73 new file mode 100644 index 00000000..6e4bc822 Binary files /dev/null and b/workspace/assets/skins/bd/bda00c0daf2bc2b8d2fd80cf4f6f6e4c867df359e9dbd5b27ba933231b87b73 differ diff --git a/workspace/assets/skins/c0/c04204ea21ac626035db7be599c7f66c8bbc689cb9efeeb267f269109f3296cb b/workspace/assets/skins/c0/c04204ea21ac626035db7be599c7f66c8bbc689cb9efeeb267f269109f3296cb new file mode 100644 index 00000000..88479647 Binary files /dev/null and b/workspace/assets/skins/c0/c04204ea21ac626035db7be599c7f66c8bbc689cb9efeeb267f269109f3296cb differ diff --git a/workspace/assets/skins/c0/c0caa7023bdb43df1a528db1f8a2f6f47ee37ea5629164066725f8653469b543 b/workspace/assets/skins/c0/c0caa7023bdb43df1a528db1f8a2f6f47ee37ea5629164066725f8653469b543 new file mode 100644 index 00000000..7bd0bd28 Binary files /dev/null and b/workspace/assets/skins/c0/c0caa7023bdb43df1a528db1f8a2f6f47ee37ea5629164066725f8653469b543 differ diff --git a/workspace/assets/skins/c2/c25988f828e147122a946e874c9d405029262b44ef85d4b521cadf9ae4158f78 b/workspace/assets/skins/c2/c25988f828e147122a946e874c9d405029262b44ef85d4b521cadf9ae4158f78 new file mode 100644 index 00000000..033f711f Binary files /dev/null and b/workspace/assets/skins/c2/c25988f828e147122a946e874c9d405029262b44ef85d4b521cadf9ae4158f78 differ diff --git a/workspace/assets/skins/c3/c30d149292d0c1cbceec95f194c1730b2519ef0ff69a5cfe9136f1a5cef90ca4 b/workspace/assets/skins/c3/c30d149292d0c1cbceec95f194c1730b2519ef0ff69a5cfe9136f1a5cef90ca4 new file mode 100644 index 00000000..96cd226c Binary files /dev/null and b/workspace/assets/skins/c3/c30d149292d0c1cbceec95f194c1730b2519ef0ff69a5cfe9136f1a5cef90ca4 differ diff --git a/workspace/assets/skins/c3/c31e7bdd08170b4f0046dbb342bc6c9dad99f0efcb870223291da7ad4418662a b/workspace/assets/skins/c3/c31e7bdd08170b4f0046dbb342bc6c9dad99f0efcb870223291da7ad4418662a new file mode 100644 index 00000000..d3826a0a Binary files /dev/null and b/workspace/assets/skins/c3/c31e7bdd08170b4f0046dbb342bc6c9dad99f0efcb870223291da7ad4418662a differ diff --git a/workspace/assets/skins/c3/c3ab96a8e53af5b7cd4550b9e2a6651b17c0f8921b545feb1e9e0ffd2adf3ae b/workspace/assets/skins/c3/c3ab96a8e53af5b7cd4550b9e2a6651b17c0f8921b545feb1e9e0ffd2adf3ae new file mode 100644 index 00000000..11d0124a Binary files /dev/null and b/workspace/assets/skins/c3/c3ab96a8e53af5b7cd4550b9e2a6651b17c0f8921b545feb1e9e0ffd2adf3ae differ diff --git a/workspace/assets/skins/c3/c3c15ffe5b928c09830d45f86b0b919aef6803deed0c9df5ea622a3876fbf015 b/workspace/assets/skins/c3/c3c15ffe5b928c09830d45f86b0b919aef6803deed0c9df5ea622a3876fbf015 new file mode 100644 index 00000000..e1aabae6 Binary files /dev/null and b/workspace/assets/skins/c3/c3c15ffe5b928c09830d45f86b0b919aef6803deed0c9df5ea622a3876fbf015 differ diff --git a/workspace/assets/skins/c4/c41f51380af863e5b4fc62881631c883e5041ed77fb116600699082531854899 b/workspace/assets/skins/c4/c41f51380af863e5b4fc62881631c883e5041ed77fb116600699082531854899 new file mode 100644 index 00000000..a43e025f Binary files /dev/null and b/workspace/assets/skins/c4/c41f51380af863e5b4fc62881631c883e5041ed77fb116600699082531854899 differ diff --git a/workspace/assets/skins/c5/c5ab7145c9a289c8f365c418acb0ea9d747ca02efcf2a43aee53d37b8d64dea1 b/workspace/assets/skins/c5/c5ab7145c9a289c8f365c418acb0ea9d747ca02efcf2a43aee53d37b8d64dea1 new file mode 100644 index 00000000..3c57938c Binary files /dev/null and b/workspace/assets/skins/c5/c5ab7145c9a289c8f365c418acb0ea9d747ca02efcf2a43aee53d37b8d64dea1 differ diff --git a/workspace/assets/skins/c7/c723bad09ee1afc8cecb51b474a1b37004e020b0c03ba3c46ba6b7e748f0fbbd b/workspace/assets/skins/c7/c723bad09ee1afc8cecb51b474a1b37004e020b0c03ba3c46ba6b7e748f0fbbd new file mode 100644 index 00000000..e294be36 Binary files /dev/null and b/workspace/assets/skins/c7/c723bad09ee1afc8cecb51b474a1b37004e020b0c03ba3c46ba6b7e748f0fbbd differ diff --git a/workspace/assets/skins/c8/c837424a026ed4915fd4a035f3a06b8ad0be733f6c17c57b789bb931cbc70eaf b/workspace/assets/skins/c8/c837424a026ed4915fd4a035f3a06b8ad0be733f6c17c57b789bb931cbc70eaf new file mode 100644 index 00000000..b700a40d Binary files /dev/null and b/workspace/assets/skins/c8/c837424a026ed4915fd4a035f3a06b8ad0be733f6c17c57b789bb931cbc70eaf differ diff --git a/workspace/assets/skins/c8/c88537a4f5da9ac9cc5e81744aad94430b9bbc5b77ca52a817472b5b281378fc b/workspace/assets/skins/c8/c88537a4f5da9ac9cc5e81744aad94430b9bbc5b77ca52a817472b5b281378fc new file mode 100644 index 00000000..7370a08d Binary files /dev/null and b/workspace/assets/skins/c8/c88537a4f5da9ac9cc5e81744aad94430b9bbc5b77ca52a817472b5b281378fc differ diff --git a/workspace/assets/skins/cd/cda83ccda4c16d850c6d85b91e4d6c909820d73d2d06d6ad2251d822d64bd7af b/workspace/assets/skins/cd/cda83ccda4c16d850c6d85b91e4d6c909820d73d2d06d6ad2251d822d64bd7af new file mode 100644 index 00000000..d3193109 Binary files /dev/null and b/workspace/assets/skins/cd/cda83ccda4c16d850c6d85b91e4d6c909820d73d2d06d6ad2251d822d64bd7af differ diff --git a/workspace/assets/skins/ce/ce756d8b2cbf1048e40d6cf7871bb9e3e4be6488af249bf3e561ef15fce9ab90 b/workspace/assets/skins/ce/ce756d8b2cbf1048e40d6cf7871bb9e3e4be6488af249bf3e561ef15fce9ab90 new file mode 100644 index 00000000..a3bae101 Binary files /dev/null and b/workspace/assets/skins/ce/ce756d8b2cbf1048e40d6cf7871bb9e3e4be6488af249bf3e561ef15fce9ab90 differ diff --git a/workspace/assets/skins/ce/ce9df8a9893f890fa6d2a42dddeda76c52589b6ca4002d9f588145996790ce79 b/workspace/assets/skins/ce/ce9df8a9893f890fa6d2a42dddeda76c52589b6ca4002d9f588145996790ce79 new file mode 100644 index 00000000..b47aebf6 Binary files /dev/null and b/workspace/assets/skins/ce/ce9df8a9893f890fa6d2a42dddeda76c52589b6ca4002d9f588145996790ce79 differ diff --git a/workspace/assets/skins/ce/ced3c8dfdaa40f42335c8b4d643442643399aa370f9e852d0eabb3921de2cb78 b/workspace/assets/skins/ce/ced3c8dfdaa40f42335c8b4d643442643399aa370f9e852d0eabb3921de2cb78 new file mode 100644 index 00000000..fb83623c Binary files /dev/null and b/workspace/assets/skins/ce/ced3c8dfdaa40f42335c8b4d643442643399aa370f9e852d0eabb3921de2cb78 differ diff --git a/workspace/assets/skins/cf/cf667833490294d84c8a0610a18c56eaed3a4ae5512907437d1a60f0797e0cfe b/workspace/assets/skins/cf/cf667833490294d84c8a0610a18c56eaed3a4ae5512907437d1a60f0797e0cfe new file mode 100644 index 00000000..f57604d1 Binary files /dev/null and b/workspace/assets/skins/cf/cf667833490294d84c8a0610a18c56eaed3a4ae5512907437d1a60f0797e0cfe differ diff --git a/workspace/assets/skins/d0/d0782de63f214d2d3a033476a3d43a752fa567d21bdc6a40979909ccad4d2c73 b/workspace/assets/skins/d0/d0782de63f214d2d3a033476a3d43a752fa567d21bdc6a40979909ccad4d2c73 new file mode 100644 index 00000000..ef51bbbe Binary files /dev/null and b/workspace/assets/skins/d0/d0782de63f214d2d3a033476a3d43a752fa567d21bdc6a40979909ccad4d2c73 differ diff --git a/workspace/assets/skins/d0/d0ebe3ed2345dc9b5e4fc9f22febd12d682c555d616bafad918caedce6107732 b/workspace/assets/skins/d0/d0ebe3ed2345dc9b5e4fc9f22febd12d682c555d616bafad918caedce6107732 new file mode 100644 index 00000000..61cdd8c2 Binary files /dev/null and b/workspace/assets/skins/d0/d0ebe3ed2345dc9b5e4fc9f22febd12d682c555d616bafad918caedce6107732 differ diff --git a/workspace/assets/skins/d1/d10bc60fd9143dd1b970020be5cf0f50b429f2973ae39e6c919f9b9f7e2687df b/workspace/assets/skins/d1/d10bc60fd9143dd1b970020be5cf0f50b429f2973ae39e6c919f9b9f7e2687df new file mode 100644 index 00000000..bfa7e74c Binary files /dev/null and b/workspace/assets/skins/d1/d10bc60fd9143dd1b970020be5cf0f50b429f2973ae39e6c919f9b9f7e2687df differ diff --git a/workspace/assets/skins/d1/d148d53b9951da844f5c180282aba39dee06d49345e3af42f6ddcfe7384cbf5c b/workspace/assets/skins/d1/d148d53b9951da844f5c180282aba39dee06d49345e3af42f6ddcfe7384cbf5c new file mode 100644 index 00000000..42178cea Binary files /dev/null and b/workspace/assets/skins/d1/d148d53b9951da844f5c180282aba39dee06d49345e3af42f6ddcfe7384cbf5c differ diff --git a/workspace/assets/skins/d1/d1f39195de2f824435e9a84b0467d7e525c87c0cfd76fea17a1005796302331d b/workspace/assets/skins/d1/d1f39195de2f824435e9a84b0467d7e525c87c0cfd76fea17a1005796302331d new file mode 100644 index 00000000..d4cb2cb2 Binary files /dev/null and b/workspace/assets/skins/d1/d1f39195de2f824435e9a84b0467d7e525c87c0cfd76fea17a1005796302331d differ diff --git a/workspace/assets/skins/d5/d5271ee6e6defa808f6dcc921bae770a90f0caf54b7eeaacc21c65b3337cc126 b/workspace/assets/skins/d5/d5271ee6e6defa808f6dcc921bae770a90f0caf54b7eeaacc21c65b3337cc126 new file mode 100644 index 00000000..04778988 Binary files /dev/null and b/workspace/assets/skins/d5/d5271ee6e6defa808f6dcc921bae770a90f0caf54b7eeaacc21c65b3337cc126 differ diff --git a/workspace/assets/skins/d5/d5f571ee75f6522d1a544f75a3090cc5edcba97c674d98bea8d8fefe05cc76ca b/workspace/assets/skins/d5/d5f571ee75f6522d1a544f75a3090cc5edcba97c674d98bea8d8fefe05cc76ca new file mode 100644 index 00000000..0a3ccde1 Binary files /dev/null and b/workspace/assets/skins/d5/d5f571ee75f6522d1a544f75a3090cc5edcba97c674d98bea8d8fefe05cc76ca differ diff --git a/workspace/assets/skins/d6/d6504373ac18c6c29ecdfa01a06fec3a94ad448f6cd32d0e7c30bd8bf4cc990f b/workspace/assets/skins/d6/d6504373ac18c6c29ecdfa01a06fec3a94ad448f6cd32d0e7c30bd8bf4cc990f new file mode 100644 index 00000000..d2bc2a32 Binary files /dev/null and b/workspace/assets/skins/d6/d6504373ac18c6c29ecdfa01a06fec3a94ad448f6cd32d0e7c30bd8bf4cc990f differ diff --git a/workspace/assets/skins/d6/d68e6c10d0d8f361464d59a3dd3f8ee3816d7f86fbc3e814c7de14cf4230f2ae b/workspace/assets/skins/d6/d68e6c10d0d8f361464d59a3dd3f8ee3816d7f86fbc3e814c7de14cf4230f2ae new file mode 100644 index 00000000..d4931fe9 Binary files /dev/null and b/workspace/assets/skins/d6/d68e6c10d0d8f361464d59a3dd3f8ee3816d7f86fbc3e814c7de14cf4230f2ae differ diff --git a/workspace/assets/skins/d7/d76e67cb3a87d516a9133a3270f03900b7951da88d3e8e5555f0ee0164d46048 b/workspace/assets/skins/d7/d76e67cb3a87d516a9133a3270f03900b7951da88d3e8e5555f0ee0164d46048 new file mode 100644 index 00000000..b3925df6 Binary files /dev/null and b/workspace/assets/skins/d7/d76e67cb3a87d516a9133a3270f03900b7951da88d3e8e5555f0ee0164d46048 differ diff --git a/workspace/assets/skins/d7/d7b13abeb7a6b45f4fc7f6ae0b4857d9a16179179e8d1d2fb8b5697186d8675d b/workspace/assets/skins/d7/d7b13abeb7a6b45f4fc7f6ae0b4857d9a16179179e8d1d2fb8b5697186d8675d new file mode 100644 index 00000000..0c8c7e84 Binary files /dev/null and b/workspace/assets/skins/d7/d7b13abeb7a6b45f4fc7f6ae0b4857d9a16179179e8d1d2fb8b5697186d8675d differ diff --git a/workspace/assets/skins/d8/d8275736c18d7328c38c02568b8643efd977a73516b0de23a0515fdb7f1c6b61 b/workspace/assets/skins/d8/d8275736c18d7328c38c02568b8643efd977a73516b0de23a0515fdb7f1c6b61 new file mode 100644 index 00000000..11b7b513 Binary files /dev/null and b/workspace/assets/skins/d8/d8275736c18d7328c38c02568b8643efd977a73516b0de23a0515fdb7f1c6b61 differ diff --git a/workspace/assets/skins/d9/d91c1686551452e6b96074b37b7cad83a3da9a637a9017d386b0a7f809762951 b/workspace/assets/skins/d9/d91c1686551452e6b96074b37b7cad83a3da9a637a9017d386b0a7f809762951 new file mode 100644 index 00000000..502114e3 Binary files /dev/null and b/workspace/assets/skins/d9/d91c1686551452e6b96074b37b7cad83a3da9a637a9017d386b0a7f809762951 differ diff --git a/workspace/assets/skins/da/da8049e4d7709e0ff607a1ced88932370b6c1c4bd101e4bdae9e7e4f0c0eeb31 b/workspace/assets/skins/da/da8049e4d7709e0ff607a1ced88932370b6c1c4bd101e4bdae9e7e4f0c0eeb31 new file mode 100644 index 00000000..d6898779 Binary files /dev/null and b/workspace/assets/skins/da/da8049e4d7709e0ff607a1ced88932370b6c1c4bd101e4bdae9e7e4f0c0eeb31 differ diff --git a/workspace/assets/skins/db/db78151a73afe8a234cb0b8192959adeb54438d356dea552d63b7adf9aa96408 b/workspace/assets/skins/db/db78151a73afe8a234cb0b8192959adeb54438d356dea552d63b7adf9aa96408 new file mode 100644 index 00000000..7f153210 Binary files /dev/null and b/workspace/assets/skins/db/db78151a73afe8a234cb0b8192959adeb54438d356dea552d63b7adf9aa96408 differ diff --git a/workspace/assets/skins/dc/dc2866e132146f8487380ca99ff11be0b2bda4b137821a291c82ae09af043d13 b/workspace/assets/skins/dc/dc2866e132146f8487380ca99ff11be0b2bda4b137821a291c82ae09af043d13 new file mode 100644 index 00000000..1bd4fb69 Binary files /dev/null and b/workspace/assets/skins/dc/dc2866e132146f8487380ca99ff11be0b2bda4b137821a291c82ae09af043d13 differ diff --git a/workspace/assets/skins/dc/dccff29b7e3e3b4baeb4355239eb03754ab1a467ade4d0fb72cb7c361f50c618 b/workspace/assets/skins/dc/dccff29b7e3e3b4baeb4355239eb03754ab1a467ade4d0fb72cb7c361f50c618 new file mode 100644 index 00000000..4228f54b Binary files /dev/null and b/workspace/assets/skins/dc/dccff29b7e3e3b4baeb4355239eb03754ab1a467ade4d0fb72cb7c361f50c618 differ diff --git a/workspace/assets/skins/dc/dce853a0580e77b1e39e8364a2119f440f20505c52c82651edf16fcaee96f0b7 b/workspace/assets/skins/dc/dce853a0580e77b1e39e8364a2119f440f20505c52c82651edf16fcaee96f0b7 new file mode 100644 index 00000000..90638c4f Binary files /dev/null and b/workspace/assets/skins/dc/dce853a0580e77b1e39e8364a2119f440f20505c52c82651edf16fcaee96f0b7 differ diff --git a/workspace/assets/skins/dd/dd868f1cbbcd23424e88199f920379cdb75bebbbd2aa56ed1717476155583043 b/workspace/assets/skins/dd/dd868f1cbbcd23424e88199f920379cdb75bebbbd2aa56ed1717476155583043 new file mode 100644 index 00000000..8491743b Binary files /dev/null and b/workspace/assets/skins/dd/dd868f1cbbcd23424e88199f920379cdb75bebbbd2aa56ed1717476155583043 differ diff --git a/workspace/assets/skins/de/de630440ce7c8f20c1ca060a91f4f79543f0c0448a8608e21b0bf6397d2b813d b/workspace/assets/skins/de/de630440ce7c8f20c1ca060a91f4f79543f0c0448a8608e21b0bf6397d2b813d new file mode 100644 index 00000000..07809d89 Binary files /dev/null and b/workspace/assets/skins/de/de630440ce7c8f20c1ca060a91f4f79543f0c0448a8608e21b0bf6397d2b813d differ diff --git a/workspace/assets/skins/de/def59415092b0af3221fc396c2b875a27e9acc8a92ff6d825b6b0e352c5c7307 b/workspace/assets/skins/de/def59415092b0af3221fc396c2b875a27e9acc8a92ff6d825b6b0e352c5c7307 new file mode 100644 index 00000000..de3709b8 Binary files /dev/null and b/workspace/assets/skins/de/def59415092b0af3221fc396c2b875a27e9acc8a92ff6d825b6b0e352c5c7307 differ diff --git a/workspace/assets/skins/df/df61e7f7b2fb1a3d3aa69aea7c61dec581f40a7001a6e1b58651f34e074c9a24 b/workspace/assets/skins/df/df61e7f7b2fb1a3d3aa69aea7c61dec581f40a7001a6e1b58651f34e074c9a24 new file mode 100644 index 00000000..228abf39 Binary files /dev/null and b/workspace/assets/skins/df/df61e7f7b2fb1a3d3aa69aea7c61dec581f40a7001a6e1b58651f34e074c9a24 differ diff --git a/workspace/assets/skins/e0/e06d836092bf7ac4923caaa04c9c49d28d5cc68513a48b0c3752eb2425728482 b/workspace/assets/skins/e0/e06d836092bf7ac4923caaa04c9c49d28d5cc68513a48b0c3752eb2425728482 new file mode 100644 index 00000000..28107343 Binary files /dev/null and b/workspace/assets/skins/e0/e06d836092bf7ac4923caaa04c9c49d28d5cc68513a48b0c3752eb2425728482 differ diff --git a/workspace/assets/skins/e0/e09d064e1eb5c52c4760e4a9e1f38151d3e3b1d238fdd376b945bc8ca4acc08b b/workspace/assets/skins/e0/e09d064e1eb5c52c4760e4a9e1f38151d3e3b1d238fdd376b945bc8ca4acc08b new file mode 100644 index 00000000..38fef268 Binary files /dev/null and b/workspace/assets/skins/e0/e09d064e1eb5c52c4760e4a9e1f38151d3e3b1d238fdd376b945bc8ca4acc08b differ diff --git a/workspace/assets/skins/e1/e1f742eddbd6a163735169edf7db8cd76fabc5a71c4e3a160e3d384609327d62 b/workspace/assets/skins/e1/e1f742eddbd6a163735169edf7db8cd76fabc5a71c4e3a160e3d384609327d62 new file mode 100644 index 00000000..d013d750 Binary files /dev/null and b/workspace/assets/skins/e1/e1f742eddbd6a163735169edf7db8cd76fabc5a71c4e3a160e3d384609327d62 differ diff --git a/workspace/assets/skins/e2/e231f6db85665f9a3e5dce0d3e8bd5fc0d76b7018c45a4bae0d558e76ba46d33 b/workspace/assets/skins/e2/e231f6db85665f9a3e5dce0d3e8bd5fc0d76b7018c45a4bae0d558e76ba46d33 new file mode 100644 index 00000000..9cfc5f80 Binary files /dev/null and b/workspace/assets/skins/e2/e231f6db85665f9a3e5dce0d3e8bd5fc0d76b7018c45a4bae0d558e76ba46d33 differ diff --git a/workspace/assets/skins/e2/e2598082e9d9ab72078246bb2b3c9f7e1c2457e4bb64ac122e5eb6b578c2ce4e b/workspace/assets/skins/e2/e2598082e9d9ab72078246bb2b3c9f7e1c2457e4bb64ac122e5eb6b578c2ce4e new file mode 100644 index 00000000..c2506baf Binary files /dev/null and b/workspace/assets/skins/e2/e2598082e9d9ab72078246bb2b3c9f7e1c2457e4bb64ac122e5eb6b578c2ce4e differ diff --git a/workspace/assets/skins/e4/e46fa77c512b4b3a122572d18c6da24eed1a3334acc894fcaee596b2b32cd2c b/workspace/assets/skins/e4/e46fa77c512b4b3a122572d18c6da24eed1a3334acc894fcaee596b2b32cd2c new file mode 100644 index 00000000..62df703a Binary files /dev/null and b/workspace/assets/skins/e4/e46fa77c512b4b3a122572d18c6da24eed1a3334acc894fcaee596b2b32cd2c differ diff --git a/workspace/assets/skins/e4/e4e3215f9b3022eb1d3f8f64400f2a4428ba7f59636c9156ed2dbd0daa14fc9b b/workspace/assets/skins/e4/e4e3215f9b3022eb1d3f8f64400f2a4428ba7f59636c9156ed2dbd0daa14fc9b new file mode 100644 index 00000000..bfacf0a6 Binary files /dev/null and b/workspace/assets/skins/e4/e4e3215f9b3022eb1d3f8f64400f2a4428ba7f59636c9156ed2dbd0daa14fc9b differ diff --git a/workspace/assets/skins/e6/e61b2a9b31c5ec653a54ae194832e81527281e3e36c2e47bc02182f1a2bf61be b/workspace/assets/skins/e6/e61b2a9b31c5ec653a54ae194832e81527281e3e36c2e47bc02182f1a2bf61be new file mode 100644 index 00000000..749c939a Binary files /dev/null and b/workspace/assets/skins/e6/e61b2a9b31c5ec653a54ae194832e81527281e3e36c2e47bc02182f1a2bf61be differ diff --git a/workspace/assets/skins/e6/e6e3cd10d597b313da255634fbea6771905528e898f43d9ddf990ccc0ba7dd95 b/workspace/assets/skins/e6/e6e3cd10d597b313da255634fbea6771905528e898f43d9ddf990ccc0ba7dd95 new file mode 100644 index 00000000..b59cb099 Binary files /dev/null and b/workspace/assets/skins/e6/e6e3cd10d597b313da255634fbea6771905528e898f43d9ddf990ccc0ba7dd95 differ diff --git a/workspace/assets/skins/e9/e95356990d0c440d78b3dbeca343f77cb4ba066db19b04dc3b47f11ecf578f76 b/workspace/assets/skins/e9/e95356990d0c440d78b3dbeca343f77cb4ba066db19b04dc3b47f11ecf578f76 new file mode 100644 index 00000000..8968e4e4 Binary files /dev/null and b/workspace/assets/skins/e9/e95356990d0c440d78b3dbeca343f77cb4ba066db19b04dc3b47f11ecf578f76 differ diff --git a/workspace/assets/skins/e9/e9a28da5f07e2b0c49c92e6a586bfb449306aa8844eb58520cf73b451fdf1800 b/workspace/assets/skins/e9/e9a28da5f07e2b0c49c92e6a586bfb449306aa8844eb58520cf73b451fdf1800 new file mode 100644 index 00000000..b1347259 Binary files /dev/null and b/workspace/assets/skins/e9/e9a28da5f07e2b0c49c92e6a586bfb449306aa8844eb58520cf73b451fdf1800 differ diff --git a/workspace/assets/skins/ea/ea1ce73c1f1db9879179ebc15a892e20aa12d7381ebeaa84688cd96b49a0654f b/workspace/assets/skins/ea/ea1ce73c1f1db9879179ebc15a892e20aa12d7381ebeaa84688cd96b49a0654f new file mode 100644 index 00000000..28b9a0d4 Binary files /dev/null and b/workspace/assets/skins/ea/ea1ce73c1f1db9879179ebc15a892e20aa12d7381ebeaa84688cd96b49a0654f differ diff --git a/workspace/assets/skins/ea/eaf981704b8678a89acf3467e85aff237b9c12f68def609a62876cdb51f06a93 b/workspace/assets/skins/ea/eaf981704b8678a89acf3467e85aff237b9c12f68def609a62876cdb51f06a93 new file mode 100644 index 00000000..73c3de28 Binary files /dev/null and b/workspace/assets/skins/ea/eaf981704b8678a89acf3467e85aff237b9c12f68def609a62876cdb51f06a93 differ diff --git a/workspace/assets/skins/eb/eb82598d4f4cafa7c969f7b4d0b02443c6ce20ab5bf96d3886c4780b71bce6cb b/workspace/assets/skins/eb/eb82598d4f4cafa7c969f7b4d0b02443c6ce20ab5bf96d3886c4780b71bce6cb new file mode 100644 index 00000000..a0dbf1d1 Binary files /dev/null and b/workspace/assets/skins/eb/eb82598d4f4cafa7c969f7b4d0b02443c6ce20ab5bf96d3886c4780b71bce6cb differ diff --git a/workspace/assets/skins/eb/ebb586802c6ea678433346acda6c8fa53edd99d7efa048e8fa92383a76de7de b/workspace/assets/skins/eb/ebb586802c6ea678433346acda6c8fa53edd99d7efa048e8fa92383a76de7de new file mode 100644 index 00000000..af6c1fa0 Binary files /dev/null and b/workspace/assets/skins/eb/ebb586802c6ea678433346acda6c8fa53edd99d7efa048e8fa92383a76de7de differ diff --git a/workspace/assets/skins/ec/ec8866bb40924450e759fc55f1b98505f77788d5a03a3f61beda74cadb8f0d9b b/workspace/assets/skins/ec/ec8866bb40924450e759fc55f1b98505f77788d5a03a3f61beda74cadb8f0d9b new file mode 100644 index 00000000..27457f0b Binary files /dev/null and b/workspace/assets/skins/ec/ec8866bb40924450e759fc55f1b98505f77788d5a03a3f61beda74cadb8f0d9b differ diff --git a/workspace/assets/skins/ee/ee094d221230537d6fbb94cd1a1553c1732d479d9f3c8dd88970633a97566666 b/workspace/assets/skins/ee/ee094d221230537d6fbb94cd1a1553c1732d479d9f3c8dd88970633a97566666 new file mode 100644 index 00000000..c5fb6522 Binary files /dev/null and b/workspace/assets/skins/ee/ee094d221230537d6fbb94cd1a1553c1732d479d9f3c8dd88970633a97566666 differ diff --git a/workspace/assets/skins/ee/eeed1f708d69aaa44f2ed907337795b95a7f6329a3e1b7bd61cd5335bfb9f8cc b/workspace/assets/skins/ee/eeed1f708d69aaa44f2ed907337795b95a7f6329a3e1b7bd61cd5335bfb9f8cc new file mode 100644 index 00000000..74247416 Binary files /dev/null and b/workspace/assets/skins/ee/eeed1f708d69aaa44f2ed907337795b95a7f6329a3e1b7bd61cd5335bfb9f8cc differ diff --git a/workspace/assets/skins/ef/efeec07951e5f01d2963affcd6153b6009f93a078111155fb2d7e6abf26f7932 b/workspace/assets/skins/ef/efeec07951e5f01d2963affcd6153b6009f93a078111155fb2d7e6abf26f7932 new file mode 100644 index 00000000..4d5aed6c Binary files /dev/null and b/workspace/assets/skins/ef/efeec07951e5f01d2963affcd6153b6009f93a078111155fb2d7e6abf26f7932 differ diff --git a/workspace/assets/skins/f2/f22b01b62dea84a852a038908ae04e83242ed26c4412b4de6eabcd38fe317245 b/workspace/assets/skins/f2/f22b01b62dea84a852a038908ae04e83242ed26c4412b4de6eabcd38fe317245 new file mode 100644 index 00000000..43ba2820 Binary files /dev/null and b/workspace/assets/skins/f2/f22b01b62dea84a852a038908ae04e83242ed26c4412b4de6eabcd38fe317245 differ diff --git a/workspace/assets/skins/f2/f2dd6758a7ae4f4ba2c051de60a71ff4a51cd7e892380462ed5e05621ddda718 b/workspace/assets/skins/f2/f2dd6758a7ae4f4ba2c051de60a71ff4a51cd7e892380462ed5e05621ddda718 new file mode 100644 index 00000000..82e38f60 Binary files /dev/null and b/workspace/assets/skins/f2/f2dd6758a7ae4f4ba2c051de60a71ff4a51cd7e892380462ed5e05621ddda718 differ diff --git a/workspace/assets/skins/f3/f3ab42b4f44bc8453b59c6bfdf50b8df6918e006de44e38c48eaf7838377d166 b/workspace/assets/skins/f3/f3ab42b4f44bc8453b59c6bfdf50b8df6918e006de44e38c48eaf7838377d166 new file mode 100644 index 00000000..b2546c92 Binary files /dev/null and b/workspace/assets/skins/f3/f3ab42b4f44bc8453b59c6bfdf50b8df6918e006de44e38c48eaf7838377d166 differ diff --git a/workspace/assets/skins/f4/f4baa537b8abdb06681d00e740b8ff292547d13fec5fafa87da427e53979e3e6 b/workspace/assets/skins/f4/f4baa537b8abdb06681d00e740b8ff292547d13fec5fafa87da427e53979e3e6 new file mode 100644 index 00000000..2fb8f91c Binary files /dev/null and b/workspace/assets/skins/f4/f4baa537b8abdb06681d00e740b8ff292547d13fec5fafa87da427e53979e3e6 differ diff --git a/workspace/assets/skins/f5/f592ddd0e84bdcf37a2f88b686d8025eb6eb12713ce156d9330cb9b9d63d2730 b/workspace/assets/skins/f5/f592ddd0e84bdcf37a2f88b686d8025eb6eb12713ce156d9330cb9b9d63d2730 new file mode 100644 index 00000000..7e5d095e Binary files /dev/null and b/workspace/assets/skins/f5/f592ddd0e84bdcf37a2f88b686d8025eb6eb12713ce156d9330cb9b9d63d2730 differ diff --git a/workspace/assets/skins/f5/f5e2ffe4d0247cb3f2985124e14bb72ce322c431ac508dcf1a767a18400e2095 b/workspace/assets/skins/f5/f5e2ffe4d0247cb3f2985124e14bb72ce322c431ac508dcf1a767a18400e2095 new file mode 100644 index 00000000..b6cf98f1 Binary files /dev/null and b/workspace/assets/skins/f5/f5e2ffe4d0247cb3f2985124e14bb72ce322c431ac508dcf1a767a18400e2095 differ diff --git a/workspace/assets/skins/f7/f7239c68ab91625b1b5a9cb3425444790ff2f4be4d5a23be4b398266e52b19b8 b/workspace/assets/skins/f7/f7239c68ab91625b1b5a9cb3425444790ff2f4be4d5a23be4b398266e52b19b8 new file mode 100644 index 00000000..c55545aa Binary files /dev/null and b/workspace/assets/skins/f7/f7239c68ab91625b1b5a9cb3425444790ff2f4be4d5a23be4b398266e52b19b8 differ diff --git a/workspace/assets/skins/f7/f7272f332df28b842231fbee7f9722ee7d5b5269a92a6aba3f6d9a31066a0391 b/workspace/assets/skins/f7/f7272f332df28b842231fbee7f9722ee7d5b5269a92a6aba3f6d9a31066a0391 new file mode 100644 index 00000000..e6c67049 Binary files /dev/null and b/workspace/assets/skins/f7/f7272f332df28b842231fbee7f9722ee7d5b5269a92a6aba3f6d9a31066a0391 differ diff --git a/workspace/assets/skins/f8/f876aeb6ab21646478b3de354cccac7bf1bcbf45eb2ccbb974d64d4af9a49eed b/workspace/assets/skins/f8/f876aeb6ab21646478b3de354cccac7bf1bcbf45eb2ccbb974d64d4af9a49eed new file mode 100644 index 00000000..4d585dff Binary files /dev/null and b/workspace/assets/skins/f8/f876aeb6ab21646478b3de354cccac7bf1bcbf45eb2ccbb974d64d4af9a49eed differ diff --git a/workspace/assets/skins/f9/f998a63cd706db5cb7538ebed377d404a75eb5e7821272b2af0c5fcbde0f5e34 b/workspace/assets/skins/f9/f998a63cd706db5cb7538ebed377d404a75eb5e7821272b2af0c5fcbde0f5e34 new file mode 100644 index 00000000..3f9adb23 Binary files /dev/null and b/workspace/assets/skins/f9/f998a63cd706db5cb7538ebed377d404a75eb5e7821272b2af0c5fcbde0f5e34 differ diff --git a/workspace/assets/skins/fb/fb9a3de9650d8d83dc8a146c37e30a86ad648153f6737038efbe5e8acf90a351 b/workspace/assets/skins/fb/fb9a3de9650d8d83dc8a146c37e30a86ad648153f6737038efbe5e8acf90a351 new file mode 100644 index 00000000..bc1ec342 Binary files /dev/null and b/workspace/assets/skins/fb/fb9a3de9650d8d83dc8a146c37e30a86ad648153f6737038efbe5e8acf90a351 differ diff --git a/workspace/assets/skins/fb/fbbf20e1af0383b70801d3507fde717a4fb60bf361e30d1d245b1e820e0a50f3 b/workspace/assets/skins/fb/fbbf20e1af0383b70801d3507fde717a4fb60bf361e30d1d245b1e820e0a50f3 new file mode 100644 index 00000000..5133a845 Binary files /dev/null and b/workspace/assets/skins/fb/fbbf20e1af0383b70801d3507fde717a4fb60bf361e30d1d245b1e820e0a50f3 differ diff --git a/workspace/assets/skins/fd/fd04c3bd8f110753ae094614b85256bd72b9cb6ad59369f76577feb67e0b01f1 b/workspace/assets/skins/fd/fd04c3bd8f110753ae094614b85256bd72b9cb6ad59369f76577feb67e0b01f1 new file mode 100644 index 00000000..e8b5de99 Binary files /dev/null and b/workspace/assets/skins/fd/fd04c3bd8f110753ae094614b85256bd72b9cb6ad59369f76577feb67e0b01f1 differ diff --git a/workspace/assets/skins/fd/fd166fcd59ef908814f3c845ba3c279b2a8622b95817bef16f6acf30af940ea7 b/workspace/assets/skins/fd/fd166fcd59ef908814f3c845ba3c279b2a8622b95817bef16f6acf30af940ea7 new file mode 100644 index 00000000..097b8f21 Binary files /dev/null and b/workspace/assets/skins/fd/fd166fcd59ef908814f3c845ba3c279b2a8622b95817bef16f6acf30af940ea7 differ diff --git a/workspace/assets/skins/fd/fde9a77252418046bb3a348c882709e013ae7e6560cd3c90880760ec340a991d b/workspace/assets/skins/fd/fde9a77252418046bb3a348c882709e013ae7e6560cd3c90880760ec340a991d new file mode 100644 index 00000000..c4fe6acc Binary files /dev/null and b/workspace/assets/skins/fd/fde9a77252418046bb3a348c882709e013ae7e6560cd3c90880760ec340a991d differ diff --git a/workspace/assets/skins/fe/fe61b00a6c095e4ea0dada44969bc81322a9f23b3d2fe11ad5bb0021e0f29c73 b/workspace/assets/skins/fe/fe61b00a6c095e4ea0dada44969bc81322a9f23b3d2fe11ad5bb0021e0f29c73 new file mode 100644 index 00000000..a5e81b5c Binary files /dev/null and b/workspace/assets/skins/fe/fe61b00a6c095e4ea0dada44969bc81322a9f23b3d2fe11ad5bb0021e0f29c73 differ diff --git a/workspace/crash-reports/crash-2023-06-08_17.27.31-client.txt b/workspace/crash-reports/crash-2023-06-08_17.27.31-client.txt index fe6e4d09..9fb3a9b5 100644 --- a/workspace/crash-reports/crash-2023-06-08_17.27.31-client.txt +++ b/workspace/crash-reports/crash-2023-06-08_17.27.31-client.txt @@ -7,8 +7,8 @@ Description: Rendering screen java.lang.NullPointerException: Rendering screen at rip.athena.client.utils.font.impl.athena.FontRenderer.requiresInternationalFont(FontRenderer.java:285) at rip.athena.client.utils.font.impl.athena.FontRenderer.width(FontRenderer.java:247) - at rip.athena.client.gui.clickgui.components.themes.SimpleGradientButton.getStringWidth(SimpleGradientButton.java:91) - at rip.athena.client.gui.clickgui.components.themes.SimpleGradientButton.onRender(SimpleGradientButton.java:74) + at rip.athena.client.gui.clickgui.components.themes.accent.SimpleGradientButton.getStringWidth(SimpleGradientButton.java:91) + at rip.athena.client.gui.clickgui.components.themes.accent.SimpleGradientButton.onRender(SimpleGradientButton.java:74) at rip.athena.client.gui.clickgui.components.mods.ModScrollPane.onRender(ModScrollPane.java:195) at rip.athena.client.gui.framework.Menu.onRender(Menu.java:88) at rip.athena.client.gui.framework.MinecraftMenuImpl.drawScreen(MinecraftMenuImpl.java:56) @@ -27,8 +27,8 @@ A detailed walkthrough of the error, its code path and all known details is as f Stacktrace: at rip.athena.client.utils.font.impl.athena.FontRenderer.requiresInternationalFont(FontRenderer.java:285) at rip.athena.client.utils.font.impl.athena.FontRenderer.width(FontRenderer.java:247) - at rip.athena.client.gui.clickgui.components.themes.SimpleGradientButton.getStringWidth(SimpleGradientButton.java:91) - at rip.athena.client.gui.clickgui.components.themes.SimpleGradientButton.onRender(SimpleGradientButton.java:74) + at rip.athena.client.gui.clickgui.components.themes.accent.SimpleGradientButton.getStringWidth(SimpleGradientButton.java:91) + at rip.athena.client.gui.clickgui.components.themes.accent.SimpleGradientButton.onRender(SimpleGradientButton.java:74) at rip.athena.client.gui.clickgui.components.mods.ModScrollPane.onRender(ModScrollPane.java:195) at rip.athena.client.gui.framework.Menu.onRender(Menu.java:88) at rip.athena.client.gui.framework.MinecraftMenuImpl.drawScreen(MinecraftMenuImpl.java:56) diff --git a/workspace/crash-reports/crash-2023-06-08_17.35.41-client.txt b/workspace/crash-reports/crash-2023-06-08_17.35.41-client.txt index d86aba3e..b23d616e 100644 --- a/workspace/crash-reports/crash-2023-06-08_17.35.41-client.txt +++ b/workspace/crash-reports/crash-2023-06-08_17.35.41-client.txt @@ -7,8 +7,8 @@ Description: Rendering screen java.lang.NullPointerException: Rendering screen at rip.athena.client.utils.font.impl.athena.FontRenderer.requiresInternationalFont(FontRenderer.java:285) at rip.athena.client.utils.font.impl.athena.FontRenderer.width(FontRenderer.java:247) - at rip.athena.client.gui.clickgui.components.themes.SimpleGradientButton.getStringWidth(SimpleGradientButton.java:91) - at rip.athena.client.gui.clickgui.components.themes.SimpleGradientButton.onRender(SimpleGradientButton.java:74) + at rip.athena.client.gui.clickgui.components.themes.accent.SimpleGradientButton.getStringWidth(SimpleGradientButton.java:91) + at rip.athena.client.gui.clickgui.components.themes.accent.SimpleGradientButton.onRender(SimpleGradientButton.java:74) at rip.athena.client.gui.clickgui.components.mods.ModScrollPane.onRender(ModScrollPane.java:195) at rip.athena.client.gui.framework.Menu.onRender(Menu.java:88) at rip.athena.client.gui.framework.MinecraftMenuImpl.drawScreen(MinecraftMenuImpl.java:56) @@ -27,8 +27,8 @@ A detailed walkthrough of the error, its code path and all known details is as f Stacktrace: at rip.athena.client.utils.font.impl.athena.FontRenderer.requiresInternationalFont(FontRenderer.java:285) at rip.athena.client.utils.font.impl.athena.FontRenderer.width(FontRenderer.java:247) - at rip.athena.client.gui.clickgui.components.themes.SimpleGradientButton.getStringWidth(SimpleGradientButton.java:91) - at rip.athena.client.gui.clickgui.components.themes.SimpleGradientButton.onRender(SimpleGradientButton.java:74) + at rip.athena.client.gui.clickgui.components.themes.accent.SimpleGradientButton.getStringWidth(SimpleGradientButton.java:91) + at rip.athena.client.gui.clickgui.components.themes.accent.SimpleGradientButton.onRender(SimpleGradientButton.java:74) at rip.athena.client.gui.clickgui.components.mods.ModScrollPane.onRender(ModScrollPane.java:195) at rip.athena.client.gui.framework.Menu.onRender(Menu.java:88) at rip.athena.client.gui.framework.MinecraftMenuImpl.drawScreen(MinecraftMenuImpl.java:56) diff --git a/workspace/crash-reports/crash-2023-06-09_19.49.27-client.txt b/workspace/crash-reports/crash-2023-06-09_19.49.27-client.txt new file mode 100644 index 00000000..589b6db9 --- /dev/null +++ b/workspace/crash-reports/crash-2023-06-09_19.49.27-client.txt @@ -0,0 +1,98 @@ +---- Minecraft Crash Report ---- +// Who set us up the TNT? + +Time: 6/9/23 7:49 PM +Description: Rendering screen + +java.lang.NullPointerException: Rendering screen + at rip.athena.client.gui.clickgui.components.themes.primary.PrimaryGradientButton.onRender(PrimaryGradientButton.java:68) + at rip.athena.client.gui.clickgui.components.mods.ModScrollPane.onRender(ModScrollPane.java:196) + at rip.athena.client.gui.framework.Menu.onRender(Menu.java:88) + at rip.athena.client.gui.framework.MinecraftMenuImpl.drawScreen(MinecraftMenuImpl.java:56) + at rip.athena.client.gui.clickgui.IngameMenu.drawScreen(IngameMenu.java:155) + at net.minecraft.client.renderer.EntityRenderer.func_181560_a(EntityRenderer.java:1442) + at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1152) + at net.minecraft.client.Minecraft.run(Minecraft.java:431) + at net.minecraft.client.main.Main.main(Main.java:113) + at Start.main(Start.java:11) + + +A detailed walkthrough of the error, its code path and all known details is as follows: +--------------------------------------------------------------------------------------- + +-- Head -- +Stacktrace: + at rip.athena.client.gui.clickgui.components.themes.primary.PrimaryGradientButton.onRender(PrimaryGradientButton.java:68) + at rip.athena.client.gui.clickgui.components.mods.ModScrollPane.onRender(ModScrollPane.java:196) + at rip.athena.client.gui.framework.Menu.onRender(Menu.java:88) + at rip.athena.client.gui.framework.MinecraftMenuImpl.drawScreen(MinecraftMenuImpl.java:56) + at rip.athena.client.gui.clickgui.IngameMenu.drawScreen(IngameMenu.java:155) + +-- Screen render details -- +Details: + Screen name: rip.athena.client.gui.clickgui.IngameMenu + Mouse location: Scaled: (285, 312). Absolute: (570, 384) + Screen size: Scaled: (960, 505). Absolute: (1920, 1009). Scale factor of 2 + +-- Affected level -- +Details: + Level name: MpServer + All players: 1 total; [EntityPlayerSP['Player434'/23, l='MpServer', x=6.18, y=69.00, z=1059.32]] + Chunk stats: MultiplayerChunkCache: 259, 259 + Level seed: 0 + Level generator: ID 02 - largeBiomes, ver 0. Features enabled: false + Level generator options: + Level spawn location: 5.00,64.00,557.00 - World: (5,64,557), Chunk: (at 5,4,13 in 0,34; contains blocks 0,0,544 to 15,255,559), Region: (0,1; contains chunks 0,32 to 31,63, blocks 0,0,512 to 511,255,1023) + Level time: 288061 game time, 288061 day time + Level dimension: 0 + Level storage version: 0x00000 - Unknown? + Level weather: Rain time: 0 (now: false), thunder time: 0 (now: false) + Level game mode: Game mode: creative (ID 1). Hardcore: false. Cheats: false + Forced entities: 2 total; [EntityBat['Bat'/24, l='MpServer', x=7.22, y=39.10, z=1061.50], EntityPlayerSP['Player434'/23, l='MpServer', x=6.18, y=69.00, z=1059.32]] + Retry entities: 0 total; [] + Server brand: vanilla + Server type: Integrated singleplayer server +Stacktrace: + at net.minecraft.client.multiplayer.WorldClient.addWorldInfoToCrashReport(WorldClient.java:401) + at net.minecraft.client.Minecraft.addGraphicsAndWorldToCrashReport(Minecraft.java:2796) + at net.minecraft.client.Minecraft.run(Minecraft.java:452) + at net.minecraft.client.main.Main.main(Main.java:113) + at Start.main(Start.java:11) + +-- System Details -- +Details: + Minecraft Version: 1.8.8 + Operating System: Windows 10 (amd64) version 10.0 + CPU: 12x AMD Ryzen 5 5600X 6-Core Processor + Java Version: 1.8.0_202, Oracle Corporation + Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation + Memory: 176488464 bytes (168 MB) / 928514048 bytes (885 MB) up to 3801088000 bytes (3625 MB) + JVM Flags: 0 total; + IntCache: cache: 0, tcache: 0, allocated: 13, tallocated: 99 + Launched Version: mcp + LWJGL: 2.9.4 + OpenGL: NVIDIA GeForce RTX 2080 SUPER/PCIe/SSE2 GL version 4.6.0 NVIDIA 532.03, NVIDIA Corporation + GL Caps: Using GL 1.3 multitexturing. +Using GL 1.3 texture combiners. +Using framebuffer objects because OpenGL 3.0 is supported and separate blending is supported. +Shaders are available because OpenGL 2.1 is supported. +VBOs are available because OpenGL 1.5 is supported. + + Using VBOs: Yes + Is Modded: Very likely; Jar signature invalidated + Type: Client (map_client.txt) + Resource Packs: ! Ā§bPotfast 5kay.zip + Current Language: English (US) + Profiler Position: N/A (disabled) + CPU: 12x AMD Ryzen 5 5600X 6-Core Processor + OptiFine Version: OptiFine_1.8.8_HD_U_H8 + Render Distance Chunks: 8 + Mipmaps: 4 + Anisotropic Filtering: 1 + Antialiasing: 0 + Multitexture: false + Shaders: null + OpenGlVersion: 4.6.0 NVIDIA 532.03 + OpenGlRenderer: NVIDIA GeForce RTX 2080 SUPER/PCIe/SSE2 + OpenGlVendor: NVIDIA Corporation + CpuCount: 12 \ No newline at end of file diff --git a/workspace/crash-reports/crash-2023-06-09_19.50.44-client.txt b/workspace/crash-reports/crash-2023-06-09_19.50.44-client.txt new file mode 100644 index 00000000..0bb49af8 --- /dev/null +++ b/workspace/crash-reports/crash-2023-06-09_19.50.44-client.txt @@ -0,0 +1,96 @@ +---- Minecraft Crash Report ---- +// This doesn't make any sense! + +Time: 6/9/23 7:50 PM +Description: Rendering screen + +java.lang.NullPointerException: Rendering screen + at rip.athena.client.gui.clickgui.components.mods.CategoryButton.onRender(CategoryButton.java:62) + at rip.athena.client.gui.framework.Menu.onRender(Menu.java:88) + at rip.athena.client.gui.framework.MinecraftMenuImpl.drawScreen(MinecraftMenuImpl.java:56) + at rip.athena.client.gui.clickgui.IngameMenu.drawScreen(IngameMenu.java:155) + at net.minecraft.client.renderer.EntityRenderer.func_181560_a(EntityRenderer.java:1442) + at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1152) + at net.minecraft.client.Minecraft.run(Minecraft.java:431) + at net.minecraft.client.main.Main.main(Main.java:113) + at Start.main(Start.java:11) + + +A detailed walkthrough of the error, its code path and all known details is as follows: +--------------------------------------------------------------------------------------- + +-- Head -- +Stacktrace: + at rip.athena.client.gui.clickgui.components.mods.CategoryButton.onRender(CategoryButton.java:62) + at rip.athena.client.gui.framework.Menu.onRender(Menu.java:88) + at rip.athena.client.gui.framework.MinecraftMenuImpl.drawScreen(MinecraftMenuImpl.java:56) + at rip.athena.client.gui.clickgui.IngameMenu.drawScreen(IngameMenu.java:155) + +-- Screen render details -- +Details: + Screen name: rip.athena.client.gui.clickgui.IngameMenu + Mouse location: Scaled: (531, 214). Absolute: (1063, 581) + Screen size: Scaled: (960, 505). Absolute: (1920, 1009). Scale factor of 2 + +-- Affected level -- +Details: + Level name: MpServer + All players: 1 total; [EntityPlayerSP['Player324'/23, l='MpServer', x=6.18, y=69.00, z=1059.32]] + Chunk stats: MultiplayerChunkCache: 259, 259 + Level seed: 0 + Level generator: ID 02 - largeBiomes, ver 0. Features enabled: false + Level generator options: + Level spawn location: 5.00,64.00,557.00 - World: (5,64,557), Chunk: (at 5,4,13 in 0,34; contains blocks 0,0,544 to 15,255,559), Region: (0,1; contains chunks 0,32 to 31,63, blocks 0,0,512 to 511,255,1023) + Level time: 288130 game time, 288130 day time + Level dimension: 0 + Level storage version: 0x00000 - Unknown? + Level weather: Rain time: 0 (now: false), thunder time: 0 (now: false) + Level game mode: Game mode: creative (ID 1). Hardcore: false. Cheats: false + Forced entities: 2 total; [EntityPlayerSP['Player324'/23, l='MpServer', x=6.18, y=69.00, z=1059.32], EntityBat['Bat'/24, l='MpServer', x=7.22, y=39.10, z=1061.50]] + Retry entities: 0 total; [] + Server brand: vanilla + Server type: Integrated singleplayer server +Stacktrace: + at net.minecraft.client.multiplayer.WorldClient.addWorldInfoToCrashReport(WorldClient.java:401) + at net.minecraft.client.Minecraft.addGraphicsAndWorldToCrashReport(Minecraft.java:2796) + at net.minecraft.client.Minecraft.run(Minecraft.java:452) + at net.minecraft.client.main.Main.main(Main.java:113) + at Start.main(Start.java:11) + +-- System Details -- +Details: + Minecraft Version: 1.8.8 + Operating System: Windows 10 (amd64) version 10.0 + CPU: 12x AMD Ryzen 5 5600X 6-Core Processor + Java Version: 1.8.0_202, Oracle Corporation + Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation + Memory: 509024272 bytes (485 MB) / 850919424 bytes (811 MB) up to 3801088000 bytes (3625 MB) + JVM Flags: 0 total; + IntCache: cache: 0, tcache: 0, allocated: 12, tallocated: 98 + Launched Version: mcp + LWJGL: 2.9.4 + OpenGL: NVIDIA GeForce RTX 2080 SUPER/PCIe/SSE2 GL version 4.6.0 NVIDIA 532.03, NVIDIA Corporation + GL Caps: Using GL 1.3 multitexturing. +Using GL 1.3 texture combiners. +Using framebuffer objects because OpenGL 3.0 is supported and separate blending is supported. +Shaders are available because OpenGL 2.1 is supported. +VBOs are available because OpenGL 1.5 is supported. + + Using VBOs: Yes + Is Modded: Very likely; Jar signature invalidated + Type: Client (map_client.txt) + Resource Packs: ! Ā§bPotfast 5kay.zip + Current Language: English (US) + Profiler Position: N/A (disabled) + CPU: 12x AMD Ryzen 5 5600X 6-Core Processor + OptiFine Version: OptiFine_1.8.8_HD_U_H8 + Render Distance Chunks: 8 + Mipmaps: 4 + Anisotropic Filtering: 1 + Antialiasing: 0 + Multitexture: false + Shaders: null + OpenGlVersion: 4.6.0 NVIDIA 532.03 + OpenGlRenderer: NVIDIA GeForce RTX 2080 SUPER/PCIe/SSE2 + OpenGlVendor: NVIDIA Corporation + CpuCount: 12 \ No newline at end of file diff --git a/workspace/crash-reports/crash-2023-06-09_22.19.16-client.txt b/workspace/crash-reports/crash-2023-06-09_22.19.16-client.txt new file mode 100644 index 00000000..49e4c0a1 --- /dev/null +++ b/workspace/crash-reports/crash-2023-06-09_22.19.16-client.txt @@ -0,0 +1,93 @@ +---- Minecraft Crash Report ---- +// Who set us up the TNT? + +Time: 6/9/23 10:19 PM +Description: Updating screen events + +java.lang.RuntimeException: java.io.IOException: Server returned HTTP response code: 401 for URL: https://api.minecraftservices.com/minecraft/profile/ + at rip.athena.client.gui.menu.altmanager.panels.LoginPanel.lambda$drawScreen$1(LoginPanel.java:157) + at rip.athena.client.gui.menu.altmanager.button.AltButton.mouseClicked(AltButton.java:66) + at rip.athena.client.gui.menu.altmanager.panels.LoginPanel.lambda$mouseClicked$3(LoginPanel.java:194) + at java.util.ArrayList.forEach(ArrayList.java:1257) + at rip.athena.client.gui.menu.altmanager.panels.LoginPanel.mouseClicked(LoginPanel.java:194) + at rip.athena.client.gui.menu.altmanager.GuiAltManager.lambda$mouseClicked$1(GuiAltManager.java:91) + at java.util.ArrayList.forEach(ArrayList.java:1257) + at rip.athena.client.gui.menu.altmanager.GuiAltManager.mouseClicked(GuiAltManager.java:91) + at net.minecraft.client.gui.GuiScreen.handleMouseInput(GuiScreen.java:601) + at net.minecraft.client.gui.GuiScreen.handleInput(GuiScreen.java:570) + at net.minecraft.client.Minecraft.runTick(Minecraft.java:1813) + at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1126) + at net.minecraft.client.Minecraft.run(Minecraft.java:431) + at net.minecraft.client.main.Main.main(Main.java:113) + at Start.main(Start.java:11) +Caused by: java.io.IOException: Server returned HTTP response code: 401 for URL: https://api.minecraftservices.com/minecraft/profile/ + at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1894) + at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1492) + at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:263) + at rip.athena.client.gui.menu.altmanager.panels.LoginPanel.lambda$drawScreen$1(LoginPanel.java:155) + ... 14 more + + +A detailed walkthrough of the error, its code path and all known details is as follows: +--------------------------------------------------------------------------------------- + +-- Head -- +Stacktrace: + at rip.athena.client.gui.menu.altmanager.panels.LoginPanel.lambda$drawScreen$1(LoginPanel.java:157) + at rip.athena.client.gui.menu.altmanager.button.AltButton.mouseClicked(AltButton.java:66) + at rip.athena.client.gui.menu.altmanager.panels.LoginPanel.lambda$mouseClicked$3(LoginPanel.java:194) + at java.util.ArrayList.forEach(ArrayList.java:1257) + at rip.athena.client.gui.menu.altmanager.panels.LoginPanel.mouseClicked(LoginPanel.java:194) + at rip.athena.client.gui.menu.altmanager.GuiAltManager.lambda$mouseClicked$1(GuiAltManager.java:91) + at java.util.ArrayList.forEach(ArrayList.java:1257) + at rip.athena.client.gui.menu.altmanager.GuiAltManager.mouseClicked(GuiAltManager.java:91) + at net.minecraft.client.gui.GuiScreen.handleMouseInput(GuiScreen.java:601) + at net.minecraft.client.gui.GuiScreen.handleInput(GuiScreen.java:570) + +-- Affected screen -- +Details: + Screen name: rip.athena.client.gui.menu.altmanager.GuiAltManager +Stacktrace: + at net.minecraft.client.Minecraft.runTick(Minecraft.java:1813) + at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1126) + at net.minecraft.client.Minecraft.run(Minecraft.java:431) + at net.minecraft.client.main.Main.main(Main.java:113) + at Start.main(Start.java:11) + +-- System Details -- +Details: + Minecraft Version: 1.8.8 + Operating System: Windows 10 (amd64) version 10.0 + CPU: 12x AMD Ryzen 5 5600X 6-Core Processor + Java Version: 1.8.0_202, Oracle Corporation + Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation + Memory: 301600912 bytes (287 MB) / 878182400 bytes (837 MB) up to 3801088000 bytes (3625 MB) + JVM Flags: 0 total; + IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0 + Launched Version: mcp + LWJGL: 2.9.4 + OpenGL: NVIDIA GeForce RTX 2080 SUPER/PCIe/SSE2 GL version 4.6.0 NVIDIA 532.03, NVIDIA Corporation + GL Caps: Using GL 1.3 multitexturing. +Using GL 1.3 texture combiners. +Using framebuffer objects because OpenGL 3.0 is supported and separate blending is supported. +Shaders are available because OpenGL 2.1 is supported. +VBOs are available because OpenGL 1.5 is supported. + + Using VBOs: Yes + Is Modded: Very likely; Jar signature invalidated + Type: Client (map_client.txt) + Resource Packs: ! Ā§bPotfast 5kay.zip + Current Language: English (US) + Profiler Position: N/A (disabled) + CPU: 12x AMD Ryzen 5 5600X 6-Core Processor + OptiFine Version: OptiFine_1.8.8_HD_U_H8 + Render Distance Chunks: 8 + Mipmaps: 4 + Anisotropic Filtering: 1 + Antialiasing: 0 + Multitexture: false + Shaders: null + OpenGlVersion: 4.6.0 NVIDIA 532.03 + OpenGlRenderer: NVIDIA GeForce RTX 2080 SUPER/PCIe/SSE2 + OpenGlVendor: NVIDIA Corporation + CpuCount: 12 \ No newline at end of file diff --git a/workspace/crash-reports/crash-2023-06-09_23.33.48-client.txt b/workspace/crash-reports/crash-2023-06-09_23.33.48-client.txt new file mode 100644 index 00000000..4ab2477e --- /dev/null +++ b/workspace/crash-reports/crash-2023-06-09_23.33.48-client.txt @@ -0,0 +1,98 @@ +---- Minecraft Crash Report ---- +// My bad. + +Time: 6/9/23 11:33 PM +Description: Rendering screen + +java.lang.NullPointerException: Rendering screen + at rip.athena.client.gui.clickgui.components.mods.ModTextbox.onRender(ModTextbox.java:149) + at rip.athena.client.gui.clickgui.components.mods.ModScrollPane.onRender(ModScrollPane.java:196) + at rip.athena.client.gui.framework.Menu.onRender(Menu.java:88) + at rip.athena.client.gui.framework.MinecraftMenuImpl.drawScreen(MinecraftMenuImpl.java:56) + at rip.athena.client.gui.clickgui.IngameMenu.drawScreen(IngameMenu.java:155) + at net.minecraft.client.renderer.EntityRenderer.func_181560_a(EntityRenderer.java:1442) + at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1152) + at net.minecraft.client.Minecraft.run(Minecraft.java:431) + at net.minecraft.client.main.Main.main(Main.java:113) + at Start.main(Start.java:11) + + +A detailed walkthrough of the error, its code path and all known details is as follows: +--------------------------------------------------------------------------------------- + +-- Head -- +Stacktrace: + at rip.athena.client.gui.clickgui.components.mods.ModTextbox.onRender(ModTextbox.java:149) + at rip.athena.client.gui.clickgui.components.mods.ModScrollPane.onRender(ModScrollPane.java:196) + at rip.athena.client.gui.framework.Menu.onRender(Menu.java:88) + at rip.athena.client.gui.framework.MinecraftMenuImpl.drawScreen(MinecraftMenuImpl.java:56) + at rip.athena.client.gui.clickgui.IngameMenu.drawScreen(IngameMenu.java:155) + +-- Screen render details -- +Details: + Screen name: rip.athena.client.gui.clickgui.IngameMenu + Mouse location: Scaled: (658, 321). Absolute: (1317, 366) + Screen size: Scaled: (960, 505). Absolute: (1920, 1009). Scale factor of 2 + +-- Affected level -- +Details: + Level name: MpServer + All players: 1 total; [EntityPlayerSP['Player766'/39, l='MpServer', x=-86.13, y=65.00, z=996.77]] + Chunk stats: MultiplayerChunkCache: 267, 267 + Level seed: 0 + Level generator: ID 02 - largeBiomes, ver 0. Features enabled: false + Level generator options: + Level spawn location: 5.00,64.00,557.00 - World: (5,64,557), Chunk: (at 5,4,13 in 0,34; contains blocks 0,0,544 to 15,255,559), Region: (0,1; contains chunks 0,32 to 31,63, blocks 0,0,512 to 511,255,1023) + Level time: 410547 game time, 410547 day time + Level dimension: 0 + Level storage version: 0x00000 - Unknown? + Level weather: Rain time: 0 (now: false), thunder time: 0 (now: false) + Level game mode: Game mode: creative (ID 1). Hardcore: false. Cheats: false + Forced entities: 23 total; [EntityVillager['Villager'/32, l='MpServer', x=-144.72, y=69.00, z=1066.13], EntityVillager['Villager'/33, l='MpServer', x=-149.50, y=68.00, z=1066.13], EntityBat['Bat'/65, l='MpServer', x=-85.50, y=24.97, z=926.81], EntityVillager['Villager'/34, l='MpServer', x=-158.72, y=66.00, z=1045.59], EntityBat['Bat'/66, l='MpServer', x=-85.66, y=24.19, z=924.53], EntityVillager['Villager'/35, l='MpServer', x=-151.66, y=68.00, z=1049.78], EntityVillager['Villager'/36, l='MpServer', x=-159.91, y=66.07, z=1042.47], EntityVillager['Villager'/37, l='MpServer', x=-143.29, y=69.00, z=1065.80], EntityPlayerSP['Player766'/39, l='MpServer', x=-86.13, y=65.00, z=996.77], EntityVillager['Villager'/38, l='MpServer', x=-138.53, y=68.00, z=1072.28], EntityBat['Bat'/199, l='MpServer', x=-118.25, y=53.84, z=1064.41], EntityBat['Bat'/72, l='MpServer', x=-55.25, y=52.10, z=1013.72], EntityVillager['Villager'/23, l='MpServer', x=-118.53, y=69.00, z=1056.88], EntityVillager['Villager'/55, l='MpServer', x=-162.57, y=66.50, z=1036.34], EntityVillager['Villager'/24, l='MpServer', x=-118.34, y=69.00, z=1056.00], EntityVillager['Villager'/25, l='MpServer', x=-147.50, y=67.00, z=1021.28], EntityBat['Bat'/217, l='MpServer', x=-100.81, y=21.50, z=1076.97], EntityVillager['Villager'/26, l='MpServer', x=-150.09, y=66.00, z=1028.47], EntityVillager['Villager'/27, l='MpServer', x=-146.34, y=68.00, z=1040.56], EntityVillager['Villager'/28, l='MpServer', x=-158.59, y=67.00, z=1033.06], EntityVillager['Villager'/29, l='MpServer', x=-158.72, y=67.00, z=1027.47], EntityVillager['Villager'/30, l='MpServer', x=-155.84, y=68.00, z=1057.19], EntityVillager['Villager'/31, l='MpServer', x=-156.50, y=68.00, z=1064.50]] + Retry entities: 0 total; [] + Server brand: vanilla + Server type: Integrated singleplayer server +Stacktrace: + at net.minecraft.client.multiplayer.WorldClient.addWorldInfoToCrashReport(WorldClient.java:401) + at net.minecraft.client.Minecraft.addGraphicsAndWorldToCrashReport(Minecraft.java:2796) + at net.minecraft.client.Minecraft.run(Minecraft.java:452) + at net.minecraft.client.main.Main.main(Main.java:113) + at Start.main(Start.java:11) + +-- System Details -- +Details: + Minecraft Version: 1.8.8 + Operating System: Windows 10 (amd64) version 10.0 + CPU: 12x AMD Ryzen 5 5600X 6-Core Processor + Java Version: 1.8.0_202, Oracle Corporation + Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation + Memory: 894574240 bytes (853 MB) / 1224736768 bytes (1168 MB) up to 3801088000 bytes (3625 MB) + JVM Flags: 0 total; + IntCache: cache: 0, tcache: 0, allocated: 13, tallocated: 99 + Launched Version: mcp + LWJGL: 2.9.4 + OpenGL: NVIDIA GeForce RTX 2080 SUPER/PCIe/SSE2 GL version 4.6.0 NVIDIA 532.03, NVIDIA Corporation + GL Caps: Using GL 1.3 multitexturing. +Using GL 1.3 texture combiners. +Using framebuffer objects because OpenGL 3.0 is supported and separate blending is supported. +Shaders are available because OpenGL 2.1 is supported. +VBOs are available because OpenGL 1.5 is supported. + + Using VBOs: Yes + Is Modded: Very likely; Jar signature invalidated + Type: Client (map_client.txt) + Resource Packs: ! Ā§bPotfast 5kay.zip + Current Language: English (US) + Profiler Position: N/A (disabled) + CPU: 12x AMD Ryzen 5 5600X 6-Core Processor + OptiFine Version: OptiFine_1.8.8_HD_U_H8 + Render Distance Chunks: 8 + Mipmaps: 4 + Anisotropic Filtering: 1 + Antialiasing: 0 + Multitexture: false + Shaders: null + OpenGlVersion: 4.6.0 NVIDIA 532.03 + OpenGlRenderer: NVIDIA GeForce RTX 2080 SUPER/PCIe/SSE2 + OpenGlVendor: NVIDIA Corporation + CpuCount: 12 \ No newline at end of file diff --git a/workspace/crash-reports/crash-2023-06-10_12.29.17-client.txt b/workspace/crash-reports/crash-2023-06-10_12.29.17-client.txt new file mode 100644 index 00000000..b028d474 --- /dev/null +++ b/workspace/crash-reports/crash-2023-06-10_12.29.17-client.txt @@ -0,0 +1,106 @@ +---- Minecraft Crash Report ---- +// You're mean. + +Time: 6/10/23 12:29 PM +Description: Rendering screen + +java.lang.IllegalArgumentException: Invalid UUID string: 74e897386c9e4f5983efd365849e6049 + at java.util.UUID.fromString(UUID.java:194) + at rip.athena.client.modules.impl.other.AimTrainer.createBot(AimTrainer.java:32) + at rip.athena.client.modules.impl.other.AimTrainer.onEnable(AimTrainer.java:103) + at rip.athena.client.modules.Module.setEnabled(Module.java:96) + at rip.athena.client.gui.clickgui.components.mods.ModuleBox.passesThrough(ModuleBox.java:129) + at rip.athena.client.gui.clickgui.components.mods.ModScrollPane.onRender(ModScrollPane.java:154) + at rip.athena.client.gui.framework.Menu.onRender(Menu.java:88) + at rip.athena.client.gui.framework.MinecraftMenuImpl.drawScreen(MinecraftMenuImpl.java:56) + at rip.athena.client.gui.clickgui.IngameMenu.drawScreen(IngameMenu.java:155) + at net.minecraft.client.renderer.EntityRenderer.func_181560_a(EntityRenderer.java:1442) + at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1152) + at net.minecraft.client.Minecraft.run(Minecraft.java:431) + at net.minecraft.client.main.Main.main(Main.java:113) + at Start.main(Start.java:11) + + +A detailed walkthrough of the error, its code path and all known details is as follows: +--------------------------------------------------------------------------------------- + +-- Head -- +Stacktrace: + at java.util.UUID.fromString(UUID.java:194) + at rip.athena.client.modules.impl.other.AimTrainer.createBot(AimTrainer.java:32) + at rip.athena.client.modules.impl.other.AimTrainer.onEnable(AimTrainer.java:103) + at rip.athena.client.modules.Module.setEnabled(Module.java:96) + at rip.athena.client.gui.clickgui.components.mods.ModuleBox.passesThrough(ModuleBox.java:129) + at rip.athena.client.gui.clickgui.components.mods.ModScrollPane.onRender(ModScrollPane.java:154) + at rip.athena.client.gui.framework.Menu.onRender(Menu.java:88) + at rip.athena.client.gui.framework.MinecraftMenuImpl.drawScreen(MinecraftMenuImpl.java:56) + at rip.athena.client.gui.clickgui.IngameMenu.drawScreen(IngameMenu.java:155) + +-- Screen render details -- +Details: + Screen name: rip.athena.client.gui.clickgui.IngameMenu + Mouse location: Scaled: (431, 263). Absolute: (863, 482) + Screen size: Scaled: (960, 505). Absolute: (1920, 1009). Scale factor of 2 + +-- Affected level -- +Details: + Level name: MpServer + All players: 1 total; [EntityPlayerSP['Player604'/34, l='MpServer', x=-162.40, y=71.00, z=1010.99]] + Chunk stats: MultiplayerChunkCache: 270, 270 + Level seed: 0 + Level generator: ID 02 - largeBiomes, ver 0. Features enabled: false + Level generator options: + Level spawn location: 5.00,64.00,557.00 - World: (5,64,557), Chunk: (at 5,4,13 in 0,34; contains blocks 0,0,544 to 15,255,559), Region: (0,1; contains chunks 0,32 to 31,63, blocks 0,0,512 to 511,255,1023) + Level time: 433036 game time, 433036 day time + Level dimension: 0 + Level storage version: 0x00000 - Unknown? + Level weather: Rain time: 0 (now: false), thunder time: 0 (now: false) + Level game mode: Game mode: creative (ID 1). Hardcore: false. Cheats: false + Forced entities: 65 total; [EntityBat['Bat'/527, l='MpServer', x=-163.35, y=33.49, z=1001.21], EntityVillager['Villager'/18, l='MpServer', x=-150.56, y=67.00, z=1033.22], EntityVillager['Villager'/19, l='MpServer', x=-152.72, y=67.00, z=1032.38], EntityZombie['Zombie'/20, l='MpServer', x=-155.56, y=25.00, z=1008.13], EntityItem['item.item.arrow'/21, l='MpServer', x=-132.16, y=66.00, z=1010.88], EntityItem['item.item.bone'/22, l='MpServer', x=-130.44, y=66.00, z=1009.97], EntityVillager['Villager'/23, l='MpServer', x=-148.44, y=68.00, z=1041.84], EntityVillager['Villager'/24, l='MpServer', x=-151.66, y=68.00, z=1049.78], EntityVillager['Villager'/25, l='MpServer', x=-149.50, y=68.00, z=1040.84], EntityVillager['Villager'/26, l='MpServer', x=-155.28, y=68.00, z=1049.72], EntityVillager['Villager'/27, l='MpServer', x=-156.50, y=68.00, z=1064.50], EntityVillager['Villager'/28, l='MpServer', x=-144.72, y=69.00, z=1066.28], EntityVillager['Villager'/29, l='MpServer', x=-145.19, y=68.00, z=1063.50], EntityVillager['Villager'/30, l='MpServer', x=-138.53, y=68.00, z=1072.28], EntityVillager['Villager'/31, l='MpServer', x=-135.09, y=68.00, z=1072.66], EntityVillager['Villager'/32, l='MpServer', x=-148.72, y=67.13, z=1075.53], EntitySkeleton['Skeleton'/35, l='MpServer', x=-154.50, y=27.00, z=1000.50], EntityEnderman['Enderman'/36, l='MpServer', x=-145.50, y=27.00, z=998.50], EntityEnderman['Enderman'/37, l='MpServer', x=-149.50, y=27.00, z=998.50], EntityWitch['Witch'/38, l='MpServer', x=-170.50, y=24.00, z=1005.91], EntityBat['Bat'/678, l='MpServer', x=-222.34, y=55.09, z=1051.31], EntityCreeper['Creeper'/39, l='MpServer', x=-158.72, y=25.00, z=1003.88], EntityBat['Bat'/679, l='MpServer', x=-223.25, y=55.56, z=1053.50], EntityBat['Bat'/40, l='MpServer', x=-147.45, y=27.34, z=987.73], EntityCreeper['Creeper'/552, l='MpServer', x=-152.50, y=29.00, z=1019.50], EntityBat['Bat'/680, l='MpServer', x=-221.25, y=55.09, z=1050.53], EntityCreeper['Creeper'/297, l='MpServer', x=-82.50, y=38.00, z=1030.50], EntityCreeper['Creeper'/298, l='MpServer', x=-90.50, y=26.00, z=931.50], EntityCreeper['Creeper'/554, l='MpServer', x=-187.50, y=36.00, z=976.50], EntityCreeper['Creeper'/299, l='MpServer', x=-91.50, y=26.00, z=932.50], EntityCreeper['Creeper'/555, l='MpServer', x=-181.50, y=36.00, z=983.50], EntitySkeleton['Skeleton'/53, l='MpServer', x=-227.50, y=45.00, z=936.50], EntitySkeleton['Skeleton'/64, l='MpServer', x=-210.47, y=35.00, z=1086.16], EntityBat['Bat'/65, l='MpServer', x=-206.13, y=42.13, z=1076.75], EntitySquid['Squid'/76, l='MpServer', x=-201.91, y=61.53, z=1009.59], EntityBat['Bat'/77, l='MpServer', x=-194.59, y=37.09, z=1064.16], EntitySkeleton['Skeleton'/589, l='MpServer', x=-112.50, y=20.00, z=974.50], EntityBat['Bat'/79, l='MpServer', x=-202.16, y=32.09, z=1071.75], EntityBat['Bat'/80, l='MpServer', x=-201.22, y=32.41, z=1075.78], EntityZombie['Zombie'/593, l='MpServer', x=-201.50, y=42.00, z=1078.50], EntitySquid['Squid'/82, l='MpServer', x=-176.86, y=62.47, z=1009.70], EntityZombie['Zombie'/594, l='MpServer', x=-200.63, y=42.76, z=1079.62], EntitySquid['Squid'/83, l='MpServer', x=-195.50, y=60.91, z=1012.00], EntityZombie['Zombie'/84, l='MpServer', x=-170.59, y=17.00, z=1020.09], EntitySpider['Spider'/85, l='MpServer', x=-171.50, y=35.00, z=989.50], EntityCreeper['Creeper'/597, l='MpServer', x=-203.50, y=42.00, z=1075.50], EntitySkeleton['Skeleton'/86, l='MpServer', x=-168.94, y=21.00, z=996.50], EntitySpider['Spider'/87, l='MpServer', x=-163.84, y=35.00, z=993.00], EntityVillager['Villager'/88, l='MpServer', x=-147.47, y=67.00, z=1024.75], EntityVillager['Villager'/89, l='MpServer', x=-171.28, y=67.00, z=1039.50], EntityVillager['Villager'/90, l='MpServer', x=-171.56, y=67.00, z=1040.34], EntityItem['item.item.bread'/91, l='MpServer', x=-172.34, y=67.00, z=1042.66], EntityCreeper['Creeper'/219, l='MpServer', x=-127.53, y=51.00, z=1065.66], EntityBat['Bat'/94, l='MpServer', x=-150.59, y=29.10, z=975.63], EntityBat['Bat'/95, l='MpServer', x=-139.26, y=25.13, z=987.11], EntityVillager['Villager'/96, l='MpServer', x=-138.78, y=66.00, z=1036.25], EntityVillager['Villager'/97, l='MpServer', x=-122.47, y=68.00, z=1045.69], EntitySkeleton['Skeleton'/98, l='MpServer', x=-101.50, y=34.00, z=950.50], EntityBat['Bat'/100, l='MpServer', x=-85.47, y=34.53, z=1033.97], EntitySkeleton['Skeleton'/485, l='MpServer', x=-167.47, y=60.00, z=1051.31], EntityCreeper['Creeper'/486, l='MpServer', x=-168.50, y=60.00, z=1050.50], EntityCreeper['Creeper'/487, l='MpServer', x=-169.77, y=60.00, z=1051.35], EntityCreeper['Creeper'/488, l='MpServer', x=-169.02, y=60.00, z=1052.33], EntityPlayerSP['Player604'/34, l='MpServer', x=-162.40, y=71.00, z=1010.99], EntitySkeleton['Skeleton'/367, l='MpServer', x=-232.50, y=26.00, z=965.50]] + Retry entities: 0 total; [] + Server brand: vanilla + Server type: Integrated singleplayer server +Stacktrace: + at net.minecraft.client.multiplayer.WorldClient.addWorldInfoToCrashReport(WorldClient.java:401) + at net.minecraft.client.Minecraft.addGraphicsAndWorldToCrashReport(Minecraft.java:2796) + at net.minecraft.client.Minecraft.run(Minecraft.java:452) + at net.minecraft.client.main.Main.main(Main.java:113) + at Start.main(Start.java:11) + +-- System Details -- +Details: + Minecraft Version: 1.8.8 + Operating System: Windows 10 (amd64) version 10.0 + CPU: 12x AMD Ryzen 5 5600X 6-Core Processor + Java Version: 1.8.0_202, Oracle Corporation + Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation + Memory: 843575936 bytes (804 MB) / 1391460352 bytes (1327 MB) up to 3801088000 bytes (3625 MB) + JVM Flags: 0 total; + IntCache: cache: 0, tcache: 0, allocated: 13, tallocated: 99 + Launched Version: mcp + LWJGL: 2.9.4 + OpenGL: NVIDIA GeForce RTX 2080 SUPER/PCIe/SSE2 GL version 4.6.0 NVIDIA 532.03, NVIDIA Corporation + GL Caps: Using GL 1.3 multitexturing. +Using GL 1.3 texture combiners. +Using framebuffer objects because OpenGL 3.0 is supported and separate blending is supported. +Shaders are available because OpenGL 2.1 is supported. +VBOs are available because OpenGL 1.5 is supported. + + Using VBOs: Yes + Is Modded: Very likely; Jar signature invalidated + Type: Client (map_client.txt) + Resource Packs: ! Ā§bPotfast 5kay.zip + Current Language: English (US) + Profiler Position: N/A (disabled) + CPU: 12x AMD Ryzen 5 5600X 6-Core Processor + OptiFine Version: OptiFine_1.8.8_HD_U_H8 + Render Distance Chunks: 8 + Mipmaps: 4 + Anisotropic Filtering: 1 + Antialiasing: 0 + Multitexture: false + Shaders: null + OpenGlVersion: 4.6.0 NVIDIA 532.03 + OpenGlRenderer: NVIDIA GeForce RTX 2080 SUPER/PCIe/SSE2 + OpenGlVendor: NVIDIA Corporation + CpuCount: 12 \ No newline at end of file diff --git a/workspace/crash-reports/crash-2023-06-10_12.29.35-client.txt b/workspace/crash-reports/crash-2023-06-10_12.29.35-client.txt new file mode 100644 index 00000000..457697f8 --- /dev/null +++ b/workspace/crash-reports/crash-2023-06-10_12.29.35-client.txt @@ -0,0 +1,73 @@ +---- Minecraft Crash Report ---- +// Surprise! Haha. Well, this is awkward. + +Time: 6/10/23 12:29 PM +Description: Initializing game + +java.lang.NullPointerException: Initializing game + at rip.athena.client.modules.impl.other.AimTrainer.createBot(AimTrainer.java:32) + at rip.athena.client.modules.impl.other.AimTrainer.onEnable(AimTrainer.java:103) + at rip.athena.client.modules.Module.setEnabled(Module.java:96) + at rip.athena.client.config.save.Config.load(Config.java:106) + at rip.athena.client.config.save.Config.load(Config.java:64) + at rip.athena.client.config.save.ConfigManager.postInit(ConfigManager.java:52) + at rip.athena.client.Athena.initClient(Athena.java:98) + at net.minecraft.client.Minecraft.startGame(Minecraft.java:490) + at net.minecraft.client.Minecraft.run(Minecraft.java:411) + at net.minecraft.client.main.Main.main(Main.java:113) + at Start.main(Start.java:11) + + +A detailed walkthrough of the error, its code path and all known details is as follows: +--------------------------------------------------------------------------------------- + +-- Head -- +Stacktrace: + at rip.athena.client.modules.impl.other.AimTrainer.createBot(AimTrainer.java:32) + at rip.athena.client.modules.impl.other.AimTrainer.onEnable(AimTrainer.java:103) + at rip.athena.client.modules.Module.setEnabled(Module.java:96) + at rip.athena.client.config.save.Config.load(Config.java:106) + at rip.athena.client.config.save.Config.load(Config.java:64) + at rip.athena.client.config.save.ConfigManager.postInit(ConfigManager.java:52) + at rip.athena.client.Athena.initClient(Athena.java:98) + at net.minecraft.client.Minecraft.startGame(Minecraft.java:490) + +-- Initialization -- +Details: +Stacktrace: + at net.minecraft.client.Minecraft.run(Minecraft.java:411) + at net.minecraft.client.main.Main.main(Main.java:113) + at Start.main(Start.java:11) + +-- System Details -- +Details: + Minecraft Version: 1.8.8 + Operating System: Windows 10 (amd64) version 10.0 + CPU: + Java Version: 1.8.0_202, Oracle Corporation + Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation + Memory: 441315528 bytes (420 MB) / 499122176 bytes (476 MB) up to 3801088000 bytes (3625 MB) + JVM Flags: 0 total; + IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0 + Launched Version: mcp + LWJGL: 2.9.4 + OpenGL: ~~ERROR~~ RuntimeException: No OpenGL context found in the current thread. + GL Caps: + Using VBOs: Yes + Is Modded: Very likely; Jar signature invalidated + Type: Client (map_client.txt) + Resource Packs: ! Ā§bPotfast 5kay.zip + Current Language: ~~ERROR~~ NullPointerException: null + Profiler Position: N/A (disabled) + CPU: + OptiFine Version: OptiFine_1.8.8_HD_U_H8 + Render Distance Chunks: 8 + Mipmaps: 4 + Anisotropic Filtering: 1 + Antialiasing: 0 + Multitexture: false + Shaders: null + OpenGlVersion: null + OpenGlRenderer: null + OpenGlVendor: null + CpuCount: 12 \ No newline at end of file diff --git a/workspace/crash-reports/crash-2023-06-10_12.29.48-client.txt b/workspace/crash-reports/crash-2023-06-10_12.29.48-client.txt new file mode 100644 index 00000000..3cdb6dd8 --- /dev/null +++ b/workspace/crash-reports/crash-2023-06-10_12.29.48-client.txt @@ -0,0 +1,73 @@ +---- Minecraft Crash Report ---- +// You should try our sister game, Minceraft! + +Time: 6/10/23 12:29 PM +Description: Initializing game + +java.lang.NullPointerException: Initializing game + at rip.athena.client.modules.impl.other.AimTrainer.createBot(AimTrainer.java:32) + at rip.athena.client.modules.impl.other.AimTrainer.onEnable(AimTrainer.java:103) + at rip.athena.client.modules.Module.setEnabled(Module.java:96) + at rip.athena.client.config.save.Config.load(Config.java:106) + at rip.athena.client.config.save.Config.load(Config.java:64) + at rip.athena.client.config.save.ConfigManager.postInit(ConfigManager.java:52) + at rip.athena.client.Athena.initClient(Athena.java:98) + at net.minecraft.client.Minecraft.startGame(Minecraft.java:490) + at net.minecraft.client.Minecraft.run(Minecraft.java:411) + at net.minecraft.client.main.Main.main(Main.java:113) + at Start.main(Start.java:11) + + +A detailed walkthrough of the error, its code path and all known details is as follows: +--------------------------------------------------------------------------------------- + +-- Head -- +Stacktrace: + at rip.athena.client.modules.impl.other.AimTrainer.createBot(AimTrainer.java:32) + at rip.athena.client.modules.impl.other.AimTrainer.onEnable(AimTrainer.java:103) + at rip.athena.client.modules.Module.setEnabled(Module.java:96) + at rip.athena.client.config.save.Config.load(Config.java:106) + at rip.athena.client.config.save.Config.load(Config.java:64) + at rip.athena.client.config.save.ConfigManager.postInit(ConfigManager.java:52) + at rip.athena.client.Athena.initClient(Athena.java:98) + at net.minecraft.client.Minecraft.startGame(Minecraft.java:490) + +-- Initialization -- +Details: +Stacktrace: + at net.minecraft.client.Minecraft.run(Minecraft.java:411) + at net.minecraft.client.main.Main.main(Main.java:113) + at Start.main(Start.java:11) + +-- System Details -- +Details: + Minecraft Version: 1.8.8 + Operating System: Windows 10 (amd64) version 10.0 + CPU: + Java Version: 1.8.0_202, Oracle Corporation + Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation + Memory: 421691864 bytes (402 MB) / 480247808 bytes (458 MB) up to 3801088000 bytes (3625 MB) + JVM Flags: 0 total; + IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0 + Launched Version: mcp + LWJGL: 2.9.4 + OpenGL: ~~ERROR~~ RuntimeException: No OpenGL context found in the current thread. + GL Caps: + Using VBOs: Yes + Is Modded: Very likely; Jar signature invalidated + Type: Client (map_client.txt) + Resource Packs: ! Ā§bPotfast 5kay.zip + Current Language: ~~ERROR~~ NullPointerException: null + Profiler Position: N/A (disabled) + CPU: + OptiFine Version: OptiFine_1.8.8_HD_U_H8 + Render Distance Chunks: 8 + Mipmaps: 4 + Anisotropic Filtering: 1 + Antialiasing: 0 + Multitexture: false + Shaders: null + OpenGlVersion: null + OpenGlRenderer: null + OpenGlVendor: null + CpuCount: 12 \ No newline at end of file diff --git a/workspace/crash-reports/crash-2023-06-10_12.30.30-client.txt b/workspace/crash-reports/crash-2023-06-10_12.30.30-client.txt new file mode 100644 index 00000000..c624caf8 --- /dev/null +++ b/workspace/crash-reports/crash-2023-06-10_12.30.30-client.txt @@ -0,0 +1,73 @@ +---- Minecraft Crash Report ---- +// Shall we play a game? + +Time: 6/10/23 12:30 PM +Description: Initializing game + +java.lang.NullPointerException: Initializing game + at rip.athena.client.modules.impl.other.AimTrainer.createBot(AimTrainer.java:32) + at rip.athena.client.modules.impl.other.AimTrainer.onEnable(AimTrainer.java:103) + at rip.athena.client.modules.Module.setEnabled(Module.java:96) + at rip.athena.client.config.save.Config.load(Config.java:106) + at rip.athena.client.config.save.Config.load(Config.java:64) + at rip.athena.client.config.save.ConfigManager.postInit(ConfigManager.java:52) + at rip.athena.client.Athena.initClient(Athena.java:98) + at net.minecraft.client.Minecraft.startGame(Minecraft.java:490) + at net.minecraft.client.Minecraft.run(Minecraft.java:411) + at net.minecraft.client.main.Main.main(Main.java:113) + at Start.main(Start.java:11) + + +A detailed walkthrough of the error, its code path and all known details is as follows: +--------------------------------------------------------------------------------------- + +-- Head -- +Stacktrace: + at rip.athena.client.modules.impl.other.AimTrainer.createBot(AimTrainer.java:32) + at rip.athena.client.modules.impl.other.AimTrainer.onEnable(AimTrainer.java:103) + at rip.athena.client.modules.Module.setEnabled(Module.java:96) + at rip.athena.client.config.save.Config.load(Config.java:106) + at rip.athena.client.config.save.Config.load(Config.java:64) + at rip.athena.client.config.save.ConfigManager.postInit(ConfigManager.java:52) + at rip.athena.client.Athena.initClient(Athena.java:98) + at net.minecraft.client.Minecraft.startGame(Minecraft.java:490) + +-- Initialization -- +Details: +Stacktrace: + at net.minecraft.client.Minecraft.run(Minecraft.java:411) + at net.minecraft.client.main.Main.main(Main.java:113) + at Start.main(Start.java:11) + +-- System Details -- +Details: + Minecraft Version: 1.8.8 + Operating System: Windows 10 (amd64) version 10.0 + CPU: + Java Version: 1.8.0_202, Oracle Corporation + Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation + Memory: 440689240 bytes (420 MB) / 498597888 bytes (475 MB) up to 3801088000 bytes (3625 MB) + JVM Flags: 0 total; + IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0 + Launched Version: mcp + LWJGL: 2.9.4 + OpenGL: ~~ERROR~~ RuntimeException: No OpenGL context found in the current thread. + GL Caps: + Using VBOs: Yes + Is Modded: Very likely; Jar signature invalidated + Type: Client (map_client.txt) + Resource Packs: ! Ā§bPotfast 5kay.zip + Current Language: ~~ERROR~~ NullPointerException: null + Profiler Position: N/A (disabled) + CPU: + OptiFine Version: OptiFine_1.8.8_HD_U_H8 + Render Distance Chunks: 8 + Mipmaps: 4 + Anisotropic Filtering: 1 + Antialiasing: 0 + Multitexture: false + Shaders: null + OpenGlVersion: null + OpenGlRenderer: null + OpenGlVendor: null + CpuCount: 12 \ No newline at end of file diff --git a/workspace/crash-reports/crash-2023-06-10_12.31.29-client.txt b/workspace/crash-reports/crash-2023-06-10_12.31.29-client.txt new file mode 100644 index 00000000..97f9eed4 --- /dev/null +++ b/workspace/crash-reports/crash-2023-06-10_12.31.29-client.txt @@ -0,0 +1,73 @@ +---- Minecraft Crash Report ---- +// Don't be sad, have a hug! <3 + +Time: 6/10/23 12:31 PM +Description: Initializing game + +java.lang.NullPointerException: Initializing game + at rip.athena.client.modules.impl.other.AimTrainer.createBot(AimTrainer.java:32) + at rip.athena.client.modules.impl.other.AimTrainer.onEnable(AimTrainer.java:103) + at rip.athena.client.modules.Module.setEnabled(Module.java:96) + at rip.athena.client.config.save.Config.load(Config.java:106) + at rip.athena.client.config.save.Config.load(Config.java:64) + at rip.athena.client.config.save.ConfigManager.postInit(ConfigManager.java:52) + at rip.athena.client.Athena.initClient(Athena.java:101) + at net.minecraft.client.Minecraft.startGame(Minecraft.java:490) + at net.minecraft.client.Minecraft.run(Minecraft.java:411) + at net.minecraft.client.main.Main.main(Main.java:113) + at Start.main(Start.java:11) + + +A detailed walkthrough of the error, its code path and all known details is as follows: +--------------------------------------------------------------------------------------- + +-- Head -- +Stacktrace: + at rip.athena.client.modules.impl.other.AimTrainer.createBot(AimTrainer.java:32) + at rip.athena.client.modules.impl.other.AimTrainer.onEnable(AimTrainer.java:103) + at rip.athena.client.modules.Module.setEnabled(Module.java:96) + at rip.athena.client.config.save.Config.load(Config.java:106) + at rip.athena.client.config.save.Config.load(Config.java:64) + at rip.athena.client.config.save.ConfigManager.postInit(ConfigManager.java:52) + at rip.athena.client.Athena.initClient(Athena.java:101) + at net.minecraft.client.Minecraft.startGame(Minecraft.java:490) + +-- Initialization -- +Details: +Stacktrace: + at net.minecraft.client.Minecraft.run(Minecraft.java:411) + at net.minecraft.client.main.Main.main(Main.java:113) + at Start.main(Start.java:11) + +-- System Details -- +Details: + Minecraft Version: 1.8.8 + Operating System: Windows 10 (amd64) version 10.0 + CPU: + Java Version: 1.8.0_202, Oracle Corporation + Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation + Memory: 455673784 bytes (434 MB) / 511180800 bytes (487 MB) up to 3801088000 bytes (3625 MB) + JVM Flags: 0 total; + IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0 + Launched Version: mcp + LWJGL: 2.9.4 + OpenGL: ~~ERROR~~ RuntimeException: No OpenGL context found in the current thread. + GL Caps: + Using VBOs: Yes + Is Modded: Very likely; Jar signature invalidated + Type: Client (map_client.txt) + Resource Packs: ! Ā§bPotfast 5kay.zip + Current Language: ~~ERROR~~ NullPointerException: null + Profiler Position: N/A (disabled) + CPU: + OptiFine Version: OptiFine_1.8.8_HD_U_H8 + Render Distance Chunks: 8 + Mipmaps: 4 + Anisotropic Filtering: 1 + Antialiasing: 0 + Multitexture: false + Shaders: null + OpenGlVersion: null + OpenGlRenderer: null + OpenGlVendor: null + CpuCount: 12 \ No newline at end of file diff --git a/workspace/crash-reports/crash-2023-06-10_13.58.06-client.txt b/workspace/crash-reports/crash-2023-06-10_13.58.06-client.txt new file mode 100644 index 00000000..a3ce6d9e --- /dev/null +++ b/workspace/crash-reports/crash-2023-06-10_13.58.06-client.txt @@ -0,0 +1,81 @@ +---- Minecraft Crash Report ---- +// Why did you do that? + +Time: 6/10/23 1:58 PM +Description: Initializing game + +java.lang.NullPointerException: Initializing game + at net.minecraft.client.Minecraft.isUnicode(Minecraft.java:792) + at net.minecraft.client.gui.ScaledResolution.(ScaledResolution.java:19) + at rip.athena.client.gui.hud.HUDElement.setX(HUDElement.java:57) + at rip.athena.client.modules.impl.render.MemoryUsage.(MemoryUsage.java:59) + at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) + at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.lang.reflect.Constructor.newInstance(Constructor.java:423) + at java.lang.Class.newInstance(Class.java:442) + at rip.athena.client.modules.ModuleManager.(ModuleManager.java:32) + at rip.athena.client.Athena.initClient(Athena.java:90) + at net.minecraft.client.Minecraft.startGame(Minecraft.java:490) + at net.minecraft.client.Minecraft.run(Minecraft.java:411) + at net.minecraft.client.main.Main.main(Main.java:113) + at Start.main(Start.java:11) + + +A detailed walkthrough of the error, its code path and all known details is as follows: +--------------------------------------------------------------------------------------- + +-- Head -- +Stacktrace: + at net.minecraft.client.Minecraft.isUnicode(Minecraft.java:792) + at net.minecraft.client.gui.ScaledResolution.(ScaledResolution.java:19) + at rip.athena.client.gui.hud.HUDElement.setX(HUDElement.java:57) + at rip.athena.client.modules.impl.render.MemoryUsage.(MemoryUsage.java:59) + at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) + at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.lang.reflect.Constructor.newInstance(Constructor.java:423) + at java.lang.Class.newInstance(Class.java:442) + at rip.athena.client.modules.ModuleManager.(ModuleManager.java:32) + at rip.athena.client.Athena.initClient(Athena.java:90) + at net.minecraft.client.Minecraft.startGame(Minecraft.java:490) + +-- Initialization -- +Details: +Stacktrace: + at net.minecraft.client.Minecraft.run(Minecraft.java:411) + at net.minecraft.client.main.Main.main(Main.java:113) + at Start.main(Start.java:11) + +-- System Details -- +Details: + Minecraft Version: 1.8.8 + Operating System: Windows 10 (amd64) version 10.0 + CPU: + Java Version: 1.8.0_202, Oracle Corporation + Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation + Memory: 196344856 bytes (187 MB) / 287834112 bytes (274 MB) up to 3801088000 bytes (3625 MB) + JVM Flags: 0 total; + IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0 + Launched Version: mcp + LWJGL: 2.9.4 + OpenGL: ~~ERROR~~ RuntimeException: No OpenGL context found in the current thread. + GL Caps: + Using VBOs: Yes + Is Modded: Very likely; Jar signature invalidated + Type: Client (map_client.txt) + Resource Packs: ! Ā§bPotfast 5kay.zip + Current Language: ~~ERROR~~ NullPointerException: null + Profiler Position: N/A (disabled) + CPU: + OptiFine Version: OptiFine_1.8.8_HD_U_H8 + Render Distance Chunks: 8 + Mipmaps: 4 + Anisotropic Filtering: 1 + Antialiasing: 0 + Multitexture: false + Shaders: null + OpenGlVersion: null + OpenGlRenderer: null + OpenGlVendor: null + CpuCount: 12 \ No newline at end of file diff --git a/workspace/crash-reports/crash-2023-06-10_13.59.17-client.txt b/workspace/crash-reports/crash-2023-06-10_13.59.17-client.txt new file mode 100644 index 00000000..c129384b --- /dev/null +++ b/workspace/crash-reports/crash-2023-06-10_13.59.17-client.txt @@ -0,0 +1,81 @@ +---- Minecraft Crash Report ---- +// Shall we play a game? + +Time: 6/10/23 1:59 PM +Description: Initializing game + +java.lang.NullPointerException: Initializing game + at net.minecraft.client.Minecraft.isUnicode(Minecraft.java:792) + at net.minecraft.client.gui.ScaledResolution.(ScaledResolution.java:19) + at rip.athena.client.gui.hud.HUDElement.setX(HUDElement.java:63) + at rip.athena.client.modules.impl.render.MemoryUsage.(MemoryUsage.java:59) + at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) + at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.lang.reflect.Constructor.newInstance(Constructor.java:423) + at java.lang.Class.newInstance(Class.java:442) + at rip.athena.client.modules.ModuleManager.(ModuleManager.java:32) + at rip.athena.client.Athena.initClient(Athena.java:90) + at net.minecraft.client.Minecraft.startGame(Minecraft.java:490) + at net.minecraft.client.Minecraft.run(Minecraft.java:411) + at net.minecraft.client.main.Main.main(Main.java:113) + at Start.main(Start.java:11) + + +A detailed walkthrough of the error, its code path and all known details is as follows: +--------------------------------------------------------------------------------------- + +-- Head -- +Stacktrace: + at net.minecraft.client.Minecraft.isUnicode(Minecraft.java:792) + at net.minecraft.client.gui.ScaledResolution.(ScaledResolution.java:19) + at rip.athena.client.gui.hud.HUDElement.setX(HUDElement.java:63) + at rip.athena.client.modules.impl.render.MemoryUsage.(MemoryUsage.java:59) + at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) + at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.lang.reflect.Constructor.newInstance(Constructor.java:423) + at java.lang.Class.newInstance(Class.java:442) + at rip.athena.client.modules.ModuleManager.(ModuleManager.java:32) + at rip.athena.client.Athena.initClient(Athena.java:90) + at net.minecraft.client.Minecraft.startGame(Minecraft.java:490) + +-- Initialization -- +Details: +Stacktrace: + at net.minecraft.client.Minecraft.run(Minecraft.java:411) + at net.minecraft.client.main.Main.main(Main.java:113) + at Start.main(Start.java:11) + +-- System Details -- +Details: + Minecraft Version: 1.8.8 + Operating System: Windows 10 (amd64) version 10.0 + CPU: + Java Version: 1.8.0_202, Oracle Corporation + Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation + Memory: 188755328 bytes (180 MB) / 283115520 bytes (270 MB) up to 3801088000 bytes (3625 MB) + JVM Flags: 0 total; + IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0 + Launched Version: mcp + LWJGL: 2.9.4 + OpenGL: ~~ERROR~~ RuntimeException: No OpenGL context found in the current thread. + GL Caps: + Using VBOs: Yes + Is Modded: Very likely; Jar signature invalidated + Type: Client (map_client.txt) + Resource Packs: ! Ā§bPotfast 5kay.zip + Current Language: ~~ERROR~~ NullPointerException: null + Profiler Position: N/A (disabled) + CPU: + OptiFine Version: OptiFine_1.8.8_HD_U_H8 + Render Distance Chunks: 8 + Mipmaps: 4 + Anisotropic Filtering: 1 + Antialiasing: 0 + Multitexture: false + Shaders: null + OpenGlVersion: null + OpenGlRenderer: null + OpenGlVendor: null + CpuCount: 12 \ No newline at end of file diff --git a/workspace/crash-reports/crash-2023-06-10_14.00.17-client.txt b/workspace/crash-reports/crash-2023-06-10_14.00.17-client.txt new file mode 100644 index 00000000..e91327f1 --- /dev/null +++ b/workspace/crash-reports/crash-2023-06-10_14.00.17-client.txt @@ -0,0 +1,81 @@ +---- Minecraft Crash Report ---- +// My bad. + +Time: 6/10/23 2:00 PM +Description: Initializing game + +java.lang.NullPointerException: Initializing game + at net.minecraft.client.Minecraft.isUnicode(Minecraft.java:792) + at net.minecraft.client.gui.ScaledResolution.(ScaledResolution.java:19) + at rip.athena.client.gui.hud.HUDElement.setX(HUDElement.java:64) + at rip.athena.client.modules.impl.render.MemoryUsage.(MemoryUsage.java:59) + at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) + at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.lang.reflect.Constructor.newInstance(Constructor.java:423) + at java.lang.Class.newInstance(Class.java:442) + at rip.athena.client.modules.ModuleManager.(ModuleManager.java:32) + at rip.athena.client.Athena.initClient(Athena.java:90) + at net.minecraft.client.Minecraft.startGame(Minecraft.java:490) + at net.minecraft.client.Minecraft.run(Minecraft.java:411) + at net.minecraft.client.main.Main.main(Main.java:113) + at Start.main(Start.java:11) + + +A detailed walkthrough of the error, its code path and all known details is as follows: +--------------------------------------------------------------------------------------- + +-- Head -- +Stacktrace: + at net.minecraft.client.Minecraft.isUnicode(Minecraft.java:792) + at net.minecraft.client.gui.ScaledResolution.(ScaledResolution.java:19) + at rip.athena.client.gui.hud.HUDElement.setX(HUDElement.java:64) + at rip.athena.client.modules.impl.render.MemoryUsage.(MemoryUsage.java:59) + at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) + at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.lang.reflect.Constructor.newInstance(Constructor.java:423) + at java.lang.Class.newInstance(Class.java:442) + at rip.athena.client.modules.ModuleManager.(ModuleManager.java:32) + at rip.athena.client.Athena.initClient(Athena.java:90) + at net.minecraft.client.Minecraft.startGame(Minecraft.java:490) + +-- Initialization -- +Details: +Stacktrace: + at net.minecraft.client.Minecraft.run(Minecraft.java:411) + at net.minecraft.client.main.Main.main(Main.java:113) + at Start.main(Start.java:11) + +-- System Details -- +Details: + Minecraft Version: 1.8.8 + Operating System: Windows 10 (amd64) version 10.0 + CPU: + Java Version: 1.8.0_202, Oracle Corporation + Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation + Memory: 176506088 bytes (168 MB) / 282066944 bytes (269 MB) up to 3801088000 bytes (3625 MB) + JVM Flags: 0 total; + IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0 + Launched Version: mcp + LWJGL: 2.9.4 + OpenGL: ~~ERROR~~ RuntimeException: No OpenGL context found in the current thread. + GL Caps: + Using VBOs: Yes + Is Modded: Very likely; Jar signature invalidated + Type: Client (map_client.txt) + Resource Packs: ! Ā§bPotfast 5kay.zip + Current Language: ~~ERROR~~ NullPointerException: null + Profiler Position: N/A (disabled) + CPU: + OptiFine Version: OptiFine_1.8.8_HD_U_H8 + Render Distance Chunks: 8 + Mipmaps: 4 + Anisotropic Filtering: 1 + Antialiasing: 0 + Multitexture: false + Shaders: null + OpenGlVersion: null + OpenGlRenderer: null + OpenGlVendor: null + CpuCount: 12 \ No newline at end of file diff --git a/workspace/crash-reports/crash-2023-06-10_14.01.02-client.txt b/workspace/crash-reports/crash-2023-06-10_14.01.02-client.txt new file mode 100644 index 00000000..39ad1a87 --- /dev/null +++ b/workspace/crash-reports/crash-2023-06-10_14.01.02-client.txt @@ -0,0 +1,81 @@ +---- Minecraft Crash Report ---- +// Surprise! Haha. Well, this is awkward. + +Time: 6/10/23 2:01 PM +Description: Initializing game + +java.lang.NullPointerException: Initializing game + at net.minecraft.client.Minecraft.isUnicode(Minecraft.java:792) + at net.minecraft.client.gui.ScaledResolution.(ScaledResolution.java:19) + at rip.athena.client.gui.hud.HUDElement.setX(HUDElement.java:64) + at rip.athena.client.modules.impl.render.MemoryUsage.(MemoryUsage.java:59) + at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) + at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.lang.reflect.Constructor.newInstance(Constructor.java:423) + at java.lang.Class.newInstance(Class.java:442) + at rip.athena.client.modules.ModuleManager.(ModuleManager.java:32) + at rip.athena.client.Athena.initClient(Athena.java:90) + at net.minecraft.client.Minecraft.startGame(Minecraft.java:490) + at net.minecraft.client.Minecraft.run(Minecraft.java:411) + at net.minecraft.client.main.Main.main(Main.java:113) + at Start.main(Start.java:11) + + +A detailed walkthrough of the error, its code path and all known details is as follows: +--------------------------------------------------------------------------------------- + +-- Head -- +Stacktrace: + at net.minecraft.client.Minecraft.isUnicode(Minecraft.java:792) + at net.minecraft.client.gui.ScaledResolution.(ScaledResolution.java:19) + at rip.athena.client.gui.hud.HUDElement.setX(HUDElement.java:64) + at rip.athena.client.modules.impl.render.MemoryUsage.(MemoryUsage.java:59) + at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) + at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.lang.reflect.Constructor.newInstance(Constructor.java:423) + at java.lang.Class.newInstance(Class.java:442) + at rip.athena.client.modules.ModuleManager.(ModuleManager.java:32) + at rip.athena.client.Athena.initClient(Athena.java:90) + at net.minecraft.client.Minecraft.startGame(Minecraft.java:490) + +-- Initialization -- +Details: +Stacktrace: + at net.minecraft.client.Minecraft.run(Minecraft.java:411) + at net.minecraft.client.main.Main.main(Main.java:113) + at Start.main(Start.java:11) + +-- System Details -- +Details: + Minecraft Version: 1.8.8 + Operating System: Windows 10 (amd64) version 10.0 + CPU: + Java Version: 1.8.0_202, Oracle Corporation + Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation + Memory: 219024656 bytes (208 MB) / 297271296 bytes (283 MB) up to 3801088000 bytes (3625 MB) + JVM Flags: 0 total; + IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0 + Launched Version: mcp + LWJGL: 2.9.4 + OpenGL: ~~ERROR~~ RuntimeException: No OpenGL context found in the current thread. + GL Caps: + Using VBOs: Yes + Is Modded: Very likely; Jar signature invalidated + Type: Client (map_client.txt) + Resource Packs: ! Ā§bPotfast 5kay.zip + Current Language: ~~ERROR~~ NullPointerException: null + Profiler Position: N/A (disabled) + CPU: + OptiFine Version: OptiFine_1.8.8_HD_U_H8 + Render Distance Chunks: 8 + Mipmaps: 4 + Anisotropic Filtering: 1 + Antialiasing: 0 + Multitexture: false + Shaders: null + OpenGlVersion: null + OpenGlRenderer: null + OpenGlVendor: null + CpuCount: 12 \ No newline at end of file diff --git a/workspace/crash-reports/crash-2023-06-10_18.31.15-client.txt b/workspace/crash-reports/crash-2023-06-10_18.31.15-client.txt new file mode 100644 index 00000000..eeaecd48 --- /dev/null +++ b/workspace/crash-reports/crash-2023-06-10_18.31.15-client.txt @@ -0,0 +1,70 @@ +---- Minecraft Crash Report ---- +// You should try our sister game, Minceraft! + +Time: 6/10/23 6:31 PM +Description: Initializing game + +java.lang.NullPointerException: Initializing game + at rip.athena.client.gui.menu.AthenaMenu.initGui(AthenaMenu.java:187) + at net.minecraft.client.gui.GuiScreen.setWorldAndResolution(GuiScreen.java:550) + at net.minecraft.client.Minecraft.displayGuiScreen(Minecraft.java:1021) + at net.minecraft.client.Minecraft.startGame(Minecraft.java:584) + at net.minecraft.client.Minecraft.run(Minecraft.java:411) + at net.minecraft.client.main.Main.main(Main.java:113) + at Start.main(Start.java:11) + + +A detailed walkthrough of the error, its code path and all known details is as follows: +--------------------------------------------------------------------------------------- + +-- Head -- +Stacktrace: + at rip.athena.client.gui.menu.AthenaMenu.initGui(AthenaMenu.java:187) + at net.minecraft.client.gui.GuiScreen.setWorldAndResolution(GuiScreen.java:550) + at net.minecraft.client.Minecraft.displayGuiScreen(Minecraft.java:1021) + at net.minecraft.client.Minecraft.startGame(Minecraft.java:584) + +-- Initialization -- +Details: +Stacktrace: + at net.minecraft.client.Minecraft.run(Minecraft.java:411) + at net.minecraft.client.main.Main.main(Main.java:113) + at Start.main(Start.java:11) + +-- System Details -- +Details: + Minecraft Version: 1.8.8 + Operating System: Windows 10 (amd64) version 10.0 + CPU: 12x AMD Ryzen 5 5600X 6-Core Processor + Java Version: 1.8.0_202, Oracle Corporation + Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation + Memory: 343871880 bytes (327 MB) / 573571072 bytes (547 MB) up to 3801088000 bytes (3625 MB) + JVM Flags: 0 total; + IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0 + Launched Version: mcp + LWJGL: 2.9.4 + OpenGL: NVIDIA GeForce RTX 2080 SUPER/PCIe/SSE2 GL version 4.6.0 NVIDIA 532.03, NVIDIA Corporation + GL Caps: Using GL 1.3 multitexturing. +Using GL 1.3 texture combiners. +Using framebuffer objects because OpenGL 3.0 is supported and separate blending is supported. +Shaders are available because OpenGL 2.1 is supported. +VBOs are available because OpenGL 1.5 is supported. + + Using VBOs: Yes + Is Modded: Very likely; Jar signature invalidated + Type: Client (map_client.txt) + Resource Packs: ! Ā§bPotfast 5kay.zip + Current Language: English (US) + Profiler Position: N/A (disabled) + CPU: 12x AMD Ryzen 5 5600X 6-Core Processor + OptiFine Version: OptiFine_1.8.8_HD_U_H8 + Render Distance Chunks: 8 + Mipmaps: 4 + Anisotropic Filtering: 1 + Antialiasing: 0 + Multitexture: false + Shaders: null + OpenGlVersion: 4.6.0 NVIDIA 532.03 + OpenGlRenderer: NVIDIA GeForce RTX 2080 SUPER/PCIe/SSE2 + OpenGlVendor: NVIDIA Corporation + CpuCount: 12 \ No newline at end of file diff --git a/workspace/crash-reports/crash-2023-06-10_18.31.52-client.txt b/workspace/crash-reports/crash-2023-06-10_18.31.52-client.txt new file mode 100644 index 00000000..67cb767f --- /dev/null +++ b/workspace/crash-reports/crash-2023-06-10_18.31.52-client.txt @@ -0,0 +1,70 @@ +---- Minecraft Crash Report ---- +// Daisy, daisy... + +Time: 6/10/23 6:31 PM +Description: Initializing game + +java.lang.NullPointerException: Initializing game + at rip.athena.client.gui.menu.AthenaMenu.initGui(AthenaMenu.java:179) + at net.minecraft.client.gui.GuiScreen.setWorldAndResolution(GuiScreen.java:550) + at net.minecraft.client.Minecraft.displayGuiScreen(Minecraft.java:1021) + at net.minecraft.client.Minecraft.startGame(Minecraft.java:584) + at net.minecraft.client.Minecraft.run(Minecraft.java:411) + at net.minecraft.client.main.Main.main(Main.java:113) + at Start.main(Start.java:11) + + +A detailed walkthrough of the error, its code path and all known details is as follows: +--------------------------------------------------------------------------------------- + +-- Head -- +Stacktrace: + at rip.athena.client.gui.menu.AthenaMenu.initGui(AthenaMenu.java:179) + at net.minecraft.client.gui.GuiScreen.setWorldAndResolution(GuiScreen.java:550) + at net.minecraft.client.Minecraft.displayGuiScreen(Minecraft.java:1021) + at net.minecraft.client.Minecraft.startGame(Minecraft.java:584) + +-- Initialization -- +Details: +Stacktrace: + at net.minecraft.client.Minecraft.run(Minecraft.java:411) + at net.minecraft.client.main.Main.main(Main.java:113) + at Start.main(Start.java:11) + +-- System Details -- +Details: + Minecraft Version: 1.8.8 + Operating System: Windows 10 (amd64) version 10.0 + CPU: 12x AMD Ryzen 5 5600X 6-Core Processor + Java Version: 1.8.0_202, Oracle Corporation + Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation + Memory: 243639712 bytes (232 MB) / 555220992 bytes (529 MB) up to 3801088000 bytes (3625 MB) + JVM Flags: 0 total; + IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0 + Launched Version: mcp + LWJGL: 2.9.4 + OpenGL: NVIDIA GeForce RTX 2080 SUPER/PCIe/SSE2 GL version 4.6.0 NVIDIA 532.03, NVIDIA Corporation + GL Caps: Using GL 1.3 multitexturing. +Using GL 1.3 texture combiners. +Using framebuffer objects because OpenGL 3.0 is supported and separate blending is supported. +Shaders are available because OpenGL 2.1 is supported. +VBOs are available because OpenGL 1.5 is supported. + + Using VBOs: Yes + Is Modded: Very likely; Jar signature invalidated + Type: Client (map_client.txt) + Resource Packs: ! Ā§bPotfast 5kay.zip + Current Language: English (US) + Profiler Position: N/A (disabled) + CPU: 12x AMD Ryzen 5 5600X 6-Core Processor + OptiFine Version: OptiFine_1.8.8_HD_U_H8 + Render Distance Chunks: 8 + Mipmaps: 4 + Anisotropic Filtering: 1 + Antialiasing: 0 + Multitexture: false + Shaders: null + OpenGlVersion: 4.6.0 NVIDIA 532.03 + OpenGlRenderer: NVIDIA GeForce RTX 2080 SUPER/PCIe/SSE2 + OpenGlVendor: NVIDIA Corporation + CpuCount: 12 \ No newline at end of file diff --git a/workspace/crash-reports/crash-2023-06-10_18.41.13-client.txt b/workspace/crash-reports/crash-2023-06-10_18.41.13-client.txt new file mode 100644 index 00000000..14b38b9d --- /dev/null +++ b/workspace/crash-reports/crash-2023-06-10_18.41.13-client.txt @@ -0,0 +1,75 @@ +---- Minecraft Crash Report ---- +// Hi. I'm Minecraft, and I'm a crashaholic. + +Time: 6/10/23 6:41 PM +Description: Updating screen events + +java.lang.NullPointerException: Updating screen events + at rip.athena.client.account.AccountManager.save(AccountManager.java:49) + at rip.athena.client.gui.menu.altmanager.GuiAccountManager.keyTyped(GuiAccountManager.java:420) + at net.minecraft.client.gui.GuiScreen.handleKeyboardInput(GuiScreen.java:627) + at net.minecraft.client.gui.GuiScreen.handleInput(GuiScreen.java:578) + at net.minecraft.client.Minecraft.runTick(Minecraft.java:1814) + at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1127) + at net.minecraft.client.Minecraft.run(Minecraft.java:432) + at net.minecraft.client.main.Main.main(Main.java:113) + at Start.main(Start.java:11) + + +A detailed walkthrough of the error, its code path and all known details is as follows: +--------------------------------------------------------------------------------------- + +-- Head -- +Stacktrace: + at rip.athena.client.account.AccountManager.save(AccountManager.java:49) + at rip.athena.client.gui.menu.altmanager.GuiAccountManager.keyTyped(GuiAccountManager.java:420) + at net.minecraft.client.gui.GuiScreen.handleKeyboardInput(GuiScreen.java:627) + at net.minecraft.client.gui.GuiScreen.handleInput(GuiScreen.java:578) + +-- Affected screen -- +Details: + Screen name: rip.athena.client.gui.menu.altmanager.GuiAccountManager +Stacktrace: + at net.minecraft.client.Minecraft.runTick(Minecraft.java:1814) + at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1127) + at net.minecraft.client.Minecraft.run(Minecraft.java:432) + at net.minecraft.client.main.Main.main(Main.java:113) + at Start.main(Start.java:11) + +-- System Details -- +Details: + Minecraft Version: 1.8.8 + Operating System: Windows 10 (amd64) version 10.0 + CPU: 12x AMD Ryzen 5 5600X 6-Core Processor + Java Version: 1.8.0_202, Oracle Corporation + Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation + Memory: 187962056 bytes (179 MB) / 555745280 bytes (530 MB) up to 3801088000 bytes (3625 MB) + JVM Flags: 0 total; + IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0 + Launched Version: mcp + LWJGL: 2.9.4 + OpenGL: NVIDIA GeForce RTX 2080 SUPER/PCIe/SSE2 GL version 4.6.0 NVIDIA 532.03, NVIDIA Corporation + GL Caps: Using GL 1.3 multitexturing. +Using GL 1.3 texture combiners. +Using framebuffer objects because OpenGL 3.0 is supported and separate blending is supported. +Shaders are available because OpenGL 2.1 is supported. +VBOs are available because OpenGL 1.5 is supported. + + Using VBOs: Yes + Is Modded: Very likely; Jar signature invalidated + Type: Client (map_client.txt) + Resource Packs: ! Ā§bPotfast 5kay.zip + Current Language: English (US) + Profiler Position: N/A (disabled) + CPU: 12x AMD Ryzen 5 5600X 6-Core Processor + OptiFine Version: OptiFine_1.8.8_HD_U_H8 + Render Distance Chunks: 8 + Mipmaps: 4 + Anisotropic Filtering: 1 + Antialiasing: 0 + Multitexture: false + Shaders: null + OpenGlVersion: 4.6.0 NVIDIA 532.03 + OpenGlRenderer: NVIDIA GeForce RTX 2080 SUPER/PCIe/SSE2 + OpenGlVendor: NVIDIA Corporation + CpuCount: 12 \ No newline at end of file diff --git a/workspace/crash-reports/crash-2023-06-10_19.17.20-client.txt b/workspace/crash-reports/crash-2023-06-10_19.17.20-client.txt new file mode 100644 index 00000000..38f67330 --- /dev/null +++ b/workspace/crash-reports/crash-2023-06-10_19.17.20-client.txt @@ -0,0 +1,75 @@ +---- Minecraft Crash Report ---- +// Don't be sad, have a hug! <3 + +Time: 6/10/23 7:17 PM +Description: Rendering screen + +java.lang.NullPointerException: Rendering screen + at rip.athena.client.account.AccountManager.save(AccountManager.java:49) + at rip.athena.client.gui.menu.altmanager.panels.LoginPanel.drawScreen(LoginPanel.java:184) + at rip.athena.client.gui.menu.altmanager.GuiAltManager.drawScreen(GuiAltManager.java:80) + at net.minecraft.client.renderer.EntityRenderer.func_181560_a(EntityRenderer.java:1442) + at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1152) + at net.minecraft.client.Minecraft.run(Minecraft.java:431) + at net.minecraft.client.main.Main.main(Main.java:113) + at Start.main(Start.java:11) + + +A detailed walkthrough of the error, its code path and all known details is as follows: +--------------------------------------------------------------------------------------- + +-- Head -- +Stacktrace: + at rip.athena.client.account.AccountManager.save(AccountManager.java:49) + at rip.athena.client.gui.menu.altmanager.panels.LoginPanel.drawScreen(LoginPanel.java:184) + at rip.athena.client.gui.menu.altmanager.GuiAltManager.drawScreen(GuiAltManager.java:80) + +-- Screen render details -- +Details: + Screen name: rip.athena.client.gui.menu.altmanager.GuiAltManager + Mouse location: Scaled: (0, 239). Absolute: (0, 0) + Screen size: Scaled: (427, 240). Absolute: (854, 480). Scale factor of 2 +Stacktrace: + at net.minecraft.client.renderer.EntityRenderer.func_181560_a(EntityRenderer.java:1442) + at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1152) + at net.minecraft.client.Minecraft.run(Minecraft.java:431) + at net.minecraft.client.main.Main.main(Main.java:113) + at Start.main(Start.java:11) + +-- System Details -- +Details: + Minecraft Version: 1.8.8 + Operating System: Windows 10 (amd64) version 10.0 + CPU: 12x AMD Ryzen 5 5600X 6-Core Processor + Java Version: 1.8.0_202, Oracle Corporation + Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation + Memory: 247518856 bytes (236 MB) / 587726848 bytes (560 MB) up to 3801088000 bytes (3625 MB) + JVM Flags: 0 total; + IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0 + Launched Version: mcp + LWJGL: 2.9.4 + OpenGL: NVIDIA GeForce RTX 2080 SUPER/PCIe/SSE2 GL version 4.6.0 NVIDIA 532.03, NVIDIA Corporation + GL Caps: Using GL 1.3 multitexturing. +Using GL 1.3 texture combiners. +Using framebuffer objects because OpenGL 3.0 is supported and separate blending is supported. +Shaders are available because OpenGL 2.1 is supported. +VBOs are available because OpenGL 1.5 is supported. + + Using VBOs: Yes + Is Modded: Very likely; Jar signature invalidated + Type: Client (map_client.txt) + Resource Packs: ! Ā§bPotfast 5kay.zip + Current Language: English (US) + Profiler Position: N/A (disabled) + CPU: 12x AMD Ryzen 5 5600X 6-Core Processor + OptiFine Version: OptiFine_1.8.8_HD_U_H8 + Render Distance Chunks: 8 + Mipmaps: 4 + Anisotropic Filtering: 1 + Antialiasing: 0 + Multitexture: false + Shaders: null + OpenGlVersion: 4.6.0 NVIDIA 532.03 + OpenGlRenderer: NVIDIA GeForce RTX 2080 SUPER/PCIe/SSE2 + OpenGlVendor: NVIDIA Corporation + CpuCount: 12 \ No newline at end of file diff --git a/workspace/crash-reports/crash-2023-06-10_19.17.56-client.txt b/workspace/crash-reports/crash-2023-06-10_19.17.56-client.txt new file mode 100644 index 00000000..40c53f92 --- /dev/null +++ b/workspace/crash-reports/crash-2023-06-10_19.17.56-client.txt @@ -0,0 +1,75 @@ +---- Minecraft Crash Report ---- +// My bad. + +Time: 6/10/23 7:17 PM +Description: Rendering screen + +java.lang.NullPointerException: Rendering screen + at rip.athena.client.account.AccountManager.save(AccountManager.java:49) + at rip.athena.client.gui.menu.altmanager.panels.LoginPanel.drawScreen(LoginPanel.java:184) + at rip.athena.client.gui.menu.altmanager.GuiAltManager.drawScreen(GuiAltManager.java:80) + at net.minecraft.client.renderer.EntityRenderer.func_181560_a(EntityRenderer.java:1442) + at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1152) + at net.minecraft.client.Minecraft.run(Minecraft.java:431) + at net.minecraft.client.main.Main.main(Main.java:113) + at Start.main(Start.java:11) + + +A detailed walkthrough of the error, its code path and all known details is as follows: +--------------------------------------------------------------------------------------- + +-- Head -- +Stacktrace: + at rip.athena.client.account.AccountManager.save(AccountManager.java:49) + at rip.athena.client.gui.menu.altmanager.panels.LoginPanel.drawScreen(LoginPanel.java:184) + at rip.athena.client.gui.menu.altmanager.GuiAltManager.drawScreen(GuiAltManager.java:80) + +-- Screen render details -- +Details: + Screen name: rip.athena.client.gui.menu.altmanager.GuiAltManager + Mouse location: Scaled: (0, 239). Absolute: (0, 0) + Screen size: Scaled: (427, 240). Absolute: (854, 480). Scale factor of 2 +Stacktrace: + at net.minecraft.client.renderer.EntityRenderer.func_181560_a(EntityRenderer.java:1442) + at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1152) + at net.minecraft.client.Minecraft.run(Minecraft.java:431) + at net.minecraft.client.main.Main.main(Main.java:113) + at Start.main(Start.java:11) + +-- System Details -- +Details: + Minecraft Version: 1.8.8 + Operating System: Windows 10 (amd64) version 10.0 + CPU: 12x AMD Ryzen 5 5600X 6-Core Processor + Java Version: 1.8.0_202, Oracle Corporation + Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation + Memory: 224660560 bytes (214 MB) / 578813952 bytes (552 MB) up to 3801088000 bytes (3625 MB) + JVM Flags: 0 total; + IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0 + Launched Version: mcp + LWJGL: 2.9.4 + OpenGL: NVIDIA GeForce RTX 2080 SUPER/PCIe/SSE2 GL version 4.6.0 NVIDIA 532.03, NVIDIA Corporation + GL Caps: Using GL 1.3 multitexturing. +Using GL 1.3 texture combiners. +Using framebuffer objects because OpenGL 3.0 is supported and separate blending is supported. +Shaders are available because OpenGL 2.1 is supported. +VBOs are available because OpenGL 1.5 is supported. + + Using VBOs: Yes + Is Modded: Very likely; Jar signature invalidated + Type: Client (map_client.txt) + Resource Packs: ! Ā§bPotfast 5kay.zip + Current Language: English (US) + Profiler Position: N/A (disabled) + CPU: 12x AMD Ryzen 5 5600X 6-Core Processor + OptiFine Version: OptiFine_1.8.8_HD_U_H8 + Render Distance Chunks: 8 + Mipmaps: 4 + Anisotropic Filtering: 1 + Antialiasing: 0 + Multitexture: false + Shaders: null + OpenGlVersion: 4.6.0 NVIDIA 532.03 + OpenGlRenderer: NVIDIA GeForce RTX 2080 SUPER/PCIe/SSE2 + OpenGlVendor: NVIDIA Corporation + CpuCount: 12 \ No newline at end of file diff --git a/workspace/crash-reports/crash-2023-06-10_19.18.42-client.txt b/workspace/crash-reports/crash-2023-06-10_19.18.42-client.txt new file mode 100644 index 00000000..70279262 --- /dev/null +++ b/workspace/crash-reports/crash-2023-06-10_19.18.42-client.txt @@ -0,0 +1,81 @@ +---- Minecraft Crash Report ---- +// I bet Cylons wouldn't have this problem. + +Time: 6/10/23 7:18 PM +Description: Updating screen events + +java.lang.NullPointerException: Updating screen events + at rip.athena.client.account.AccountManager.save(AccountManager.java:49) + at rip.athena.client.gui.menu.altmanager.panels.LoginPanel.mouseClicked(LoginPanel.java:238) + at rip.athena.client.gui.menu.altmanager.GuiAltManager.lambda$mouseClicked$1(GuiAltManager.java:97) + at java.util.ArrayList.forEach(ArrayList.java:1257) + at rip.athena.client.gui.menu.altmanager.GuiAltManager.mouseClicked(GuiAltManager.java:97) + at net.minecraft.client.gui.GuiScreen.handleMouseInput(GuiScreen.java:601) + at net.minecraft.client.gui.GuiScreen.handleInput(GuiScreen.java:570) + at net.minecraft.client.Minecraft.runTick(Minecraft.java:1813) + at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1126) + at net.minecraft.client.Minecraft.run(Minecraft.java:431) + at net.minecraft.client.main.Main.main(Main.java:113) + at Start.main(Start.java:11) + + +A detailed walkthrough of the error, its code path and all known details is as follows: +--------------------------------------------------------------------------------------- + +-- Head -- +Stacktrace: + at rip.athena.client.account.AccountManager.save(AccountManager.java:49) + at rip.athena.client.gui.menu.altmanager.panels.LoginPanel.mouseClicked(LoginPanel.java:238) + at rip.athena.client.gui.menu.altmanager.GuiAltManager.lambda$mouseClicked$1(GuiAltManager.java:97) + at java.util.ArrayList.forEach(ArrayList.java:1257) + at rip.athena.client.gui.menu.altmanager.GuiAltManager.mouseClicked(GuiAltManager.java:97) + at net.minecraft.client.gui.GuiScreen.handleMouseInput(GuiScreen.java:601) + at net.minecraft.client.gui.GuiScreen.handleInput(GuiScreen.java:570) + +-- Affected screen -- +Details: + Screen name: rip.athena.client.gui.menu.altmanager.GuiAltManager +Stacktrace: + at net.minecraft.client.Minecraft.runTick(Minecraft.java:1813) + at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1126) + at net.minecraft.client.Minecraft.run(Minecraft.java:431) + at net.minecraft.client.main.Main.main(Main.java:113) + at Start.main(Start.java:11) + +-- System Details -- +Details: + Minecraft Version: 1.8.8 + Operating System: Windows 10 (amd64) version 10.0 + CPU: 12x AMD Ryzen 5 5600X 6-Core Processor + Java Version: 1.8.0_202, Oracle Corporation + Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation + Memory: 450490368 bytes (429 MB) / 562036736 bytes (536 MB) up to 3801088000 bytes (3625 MB) + JVM Flags: 0 total; + IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0 + Launched Version: mcp + LWJGL: 2.9.4 + OpenGL: NVIDIA GeForce RTX 2080 SUPER/PCIe/SSE2 GL version 4.6.0 NVIDIA 532.03, NVIDIA Corporation + GL Caps: Using GL 1.3 multitexturing. +Using GL 1.3 texture combiners. +Using framebuffer objects because OpenGL 3.0 is supported and separate blending is supported. +Shaders are available because OpenGL 2.1 is supported. +VBOs are available because OpenGL 1.5 is supported. + + Using VBOs: Yes + Is Modded: Very likely; Jar signature invalidated + Type: Client (map_client.txt) + Resource Packs: ! Ā§bPotfast 5kay.zip + Current Language: English (US) + Profiler Position: N/A (disabled) + CPU: 12x AMD Ryzen 5 5600X 6-Core Processor + OptiFine Version: OptiFine_1.8.8_HD_U_H8 + Render Distance Chunks: 8 + Mipmaps: 4 + Anisotropic Filtering: 1 + Antialiasing: 0 + Multitexture: false + Shaders: null + OpenGlVersion: 4.6.0 NVIDIA 532.03 + OpenGlRenderer: NVIDIA GeForce RTX 2080 SUPER/PCIe/SSE2 + OpenGlVendor: NVIDIA Corporation + CpuCount: 12 \ No newline at end of file diff --git a/workspace/crash-reports/crash-2023-06-10_19.20.32-client.txt b/workspace/crash-reports/crash-2023-06-10_19.20.32-client.txt new file mode 100644 index 00000000..32f053b9 --- /dev/null +++ b/workspace/crash-reports/crash-2023-06-10_19.20.32-client.txt @@ -0,0 +1,89 @@ +---- Minecraft Crash Report ---- +// This doesn't make any sense! + +Time: 6/10/23 7:20 PM +Description: Updating screen events + +java.lang.NullPointerException: Updating screen events + at rip.athena.client.account.AccountManager.save(AccountManager.java:49) + at rip.athena.client.gui.menu.altmanager.panels.LoginPanel.lambda$drawScreen$1(LoginPanel.java:126) + at rip.athena.client.gui.menu.altmanager.button.AltButton.mouseClicked(AltButton.java:66) + at rip.athena.client.gui.menu.altmanager.panels.LoginPanel.lambda$mouseClicked$3(LoginPanel.java:211) + at java.util.ArrayList.forEach(ArrayList.java:1257) + at rip.athena.client.gui.menu.altmanager.panels.LoginPanel.mouseClicked(LoginPanel.java:211) + at rip.athena.client.gui.menu.altmanager.GuiAltManager.lambda$mouseClicked$1(GuiAltManager.java:97) + at java.util.ArrayList.forEach(ArrayList.java:1257) + at rip.athena.client.gui.menu.altmanager.GuiAltManager.mouseClicked(GuiAltManager.java:97) + at net.minecraft.client.gui.GuiScreen.handleMouseInput(GuiScreen.java:601) + at net.minecraft.client.gui.GuiScreen.handleInput(GuiScreen.java:570) + at net.minecraft.client.Minecraft.runTick(Minecraft.java:1813) + at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1126) + at net.minecraft.client.Minecraft.run(Minecraft.java:431) + at net.minecraft.client.main.Main.main(Main.java:113) + at Start.main(Start.java:11) + + +A detailed walkthrough of the error, its code path and all known details is as follows: +--------------------------------------------------------------------------------------- + +-- Head -- +Stacktrace: + at rip.athena.client.account.AccountManager.save(AccountManager.java:49) + at rip.athena.client.gui.menu.altmanager.panels.LoginPanel.lambda$drawScreen$1(LoginPanel.java:126) + at rip.athena.client.gui.menu.altmanager.button.AltButton.mouseClicked(AltButton.java:66) + at rip.athena.client.gui.menu.altmanager.panels.LoginPanel.lambda$mouseClicked$3(LoginPanel.java:211) + at java.util.ArrayList.forEach(ArrayList.java:1257) + at rip.athena.client.gui.menu.altmanager.panels.LoginPanel.mouseClicked(LoginPanel.java:211) + at rip.athena.client.gui.menu.altmanager.GuiAltManager.lambda$mouseClicked$1(GuiAltManager.java:97) + at java.util.ArrayList.forEach(ArrayList.java:1257) + at rip.athena.client.gui.menu.altmanager.GuiAltManager.mouseClicked(GuiAltManager.java:97) + at net.minecraft.client.gui.GuiScreen.handleMouseInput(GuiScreen.java:601) + at net.minecraft.client.gui.GuiScreen.handleInput(GuiScreen.java:570) + +-- Affected screen -- +Details: + Screen name: rip.athena.client.gui.menu.altmanager.GuiAltManager +Stacktrace: + at net.minecraft.client.Minecraft.runTick(Minecraft.java:1813) + at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1126) + at net.minecraft.client.Minecraft.run(Minecraft.java:431) + at net.minecraft.client.main.Main.main(Main.java:113) + at Start.main(Start.java:11) + +-- System Details -- +Details: + Minecraft Version: 1.8.8 + Operating System: Windows 10 (amd64) version 10.0 + CPU: 12x AMD Ryzen 5 5600X 6-Core Processor + Java Version: 1.8.0_202, Oracle Corporation + Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation + Memory: 345618936 bytes (329 MB) / 540016640 bytes (515 MB) up to 3801088000 bytes (3625 MB) + JVM Flags: 0 total; + IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0 + Launched Version: mcp + LWJGL: 2.9.4 + OpenGL: NVIDIA GeForce RTX 2080 SUPER/PCIe/SSE2 GL version 4.6.0 NVIDIA 532.03, NVIDIA Corporation + GL Caps: Using GL 1.3 multitexturing. +Using GL 1.3 texture combiners. +Using framebuffer objects because OpenGL 3.0 is supported and separate blending is supported. +Shaders are available because OpenGL 2.1 is supported. +VBOs are available because OpenGL 1.5 is supported. + + Using VBOs: Yes + Is Modded: Very likely; Jar signature invalidated + Type: Client (map_client.txt) + Resource Packs: ! Ā§bPotfast 5kay.zip + Current Language: English (US) + Profiler Position: N/A (disabled) + CPU: 12x AMD Ryzen 5 5600X 6-Core Processor + OptiFine Version: OptiFine_1.8.8_HD_U_H8 + Render Distance Chunks: 8 + Mipmaps: 4 + Anisotropic Filtering: 1 + Antialiasing: 0 + Multitexture: false + Shaders: null + OpenGlVersion: 4.6.0 NVIDIA 532.03 + OpenGlRenderer: NVIDIA GeForce RTX 2080 SUPER/PCIe/SSE2 + OpenGlVendor: NVIDIA Corporation + CpuCount: 12 \ No newline at end of file diff --git a/workspace/crash-reports/crash-2023-06-10_21.05.34-client.txt b/workspace/crash-reports/crash-2023-06-10_21.05.34-client.txt new file mode 100644 index 00000000..d4936502 --- /dev/null +++ b/workspace/crash-reports/crash-2023-06-10_21.05.34-client.txt @@ -0,0 +1,73 @@ +---- Minecraft Crash Report ---- +// Uh... Did I do that? + +Time: 6/10/23 9:05 PM +Description: Rendering screen + +java.lang.IllegalArgumentException: Invalid UUID string: 74e897386c9e4f5983efd365849e6049 + at java.util.UUID.fromString(UUID.java:194) + at rip.athena.client.gui.menu.altmanager.GuiAccountManager.drawScreen(GuiAccountManager.java:157) + at net.minecraft.client.renderer.EntityRenderer.func_181560_a(EntityRenderer.java:1442) + at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1152) + at net.minecraft.client.Minecraft.run(Minecraft.java:431) + at net.minecraft.client.main.Main.main(Main.java:113) + at Start.main(Start.java:11) + + +A detailed walkthrough of the error, its code path and all known details is as follows: +--------------------------------------------------------------------------------------- + +-- Head -- +Stacktrace: + at java.util.UUID.fromString(UUID.java:194) + at rip.athena.client.gui.menu.altmanager.GuiAccountManager.drawScreen(GuiAccountManager.java:157) + +-- Screen render details -- +Details: + Screen name: rip.athena.client.gui.menu.altmanager.GuiAccountManager + Mouse location: Scaled: (379, 17). Absolute: (759, 445) + Screen size: Scaled: (427, 240). Absolute: (854, 480). Scale factor of 2 +Stacktrace: + at net.minecraft.client.renderer.EntityRenderer.func_181560_a(EntityRenderer.java:1442) + at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1152) + at net.minecraft.client.Minecraft.run(Minecraft.java:431) + at net.minecraft.client.main.Main.main(Main.java:113) + at Start.main(Start.java:11) + +-- System Details -- +Details: + Minecraft Version: 1.8.8 + Operating System: Windows 10 (amd64) version 10.0 + CPU: 12x AMD Ryzen 5 5600X 6-Core Processor + Java Version: 1.8.0_202, Oracle Corporation + Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation + Memory: 484855384 bytes (462 MB) / 910163968 bytes (868 MB) up to 3801088000 bytes (3625 MB) + JVM Flags: 0 total; + IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0 + Launched Version: mcp + LWJGL: 2.9.4 + OpenGL: NVIDIA GeForce RTX 2080 SUPER/PCIe/SSE2 GL version 4.6.0 NVIDIA 532.03, NVIDIA Corporation + GL Caps: Using GL 1.3 multitexturing. +Using GL 1.3 texture combiners. +Using framebuffer objects because OpenGL 3.0 is supported and separate blending is supported. +Shaders are available because OpenGL 2.1 is supported. +VBOs are available because OpenGL 1.5 is supported. + + Using VBOs: Yes + Is Modded: Very likely; Jar signature invalidated + Type: Client (map_client.txt) + Resource Packs: ! Ā§bPotfast 5kay.zip + Current Language: English (US) + Profiler Position: N/A (disabled) + CPU: 12x AMD Ryzen 5 5600X 6-Core Processor + OptiFine Version: OptiFine_1.8.8_HD_U_H8 + Render Distance Chunks: 8 + Mipmaps: 4 + Anisotropic Filtering: 1 + Antialiasing: 0 + Multitexture: false + Shaders: null + OpenGlVersion: 4.6.0 NVIDIA 532.03 + OpenGlRenderer: NVIDIA GeForce RTX 2080 SUPER/PCIe/SSE2 + OpenGlVendor: NVIDIA Corporation + CpuCount: 12 \ No newline at end of file diff --git a/workspace/crash-reports/crash-2023-06-10_21.09.17-client.txt b/workspace/crash-reports/crash-2023-06-10_21.09.17-client.txt new file mode 100644 index 00000000..e350b6c9 --- /dev/null +++ b/workspace/crash-reports/crash-2023-06-10_21.09.17-client.txt @@ -0,0 +1,73 @@ +---- Minecraft Crash Report ---- +// Don't do that. + +Time: 6/10/23 9:09 PM +Description: Rendering screen + +java.lang.IllegalArgumentException: Invalid UUID string: 74e897386c9e4f5983efd365849e6049 + at java.util.UUID.fromString(UUID.java:194) + at rip.athena.client.gui.menu.altmanager.GuiAccountManager.drawScreen(GuiAccountManager.java:154) + at net.minecraft.client.renderer.EntityRenderer.func_181560_a(EntityRenderer.java:1442) + at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1152) + at net.minecraft.client.Minecraft.run(Minecraft.java:431) + at net.minecraft.client.main.Main.main(Main.java:113) + at Start.main(Start.java:11) + + +A detailed walkthrough of the error, its code path and all known details is as follows: +--------------------------------------------------------------------------------------- + +-- Head -- +Stacktrace: + at java.util.UUID.fromString(UUID.java:194) + at rip.athena.client.gui.menu.altmanager.GuiAccountManager.drawScreen(GuiAccountManager.java:154) + +-- Screen render details -- +Details: + Screen name: rip.athena.client.gui.menu.altmanager.GuiAccountManager + Mouse location: Scaled: (382, 19). Absolute: (764, 441) + Screen size: Scaled: (427, 240). Absolute: (854, 480). Scale factor of 2 +Stacktrace: + at net.minecraft.client.renderer.EntityRenderer.func_181560_a(EntityRenderer.java:1442) + at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1152) + at net.minecraft.client.Minecraft.run(Minecraft.java:431) + at net.minecraft.client.main.Main.main(Main.java:113) + at Start.main(Start.java:11) + +-- System Details -- +Details: + Minecraft Version: 1.8.8 + Operating System: Windows 10 (amd64) version 10.0 + CPU: 12x AMD Ryzen 5 5600X 6-Core Processor + Java Version: 1.8.0_202, Oracle Corporation + Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation + Memory: 848548360 bytes (809 MB) / 973078528 bytes (928 MB) up to 3801088000 bytes (3625 MB) + JVM Flags: 0 total; + IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0 + Launched Version: mcp + LWJGL: 2.9.4 + OpenGL: NVIDIA GeForce RTX 2080 SUPER/PCIe/SSE2 GL version 4.6.0 NVIDIA 532.03, NVIDIA Corporation + GL Caps: Using GL 1.3 multitexturing. +Using GL 1.3 texture combiners. +Using framebuffer objects because OpenGL 3.0 is supported and separate blending is supported. +Shaders are available because OpenGL 2.1 is supported. +VBOs are available because OpenGL 1.5 is supported. + + Using VBOs: Yes + Is Modded: Very likely; Jar signature invalidated + Type: Client (map_client.txt) + Resource Packs: ! Ā§bPotfast 5kay.zip + Current Language: English (US) + Profiler Position: N/A (disabled) + CPU: 12x AMD Ryzen 5 5600X 6-Core Processor + OptiFine Version: OptiFine_1.8.8_HD_U_H8 + Render Distance Chunks: 8 + Mipmaps: 4 + Anisotropic Filtering: 1 + Antialiasing: 0 + Multitexture: false + Shaders: null + OpenGlVersion: 4.6.0 NVIDIA 532.03 + OpenGlRenderer: NVIDIA GeForce RTX 2080 SUPER/PCIe/SSE2 + OpenGlVendor: NVIDIA Corporation + CpuCount: 12 \ No newline at end of file diff --git a/workspace/crash-reports/crash-2023-06-10_21.15.42-client.txt b/workspace/crash-reports/crash-2023-06-10_21.15.42-client.txt new file mode 100644 index 00000000..536f0542 --- /dev/null +++ b/workspace/crash-reports/crash-2023-06-10_21.15.42-client.txt @@ -0,0 +1,77 @@ +---- Minecraft Crash Report ---- +// My bad. + +Time: 6/10/23 9:15 PM +Description: Updating screen events + +java.util.ConcurrentModificationException + at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:909) + at java.util.ArrayList$Itr.next(ArrayList.java:859) + at rip.athena.client.gui.menu.altmanager.GuiAccountManager.mouseClicked(GuiAccountManager.java:320) + at net.minecraft.client.gui.GuiScreen.handleMouseInput(GuiScreen.java:601) + at net.minecraft.client.gui.GuiScreen.handleInput(GuiScreen.java:570) + at net.minecraft.client.Minecraft.runTick(Minecraft.java:1813) + at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1126) + at net.minecraft.client.Minecraft.run(Minecraft.java:431) + at net.minecraft.client.main.Main.main(Main.java:113) + at Start.main(Start.java:11) + + +A detailed walkthrough of the error, its code path and all known details is as follows: +--------------------------------------------------------------------------------------- + +-- Head -- +Stacktrace: + at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:909) + at java.util.ArrayList$Itr.next(ArrayList.java:859) + at rip.athena.client.gui.menu.altmanager.GuiAccountManager.mouseClicked(GuiAccountManager.java:320) + at net.minecraft.client.gui.GuiScreen.handleMouseInput(GuiScreen.java:601) + at net.minecraft.client.gui.GuiScreen.handleInput(GuiScreen.java:570) + +-- Affected screen -- +Details: + Screen name: rip.athena.client.gui.menu.altmanager.GuiAccountManager +Stacktrace: + at net.minecraft.client.Minecraft.runTick(Minecraft.java:1813) + at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1126) + at net.minecraft.client.Minecraft.run(Minecraft.java:431) + at net.minecraft.client.main.Main.main(Main.java:113) + at Start.main(Start.java:11) + +-- System Details -- +Details: + Minecraft Version: 1.8.8 + Operating System: Windows 10 (amd64) version 10.0 + CPU: 12x AMD Ryzen 5 5600X 6-Core Processor + Java Version: 1.8.0_202, Oracle Corporation + Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation + Memory: 920873904 bytes (878 MB) / 1061683200 bytes (1012 MB) up to 3801088000 bytes (3625 MB) + JVM Flags: 0 total; + IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0 + Launched Version: mcp + LWJGL: 2.9.4 + OpenGL: NVIDIA GeForce RTX 2080 SUPER/PCIe/SSE2 GL version 4.6.0 NVIDIA 532.03, NVIDIA Corporation + GL Caps: Using GL 1.3 multitexturing. +Using GL 1.3 texture combiners. +Using framebuffer objects because OpenGL 3.0 is supported and separate blending is supported. +Shaders are available because OpenGL 2.1 is supported. +VBOs are available because OpenGL 1.5 is supported. + + Using VBOs: Yes + Is Modded: Very likely; Jar signature invalidated + Type: Client (map_client.txt) + Resource Packs: ! Ā§bPotfast 5kay.zip + Current Language: English (US) + Profiler Position: N/A (disabled) + CPU: 12x AMD Ryzen 5 5600X 6-Core Processor + OptiFine Version: OptiFine_1.8.8_HD_U_H8 + Render Distance Chunks: 8 + Mipmaps: 4 + Anisotropic Filtering: 1 + Antialiasing: 0 + Multitexture: false + Shaders: null + OpenGlVersion: 4.6.0 NVIDIA 532.03 + OpenGlRenderer: NVIDIA GeForce RTX 2080 SUPER/PCIe/SSE2 + OpenGlVendor: NVIDIA Corporation + CpuCount: 12 \ No newline at end of file diff --git a/workspace/crash-reports/crash-2023-06-10_21.26.18-client.txt b/workspace/crash-reports/crash-2023-06-10_21.26.18-client.txt new file mode 100644 index 00000000..e1b2b9d4 --- /dev/null +++ b/workspace/crash-reports/crash-2023-06-10_21.26.18-client.txt @@ -0,0 +1,73 @@ +---- Minecraft Crash Report ---- +// Surprise! Haha. Well, this is awkward. + +Time: 6/10/23 9:26 PM +Description: Rendering screen + +java.lang.IllegalArgumentException: Invalid UUID string: 74e897386c9e4f5983efd365849e6049 + at java.util.UUID.fromString(UUID.java:194) + at rip.athena.client.gui.menu.altmanager.GuiAccountManager.drawScreen(GuiAccountManager.java:155) + at net.minecraft.client.renderer.EntityRenderer.func_181560_a(EntityRenderer.java:1442) + at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1152) + at net.minecraft.client.Minecraft.run(Minecraft.java:431) + at net.minecraft.client.main.Main.main(Main.java:113) + at Start.main(Start.java:11) + + +A detailed walkthrough of the error, its code path and all known details is as follows: +--------------------------------------------------------------------------------------- + +-- Head -- +Stacktrace: + at java.util.UUID.fromString(UUID.java:194) + at rip.athena.client.gui.menu.altmanager.GuiAccountManager.drawScreen(GuiAccountManager.java:155) + +-- Screen render details -- +Details: + Screen name: rip.athena.client.gui.menu.altmanager.GuiAccountManager + Mouse location: Scaled: (386, 8). Absolute: (773, 463) + Screen size: Scaled: (427, 240). Absolute: (854, 480). Scale factor of 2 +Stacktrace: + at net.minecraft.client.renderer.EntityRenderer.func_181560_a(EntityRenderer.java:1442) + at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1152) + at net.minecraft.client.Minecraft.run(Minecraft.java:431) + at net.minecraft.client.main.Main.main(Main.java:113) + at Start.main(Start.java:11) + +-- System Details -- +Details: + Minecraft Version: 1.8.8 + Operating System: Windows 10 (amd64) version 10.0 + CPU: 12x AMD Ryzen 5 5600X 6-Core Processor + Java Version: 1.8.0_202, Oracle Corporation + Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation + Memory: 251881424 bytes (240 MB) / 766509056 bytes (731 MB) up to 3801088000 bytes (3625 MB) + JVM Flags: 0 total; + IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0 + Launched Version: mcp + LWJGL: 2.9.4 + OpenGL: NVIDIA GeForce RTX 2080 SUPER/PCIe/SSE2 GL version 4.6.0 NVIDIA 532.03, NVIDIA Corporation + GL Caps: Using GL 1.3 multitexturing. +Using GL 1.3 texture combiners. +Using framebuffer objects because OpenGL 3.0 is supported and separate blending is supported. +Shaders are available because OpenGL 2.1 is supported. +VBOs are available because OpenGL 1.5 is supported. + + Using VBOs: Yes + Is Modded: Very likely; Jar signature invalidated + Type: Client (map_client.txt) + Resource Packs: ! Ā§bPotfast 5kay.zip + Current Language: English (US) + Profiler Position: N/A (disabled) + CPU: 12x AMD Ryzen 5 5600X 6-Core Processor + OptiFine Version: OptiFine_1.8.8_HD_U_H8 + Render Distance Chunks: 8 + Mipmaps: 4 + Anisotropic Filtering: 1 + Antialiasing: 0 + Multitexture: false + Shaders: null + OpenGlVersion: 4.6.0 NVIDIA 532.03 + OpenGlRenderer: NVIDIA GeForce RTX 2080 SUPER/PCIe/SSE2 + OpenGlVendor: NVIDIA Corporation + CpuCount: 12 \ No newline at end of file diff --git a/workspace/logs/2023-06-08-1.log.gz b/workspace/logs/2023-06-08-1.log.gz index f55ea1dd..0fb89c7d 100644 Binary files a/workspace/logs/2023-06-08-1.log.gz and b/workspace/logs/2023-06-08-1.log.gz differ diff --git a/workspace/logs/2023-06-08-2.log.gz b/workspace/logs/2023-06-08-2.log.gz index 0fb89c7d..c30494ef 100644 Binary files a/workspace/logs/2023-06-08-2.log.gz and b/workspace/logs/2023-06-08-2.log.gz differ diff --git a/workspace/logs/2023-06-08-3.log.gz b/workspace/logs/2023-06-08-3.log.gz index c30494ef..90a7cfbe 100644 Binary files a/workspace/logs/2023-06-08-3.log.gz and b/workspace/logs/2023-06-08-3.log.gz differ diff --git a/workspace/logs/2023-06-08-4.log.gz b/workspace/logs/2023-06-08-4.log.gz index 90a7cfbe..c7d51c3a 100644 Binary files a/workspace/logs/2023-06-08-4.log.gz and b/workspace/logs/2023-06-08-4.log.gz differ diff --git a/workspace/logs/2023-06-08-5.log.gz b/workspace/logs/2023-06-08-5.log.gz index c7d51c3a..3b07643e 100644 Binary files a/workspace/logs/2023-06-08-5.log.gz and b/workspace/logs/2023-06-08-5.log.gz differ diff --git a/workspace/logs/2023-06-08-6.log.gz b/workspace/logs/2023-06-08-6.log.gz index 3b07643e..ce767b31 100644 Binary files a/workspace/logs/2023-06-08-6.log.gz and b/workspace/logs/2023-06-08-6.log.gz differ diff --git a/workspace/logs/2023-06-08-7.log.gz b/workspace/logs/2023-06-08-7.log.gz index ce767b31..830d9777 100644 Binary files a/workspace/logs/2023-06-08-7.log.gz and b/workspace/logs/2023-06-08-7.log.gz differ diff --git a/workspace/logs/2023-06-09-1.log.gz b/workspace/logs/2023-06-09-1.log.gz new file mode 100644 index 00000000..c5a02bdc Binary files /dev/null and b/workspace/logs/2023-06-09-1.log.gz differ diff --git a/workspace/logs/2023-06-09-2.log.gz b/workspace/logs/2023-06-09-2.log.gz new file mode 100644 index 00000000..874ff019 Binary files /dev/null and b/workspace/logs/2023-06-09-2.log.gz differ diff --git a/workspace/logs/2023-06-09-3.log.gz b/workspace/logs/2023-06-09-3.log.gz new file mode 100644 index 00000000..b9e61fb5 Binary files /dev/null and b/workspace/logs/2023-06-09-3.log.gz differ diff --git a/workspace/logs/2023-06-09-4.log.gz b/workspace/logs/2023-06-09-4.log.gz new file mode 100644 index 00000000..51232480 Binary files /dev/null and b/workspace/logs/2023-06-09-4.log.gz differ diff --git a/workspace/logs/2023-06-09-5.log.gz b/workspace/logs/2023-06-09-5.log.gz new file mode 100644 index 00000000..0b3db32b Binary files /dev/null and b/workspace/logs/2023-06-09-5.log.gz differ diff --git a/workspace/logs/2023-06-09-6.log.gz b/workspace/logs/2023-06-09-6.log.gz new file mode 100644 index 00000000..1cb6bbcf Binary files /dev/null and b/workspace/logs/2023-06-09-6.log.gz differ diff --git a/workspace/logs/2023-06-09-7.log.gz b/workspace/logs/2023-06-09-7.log.gz new file mode 100644 index 00000000..c4c448cb Binary files /dev/null and b/workspace/logs/2023-06-09-7.log.gz differ diff --git a/workspace/logs/2023-06-10-1.log.gz b/workspace/logs/2023-06-10-1.log.gz new file mode 100644 index 00000000..4887f713 Binary files /dev/null and b/workspace/logs/2023-06-10-1.log.gz differ diff --git a/workspace/logs/2023-06-10-2.log.gz b/workspace/logs/2023-06-10-2.log.gz new file mode 100644 index 00000000..2a949161 Binary files /dev/null and b/workspace/logs/2023-06-10-2.log.gz differ diff --git a/workspace/logs/2023-06-10-3.log.gz b/workspace/logs/2023-06-10-3.log.gz new file mode 100644 index 00000000..865a043e Binary files /dev/null and b/workspace/logs/2023-06-10-3.log.gz differ diff --git a/workspace/logs/2023-06-10-4.log.gz b/workspace/logs/2023-06-10-4.log.gz new file mode 100644 index 00000000..49d709be Binary files /dev/null and b/workspace/logs/2023-06-10-4.log.gz differ diff --git a/workspace/logs/2023-06-10-5.log.gz b/workspace/logs/2023-06-10-5.log.gz new file mode 100644 index 00000000..805f6bd1 Binary files /dev/null and b/workspace/logs/2023-06-10-5.log.gz differ diff --git a/workspace/logs/2023-06-10-6.log.gz b/workspace/logs/2023-06-10-6.log.gz new file mode 100644 index 00000000..6e06279d Binary files /dev/null and b/workspace/logs/2023-06-10-6.log.gz differ diff --git a/workspace/logs/2023-06-10-7.log.gz b/workspace/logs/2023-06-10-7.log.gz new file mode 100644 index 00000000..62df8371 Binary files /dev/null and b/workspace/logs/2023-06-10-7.log.gz differ diff --git a/workspace/logs/latest.log b/workspace/logs/latest.log index 6df44a31..e88136b3 100644 --- a/workspace/logs/latest.log +++ b/workspace/logs/latest.log @@ -1,145 +1,1482 @@ -[21:24:09] [Client thread/INFO]: Setting user: Player53 -[21:24:09] [Client thread/INFO]: (Session ID is token:0:Player53) -[21:24:10] [Client thread/INFO]: [OptiFine] *** Reflector Forge *** -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.model.Attributes -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: mods.betterfoliage.client.BetterFoliageClient -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.common.asm.transformers.BlamingTransformer -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.event.world.ChunkWatchEvent$UnWatch -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.relauncher.CoreModManager -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.common.DimensionManager -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.GuiScreenEvent$DrawScreenEvent$Pre -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.GuiScreenEvent$DrawScreenEvent$Post -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.EntityViewRenderEvent$CameraSetup -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.EntityViewRenderEvent$FogColors -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.common.eventhandler.Event -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.common.eventhandler.EventBus -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.common.eventhandler.Event$Result -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.common.property.ExtendedBlockState -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.client.FMLClientHandler -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.common.FMLCommonHandler -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.world.biome.BiomeGenBase.getWaterColorMultiplier -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.addDestroyEffects -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.addHitEffects -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.canCreatureSpawn -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.canRenderInLayer -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.doesSideBlockRendering -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.getBedDirection -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.getExtendedState -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.hasTileEntity -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.isAir -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.isBed -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.isBedFoot -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.isSideSolid -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.entity.Entity.canRiderInteract -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Field not present: net.minecraft.entity.Entity.captureDrops -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Field not present: net.minecraft.entity.Entity.capturedDrops -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.entity.Entity.shouldRenderInPass -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.entity.Entity.shouldRiderSit -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.event.ForgeEventFactory -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.common.ForgeHooks -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.ForgeHooksClient -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.item.Item.getDurabilityForDisplay -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.item.Item.getModel -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.item.Item.onEntitySwing -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.item.Item.shouldCauseReequipAnimation -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.item.Item.showDurabilityBar -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.item.ItemRecord.getRecordResource -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.common.ForgeModContainer -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.potion.PotionEffect.isCurativeItem -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.tileentity.TileEntity.canRenderBreaking -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.tileentity.TileEntity.getRenderBoundingBox -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.tileentity.TileEntity.hasFastRenderer -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.tileentity.TileEntity.shouldRenderInPass -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher.preDrawBatch -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher.drawBatch -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.client.renderer.vertex.VertexFormatElement$EnumUsage.preDraw -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.client.renderer.vertex.VertexFormatElement$EnumUsage.postDraw -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.world.World.countEntities -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.world.World.getPerWorldStorage -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.world.WorldProvider.getCloudRenderer -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.world.WorldProvider.getSkyRenderer -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.world.WorldProvider.getWeatherRenderer -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.client.GuiModList -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.model.IColoredBakedQuad -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.common.property.IExtendedBlockState -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.IRenderHandler -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.model.ISmartBlockModel -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.ItemModelMesherForge -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraft.launchwrapper.Launch -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.model.pipeline.LightUtil -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.common.MinecraftForge -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.MinecraftForgeClient -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.model.ModelLoader -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.RenderBlockOverlayEvent$OverlayType -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.client.registry.RenderingRegistry -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.RenderItemInFrameEvent -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.RenderLivingEvent$Pre -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.RenderLivingEvent$Post -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.RenderLivingEvent$Specials$Pre -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.RenderLivingEvent$Specials$Post -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.client.SplashProgress -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.event.world.WorldEvent$Load -[21:24:10] [Client thread/INFO]: [OptiFine] *** Reflector Vanilla *** -[21:24:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: optifine.OptiFineClassTransformer -[21:24:13] [Client thread/ERROR]: [Athena] Failed to load resource outside namespace (C:\Users\remig\Desktop\Athena-Client\workspace\.\assets\minecraft\Athena\gui\settings.png).javax.imageio.IIOException: Can't read input file! -[21:24:13] [Client thread/WARN]: [Athena] Tried accessing non-existing module: theme -[21:24:13] [Client thread/WARN]: [Athena] Loaded config default with left over setting theme which is no longer used. -[21:24:13] [Client thread/INFO]: LWJGL Version: 2.9.4 -[21:24:13] [Client thread/INFO]: [OptiFine] -[21:24:13] [Client thread/INFO]: [OptiFine] OptiFine_1.8.8_HD_U_H8 -[21:24:13] [Client thread/INFO]: [OptiFine] Build: null -[21:24:13] [Client thread/INFO]: [OptiFine] OS: Windows 10 (amd64) version 10.0 -[21:24:13] [Client thread/INFO]: [OptiFine] Java: 1.8.0_202, Oracle Corporation -[21:24:13] [Client thread/INFO]: [OptiFine] VM: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation -[21:24:13] [Client thread/INFO]: [OptiFine] LWJGL: 2.9.4 -[21:24:13] [Client thread/INFO]: [OptiFine] OpenGL: NVIDIA GeForce RTX 2080 SUPER/PCIe/SSE2, version 4.6.0 NVIDIA 532.03, NVIDIA Corporation -[21:24:13] [Client thread/INFO]: [OptiFine] OpenGL Version: 4.6.0 -[21:24:13] [Client thread/INFO]: [OptiFine] Maximum texture size: 32768x32768 -[21:24:13] [Thread-7/INFO]: [OptiFine] Checking for new version -[21:24:13] [Client thread/INFO]: [Shaders] ShadersMod version: 2.4.12 -[21:24:13] [Client thread/INFO]: [Shaders] OpenGL Version: 4.6.0 NVIDIA 532.03 -[21:24:13] [Client thread/INFO]: [Shaders] Vendor: NVIDIA Corporation -[21:24:13] [Client thread/INFO]: [Shaders] Renderer: NVIDIA GeForce RTX 2080 SUPER/PCIe/SSE2 -[21:24:13] [Client thread/INFO]: [Shaders] Capabilities: 2.0 2.1 3.0 3.2 4.0 -[21:24:13] [Client thread/INFO]: [Shaders] GL_MAX_DRAW_BUFFERS: 8 -[21:24:13] [Client thread/INFO]: [Shaders] GL_MAX_COLOR_ATTACHMENTS_EXT: 8 -[21:24:13] [Client thread/INFO]: [Shaders] GL_MAX_TEXTURE_IMAGE_UNITS: 32 -[21:24:13] [Client thread/INFO]: [Shaders] Load ShadersMod configuration. -[21:24:13] [Client thread/INFO]: [Shaders] No shaderpack loaded. -[21:24:14] [Client thread/INFO]: Reloading ResourceManager: Default, ! Ā§bPotfast 5kay.zip -[21:24:14] [Client thread/INFO]: [OptiFine] *** Reloading textures *** -[21:24:14] [Client thread/INFO]: [OptiFine] Resource packs: ! Ā§bPotfast 5kay.zip -[21:24:14] [Sound Library Loader/INFO]: Starting up SoundSystem... -[21:24:14] [Thread-7/INFO]: [OptiFine] Version found: I7 -[21:24:14] [Thread-8/INFO]: Initializing LWJGL OpenAL -[21:24:14] [Thread-8/INFO]: (The LWJGL binding of OpenAL. For more information, see http://www.lwjgl.org) -[21:24:14] [Thread-8/INFO]: OpenAL initialized. -[21:24:14] [Sound Library Loader/INFO]: Sound engine started -[21:24:15] [Client thread/INFO]: [OptiFine] Sprite size: 32 -[21:24:15] [Client thread/INFO]: [OptiFine] Mipmap levels: 5 -[21:24:15] [Client thread/INFO]: [OptiFine] Multitexture: false -[21:24:15] [Client thread/INFO]: Created: 2048x2048 textures-atlas -[21:24:15] [Client thread/INFO]: [OptiFine] *** Reloading custom textures *** -[21:24:15] [Client thread/INFO]: [OptiFine] Enable face culling: acacia_leaves, birch_leaves, dark_oak_leaves, jungle_leaves, oak_leaves, spruce_leaves -[21:24:43] [Server thread/INFO]: Starting integrated minecraft server version 1.8.8 -[21:24:43] [Server thread/INFO]: Generating keypair -[21:24:43] [Server thread/INFO]: Preparing start region for level 0 -[21:24:44] [Server thread/INFO]: Changing view distance to 8, from 10 -[21:24:44] [Server thread/INFO]: Player53[local:E:c11c18cd] logged in with entity id 111 at (16.534366894066594, 79.76950167798101, 703.6625754346197) -[21:24:44] [Server thread/INFO]: Player53 joined the game -[21:24:45] [Client thread/INFO]: [CHAT] A new Ā§eOptiFineĀ§f version is available: Ā§eHD Ultra I7Ā§f -[21:24:45] [Server thread/INFO]: Saving and pausing game... -[21:24:45] [Server thread/INFO]: Saving chunks for level 'Copy of Copy of mcpworldppdsa|'/Overworld -[21:24:45] [Server thread/INFO]: Saving chunks for level 'Copy of Copy of mcpworldppdsa|'/Nether -[21:24:45] [Server thread/INFO]: Saving chunks for level 'Copy of Copy of mcpworldppdsa|'/The End -[21:24:53] [Client thread/INFO]: [CHAT] Saved screenshot as 2023-06-08_21.24.53.png -[21:45:03] [Client thread/INFO]: Stopping! -[21:45:03] [Client thread/INFO]: [Athena] Shutting down client -[21:45:03] [Client thread/INFO]: SoundSystem shutting down... -[21:45:03] [Server thread/INFO]: Stopping server -[21:45:03] [Server thread/INFO]: Saving players -[21:45:03] [Server thread/INFO]: Saving worlds -[21:45:03] [Server thread/INFO]: Saving chunks for level 'Copy of Copy of mcpworldppdsa|'/Overworld -[21:45:03] [Server thread/INFO]: Saving chunks for level 'Copy of Copy of mcpworldppdsa|'/Nether -[21:45:03] [Server thread/INFO]: Saving chunks for level 'Copy of Copy of mcpworldppdsa|'/The End -[21:45:03] [Client thread/WARN]: Author: Paul Lamb, www.paulscode.com +[23:27:09] [Client thread/INFO]: Setting user: Player246 +[23:27:09] [Client thread/INFO]: (Session ID is token:0:Player246) +[23:27:10] [Client thread/INFO]: [OptiFine] *** Reflector Forge *** +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.model.Attributes +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: mods.betterfoliage.client.BetterFoliageClient +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.common.asm.transformers.BlamingTransformer +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.event.world.ChunkWatchEvent$UnWatch +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.relauncher.CoreModManager +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.common.DimensionManager +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.GuiScreenEvent$DrawScreenEvent$Pre +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.GuiScreenEvent$DrawScreenEvent$Post +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.EntityViewRenderEvent$CameraSetup +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.EntityViewRenderEvent$FogColors +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.common.eventhandler.Event +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.common.eventhandler.EventBus +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.common.eventhandler.Event$Result +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.common.property.ExtendedBlockState +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.client.FMLClientHandler +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.common.FMLCommonHandler +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.world.biome.BiomeGenBase.getWaterColorMultiplier +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.addDestroyEffects +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.addHitEffects +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.canCreatureSpawn +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.canRenderInLayer +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.doesSideBlockRendering +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.getBedDirection +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.getExtendedState +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.hasTileEntity +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.isAir +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.isBed +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.isBedFoot +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.isSideSolid +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.entity.Entity.canRiderInteract +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Field not present: net.minecraft.entity.Entity.captureDrops +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Field not present: net.minecraft.entity.Entity.capturedDrops +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.entity.Entity.shouldRenderInPass +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.entity.Entity.shouldRiderSit +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.event.ForgeEventFactory +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.common.ForgeHooks +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.ForgeHooksClient +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.item.Item.getDurabilityForDisplay +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.item.Item.getModel +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.item.Item.onEntitySwing +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.item.Item.shouldCauseReequipAnimation +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.item.Item.showDurabilityBar +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.item.ItemRecord.getRecordResource +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.common.ForgeModContainer +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.potion.PotionEffect.isCurativeItem +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.tileentity.TileEntity.canRenderBreaking +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.tileentity.TileEntity.getRenderBoundingBox +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.tileentity.TileEntity.hasFastRenderer +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.tileentity.TileEntity.shouldRenderInPass +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher.preDrawBatch +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher.drawBatch +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.client.renderer.vertex.VertexFormatElement$EnumUsage.preDraw +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.client.renderer.vertex.VertexFormatElement$EnumUsage.postDraw +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.world.World.countEntities +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.world.World.getPerWorldStorage +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.world.WorldProvider.getCloudRenderer +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.world.WorldProvider.getSkyRenderer +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.world.WorldProvider.getWeatherRenderer +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.client.GuiModList +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.model.IColoredBakedQuad +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.common.property.IExtendedBlockState +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.IRenderHandler +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.model.ISmartBlockModel +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.ItemModelMesherForge +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraft.launchwrapper.Launch +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.model.pipeline.LightUtil +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.common.MinecraftForge +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.MinecraftForgeClient +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.model.ModelLoader +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.RenderBlockOverlayEvent$OverlayType +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.client.registry.RenderingRegistry +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.RenderItemInFrameEvent +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.RenderLivingEvent$Pre +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.RenderLivingEvent$Post +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.RenderLivingEvent$Specials$Pre +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.RenderLivingEvent$Specials$Post +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.client.SplashProgress +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.event.world.WorldEvent$Load +[23:27:10] [Client thread/INFO]: [OptiFine] *** Reflector Vanilla *** +[23:27:10] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: optifine.OptiFineClassTransformer +[23:27:13] [Client thread/ERROR]: [Athena] Failed to load resource outside namespace (C:\Users\remig\Desktop\Athena-Client\workspace\.\assets\minecraft\Athena\gui\settings.png).javax.imageio.IIOException: Can't read input file! +[23:27:13] [Client thread/WARN]: [Athena] Tried accessing non-existing module: theme +[23:27:13] [Client thread/WARN]: [Athena] Loaded config default with left over setting theme which is no longer used. +[23:27:13] [Client thread/INFO]: LWJGL Version: 2.9.4 +[23:27:14] [Client thread/INFO]: [OptiFine] +[23:27:14] [Client thread/INFO]: [OptiFine] OptiFine_1.8.8_HD_U_H8 +[23:27:14] [Client thread/INFO]: [OptiFine] Build: null +[23:27:14] [Client thread/INFO]: [OptiFine] OS: Windows 10 (amd64) version 10.0 +[23:27:14] [Client thread/INFO]: [OptiFine] Java: 1.8.0_202, Oracle Corporation +[23:27:14] [Client thread/INFO]: [OptiFine] VM: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation +[23:27:14] [Client thread/INFO]: [OptiFine] LWJGL: 2.9.4 +[23:27:14] [Client thread/INFO]: [OptiFine] OpenGL: NVIDIA GeForce RTX 2080 SUPER/PCIe/SSE2, version 4.6.0 NVIDIA 532.03, NVIDIA Corporation +[23:27:14] [Client thread/INFO]: [OptiFine] OpenGL Version: 4.6.0 +[23:27:14] [Client thread/INFO]: [OptiFine] Maximum texture size: 32768x32768 +[23:27:14] [Thread-7/INFO]: [OptiFine] Checking for new version +[23:27:14] [Client thread/INFO]: [Shaders] ShadersMod version: 2.4.12 +[23:27:14] [Client thread/INFO]: [Shaders] OpenGL Version: 4.6.0 NVIDIA 532.03 +[23:27:14] [Client thread/INFO]: [Shaders] Vendor: NVIDIA Corporation +[23:27:14] [Client thread/INFO]: [Shaders] Renderer: NVIDIA GeForce RTX 2080 SUPER/PCIe/SSE2 +[23:27:14] [Client thread/INFO]: [Shaders] Capabilities: 2.0 2.1 3.0 3.2 4.0 +[23:27:14] [Client thread/INFO]: [Shaders] GL_MAX_DRAW_BUFFERS: 8 +[23:27:14] [Client thread/INFO]: [Shaders] GL_MAX_COLOR_ATTACHMENTS_EXT: 8 +[23:27:14] [Client thread/INFO]: [Shaders] GL_MAX_TEXTURE_IMAGE_UNITS: 32 +[23:27:14] [Client thread/INFO]: [Shaders] Load ShadersMod configuration. +[23:27:14] [Client thread/INFO]: [Shaders] No shaderpack loaded. +[23:27:14] [Client thread/INFO]: Reloading ResourceManager: Default, ! Ā§bPotfast 5kay.zip +[23:27:14] [Client thread/INFO]: [OptiFine] *** Reloading textures *** +[23:27:14] [Client thread/INFO]: [OptiFine] Resource packs: ! Ā§bPotfast 5kay.zip +[23:27:14] [Sound Library Loader/INFO]: Starting up SoundSystem... +[23:27:14] [Thread-7/INFO]: [OptiFine] Version found: I7 +[23:27:14] [Thread-8/INFO]: Initializing LWJGL OpenAL +[23:27:14] [Thread-8/INFO]: (The LWJGL binding of OpenAL. For more information, see http://www.lwjgl.org) +[23:27:14] [Thread-8/INFO]: OpenAL initialized. +[23:27:15] [Sound Library Loader/INFO]: Sound engine started +[23:27:15] [Client thread/INFO]: [OptiFine] Sprite size: 32 +[23:27:15] [Client thread/INFO]: [OptiFine] Mipmap levels: 5 +[23:27:15] [Client thread/INFO]: [OptiFine] Multitexture: false +[23:27:16] [Client thread/INFO]: Created: 2048x2048 textures-atlas +[23:27:16] [Client thread/INFO]: [OptiFine] *** Reloading custom textures *** +[23:27:16] [Client thread/INFO]: [OptiFine] Enable face culling: acacia_leaves, birch_leaves, dark_oak_leaves, jungle_leaves, oak_leaves, spruce_leaves +[23:27:22] [Client thread/INFO]: Connecting to eu.minemen.club, 25565 +[23:27:25] [Client thread/INFO]: [CHAT] +[23:27:25] [Client thread/INFO]: [CHAT] Minemen Club +[23:27:25] [Client thread/INFO]: [CHAT] ā— Website: minemen.club +[23:27:25] [Client thread/INFO]: [CHAT] ā— Store: store.minemen.club +[23:27:25] [Client thread/INFO]: [CHAT] ā— Discord: minemen.club/discord +[23:27:25] [Client thread/INFO]: [CHAT] ā— Twitter: twitter.com/Minemen_Network +[23:27:25] [Client thread/INFO]: [CHAT] ā— Rules: minemen.club/rules +[23:27:25] [Client thread/INFO]: [CHAT] +[23:27:25] [Client thread/INFO]: [CHAT] A new Ā§eOptiFineĀ§f version is available: Ā§eHD Ultra I7Ā§f +[23:27:25] [Client thread/INFO]: [CHAT] Club Ā» ziue joined. +[23:27:25] [Client thread/INFO]: [CHAT] [āœ·] ziue has joined the lobby! +[23:27:28] [Client thread/INFO]: [CHAT] You've been added to the EU Practice queue. +[23:27:28] [Client thread/INFO]: [CHAT] You're now being sent to EU Practice. +[23:27:29] [Client thread/INFO]: [CHAT] +[23:27:29] [Client thread/INFO]: [CHAT] EU Practice +[23:27:29] [Client thread/INFO]: [CHAT] 1v1s, Parties, Events +[23:27:29] [Client thread/INFO]: [CHAT] 15+ Games & Duels +[23:27:29] [Client thread/INFO]: [CHAT] +[23:27:29] [Client thread/INFO]: [CHAT] ā— To duel a friend, do: /duel [their name]. +[23:27:29] [Client thread/INFO]: [CHAT] ā— To quick play, right click with your sword. +[23:27:29] [Client thread/INFO]: [CHAT] ā— To edit a kit, right click with your book. +[23:27:29] [Client thread/INFO]: [CHAT] +[23:27:29] [Client thread/INFO]: [CHAT] N0tS4vy: macaric081 +[23:27:31] [Client thread/INFO]: [CHAT] [āƒ] StandMi āøØ.Champion.āø©: KEY & MOUSE LIVE [FR] : https://www.youtube.com/watch?v=3uoSfnO7eFs&ab_channel=StandMi +[23:27:32] [Client thread/INFO]: [CHAT] macaric081: e +[23:27:33] [Client thread/INFO]: [CHAT] [āƒ] StandMi āøØ.Champion.āø©: gg +[23:27:33] [Client thread/INFO]: [CHAT] N0tS4vy: 1v1 +[23:27:36] [Client thread/INFO]: [CHAT] sirojcito: ??? +[23:27:38] [Client thread/INFO]: [CHAT] iridiska210: clown +[23:27:39] [Client thread/INFO]: [CHAT] [āœ½] BreakingBadCr: Accept YOUR duels! https://www.twitch.tv/newshengen +[23:27:44] [Client thread/INFO]: [CHAT] N0tS4vy: macaric 1v1 +[23:27:48] [Client thread/INFO]: [CHAT] Neeyo__14: ? +[23:27:48] [Client thread/INFO]: [CHAT] CCL: yo' +[23:27:51] [Client thread/INFO]: [CHAT] SamThing_: gg +[23:27:56] [Client thread/INFO]: [CHAT] [āƒ] StandMi āøØ.Champion.āø©: KEY & MOUSE LIVE [FR] : https://www.youtube.com/watch?v=3uoSfnO7eFs&ab_channel=StandMi +[23:27:57] [Client thread/INFO]: [CHAT] ceyio: NOO +[23:27:59] [Client thread/INFO]: [CHAT] SumoTechnology: Ranked Sumo +[23:27:59] [Client thread/INFO]: [CHAT] [āœ½] BreakingBadCr: Accept YOUR duels! https://www.twitch.tv/newshengen +[23:28:01] [Client thread/INFO]: [CHAT] ceyio: italiani duellate ;()()()() +[23:28:02] [Client thread/INFO]: [CHAT] N0tS4vy: maca 1v1 +[23:28:04] [Client thread/INFO]: [CHAT] Pznic: gg +[23:28:06] [Client thread/INFO]: [CHAT] Talhaww: stop spam +[23:28:13] [Client thread/INFO]: [CHAT] Neeyo__14: ? +[23:28:17] [Client thread/INFO]: [CHAT] [āœ½] BreakingBadCr: Accept YOUR duels! https://www.twitch.tv/newshengen +[23:28:17] [Client thread/INFO]: [CHAT] Jshal: YOU ARE ON 600 PING +[23:28:18] [Client thread/INFO]: [CHAT] +[23:28:18] [Client thread/INFO]: [CHAT] [MMC] Need /disguise? Buy ACE Rank: store.minemen.club +[23:28:18] [Client thread/INFO]: [CHAT] +[23:28:20] [Client thread/INFO]: [CHAT] Blissolic is not in spawn. +[23:28:21] [Client thread/INFO]: [CHAT] Jshal: HOW AM I MEANT TO FIGHT YOU +[23:28:22] [Client thread/INFO]: [CHAT] Blissolic is not in spawn. +[23:28:22] [Client thread/INFO]: [CHAT] [āƒ] Snugglly: LOL +[23:28:24] [Client thread/INFO]: [CHAT] zaweez165: push +[23:28:24] [Client thread/INFO]: [CHAT] That player is not in spawn. +[23:28:28] [Client thread/INFO]: [CHAT] ceyio: breo +[23:28:31] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:31] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:31] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:31] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:31] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:31] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:31] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:31] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:31] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:31] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:31] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:31] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:31] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:31] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:31] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:31] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:31] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] EventBus - Failed supplying subscribed event rip.athena.client.events.types.render.RenderEvent to rip.athena.client.modules.impl.other.AimTrainer.onTick. +[23:28:32] [Client thread/INFO]: [Athena] you have hit the bot +[23:28:32] [Client thread/INFO]: [Athena] Accuracy: 100.0% +[23:28:33] [Client thread/INFO]: [CHAT] MeowXx_: XD +[23:28:34] [Client thread/INFO]: [Athena] you have hit the bot +[23:28:34] [Client thread/INFO]: [Athena] Accuracy: 100.0% +[23:28:35] [Client thread/INFO]: [Athena] you have hit the bot +[23:28:35] [Client thread/INFO]: [Athena] Accuracy: 100.0% +[23:28:36] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 1 +[23:28:36] [Client thread/INFO]: [Athena] Accuracy: 100.0% +[23:28:36] [Client thread/INFO]: [Athena] you have hit the bot +[23:28:36] [Client thread/INFO]: [Athena] Accuracy: 100.0% +[23:28:37] [Client thread/INFO]: [Athena] you have hit the bot +[23:28:37] [Client thread/INFO]: [Athena] Accuracy: 100.0% +[23:28:38] [Client thread/INFO]: [CHAT] zaweez165: bro coming +[23:28:38] [Client thread/INFO]: [Athena] you have hit the bot +[23:28:38] [Client thread/INFO]: [Athena] Accuracy: 100.0% +[23:28:39] [Client thread/INFO]: [Athena] you have hit the bot +[23:28:39] [Client thread/INFO]: [Athena] Accuracy: 100.0% +[23:28:40] [Client thread/INFO]: [CHAT] macaric081: gg +[23:28:40] [Client thread/INFO]: [Athena] you have hit the bot +[23:28:40] [Client thread/INFO]: [Athena] Accuracy: 100.0% +[23:28:41] [Client thread/INFO]: [CHAT] tcmek: 7HUB +[23:28:42] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 2 +[23:28:42] [Client thread/INFO]: [Athena] Accuracy: 100.0% +[23:28:44] [Client thread/INFO]: [CHAT] SpammerRod: WorldsBestRodder for real you blink for that xd +[23:28:44] [Client thread/INFO]: [Athena] you have hit the bot +[23:28:44] [Client thread/INFO]: [Athena] Accuracy: 100.0% +[23:28:46] [Client thread/INFO]: [Athena] you have hit the bot +[23:28:46] [Client thread/INFO]: [Athena] Accuracy: 100.0% +[23:28:47] [Client thread/INFO]: [Athena] you have hit the bot +[23:28:47] [Client thread/INFO]: [Athena] Accuracy: 100.0% +[23:28:48] [Client thread/INFO]: [CHAT] SumoTechnology: Ranked Sumo +[23:28:48] [Client thread/INFO]: [CHAT] wkvl: NIKE ZEBI +[23:28:48] [Client thread/INFO]: [Athena] you have hit the bot +[23:28:48] [Client thread/INFO]: [Athena] Accuracy: 100.0% +[23:28:50] [Client thread/INFO]: [CHAT] daredcorgi13184: shittt +[23:28:52] [Client thread/INFO]: [Athena] you have hit the bot +[23:28:52] [Client thread/INFO]: [Athena] Accuracy: 100.0% +[23:28:52] [Client thread/INFO]: [CHAT] efealmac2000: SO BAD +[23:28:53] [Client thread/INFO]: [Athena] you have hit the bot +[23:28:53] [Client thread/INFO]: [Athena] Accuracy: 100.0% +[23:28:55] [Client thread/INFO]: [Athena] you have hit the bot +[23:28:55] [Client thread/INFO]: [Athena] Accuracy: 100.0% +[23:28:56] [Client thread/INFO]: [Athena] you have hit the bot +[23:28:56] [Client thread/INFO]: [Athena] Accuracy: 100.0% +[23:28:57] [Client thread/INFO]: [CHAT] Wolfato: BRU +[23:28:59] [Client thread/INFO]: [CHAT] [āƒ] BestEngland2 ā¤: RANKED INVADED WIN = LUNAR CLOAK +[23:29:00] [Client thread/INFO]: [CHAT] [āœ½] BLUEOG_ āœŸ: ahah vabe trollo +[23:29:01] [Client thread/INFO]: [Athena] you have hit the bot +[23:29:01] [Client thread/INFO]: [Athena] Accuracy: 100.0% +[23:29:01] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 3 +[23:29:01] [Client thread/INFO]: [Athena] Accuracy: 100.0% +[23:29:02] [Client thread/INFO]: [CHAT] MeowXx_: d sad +[23:29:03] [Client thread/INFO]: [Athena] you have hit the bot +[23:29:03] [Client thread/INFO]: [Athena] Accuracy: 100.0% +[23:29:03] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 4 +[23:29:03] [Client thread/INFO]: [Athena] Accuracy: 100.0% +[23:29:03] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 5 +[23:29:03] [Client thread/INFO]: [Athena] Accuracy: 100.0% +[23:29:03] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 6 +[23:29:03] [Client thread/INFO]: [Athena] Accuracy: 100.0% +[23:29:03] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 7 +[23:29:03] [Client thread/INFO]: [Athena] Accuracy: 100.0% +[23:29:03] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 8 +[23:29:03] [Client thread/INFO]: [Athena] Accuracy: 100.0% +[23:29:03] [Client thread/INFO]: [CHAT] Qadoi: 2023 +[23:29:03] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 9 +[23:29:03] [Client thread/INFO]: [Athena] Accuracy: 100.0% +[23:29:03] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 10 +[23:29:03] [Client thread/INFO]: [Athena] Accuracy: 100.0% +[23:29:03] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 11 +[23:29:03] [Client thread/INFO]: [Athena] Accuracy: 100.0% +[23:29:03] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 12 +[23:29:03] [Client thread/INFO]: [Athena] Accuracy: 100.0% +[23:29:03] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 13 +[23:29:03] [Client thread/INFO]: [Athena] Accuracy: 100.0% +[23:29:04] [Client thread/INFO]: [CHAT] __GodWalk__: 2v2 fireball +[23:29:04] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 14 +[23:29:04] [Client thread/INFO]: [Athena] Accuracy: 100.0% +[23:29:04] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 15 +[23:29:04] [Client thread/INFO]: [Athena] Accuracy: 100.0% +[23:29:04] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 16 +[23:29:04] [Client thread/INFO]: [Athena] Accuracy: 100.0% +[23:29:04] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 17 +[23:29:04] [Client thread/INFO]: [Athena] Accuracy: 100.0% +[23:29:04] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 18 +[23:29:04] [Client thread/INFO]: [Athena] Accuracy: 100.0% +[23:29:04] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 19 +[23:29:04] [Client thread/INFO]: [Athena] Accuracy: 94.74% +[23:29:04] [Client thread/INFO]: [Athena] you have hit the bot +[23:29:04] [Client thread/INFO]: [Athena] Accuracy: 100.0% +[23:29:04] [Client thread/INFO]: [Athena] you have hit the bot +[23:29:04] [Client thread/INFO]: [Athena] Accuracy: 100.0% +[23:29:04] [Client thread/INFO]: [Athena] Accuracy: 100.0% +[23:29:04] [Client thread/INFO]: [CHAT] +[23:29:04] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 20 +[23:29:04] [Client thread/INFO]: [Athena] Accuracy: 100.0% +[23:29:04] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 21 +[23:29:04] [Client thread/INFO]: [Athena] Accuracy: 95.24% +[23:29:04] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 22 +[23:29:04] [Client thread/INFO]: [Athena] Accuracy: 90.91% +[23:29:05] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 23 +[23:29:05] [Client thread/INFO]: [Athena] Accuracy: 86.96% +[23:29:05] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 24 +[23:29:05] [Client thread/INFO]: [Athena] Accuracy: 83.33% +[23:29:05] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 25 +[23:29:05] [Client thread/INFO]: [Athena] Accuracy: 80.0% +[23:29:05] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 26 +[23:29:05] [Client thread/INFO]: [Athena] Accuracy: 76.92% +[23:29:05] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 27 +[23:29:05] [Client thread/INFO]: [Athena] Accuracy: 74.07% +[23:29:05] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 28 +[23:29:05] [Client thread/INFO]: [Athena] Accuracy: 71.43% +[23:29:05] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 29 +[23:29:05] [Client thread/INFO]: [Athena] Accuracy: 68.97% +[23:29:05] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 30 +[23:29:05] [Client thread/INFO]: [Athena] Accuracy: 66.67% +[23:29:05] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 31 +[23:29:05] [Client thread/INFO]: [Athena] Accuracy: 64.52% +[23:29:05] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 32 +[23:29:05] [Client thread/INFO]: [Athena] Accuracy: 62.5% +[23:29:05] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 33 +[23:29:05] [Client thread/INFO]: [Athena] Accuracy: 60.61% +[23:29:05] [Client thread/INFO]: [Athena] you have hit the bot +[23:29:05] [Client thread/INFO]: [Athena] Accuracy: 63.64% +[23:29:05] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 34 +[23:29:05] [Client thread/INFO]: [Athena] Accuracy: 61.76% +[23:29:05] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 35 +[23:29:05] [Client thread/INFO]: [Athena] Accuracy: 60.0% +[23:29:05] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 36 +[23:29:05] [Client thread/INFO]: [Athena] Accuracy: 58.33% +[23:29:06] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 37 +[23:29:06] [Client thread/INFO]: [Athena] Accuracy: 56.76% +[23:29:06] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 38 +[23:29:06] [Client thread/INFO]: [Athena] Accuracy: 55.26% +[23:29:06] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 39 +[23:29:06] [Client thread/INFO]: [Athena] Accuracy: 53.85% +[23:29:06] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 40 +[23:29:06] [Client thread/INFO]: [Athena] Accuracy: 52.5% +[23:29:06] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 41 +[23:29:06] [Client thread/INFO]: [Athena] Accuracy: 51.22% +[23:29:06] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 42 +[23:29:06] [Client thread/INFO]: [Athena] Accuracy: 50.0% +[23:29:06] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 43 +[23:29:06] [Client thread/INFO]: [Athena] Accuracy: 48.84% +[23:29:06] [Client thread/INFO]: [Athena] you have hit the bot +[23:29:06] [Client thread/INFO]: [Athena] Accuracy: 51.16% +[23:29:06] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 44 +[23:29:06] [Client thread/INFO]: [Athena] Accuracy: 50.0% +[23:29:06] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 45 +[23:29:06] [Client thread/INFO]: [Athena] Accuracy: 48.89% +[23:29:06] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 46 +[23:29:06] [Client thread/INFO]: [Athena] Accuracy: 47.83% +[23:29:07] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 47 +[23:29:07] [Client thread/INFO]: [Athena] Accuracy: 46.81% +[23:29:07] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 48 +[23:29:07] [Client thread/INFO]: [Athena] Accuracy: 45.83% +[23:29:07] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 49 +[23:29:07] [Client thread/INFO]: [Athena] Accuracy: 44.9% +[23:29:07] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 50 +[23:29:07] [Client thread/INFO]: [Athena] Accuracy: 44.0% +[23:29:07] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 51 +[23:29:07] [Client thread/INFO]: [Athena] Accuracy: 43.14% +[23:29:07] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 52 +[23:29:07] [Client thread/INFO]: [Athena] Accuracy: 42.31% +[23:29:07] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 53 +[23:29:07] [Client thread/INFO]: [Athena] Accuracy: 41.51% +[23:29:07] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 54 +[23:29:07] [Client thread/INFO]: [Athena] Accuracy: 40.74% +[23:29:07] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 55 +[23:29:07] [Client thread/INFO]: [Athena] Accuracy: 40.0% +[23:29:07] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 56 +[23:29:07] [Client thread/INFO]: [Athena] Accuracy: 39.29% +[23:29:07] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 57 +[23:29:07] [Client thread/INFO]: [Athena] Accuracy: 38.6% +[23:29:08] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 58 +[23:29:08] [Client thread/INFO]: [Athena] Accuracy: 37.93% +[23:29:08] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 59 +[23:29:08] [Client thread/INFO]: [Athena] Accuracy: 37.29% +[23:29:08] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 60 +[23:29:08] [Client thread/INFO]: [Athena] Accuracy: 36.67% +[23:29:08] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 61 +[23:29:08] [Client thread/INFO]: [Athena] Accuracy: 36.07% +[23:29:08] [Client thread/INFO]: [CHAT] N0tS4vy: di ocane +[23:29:08] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 62 +[23:29:08] [Client thread/INFO]: [Athena] Accuracy: 35.48% +[23:29:08] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 63 +[23:29:08] [Client thread/INFO]: [Athena] Accuracy: 34.92% +[23:29:08] [Client thread/INFO]: [Athena] you have hit the bot +[23:29:08] [Client thread/INFO]: [Athena] Accuracy: 36.51% +[23:29:08] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 64 +[23:29:08] [Client thread/INFO]: [Athena] Accuracy: 35.94% +[23:29:08] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 65 +[23:29:08] [Client thread/INFO]: [Athena] Accuracy: 35.38% +[23:29:08] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 66 +[23:29:08] [Client thread/INFO]: [Athena] Accuracy: 34.85% +[23:29:08] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 67 +[23:29:08] [Client thread/INFO]: [Athena] Accuracy: 34.33% +[23:29:09] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 68 +[23:29:09] [Client thread/INFO]: [Athena] Accuracy: 33.82% +[23:29:09] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 69 +[23:29:09] [Client thread/INFO]: [Athena] Accuracy: 33.33% +[23:29:09] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 70 +[23:29:09] [Client thread/INFO]: [Athena] Accuracy: 32.86% +[23:29:09] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 71 +[23:29:09] [Client thread/INFO]: [Athena] Accuracy: 32.39% +[23:29:09] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 72 +[23:29:09] [Client thread/INFO]: [Athena] Accuracy: 31.94% +[23:29:09] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 73 +[23:29:09] [Client thread/INFO]: [Athena] Accuracy: 31.51% +[23:29:09] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 74 +[23:29:09] [Client thread/INFO]: [Athena] Accuracy: 31.08% +[23:29:09] [Client thread/INFO]: [Athena] you have hit the bot +[23:29:09] [Client thread/INFO]: [Athena] Accuracy: 32.43% +[23:29:09] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 75 +[23:29:09] [Client thread/INFO]: [Athena] Accuracy: 32.0% +[23:29:09] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 76 +[23:29:09] [Client thread/INFO]: [Athena] Accuracy: 31.58% +[23:29:09] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 77 +[23:29:09] [Client thread/INFO]: [Athena] Accuracy: 31.17% +[23:29:09] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 78 +[23:29:09] [Client thread/INFO]: [Athena] Accuracy: 30.77% +[23:29:09] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 79 +[23:29:09] [Client thread/INFO]: [Athena] Accuracy: 30.38% +[23:29:10] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 80 +[23:29:10] [Client thread/INFO]: [Athena] Accuracy: 30.0% +[23:29:10] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 81 +[23:29:10] [Client thread/INFO]: [Athena] Accuracy: 29.63% +[23:29:10] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 82 +[23:29:10] [Client thread/INFO]: [Athena] Accuracy: 29.27% +[23:29:10] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 83 +[23:29:10] [Client thread/INFO]: [Athena] Accuracy: 28.92% +[23:29:10] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 84 +[23:29:10] [Client thread/INFO]: [Athena] Accuracy: 28.57% +[23:29:10] [Client thread/INFO]: [CHAT] Ispettore_G0d: BLUEOG_ sei un trollerino +[23:29:10] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 85 +[23:29:10] [Client thread/INFO]: [Athena] Accuracy: 28.24% +[23:29:10] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 86 +[23:29:10] [Client thread/INFO]: [Athena] Accuracy: 27.91% +[23:29:10] [Client thread/INFO]: [Athena] you have hit the bot +[23:29:10] [Client thread/INFO]: [Athena] Accuracy: 29.07% +[23:29:10] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 87 +[23:29:10] [Client thread/INFO]: [Athena] Accuracy: 28.74% +[23:29:10] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 88 +[23:29:10] [Client thread/INFO]: [Athena] Accuracy: 28.41% +[23:29:10] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 89 +[23:29:10] [Client thread/INFO]: [Athena] Accuracy: 28.09% +[23:29:10] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 90 +[23:29:10] [Client thread/INFO]: [Athena] Accuracy: 27.78% +[23:29:11] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 91 +[23:29:11] [Client thread/INFO]: [Athena] Accuracy: 27.47% +[23:29:11] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 92 +[23:29:11] [Client thread/INFO]: [Athena] Accuracy: 27.17% +[23:29:11] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 93 +[23:29:11] [Client thread/INFO]: [Athena] Accuracy: 26.88% +[23:29:11] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 94 +[23:29:11] [Client thread/INFO]: [Athena] Accuracy: 26.6% +[23:29:11] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 95 +[23:29:11] [Client thread/INFO]: [Athena] Accuracy: 26.32% +[23:29:11] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 96 +[23:29:11] [Client thread/INFO]: [Athena] Accuracy: 26.04% +[23:29:11] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 97 +[23:29:11] [Client thread/INFO]: [Athena] Accuracy: 25.77% +[23:29:11] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 98 +[23:29:11] [Client thread/INFO]: [Athena] Accuracy: 25.51% +[23:29:11] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 99 +[23:29:11] [Client thread/INFO]: [Athena] Accuracy: 25.25% +[23:29:11] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 100 +[23:29:11] [Client thread/INFO]: [Athena] Accuracy: 25.0% +[23:29:11] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 101 +[23:29:11] [Client thread/INFO]: [Athena] Accuracy: 24.75% +[23:29:11] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 102 +[23:29:11] [Client thread/INFO]: [Athena] Accuracy: 24.51% +[23:29:11] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 103 +[23:29:11] [Client thread/INFO]: [Athena] Accuracy: 24.27% +[23:29:11] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 104 +[23:29:11] [Client thread/INFO]: [Athena] Accuracy: 24.04% +[23:29:12] [Client thread/INFO]: [Athena] you have hit the bot +[23:29:12] [Client thread/INFO]: [Athena] Accuracy: 25.0% +[23:29:12] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 105 +[23:29:12] [Client thread/INFO]: [Athena] Accuracy: 24.76% +[23:29:12] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 106 +[23:29:12] [Client thread/INFO]: [Athena] Accuracy: 24.53% +[23:29:12] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 107 +[23:29:12] [Client thread/INFO]: [Athena] Accuracy: 24.3% +[23:29:12] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 108 +[23:29:12] [Client thread/INFO]: [Athena] Accuracy: 24.07% +[23:29:12] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 109 +[23:29:12] [Client thread/INFO]: [Athena] Accuracy: 23.85% +[23:29:12] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 110 +[23:29:12] [Client thread/INFO]: [Athena] Accuracy: 23.64% +[23:29:12] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 111 +[23:29:12] [Client thread/INFO]: [Athena] Accuracy: 23.42% +[23:29:12] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 112 +[23:29:12] [Client thread/INFO]: [Athena] Accuracy: 23.21% +[23:29:12] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 113 +[23:29:12] [Client thread/INFO]: [Athena] Accuracy: 23.01% +[23:29:12] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 114 +[23:29:12] [Client thread/INFO]: [Athena] Accuracy: 22.81% +[23:29:12] [Client thread/INFO]: [CHAT] WindBoi: gg +[23:29:13] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 115 +[23:29:13] [Client thread/INFO]: [Athena] Accuracy: 22.61% +[23:29:13] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 116 +[23:29:13] [Client thread/INFO]: [Athena] Accuracy: 22.41% +[23:29:13] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 117 +[23:29:13] [Client thread/INFO]: [Athena] Accuracy: 22.22% +[23:29:13] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 118 +[23:29:13] [Client thread/INFO]: [Athena] Accuracy: 22.03% +[23:29:13] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 119 +[23:29:13] [Client thread/INFO]: [Athena] Accuracy: 21.85% +[23:29:13] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 120 +[23:29:13] [Client thread/INFO]: [Athena] Accuracy: 21.67% +[23:29:13] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 121 +[23:29:13] [Client thread/INFO]: [Athena] Accuracy: 21.49% +[23:29:13] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 122 +[23:29:13] [Client thread/INFO]: [Athena] Accuracy: 21.31% +[23:29:13] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 123 +[23:29:13] [Client thread/INFO]: [Athena] Accuracy: 21.14% +[23:29:13] [Client thread/INFO]: [Athena] YOU MISSED A HIT: 124 +[23:29:13] [Client thread/INFO]: [Athena] Accuracy: 20.97% +[23:29:15] [Client thread/INFO]: [CHAT] joeyplayzmc12: go easy +[23:29:18] [Client thread/INFO]: [CHAT] [āœ½] BLUEOG_ āœŸ: ciao ispe +[23:29:19] [Client thread/INFO]: [CHAT] macaric081: gg +[23:29:20] [Client thread/INFO]: [CHAT] Kenshiwnn: me BestEngland2 +[23:29:22] [Client thread/INFO]: [CHAT] Ispettore_G0d: ciao blue :D +[23:29:23] [Client thread/INFO]: [CHAT] N0tS4vy: Ispettore_G0d ho l'onore di fare 1v1? +[23:29:23] [Client thread/INFO]: [CHAT] Blissolic is not in spawn. +[23:29:25] [Client thread/INFO]: [CHAT] [āƒ] BestEngland2 ā¤: gf +[23:29:26] [Client thread/INFO]: [CHAT] Kyoouh: plugtsar sayer laisse 1v1 nan +[23:29:27] [Client thread/INFO]: [CHAT] [āƒ] BestEngland2 ā¤: RANKED INVADED WIN = LUNAR CLOAK +[23:29:27] [Client thread/INFO]: [CHAT] SumoTechnology: Ranked Sumo +[23:29:28] [Client thread/INFO]: [CHAT] [āƒ] StandMi āøØ.Champion.āø©: KEY & MOUSE LIVE [FR] : https://www.youtube.com/watch?v=3uoSfnO7eFs&ab_channel=StandMi +[23:29:31] [Client thread/INFO]: [CHAT] Ispettore_G0d: nah N0tS4vy +[23:29:33] [Client thread/INFO]: [CHAT] xEnesR: gg +[23:29:33] [Client thread/INFO]: [CHAT] Sqaky: gg +[23:29:34] [Client thread/INFO]: [CHAT] H_yper: gg +[23:29:34] [Client thread/INFO]: [CHAT] [āœ½] BreakingBadCr: Accept YOUR duels! https://www.twitch.tv/newshengen +[23:29:37] [Client thread/INFO]: [CHAT] Kenshiwnn: BestEngland2 im in 1 +[23:29:39] [Client thread/INFO]: [CHAT] Wappell: fuck u +[23:29:46] [Client thread/INFO]: [CHAT] Talhaww: stop spam +[23:29:47] [Client thread/INFO]: [CHAT] RRevengge: is hypixel down +[23:29:47] [Client thread/INFO]: [CHAT] N0tS4vy: Ispettore_G0d mi apri ma voglio provare +[23:29:49] [Client thread/INFO]: [CHAT] 9bearr: gg +[23:29:52] [Client thread/INFO]: [CHAT] [āƒ] BestEngland2 ā¤: RANKED INVADED WIN = LUNAR CLOAK +[23:29:53] [Client thread/INFO]: [CHAT] Kenshiwnn: BestEngland2 im in q.... +[23:29:54] [Client thread/INFO]: [CHAT] Scyphe_: howe +[23:29:57] [Client thread/INFO]: [CHAT] ceyio: lefit +[23:29:57] [Client thread/INFO]: [CHAT] Ispettore_G0d: N0tS4vy c'ĆØ ryanfth che sta in q nelle invaded unranked +[23:30:04] [Client thread/INFO]: [CHAT] GLOKK9NA: Kyoouh viens vocal +[23:30:05] [Client thread/INFO]: [CHAT] SumoTechnology: Ranked Sumo +[23:30:06] [Client thread/INFO]: [CHAT] [āœ½] BreakingBadCr: Accept YOUR duels! https://www.twitch.tv/newshengen +[23:30:06] [Client thread/INFO]: [CHAT] +[23:30:06] [Client thread/INFO]: [CHAT] āœ˜ 9263 was banned by AntiGamingChair for Unfair Advantage. +[23:30:06] [Client thread/INFO]: [CHAT] +[23:30:08] [Client thread/INFO]: [CHAT] Kyoouh: nanh jai 12and +[23:30:08] [Client thread/INFO]: [CHAT] Talhaww: d____b 0 wtap wins +[23:30:09] [Client thread/INFO]: [CHAT] N0tS4vy: e quindi? +[23:30:11] [Client thread/INFO]: [CHAT] xwvho_: LOL +[23:30:15] [Client thread/INFO]: [CHAT] 9bearr: regalo vip a chi mi batte in boxing +[23:30:18] [Client thread/INFO]: [CHAT] Blissolic is not in spawn. +[23:30:18] [Client thread/INFO]: [CHAT] +[23:30:18] [Client thread/INFO]: [CHAT] [MMC] Need support? Create a ticket: minemen.club/tickets +[23:30:18] [Client thread/INFO]: [CHAT] +[23:30:19] [Client thread/INFO]: [CHAT] ceyio: cheatto +[23:30:20] [Client thread/INFO]: [CHAT] Blissolic is not in spawn. +[23:30:21] [Client thread/INFO]: [CHAT] [āƒ] BestEngland2 ā¤: RANKED INVADED WIN = LUNAR CLOAK +[23:30:23] [Client thread/INFO]: [CHAT] SchwebbThePlant: GG +[23:30:26] [Client thread/INFO]: [CHAT] [āœ½] BreakingBadCr: Accept YOUR duels! https://www.twitch.tv/newshengen +[23:30:27] [Client thread/INFO]: [CHAT] Blissolic is not in spawn. +[23:30:28] [Client thread/INFO]: [CHAT] N0tS4vy: macaric081 1v1 +[23:30:28] [Client thread/INFO]: [CHAT] Kenshiwnn: BestEngland2 im in q.... +[23:30:30] [Client thread/INFO]: [CHAT] Blissolic, Blixtrob +[23:30:30] [Client thread/INFO]: [CHAT] +[23:30:30] [Client thread/INFO]: [CHAT] Blissolic vs. Karmousa +[23:30:30] [Client thread/INFO]: [CHAT] ā— Type: Unranked Bed Fight +[23:30:30] [Client thread/INFO]: [CHAT] ā— Duration: 01:01 +[23:30:30] [Client thread/INFO]: [CHAT] ā— Map: Castle +[23:30:30] [Client thread/INFO]: [CHAT] +[23:30:31] [Client thread/INFO]: [CHAT] 9bearr: regalo vip a chi mi batte in boxing - +[23:30:33] [Client thread/INFO]: [CHAT] You aren't at spawn. +[23:30:34] [Client thread/INFO]: [CHAT] Hurf: ƖL +[23:30:35] [Client thread/INFO]: [CHAT] [āœ·] Clqps ŪŖŪ«ā˜ƒŪ°ŪŖŪ«: damn u good +[23:30:36] [Client thread/INFO]: [CHAT] Blissolic was killed! +[23:30:40] [Client thread/INFO]: [CHAT] oCritz started spectating. +[23:30:46] [Client thread/INFO]: [CHAT] ceyio: tu piu d me +[23:30:46] [Client thread/INFO]: [CHAT] _Mathy207_: AyoSeba mmh stacco ti do un consiglio allenati :D +[23:30:47] [Client thread/INFO]: [CHAT] SchwebbThePlant: dang] +[23:30:47] [Client thread/INFO]: [CHAT] You aren't at spawn. +[23:30:48] [Client thread/INFO]: [CHAT] Karmousa was killed by Blissolic! FINAL KILL +[23:30:48] [Client thread/INFO]: [CHAT] +[23:30:48] [Client thread/INFO]: [CHAT] Match Results (click player to view): +[23:30:48] [Client thread/INFO]: [CHAT] Winner: Blissolic ā– Loser: Karmousa +[23:30:48] [Client thread/INFO]: [CHAT] +[23:30:48] [Client thread/INFO]: [CHAT] Spectators (3): ziue, AGPS, oCritz +[23:30:50] [Client thread/INFO]: [CHAT] 9bearr: N0tS4vy boxing +[23:30:50] [Client thread/INFO]: [CHAT] You aren't at spawn. +[23:30:51] [Client thread/INFO]: [CHAT] ItsStaZie29: ciao +[23:30:53] [Client thread/INFO]: [CHAT] +[23:30:53] [Client thread/INFO]: [CHAT] Sent Request +[23:30:53] [Client thread/INFO]: [CHAT] ā— To: Blissolic +[23:30:53] [Client thread/INFO]: [CHAT] ā— Kit: Bed Fight +[23:30:53] [Client thread/INFO]: [CHAT] ā— Map: City +[23:30:53] [Client thread/INFO]: [CHAT] +[23:30:55] [Client thread/INFO]: [CHAT] AyoSeba: sono le 11 +[23:30:55] [Client thread/INFO]: [CHAT] [āœ½] BreakingBadCr: Accept YOUR duels! https://www.twitch.tv/newshengen +[23:30:58] [Client thread/INFO]: [CHAT] Kenshiwnn: mhmhm +[23:30:59] [Client thread/INFO]: [CHAT] [āƒ] BestEngland2 ā¤: RANKED INVADED WIN = LUNAR CLOAK +[23:30:59] [Client thread/INFO]: [CHAT] N0tS4vy: macaric081 1v1 +[23:31:00] [Client thread/INFO]: [CHAT] 9bearr: 1 sec +[23:31:00] [Client thread/INFO]: [CHAT] MeowXx_: g +[23:31:01] [Client thread/INFO]: [CHAT] +[23:31:01] [Client thread/INFO]: [CHAT] Bed Fight Duel +[23:31:01] [Client thread/INFO]: [CHAT] ā— Map: City +[23:31:01] [Client thread/INFO]: [CHAT] ā— Opponent: Blissolic +[23:31:01] [Client thread/INFO]: [CHAT] ā— Ping: 7 ms +[23:31:01] [Client thread/INFO]: [CHAT] +[23:31:01] [Client thread/INFO]: [CHAT] 5... +[23:31:02] [Client thread/INFO]: [CHAT] SumoTechnology: Ranked Sumo +[23:31:02] [Client thread/INFO]: [CHAT] Hazdeman1665: u good +[23:31:02] [Client thread/INFO]: [CHAT] 4... +[23:31:03] [Client thread/INFO]: [CHAT] You can't place there. +[23:31:03] [Client thread/INFO]: [CHAT] AyoSeba: alle 5 gioco 10 volte meglio +[23:31:03] [Client thread/INFO]: [CHAT] You can't place there. +[23:31:03] [Client thread/INFO]: [CHAT] AGPS started spectating. +[23:31:03] [Client thread/INFO]: [CHAT] 3... +[23:31:04] [Client thread/INFO]: [CHAT] You can't place there. +[23:31:04] [Client thread/INFO]: [CHAT] 2... +[23:31:04] [Client thread/INFO]: [CHAT] You can't place there. +[23:31:05] [Client thread/INFO]: [CHAT] You can't place there. +[23:31:05] [Client thread/INFO]: [CHAT] 9bearr: vai +[23:31:05] [Client thread/INFO]: [CHAT] You can't place there. +[23:31:05] [Client thread/INFO]: [CHAT] You can't place there. +[23:31:05] [Client thread/INFO]: [CHAT] 1... +[23:31:05] [Client thread/INFO]: [CHAT] You can't place there. +[23:31:06] [Client thread/INFO]: [CHAT] The match has started! +[23:31:06] [Client thread/INFO]: [CHAT] +[23:31:06] [Client thread/INFO]: [CHAT] Bed Fight +[23:31:06] [Client thread/INFO]: [CHAT] Break the other team's bed and eliminate them! +[23:31:06] [Client thread/INFO]: [CHAT] +[23:31:12] [Client thread/INFO]: [CHAT] ceyio: NOO +[23:31:15] [Client thread/INFO]: [CHAT] SchwebbThePlant: noo +[23:31:17] [Client thread/INFO]: [CHAT] xt3m: nc cheats +[23:31:19] [Client thread/INFO]: [CHAT] _Mathy207_: AyoSeba devo fare altre cose non posso stare 24h su mc +[23:31:20] [Client thread/INFO]: [CHAT] [āƒ] JustW: helo +[23:31:20] [Client thread/INFO]: [CHAT] qefogkr: bro didnt sort +[23:31:23] [Client thread/INFO]: [CHAT] qefogkr: my invvv +[23:31:24] [Client thread/INFO]: [CHAT] Audi_RS7: GG +[23:31:24] [Client thread/INFO]: [CHAT] [āƒ] JustW: hala city +[23:31:26] [Client thread/INFO]: [CHAT] _Mathy207_: AyoSeba se lo dici tu +[23:31:28] [Client thread/INFO]: [CHAT] bonniebleuv2: gg +[23:31:29] [Client thread/INFO]: [CHAT] MioFratello: JosipL cmon +[23:31:30] [Client thread/INFO]: [CHAT] _Mathy207_: AyoSeba bb +[23:31:31] [Client thread/INFO]: [CHAT] mcdonaldperry: GG +[23:31:32] [Client thread/INFO]: [CHAT] ViperSlayer007: gg +[23:31:32] [Client thread/INFO]: [CHAT] Abde_Nnour: wow +[23:31:33] [Client thread/INFO]: [CHAT] You can't place there. +[23:31:33] [Client thread/INFO]: [CHAT] You can't place there. +[23:31:33] [Client thread/INFO]: [CHAT] You can't place there. +[23:31:33] [Client thread/INFO]: [CHAT] You can't place there. +[23:31:36] [Client thread/INFO]: [CHAT] Blissolic was killed by ziue! +[23:31:36] [Client thread/INFO]: [CHAT] lil_rapstar: ?: +[23:31:40] [Client thread/INFO]: [CHAT] ziue was killed by Blissolic! +[23:31:40] [Client thread/INFO]: [CHAT] Respawning in 3... +[23:31:40] [Client thread/INFO]: [CHAT] ProHacks: enough +[23:31:41] [Client thread/INFO]: [CHAT] Respawning in 2... +[23:31:42] [Client thread/INFO]: [CHAT] Respawning in 1... +[23:31:43] [Client thread/INFO]: [CHAT] You have respawned. +[23:31:43] [Client thread/INFO]: [CHAT] ceyio: e z +[23:31:44] [Client thread/INFO]: [CHAT] qefogkr: my invvv +[23:31:44] [Client thread/INFO]: [CHAT] [āƒ] BestEngland2 ā¤: RANKED INVADED WIN = LUNAR CLOAK +[23:31:45] [Client thread/INFO]: [CHAT] SumoTechnology: Ranked Sumo +[23:31:46] [Client thread/INFO]: [CHAT] Talhaww: no spa tgotunuzu ticem +[23:31:46] [Client thread/INFO]: [CHAT] Abde_Nnour: toxic +[23:31:48] [Client thread/INFO]: [CHAT] Audi_RS7: G +[23:31:48] [Client thread/INFO]: [CHAT] JusTRicky: g +[23:31:49] [Client thread/INFO]: [CHAT] Incomandavel: gapple +[23:31:50] [Client thread/INFO]: [CHAT] lil_rapstar: me? +[23:31:53] [Client thread/INFO]: [CHAT] ziue was killed by Blissolic! +[23:31:53] [Client thread/INFO]: [CHAT] Respawning in 3... +[23:31:53] [Client thread/INFO]: [CHAT] +[23:31:53] [Client thread/INFO]: [CHAT] Event +[23:31:53] [Client thread/INFO]: [CHAT] ā— Players: 0 +[23:31:53] [Client thread/INFO]: [CHAT] ā— Event: Sumo 1v1 +[23:31:53] [Client thread/INFO]: [CHAT] ā— Host: JustW +[23:31:53] [Client thread/INFO]: [CHAT] Ā§aĀ§l[CLICK TO JOIN] +[23:31:53] [Client thread/INFO]: [CHAT] +[23:31:54] [Client thread/INFO]: [CHAT] Respawning in 2... +[23:31:55] [Client thread/INFO]: [CHAT] Respawning in 1... +[23:31:56] [Client thread/INFO]: [CHAT] You have respawned. +[23:31:56] [Client thread/INFO]: [CHAT] ceyio: italiani duellate ;()()()() +[23:32:00] [Client thread/INFO]: [CHAT] Club Ā» TerrellOwel joined. +[23:32:00] [Client thread/INFO]: [CHAT] Blissolic was killed by ziue! +[23:32:02] [Client thread/INFO]: [CHAT] ziue was killed by Blissolic! +[23:32:02] [Client thread/INFO]: [CHAT] Respawning in 3... +[23:32:03] [Client thread/INFO]: [CHAT] Respawning in 2... +[23:32:04] [Client thread/INFO]: [CHAT] Respawning in 1... +[23:32:04] [Client thread/INFO]: [CHAT] [āƒ] BestEngland2 ā¤: RANKED INVADED WIN = LUNAR CLOAK +[23:32:05] [Client thread/INFO]: [CHAT] You have respawned. +[23:32:08] [Client thread/INFO]: [CHAT] +[23:32:08] [Client thread/INFO]: [CHAT] Event +[23:32:08] [Client thread/INFO]: [CHAT] ā— Players: 11 +[23:32:08] [Client thread/INFO]: [CHAT] ā— Event: Sumo 1v1 +[23:32:08] [Client thread/INFO]: [CHAT] ā— Host: JustW +[23:32:08] [Client thread/INFO]: [CHAT] Ā§aĀ§l[CLICK TO JOIN] +[23:32:08] [Client thread/INFO]: [CHAT] +[23:32:09] [Client thread/ERROR]: Item entity 3910344 has no item?! +[23:32:09] [Client thread/ERROR]: Item entity 3910344 has no item?! +[23:32:12] [Client thread/INFO]: [CHAT] Mister_Iron: reaL +[23:32:14] [Client thread/INFO]: [CHAT] Blissolic was killed by ziue! +[23:32:15] [Client thread/INFO]: [CHAT] Abde_Nnour: e z +[23:32:18] [Client thread/INFO]: [CHAT] +[23:32:18] [Client thread/INFO]: [CHAT] [Practice] Want to play with a friend? Use /duel +[23:32:18] [Client thread/INFO]: [CHAT] +[23:32:19] [Client thread/INFO]: [CHAT] lil_rapstar: why +[23:32:20] [Client thread/INFO]: [CHAT] [āƒ] StandMi āøØ.Champion.āø©: gg +[23:32:23] [Client thread/INFO]: [CHAT] +[23:32:23] [Client thread/INFO]: [CHAT] Event +[23:32:23] [Client thread/INFO]: [CHAT] ā— Players: 20 +[23:32:23] [Client thread/INFO]: [CHAT] ā— Event: Sumo 1v1 +[23:32:23] [Client thread/INFO]: [CHAT] ā— Host: JustW +[23:32:23] [Client thread/INFO]: [CHAT] Ā§aĀ§l[CLICK TO JOIN] +[23:32:23] [Client thread/INFO]: [CHAT] +[23:32:25] [Client thread/INFO]: [CHAT] ziue was killed by Blissolic! +[23:32:25] [Client thread/INFO]: [CHAT] Respawning in 3... +[23:32:26] [Client thread/INFO]: [CHAT] Respawning in 2... +[23:32:26] [Client thread/INFO]: [CHAT] [āƒ] BestEngland2 ā¤: StandMi 1v1 nodebuff? +[23:32:27] [Client thread/INFO]: [CHAT] Respawning in 1... +[23:32:28] [Client thread/INFO]: [CHAT] You have respawned. +[23:32:31] [Client thread/INFO]: [CHAT] Ā§dĀ§lNA UHC MeetupĀ§7Ā§l Ā» Ā§bRollRealQuickĀ§e wants you to play! (Join) +[23:32:38] [Client thread/INFO]: [CHAT] +[23:32:38] [Client thread/INFO]: [CHAT] āœ˜ Incomandavel was banned by AntiGamingChair for Unfair Advantage. +[23:32:38] [Client thread/INFO]: [CHAT] +[23:32:38] [Client thread/INFO]: [CHAT] ziue was killed by Blissolic! +[23:32:38] [Client thread/INFO]: [CHAT] Respawning in 3... +[23:32:38] [Client thread/INFO]: [CHAT] +[23:32:38] [Client thread/INFO]: [CHAT] Event +[23:32:38] [Client thread/INFO]: [CHAT] ā— Players: 25 +[23:32:38] [Client thread/INFO]: [CHAT] ā— Event: Sumo 1v1 +[23:32:38] [Client thread/INFO]: [CHAT] ā— Host: JustW +[23:32:38] [Client thread/INFO]: [CHAT] Ā§aĀ§l[CLICK TO JOIN] +[23:32:38] [Client thread/INFO]: [CHAT] +[23:32:39] [Client thread/INFO]: [CHAT] Respawning in 2... +[23:32:40] [Client thread/INFO]: [CHAT] Respawning in 1... +[23:32:41] [Client thread/INFO]: [CHAT] You have respawned. +[23:32:45] [Client thread/INFO]: [CHAT] oCritz started spectating. +[23:32:46] [Client thread/INFO]: [CHAT] Blissolic was killed by ziue! +[23:32:49] [Client thread/INFO]: [CHAT] [āƒ] StandMi āøØ.Champion.āø©: KEY & MOUSE LIVE [FR] : https://www.youtube.com/watch?v=3uoSfnO7eFs&ab_channel=StandMi +[23:32:54] [Client thread/INFO]: [CHAT] Ā§dĀ§lNA UHC MeetupĀ§7Ā§l Ā» Ā§bRollRealQuickĀ§e wants you to play! (Join) +[23:32:56] [Client thread/INFO]: [CHAT] ziue was killed by Blissolic! +[23:32:56] [Client thread/INFO]: [CHAT] Respawning in 3... +[23:32:57] [Client thread/INFO]: [CHAT] Respawning in 2... +[23:32:58] [Client thread/INFO]: [CHAT] [āœ·] Clqps ŪŖŪ«ā˜ƒŪ°ŪŖŪ«: QUEUE UNRANKED SKYAWRS +[23:32:58] [Client thread/INFO]: [CHAT] AiYukiii: szamy tu pues la merde +[23:32:58] [Client thread/INFO]: [CHAT] Respawning in 1... +[23:32:58] [Client thread/INFO]: [CHAT] MeowXx_: gg +[23:32:59] [Client thread/INFO]: [CHAT] 9bearr: gg +[23:32:59] [Client thread/INFO]: [CHAT] You have respawned. +[23:33:00] [Client thread/INFO]: [CHAT] Axysvl: Ć¹ +[23:33:06] [Client thread/INFO]: [CHAT] cserrbyy: non ti farmare ogni 3 secondi perĆ² +[23:33:07] [Client thread/INFO]: [CHAT] Blissolic was killed by ziue! +[23:33:10] [Client thread/INFO]: [CHAT] oNotYou: no +[23:33:11] [Client thread/INFO]: [CHAT] [āƒ] BestEngland2 ā¤: RANKED INVADED WIN = LUNAR CLOAK +[23:33:12] [Client thread/INFO]: [CHAT] _Haribooo: gg +[23:33:15] [Client thread/INFO]: [CHAT] You can't place there. +[23:33:15] [Client thread/INFO]: [CHAT] You can't place there. +[23:33:18] [Client thread/INFO]: [CHAT] 9bearr: REGALO VIP A CHI MI BATTE BOXING = +[23:33:22] [Client thread/INFO]: [CHAT] cserrbyy: accetta +[23:33:25] [Client thread/INFO]: [CHAT] iridiska210: xd +[23:33:25] [Client thread/INFO]: [CHAT] [āœ½] BLUEOG_ āœŸ: porcodio ho sbagliato +[23:33:26] [Client thread/INFO]: [CHAT] cserrbyy: mi sto riscaldando +[23:33:31] [Client thread/INFO]: [CHAT] ziue was killed by Blissolic! +[23:33:31] [Client thread/INFO]: [CHAT] Respawning in 3... +[23:33:32] [Client thread/INFO]: [CHAT] Skowzk: bro all ppl in this server i +[23:33:32] [Client thread/INFO]: [CHAT] Respawning in 2... +[23:33:33] [Client thread/INFO]: [CHAT] Respawning in 1... +[23:33:34] [Client thread/INFO]: [CHAT] You have respawned. +[23:33:35] [Client thread/INFO]: [CHAT] Skowzk: use a autoclick +[23:33:36] [Client thread/INFO]: [CHAT] 9bearr: cserrbyy hai perso dopo ti riduello +[23:33:43] [Client thread/INFO]: [CHAT] Blissolic was killed by ziue! +[23:33:46] [Client thread/INFO]: [CHAT] Talhaww: spammer +[23:33:47] [Client thread/INFO]: [CHAT] [āœ·] Clqps ŪŖŪ«ā˜ƒŪ°ŪŖŪ«: QUEUE UNRANKED SKYAWRS +[23:33:47] [Client thread/INFO]: [CHAT] Audi_RS7: wtf +[23:33:47] [Client thread/INFO]: [CHAT] You can't place there. +[23:33:48] [Client thread/INFO]: [CHAT] You can't place there. +[23:33:49] [Client thread/INFO]: [CHAT] ateerek: gapple +[23:33:51] [Client thread/INFO]: [CHAT] Audi_RS7: 600ms +[23:33:51] [Client thread/INFO]: [CHAT] You can't place there. +[23:33:52] [Client thread/INFO]: [CHAT] You can't place there. +[23:33:54] [Client thread/INFO]: [CHAT] [āœ½] BLUEOG_ āœŸ: be? +[23:33:57] [Client thread/INFO]: [CHAT] BaZooka12: gf +[23:34:00] [Client thread/INFO]: [CHAT] Dietxh: Dietxh +[23:34:00] [Client thread/INFO]: [CHAT] ziue was killed by Blissolic! +[23:34:00] [Client thread/INFO]: [CHAT] Respawning in 3... +[23:34:01] [Client thread/INFO]: [CHAT] Respawning in 2... +[23:34:02] [Client thread/INFO]: [CHAT] Respawning in 1... +[23:34:03] [Client thread/INFO]: [CHAT] You have respawned. +[23:34:05] [Client thread/INFO]: [CHAT] 9bearr: aspee BLUEOG_ +[23:34:07] [Client thread/INFO]: [CHAT] Sqaky: gf +[23:34:08] [Client thread/INFO]: [CHAT] 9bearr: dopo di lui ti duello +[23:34:11] [Client thread/INFO]: [CHAT] Blissolic was killed by ziue! +[23:34:12] [Client thread/INFO]: [CHAT] You can't place there. +[23:34:14] [Client thread/INFO]: [CHAT] macaric081: gg +[23:34:15] [Client thread/INFO]: [CHAT] You can't place there. +[23:34:17] [Client thread/INFO]: [CHAT] Pznic: gg +[23:34:18] [Client thread/INFO]: [CHAT] +[23:34:18] [Client thread/INFO]: [CHAT] [MMC] Giveaways, Events, Updates: minemen.club/discord +[23:34:18] [Client thread/INFO]: [CHAT] +[23:34:22] [Client thread/INFO]: [CHAT] Razi_Gold: x) +[23:34:24] [Client thread/INFO]: [CHAT] dontownsyou: ranked nd 0-2 +[23:34:25] [Client thread/ERROR]: Item entity 3920275 has no item?! +[23:34:25] [Client thread/ERROR]: Item entity 3920275 has no item?! +[23:34:26] [Client thread/INFO]: [CHAT] Amanogawa__: TTTT +[23:34:28] [Client thread/ERROR]: Item entity 3920538 has no item?! +[23:34:28] [Client thread/ERROR]: Item entity 3920538 has no item?! +[23:34:28] [Client thread/ERROR]: Item entity 3920538 has no item?! +[23:34:28] [Client thread/ERROR]: Item entity 3920538 has no item?! +[23:34:29] [Client thread/INFO]: [CHAT] ZokeCat: no mic +[23:34:33] [Client thread/ERROR]: Item entity 3920970 has no item?! +[23:34:33] [Client thread/ERROR]: Item entity 3920970 has no item?! +[23:34:34] [Client thread/ERROR]: Item entity 3921125 has no item?! +[23:34:34] [Client thread/ERROR]: Item entity 3921125 has no item?! +[23:34:35] [Client thread/INFO]: [CHAT] Miskafi: sweat +[23:34:35] [Client thread/INFO]: [CHAT] daredcorgi13184: gg +[23:34:41] [Client thread/INFO]: [CHAT] +[23:34:41] [Client thread/INFO]: [CHAT] āœ˜ JAVhnsy was banned by AntiGamingChair for Unfair Advantage. +[23:34:41] [Client thread/INFO]: [CHAT] +[23:34:42] [Client thread/INFO]: [CHAT] WibbleWoobble: xd +[23:34:43] [Client thread/INFO]: [CHAT] __GodWalk__: gg +[23:34:46] [Client thread/INFO]: [CHAT] oBluee: nochmal +[23:34:46] [Client thread/ERROR]: Item entity 3921946 has no item?! +[23:34:46] [Client thread/ERROR]: Item entity 3921946 has no item?! +[23:34:46] [Client thread/INFO]: [CHAT] [āƒ] BestEngland2 ā¤: RANKED INVADED WIN = LUNAR CLOAK +[23:34:47] [Client thread/INFO]: [CHAT] Andris12: gg +[23:34:48] [Client thread/INFO]: [CHAT] JusTRicky: aspe +[23:34:49] [Client thread/INFO]: [CHAT] +[23:34:49] [Client thread/INFO]: [CHAT] BED DESTRUCTION > Blue Bed was destroyed by ziue! +[23:34:49] [Client thread/INFO]: [CHAT] +[23:34:51] [Client thread/INFO]: [CHAT] Blissolic was killed! FINAL KILL +[23:34:51] [Client thread/INFO]: [CHAT] +[23:34:51] [Client thread/INFO]: [CHAT] Match Results (click player to view): +[23:34:51] [Client thread/INFO]: [CHAT] Winner: ziue ā– Loser: Blissolic +[23:34:51] [Client thread/INFO]: [CHAT] +[23:34:51] [Client thread/INFO]: [CHAT] Spectators (2): AGPS, oCritz +[23:34:53] [Client thread/INFO]: [CHAT] [āœ·] ziue iā‚‰ā¹ā‚‰i: :) +[23:34:56] [Client thread/INFO]: [CHAT] macaric081: gg +[23:34:59] [Client thread/INFO]: [CHAT] +[23:34:59] [Client thread/INFO]: [CHAT] Sent Request +[23:34:59] [Client thread/INFO]: [CHAT] ā— To: Blissolic +[23:34:59] [Client thread/INFO]: [CHAT] ā— Kit: Boxing +[23:34:59] [Client thread/INFO]: [CHAT] ā— Map: Soccer +[23:34:59] [Client thread/INFO]: [CHAT] +[23:35:00] [Client thread/INFO]: [CHAT] You have already sent a duel request to that player. Please wait until it expires. +[23:35:00] [Client thread/INFO]: [CHAT] You have already sent a duel request to that player. Please wait until it expires. +[23:35:00] [Client thread/INFO]: [CHAT] You have already sent a duel request to that player. Please wait until it expires. +[23:35:00] [Client thread/INFO]: [CHAT] You have already sent a duel request to that player. Please wait until it expires. +[23:35:00] [Client thread/INFO]: [CHAT] You have already sent a duel request to that player. Please wait until it expires. +[23:35:00] [Client thread/INFO]: [CHAT] You have already sent a duel request to that player. Please wait until it expires. +[23:35:00] [Client thread/INFO]: [CHAT] You have already sent a duel request to that player. Please wait until it expires. +[23:35:00] [Client thread/INFO]: [CHAT] You have already sent a duel request to that player. Please wait until it expires. +[23:35:02] [Client thread/INFO]: [CHAT] Audi_RS7: i beat an nft +[23:35:07] [Client thread/INFO]: [CHAT] oBluee: nochmal +[23:35:10] [Client thread/INFO]: [CHAT] CCL: his ign is def ccl +[23:35:14] [Client thread/INFO]: [CHAT] WireIess: gf +[23:35:14] [Client thread/INFO]: [CHAT] oBluee: topfight nochakl +[23:35:25] [Client thread/INFO]: [CHAT] CaptainChall: i am nft +[23:35:25] [Client thread/INFO]: [CHAT] NotDestroyet: cringe +[23:35:25] [Client thread/INFO]: [CHAT] CCL: hola +[23:35:30] [Client thread/INFO]: [CHAT] Audi_RS7: yes +[23:35:34] [Client thread/INFO]: [CHAT] Sqaky: ffs +[23:35:34] [Client thread/INFO]: [CHAT] NotDestroyet: CRINGEEEEEE +[23:35:36] [Client thread/INFO]: [CHAT] 7wayze: gg +[23:35:37] [Client thread/INFO]: [CHAT] 9bearr: gg +[23:35:38] [Client thread/INFO]: [CHAT] mangeurdechat: q sumo +[23:35:38] [Client thread/INFO]: [CHAT] JavaJakob BEDFIGHT MASTER: gg +[23:35:40] [Client thread/INFO]: [CHAT] viexuus: ggg +[23:35:52] [Client thread/INFO]: [CHAT] h6a: gg +[23:35:53] [Client thread/INFO]: [CHAT] Audi_RS7: nft skin +[23:35:54] [Client thread/INFO]: [CHAT] Neeyo__14: no rod pls +[23:35:57] [Client thread/INFO]: [CHAT] Neeyo__14: ? +[23:35:57] [Client thread/INFO]: [CHAT] Simo809TheZombi3: dio can +[23:35:59] [Client thread/INFO]: [CHAT] CaptainChall: i agree +[23:36:02] [Client thread/INFO]: [CHAT] mangeurdechat: q sumo +[23:36:06] [Client thread/INFO]: [CHAT] NotDestroyet: Qadoi cringe +[23:36:09] [Client thread/INFO]: [CHAT] CCL: pInG SpOoFiNg!!11! +[23:36:11] [Client thread/INFO]: [CHAT] bonniebleuv2: gf +[23:36:12] [Client thread/INFO]: [CHAT] MioFratello: peace +[23:36:18] [Client thread/INFO]: [CHAT] +[23:36:18] [Client thread/INFO]: [CHAT] [MMC] Follow for updates: twitter.com/Minemen_Network +[23:36:18] [Client thread/INFO]: [CHAT] +[23:36:26] [Client thread/INFO]: [CHAT] Smoouky: a +[23:36:28] [Client thread/INFO]: [CHAT] POEBEN: yoo +[23:36:33] [Client thread/INFO]: [CHAT] ZokeCat: ILBxddy_ mi accetti sumo +[23:36:34] [Client thread/INFO]: [CHAT] ZopreX: gf +[23:36:36] [Client thread/INFO]: [CHAT] Please enter any additional information: +[23:36:39] [Client thread/INFO]: [CHAT] Your report was cancelled as you didn't provide a reason within a reasonable amount of time. +[23:36:44] [Client thread/INFO]: [CHAT] Please enter any additional information: +[23:36:44] [Client thread/INFO]: [CHAT] Your report has been submitted. +[23:36:49] [Client thread/INFO]: [CHAT] DavutPvP45: fgkhjlbşngf +[23:36:50] [Client thread/INFO]: [CHAT] Blissolic is not in spawn. +[23:36:51] [Client thread/INFO]: [CHAT] Babunde: ungyld +[23:36:52] [Client thread/INFO]: [CHAT] Blissolic is not in spawn. +[23:36:53] [Client thread/INFO]: [CHAT] Blissolic is not in spawn. +[23:36:54] [Client thread/INFO]: [CHAT] dumpXfolder: sRyaK_ dropped MDRRRRRRRR +[23:36:54] [Client thread/INFO]: [CHAT] Kawaqh: duel moi xKazeD +[23:36:54] [Client thread/INFO]: [CHAT] JusTRicky: g +[23:36:54] [Client thread/INFO]: [CHAT] Blissolic is not in spawn. +[23:36:56] [Client thread/INFO]: [CHAT] Blissolic is not in spawn. +[23:36:58] [Client thread/INFO]: [CHAT] +[23:36:58] [Client thread/INFO]: [CHAT] Sent Request +[23:36:58] [Client thread/INFO]: [CHAT] ā— To: Blissolic +[23:36:58] [Client thread/INFO]: [CHAT] ā— Kit: Boxing +[23:36:58] [Client thread/INFO]: [CHAT] ā— Map: Soccer +[23:36:58] [Client thread/INFO]: [CHAT] +[23:37:00] [Client thread/INFO]: [CHAT] halms: NotDestroyet fai cagare +[23:37:01] [Client thread/INFO]: [CHAT] +[23:37:01] [Client thread/INFO]: [CHAT] Boxing Duel +[23:37:01] [Client thread/INFO]: [CHAT] ā— Map: Soccer +[23:37:01] [Client thread/INFO]: [CHAT] ā— Opponent: Blissolic +[23:37:01] [Client thread/INFO]: [CHAT] ā— Ping: 7 ms +[23:37:01] [Client thread/INFO]: [CHAT] +[23:37:01] [Client thread/INFO]: [CHAT] 5... +[23:37:02] [Client thread/INFO]: [CHAT] 4... +[23:37:03] [Client thread/INFO]: [CHAT] sRyaK_: dumpXfolder???????? +[23:37:03] [Client thread/INFO]: [CHAT] 3... +[23:37:04] [Client thread/INFO]: [CHAT] zfedq: oe +[23:37:04] [Client thread/INFO]: [CHAT] 2... +[23:37:05] [Client thread/INFO]: [CHAT] 1... +[23:37:06] [Client thread/INFO]: [CHAT] NotDestroyet: halms a caso +[23:37:06] [Client thread/INFO]: [CHAT] The match has started! +[23:37:06] [Client thread/INFO]: [CHAT] +[23:37:06] [Client thread/INFO]: [CHAT] Boxing +[23:37:06] [Client thread/INFO]: [CHAT] First to 100 hits wins! +[23:37:06] [Client thread/INFO]: [CHAT] +[23:37:07] [Client thread/INFO]: [CHAT] Razyness: RAAAHHHH +[23:37:12] [Client thread/INFO]: [CHAT] dumpXfolder: t'as drop +[23:37:13] [Client thread/INFO]: [CHAT] zfedq: erti davartyimarto +[23:37:14] [Client thread/INFO]: [CHAT] IdragonISMO: bro +[23:37:15] [Client thread/INFO]: [CHAT] Yousef_01: bro +[23:37:16] [Client thread/INFO]: [CHAT] zfedq: esvinaa +[23:37:18] [Client thread/INFO]: [CHAT] 9bearr: LOL +[23:37:19] [Client thread/INFO]: [CHAT] [āœ½] BLUEOG_ āœŸ: be il mio vip? +[23:37:23] [Client thread/INFO]: [CHAT] 9bearr: rifa +[23:37:25] [Client thread/INFO]: [CHAT] NotDestroyet: halms ma stai zitto che non sia nemenno giocare XD +[23:37:29] [Client thread/INFO]: [CHAT] WibbleWoobble: gg +[23:37:30] [Client thread/INFO]: [CHAT] ryanfth: zRqxed leva la pot +[23:37:34] [Client thread/INFO]: [CHAT] zRqxed: ok +[23:37:34] [Client thread/INFO]: [CHAT] NotDestroyet: sai* +[23:37:35] [Client thread/INFO]: [CHAT] mangeurdechat: Q +[23:37:36] [Client thread/INFO]: [CHAT] mcdonaldperry: gg +[23:37:37] [Client thread/INFO]: [CHAT] Ā§dĀ§lNA SGĀ§7Ā§l Ā» Ā§dspiydrĀ§e wants you to play! (Join) +[23:37:39] [Client thread/INFO]: [CHAT] 9bearr: lol +[23:37:39] [Client thread/INFO]: [CHAT] DavutPvP45: LOL, +[23:37:42] [Client thread/INFO]: [CHAT] Xa1v3r: gg +[23:37:44] [Client thread/INFO]: [CHAT] Hipis1272: bro +[23:37:44] [Client thread/INFO]: [CHAT] ElectroTheCow: LMAO +[23:37:45] [Client thread/INFO]: [CHAT] Neeyo__14: gg +[23:37:53] [Client thread/INFO]: [CHAT] NotDestroyet: halms torna a lavorare bimbo di minchia LOL +[23:37:54] [Client thread/INFO]: [CHAT] mcdonaldperry: unranked bridge +[23:37:56] [Client thread/INFO]: [CHAT] lil_rapstar: - +[23:37:56] [Client thread/INFO]: [CHAT] SumoTechnology: Ranked Sumo +[23:38:02] [Client thread/INFO]: [CHAT] WireIess: gf +[23:38:04] [Client thread/INFO]: [CHAT] halms: NotDestroyet zitto addicted del cazzo +[23:38:07] [Client thread/INFO]: [CHAT] iadmit: someone duel me boxing no runners plz +[23:38:08] [Client thread/INFO]: [CHAT] AlgerienDeter: nn pas sumo +[23:38:09] [Client thread/INFO]: [CHAT] NotDestroyet: a caso XD +[23:38:09] [Client thread/INFO]: [CHAT] oCritz started spectating. +[23:38:17] [Client thread/INFO]: [CHAT] OliviaRodrigoSta: ggsa +[23:38:18] [Client thread/INFO]: [CHAT] +[23:38:18] [Client thread/INFO]: [CHAT] [MMC] Buy perks here: store.minemen.club +[23:38:18] [Client thread/INFO]: [CHAT] +[23:38:20] [Client thread/INFO]: [CHAT] ziue was killed by Blissolic! +[23:38:20] [Client thread/INFO]: [CHAT] +[23:38:20] [Client thread/INFO]: [CHAT] Match Results (click player to view): +[23:38:20] [Client thread/INFO]: [CHAT] Winner: Blissolic ā– Loser: ziue +[23:38:20] [Client thread/INFO]: [CHAT] +[23:38:20] [Client thread/INFO]: [CHAT] Spectators (1): oCritz +[23:38:21] [Client thread/INFO]: [CHAT] [āœ·] ziue iā‚‰ā¹ā‚‰i: ggs +[23:38:30] [Client thread/INFO]: [CHAT] That player is not in spawn. +[23:38:33] [Client thread/INFO]: [CHAT] iadmit: someone duel me boxing plz NO RUNNERS plz +[23:38:36] [Client thread/INFO]: [CHAT] _pociwicz: what +[23:38:36] [Client thread/INFO]: [CHAT] Audi_RS7: LOL +[23:38:36] [Client thread/INFO]: [CHAT] Arif000: RoiZit imagine losing with a cheat +[23:38:40] [Client thread/INFO]: [CHAT] GucciBoyy: ?????? +[23:38:41] [Client thread/INFO]: [CHAT] Talhaww: oc +[23:38:45] [Client thread/INFO]: [CHAT] Abde_Nnour: gg +[23:38:45] [Client thread/INFO]: [CHAT] AiYukiii: tt +[23:38:50] [Client thread/INFO]: [CHAT] ElectroTheCow: I just twerk +[23:38:52] [Client thread/INFO]: [CHAT] GucciBoyy: ?????????? +[23:38:56] [Client thread/INFO]: [CHAT] +[23:38:56] [Client thread/INFO]: [CHAT] āœ˜ mangeurdechat was banned by AntiGamingChair for Unfair Advantage. +[23:38:56] [Client thread/INFO]: [CHAT] +[23:38:57] [Client thread/INFO]: [CHAT] KnockUpStream: tt +[23:38:57] [Client thread/INFO]: [CHAT] CCL: im so bad lmao +[23:38:59] [Client thread/INFO]: [CHAT] WireIess: lmao +[23:38:59] [Client thread/INFO]: [CHAT] Krispigaste: gg +[23:39:19] [Client thread/INFO]: [CHAT] GucciBoyy: ?????????? +[23:39:19] [Client thread/INFO]: [CHAT] [āœ½] BLUEOG_ āœŸ: be il mio vip? +[23:39:21] [Client thread/INFO]: [CHAT] ElectroTheCow: GG +[23:39:24] [Client thread/INFO]: [CHAT] Talhaww: you win bro +[23:39:26] [Client thread/INFO]: [CHAT] msiq: m +[23:39:27] [Client thread/INFO]: [CHAT] DDMD: elchapo care esti +[23:39:30] [Client thread/INFO]: [CHAT] NotDestroyet: GodBrdger addicted +[23:39:30] [Client thread/INFO]: [CHAT] dontownsyou: ranked sumo +[23:39:33] [Client thread/INFO]: [CHAT] Nethaj_Blondi121: Eu +[23:39:34] [Client thread/INFO]: [CHAT] CCL: gf +[23:39:40] [Client thread/INFO]: [CHAT] Turelloxx: invaded dude who gifys lunar cloack im heare +[23:39:43] [Client thread/INFO]: [CHAT] zRqxed: gf +[23:39:49] [Client thread/INFO]: [CHAT] CCL: <3 +[23:39:50] [Client thread/INFO]: [CHAT] SumoTechnology: Ranked Sumo +[23:39:53] [Client thread/INFO]: [CHAT] alexis2604: gg +[23:39:54] [Client thread/INFO]: [CHAT] SpammerRod: :r en plus il blink le malade +[23:39:56] [Client thread/INFO]: [CHAT] +[23:39:56] [Client thread/INFO]: [CHAT] Event +[23:39:56] [Client thread/INFO]: [CHAT] ā— Winner: x_Anime_x +[23:39:56] [Client thread/INFO]: [CHAT] +[23:39:58] [Client thread/INFO]: [CHAT] 125d: gg +[23:39:59] [Client thread/INFO]: [CHAT] Drxwlz: iridiska210 fold +[23:40:02] [Client thread/INFO]: [CHAT] GreenBerry_: ggĆ  +[23:40:04] [Client thread/INFO]: [CHAT] Ā§dĀ§lEU SGĀ§7Ā§l Ā» Ā§dCoinMarketĀ§e wants you to play! (Join) +[23:40:07] [Client thread/INFO]: [CHAT] Asellandro: gg reach +[23:40:07] [Client thread/INFO]: [CHAT] sRyaK_: bella la mia rod +[23:40:10] [Client thread/INFO]: [CHAT] [āœ·] Clqps ŪŖŪ«ā˜ƒŪ°ŪŖŪ«: QUEUE UNRANKED SKYWARS +[23:40:10] [Client thread/INFO]: [CHAT] DDMD: gf +[23:40:11] [Client thread/INFO]: [CHAT] sRyaK_: funziona benissimo +[23:40:12] [Client thread/INFO]: [CHAT] [āœ·] Clqps ŪŖŪ«ā˜ƒŪ°ŪŖŪ«: shit +[23:40:15] [Client thread/INFO]: [CHAT] OMGmaestru: sRyaK_ davvero +[23:40:18] [Client thread/INFO]: [CHAT] +[23:40:18] [Client thread/INFO]: [CHAT] [MMC] Apply for staff: minemen.club/applications +[23:40:18] [Client thread/INFO]: [CHAT] +[23:40:19] [Client thread/INFO]: [CHAT] Nethaj_Blondi121: Main meu e boxing +[23:40:20] [Client thread/INFO]: [CHAT] Ā§dĀ§lEU SGĀ§7Ā§l Ā» Ā§dCoinMarketĀ§e wants you to play! (Join) +[23:40:28] [Client thread/INFO]: [CHAT] Andris12: gg +[23:40:29] [Client thread/INFO]: [CHAT] Spartako_: :hub +[23:40:30] [Client thread/INFO]: [CHAT] +[23:40:30] [Client thread/INFO]: [CHAT] āœ˜ Plusieurs was banned by AntiGamingChair for Unfair Advantage. +[23:40:30] [Client thread/INFO]: [CHAT] +[23:40:37] [Client thread/INFO]: [CHAT] Andris12: revance? +[23:40:38] [Client thread/INFO]: [CHAT] Asellandro: immagine usare la reach Krispigaste +[23:40:42] [Client thread/INFO]: [CHAT] Ā§dĀ§lEU SGĀ§7Ā§l Ā» Ā§dCoinMarketĀ§e wants you to play! (Join) +[23:40:46] [Client thread/INFO]: [CHAT] adriser00: r +[23:41:03] [Client thread/INFO]: [CHAT] Ā§dĀ§lEU SGĀ§7Ā§l Ā» Ā§dCoinMarketĀ§e wants you to play! (Join) +[23:41:06] [Client thread/INFO]: [CHAT] GreenBerry_: gg +[23:41:09] [Client thread/INFO]: [CHAT] ZokeCat: lollo018 no +[23:41:11] [Client thread/INFO]: [CHAT] NotDestroyet: lucky +[23:41:11] [Client thread/INFO]: [CHAT] 9bearr: duellate boxing solo gente forte +[23:41:13] [Client thread/INFO]: [CHAT] SierraLeonee: you are fucking awful +[23:41:17] [Client thread/INFO]: [CHAT] ZokeCat: non lo so lollo018 +[23:41:24] [Client thread/INFO]: [CHAT] GANGMEMBERFO: 2v2 pearl fight +[23:41:27] [Client thread/INFO]: [CHAT] ryanfth: che palle la pot +[23:41:42] [Client thread/INFO]: [CHAT] Ā§dĀ§lEU SGĀ§7Ā§l Ā» Ā§dCoinMarketĀ§e wants you to play! (Join) +[23:41:43] [Client thread/INFO]: [CHAT] Akazaa3: ky +[23:41:43] [Client thread/INFO]: [CHAT] ySeb: a +[23:41:50] [Client thread/INFO]: [CHAT] Talhaww: osopsap wh8 +[23:41:50] [Client thread/INFO]: [CHAT] Zchap NODEBUFF MASTER: wat +[23:41:56] [Client thread/INFO]: [CHAT] zEq1n0x: BestAgany +[23:42:01] [Client thread/INFO]: [CHAT] dontownsyou: gg +[23:42:01] [Client thread/INFO]: [CHAT] BestAgany: bekle +[23:42:05] [Client thread/INFO]: [CHAT] BestAgany: ark girio +[23:42:08] [Client thread/INFO]: [CHAT] DDMD: 2-0\ +[23:42:08] [Client thread/INFO]: [CHAT] ElectroTheCow: BG +[23:42:08] [Client thread/INFO]: [CHAT] SumoTechnology: Ranked Sumo +[23:42:11] [Client thread/INFO]: [CHAT] Nethaj_Blondi121: 1-0 +[23:42:15] [Client thread/INFO]: [CHAT] BestAgany: party kurn +[23:42:16] [Client thread/INFO]: [CHAT] Nethaj_Blondi121: Te ai tras cu s +[23:42:18] [Client thread/INFO]: [CHAT] DDMD: 2-0 +[23:42:18] [Client thread/INFO]: [CHAT] +[23:42:18] [Client thread/INFO]: [CHAT] [MMC] Need /disguise? Buy ACE Rank: store.minemen.club +[23:42:18] [Client thread/INFO]: [CHAT] +[23:42:26] [Client thread/INFO]: [CHAT] Zchap NODEBUFF MASTER: gg +[23:42:26] [Client thread/INFO]: [CHAT] DDMD: dai accept 2-0 +[23:42:28] [Client thread/INFO]: [CHAT] +[23:42:28] [Client thread/INFO]: [CHAT] āœ˜ BestAgany was banned by AntiGamingChair for Unfair Advantage. +[23:42:28] [Client thread/INFO]: [CHAT] +[23:42:31] [Client thread/INFO]: [CHAT] BodyShakes: SquadeQ1337 how are you master III while autoclicking +[23:42:32] [Client thread/INFO]: [CHAT] Arya_Kh: kso +[23:42:34] [Client thread/INFO]: [CHAT] Kqnnedy: q top fight +[23:42:35] [Client thread/INFO]: [CHAT] DDMD: ndbf +[23:42:42] [Client thread/INFO]: [CHAT] [āœ”] SquadeQ1337: what +[23:42:42] [Client thread/INFO]: [CHAT] Nethaj_Blondi121: Nu joc nd +[23:42:43] [Client thread/INFO]: [CHAT] DDMD: 1 eu 1 tu hai ndbf +[23:42:43] [Client thread/INFO]: [CHAT] CapeOptfine: lol +[23:42:45] [Client thread/INFO]: [CHAT] Ā§dĀ§lNA UHC MeetupĀ§7Ā§l Ā» Ā§dVlberĀ§e wants you to play! (Join) +[23:42:46] [Client thread/INFO]: [CHAT] 2132: dog +[23:42:46] [Client thread/INFO]: [CHAT] [āœ”] Swoftzy ā˜Æ: tf +[23:42:47] [Client thread/INFO]: [CHAT] hasba122: tfk bf +[23:42:48] [Client thread/INFO]: [CHAT] DDMD: abandon? ok +[23:42:51] [Client thread/INFO]: [CHAT] Nethaj_Blondi121: :)))) +[23:42:51] [Client thread/INFO]: [CHAT] Kqnnedy: q top fight +[23:42:53] [Client thread/INFO]: [CHAT] Ā§dĀ§lNA UHC MeetupĀ§7Ā§l Ā» Ā§dVlberĀ§e wants you to play! (Join) +[23:42:54] [Client thread/INFO]: [CHAT] DDMD: gg 3-0 +[23:42:55] [Client thread/INFO]: [CHAT] zEq1n0x: ee hadi +[23:42:59] [Client thread/INFO]: [CHAT] [āœ”] MusTox: npc +[23:42:59] [Client thread/INFO]: [CHAT] Viroze: shh +[23:43:00] [Client thread/INFO]: [CHAT] iusemakima: ooo tĆ¼rk +[23:43:08] [Client thread/INFO]: [CHAT] z69m: ???? +[23:43:11] [Client thread/INFO]: [CHAT] ZokeCat: ILBxddy_ la modalitĆ  che non mi piacer +[23:43:12] [Client thread/INFO]: [CHAT] DDMD: gg 3-0 +[23:43:14] [Client thread/INFO]: [CHAT] billago: gg +[23:43:14] [Client thread/INFO]: [CHAT] iLwexy: sizi mi beklicez +[23:43:16] [Client thread/INFO]: [CHAT] GANGMEMBERFO: 2v2 nodebuff +[23:43:17] [Client thread/INFO]: [CHAT] Ā§dĀ§lNA UHC MeetupĀ§7Ā§l Ā» Ā§dVlberĀ§e wants you to play! (Join) +[23:43:17] [Client thread/INFO]: [CHAT] 9bearr: so bad remusted +[23:43:19] [Client thread/INFO]: [CHAT] Caslte: _Bladeris stop deance +[23:43:26] [Client thread/INFO]: [CHAT] bestthor: la durun 2dk +[23:43:27] [Client thread/INFO]: [CHAT] FatalLucas: stop combo sur le mur +[23:43:29] [Client thread/INFO]: [CHAT] hasba122: t bad nul +[23:43:31] [Client thread/INFO]: [CHAT] Dream97391: Lol +[23:43:32] [Client thread/INFO]: [CHAT] Ā§dĀ§lNA UHC MeetupĀ§7Ā§l Ā» Ā§dVlberĀ§e wants you to play! (Join) +[23:43:32] [Client thread/INFO]: [CHAT] hasba122: tg t nul +[23:43:38] [Client thread/INFO]: [CHAT] aduz: dgo +[23:43:39] [Client thread/INFO]: [CHAT] hasba122: veski le mmc pour ca +[23:43:44] [Client thread/INFO]: [CHAT] Arya_Kh: XD +[23:43:44] [Client thread/INFO]: [CHAT] BlueberryMilk_: battle rush someone pls +[23:43:48] [Client thread/INFO]: [CHAT] Ā§dĀ§lNA UHC MeetupĀ§7Ā§l Ā» Ā§dVlberĀ§e wants you to play! (Join) +[23:43:48] [Client thread/INFO]: [CHAT] adriser00: r +[23:43:49] [Client thread/INFO]: [CHAT] M3tty_Pr3: 1s +[23:43:49] [Client thread/INFO]: [CHAT] Krispigaste: gf +[23:43:49] [Client thread/INFO]: [CHAT] JusTRicky: aspe +[23:43:49] [Client thread/INFO]: [CHAT] FatalLucas: je tryhard pas le jeu de cube encore moins a 00j +[23:43:52] [Client thread/INFO]: [CHAT] LAVIONDEPABLO: https://kick.com/dashboard/stream +[23:43:52] [Client thread/INFO]: [CHAT] NotDestroyet: lucky +[23:43:54] [Client thread/INFO]: [CHAT] hasba122: pareil +[23:43:59] [Client thread/INFO]: [CHAT] CalleyLothBrok: geldim +[23:44:04] [Client thread/INFO]: [CHAT] +[23:44:04] [Client thread/INFO]: [CHAT] āœ˜ Kiding was banned by AntiGamingChair for Unfair Advantage. +[23:44:04] [Client thread/INFO]: [CHAT] +[23:44:09] [Client thread/INFO]: [CHAT] hasba122: e z +[23:44:18] [Client thread/INFO]: [CHAT] +[23:44:18] [Client thread/INFO]: [CHAT] [MMC] Need support? Create a ticket: minemen.club/tickets +[23:44:18] [Client thread/INFO]: [CHAT] +[23:44:19] [Client thread/INFO]: [CHAT] ElectroTheCow: Stop running kid +[23:44:19] [Client thread/INFO]: [CHAT] Arya_Kh: XD +[23:44:23] [Client thread/INFO]: [CHAT] swear1447: s +[23:44:32] [Client thread/INFO]: [CHAT] ElectroTheCow: No +[23:44:33] [Client thread/INFO]: [CHAT] usbr: fatass +[23:44:38] [Client thread/INFO]: [CHAT] swear1447: sisko eqinox +[23:44:41] [Client thread/INFO]: [CHAT] ySeb: gg +[23:44:46] [Client thread/INFO]: [CHAT] Wizoxycek: ? +[23:44:47] [Client thread/INFO]: [CHAT] Caslte: STAFF HELP RUNNER +[23:44:48] [Client thread/INFO]: [CHAT] Dream97391: LOL +[23:44:53] [Client thread/INFO]: [CHAT] GLOKK9NA: HAHAHAHAH APUCERON +[23:44:57] [Client thread/INFO]: [CHAT] WibbleWoobble: how i can save my kit? +[23:44:58] [Client thread/INFO]: [CHAT] ElectroTheCow: Fuck u kiddo +[23:44:59] [Client thread/INFO]: [CHAT] _Zasuwkaa: aha +[23:45:00] [Client thread/INFO]: [CHAT] CapeOptfine: lol +[23:45:05] [Client thread/INFO]: [CHAT] JusTRicky: aspe +[23:45:06] [Client thread/INFO]: [CHAT] Zcvo: nah u cheat +[23:45:07] [Client thread/INFO]: [CHAT] SumoTechnology: Ranked Sumo +[23:45:10] [Client thread/INFO]: [CHAT] NotDestroyet: cringe +[23:45:10] [Client thread/INFO]: [CHAT] Zcvo: cheats# +[23:45:15] [Client thread/INFO]: [CHAT] LAVIONDEPABLO: https://kick.com/mqrcelinho +[23:45:15] [Client thread/INFO]: [CHAT] WibbleWoobble: , +[23:45:18] [Client thread/INFO]: [CHAT] WibbleWoobble: how i can save my kit??? +[23:45:20] [Client thread/INFO]: [CHAT] Zcvo: nah no way +[23:45:23] [Client thread/INFO]: [CHAT] iLwexy: lfmao +[23:45:23] [Client thread/INFO]: [CHAT] _Zasuwkaa: nn +[23:45:24] [Client thread/INFO]: [CHAT] SumoTechnology: Ranked Sumo +[23:45:25] [Client thread/INFO]: [CHAT] Talhaww: cee +[23:45:34] [Client thread/INFO]: [CHAT] WibbleWoobble: x +[23:45:36] [Client thread/INFO]: [CHAT] Miskafi: SO CRINGE BRO +[23:45:38] [Client thread/INFO]: [CHAT] WibbleWoobble: how i can save my kit??? +[23:45:41] [Client thread/INFO]: [CHAT] NotDestroyet: cringe +[23:45:43] [Client thread/INFO]: [CHAT] _pociwicz: off wifsh +[23:45:43] [Client thread/INFO]: [CHAT] ZokeCat: xD +[23:45:44] [Client thread/INFO]: Stopping! +[23:45:44] [Client thread/INFO]: [Athena] Shutting down client +[23:45:44] [Client thread/INFO]: SoundSystem shutting down... +[23:45:44] [Client thread/WARN]: Author: Paul Lamb, www.paulscode.com diff --git a/workspace/options.txt b/workspace/options.txt index ed9f63b3..70dcc7b0 100644 --- a/workspace/options.txt +++ b/workspace/options.txt @@ -12,7 +12,7 @@ maxFps:260 fboEnable:true difficulty:1 fancyGraphics:false -ao:2 +ao:0 renderClouds:false resourcePacks:["! Ā§bPotfast 5kay.zip"] incompatibleResourcePacks:[] diff --git a/workspace/saves/Copy of Copy of mcpworldppdsa_/data/Mineshaft.dat b/workspace/saves/Copy of Copy of mcpworldppdsa_/data/Mineshaft.dat index 195aacae..cc1f122a 100644 Binary files a/workspace/saves/Copy of Copy of mcpworldppdsa_/data/Mineshaft.dat and b/workspace/saves/Copy of Copy of mcpworldppdsa_/data/Mineshaft.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 29ee6796..7ed17885 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 29ee6796..7ed17885 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 29ee6796..7ed17885 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 deleted file mode 100644 index 5762ea2e..00000000 Binary files a/workspace/saves/Copy of Copy of mcpworldppdsa_/level.dat and /dev/null 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 new file mode 100644 index 00000000..a291fbe0 Binary files /dev/null and b/workspace/saves/Copy of Copy of mcpworldppdsa_/level.dat_new 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 deleted file mode 100644 index 709dfe55..00000000 Binary files a/workspace/saves/Copy of Copy of mcpworldppdsa_/level.dat_old and /dev/null differ diff --git a/workspace/saves/Copy of Copy of mcpworldppdsa_/playerdata/34c6f761-a0d4-3d62-b5ee-df15e4530215.dat b/workspace/saves/Copy of Copy of mcpworldppdsa_/playerdata/34c6f761-a0d4-3d62-b5ee-df15e4530215.dat new file mode 100644 index 00000000..3f25d325 Binary files /dev/null and b/workspace/saves/Copy of Copy of mcpworldppdsa_/playerdata/34c6f761-a0d4-3d62-b5ee-df15e4530215.dat differ diff --git a/workspace/saves/Copy of Copy of mcpworldppdsa_/playerdata/a7507e7e-f998-31cf-a2de-0cc0fd0a4de6.dat b/workspace/saves/Copy of Copy of mcpworldppdsa_/playerdata/a7507e7e-f998-31cf-a2de-0cc0fd0a4de6.dat new file mode 100644 index 00000000..59ff67b4 Binary files /dev/null and b/workspace/saves/Copy of Copy of mcpworldppdsa_/playerdata/a7507e7e-f998-31cf-a2de-0cc0fd0a4de6.dat differ diff --git a/workspace/saves/Copy of Copy of mcpworldppdsa_/playerdata/dcea94fd-efa4-3c29-93d8-2d56666245c7.dat b/workspace/saves/Copy of Copy of mcpworldppdsa_/playerdata/dcea94fd-efa4-3c29-93d8-2d56666245c7.dat new file mode 100644 index 00000000..000293c7 Binary files /dev/null and b/workspace/saves/Copy of Copy of mcpworldppdsa_/playerdata/dcea94fd-efa4-3c29-93d8-2d56666245c7.dat differ diff --git a/workspace/saves/Copy of Copy of mcpworldppdsa_/playerdata/fe171829-6121-3106-a1a5-6a3600a4ef7d.dat b/workspace/saves/Copy of Copy of mcpworldppdsa_/playerdata/fe171829-6121-3106-a1a5-6a3600a4ef7d.dat new file mode 100644 index 00000000..e7b467b7 Binary files /dev/null and b/workspace/saves/Copy of Copy of mcpworldppdsa_/playerdata/fe171829-6121-3106-a1a5-6a3600a4ef7d.dat 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 f94e0525..c8b3beb1 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 3a61656b..cab2793f 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 8acb9aeb..bff470df 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 2b769b29..4e19cc35 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 be5d4fca..5b64699d 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/Copy of Copy of mcpworldppdsa_/stats/34c6f761-a0d4-3d62-b5ee-df15e4530215.json b/workspace/saves/Copy of Copy of mcpworldppdsa_/stats/34c6f761-a0d4-3d62-b5ee-df15e4530215.json new file mode 100644 index 00000000..3c6df88e --- /dev/null +++ b/workspace/saves/Copy of Copy of mcpworldppdsa_/stats/34c6f761-a0d4-3d62-b5ee-df15e4530215.json @@ -0,0 +1 @@ +{"stat.playOneMinute":1,"stat.leaveGame":1,"stat.timeSinceDeath":1} \ No newline at end of file diff --git a/workspace/saves/Copy of Copy of mcpworldppdsa_/stats/a7507e7e-f998-31cf-a2de-0cc0fd0a4de6.json b/workspace/saves/Copy of Copy of mcpworldppdsa_/stats/a7507e7e-f998-31cf-a2de-0cc0fd0a4de6.json new file mode 100644 index 00000000..dbde9c83 --- /dev/null +++ b/workspace/saves/Copy of Copy of mcpworldppdsa_/stats/a7507e7e-f998-31cf-a2de-0cc0fd0a4de6.json @@ -0,0 +1 @@ +{"stat.flyOneCm":218,"stat.walkOneCm":425,"stat.jump":1,"stat.playOneMinute":2371,"stat.fallOneCm":1732,"stat.leaveGame":1,"stat.damageTaken":150,"stat.timeSinceDeath":2371,"stat.sprintOneCm":116,"achievement.exploreAllBiomes":{"value":0,"progress":["Desert"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of Copy of mcpworldppdsa_/stats/dcea94fd-efa4-3c29-93d8-2d56666245c7.json b/workspace/saves/Copy of Copy of mcpworldppdsa_/stats/dcea94fd-efa4-3c29-93d8-2d56666245c7.json new file mode 100644 index 00000000..ae734fde --- /dev/null +++ b/workspace/saves/Copy of Copy of mcpworldppdsa_/stats/dcea94fd-efa4-3c29-93d8-2d56666245c7.json @@ -0,0 +1 @@ +{"stat.playOneMinute":259,"stat.leaveGame":1,"stat.timeSinceDeath":259,"achievement.exploreAllBiomes":{"value":0,"progress":["Desert"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of Copy of mcpworldppdsa_/stats/fe171829-6121-3106-a1a5-6a3600a4ef7d.json b/workspace/saves/Copy of Copy of mcpworldppdsa_/stats/fe171829-6121-3106-a1a5-6a3600a4ef7d.json new file mode 100644 index 00000000..976dd08f --- /dev/null +++ b/workspace/saves/Copy of Copy of mcpworldppdsa_/stats/fe171829-6121-3106-a1a5-6a3600a4ef7d.json @@ -0,0 +1 @@ +{"stat.flyOneCm":6896,"stat.killEntity.Skeleton":2,"stat.walkOneCm":30570,"stat.drop":1,"stat.jump":43,"stat.playOneMinute":15801,"stat.fallOneCm":422,"achievement.openInventory":1,"stat.useItem.minecraft.stone":15,"stat.useItem.minecraft.cooked_beef":1,"stat.leaveGame":1,"stat.damageTaken":200,"stat.damageDealt":2080,"stat.crouchOneCm":24,"stat.killEntity.Zombie":5,"stat.timeSinceDeath":15801,"stat.sprintOneCm":19013,"stat.mobKills":8,"achievement.exploreAllBiomes":{"value":0,"progress":["Desert"]},"stat.killEntity.Creeper":1,"stat.useItem.minecraft.diamond_sword":23} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/data/Mineshaft.dat b/workspace/saves/Copy of mcpworldpp/data/Mineshaft.dat index 32f551f7..1d0d5b19 100644 Binary files a/workspace/saves/Copy of mcpworldpp/data/Mineshaft.dat and b/workspace/saves/Copy of mcpworldpp/data/Mineshaft.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/data/Temple.dat b/workspace/saves/Copy of mcpworldpp/data/Temple.dat index 1eed3f8e..fd98edd4 100644 Binary files a/workspace/saves/Copy of mcpworldpp/data/Temple.dat and b/workspace/saves/Copy of mcpworldpp/data/Temple.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/data/Village.dat b/workspace/saves/Copy of mcpworldpp/data/Village.dat index 0c4a1150..0fef8c60 100644 Binary files a/workspace/saves/Copy of mcpworldpp/data/Village.dat and b/workspace/saves/Copy of mcpworldpp/data/Village.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/data/villages.dat b/workspace/saves/Copy of mcpworldpp/data/villages.dat index a66887b4..b14317ca 100644 Binary files a/workspace/saves/Copy of mcpworldpp/data/villages.dat and b/workspace/saves/Copy of mcpworldpp/data/villages.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/data/villages_end.dat b/workspace/saves/Copy of mcpworldpp/data/villages_end.dat index 41bc4ddf..36625837 100644 Binary files a/workspace/saves/Copy of mcpworldpp/data/villages_end.dat and b/workspace/saves/Copy of mcpworldpp/data/villages_end.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/data/villages_nether.dat b/workspace/saves/Copy of mcpworldpp/data/villages_nether.dat index 41bc4ddf..36625837 100644 Binary files a/workspace/saves/Copy of mcpworldpp/data/villages_nether.dat and b/workspace/saves/Copy of mcpworldpp/data/villages_nether.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/level.dat b/workspace/saves/Copy of mcpworldpp/level.dat index 9f75d03c..420d08dc 100644 Binary files a/workspace/saves/Copy of mcpworldpp/level.dat and b/workspace/saves/Copy of mcpworldpp/level.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/level.dat_old b/workspace/saves/Copy of mcpworldpp/level.dat_old index 0bf8fe83..cf643d19 100644 Binary files a/workspace/saves/Copy of mcpworldpp/level.dat_old and b/workspace/saves/Copy of mcpworldpp/level.dat_old differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/094b1c52-a449-3e9f-896c-59239b943c71.dat b/workspace/saves/Copy of mcpworldpp/playerdata/094b1c52-a449-3e9f-896c-59239b943c71.dat new file mode 100644 index 00000000..a6d9b6a1 Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/094b1c52-a449-3e9f-896c-59239b943c71.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/11cdf046-d362-394c-93e8-583f0c5ef255.dat b/workspace/saves/Copy of mcpworldpp/playerdata/11cdf046-d362-394c-93e8-583f0c5ef255.dat new file mode 100644 index 00000000..32bc582a Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/11cdf046-d362-394c-93e8-583f0c5ef255.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/168f5f60-1523-35b7-93b7-01b2c42226b4.dat b/workspace/saves/Copy of mcpworldpp/playerdata/168f5f60-1523-35b7-93b7-01b2c42226b4.dat new file mode 100644 index 00000000..4158b9ad Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/168f5f60-1523-35b7-93b7-01b2c42226b4.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/1714a812-885f-3243-b534-9a660fba6e8b.dat b/workspace/saves/Copy of mcpworldpp/playerdata/1714a812-885f-3243-b534-9a660fba6e8b.dat new file mode 100644 index 00000000..cbbfe1ca Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/1714a812-885f-3243-b534-9a660fba6e8b.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/197d9491-ff34-3fd1-8394-1aadd56cfa2c.dat b/workspace/saves/Copy of mcpworldpp/playerdata/197d9491-ff34-3fd1-8394-1aadd56cfa2c.dat new file mode 100644 index 00000000..c9509c0a Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/197d9491-ff34-3fd1-8394-1aadd56cfa2c.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/1aca2fd8-a080-3d28-afe0-430fc033484e.dat b/workspace/saves/Copy of mcpworldpp/playerdata/1aca2fd8-a080-3d28-afe0-430fc033484e.dat new file mode 100644 index 00000000..b083bfa0 Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/1aca2fd8-a080-3d28-afe0-430fc033484e.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/1b03cef3-3bb0-3335-8575-75a992fee2b9.dat b/workspace/saves/Copy of mcpworldpp/playerdata/1b03cef3-3bb0-3335-8575-75a992fee2b9.dat new file mode 100644 index 00000000..dac1db9d Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/1b03cef3-3bb0-3335-8575-75a992fee2b9.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/29aa321a-1ce7-35de-bfab-f37fa4095c7d.dat b/workspace/saves/Copy of mcpworldpp/playerdata/29aa321a-1ce7-35de-bfab-f37fa4095c7d.dat new file mode 100644 index 00000000..fb2bd198 Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/29aa321a-1ce7-35de-bfab-f37fa4095c7d.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/2a68c4a4-c1ba-3396-a626-ac7041e25da5.dat b/workspace/saves/Copy of mcpworldpp/playerdata/2a68c4a4-c1ba-3396-a626-ac7041e25da5.dat new file mode 100644 index 00000000..d6221a79 Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/2a68c4a4-c1ba-3396-a626-ac7041e25da5.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/2adbb68a-c561-3c7a-ac3a-f724c1f981bb.dat b/workspace/saves/Copy of mcpworldpp/playerdata/2adbb68a-c561-3c7a-ac3a-f724c1f981bb.dat new file mode 100644 index 00000000..4cfcd2d7 Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/2adbb68a-c561-3c7a-ac3a-f724c1f981bb.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/2e2bad62-fd9f-3bb5-a89e-b314a4f30e73.dat b/workspace/saves/Copy of mcpworldpp/playerdata/2e2bad62-fd9f-3bb5-a89e-b314a4f30e73.dat new file mode 100644 index 00000000..a8dbf71c Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/2e2bad62-fd9f-3bb5-a89e-b314a4f30e73.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/3247b050-58df-3a7e-91f5-44a3d807681c.dat b/workspace/saves/Copy of mcpworldpp/playerdata/3247b050-58df-3a7e-91f5-44a3d807681c.dat new file mode 100644 index 00000000..f7effb26 Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/3247b050-58df-3a7e-91f5-44a3d807681c.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/3c28cca8-db38-324d-ac91-779beed87c8d.dat b/workspace/saves/Copy of mcpworldpp/playerdata/3c28cca8-db38-324d-ac91-779beed87c8d.dat new file mode 100644 index 00000000..1b6992c8 Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/3c28cca8-db38-324d-ac91-779beed87c8d.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/3eec9f18-1d0e-3f17-917c-6994e7d034d1.dat b/workspace/saves/Copy of mcpworldpp/playerdata/3eec9f18-1d0e-3f17-917c-6994e7d034d1.dat new file mode 100644 index 00000000..198fa9fe Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/3eec9f18-1d0e-3f17-917c-6994e7d034d1.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/3fff7d86-24d6-33b1-8ce1-9423a13c7c89.dat b/workspace/saves/Copy of mcpworldpp/playerdata/3fff7d86-24d6-33b1-8ce1-9423a13c7c89.dat new file mode 100644 index 00000000..ecb93348 Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/3fff7d86-24d6-33b1-8ce1-9423a13c7c89.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/43c314ca-2c75-349f-b8fe-ad7c6fada15e.dat b/workspace/saves/Copy of mcpworldpp/playerdata/43c314ca-2c75-349f-b8fe-ad7c6fada15e.dat new file mode 100644 index 00000000..0fce8bab Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/43c314ca-2c75-349f-b8fe-ad7c6fada15e.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/4bb7849b-3b46-3d6a-81b9-13bb408e8517.dat b/workspace/saves/Copy of mcpworldpp/playerdata/4bb7849b-3b46-3d6a-81b9-13bb408e8517.dat new file mode 100644 index 00000000..378def37 Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/4bb7849b-3b46-3d6a-81b9-13bb408e8517.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/4e1f5e28-f05f-3acf-ac65-db01d9d51f95.dat b/workspace/saves/Copy of mcpworldpp/playerdata/4e1f5e28-f05f-3acf-ac65-db01d9d51f95.dat new file mode 100644 index 00000000..32f7616d Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/4e1f5e28-f05f-3acf-ac65-db01d9d51f95.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/4ed9b5cf-d91a-3bc8-9000-b0476eccd342.dat b/workspace/saves/Copy of mcpworldpp/playerdata/4ed9b5cf-d91a-3bc8-9000-b0476eccd342.dat new file mode 100644 index 00000000..3fb63221 Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/4ed9b5cf-d91a-3bc8-9000-b0476eccd342.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/4f2b9d55-5b3e-32ee-ad58-c8df44a23337.dat b/workspace/saves/Copy of mcpworldpp/playerdata/4f2b9d55-5b3e-32ee-ad58-c8df44a23337.dat new file mode 100644 index 00000000..60a44234 Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/4f2b9d55-5b3e-32ee-ad58-c8df44a23337.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/4fdf550e-f3b3-3a06-8485-0916b2b491bc.dat b/workspace/saves/Copy of mcpworldpp/playerdata/4fdf550e-f3b3-3a06-8485-0916b2b491bc.dat new file mode 100644 index 00000000..9c7b7945 Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/4fdf550e-f3b3-3a06-8485-0916b2b491bc.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/530fa97a-357f-3c19-94d3-0c5c65c18fe8.dat b/workspace/saves/Copy of mcpworldpp/playerdata/530fa97a-357f-3c19-94d3-0c5c65c18fe8.dat new file mode 100644 index 00000000..a8e32fae Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/530fa97a-357f-3c19-94d3-0c5c65c18fe8.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/5c4f0ba0-5b89-33cd-bd9d-007c51e4a99f.dat b/workspace/saves/Copy of mcpworldpp/playerdata/5c4f0ba0-5b89-33cd-bd9d-007c51e4a99f.dat new file mode 100644 index 00000000..d80659e2 Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/5c4f0ba0-5b89-33cd-bd9d-007c51e4a99f.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/5cc48495-676c-3721-aed2-7336730ff405.dat b/workspace/saves/Copy of mcpworldpp/playerdata/5cc48495-676c-3721-aed2-7336730ff405.dat new file mode 100644 index 00000000..caccaa4e Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/5cc48495-676c-3721-aed2-7336730ff405.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/638f7175-5dde-3b0d-a13d-f593ecd79b38.dat b/workspace/saves/Copy of mcpworldpp/playerdata/638f7175-5dde-3b0d-a13d-f593ecd79b38.dat new file mode 100644 index 00000000..32cbf371 Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/638f7175-5dde-3b0d-a13d-f593ecd79b38.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/66157e7a-53e0-3299-9208-7674efd706f9.dat b/workspace/saves/Copy of mcpworldpp/playerdata/66157e7a-53e0-3299-9208-7674efd706f9.dat new file mode 100644 index 00000000..6fca95c2 Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/66157e7a-53e0-3299-9208-7674efd706f9.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/68cf6d02-03bc-3f3b-ab98-76a8ec749597.dat b/workspace/saves/Copy of mcpworldpp/playerdata/68cf6d02-03bc-3f3b-ab98-76a8ec749597.dat new file mode 100644 index 00000000..b0d3dbd6 Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/68cf6d02-03bc-3f3b-ab98-76a8ec749597.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/6db1171d-4fa6-31cb-b425-1896281a26e2.dat b/workspace/saves/Copy of mcpworldpp/playerdata/6db1171d-4fa6-31cb-b425-1896281a26e2.dat new file mode 100644 index 00000000..fe24ba95 Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/6db1171d-4fa6-31cb-b425-1896281a26e2.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/71ee4b7e-330e-3d50-90a4-3d964a618ea8.dat b/workspace/saves/Copy of mcpworldpp/playerdata/71ee4b7e-330e-3d50-90a4-3d964a618ea8.dat new file mode 100644 index 00000000..fbbb70a4 Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/71ee4b7e-330e-3d50-90a4-3d964a618ea8.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/7328fbd9-6879-3343-b321-ed1f1a1e9892.dat b/workspace/saves/Copy of mcpworldpp/playerdata/7328fbd9-6879-3343-b321-ed1f1a1e9892.dat new file mode 100644 index 00000000..cac0e4b4 Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/7328fbd9-6879-3343-b321-ed1f1a1e9892.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/74e89738-6c9e-4f59-83ef-d365849e6049.dat b/workspace/saves/Copy of mcpworldpp/playerdata/74e89738-6c9e-4f59-83ef-d365849e6049.dat new file mode 100644 index 00000000..a91af48f Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/74e89738-6c9e-4f59-83ef-d365849e6049.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/75e52373-1963-3666-bda9-8904d639e38b.dat b/workspace/saves/Copy of mcpworldpp/playerdata/75e52373-1963-3666-bda9-8904d639e38b.dat new file mode 100644 index 00000000..52178cde Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/75e52373-1963-3666-bda9-8904d639e38b.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/77167de3-5df9-3c83-b06a-bed9a476e835.dat b/workspace/saves/Copy of mcpworldpp/playerdata/77167de3-5df9-3c83-b06a-bed9a476e835.dat index 2121c7db..24e87f53 100644 Binary files a/workspace/saves/Copy of mcpworldpp/playerdata/77167de3-5df9-3c83-b06a-bed9a476e835.dat and b/workspace/saves/Copy of mcpworldpp/playerdata/77167de3-5df9-3c83-b06a-bed9a476e835.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/7ba45a5a-c3de-3909-ba3c-f9f78edf15b6.dat b/workspace/saves/Copy of mcpworldpp/playerdata/7ba45a5a-c3de-3909-ba3c-f9f78edf15b6.dat new file mode 100644 index 00000000..1373d86f Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/7ba45a5a-c3de-3909-ba3c-f9f78edf15b6.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/7fef5833-06c9-398a-84c0-fbd3a81ff548.dat b/workspace/saves/Copy of mcpworldpp/playerdata/7fef5833-06c9-398a-84c0-fbd3a81ff548.dat new file mode 100644 index 00000000..4bb294da Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/7fef5833-06c9-398a-84c0-fbd3a81ff548.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/8cfc5391-e37d-328f-a689-9b5f6c4663f5.dat b/workspace/saves/Copy of mcpworldpp/playerdata/8cfc5391-e37d-328f-a689-9b5f6c4663f5.dat index 228ee3f7..9e4b2c06 100644 Binary files a/workspace/saves/Copy of mcpworldpp/playerdata/8cfc5391-e37d-328f-a689-9b5f6c4663f5.dat and b/workspace/saves/Copy of mcpworldpp/playerdata/8cfc5391-e37d-328f-a689-9b5f6c4663f5.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/93bfa0b6-cc14-3c0c-8efa-0bcc48245274.dat b/workspace/saves/Copy of mcpworldpp/playerdata/93bfa0b6-cc14-3c0c-8efa-0bcc48245274.dat new file mode 100644 index 00000000..9ccdb700 Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/93bfa0b6-cc14-3c0c-8efa-0bcc48245274.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/942531dd-7690-3c0a-ad42-657bb212e7b6.dat b/workspace/saves/Copy of mcpworldpp/playerdata/942531dd-7690-3c0a-ad42-657bb212e7b6.dat new file mode 100644 index 00000000..b629cced Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/942531dd-7690-3c0a-ad42-657bb212e7b6.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/989691b1-d197-3995-a55e-281cda3663ae.dat b/workspace/saves/Copy of mcpworldpp/playerdata/989691b1-d197-3995-a55e-281cda3663ae.dat new file mode 100644 index 00000000..2f8f5736 Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/989691b1-d197-3995-a55e-281cda3663ae.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/9df70e84-3251-33fb-9047-d59112057246.dat b/workspace/saves/Copy of mcpworldpp/playerdata/9df70e84-3251-33fb-9047-d59112057246.dat new file mode 100644 index 00000000..32d0b3c9 Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/9df70e84-3251-33fb-9047-d59112057246.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/9e5d41e7-4785-3b2f-8261-593dade57f6e.dat b/workspace/saves/Copy of mcpworldpp/playerdata/9e5d41e7-4785-3b2f-8261-593dade57f6e.dat new file mode 100644 index 00000000..1158307a Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/9e5d41e7-4785-3b2f-8261-593dade57f6e.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/a08e137b-04fa-3fce-96cc-517c7a87690d.dat b/workspace/saves/Copy of mcpworldpp/playerdata/a08e137b-04fa-3fce-96cc-517c7a87690d.dat new file mode 100644 index 00000000..f52bd356 Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/a08e137b-04fa-3fce-96cc-517c7a87690d.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/aeca01bf-232e-37a2-985b-599827b3226a.dat b/workspace/saves/Copy of mcpworldpp/playerdata/aeca01bf-232e-37a2-985b-599827b3226a.dat new file mode 100644 index 00000000..8acb3c4a Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/aeca01bf-232e-37a2-985b-599827b3226a.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/b136c8aa-0654-3583-8db1-8749e12181a1.dat b/workspace/saves/Copy of mcpworldpp/playerdata/b136c8aa-0654-3583-8db1-8749e12181a1.dat new file mode 100644 index 00000000..7504b5f0 Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/b136c8aa-0654-3583-8db1-8749e12181a1.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/b25e3f31-3d0d-30a3-b307-8902510a505e.dat b/workspace/saves/Copy of mcpworldpp/playerdata/b25e3f31-3d0d-30a3-b307-8902510a505e.dat new file mode 100644 index 00000000..edbab1b3 Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/b25e3f31-3d0d-30a3-b307-8902510a505e.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/babe9e7f-35b2-34ef-82f9-4869d34a0755.dat b/workspace/saves/Copy of mcpworldpp/playerdata/babe9e7f-35b2-34ef-82f9-4869d34a0755.dat new file mode 100644 index 00000000..bd3b9305 Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/babe9e7f-35b2-34ef-82f9-4869d34a0755.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/bf0c47d3-02b6-3463-8e38-457226b1407c.dat b/workspace/saves/Copy of mcpworldpp/playerdata/bf0c47d3-02b6-3463-8e38-457226b1407c.dat new file mode 100644 index 00000000..37b089a5 Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/bf0c47d3-02b6-3463-8e38-457226b1407c.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/ccf0c278-c21f-3ec3-a87c-05202673a5dd.dat b/workspace/saves/Copy of mcpworldpp/playerdata/ccf0c278-c21f-3ec3-a87c-05202673a5dd.dat new file mode 100644 index 00000000..9b52ebff Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/ccf0c278-c21f-3ec3-a87c-05202673a5dd.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/d1b650bf-5f9c-37d3-a469-4d66d1968f90.dat b/workspace/saves/Copy of mcpworldpp/playerdata/d1b650bf-5f9c-37d3-a469-4d66d1968f90.dat new file mode 100644 index 00000000..f89c08b2 Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/d1b650bf-5f9c-37d3-a469-4d66d1968f90.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/dcea94fd-efa4-3c29-93d8-2d56666245c7.dat b/workspace/saves/Copy of mcpworldpp/playerdata/dcea94fd-efa4-3c29-93d8-2d56666245c7.dat new file mode 100644 index 00000000..d417fb49 Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/dcea94fd-efa4-3c29-93d8-2d56666245c7.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/df2d3e26-a8b7-3aae-9296-f3a891282132.dat b/workspace/saves/Copy of mcpworldpp/playerdata/df2d3e26-a8b7-3aae-9296-f3a891282132.dat new file mode 100644 index 00000000..d587b595 Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/df2d3e26-a8b7-3aae-9296-f3a891282132.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/df7bffa7-7a2f-3fb4-9898-fa23c41e49b8.dat b/workspace/saves/Copy of mcpworldpp/playerdata/df7bffa7-7a2f-3fb4-9898-fa23c41e49b8.dat new file mode 100644 index 00000000..6456ae63 Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/df7bffa7-7a2f-3fb4-9898-fa23c41e49b8.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/e012d939-bd4c-38f9-ae46-831d4959ff05.dat b/workspace/saves/Copy of mcpworldpp/playerdata/e012d939-bd4c-38f9-ae46-831d4959ff05.dat new file mode 100644 index 00000000..4d140048 Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/e012d939-bd4c-38f9-ae46-831d4959ff05.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/e122e0b0-374f-3b1b-a986-63f4fefee57a.dat b/workspace/saves/Copy of mcpworldpp/playerdata/e122e0b0-374f-3b1b-a986-63f4fefee57a.dat new file mode 100644 index 00000000..98d81e66 Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/e122e0b0-374f-3b1b-a986-63f4fefee57a.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/e4358028-bc3b-38cc-b645-4d08d3b4f456.dat b/workspace/saves/Copy of mcpworldpp/playerdata/e4358028-bc3b-38cc-b645-4d08d3b4f456.dat new file mode 100644 index 00000000..46262590 Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/e4358028-bc3b-38cc-b645-4d08d3b4f456.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/e4e5b30f-b972-382c-b5e5-86c2e785a8a6.dat b/workspace/saves/Copy of mcpworldpp/playerdata/e4e5b30f-b972-382c-b5e5-86c2e785a8a6.dat new file mode 100644 index 00000000..ea7d37cf Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/e4e5b30f-b972-382c-b5e5-86c2e785a8a6.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/e664a043-6e9c-3d0d-9b38-cc385e35aba9.dat b/workspace/saves/Copy of mcpworldpp/playerdata/e664a043-6e9c-3d0d-9b38-cc385e35aba9.dat new file mode 100644 index 00000000..c6b6ddc4 Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/e664a043-6e9c-3d0d-9b38-cc385e35aba9.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/eadcccd1-5981-31ce-8342-c727c73b0197.dat b/workspace/saves/Copy of mcpworldpp/playerdata/eadcccd1-5981-31ce-8342-c727c73b0197.dat new file mode 100644 index 00000000..09f97cfb Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/eadcccd1-5981-31ce-8342-c727c73b0197.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/eed453d8-1b3a-3fa3-9fc5-1cf433d73521.dat b/workspace/saves/Copy of mcpworldpp/playerdata/eed453d8-1b3a-3fa3-9fc5-1cf433d73521.dat new file mode 100644 index 00000000..e30961d4 Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/eed453d8-1b3a-3fa3-9fc5-1cf433d73521.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/eee10812-13cd-3f90-b77f-2195c9c5b71e.dat b/workspace/saves/Copy of mcpworldpp/playerdata/eee10812-13cd-3f90-b77f-2195c9c5b71e.dat new file mode 100644 index 00000000..d5204892 Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/eee10812-13cd-3f90-b77f-2195c9c5b71e.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/f0c5379b-0e4e-34aa-808d-37fef9b5ce6c.dat b/workspace/saves/Copy of mcpworldpp/playerdata/f0c5379b-0e4e-34aa-808d-37fef9b5ce6c.dat new file mode 100644 index 00000000..025faf0f Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/f0c5379b-0e4e-34aa-808d-37fef9b5ce6c.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/f318a6c7-0ff1-368e-9d3e-1b850b84da5e.dat b/workspace/saves/Copy of mcpworldpp/playerdata/f318a6c7-0ff1-368e-9d3e-1b850b84da5e.dat new file mode 100644 index 00000000..2ebb7a1c Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/f318a6c7-0ff1-368e-9d3e-1b850b84da5e.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/f72636fb-c7db-3c44-8cd4-8a6790fd9b69.dat b/workspace/saves/Copy of mcpworldpp/playerdata/f72636fb-c7db-3c44-8cd4-8a6790fd9b69.dat new file mode 100644 index 00000000..3de5d364 Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/f72636fb-c7db-3c44-8cd4-8a6790fd9b69.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/fc74fe37-e9f9-3198-8e46-1eee97cacfa6.dat b/workspace/saves/Copy of mcpworldpp/playerdata/fc74fe37-e9f9-3198-8e46-1eee97cacfa6.dat new file mode 100644 index 00000000..40ab9734 Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/fc74fe37-e9f9-3198-8e46-1eee97cacfa6.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/fcaa91cc-3a77-3318-a8ae-f2f3862b7fde.dat b/workspace/saves/Copy of mcpworldpp/playerdata/fcaa91cc-3a77-3318-a8ae-f2f3862b7fde.dat index b7d141f1..03193160 100644 Binary files a/workspace/saves/Copy of mcpworldpp/playerdata/fcaa91cc-3a77-3318-a8ae-f2f3862b7fde.dat and b/workspace/saves/Copy of mcpworldpp/playerdata/fcaa91cc-3a77-3318-a8ae-f2f3862b7fde.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/playerdata/fd09468e-08e7-31aa-bab7-195a6ef31320.dat b/workspace/saves/Copy of mcpworldpp/playerdata/fd09468e-08e7-31aa-bab7-195a6ef31320.dat new file mode 100644 index 00000000..84f15474 Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/playerdata/fd09468e-08e7-31aa-bab7-195a6ef31320.dat differ diff --git a/workspace/saves/Copy of mcpworldpp/region/r.-1.0.mca b/workspace/saves/Copy of mcpworldpp/region/r.-1.0.mca index 37382c04..3d9847ad 100644 Binary files a/workspace/saves/Copy of mcpworldpp/region/r.-1.0.mca and b/workspace/saves/Copy of mcpworldpp/region/r.-1.0.mca differ diff --git a/workspace/saves/Copy of mcpworldpp/region/r.-1.1.mca b/workspace/saves/Copy of mcpworldpp/region/r.-1.1.mca index 778d5e38..b19ae12a 100644 Binary files a/workspace/saves/Copy of mcpworldpp/region/r.-1.1.mca and b/workspace/saves/Copy of mcpworldpp/region/r.-1.1.mca differ diff --git a/workspace/saves/Copy of mcpworldpp/region/r.-1.2.mca b/workspace/saves/Copy of mcpworldpp/region/r.-1.2.mca index d87e34d6..1aa9d8a5 100644 Binary files a/workspace/saves/Copy of mcpworldpp/region/r.-1.2.mca and b/workspace/saves/Copy of mcpworldpp/region/r.-1.2.mca differ diff --git a/workspace/saves/Copy of mcpworldpp/region/r.0.0.mca b/workspace/saves/Copy of mcpworldpp/region/r.0.0.mca index d34564c4..852c65f0 100644 Binary files a/workspace/saves/Copy of mcpworldpp/region/r.0.0.mca and b/workspace/saves/Copy of mcpworldpp/region/r.0.0.mca differ diff --git a/workspace/saves/Copy of mcpworldpp/region/r.0.1.mca b/workspace/saves/Copy of mcpworldpp/region/r.0.1.mca index 9cb275df..6ae64d75 100644 Binary files a/workspace/saves/Copy of mcpworldpp/region/r.0.1.mca and b/workspace/saves/Copy of mcpworldpp/region/r.0.1.mca differ diff --git a/workspace/saves/Copy of mcpworldpp/region/r.0.2.mca b/workspace/saves/Copy of mcpworldpp/region/r.0.2.mca index d91e9d70..45b06b9f 100644 Binary files a/workspace/saves/Copy of mcpworldpp/region/r.0.2.mca and b/workspace/saves/Copy of mcpworldpp/region/r.0.2.mca differ diff --git a/workspace/saves/Copy of mcpworldpp/region/r.1.2.mca b/workspace/saves/Copy of mcpworldpp/region/r.1.2.mca new file mode 100644 index 00000000..5203cd95 Binary files /dev/null and b/workspace/saves/Copy of mcpworldpp/region/r.1.2.mca differ diff --git a/workspace/saves/Copy of mcpworldpp/session.lock b/workspace/saves/Copy of mcpworldpp/session.lock index 87e7d5df..1f5919e7 100644 Binary files a/workspace/saves/Copy of mcpworldpp/session.lock and b/workspace/saves/Copy of mcpworldpp/session.lock differ diff --git a/workspace/saves/Copy of mcpworldpp/stats/094b1c52-a449-3e9f-896c-59239b943c71.json b/workspace/saves/Copy of mcpworldpp/stats/094b1c52-a449-3e9f-896c-59239b943c71.json new file mode 100644 index 00000000..fd533f1c --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/094b1c52-a449-3e9f-896c-59239b943c71.json @@ -0,0 +1 @@ +{"stat.flyOneCm":11661,"stat.walkOneCm":1686,"stat.jump":12,"stat.playOneMinute":18719,"stat.leaveGame":1,"stat.timeSinceDeath":18719,"stat.sprintOneCm":1059,"achievement.exploreAllBiomes":{"value":0,"progress":["Desert"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/11cdf046-d362-394c-93e8-583f0c5ef255.json b/workspace/saves/Copy of mcpworldpp/stats/11cdf046-d362-394c-93e8-583f0c5ef255.json new file mode 100644 index 00000000..03f60beb --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/11cdf046-d362-394c-93e8-583f0c5ef255.json @@ -0,0 +1 @@ +{"stat.flyOneCm":1673,"stat.walkOneCm":1878,"stat.jump":4,"stat.playOneMinute":815,"stat.leaveGame":1,"stat.timeSinceDeath":815,"stat.sprintOneCm":221,"achievement.exploreAllBiomes":{"value":0,"progress":["Desert"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/168f5f60-1523-35b7-93b7-01b2c42226b4.json b/workspace/saves/Copy of mcpworldpp/stats/168f5f60-1523-35b7-93b7-01b2c42226b4.json new file mode 100644 index 00000000..5e54975b --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/168f5f60-1523-35b7-93b7-01b2c42226b4.json @@ -0,0 +1 @@ +{"stat.flyOneCm":2904,"stat.walkOneCm":13977,"stat.drop":2,"stat.jump":29,"stat.useItem.minecraft.sand":1,"stat.playOneMinute":98452,"stat.leaveGame":1,"stat.timeSinceDeath":98452,"stat.sprintOneCm":5613,"achievement.exploreAllBiomes":{"value":0,"progress":["DesertHills"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/1714a812-885f-3243-b534-9a660fba6e8b.json b/workspace/saves/Copy of mcpworldpp/stats/1714a812-885f-3243-b534-9a660fba6e8b.json new file mode 100644 index 00000000..e7ef90ca --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/1714a812-885f-3243-b534-9a660fba6e8b.json @@ -0,0 +1 @@ +{"stat.flyOneCm":1495,"stat.walkOneCm":8128,"stat.jump":9,"stat.playOneMinute":28599,"stat.leaveGame":1,"stat.timeSinceDeath":28599,"stat.sprintOneCm":7592,"achievement.exploreAllBiomes":{"value":0,"progress":["Desert"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/197d9491-ff34-3fd1-8394-1aadd56cfa2c.json b/workspace/saves/Copy of mcpworldpp/stats/197d9491-ff34-3fd1-8394-1aadd56cfa2c.json new file mode 100644 index 00000000..d6326aa1 --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/197d9491-ff34-3fd1-8394-1aadd56cfa2c.json @@ -0,0 +1 @@ +{"stat.playOneMinute":672,"stat.leaveGame":1,"stat.timeSinceDeath":672,"achievement.exploreAllBiomes":{"value":0,"progress":["Desert"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/1aca2fd8-a080-3d28-afe0-430fc033484e.json b/workspace/saves/Copy of mcpworldpp/stats/1aca2fd8-a080-3d28-afe0-430fc033484e.json new file mode 100644 index 00000000..afe697b4 --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/1aca2fd8-a080-3d28-afe0-430fc033484e.json @@ -0,0 +1 @@ +{"stat.flyOneCm":241,"stat.walkOneCm":1246,"stat.jump":2,"stat.playOneMinute":4999,"stat.leaveGame":1,"stat.timeSinceDeath":4999,"stat.sprintOneCm":238,"achievement.exploreAllBiomes":{"value":0,"progress":["DesertHills"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/1b03cef3-3bb0-3335-8575-75a992fee2b9.json b/workspace/saves/Copy of mcpworldpp/stats/1b03cef3-3bb0-3335-8575-75a992fee2b9.json new file mode 100644 index 00000000..d60d5732 --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/1b03cef3-3bb0-3335-8575-75a992fee2b9.json @@ -0,0 +1 @@ +{"stat.flyOneCm":157,"stat.walkOneCm":202,"stat.jump":1,"stat.playOneMinute":89,"stat.leaveGame":2,"stat.timeSinceDeath":89,"stat.sprintOneCm":92,"achievement.exploreAllBiomes":{"value":0,"progress":["DesertHills"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/29aa321a-1ce7-35de-bfab-f37fa4095c7d.json b/workspace/saves/Copy of mcpworldpp/stats/29aa321a-1ce7-35de-bfab-f37fa4095c7d.json new file mode 100644 index 00000000..19d065de --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/29aa321a-1ce7-35de-bfab-f37fa4095c7d.json @@ -0,0 +1 @@ +{"stat.flyOneCm":86,"stat.walkOneCm":355,"stat.jump":3,"stat.playOneMinute":1167,"stat.leaveGame":1,"stat.timeSinceDeath":1167,"stat.sprintOneCm":37,"achievement.exploreAllBiomes":{"value":0,"progress":["Desert"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/2a68c4a4-c1ba-3396-a626-ac7041e25da5.json b/workspace/saves/Copy of mcpworldpp/stats/2a68c4a4-c1ba-3396-a626-ac7041e25da5.json new file mode 100644 index 00000000..b760075c --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/2a68c4a4-c1ba-3396-a626-ac7041e25da5.json @@ -0,0 +1 @@ +{"stat.playOneMinute":7329,"stat.leaveGame":1,"stat.timeSinceDeath":7329,"achievement.exploreAllBiomes":{"value":0,"progress":["Desert"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/2adbb68a-c561-3c7a-ac3a-f724c1f981bb.json b/workspace/saves/Copy of mcpworldpp/stats/2adbb68a-c561-3c7a-ac3a-f724c1f981bb.json new file mode 100644 index 00000000..8d159c0d --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/2adbb68a-c561-3c7a-ac3a-f724c1f981bb.json @@ -0,0 +1 @@ +{"stat.flyOneCm":510,"stat.walkOneCm":296,"stat.jump":3,"stat.playOneMinute":109,"stat.leaveGame":2,"stat.timeSinceDeath":109,"stat.sprintOneCm":264,"achievement.exploreAllBiomes":{"value":0,"progress":["DesertHills"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/2e2bad62-fd9f-3bb5-a89e-b314a4f30e73.json b/workspace/saves/Copy of mcpworldpp/stats/2e2bad62-fd9f-3bb5-a89e-b314a4f30e73.json new file mode 100644 index 00000000..81fa4b38 --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/2e2bad62-fd9f-3bb5-a89e-b314a4f30e73.json @@ -0,0 +1 @@ +{"stat.flyOneCm":875,"stat.walkOneCm":2545,"stat.jump":3,"stat.playOneMinute":1418,"stat.leaveGame":1,"stat.timeSinceDeath":1418,"stat.sprintOneCm":2453,"achievement.exploreAllBiomes":{"value":0,"progress":["Desert"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/3247b050-58df-3a7e-91f5-44a3d807681c.json b/workspace/saves/Copy of mcpworldpp/stats/3247b050-58df-3a7e-91f5-44a3d807681c.json new file mode 100644 index 00000000..f7c78708 --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/3247b050-58df-3a7e-91f5-44a3d807681c.json @@ -0,0 +1 @@ +{"stat.playOneMinute":3191,"stat.leaveGame":1,"stat.timeSinceDeath":3191,"achievement.exploreAllBiomes":{"value":0,"progress":["Desert"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/3c28cca8-db38-324d-ac91-779beed87c8d.json b/workspace/saves/Copy of mcpworldpp/stats/3c28cca8-db38-324d-ac91-779beed87c8d.json new file mode 100644 index 00000000..2573a536 --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/3c28cca8-db38-324d-ac91-779beed87c8d.json @@ -0,0 +1 @@ +{"stat.flyOneCm":687,"stat.walkOneCm":2489,"stat.jump":5,"stat.playOneMinute":444,"stat.leaveGame":1,"stat.timeSinceDeath":444,"stat.sprintOneCm":2374,"achievement.exploreAllBiomes":{"value":0,"progress":["Desert"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/3eec9f18-1d0e-3f17-917c-6994e7d034d1.json b/workspace/saves/Copy of mcpworldpp/stats/3eec9f18-1d0e-3f17-917c-6994e7d034d1.json new file mode 100644 index 00000000..3bc1fd15 --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/3eec9f18-1d0e-3f17-917c-6994e7d034d1.json @@ -0,0 +1 @@ +{"stat.playOneMinute":13,"stat.leaveGame":1,"stat.timeSinceDeath":13,"achievement.exploreAllBiomes":{"value":0,"progress":["Desert"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/3fff7d86-24d6-33b1-8ce1-9423a13c7c89.json b/workspace/saves/Copy of mcpworldpp/stats/3fff7d86-24d6-33b1-8ce1-9423a13c7c89.json new file mode 100644 index 00000000..9d26e7ca --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/3fff7d86-24d6-33b1-8ce1-9423a13c7c89.json @@ -0,0 +1 @@ +{"stat.flyOneCm":1207,"stat.walkOneCm":3530,"stat.jump":6,"stat.playOneMinute":5170,"stat.leaveGame":1,"stat.timeSinceDeath":5170,"stat.sprintOneCm":3389,"achievement.exploreAllBiomes":{"value":0,"progress":["Desert"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/43c314ca-2c75-349f-b8fe-ad7c6fada15e.json b/workspace/saves/Copy of mcpworldpp/stats/43c314ca-2c75-349f-b8fe-ad7c6fada15e.json new file mode 100644 index 00000000..98ae4da4 --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/43c314ca-2c75-349f-b8fe-ad7c6fada15e.json @@ -0,0 +1 @@ +{"stat.flyOneCm":45,"stat.walkOneCm":188,"stat.jump":1,"stat.playOneMinute":30,"stat.leaveGame":1,"stat.timeSinceDeath":30,"stat.sprintOneCm":188,"achievement.exploreAllBiomes":{"value":0,"progress":["DesertHills"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/4bb7849b-3b46-3d6a-81b9-13bb408e8517.json b/workspace/saves/Copy of mcpworldpp/stats/4bb7849b-3b46-3d6a-81b9-13bb408e8517.json new file mode 100644 index 00000000..10c222bd --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/4bb7849b-3b46-3d6a-81b9-13bb408e8517.json @@ -0,0 +1 @@ +{"stat.playOneMinute":8893,"stat.leaveGame":1,"stat.timeSinceDeath":8893,"achievement.exploreAllBiomes":{"value":0,"progress":["Desert"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/4e1f5e28-f05f-3acf-ac65-db01d9d51f95.json b/workspace/saves/Copy of mcpworldpp/stats/4e1f5e28-f05f-3acf-ac65-db01d9d51f95.json new file mode 100644 index 00000000..2b29894e --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/4e1f5e28-f05f-3acf-ac65-db01d9d51f95.json @@ -0,0 +1 @@ +{"stat.walkOneCm":21,"stat.playOneMinute":2961,"stat.leaveGame":1,"stat.timeSinceDeath":2961,"achievement.exploreAllBiomes":{"value":0,"progress":["Desert"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/4ed9b5cf-d91a-3bc8-9000-b0476eccd342.json b/workspace/saves/Copy of mcpworldpp/stats/4ed9b5cf-d91a-3bc8-9000-b0476eccd342.json new file mode 100644 index 00000000..fd958586 --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/4ed9b5cf-d91a-3bc8-9000-b0476eccd342.json @@ -0,0 +1 @@ +{"stat.walkOneCm":64,"stat.jump":1,"stat.playOneMinute":21861,"stat.leaveGame":1,"stat.timeSinceDeath":21861,"stat.sprintOneCm":56,"achievement.exploreAllBiomes":{"value":0,"progress":["Desert"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/4f2b9d55-5b3e-32ee-ad58-c8df44a23337.json b/workspace/saves/Copy of mcpworldpp/stats/4f2b9d55-5b3e-32ee-ad58-c8df44a23337.json new file mode 100644 index 00000000..0a5fc4a5 --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/4f2b9d55-5b3e-32ee-ad58-c8df44a23337.json @@ -0,0 +1 @@ +{"stat.playOneMinute":240,"stat.leaveGame":1,"stat.timeSinceDeath":240,"achievement.exploreAllBiomes":{"value":0,"progress":["Desert"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/4fdf550e-f3b3-3a06-8485-0916b2b491bc.json b/workspace/saves/Copy of mcpworldpp/stats/4fdf550e-f3b3-3a06-8485-0916b2b491bc.json new file mode 100644 index 00000000..c32c14ee --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/4fdf550e-f3b3-3a06-8485-0916b2b491bc.json @@ -0,0 +1 @@ +{"stat.walkOneCm":385,"stat.playOneMinute":27,"stat.leaveGame":1,"stat.timeSinceDeath":27,"achievement.exploreAllBiomes":{"value":0,"progress":["DesertHills"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/530fa97a-357f-3c19-94d3-0c5c65c18fe8.json b/workspace/saves/Copy of mcpworldpp/stats/530fa97a-357f-3c19-94d3-0c5c65c18fe8.json new file mode 100644 index 00000000..aa80e867 --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/530fa97a-357f-3c19-94d3-0c5c65c18fe8.json @@ -0,0 +1 @@ +{"stat.flyOneCm":338,"stat.walkOneCm":414,"stat.jump":2,"stat.playOneMinute":58,"stat.leaveGame":2,"stat.timeSinceDeath":58,"stat.sprintOneCm":122} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/5c4f0ba0-5b89-33cd-bd9d-007c51e4a99f.json b/workspace/saves/Copy of mcpworldpp/stats/5c4f0ba0-5b89-33cd-bd9d-007c51e4a99f.json new file mode 100644 index 00000000..f04e8018 --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/5c4f0ba0-5b89-33cd-bd9d-007c51e4a99f.json @@ -0,0 +1 @@ +{"stat.flyOneCm":43,"stat.walkOneCm":83,"stat.jump":1,"stat.playOneMinute":4160,"stat.leaveGame":1,"stat.timeSinceDeath":4160,"stat.sprintOneCm":33,"achievement.exploreAllBiomes":{"value":0,"progress":["Desert"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/5cc48495-676c-3721-aed2-7336730ff405.json b/workspace/saves/Copy of mcpworldpp/stats/5cc48495-676c-3721-aed2-7336730ff405.json new file mode 100644 index 00000000..1f5d8f49 --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/5cc48495-676c-3721-aed2-7336730ff405.json @@ -0,0 +1 @@ +{"stat.flyOneCm":4814,"stat.walkOneCm":1435,"stat.jump":20,"stat.playOneMinute":41997,"stat.leaveGame":3,"stat.timeSinceDeath":41997,"stat.sprintOneCm":1122,"achievement.exploreAllBiomes":{"value":0,"progress":["Desert"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/638f7175-5dde-3b0d-a13d-f593ecd79b38.json b/workspace/saves/Copy of mcpworldpp/stats/638f7175-5dde-3b0d-a13d-f593ecd79b38.json new file mode 100644 index 00000000..d6792dfd --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/638f7175-5dde-3b0d-a13d-f593ecd79b38.json @@ -0,0 +1 @@ +{"stat.flyOneCm":41,"stat.walkOneCm":507,"stat.jump":1,"stat.playOneMinute":4137,"achievement.openInventory":1,"stat.leaveGame":1,"stat.timeSinceDeath":4137,"stat.sprintOneCm":108,"achievement.exploreAllBiomes":{"value":0,"progress":["Desert"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/66157e7a-53e0-3299-9208-7674efd706f9.json b/workspace/saves/Copy of mcpworldpp/stats/66157e7a-53e0-3299-9208-7674efd706f9.json new file mode 100644 index 00000000..027762c9 --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/66157e7a-53e0-3299-9208-7674efd706f9.json @@ -0,0 +1 @@ +{"stat.playOneMinute":661,"stat.leaveGame":1,"stat.timeSinceDeath":661,"achievement.exploreAllBiomes":{"value":0,"progress":["Desert"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/68cf6d02-03bc-3f3b-ab98-76a8ec749597.json b/workspace/saves/Copy of mcpworldpp/stats/68cf6d02-03bc-3f3b-ab98-76a8ec749597.json new file mode 100644 index 00000000..6fc0484f --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/68cf6d02-03bc-3f3b-ab98-76a8ec749597.json @@ -0,0 +1 @@ +{"stat.walkOneCm":282,"stat.jump":2,"stat.playOneMinute":1654,"stat.leaveGame":1,"stat.timeSinceDeath":1654,"achievement.exploreAllBiomes":{"value":0,"progress":["Desert"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/6db1171d-4fa6-31cb-b425-1896281a26e2.json b/workspace/saves/Copy of mcpworldpp/stats/6db1171d-4fa6-31cb-b425-1896281a26e2.json new file mode 100644 index 00000000..225ce48f --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/6db1171d-4fa6-31cb-b425-1896281a26e2.json @@ -0,0 +1 @@ +{"stat.flyOneCm":10226,"stat.walkOneCm":11264,"stat.jump":36,"stat.playOneMinute":20627,"stat.leaveGame":1,"stat.timeSinceDeath":20627,"stat.sprintOneCm":4437,"achievement.exploreAllBiomes":{"value":0,"progress":["River","Desert"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/71ee4b7e-330e-3d50-90a4-3d964a618ea8.json b/workspace/saves/Copy of mcpworldpp/stats/71ee4b7e-330e-3d50-90a4-3d964a618ea8.json new file mode 100644 index 00000000..fc3cc21e --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/71ee4b7e-330e-3d50-90a4-3d964a618ea8.json @@ -0,0 +1 @@ +{"stat.flyOneCm":461,"stat.walkOneCm":430,"stat.jump":4,"stat.playOneMinute":259,"stat.leaveGame":1,"stat.timeSinceDeath":259,"stat.sprintOneCm":316,"achievement.exploreAllBiomes":{"value":0,"progress":["Desert"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/7328fbd9-6879-3343-b321-ed1f1a1e9892.json b/workspace/saves/Copy of mcpworldpp/stats/7328fbd9-6879-3343-b321-ed1f1a1e9892.json new file mode 100644 index 00000000..1ba32cf5 --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/7328fbd9-6879-3343-b321-ed1f1a1e9892.json @@ -0,0 +1 @@ +{"stat.playOneMinute":1205,"stat.leaveGame":1,"stat.timeSinceDeath":1205,"achievement.exploreAllBiomes":{"value":0,"progress":["Desert"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/74e89738-6c9e-4f59-83ef-d365849e6049.json b/workspace/saves/Copy of mcpworldpp/stats/74e89738-6c9e-4f59-83ef-d365849e6049.json new file mode 100644 index 00000000..2f761818 --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/74e89738-6c9e-4f59-83ef-d365849e6049.json @@ -0,0 +1 @@ +{"stat.flyOneCm":4450,"stat.walkOneCm":1368,"stat.jump":7,"stat.playOneMinute":54580,"achievement.openInventory":2,"stat.leaveGame":9,"stat.timeSinceDeath":54580,"stat.sprintOneCm":584,"achievement.exploreAllBiomes":{"value":0,"progress":["DesertHills","Desert"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/75e52373-1963-3666-bda9-8904d639e38b.json b/workspace/saves/Copy of mcpworldpp/stats/75e52373-1963-3666-bda9-8904d639e38b.json new file mode 100644 index 00000000..c0f61636 --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/75e52373-1963-3666-bda9-8904d639e38b.json @@ -0,0 +1 @@ +{"stat.walkOneCm":7,"stat.playOneMinute":43,"stat.leaveGame":1,"stat.timeSinceDeath":43,"achievement.exploreAllBiomes":{"value":0,"progress":["Desert"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/77167de3-5df9-3c83-b06a-bed9a476e835.json b/workspace/saves/Copy of mcpworldpp/stats/77167de3-5df9-3c83-b06a-bed9a476e835.json index f19d2905..3b28edd3 100644 --- a/workspace/saves/Copy of mcpworldpp/stats/77167de3-5df9-3c83-b06a-bed9a476e835.json +++ b/workspace/saves/Copy of mcpworldpp/stats/77167de3-5df9-3c83-b06a-bed9a476e835.json @@ -1 +1 @@ -{"stat.playOneMinute":8103,"stat.leaveGame":1,"stat.timeSinceDeath":8103,"achievement.exploreAllBiomes":{"value":0,"progress":["Desert"]}} \ No newline at end of file +{"stat.flyOneCm":96,"stat.walkOneCm":127,"stat.jump":1,"stat.playOneMinute":19749,"stat.leaveGame":2,"stat.timeSinceDeath":19749,"stat.sprintOneCm":82,"achievement.exploreAllBiomes":{"value":0,"progress":["Desert"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/7ba45a5a-c3de-3909-ba3c-f9f78edf15b6.json b/workspace/saves/Copy of mcpworldpp/stats/7ba45a5a-c3de-3909-ba3c-f9f78edf15b6.json new file mode 100644 index 00000000..4131a7dc --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/7ba45a5a-c3de-3909-ba3c-f9f78edf15b6.json @@ -0,0 +1 @@ +{"stat.flyOneCm":2772,"stat.walkOneCm":1100,"stat.jump":8,"stat.playOneMinute":4370,"stat.leaveGame":1,"stat.timeSinceDeath":4370,"stat.sprintOneCm":513,"achievement.exploreAllBiomes":{"value":0,"progress":["Desert"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/7fef5833-06c9-398a-84c0-fbd3a81ff548.json b/workspace/saves/Copy of mcpworldpp/stats/7fef5833-06c9-398a-84c0-fbd3a81ff548.json new file mode 100644 index 00000000..081ef1ad --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/7fef5833-06c9-398a-84c0-fbd3a81ff548.json @@ -0,0 +1 @@ +{"stat.flyOneCm":2185,"stat.walkOneCm":9906,"stat.jump":4,"stat.playOneMinute":6102,"achievement.openInventory":1,"stat.leaveGame":1,"stat.damageDealt":50,"stat.timeSinceDeath":6102,"stat.sprintOneCm":3230,"stat.useItem.minecraft.spawn_egg":1,"achievement.exploreAllBiomes":{"value":0,"progress":["Desert"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/8cfc5391-e37d-328f-a689-9b5f6c4663f5.json b/workspace/saves/Copy of mcpworldpp/stats/8cfc5391-e37d-328f-a689-9b5f6c4663f5.json index 0720c3d9..13ee8491 100644 --- a/workspace/saves/Copy of mcpworldpp/stats/8cfc5391-e37d-328f-a689-9b5f6c4663f5.json +++ b/workspace/saves/Copy of mcpworldpp/stats/8cfc5391-e37d-328f-a689-9b5f6c4663f5.json @@ -1 +1 @@ -{"stat.playOneMinute":32,"stat.leaveGame":1,"stat.timeSinceDeath":32} \ No newline at end of file +{"stat.flyOneCm":534,"stat.walkOneCm":94,"stat.jump":1,"stat.playOneMinute":2816,"achievement.openInventory":1,"stat.leaveGame":2,"stat.timeSinceDeath":2816,"achievement.exploreAllBiomes":{"value":0,"progress":["Desert"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/93bfa0b6-cc14-3c0c-8efa-0bcc48245274.json b/workspace/saves/Copy of mcpworldpp/stats/93bfa0b6-cc14-3c0c-8efa-0bcc48245274.json new file mode 100644 index 00000000..11f00566 --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/93bfa0b6-cc14-3c0c-8efa-0bcc48245274.json @@ -0,0 +1 @@ +{"stat.flyOneCm":50411,"stat.walkOneCm":8890,"stat.jump":38,"stat.playOneMinute":25404,"achievement.openInventory":1,"stat.leaveGame":1,"stat.crouchOneCm":122,"stat.timeSinceDeath":25404,"stat.sprintOneCm":5195,"achievement.exploreAllBiomes":{"value":0,"progress":["Desert"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/942531dd-7690-3c0a-ad42-657bb212e7b6.json b/workspace/saves/Copy of mcpworldpp/stats/942531dd-7690-3c0a-ad42-657bb212e7b6.json new file mode 100644 index 00000000..ebf1e850 --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/942531dd-7690-3c0a-ad42-657bb212e7b6.json @@ -0,0 +1 @@ +{"stat.playOneMinute":47,"stat.leaveGame":1,"stat.timeSinceDeath":47,"achievement.exploreAllBiomes":{"value":0,"progress":["Desert"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/989691b1-d197-3995-a55e-281cda3663ae.json b/workspace/saves/Copy of mcpworldpp/stats/989691b1-d197-3995-a55e-281cda3663ae.json new file mode 100644 index 00000000..307b6647 --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/989691b1-d197-3995-a55e-281cda3663ae.json @@ -0,0 +1 @@ +{"stat.flyOneCm":895,"stat.walkOneCm":960,"stat.jump":4,"stat.playOneMinute":17259,"stat.leaveGame":1,"stat.timeSinceDeath":17259,"stat.sprintOneCm":531,"achievement.exploreAllBiomes":{"value":0,"progress":["Desert"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/9df70e84-3251-33fb-9047-d59112057246.json b/workspace/saves/Copy of mcpworldpp/stats/9df70e84-3251-33fb-9047-d59112057246.json new file mode 100644 index 00000000..8d2a2222 --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/9df70e84-3251-33fb-9047-d59112057246.json @@ -0,0 +1 @@ +{"stat.playOneMinute":2436,"stat.leaveGame":1,"stat.timeSinceDeath":2436,"achievement.exploreAllBiomes":{"value":0,"progress":["Desert"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/9e5d41e7-4785-3b2f-8261-593dade57f6e.json b/workspace/saves/Copy of mcpworldpp/stats/9e5d41e7-4785-3b2f-8261-593dade57f6e.json new file mode 100644 index 00000000..58e43738 --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/9e5d41e7-4785-3b2f-8261-593dade57f6e.json @@ -0,0 +1 @@ +{"stat.flyOneCm":632,"stat.walkOneCm":18937,"stat.jump":5,"stat.playOneMinute":9881,"achievement.openInventory":1,"stat.leaveGame":2,"stat.damageDealt":310,"stat.crouchOneCm":483,"stat.timeSinceDeath":9881,"stat.sprintOneCm":539,"stat.mobKills":1,"stat.useItem.minecraft.spawn_egg":2,"achievement.exploreAllBiomes":{"value":0,"progress":["Desert"]},"stat.killEntity.Creeper":1,"stat.useItem.minecraft.diamond_sword":3} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/a08e137b-04fa-3fce-96cc-517c7a87690d.json b/workspace/saves/Copy of mcpworldpp/stats/a08e137b-04fa-3fce-96cc-517c7a87690d.json new file mode 100644 index 00000000..042a889d --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/a08e137b-04fa-3fce-96cc-517c7a87690d.json @@ -0,0 +1 @@ +{"stat.playOneMinute":4106,"stat.leaveGame":1,"stat.timeSinceDeath":4106,"achievement.exploreAllBiomes":{"value":0,"progress":["Desert"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/aeca01bf-232e-37a2-985b-599827b3226a.json b/workspace/saves/Copy of mcpworldpp/stats/aeca01bf-232e-37a2-985b-599827b3226a.json new file mode 100644 index 00000000..d70cb609 --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/aeca01bf-232e-37a2-985b-599827b3226a.json @@ -0,0 +1 @@ +{"stat.playOneMinute":4436,"stat.leaveGame":1,"stat.timeSinceDeath":4436,"achievement.exploreAllBiomes":{"value":0,"progress":["Desert"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/b136c8aa-0654-3583-8db1-8749e12181a1.json b/workspace/saves/Copy of mcpworldpp/stats/b136c8aa-0654-3583-8db1-8749e12181a1.json new file mode 100644 index 00000000..c6da850d --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/b136c8aa-0654-3583-8db1-8749e12181a1.json @@ -0,0 +1 @@ +{"stat.flyOneCm":43172,"stat.walkOneCm":1646,"stat.jump":17,"stat.playOneMinute":6051,"stat.leaveGame":1,"stat.timeSinceDeath":6051,"stat.sprintOneCm":1565,"achievement.exploreAllBiomes":{"value":0,"progress":["DesertHills","Desert"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/b25e3f31-3d0d-30a3-b307-8902510a505e.json b/workspace/saves/Copy of mcpworldpp/stats/b25e3f31-3d0d-30a3-b307-8902510a505e.json new file mode 100644 index 00000000..0e5aa1ff --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/b25e3f31-3d0d-30a3-b307-8902510a505e.json @@ -0,0 +1 @@ +{"stat.flyOneCm":479,"stat.walkOneCm":3889,"stat.jump":10,"stat.playOneMinute":4743,"stat.leaveGame":1,"stat.timeSinceDeath":4743,"stat.sprintOneCm":1686,"achievement.exploreAllBiomes":{"value":0,"progress":["Desert"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/babe9e7f-35b2-34ef-82f9-4869d34a0755.json b/workspace/saves/Copy of mcpworldpp/stats/babe9e7f-35b2-34ef-82f9-4869d34a0755.json new file mode 100644 index 00000000..86b149d7 --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/babe9e7f-35b2-34ef-82f9-4869d34a0755.json @@ -0,0 +1 @@ +{"stat.playOneMinute":13153,"stat.leaveGame":1,"stat.timeSinceDeath":13153,"achievement.exploreAllBiomes":{"value":0,"progress":["Desert"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/bf0c47d3-02b6-3463-8e38-457226b1407c.json b/workspace/saves/Copy of mcpworldpp/stats/bf0c47d3-02b6-3463-8e38-457226b1407c.json new file mode 100644 index 00000000..1f8852af --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/bf0c47d3-02b6-3463-8e38-457226b1407c.json @@ -0,0 +1 @@ +{"stat.walkOneCm":829,"stat.playOneMinute":3254,"stat.leaveGame":1,"stat.timeSinceDeath":3254,"achievement.exploreAllBiomes":{"value":0,"progress":["DesertHills"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/ccf0c278-c21f-3ec3-a87c-05202673a5dd.json b/workspace/saves/Copy of mcpworldpp/stats/ccf0c278-c21f-3ec3-a87c-05202673a5dd.json new file mode 100644 index 00000000..8ed1d208 --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/ccf0c278-c21f-3ec3-a87c-05202673a5dd.json @@ -0,0 +1 @@ +{"stat.playOneMinute":1825,"stat.leaveGame":1,"stat.timeSinceDeath":1825,"achievement.exploreAllBiomes":{"value":0,"progress":["Desert"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/d1b650bf-5f9c-37d3-a469-4d66d1968f90.json b/workspace/saves/Copy of mcpworldpp/stats/d1b650bf-5f9c-37d3-a469-4d66d1968f90.json new file mode 100644 index 00000000..28f8f4dc --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/d1b650bf-5f9c-37d3-a469-4d66d1968f90.json @@ -0,0 +1 @@ +{"stat.walkOneCm":33,"stat.jump":1,"stat.playOneMinute":26,"stat.leaveGame":1,"stat.timeSinceDeath":26,"stat.sprintOneCm":33,"achievement.exploreAllBiomes":{"value":0,"progress":["DesertHills"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/dcea94fd-efa4-3c29-93d8-2d56666245c7.json b/workspace/saves/Copy of mcpworldpp/stats/dcea94fd-efa4-3c29-93d8-2d56666245c7.json new file mode 100644 index 00000000..21cd8e7b --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/dcea94fd-efa4-3c29-93d8-2d56666245c7.json @@ -0,0 +1 @@ +{"stat.flyOneCm":252,"stat.walkOneCm":7329,"stat.drop":1,"stat.jump":19,"stat.playOneMinute":4761,"stat.leaveGame":1,"stat.timeSinceDeath":4761,"stat.sprintOneCm":1920,"achievement.exploreAllBiomes":{"value":0,"progress":["Desert"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/df2d3e26-a8b7-3aae-9296-f3a891282132.json b/workspace/saves/Copy of mcpworldpp/stats/df2d3e26-a8b7-3aae-9296-f3a891282132.json new file mode 100644 index 00000000..d52a1adf --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/df2d3e26-a8b7-3aae-9296-f3a891282132.json @@ -0,0 +1 @@ +{"stat.flyOneCm":89,"stat.walkOneCm":528,"stat.jump":4,"stat.playOneMinute":10266,"stat.leaveGame":1,"stat.timeSinceDeath":10266,"stat.sprintOneCm":363,"achievement.exploreAllBiomes":{"value":0,"progress":["Desert"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/df7bffa7-7a2f-3fb4-9898-fa23c41e49b8.json b/workspace/saves/Copy of mcpworldpp/stats/df7bffa7-7a2f-3fb4-9898-fa23c41e49b8.json new file mode 100644 index 00000000..e2086628 --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/df7bffa7-7a2f-3fb4-9898-fa23c41e49b8.json @@ -0,0 +1 @@ +{"stat.flyOneCm":1831,"stat.walkOneCm":673,"stat.jump":12,"stat.playOneMinute":11174,"stat.leaveGame":1,"stat.timeSinceDeath":11174,"stat.sprintOneCm":517,"achievement.exploreAllBiomes":{"value":0,"progress":["Desert"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/e012d939-bd4c-38f9-ae46-831d4959ff05.json b/workspace/saves/Copy of mcpworldpp/stats/e012d939-bd4c-38f9-ae46-831d4959ff05.json new file mode 100644 index 00000000..e7b22240 --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/e012d939-bd4c-38f9-ae46-831d4959ff05.json @@ -0,0 +1 @@ +{"stat.walkOneCm":103,"stat.jump":1,"stat.playOneMinute":3517,"stat.leaveGame":1,"stat.timeSinceDeath":3517,"achievement.exploreAllBiomes":{"value":0,"progress":["Desert"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/e122e0b0-374f-3b1b-a986-63f4fefee57a.json b/workspace/saves/Copy of mcpworldpp/stats/e122e0b0-374f-3b1b-a986-63f4fefee57a.json new file mode 100644 index 00000000..221980e6 --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/e122e0b0-374f-3b1b-a986-63f4fefee57a.json @@ -0,0 +1 @@ +{"stat.playOneMinute":736,"stat.leaveGame":1,"stat.timeSinceDeath":736,"achievement.exploreAllBiomes":{"value":0,"progress":["Desert"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/e4358028-bc3b-38cc-b645-4d08d3b4f456.json b/workspace/saves/Copy of mcpworldpp/stats/e4358028-bc3b-38cc-b645-4d08d3b4f456.json new file mode 100644 index 00000000..48c1769f --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/e4358028-bc3b-38cc-b645-4d08d3b4f456.json @@ -0,0 +1 @@ +{"stat.playOneMinute":11502,"stat.leaveGame":1,"stat.timeSinceDeath":11502,"achievement.exploreAllBiomes":{"value":0,"progress":["Desert"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/e4e5b30f-b972-382c-b5e5-86c2e785a8a6.json b/workspace/saves/Copy of mcpworldpp/stats/e4e5b30f-b972-382c-b5e5-86c2e785a8a6.json new file mode 100644 index 00000000..ee1477ee --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/e4e5b30f-b972-382c-b5e5-86c2e785a8a6.json @@ -0,0 +1 @@ +{"stat.flyOneCm":11079,"stat.walkOneCm":2824,"stat.jump":26,"stat.playOneMinute":2878,"stat.leaveGame":1,"stat.timeSinceDeath":2878,"stat.sprintOneCm":2307,"achievement.exploreAllBiomes":{"value":0,"progress":["River","Desert"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/e664a043-6e9c-3d0d-9b38-cc385e35aba9.json b/workspace/saves/Copy of mcpworldpp/stats/e664a043-6e9c-3d0d-9b38-cc385e35aba9.json new file mode 100644 index 00000000..a77831f4 --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/e664a043-6e9c-3d0d-9b38-cc385e35aba9.json @@ -0,0 +1 @@ +{"stat.walkOneCm":333,"stat.playOneMinute":133,"stat.leaveGame":1,"stat.timeSinceDeath":133,"stat.sprintOneCm":155,"achievement.exploreAllBiomes":{"value":0,"progress":["Desert"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/eadcccd1-5981-31ce-8342-c727c73b0197.json b/workspace/saves/Copy of mcpworldpp/stats/eadcccd1-5981-31ce-8342-c727c73b0197.json new file mode 100644 index 00000000..05aba0a8 --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/eadcccd1-5981-31ce-8342-c727c73b0197.json @@ -0,0 +1 @@ +{"stat.playOneMinute":3542,"stat.leaveGame":1,"stat.timeSinceDeath":3542,"achievement.exploreAllBiomes":{"value":0,"progress":["Desert"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/eed453d8-1b3a-3fa3-9fc5-1cf433d73521.json b/workspace/saves/Copy of mcpworldpp/stats/eed453d8-1b3a-3fa3-9fc5-1cf433d73521.json new file mode 100644 index 00000000..e49a2e61 --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/eed453d8-1b3a-3fa3-9fc5-1cf433d73521.json @@ -0,0 +1 @@ +{"stat.flyOneCm":95,"stat.walkOneCm":158,"stat.jump":2,"stat.playOneMinute":729,"stat.leaveGame":1,"stat.timeSinceDeath":729,"stat.sprintOneCm":57,"achievement.exploreAllBiomes":{"value":0,"progress":["Desert"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/eee10812-13cd-3f90-b77f-2195c9c5b71e.json b/workspace/saves/Copy of mcpworldpp/stats/eee10812-13cd-3f90-b77f-2195c9c5b71e.json new file mode 100644 index 00000000..6f4b79f4 --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/eee10812-13cd-3f90-b77f-2195c9c5b71e.json @@ -0,0 +1 @@ +{"stat.flyOneCm":5320,"stat.walkOneCm":7178,"stat.drop":1,"stat.jump":44,"stat.useItem.minecraft.sand":5,"stat.playOneMinute":12659,"achievement.openInventory":1,"stat.leaveGame":1,"stat.timeSinceDeath":12659,"stat.sprintOneCm":5959,"achievement.exploreAllBiomes":{"value":0,"progress":["Desert"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/f0c5379b-0e4e-34aa-808d-37fef9b5ce6c.json b/workspace/saves/Copy of mcpworldpp/stats/f0c5379b-0e4e-34aa-808d-37fef9b5ce6c.json new file mode 100644 index 00000000..b4170a49 --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/f0c5379b-0e4e-34aa-808d-37fef9b5ce6c.json @@ -0,0 +1 @@ +{"stat.flyOneCm":526,"stat.walkOneCm":1699,"stat.jump":8,"stat.playOneMinute":2429,"stat.leaveGame":1,"stat.timeSinceDeath":2429,"stat.sprintOneCm":370,"achievement.exploreAllBiomes":{"value":0,"progress":["Desert"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/f318a6c7-0ff1-368e-9d3e-1b850b84da5e.json b/workspace/saves/Copy of mcpworldpp/stats/f318a6c7-0ff1-368e-9d3e-1b850b84da5e.json new file mode 100644 index 00000000..661403e5 --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/f318a6c7-0ff1-368e-9d3e-1b850b84da5e.json @@ -0,0 +1 @@ +{"stat.flyOneCm":299,"stat.walkOneCm":325,"stat.jump":2,"stat.playOneMinute":5545,"stat.leaveGame":1,"stat.timeSinceDeath":5545,"stat.sprintOneCm":193,"achievement.exploreAllBiomes":{"value":0,"progress":["Desert"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/f72636fb-c7db-3c44-8cd4-8a6790fd9b69.json b/workspace/saves/Copy of mcpworldpp/stats/f72636fb-c7db-3c44-8cd4-8a6790fd9b69.json new file mode 100644 index 00000000..2a3bc6ee --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/f72636fb-c7db-3c44-8cd4-8a6790fd9b69.json @@ -0,0 +1 @@ +{"stat.flyOneCm":190,"stat.walkOneCm":2217,"stat.jump":1,"stat.playOneMinute":3021,"stat.leaveGame":1,"stat.timeSinceDeath":3021,"stat.sprintOneCm":960,"achievement.exploreAllBiomes":{"value":0,"progress":["Desert"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/fc74fe37-e9f9-3198-8e46-1eee97cacfa6.json b/workspace/saves/Copy of mcpworldpp/stats/fc74fe37-e9f9-3198-8e46-1eee97cacfa6.json new file mode 100644 index 00000000..9f11cb5b --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/fc74fe37-e9f9-3198-8e46-1eee97cacfa6.json @@ -0,0 +1 @@ +{"stat.flyOneCm":2043,"stat.walkOneCm":9425,"stat.jump":10,"stat.playOneMinute":6417,"stat.leaveGame":1,"stat.crouchOneCm":256,"stat.timeSinceDeath":6417,"stat.sprintOneCm":3279,"achievement.exploreAllBiomes":{"value":0,"progress":["Desert"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/fcaa91cc-3a77-3318-a8ae-f2f3862b7fde.json b/workspace/saves/Copy of mcpworldpp/stats/fcaa91cc-3a77-3318-a8ae-f2f3862b7fde.json index 864d330e..4b8798ed 100644 --- a/workspace/saves/Copy of mcpworldpp/stats/fcaa91cc-3a77-3318-a8ae-f2f3862b7fde.json +++ b/workspace/saves/Copy of mcpworldpp/stats/fcaa91cc-3a77-3318-a8ae-f2f3862b7fde.json @@ -1 +1 @@ -{"stat.playOneMinute":41,"stat.leaveGame":1,"stat.timeSinceDeath":41,"achievement.exploreAllBiomes":{"value":0,"progress":["Desert"]}} \ No newline at end of file +{"stat.walkOneCm":320,"stat.playOneMinute":1635,"stat.leaveGame":2,"stat.timeSinceDeath":1635,"achievement.exploreAllBiomes":{"value":0,"progress":["DesertHills","Desert"]}} \ No newline at end of file diff --git a/workspace/saves/Copy of mcpworldpp/stats/fd09468e-08e7-31aa-bab7-195a6ef31320.json b/workspace/saves/Copy of mcpworldpp/stats/fd09468e-08e7-31aa-bab7-195a6ef31320.json new file mode 100644 index 00000000..0720c3d9 --- /dev/null +++ b/workspace/saves/Copy of mcpworldpp/stats/fd09468e-08e7-31aa-bab7-195a6ef31320.json @@ -0,0 +1 @@ +{"stat.playOneMinute":32,"stat.leaveGame":1,"stat.timeSinceDeath":32} \ No newline at end of file diff --git a/workspace/saves/MCP Development World/level.dat b/workspace/saves/MCP Development World/level.dat index 1809b8d6..4dbfc683 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 2e5acb6c..675180a6 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/playerdata/1aca2fd8-a080-3d28-afe0-430fc033484e.dat b/workspace/saves/MCP Development World/playerdata/1aca2fd8-a080-3d28-afe0-430fc033484e.dat new file mode 100644 index 00000000..19542b89 Binary files /dev/null and b/workspace/saves/MCP Development World/playerdata/1aca2fd8-a080-3d28-afe0-430fc033484e.dat 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 3ba63241..0a0a87ef 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 c12caa71..b3ed6812 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 2527a742..83065cb3 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 411b8af5..bbf3dce1 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 b1c1818e..08fe5178 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/session.lock b/workspace/saves/MCP Development World/session.lock index 85fb5855..4530b938 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/saves/MCP Development World/stats/1aca2fd8-a080-3d28-afe0-430fc033484e.json b/workspace/saves/MCP Development World/stats/1aca2fd8-a080-3d28-afe0-430fc033484e.json new file mode 100644 index 00000000..dedb46ad --- /dev/null +++ b/workspace/saves/MCP Development World/stats/1aca2fd8-a080-3d28-afe0-430fc033484e.json @@ -0,0 +1 @@ +{"stat.playOneMinute":11,"stat.leaveGame":1,"stat.timeSinceDeath":11,"achievement.exploreAllBiomes":{"value":0,"progress":["Desert"]}} \ No newline at end of file diff --git a/workspace/screenshots/2023-06-09_22.21.46.png b/workspace/screenshots/2023-06-09_22.21.46.png new file mode 100644 index 00000000..077206fd Binary files /dev/null and b/workspace/screenshots/2023-06-09_22.21.46.png differ diff --git a/workspace/screenshots/2023-06-09_23.50.04.png b/workspace/screenshots/2023-06-09_23.50.04.png new file mode 100644 index 00000000..6a8681f8 Binary files /dev/null and b/workspace/screenshots/2023-06-09_23.50.04.png differ diff --git a/workspace/screenshots/2023-06-09_23.50.52.png b/workspace/screenshots/2023-06-09_23.50.52.png new file mode 100644 index 00000000..64594942 Binary files /dev/null and b/workspace/screenshots/2023-06-09_23.50.52.png differ diff --git a/workspace/screenshots/2023-06-09_23.52.48.png b/workspace/screenshots/2023-06-09_23.52.48.png new file mode 100644 index 00000000..d980d724 Binary files /dev/null and b/workspace/screenshots/2023-06-09_23.52.48.png differ diff --git a/workspace/screenshots/2023-06-10_15.53.53.png b/workspace/screenshots/2023-06-10_15.53.53.png new file mode 100644 index 00000000..3f49b723 Binary files /dev/null and b/workspace/screenshots/2023-06-10_15.53.53.png differ diff --git a/workspace/settings/accounts.json b/workspace/settings/accounts.json new file mode 100644 index 00000000..0f6ac15d --- /dev/null +++ b/workspace/settings/accounts.json @@ -0,0 +1,2 @@ +Account:SESSION:ziue:74e897386c9e4f5983efd365849e6049:eyJraWQiOiJhYzg0YSIsImFsZyI6IkhTMjU2In0.eyJ4dWlkIjoiMjUzNTQ1NzY0NzAzOTc0NCIsImFnZyI6IkFkdWx0Iiwic3ViIjoiZmJjMWNmNDAtOGVmYi00NTJiLTk0OWQtM2FmYTljYTUxNDNmIiwiYXV0aCI6IlhCT1giLCJucyI6ImRlZmF1bHQiLCJyb2xlcyI6W10sImlzcyI6ImF1dGhlbnRpY2F0aW9uIiwiZmxhZ3MiOlsidHdvZmFjdG9yYXV0aCIsIm9yZGVyc18yMDIyIl0sInBsYXRmb3JtIjoiVU5LTk9XTiIsInl1aWQiOiIxOGY1OTcyZGJkZTg0YTUwODhkODM3ODZkN2RmNzA2YiIsIm5iZiI6MTY4NjQwMjM2NiwiZXhwIjoxNjg2NDg4NzY2LCJpYXQiOjE2ODY0MDIzNjZ9.O6VuXdS13ypM71k6B3qcQDbzV78XDvh18H76bI4g52E +Current:ziue diff --git a/workspace/settings/configs/default.json b/workspace/settings/configs/default.json index 92f33ac1..2f89a09c 100644 --- a/workspace/settings/configs/default.json +++ b/workspace/settings/configs/default.json @@ -4,7 +4,7 @@ "bind": 0, "hud": {}, "bindtype": "Toggle", - "enabled": false + "enabled": true }, "Optimizer": { "settings": { @@ -12,7 +12,7 @@ "Remove chat background": false, "Merge TNT": true, "Better skin loading": true, - "Chunk update limiter": true, + "Chunk update limiter": false, "Remove item glint": true, "Chunk updates per second": 50, "Better Chests": false, @@ -39,6 +39,16 @@ "bindtype": "Toggle", "enabled": false }, + "Minimal Bobbing": { + "settings": { + "Remove Screen Bobbing": true, + "Remove Hand Bobbing": true + }, + "bind": 0, + "hud": {}, + "bindtype": "Toggle", + "enabled": false + }, "Crosshair": { "settings": { "Draw color": { @@ -60,7 +70,7 @@ "settings": { "Static Chroma": false, "Background": true, - "Custom Font": false, + "Custom Font": true, "Wave Chroma": false, "Color": { "red": 255, @@ -74,30 +84,30 @@ "blue": 0, "alpha": 153 }, - "Display Mode": "Modern", - "Right Click Counter": false + "Display Mode": "Circle", + "Right Click Counter": true }, "bind": 0, "hud": {"cps": { "visible": true, - "x": 107, - "y": 208, + "x": 314, + "y": 519, "scale": 1 }}, "bindtype": "Toggle", - "enabled": false + "enabled": true }, "FPS": { "settings": { "Static Chroma": false, "Background": true, - "Custom Font": false, + "Custom Font": true, "Wave Chroma": false, "Background Color": { "red": 0, "green": 0, "blue": 0, - "alpha": 150 + "alpha": 153 }, "Color": { "red": 255, @@ -105,17 +115,17 @@ "blue": 255, "alpha": 255 }, - "Display Mode": "Modern" + "Display Mode": "Circle" }, "bind": 0, "hud": {"fps": { "visible": true, - "x": 1, - "y": 175, + "x": 573, + "y": 519, "scale": 1 }}, "bindtype": "Toggle", - "enabled": false + "enabled": true }, "Block Overlay": { "settings": { @@ -126,8 +136,8 @@ "blue": 250, "alpha": 255 }, - "Line Width": 4.3, - "Mode": "Highlight", + "Line Width": 1, + "Mode": "Outline", "Highlight Color": { "red": 252, "green": 252, @@ -140,6 +150,37 @@ "bindtype": "Toggle", "enabled": true }, + "Clock": { + "settings": { + "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", + "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": { "Static Chroma": false, @@ -158,7 +199,7 @@ "blue": 0, "alpha": 150 }, - "Display Mode": "Modern", + "Display Mode": "Circle", "Custom Text": "Custom Text Here" }, "bind": 0, @@ -171,26 +212,28 @@ "bindtype": "Toggle", "enabled": false }, - "Clock": { + "Aim Trainer": { "settings": { + "Speed": 1.64, "Static Chroma": false, "Background": true, "Custom Font": false, "Wave Chroma": false, - "Color": { - "red": 255, - "green": 255, - "blue": 255, - "alpha": 255 - }, + "Move": false, "Background Color": { "red": 0, "green": 0, "blue": 0, "alpha": 153 }, - "Display Mode": "Modern", - "Clock Format": "yyyy/MM/dd HH:mm:ss" + "Color": { + "red": 255, + "green": 255, + "blue": 255, + "alpha": 255 + }, + "Display Mode": "Circle", + "Distance": 1.48 }, "bind": 0, "hud": {"time": { @@ -202,31 +245,24 @@ "bindtype": "Toggle", "enabled": false }, - "TPS": { + "Scoreboard": { "settings": { - "Custom Font": false, "Background": true, - "Mode": "Number", "Background Color": { "red": 0, "green": 0, "blue": 0, - "alpha": 90 + "alpha": 153 }, - "Display Mode": "Modern", - "Preset Color": true, - "TPS Color": { - "red": 255, - "green": 255, - "blue": 255, - "alpha": 255 - } + "Free Move": false, + "Display Mode": "Fade", + "Show Numbers": false }, "bind": 0, - "hud": {"tps": { + "hud": {"scoreboard": { "visible": true, - "x": 0, - "y": 0, + "x": 842, + "y": 243, "scale": 1 }}, "bindtype": "Toggle", @@ -251,7 +287,7 @@ "blue": 0, "alpha": 150 }, - "Display Mode": "Modern" + "Display Mode": "Circle" }, "bind": 0, "hud": {"memory usage": { @@ -263,6 +299,43 @@ "bindtype": "Toggle", "enabled": false }, + "HitDelayFix": { + "settings": {}, + "bind": 0, + "hud": {}, + "bindtype": "Toggle", + "enabled": true + }, + "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", @@ -290,11 +363,11 @@ "enabled": false }, "Chat": { - "settings": {"Custom Font": false}, + "settings": {"Infinite Chat": true}, "bind": 0, "hud": {}, "bindtype": "Toggle", - "enabled": false + "enabled": true }, "Zoom": { "settings": { @@ -315,7 +388,7 @@ "bindtype": "Toggle", "enabled": false }, - "theme": "ATHENA", + "theme": "MOONLIGHT", "Freelook": { "settings": { "Perspective Key": 0, @@ -338,12 +411,12 @@ }, "Background": true, "Show Direction": true, - "Display Mode": "Modern", + "Display Mode": "Circle", "Shout Coordinates Key": 0, "Chat Format": "X: {x}, Y: {y}, Z: {z}", "Show Label": true, "Show Biome": true, - "Show Avatar": false, + "Show Avatar": true, "Value Color": { "red": 255, "green": 255, @@ -351,7 +424,7 @@ "alpha": 255 }, "Biome Preset Color": true, - "Custom Font": false, + "Custom Font": true, "Label Color": { "red": 255, "green": 255, @@ -374,8 +447,8 @@ "bind": 0, "hud": {"coordinates": { "visible": true, - "x": 51, - "y": 73, + "x": 164, + "y": 120, "scale": 1 }}, "bindtype": "Toggle", @@ -404,15 +477,49 @@ "red": 0, "green": 0, "blue": 0, - "alpha": 153 + "alpha": 150 }, - "Display Mode": "Modern" + "Display Mode": "Circle" }, "bind": 0, "hud": {"entityhud": { "visible": true, - "x": 51, - "y": 159, + "x": 1, + "y": 175, + "scale": 1 + }}, + "bindtype": "Toggle", + "enabled": false + }, + "ToggleSprint": { + "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", @@ -480,18 +587,7 @@ "bind": 0, "hud": {}, "bindtype": "Toggle", - "enabled": false - }, - "General Settings": { - "settings": { - "Show Logo On Tab": false, - "F5 Nametags": false, - "Custom GUI Font": true - }, - "bind": 0, - "hud": {}, - "bindtype": "Toggle", - "enabled": false + "enabled": true }, "Pot Counter": { "settings": { @@ -512,7 +608,7 @@ "blue": 0, "alpha": 150 }, - "Display Mode": "Modern" + "Display Mode": "Circle" }, "bind": 0, "hud": {"potioncounter": { @@ -524,6 +620,24 @@ "bindtype": "Toggle", "enabled": false }, + "General Settings": { + "settings": { + "Show Logo On Tab": true, + "F5 Nametags": true, + "Custom GUI Font": true + }, + "bind": 0, + "hud": {}, + "bindtype": "Toggle", + "enabled": false + }, + "Nick Hider": { + "settings": {"Nick": "hello"}, + "bind": 0, + "hud": {}, + "bindtype": "Toggle", + "enabled": false + }, "Motion Blur": { "settings": {"Blur Amount": 2}, "bind": 0, @@ -536,6 +650,6 @@ "bind": 0, "hud": {}, "bindtype": "Toggle", - "enabled": false + "enabled": true } } \ No newline at end of file diff --git a/workspace/usercache.json b/workspace/usercache.json index d9c13327..b24dd152 100644 --- a/workspace/usercache.json +++ b/workspace/usercache.json @@ -1 +1 @@ -[{"name":"Player53","uuid":"12477fb0-fd41-3fca-893f-e59684d982a8","expiresOn":"2023-07-08 21:24:44 +0200"},{"name":"Player491","uuid":"46f780a1-2e26-3e88-a90a-02cf37fe1547","expiresOn":"2023-07-08 19:10:32 +0200"},{"name":"Player412","uuid":"d978d670-4b07-3a90-bfb6-b4e7c70fe7fc","expiresOn":"2023-07-08 18:15:08 +0200"},{"name":"Player268","uuid":"b84ce5d9-353d-370c-a2cf-b4a66513f5a8","expiresOn":"2023-07-08 10:42:07 +0200"},{"name":"Player999","uuid":"3c28cca8-db38-324d-ac91-779beed87c8d","expiresOn":"2023-07-08 17:28:24 +0200"},{"name":"ziue","uuid":"74e89738-6c9e-4f59-83ef-d365849e6049","expiresOn":"2023-07-08 15:25:38 +0200"},{"name":"Player597","uuid":"618c707a-83d7-31ad-b075-bd98e2c75926","expiresOn":"2023-07-08 16:49:56 +0200"},{"name":"Player730","uuid":"409ad871-75ba-3dbd-b116-807d64800e7d","expiresOn":"2023-07-08 17:48:36 +0200"},{"name":"Player920","uuid":"ad8236b9-e26f-349c-902e-7100197cd86d","expiresOn":"2023-07-08 19:13:30 +0200"},{"name":"Player939","uuid":"0704e0ba-eaf6-3b26-b880-53fd45ec3b48","expiresOn":"2023-07-08 19:15:56 +0200"},{"name":"Player854","uuid":"2a68c4a4-c1ba-3396-a626-ac7041e25da5","expiresOn":"2023-07-08 17:15:46 +0200"},{"name":"Player203","uuid":"d96be705-d0ae-31d3-afba-31a637d80f6d","expiresOn":"2023-07-08 16:29:04 +0200"},{"name":"Player962","uuid":"7ef37f89-ec95-314c-ad83-8a71ac6e461c","expiresOn":"2023-07-08 18:46:33 +0200"},{"name":"Player426","uuid":"71f66ac1-c861-3de2-8cda-9d0f80277f27","expiresOn":"2023-07-08 19:55:34 +0200"},{"name":"Player579","uuid":"6ae8fe40-3ccb-3755-8fd2-c5445728b386","expiresOn":"2023-07-08 19:18:18 +0200"},{"name":"Player621","uuid":"55199b58-d04f-3d22-9ce2-5472509a024b","expiresOn":"2023-07-08 16:26:24 +0200"},{"name":"Player3","uuid":"f318a6c7-0ff1-368e-9d3e-1b850b84da5e","expiresOn":"2023-07-08 16:41:01 +0200"},{"name":"Player405","uuid":"600ef575-e50b-3323-b0f1-19e3a176b08b","expiresOn":"2023-07-08 19:15:08 +0200"},{"name":"Player336","uuid":"2eef3335-8d1f-3428-af42-f3cec9010d4c","expiresOn":"2023-07-08 19:21:04 +0200"},{"name":"Player742","uuid":"01d9f825-5509-3b83-aacf-c98ce0dce1c7","expiresOn":"2023-07-08 17:55:59 +0200"},{"name":"Player755","uuid":"8dbdaed5-4750-31ee-aa4f-4c3b2bfbc6f7","expiresOn":"2023-07-08 19:11:24 +0200"},{"name":"Player136","uuid":"f4642d2b-29f9-34b7-8b90-e6570e856434","expiresOn":"2023-07-08 16:32:44 +0200"},{"name":"Player6","uuid":"6e946422-0041-3048-9c85-48e4f886211a","expiresOn":"2023-07-08 18:00:50 +0200"},{"name":"Player773","uuid":"b7a940e4-3cde-3275-9c73-2f71fe593c98","expiresOn":"2023-07-08 16:37:19 +0200"},{"name":"Player790","uuid":"2f0d3d8c-afbe-358f-b8f3-786d7b0f9259","expiresOn":"2023-07-08 16:44:53 +0200"},{"name":"Player308","uuid":"6db1171d-4fa6-31cb-b425-1896281a26e2","expiresOn":"2023-07-08 13:43:03 +0200"},{"name":"Player422","uuid":"cb3fd6c5-1d0c-334b-a8d4-85d2c85eb576","expiresOn":"2023-07-08 17:21:41 +0200"},{"name":"Player847","uuid":"6004b361-ef29-34d2-b89c-32df237908c7","expiresOn":"2023-07-08 19:29:12 +0200"},{"name":"Player750","uuid":"2659329e-1c65-3850-9659-d27fc655aa3c","expiresOn":"2023-07-08 19:27:39 +0200"},{"name":"Player465","uuid":"d447d002-8f00-3c6c-8a29-93b028d90375","expiresOn":"2023-07-08 20:12:40 +0200"},{"name":"Player601","uuid":"3b1946fe-c2d1-3fab-8b74-bd39d8b52fb4","expiresOn":"2023-07-08 13:17:47 +0200"},{"name":"Player87","uuid":"3eec9f18-1d0e-3f17-917c-6994e7d034d1","expiresOn":"2023-07-08 20:22:04 +0200"},{"name":"Player571","uuid":"5d4844c1-110f-375f-8c73-6803b7a61e5d","expiresOn":"2023-07-08 08:06:30 +0200"},{"name":"Player889","uuid":"a205b8da-efc6-37ad-8e1d-84c0239cdd21","expiresOn":"2023-07-08 16:14:54 +0200"},{"name":"Player467","uuid":"ed3ff7cb-6a3b-37aa-85ff-4e536390779c","expiresOn":"2023-07-08 20:52:15 +0200"},{"name":"Player693","uuid":"f2937d48-a72f-3375-bb6f-69c5f204d185","expiresOn":"2023-07-08 19:16:58 +0200"},{"name":"Player918","uuid":"7fac0f4d-6ee9-33e9-a874-7b4a3cc238c6","expiresOn":"2023-07-08 19:37:58 +0200"},{"name":"Player810","uuid":"24a37f0a-2af1-3ac4-9024-e5424f979e18","expiresOn":"2023-07-08 20:10:21 +0200"},{"name":"Player697","uuid":"09805145-bb70-3fc1-9783-30845f8dd6d0","expiresOn":"2023-07-08 16:35:52 +0200"},{"name":"Player155","uuid":"60d19c6d-8381-348f-9d23-cb28708609fc","expiresOn":"2023-07-08 17:36:23 +0200"},{"name":"Player813","uuid":"fb8576b0-fae6-3c1e-b44e-6422260d3c41","expiresOn":"2023-07-08 17:27:24 +0200"},{"name":"Player414","uuid":"408d12c9-559c-3212-bca5-d1a3fc38a0f7","expiresOn":"2023-07-08 18:22:02 +0200"},{"name":"Player814","uuid":"777409db-46bf-31bf-844f-6d600c083d6c","expiresOn":"2023-07-08 09:47:50 +0200"},{"name":"Player815","uuid":"41dc22e0-3e7d-3bce-88c0-a274eb3e3859","expiresOn":"2023-07-08 19:16:28 +0200"},{"name":"Player172","uuid":"31a9aee6-8c2b-389d-b14e-b75d71479611","expiresOn":"2023-07-08 16:15:57 +0200"},{"name":"Player980","uuid":"d1b650bf-5f9c-37d3-a469-4d66d1968f90","expiresOn":"2023-07-08 20:54:52 +0200"}] \ No newline at end of file +[{"name":"ziue","uuid":"74e89738-6c9e-4f59-83ef-d365849e6049","expiresOn":"2023-07-10 22:14:54 +0200"},{"name":"Player367","uuid":"dcea94fd-efa4-3c29-93d8-2d56666245c7","expiresOn":"2023-07-10 12:57:12 +0200"},{"name":"Player651","uuid":"5c4f0ba0-5b89-33cd-bd9d-007c51e4a99f","expiresOn":"2023-07-09 20:07:16 +0200"},{"name":"Player602","uuid":"7fef5833-06c9-398a-84c0-fbd3a81ff548","expiresOn":"2023-07-10 13:22:13 +0200"},{"name":"Player773","uuid":"b7a940e4-3cde-3275-9c73-2f71fe593c98","expiresOn":"2023-07-08 16:37:19 +0200"},{"name":"Player480","uuid":"1714a812-885f-3243-b534-9a660fba6e8b","expiresOn":"2023-07-09 18:17:13 +0200"},{"name":"Player103","uuid":"f0c5379b-0e4e-34aa-808d-37fef9b5ce6c","expiresOn":"2023-07-10 12:33:50 +0200"},{"name":"Player336","uuid":"2eef3335-8d1f-3428-af42-f3cec9010d4c","expiresOn":"2023-07-08 19:21:04 +0200"},{"name":"Player889","uuid":"a205b8da-efc6-37ad-8e1d-84c0239cdd21","expiresOn":"2023-07-08 16:14:54 +0200"},{"name":"Player755","uuid":"8dbdaed5-4750-31ee-aa4f-4c3b2bfbc6f7","expiresOn":"2023-07-08 19:11:24 +0200"},{"name":"Player169","uuid":"3247b050-58df-3a7e-91f5-44a3d807681c","expiresOn":"2023-07-09 19:35:50 +0200"},{"name":"Player999","uuid":"3c28cca8-db38-324d-ac91-779beed87c8d","expiresOn":"2023-07-09 18:15:03 +0200"},{"name":"Player155","uuid":"60d19c6d-8381-348f-9d23-cb28708609fc","expiresOn":"2023-07-08 17:36:23 +0200"},{"name":"Player565","uuid":"f72636fb-c7db-3c44-8cd4-8a6790fd9b69","expiresOn":"2023-07-10 14:15:29 +0200"},{"name":"Player529","uuid":"989691b1-d197-3995-a55e-281cda3663ae","expiresOn":"2023-07-10 14:26:11 +0200"},{"name":"Player809","uuid":"e664a043-6e9c-3d0d-9b38-cc385e35aba9","expiresOn":"2023-07-10 12:36:27 +0200"},{"name":"Player742","uuid":"01d9f825-5509-3b83-aacf-c98ce0dce1c7","expiresOn":"2023-07-08 17:55:59 +0200"},{"name":"Player697","uuid":"09805145-bb70-3fc1-9783-30845f8dd6d0","expiresOn":"2023-07-08 16:35:52 +0200"},{"name":"Player434","uuid":"fd09468e-08e7-31aa-bab7-195a6ef31320","expiresOn":"2023-07-09 19:49:25 +0200"},{"name":"Player6","uuid":"6e946422-0041-3048-9c85-48e4f886211a","expiresOn":"2023-07-08 18:00:50 +0200"},{"name":"Player744","uuid":"aeca01bf-232e-37a2-985b-599827b3226a","expiresOn":"2023-07-10 14:09:54 +0200"},{"name":"Player766","uuid":"71ee4b7e-330e-3d50-90a4-3d964a618ea8","expiresOn":"2023-07-09 23:33:32 +0200"},{"name":"Player426","uuid":"71f66ac1-c861-3de2-8cda-9d0f80277f27","expiresOn":"2023-07-08 19:55:34 +0200"},{"name":"Player484","uuid":"29aa321a-1ce7-35de-bfab-f37fa4095c7d","expiresOn":"2023-07-10 12:37:26 +0200"},{"name":"Player268","uuid":"b84ce5d9-353d-370c-a2cf-b4a66513f5a8","expiresOn":"2023-07-08 10:42:07 +0200"},{"name":"Player813","uuid":"fb8576b0-fae6-3c1e-b44e-6422260d3c41","expiresOn":"2023-07-08 17:27:24 +0200"},{"name":"Player325","uuid":"1aca2fd8-a080-3d28-afe0-430fc033484e","expiresOn":"2023-07-10 15:43:49 +0200"},{"name":"Player527","uuid":"638f7175-5dde-3b0d-a13d-f593ecd79b38","expiresOn":"2023-07-10 12:52:57 +0200"},{"name":"Player810","uuid":"24a37f0a-2af1-3ac4-9024-e5424f979e18","expiresOn":"2023-07-08 20:10:21 +0200"},{"name":"Player467","uuid":"ed3ff7cb-6a3b-37aa-85ff-4e536390779c","expiresOn":"2023-07-08 20:52:15 +0200"},{"name":"Player914","uuid":"9df70e84-3251-33fb-9047-d59112057246","expiresOn":"2023-07-09 19:51:26 +0200"},{"name":"Player854","uuid":"2a68c4a4-c1ba-3396-a626-ac7041e25da5","expiresOn":"2023-07-09 19:29:22 +0200"},{"name":"Player712","uuid":"e4358028-bc3b-38cc-b645-4d08d3b4f456","expiresOn":"2023-07-09 20:11:05 +0200"},{"name":"Player601","uuid":"3b1946fe-c2d1-3fab-8b74-bd39d8b52fb4","expiresOn":"2023-07-08 13:17:47 +0200"},{"name":"Player815","uuid":"41dc22e0-3e7d-3bce-88c0-a274eb3e3859","expiresOn":"2023-07-08 19:16:28 +0200"},{"name":"Player939","uuid":"0704e0ba-eaf6-3b26-b880-53fd45ec3b48","expiresOn":"2023-07-08 19:15:56 +0200"},{"name":"Player920","uuid":"ad8236b9-e26f-349c-902e-7100197cd86d","expiresOn":"2023-07-08 19:13:30 +0200"},{"name":"Player693","uuid":"f2937d48-a72f-3375-bb6f-69c5f204d185","expiresOn":"2023-07-08 19:16:58 +0200"},{"name":"Player641","uuid":"34c6f761-a0d4-3d62-b5ee-df15e4530215","expiresOn":"2023-07-09 17:34:30 +0200"},{"name":"Player887","uuid":"df2d3e26-a8b7-3aae-9296-f3a891282132","expiresOn":"2023-07-09 22:02:05 +0200"},{"name":"Player324","uuid":"942531dd-7690-3c0a-ad42-657bb212e7b6","expiresOn":"2023-07-09 19:50:40 +0200"},{"name":"Player24","uuid":"68cf6d02-03bc-3f3b-ab98-76a8ec749597","expiresOn":"2023-07-10 12:40:04 +0200"},{"name":"Player3","uuid":"f318a6c7-0ff1-368e-9d3e-1b850b84da5e","expiresOn":"2023-07-10 14:04:29 +0200"},{"name":"Player405","uuid":"600ef575-e50b-3323-b0f1-19e3a176b08b","expiresOn":"2023-07-08 19:15:08 +0200"},{"name":"Player995","uuid":"93bfa0b6-cc14-3c0c-8efa-0bcc48245274","expiresOn":"2023-07-09 18:45:54 +0200"},{"name":"Player320","uuid":"77167de3-5df9-3c83-b06a-bed9a476e835","expiresOn":"2023-07-09 19:39:10 +0200"},{"name":"Player87","uuid":"3eec9f18-1d0e-3f17-917c-6994e7d034d1","expiresOn":"2023-07-09 19:11:12 +0200"},{"name":"Player491","uuid":"46f780a1-2e26-3e88-a90a-02cf37fe1547","expiresOn":"2023-07-08 19:10:32 +0200"},{"name":"Player959","uuid":"e4e5b30f-b972-382c-b5e5-86c2e785a8a6","expiresOn":"2023-07-09 23:52:34 +0200"},{"name":"Player444","uuid":"b136c8aa-0654-3583-8db1-8749e12181a1","expiresOn":"2023-07-10 15:37:49 +0200"},{"name":"Player841","uuid":"197d9491-ff34-3fd1-8394-1aadd56cfa2c","expiresOn":"2023-07-10 13:32:20 +0200"},{"name":"Player77","uuid":"2e2bad62-fd9f-3bb5-a89e-b314a4f30e73","expiresOn":"2023-07-10 15:24:13 +0200"},{"name":"Player847","uuid":"6004b361-ef29-34d2-b89c-32df237908c7","expiresOn":"2023-07-08 19:29:12 +0200"},{"name":"Player781","uuid":"bf0c47d3-02b6-3463-8e38-457226b1407c","expiresOn":"2023-07-10 15:48:29 +0200"},{"name":"Player893","uuid":"e012d939-bd4c-38f9-ae46-831d4959ff05","expiresOn":"2023-07-09 21:58:42 +0200"},{"name":"Player980","uuid":"d1b650bf-5f9c-37d3-a469-4d66d1968f90","expiresOn":"2023-07-10 21:48:02 +0200"},{"name":"Player829","uuid":"4e1f5e28-f05f-3acf-ac65-db01d9d51f95","expiresOn":"2023-07-10 14:19:41 +0200"},{"name":"Player422","uuid":"cb3fd6c5-1d0c-334b-a8d4-85d2c85eb576","expiresOn":"2023-07-08 17:21:41 +0200"},{"name":"nigger","uuid":"1b03cef3-3bb0-3335-8575-75a992fee2b9","expiresOn":"2023-07-10 20:17:29 +0200"},{"name":"Player579","uuid":"6ae8fe40-3ccb-3755-8fd2-c5445728b386","expiresOn":"2023-07-08 19:18:18 +0200"},{"name":"Player597","uuid":"618c707a-83d7-31ad-b075-bd98e2c75926","expiresOn":"2023-07-08 16:49:56 +0200"},{"name":"Player814","uuid":"777409db-46bf-31bf-844f-6d600c083d6c","expiresOn":"2023-07-08 09:47:50 +0200"},{"name":"Player571","uuid":"5d4844c1-110f-375f-8c73-6803b7a61e5d","expiresOn":"2023-07-08 08:06:30 +0200"},{"name":"Player107","uuid":"eed453d8-1b3a-3fa3-9fc5-1cf433d73521","expiresOn":"2023-07-10 12:32:33 +0200"},{"name":"Player536","uuid":"8cfc5391-e37d-328f-a689-9b5f6c4663f5","expiresOn":"2023-07-10 13:43:43 +0200"},{"name":"Player210","uuid":"66157e7a-53e0-3299-9208-7674efd706f9","expiresOn":"2023-07-09 19:28:27 +0200"},{"name":"Player82","uuid":"7328fbd9-6879-3343-b321-ed1f1a1e9892","expiresOn":"2023-07-10 14:02:44 +0200"},{"name":"Player790","uuid":"2f0d3d8c-afbe-358f-b8f3-786d7b0f9259","expiresOn":"2023-07-08 16:44:53 +0200"},{"name":"Player962","uuid":"7ef37f89-ec95-314c-ad83-8a71ac6e461c","expiresOn":"2023-07-08 18:46:33 +0200"},{"name":"Player621","uuid":"55199b58-d04f-3d22-9ce2-5472509a024b","expiresOn":"2023-07-08 16:26:24 +0200"},{"name":"Player302","uuid":"babe9e7f-35b2-34ef-82f9-4869d34a0755","expiresOn":"2023-07-09 19:54:04 +0200"},{"name":"Player685","uuid":"4f2b9d55-5b3e-32ee-ad58-c8df44a23337","expiresOn":"2023-07-09 19:08:06 +0200"},{"name":"Player306","uuid":"a08e137b-04fa-3fce-96cc-517c7a87690d","expiresOn":"2023-07-09 19:24:35 +0200"},{"name":"Player270","uuid":"e122e0b0-374f-3b1b-a986-63f4fefee57a","expiresOn":"2023-07-10 14:49:10 +0200"},{"name":"Player172","uuid":"31a9aee6-8c2b-389d-b14e-b75d71479611","expiresOn":"2023-07-08 16:15:57 +0200"},{"name":"Player118","uuid":"df7bffa7-7a2f-3fb4-9898-fa23c41e49b8","expiresOn":"2023-07-09 20:39:44 +0200"},{"name":"test","uuid":"530fa97a-357f-3c19-94d3-0c5c65c18fe8","expiresOn":"2023-07-10 19:15:10 +0200"},{"name":"Player396","uuid":"7ba45a5a-c3de-3909-ba3c-f9f78edf15b6","expiresOn":"2023-07-10 15:32:01 +0200"},{"name":"tesfdrsdfsdf","uuid":"2adbb68a-c561-3c7a-ac3a-f724c1f981bb","expiresOn":"2023-07-10 20:17:14 +0200"},{"name":"Player69","uuid":"eee10812-13cd-3f90-b77f-2195c9c5b71e","expiresOn":"2023-07-10 12:41:47 +0200"},{"name":"Player514","uuid":"4ed9b5cf-d91a-3bc8-9000-b0476eccd342","expiresOn":"2023-07-09 20:21:06 +0200"},{"name":"Player870","uuid":"eadcccd1-5981-31ce-8342-c727c73b0197","expiresOn":"2023-07-10 14:22:37 +0200"},{"name":"Player977","uuid":"9e5d41e7-4785-3b2f-8261-593dade57f6e","expiresOn":"2023-07-10 13:36:09 +0200"},{"name":"Player918","uuid":"7fac0f4d-6ee9-33e9-a874-7b4a3cc238c6","expiresOn":"2023-07-08 19:37:58 +0200"},{"name":"Player894","uuid":"b25e3f31-3d0d-30a3-b307-8902510a505e","expiresOn":"2023-07-10 13:27:49 +0200"},{"name":"Player189","uuid":"43c314ca-2c75-349f-b8fe-ad7c6fada15e","expiresOn":"2023-07-10 19:28:13 +0200"},{"name":"Player957","uuid":"094b1c52-a449-3e9f-896c-59239b943c71","expiresOn":"2023-07-09 23:34:47 +0200"},{"name":"Player901","uuid":"fcaa91cc-3a77-3318-a8ae-f2f3862b7fde","expiresOn":"2023-07-10 15:51:32 +0200"},{"name":"Player197","uuid":"ccf0c278-c21f-3ec3-a87c-05202673a5dd","expiresOn":"2023-07-09 20:05:23 +0200"},{"name":"Player991","uuid":"fe171829-6121-3106-a1a5-6a3600a4ef7d","expiresOn":"2023-07-09 17:48:04 +0200"},{"name":"Player604","uuid":"11cdf046-d362-394c-93e8-583f0c5ef255","expiresOn":"2023-07-10 12:27:52 +0200"},{"name":"Player750","uuid":"2659329e-1c65-3850-9659-d27fc655aa3c","expiresOn":"2023-07-08 19:27:39 +0200"},{"name":"Player730","uuid":"409ad871-75ba-3dbd-b116-807d64800e7d","expiresOn":"2023-07-08 17:48:36 +0200"},{"name":"Player335","uuid":"168f5f60-1523-35b7-93b7-01b2c42226b4","expiresOn":"2023-07-10 15:53:11 +0200"},{"name":"teste","uuid":"4fdf550e-f3b3-3a06-8485-0916b2b491bc","expiresOn":"2023-07-10 18:59:51 +0200"},{"name":"Player414","uuid":"408d12c9-559c-3212-bca5-d1a3fc38a0f7","expiresOn":"2023-07-08 18:22:02 +0200"},{"name":"Player136","uuid":"f4642d2b-29f9-34b7-8b90-e6570e856434","expiresOn":"2023-07-08 16:32:44 +0200"},{"name":"Player465","uuid":"d447d002-8f00-3c6c-8a29-93b028d90375","expiresOn":"2023-07-08 20:12:40 +0200"},{"name":"Player401","uuid":"a7507e7e-f998-31cf-a2de-0cc0fd0a4de6","expiresOn":"2023-07-09 17:45:25 +0200"},{"name":"Player517","uuid":"3fff7d86-24d6-33b1-8ce1-9423a13c7c89","expiresOn":"2023-07-09 18:10:12 +0200"},{"name":"Player132","uuid":"5cc48495-676c-3721-aed2-7336730ff405","expiresOn":"2023-07-09 20:59:28 +0200"},{"name":"Player308","uuid":"6db1171d-4fa6-31cb-b425-1896281a26e2","expiresOn":"2023-07-10 13:03:00 +0200"},{"name":"Player412","uuid":"d978d670-4b07-3a90-bfb6-b4e7c70fe7fc","expiresOn":"2023-07-08 18:15:08 +0200"},{"name":"Player239","uuid":"75e52373-1963-3666-bda9-8904d639e38b","expiresOn":"2023-07-10 15:37:14 +0200"},{"name":"Player53","uuid":"12477fb0-fd41-3fca-893f-e59684d982a8","expiresOn":"2023-07-08 21:24:44 +0200"},{"name":"Player203","uuid":"d96be705-d0ae-31d3-afba-31a637d80f6d","expiresOn":"2023-07-08 16:29:04 +0200"},{"name":"Player455","uuid":"fc74fe37-e9f9-3198-8e46-1eee97cacfa6","expiresOn":"2023-07-10 13:46:20 +0200"},{"name":"Player101","uuid":"4bb7849b-3b46-3d6a-81b9-13bb408e8517","expiresOn":"2023-07-10 14:41:18 +0200"}] \ No newline at end of file