ProjectAres/API/api/src/main/java/tc/oc/api/docs/virtual/UserDoc.java

114 lines
2.9 KiB
Java

package tc.oc.api.docs.virtual;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.time.Instant;
import tc.oc.api.annotations.Serialize;
import tc.oc.api.docs.PlayerId;
public interface UserDoc {
interface Partial extends PartialModel {}
@Serialize
interface Nickname extends Partial {
@Nullable String nickname();
}
@Serialize
interface Locale extends Partial {
@Nullable String mc_locale();
}
class Flair {
public String realm;
public String text;
public int priority;
}
@Serialize
interface Identity extends PlayerId, Nickname {
@Nonnull UUID uuid();
@Nonnull List<Flair> minecraft_flair();
}
@Serialize
interface Trophies extends Partial {
List<String> trophy_ids();
}
interface License {
@Serialize
interface Kill extends Document {
@Nonnull String victim_id();
boolean friendly();
}
@Serialize
interface Stats extends Partial {
@Nonnull List<Kill> tnt_license_kills();
}
interface Request extends Stats {
@Serialize @Nullable Instant requested_tnt_license_at();
default boolean requestedTntLicense() {
return requested_tnt_license_at() != null;
}
}
interface Grant extends Stats {
@Serialize @Nullable Instant granted_tnt_license_at();
default boolean hasTntLicense() {
return granted_tnt_license_at() != null;
}
}
interface Complete extends Request, Grant {}
}
/**
* Stuff we get from the API on login, and keep around for plugins to use
*/
@Serialize
interface Login extends Identity, Locale, Trophies, License.Complete {
int raindrops();
String mc_last_sign_in_ip();
@Nullable Date trial_expires_at();
Map<String, Map<String, Boolean>> mc_permissions_by_realm();
Map<String, Map<String, String>> mc_settings_by_profile();
Map<String, String> classes();
Set<PlayerId> friends();
Map<String, List<Instant>> recent_match_joins_by_family_id(); // Reverse-chronological order
int enemy_kills();
}
/**
* Stuff we learn from the client on login, and report to the API
*/
@Serialize
interface ClientDetails extends Partial {
String mc_client_version();
String skin_blob(); // Base64 encoded thing returned from Skin#getData()
}
enum ResourcePackStatus {
// MUST match org.bukit.ResourcePackStatus
ACCEPTED, DECLINED, LOADED, FAILED
}
@Serialize
interface ResourcePackResponse extends Partial {
UserDoc.ResourcePackStatus resource_pack_status();
}
}