Newer
Older
KeeperJerry_Launcher / Launcher / source / client / PlayerProfile.java
package launcher.client;

import java.io.IOException;
import java.util.UUID;

import launcher.LauncherAPI;
import launcher.helper.IOHelper;
import launcher.helper.VerifyHelper;
import launcher.serialize.HInput;
import launcher.serialize.HOutput;
import launcher.serialize.stream.StreamObject;

public final class PlayerProfile extends StreamObject {
	// Instance
	@LauncherAPI public final UUID uuid;
	@LauncherAPI public final String username;

	// Textures properties
	@LauncherAPI public final String skinURL;
	@LauncherAPI public final String cloakURL;

	@LauncherAPI
	public PlayerProfile(HInput input) throws IOException {
		uuid = input.readUUID();
		username = VerifyHelper.verifyUsername(input.readASCII(16));

		// Read textures
		skinURL = input.readBoolean() ? IOHelper.verifyURL(input.readASCII(2048)) : null;
		cloakURL = input.readBoolean() ? IOHelper.verifyURL(input.readASCII(2048)) : null;
	}

	@LauncherAPI
	public PlayerProfile(UUID uuid, String username, String skinURL, String cloakURL) {
		this.uuid = uuid;
		this.username = username;
		this.skinURL = skinURL;
		this.cloakURL = cloakURL;
	}

	@Override
	public void write(HOutput output) throws IOException {
		output.writeUUID(uuid);
		output.writeASCII(username, 16);

		// Write textures
		output.writeBoolean(skinURL != null);
		if (skinURL != null) {
			output.writeASCII(skinURL, 2048);
		}
		output.writeBoolean(cloakURL != null);
		if (cloakURL != null) {
			output.writeASCII(cloakURL, 2048);
		}
	}

	@LauncherAPI
	public static UUID md5UUID(String username) {
		return UUID.nameUUIDFromBytes(IOHelper.encodeASCII("OfflinePlayer:" + username));
	}

	@LauncherAPI
	public static PlayerProfile newOfflineProfile(String username) {
		return new PlayerProfile(md5UUID(username), username, null, null);
	}
}