Spaces:
Build error
Build error
File size: 5,877 Bytes
d46f4a3 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 |
package com.mojang.realmsclient.client;
import com.google.common.base.Strings;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.mojang.logging.LogUtils;
import com.mojang.realmsclient.exception.RealmsHttpException;
import java.util.Locale;
import javax.annotation.Nullable;
import net.minecraft.client.resources.language.I18n;
import net.minecraft.network.chat.Component;
import net.minecraft.util.GsonHelper;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import org.slf4j.Logger;
@OnlyIn(Dist.CLIENT)
public interface RealmsError {
Component NO_MESSAGE = Component.translatable("mco.errorMessage.noDetails");
Logger LOGGER = LogUtils.getLogger();
int errorCode();
Component errorMessage();
String logMessage();
static RealmsError parse(int p_298954_, String p_87304_) {
if (p_298954_ == 429) {
return RealmsError.CustomError.SERVICE_BUSY;
} else if (Strings.isNullOrEmpty(p_87304_)) {
return RealmsError.CustomError.noPayload(p_298954_);
} else {
try {
JsonObject jsonobject = JsonParser.parseString(p_87304_).getAsJsonObject();
String s = GsonHelper.getAsString(jsonobject, "reason", null);
String s1 = GsonHelper.getAsString(jsonobject, "errorMsg", null);
int i = GsonHelper.getAsInt(jsonobject, "errorCode", -1);
if (s1 != null || s != null || i != -1) {
return new RealmsError.ErrorWithJsonPayload(p_298954_, i != -1 ? i : p_298954_, s, s1);
}
} catch (Exception exception) {
LOGGER.error("Could not parse RealmsError", (Throwable)exception);
}
return new RealmsError.ErrorWithRawPayload(p_298954_, p_87304_);
}
}
@OnlyIn(Dist.CLIENT)
public static record AuthenticationError(String message) implements RealmsError {
public static final int ERROR_CODE = 401;
@Override
public int errorCode() {
return 401;
}
@Override
public Component errorMessage() {
return Component.literal(this.message);
}
@Override
public String logMessage() {
return String.format(Locale.ROOT, "Realms authentication error with message '%s'", this.message);
}
}
@OnlyIn(Dist.CLIENT)
public static record CustomError(int httpCode, @Nullable Component payload) implements RealmsError {
public static final RealmsError.CustomError SERVICE_BUSY = new RealmsError.CustomError(429, Component.translatable("mco.errorMessage.serviceBusy"));
public static final Component RETRY_MESSAGE = Component.translatable("mco.errorMessage.retry");
public static RealmsError.CustomError unknownCompatibilityResponse(String p_300024_) {
return new RealmsError.CustomError(500, Component.translatable("mco.errorMessage.realmsService.unknownCompatibility", p_300024_));
}
public static RealmsError.CustomError connectivityError(RealmsHttpException p_298467_) {
return new RealmsError.CustomError(500, Component.translatable("mco.errorMessage.realmsService.connectivity", p_298467_.getMessage()));
}
public static RealmsError.CustomError retry(int p_297862_) {
return new RealmsError.CustomError(p_297862_, RETRY_MESSAGE);
}
public static RealmsError.CustomError noPayload(int p_298598_) {
return new RealmsError.CustomError(p_298598_, null);
}
@Override
public int errorCode() {
return this.httpCode;
}
@Override
public Component errorMessage() {
return this.payload != null ? this.payload : NO_MESSAGE;
}
@Override
public String logMessage() {
return this.payload != null
? String.format(Locale.ROOT, "Realms service error (%d) with message '%s'", this.httpCode, this.payload.getString())
: String.format(Locale.ROOT, "Realms service error (%d) with no payload", this.httpCode);
}
}
@OnlyIn(Dist.CLIENT)
public static record ErrorWithJsonPayload(int httpCode, int code, @Nullable String reason, @Nullable String message) implements RealmsError {
@Override
public int errorCode() {
return this.code;
}
@Override
public Component errorMessage() {
String s = "mco.errorMessage." + this.code;
if (I18n.exists(s)) {
return Component.translatable(s);
} else {
if (this.reason != null) {
String s1 = "mco.errorReason." + this.reason;
if (I18n.exists(s1)) {
return Component.translatable(s1);
}
}
return (Component)(this.message != null ? Component.literal(this.message) : NO_MESSAGE);
}
}
@Override
public String logMessage() {
return String.format(
Locale.ROOT, "Realms service error (%d/%d/%s) with message '%s'", this.httpCode, this.code, this.reason, this.message
);
}
}
@OnlyIn(Dist.CLIENT)
public static record ErrorWithRawPayload(int httpCode, String payload) implements RealmsError {
@Override
public int errorCode() {
return this.httpCode;
}
@Override
public Component errorMessage() {
return Component.literal(this.payload);
}
@Override
public String logMessage() {
return String.format(Locale.ROOT, "Realms service error (%d) with raw payload '%s'", this.httpCode, this.payload);
}
}
} |