trying to not bash my head through a window
This commit is contained in:
parent
dd7f56bd41
commit
aac9ca5188
2
pom.xml
2
pom.xml
|
@ -29,7 +29,7 @@
|
|||
<dependency>
|
||||
<groupId>fr.litarvan</groupId>
|
||||
<artifactId>openauth</artifactId>
|
||||
<version>1.1.3</version>
|
||||
<version>1.1.6</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>net.minecraft</groupId>
|
||||
|
|
|
@ -1,25 +1,16 @@
|
|||
package rip.athena.client.gui.menu.altmanager.panels;
|
||||
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonParser;
|
||||
import fr.litarvan.openauth.microsoft.LoginFrame;
|
||||
import fr.litarvan.openauth.microsoft.MicrosoftAuthResult;
|
||||
import fr.litarvan.openauth.microsoft.MicrosoftAuthenticationException;
|
||||
import fr.litarvan.openauth.microsoft.MicrosoftAuthenticator;
|
||||
import javafx.embed.swing.JFXPanel;
|
||||
import javafx.scene.Scene;
|
||||
import javafx.scene.web.WebView;
|
||||
import fr.litarvan.openauth.microsoft.*;
|
||||
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.gui.menu.altmanager.panels.auth.AthenaAuth;
|
||||
import rip.athena.client.gui.menu.altmanager.panels.auth.MicrosoftAuthResult;
|
||||
import rip.athena.client.utils.animations.Animation;
|
||||
import rip.athena.client.utils.animations.Direction;
|
||||
import rip.athena.client.utils.animations.impl.DecelerateAnimation;
|
||||
|
@ -28,9 +19,6 @@ 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;
|
||||
|
||||
|
@ -154,10 +142,9 @@ public class LoginPanel extends Panel {
|
|||
|
||||
if (hoveringMicrosoft && button == 0) {
|
||||
new Thread(() -> {
|
||||
MicrosoftAuthenticator authenticator = new MicrosoftAuthenticator();
|
||||
AthenaAuth authenticator = new AthenaAuth();
|
||||
|
||||
TextField username = textFields.get(0);
|
||||
String email = username.getText();
|
||||
String email = textFields.get(0).getText();
|
||||
String password = textFields.get(1).getText();
|
||||
if (email.contains(":")) {
|
||||
String[] split = email.split(":");
|
||||
|
@ -169,7 +156,7 @@ public class LoginPanel extends Panel {
|
|||
try {
|
||||
|
||||
Athena.INSTANCE.getLog().info(email + password);
|
||||
MicrosoftAuthResult acc = authenticator.loginWithCredentials(email, password);
|
||||
MicrosoftAuthResult acc = authenticator.loginWithWebview();
|
||||
|
||||
Minecraft.getMinecraft().session = new Session(acc.getProfile().getName(), acc.getProfile().getId(), acc.getAccessToken(), "legacy");
|
||||
|
||||
|
@ -181,7 +168,7 @@ public class LoginPanel extends Panel {
|
|||
Athena.INSTANCE.getLog().info("Success: Logged into " + acc.getProfile().getName());
|
||||
|
||||
} catch (MicrosoftAuthenticationException e) {
|
||||
e.printStackTrace();
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
resetTextFields();
|
||||
|
|
|
@ -0,0 +1,175 @@
|
|||
package rip.athena.client.gui.menu.altmanager.panels.auth;
|
||||
|
||||
import fr.litarvan.openauth.microsoft.*;
|
||||
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.MinecraftLoginResponse;
|
||||
import fr.litarvan.openauth.microsoft.model.response.MinecraftProfile;
|
||||
import fr.litarvan.openauth.microsoft.model.response.MinecraftStoreResponse;
|
||||
import fr.litarvan.openauth.microsoft.model.response.XboxLoginResponse;
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.CookieHandler;
|
||||
import java.net.CookieManager;
|
||||
import java.net.URLDecoder;
|
||||
import java.util.Arrays;
|
||||
import java.util.Base64;
|
||||
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;
|
||||
|
||||
|
||||
public class AthenaAuth {
|
||||
public static final String MICROSOFT_AUTHORIZATION_ENDPOINT = "https://login.microsoftonline.com/consumers/oauth2/v2.0/authorize";
|
||||
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 AthenaAuth() {
|
||||
this.http = new HttpClient();
|
||||
}
|
||||
|
||||
public MicrosoftAuthResult loginWithWebview() throws MicrosoftAuthenticationException {
|
||||
try {
|
||||
return loginWithAsyncWebview().get();
|
||||
} catch (InterruptedException | ExecutionException e) {
|
||||
throw new MicrosoftAuthenticationException(e);
|
||||
}
|
||||
}
|
||||
|
||||
private CompletableFuture<MicrosoftAuthResult> loginWithAsyncWebview() {
|
||||
if(!System.getProperty("java.version").startsWith("1."))
|
||||
CookieHandler.setDefault(new CookieManager());
|
||||
|
||||
String url = String.format("%s?%s", MICROSOFT_AUTHORIZATION_ENDPOINT, http.buildParams(getLoginParams()));
|
||||
LoginFrame frame = new LoginFrame();
|
||||
|
||||
return frame.start(url).thenApplyAsync(result -> {
|
||||
try {
|
||||
if(result != null)
|
||||
return loginWithTokens(extractTokens(result),true);
|
||||
else return null;
|
||||
} catch (MicrosoftAuthenticationException e) {
|
||||
throw new CompletionException(e);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private MicrosoftAuthResult loginWithTokens(AuthTokens tokens) throws MicrosoftAuthenticationException {
|
||||
return loginWithTokens(tokens,true);
|
||||
}
|
||||
|
||||
public MicrosoftAuthResult loginWithTokens(AuthTokens tokens, boolean retrieveProfile) 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 = null;
|
||||
if (retrieveProfile) {
|
||||
profile = http.getJson(
|
||||
MINECRAFT_PROFILE_ENDPOINT,
|
||||
minecraftResponse.getAccessToken(),
|
||||
MinecraftProfile.class
|
||||
);
|
||||
}
|
||||
|
||||
return new MicrosoftAuthResult(
|
||||
profile,
|
||||
minecraftResponse.getAccessToken(),
|
||||
tokens.getRefreshToken(),
|
||||
xboxLiveResponse.getDisplayClaims().getUsers()[0].getUserHash(),
|
||||
Base64.getEncoder().encodeToString(minecraftResponse.getUsername().getBytes())
|
||||
);
|
||||
}
|
||||
|
||||
protected XboxLoginResponse xboxLiveLogin(String accessToken) throws MicrosoftAuthenticationException {
|
||||
XboxLiveLoginProperties properties = new XboxLiveLoginProperties("RPS", XBOX_LIVE_AUTH_HOST, accessToken);
|
||||
XboxLoginRequest<XboxLiveLoginProperties> 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<XSTSAuthorizationProperties> 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<String, String> getLoginParams() {
|
||||
Map<String, String> 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);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,216 @@
|
|||
/*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package rip.athena.client.gui.menu.altmanager.panels.auth;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import fr.litarvan.openauth.microsoft.MicrosoftAuthenticationException;
|
||||
|
||||
import java.io.*;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.net.Proxy;
|
||||
import java.net.URL;
|
||||
import java.net.URLEncoder;
|
||||
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;
|
||||
private final Proxy proxy;
|
||||
|
||||
public HttpClient()
|
||||
{
|
||||
this(Proxy.NO_PROXY);
|
||||
}
|
||||
public HttpClient(Proxy proxy)
|
||||
{
|
||||
this.gson = new Gson();
|
||||
this.proxy = proxy;
|
||||
}
|
||||
|
||||
|
||||
public String getText(String url, Map<String, String> params) throws MicrosoftAuthenticationException
|
||||
{
|
||||
return readResponse(createConnection(url + '?' + buildParams(params)));
|
||||
}
|
||||
|
||||
public <T> T getJson(String url, String token, Class<T> responseClass) throws MicrosoftAuthenticationException
|
||||
{
|
||||
HttpURLConnection connection = createConnection(url);
|
||||
connection.addRequestProperty("Authorization", "Bearer " + token);
|
||||
connection.addRequestProperty("Accept", MIME_TYPE_JSON);
|
||||
|
||||
return readJson(connection, responseClass);
|
||||
}
|
||||
|
||||
public HttpURLConnection postForm(String url, Map<String, String> params) throws MicrosoftAuthenticationException
|
||||
{
|
||||
return post(url, MIME_TYPE_URLENCODED_FORM, "*/*", buildParams(params));
|
||||
}
|
||||
|
||||
public <T> T postJson(String url, Object request, Class<T> responseClass) throws MicrosoftAuthenticationException
|
||||
{
|
||||
HttpURLConnection connection = post(url, MIME_TYPE_JSON, MIME_TYPE_JSON, gson.toJson(request));
|
||||
return readJson(connection, responseClass);
|
||||
}
|
||||
|
||||
public <T> T postFormGetJson(String url, Map<String, String> params, Class<T> responseClass) throws MicrosoftAuthenticationException
|
||||
{
|
||||
return readJson(postForm(url, params), responseClass);
|
||||
}
|
||||
|
||||
|
||||
protected HttpURLConnection post(String url, String contentType, String accept, String data) throws MicrosoftAuthenticationException
|
||||
{
|
||||
HttpURLConnection 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> T readJson(HttpURLConnection connection, Class<T> responseType) throws MicrosoftAuthenticationException
|
||||
{
|
||||
return gson.fromJson(readResponse(connection), responseType);
|
||||
}
|
||||
|
||||
protected String readResponse(HttpURLConnection connection) throws MicrosoftAuthenticationException
|
||||
{
|
||||
String redirection = connection.getHeaderField("Location");
|
||||
if (redirection != null) {
|
||||
return readResponse(createConnection(redirection));
|
||||
}
|
||||
|
||||
StringBuilder response = new StringBuilder();
|
||||
|
||||
try
|
||||
{
|
||||
InputStream inputStream = connection.getInputStream();
|
||||
|
||||
// check if the url corresponds to a related authentication url
|
||||
if(this.checkUrl(connection.getURL()))
|
||||
{
|
||||
// then patch the input stream like in the old MicrosoftPatchedHttpURLConnection class.
|
||||
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
||||
int n;
|
||||
byte[] data = new byte[8192];
|
||||
|
||||
while ((n = inputStream.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);
|
||||
|
||||
inputStream = new ByteArrayInputStream(patched);
|
||||
}
|
||||
|
||||
try (BufferedReader br = new BufferedReader(new InputStreamReader(inputStream))) {
|
||||
String line;
|
||||
while ((line = br.readLine()) != null) {
|
||||
response.append(line).append('\n');
|
||||
}
|
||||
} catch (IOException e) {
|
||||
throw new MicrosoftAuthenticationException(e);
|
||||
}
|
||||
} catch (IOException e)
|
||||
{
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
return response.toString();
|
||||
}
|
||||
|
||||
private boolean checkUrl(URL url)
|
||||
{
|
||||
return (("login.microsoftonline.com".equals(url.getHost()) && url.getPath().endsWith("/oauth2/authorize"))
|
||||
|| ("login.live.com".equals(url.getHost()) && "/oauth20_authorize.srf".equals(url.getPath()))
|
||||
|| ("login.live.com".equals(url.getHost()) && "/ppsecure/post.srf".equals(url.getPath()))
|
||||
|| ("login.microsoftonline.com".equals(url.getHost()) && "/login.srf".equals(url.getPath()))
|
||||
|| ("login.microsoftonline.com".equals(url.getHost()) && url.getPath().endsWith("/login"))
|
||||
|| ("login.microsoftonline.com".equals(url.getHost()) && url.getPath().endsWith("/SAS/ProcessAuth"))
|
||||
|| ("login.microsoftonline.com".equals(url.getHost()) && url.getPath().endsWith("/federation/oauth2"))
|
||||
|| ("login.microsoftonline.com".equals(url.getHost()) && url.getPath().endsWith("/oauth2/v2.0/authorize")));
|
||||
}
|
||||
|
||||
protected HttpURLConnection followRedirects(HttpURLConnection connection) throws MicrosoftAuthenticationException
|
||||
{
|
||||
String redirection = connection.getHeaderField("Location");
|
||||
if (redirection != null) {
|
||||
connection = followRedirects(createConnection(redirection));
|
||||
}
|
||||
|
||||
return connection;
|
||||
}
|
||||
|
||||
protected String buildParams(Map<String, String> params)
|
||||
{
|
||||
StringBuilder query = new StringBuilder();
|
||||
params.forEach((key, value) -> {
|
||||
if (query.length() > 0) {
|
||||
query.append('&');
|
||||
}
|
||||
|
||||
try {
|
||||
query.append(key).append('=').append(URLEncoder.encode(value, StandardCharsets.UTF_8.name()));
|
||||
} catch (UnsupportedEncodingException ignored) {
|
||||
// Can't happen
|
||||
}
|
||||
});
|
||||
|
||||
return query.toString();
|
||||
}
|
||||
|
||||
protected HttpURLConnection createConnection(String url) throws MicrosoftAuthenticationException
|
||||
{
|
||||
HttpURLConnection connection;
|
||||
try {
|
||||
connection = (HttpURLConnection) new URL(url).openConnection(proxy);
|
||||
} 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.setConnectTimeout(30 * 1000); // 30s
|
||||
connection.setReadTimeout(60 * 1000); // 60s
|
||||
connection.setRequestProperty("Accept-Language", "en-US");
|
||||
connection.setRequestProperty("Accept-Charset", "UTF-8");
|
||||
connection.setRequestProperty("User-Agent", userAgent);
|
||||
|
||||
return connection;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,95 @@
|
|||
/*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package rip.athena.client.gui.menu.altmanager.panels.auth;
|
||||
|
||||
import javafx.application.Platform;
|
||||
import javafx.embed.swing.JFXPanel;
|
||||
import javafx.scene.Scene;
|
||||
import javafx.scene.layout.VBox;
|
||||
import javafx.scene.web.WebView;
|
||||
import org.apache.http.protocol.RequestUserAgent;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.event.WindowAdapter;
|
||||
import java.awt.event.WindowEvent;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
/*
|
||||
* Had to use Swing here, JavaFX is meant to have an 'Application' but only one can exist.
|
||||
* Creating one would break compatibility with JavaFX apps (which already have their own
|
||||
* class), and letting the user do so would break compatibility with Swing apps.
|
||||
*
|
||||
* This method makes the frame compatible with pretty much everything.
|
||||
*/
|
||||
|
||||
public class LoginFrame extends JFrame
|
||||
{
|
||||
private CompletableFuture<String> future;
|
||||
private boolean completed;
|
||||
|
||||
public LoginFrame()
|
||||
{
|
||||
this.setTitle("Microsoft Authentication");
|
||||
this.setSize(750, 750);
|
||||
this.setLocationRelativeTo(null);
|
||||
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
|
||||
|
||||
this.setContentPane(new JFXPanel());
|
||||
}
|
||||
|
||||
public CompletableFuture<String> start(String url)
|
||||
{
|
||||
if (this.future != null) {
|
||||
return this.future;
|
||||
}
|
||||
|
||||
this.future = new CompletableFuture<>();
|
||||
this.addWindowListener(new WindowAdapter() {
|
||||
@Override
|
||||
public void windowClosing(WindowEvent e) {
|
||||
if(!completed)
|
||||
future.complete(null);
|
||||
}
|
||||
});
|
||||
|
||||
Platform.runLater(() -> this.init(url));
|
||||
return this.future;
|
||||
}
|
||||
|
||||
protected void init(String url) {
|
||||
WebView webView = new WebView();
|
||||
JFXPanel content = (JFXPanel) this.getContentPane();
|
||||
|
||||
content.setScene(new Scene(webView, this.getWidth(), this.getHeight()));
|
||||
|
||||
webView.getEngine().locationProperty().addListener((observable, oldValue, newValue) -> {
|
||||
if (newValue.contains("access_token")) {
|
||||
this.future.complete(newValue);
|
||||
completed = true;
|
||||
this.dispose();
|
||||
}
|
||||
});
|
||||
|
||||
webView.getEngine().setUserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36");
|
||||
webView.getEngine().load("github.com");
|
||||
System.out.println(url);
|
||||
|
||||
this.setVisible(true);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,91 @@
|
|||
/*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package rip.athena.client.gui.menu.altmanager.panels.auth;
|
||||
|
||||
import fr.litarvan.openauth.microsoft.model.response.MinecraftProfile;
|
||||
|
||||
/**
|
||||
* Microsoft authentication result
|
||||
*
|
||||
* <p>
|
||||
* This class contains the result of a successful Microsoft authentication: a player profile and its tokens (both
|
||||
* access and refresh token).
|
||||
* </p>
|
||||
*
|
||||
* @author Litarvan
|
||||
* @version 1.1.5
|
||||
*/
|
||||
public class MicrosoftAuthResult
|
||||
{
|
||||
private final MinecraftProfile profile;
|
||||
private final String accessToken;
|
||||
private final String refreshToken;
|
||||
private final String xuid;
|
||||
private final String clientId;
|
||||
|
||||
public MicrosoftAuthResult(MinecraftProfile profile, String accessToken, String refreshToken, String xuid, String clientId)
|
||||
{
|
||||
this.profile = profile;
|
||||
this.accessToken = accessToken;
|
||||
this.refreshToken = refreshToken;
|
||||
this.xuid = xuid;
|
||||
this.clientId = clientId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @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
|
||||
*
|
||||
*/
|
||||
public String getRefreshToken()
|
||||
{
|
||||
return refreshToken;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return The XUID of the player
|
||||
*/
|
||||
public String getXuid()
|
||||
{
|
||||
return this.xuid;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return The client ID of the player
|
||||
*/
|
||||
public String getClientId()
|
||||
{
|
||||
return this.clientId;
|
||||
}
|
||||
}
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -1,167 +1,146 @@
|
|||
[15:14:00] [Client thread/INFO]: Setting user: Player276
|
||||
[15:14:00] [Client thread/INFO]: (Session ID is token:0:Player276)
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] *** Reflector Forge ***
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.model.Attributes
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: mods.betterfoliage.client.BetterFoliageClient
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.common.asm.transformers.BlamingTransformer
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.event.world.ChunkWatchEvent$UnWatch
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.relauncher.CoreModManager
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.common.DimensionManager
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.GuiScreenEvent$DrawScreenEvent$Pre
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.GuiScreenEvent$DrawScreenEvent$Post
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.EntityViewRenderEvent$CameraSetup
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.EntityViewRenderEvent$FogColors
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.common.eventhandler.Event
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.common.eventhandler.EventBus
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.common.eventhandler.Event$Result
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.common.property.ExtendedBlockState
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.client.FMLClientHandler
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.common.FMLCommonHandler
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.world.biome.BiomeGenBase.getWaterColorMultiplier
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.addDestroyEffects
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.addHitEffects
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.canCreatureSpawn
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.canRenderInLayer
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.doesSideBlockRendering
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.getBedDirection
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.getExtendedState
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.hasTileEntity
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.isAir
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.isBed
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.isBedFoot
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.isSideSolid
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.entity.Entity.canRiderInteract
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Field not present: net.minecraft.entity.Entity.captureDrops
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Field not present: net.minecraft.entity.Entity.capturedDrops
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.entity.Entity.shouldRenderInPass
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.entity.Entity.shouldRiderSit
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.event.ForgeEventFactory
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.common.ForgeHooks
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.ForgeHooksClient
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.item.Item.getDurabilityForDisplay
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.item.Item.getModel
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.item.Item.onEntitySwing
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.item.Item.shouldCauseReequipAnimation
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.item.Item.showDurabilityBar
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.item.ItemRecord.getRecordResource
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.common.ForgeModContainer
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.potion.PotionEffect.isCurativeItem
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.tileentity.TileEntity.canRenderBreaking
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.tileentity.TileEntity.getRenderBoundingBox
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.tileentity.TileEntity.hasFastRenderer
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.tileentity.TileEntity.shouldRenderInPass
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher.preDrawBatch
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher.drawBatch
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.client.renderer.vertex.VertexFormatElement$EnumUsage.preDraw
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.client.renderer.vertex.VertexFormatElement$EnumUsage.postDraw
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.world.World.countEntities
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.world.World.getPerWorldStorage
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.world.WorldProvider.getCloudRenderer
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.world.WorldProvider.getSkyRenderer
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.world.WorldProvider.getWeatherRenderer
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.client.GuiModList
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.model.IColoredBakedQuad
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.common.property.IExtendedBlockState
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.IRenderHandler
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.model.ISmartBlockModel
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.ItemModelMesherForge
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraft.launchwrapper.Launch
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.model.pipeline.LightUtil
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.common.MinecraftForge
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.MinecraftForgeClient
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.model.ModelLoader
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.RenderBlockOverlayEvent$OverlayType
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.client.registry.RenderingRegistry
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.RenderItemInFrameEvent
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.RenderLivingEvent$Pre
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.RenderLivingEvent$Post
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.RenderLivingEvent$Specials$Pre
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.RenderLivingEvent$Specials$Post
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.client.SplashProgress
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.event.world.WorldEvent$Load
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] *** Reflector Vanilla ***
|
||||
[15:14:01] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: optifine.OptiFineClassTransformer
|
||||
[15:14:02] [Client thread/ERROR]: [Athena] Failed to load resource outside namespace (C:\Users\nitro\OneDrive\Desktop\programming\AthenaClient\Athena-Client\workspace\.\assets\minecraft\Athena\gui\settings.png).javax.imageio.IIOException: Can't read input file!
|
||||
[15:14:02] [Client thread/WARN]: [Athena] Tried accessing non-existing module: theme
|
||||
[15:14:02] [Client thread/WARN]: [Athena] Loaded config default with left over setting theme which is no longer used.
|
||||
[15:14:02] [Client thread/WARN]: [Athena] Tried accessing non-existing module: cape
|
||||
[15:14:02] [Client thread/WARN]: [Athena] Loaded config default with left over setting cape which is no longer used.
|
||||
[15:14:02] [Client thread/INFO]: [Athena] rip.athena.client.cosmetics.cape.Cape@fa11fdaziue's headziue's head
|
||||
[15:14:02] [Client thread/INFO]: LWJGL Version: 2.9.4
|
||||
[15:14:03] [Client thread/INFO]: [OptiFine]
|
||||
[15:14:03] [Client thread/INFO]: [OptiFine] OptiFine_1.8.8_HD_U_H8
|
||||
[15:14:03] [Client thread/INFO]: [OptiFine] Build: null
|
||||
[15:14:03] [Client thread/INFO]: [OptiFine] OS: Windows 10 (amd64) version 10.0
|
||||
[15:14:03] [Client thread/INFO]: [OptiFine] Java: 1.8.0_202, Oracle Corporation
|
||||
[15:14:03] [Client thread/INFO]: [OptiFine] VM: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
|
||||
[15:14:03] [Client thread/INFO]: [OptiFine] LWJGL: 2.9.4
|
||||
[15:14:03] [Client thread/INFO]: [OptiFine] OpenGL: NVIDIA GeForce RTX 2060 SUPER/PCIe/SSE2, version 4.6.0 NVIDIA 536.23, NVIDIA Corporation
|
||||
[15:14:03] [Client thread/INFO]: [OptiFine] OpenGL Version: 4.6.0
|
||||
[15:14:03] [Client thread/INFO]: [OptiFine] Maximum texture size: 32768x32768
|
||||
[15:14:03] [Thread-7/INFO]: [OptiFine] Checking for new version
|
||||
[15:14:03] [Client thread/INFO]: [Shaders] ShadersMod version: 2.4.12
|
||||
[15:14:03] [Client thread/INFO]: [Shaders] OpenGL Version: 4.6.0 NVIDIA 536.23
|
||||
[15:14:03] [Client thread/INFO]: [Shaders] Vendor: NVIDIA Corporation
|
||||
[15:14:03] [Client thread/INFO]: [Shaders] Renderer: NVIDIA GeForce RTX 2060 SUPER/PCIe/SSE2
|
||||
[15:14:03] [Client thread/INFO]: [Shaders] Capabilities: 2.0 2.1 3.0 3.2 4.0
|
||||
[15:14:03] [Client thread/INFO]: [Shaders] GL_MAX_DRAW_BUFFERS: 8
|
||||
[15:14:03] [Client thread/INFO]: [Shaders] GL_MAX_COLOR_ATTACHMENTS_EXT: 8
|
||||
[15:14:03] [Client thread/INFO]: [Shaders] GL_MAX_TEXTURE_IMAGE_UNITS: 32
|
||||
[15:14:03] [Client thread/INFO]: [Shaders] Load ShadersMod configuration.
|
||||
[15:14:03] [Client thread/INFO]: [Shaders] Shaders can not be loaded, Fast Render is enabled.
|
||||
[15:14:03] [Client thread/INFO]: [Shaders] No shaderpack loaded.
|
||||
[15:14:03] [Thread-7/INFO]: [OptiFine] Version found: I7
|
||||
[15:14:03] [Client thread/INFO]: Reloading ResourceManager: Default, ! §bPotfast 5kay.zip
|
||||
[15:14:03] [Client thread/INFO]: [OptiFine] *** Reloading textures ***
|
||||
[15:14:03] [Client thread/INFO]: [OptiFine] Resource packs: ! §bPotfast 5kay.zip
|
||||
[15:14:03] [Sound Library Loader/INFO]: Starting up SoundSystem...
|
||||
[15:14:03] [Thread-8/INFO]: Initializing LWJGL OpenAL
|
||||
[15:14:03] [Thread-8/INFO]: (The LWJGL binding of OpenAL. For more information, see http://www.lwjgl.org)
|
||||
[15:14:03] [Thread-8/INFO]: OpenAL initialized.
|
||||
[15:14:04] [Sound Library Loader/INFO]: Sound engine started
|
||||
[15:14:04] [Client thread/INFO]: [OptiFine] Sprite size: 32
|
||||
[15:14:04] [Client thread/INFO]: [OptiFine] Mipmap levels: 5
|
||||
[15:14:04] [Client thread/INFO]: [OptiFine] Multitexture: false
|
||||
[15:14:05] [Client thread/INFO]: Created: 2048x2048 textures-atlas
|
||||
[15:14:05] [Client thread/INFO]: [OptiFine] *** Reloading custom textures ***
|
||||
[15:14:05] [Client thread/INFO]: [OptiFine] CustomSky properties: mcpatcher/sky/world0/sky1.properties
|
||||
[15:14:05] [Client thread/INFO]: [OptiFine] CustomSky properties: mcpatcher/sky/world0/sky2.properties
|
||||
[15:14:05] [Client thread/INFO]: [OptiFine] CustomSky properties: mcpatcher/sky/world0/sky3.properties
|
||||
[15:14:05] [Client thread/INFO]: [OptiFine] CustomSky: Texture not found: minecraft:terrain/sky0/sky_sunflare2.png
|
||||
[15:14:05] [Client thread/INFO]: [OptiFine] CustomSky properties: mcpatcher/sky/world0/sky4.properties
|
||||
[15:14:05] [Client thread/INFO]: [OptiFine] CustomSky: Texture not found: minecraft:terrain/sky0/sky_sunflare1.png
|
||||
[15:14:05] [Client thread/INFO]: [OptiFine] CustomSky properties: mcpatcher/sky/world0/sky5.properties
|
||||
[15:14:05] [Client thread/INFO]: [OptiFine] CustomSky: Texture not found: minecraft:terrain/sky0/sky_sunflare3.png
|
||||
[15:14:05] [Client thread/INFO]: [OptiFine] CustomSky properties: mcpatcher/sky/world0/sky6.properties
|
||||
[15:14:05] [Client thread/INFO]: [OptiFine] CustomSky: Texture not found: minecraft:terrain/sky0/sky_sunflare.png
|
||||
[15:14:05] [Client thread/INFO]: [OptiFine] CustomSky properties: mcpatcher/sky/world0/sky7.properties
|
||||
[15:14:05] [Client thread/INFO]: [OptiFine] CustomSky: Texture not found: minecraft:terrain/sky0/sky_box.png
|
||||
[15:14:05] [Client thread/INFO]: [OptiFine] CustomSky properties: mcpatcher/sky/world0/sky8.properties
|
||||
[15:14:05] [Client thread/INFO]: [OptiFine] CustomSky: Texture not found: minecraft:terrain/sky0/sky_clouds.png
|
||||
[15:14:05] [Client thread/INFO]: [OptiFine] CustomSky properties: mcpatcher/sky/world0/sky9.properties
|
||||
[15:14:05] [Client thread/INFO]: [OptiFine] CustomSky: Texture not found: minecraft:terrain/sky0/night_skybox.png
|
||||
[15:14:05] [Client thread/INFO]: [OptiFine] CustomSky properties: mcpatcher/sky/world0/sky10.properties
|
||||
[15:14:05] [Client thread/INFO]: [OptiFine] Enable face culling: acacia_leaves, birch_leaves, dark_oak_leaves, jungle_leaves, oak_leaves, spruce_leaves
|
||||
[15:14:11] [Server thread/INFO]: Starting integrated minecraft server version 1.8.8
|
||||
[15:14:11] [Server thread/INFO]: Generating keypair
|
||||
[15:14:12] [Server thread/INFO]: Preparing start region for level 0
|
||||
[15:14:12] [Server thread/INFO]: Changing view distance to 8, from 10
|
||||
[15:14:12] [Server thread/INFO]: Ntdi[local:E:76f9e1cb] logged in with entity id 97 at (733.1438735401466, 78.04097159015387, 375.5908084570898)
|
||||
[15:14:12] [Server thread/INFO]: Ntdi joined the game
|
||||
[15:14:13] [Client thread/INFO]: [CHAT] A new §eOptiFine§f version is available: §eHD Ultra I7§f
|
||||
[15:15:22] [Server thread/INFO]: Ntdi has just earned the achievement [Taking Inventory]
|
||||
[15:15:22] [Client thread/INFO]: [CHAT] Ntdi has just earned the achievement [Taking Inventory]
|
||||
[15:16:05] [Server thread/INFO]: Saving and pausing game...
|
||||
[15:16:05] [Server thread/INFO]: Saving chunks for level 'mcpworld'/Overworld
|
||||
[15:16:05] [Server thread/INFO]: Saving chunks for level 'mcpworld'/Nether
|
||||
[15:16:05] [Server thread/INFO]: Saving chunks for level 'mcpworld'/The End
|
||||
[15:16:06] [Server thread/INFO]: Stopping server
|
||||
[15:16:06] [Server thread/INFO]: Saving players
|
||||
[15:16:06] [Server thread/INFO]: Saving worlds
|
||||
[15:16:06] [Server thread/INFO]: Saving chunks for level 'mcpworld'/Overworld
|
||||
[15:16:06] [Server thread/INFO]: Saving chunks for level 'mcpworld'/Nether
|
||||
[15:16:06] [Server thread/INFO]: Saving chunks for level 'mcpworld'/The End
|
||||
[15:16:08] [Client thread/INFO]: Stopping!
|
||||
[15:16:08] [Client thread/INFO]: [Athena] Shutting down client
|
||||
[15:16:08] [Client thread/INFO]: SoundSystem shutting down...
|
||||
[15:16:08] [Client thread/WARN]: Author: Paul Lamb, www.paulscode.com
|
||||
[17:26:33] [Client thread/INFO]: Setting user: Player451
|
||||
[17:26:33] [Client thread/INFO]: (Session ID is token:0:Player451)
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] *** Reflector Forge ***
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.model.Attributes
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: mods.betterfoliage.client.BetterFoliageClient
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.common.asm.transformers.BlamingTransformer
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.event.world.ChunkWatchEvent$UnWatch
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.relauncher.CoreModManager
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.common.DimensionManager
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.GuiScreenEvent$DrawScreenEvent$Pre
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.GuiScreenEvent$DrawScreenEvent$Post
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.EntityViewRenderEvent$CameraSetup
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.EntityViewRenderEvent$FogColors
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.common.eventhandler.Event
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.common.eventhandler.EventBus
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.common.eventhandler.Event$Result
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.common.property.ExtendedBlockState
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.client.FMLClientHandler
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.common.FMLCommonHandler
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.world.biome.BiomeGenBase.getWaterColorMultiplier
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.addDestroyEffects
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.addHitEffects
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.canCreatureSpawn
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.canRenderInLayer
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.doesSideBlockRendering
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.getBedDirection
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.getExtendedState
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.hasTileEntity
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.isAir
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.isBed
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.isBedFoot
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.block.Block.isSideSolid
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.entity.Entity.canRiderInteract
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Field not present: net.minecraft.entity.Entity.captureDrops
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Field not present: net.minecraft.entity.Entity.capturedDrops
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.entity.Entity.shouldRenderInPass
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.entity.Entity.shouldRiderSit
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.event.ForgeEventFactory
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.common.ForgeHooks
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.ForgeHooksClient
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.item.Item.getDurabilityForDisplay
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.item.Item.getModel
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.item.Item.onEntitySwing
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.item.Item.shouldCauseReequipAnimation
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.item.Item.showDurabilityBar
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.item.ItemRecord.getRecordResource
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.common.ForgeModContainer
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.potion.PotionEffect.isCurativeItem
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.tileentity.TileEntity.canRenderBreaking
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.tileentity.TileEntity.getRenderBoundingBox
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.tileentity.TileEntity.hasFastRenderer
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.tileentity.TileEntity.shouldRenderInPass
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher.preDrawBatch
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher.drawBatch
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.client.renderer.vertex.VertexFormatElement$EnumUsage.preDraw
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.client.renderer.vertex.VertexFormatElement$EnumUsage.postDraw
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.world.World.countEntities
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.world.World.getPerWorldStorage
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.world.WorldProvider.getCloudRenderer
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.world.WorldProvider.getSkyRenderer
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Method not present: net.minecraft.world.WorldProvider.getWeatherRenderer
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.client.GuiModList
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.model.IColoredBakedQuad
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.common.property.IExtendedBlockState
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.IRenderHandler
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.model.ISmartBlockModel
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.ItemModelMesherForge
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraft.launchwrapper.Launch
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.model.pipeline.LightUtil
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.common.MinecraftForge
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.MinecraftForgeClient
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.model.ModelLoader
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.RenderBlockOverlayEvent$OverlayType
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.client.registry.RenderingRegistry
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.RenderItemInFrameEvent
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.RenderLivingEvent$Pre
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.RenderLivingEvent$Post
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.RenderLivingEvent$Specials$Pre
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.client.event.RenderLivingEvent$Specials$Post
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.client.SplashProgress
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.event.world.WorldEvent$Load
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] *** Reflector Vanilla ***
|
||||
[17:26:34] [Client thread/INFO]: [OptiFine] (Reflector) Class not present: optifine.OptiFineClassTransformer
|
||||
[17:26:39] [Client thread/ERROR]: [Athena] Failed to load resource outside namespace (C:\Users\nitro\OneDrive\Desktop\programming\AthenaClient\Athena-Client\workspace\.\assets\minecraft\Athena\gui\settings.png).javax.imageio.IIOException: Can't read input file!
|
||||
[17:26:39] [Client thread/WARN]: [Athena] Tried accessing non-existing module: theme
|
||||
[17:26:39] [Client thread/WARN]: [Athena] Loaded config default with left over setting theme which is no longer used.
|
||||
[17:26:39] [Client thread/WARN]: [Athena] Tried accessing non-existing module: cape
|
||||
[17:26:39] [Client thread/WARN]: [Athena] Loaded config default with left over setting cape which is no longer used.
|
||||
[17:26:39] [Client thread/INFO]: [Athena] rip.athena.client.cosmetics.cape.Cape@7a04f730ziue's headziue's head
|
||||
[17:26:39] [Client thread/INFO]: LWJGL Version: 2.9.4
|
||||
[17:26:40] [Client thread/INFO]: [OptiFine]
|
||||
[17:26:40] [Client thread/INFO]: [OptiFine] OptiFine_1.8.8_HD_U_H8
|
||||
[17:26:40] [Client thread/INFO]: [OptiFine] Build: null
|
||||
[17:26:40] [Client thread/INFO]: [OptiFine] OS: Windows 10 (amd64) version 10.0
|
||||
[17:26:40] [Client thread/INFO]: [OptiFine] Java: 1.8.0_202, Oracle Corporation
|
||||
[17:26:40] [Client thread/INFO]: [OptiFine] VM: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
|
||||
[17:26:40] [Client thread/INFO]: [OptiFine] LWJGL: 2.9.4
|
||||
[17:26:40] [Client thread/INFO]: [OptiFine] OpenGL: NVIDIA GeForce RTX 2060 SUPER/PCIe/SSE2, version 4.6.0 NVIDIA 536.23, NVIDIA Corporation
|
||||
[17:26:40] [Client thread/INFO]: [OptiFine] OpenGL Version: 4.6.0
|
||||
[17:26:40] [Client thread/INFO]: [OptiFine] Maximum texture size: 32768x32768
|
||||
[17:26:40] [Thread-7/INFO]: [OptiFine] Checking for new version
|
||||
[17:26:40] [Client thread/INFO]: [Shaders] ShadersMod version: 2.4.12
|
||||
[17:26:40] [Client thread/INFO]: [Shaders] OpenGL Version: 4.6.0 NVIDIA 536.23
|
||||
[17:26:40] [Client thread/INFO]: [Shaders] Vendor: NVIDIA Corporation
|
||||
[17:26:40] [Client thread/INFO]: [Shaders] Renderer: NVIDIA GeForce RTX 2060 SUPER/PCIe/SSE2
|
||||
[17:26:40] [Client thread/INFO]: [Shaders] Capabilities: 2.0 2.1 3.0 3.2 4.0
|
||||
[17:26:40] [Client thread/INFO]: [Shaders] GL_MAX_DRAW_BUFFERS: 8
|
||||
[17:26:40] [Client thread/INFO]: [Shaders] GL_MAX_COLOR_ATTACHMENTS_EXT: 8
|
||||
[17:26:40] [Client thread/INFO]: [Shaders] GL_MAX_TEXTURE_IMAGE_UNITS: 32
|
||||
[17:26:40] [Client thread/INFO]: [Shaders] Load ShadersMod configuration.
|
||||
[17:26:40] [Client thread/INFO]: [Shaders] Shaders can not be loaded, Fast Render is enabled.
|
||||
[17:26:40] [Client thread/INFO]: [Shaders] No shaderpack loaded.
|
||||
[17:26:40] [Thread-7/INFO]: [OptiFine] Version found: I7
|
||||
[17:26:40] [Client thread/INFO]: Reloading ResourceManager: Default, ! §bPotfast 5kay.zip
|
||||
[17:26:40] [Client thread/INFO]: [OptiFine] *** Reloading textures ***
|
||||
[17:26:40] [Client thread/INFO]: [OptiFine] Resource packs: ! §bPotfast 5kay.zip
|
||||
[17:26:40] [Sound Library Loader/INFO]: Starting up SoundSystem...
|
||||
[17:26:40] [Thread-8/INFO]: Initializing LWJGL OpenAL
|
||||
[17:26:40] [Thread-8/INFO]: (The LWJGL binding of OpenAL. For more information, see http://www.lwjgl.org)
|
||||
[17:26:40] [Thread-8/INFO]: OpenAL initialized.
|
||||
[17:26:41] [Sound Library Loader/INFO]: Sound engine started
|
||||
[17:26:41] [Client thread/INFO]: [OptiFine] Sprite size: 32
|
||||
[17:26:41] [Client thread/INFO]: [OptiFine] Mipmap levels: 5
|
||||
[17:26:41] [Client thread/INFO]: [OptiFine] Multitexture: false
|
||||
[17:26:41] [Client thread/INFO]: Created: 2048x2048 textures-atlas
|
||||
[17:26:42] [Client thread/INFO]: [OptiFine] *** Reloading custom textures ***
|
||||
[17:26:42] [Client thread/INFO]: [OptiFine] CustomSky properties: mcpatcher/sky/world0/sky1.properties
|
||||
[17:26:42] [Client thread/INFO]: [OptiFine] CustomSky properties: mcpatcher/sky/world0/sky2.properties
|
||||
[17:26:42] [Client thread/INFO]: [OptiFine] CustomSky properties: mcpatcher/sky/world0/sky3.properties
|
||||
[17:26:42] [Client thread/INFO]: [OptiFine] CustomSky: Texture not found: minecraft:terrain/sky0/sky_sunflare2.png
|
||||
[17:26:42] [Client thread/INFO]: [OptiFine] CustomSky properties: mcpatcher/sky/world0/sky4.properties
|
||||
[17:26:42] [Client thread/INFO]: [OptiFine] CustomSky: Texture not found: minecraft:terrain/sky0/sky_sunflare1.png
|
||||
[17:26:42] [Client thread/INFO]: [OptiFine] CustomSky properties: mcpatcher/sky/world0/sky5.properties
|
||||
[17:26:42] [Client thread/INFO]: [OptiFine] CustomSky: Texture not found: minecraft:terrain/sky0/sky_sunflare3.png
|
||||
[17:26:42] [Client thread/INFO]: [OptiFine] CustomSky properties: mcpatcher/sky/world0/sky6.properties
|
||||
[17:26:42] [Client thread/INFO]: [OptiFine] CustomSky: Texture not found: minecraft:terrain/sky0/sky_sunflare.png
|
||||
[17:26:42] [Client thread/INFO]: [OptiFine] CustomSky properties: mcpatcher/sky/world0/sky7.properties
|
||||
[17:26:42] [Client thread/INFO]: [OptiFine] CustomSky: Texture not found: minecraft:terrain/sky0/sky_box.png
|
||||
[17:26:42] [Client thread/INFO]: [OptiFine] CustomSky properties: mcpatcher/sky/world0/sky8.properties
|
||||
[17:26:42] [Client thread/INFO]: [OptiFine] CustomSky: Texture not found: minecraft:terrain/sky0/sky_clouds.png
|
||||
[17:26:42] [Client thread/INFO]: [OptiFine] CustomSky properties: mcpatcher/sky/world0/sky9.properties
|
||||
[17:26:42] [Client thread/INFO]: [OptiFine] CustomSky: Texture not found: minecraft:terrain/sky0/night_skybox.png
|
||||
[17:26:42] [Client thread/INFO]: [OptiFine] CustomSky properties: mcpatcher/sky/world0/sky10.properties
|
||||
[17:26:42] [Client thread/INFO]: [OptiFine] Enable face culling: acacia_leaves, birch_leaves, dark_oak_leaves, jungle_leaves, oak_leaves, spruce_leaves
|
||||
[17:27:03] [Thread-13/INFO]: [Athena]
|
||||
[17:29:57] [Client Shutdown Thread/INFO]: Stopping server
|
||||
|
|
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue