package openmods.utils.io;
import com.google.common.base.Strings;
import com.mojang.authlib.GameProfile;
import com.mojang.authlib.properties.Property;
import com.mojang.authlib.properties.PropertyMap;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import java.util.UUID;
import openmods.utils.ByteUtils;
public class GameProfileSerializer implements IStreamSerializer<GameProfile> {
public static final IStreamSerializer<GameProfile> INSTANCE = new GameProfileSerializer();
@Override
public void writeToStream(GameProfile o, DataOutput output) throws IOException {
write(o, output);
}
@Override
public GameProfile readFromStream(DataInput input) throws IOException {
return read(input);
}
public static void write(GameProfile o, DataOutput output) throws IOException {
final UUID uuid = o.getId();
output.writeUTF(uuid == null? "" : uuid.toString());
output.writeUTF(Strings.nullToEmpty(o.getName()));
final PropertyMap properties = o.getProperties();
ByteUtils.writeVLI(output, properties.size());
for (Property p : properties.values()) {
output.writeUTF(p.getName());
output.writeUTF(p.getValue());
final String signature = p.getSignature();
if (signature != null) {
output.writeBoolean(true);
output.writeUTF(signature);
} else {
output.writeBoolean(false);
}
}
}
public static GameProfile read(DataInput input) throws IOException {
final String uuidStr = input.readUTF();
UUID uuid = Strings.isNullOrEmpty(uuidStr)? null : UUID.fromString(uuidStr);
final String name = input.readUTF();
GameProfile result = new GameProfile(uuid, name);
int propertyCount = ByteUtils.readVLI(input);
final PropertyMap properties = result.getProperties();
for (int i = 0; i < propertyCount; ++i) {
String key = input.readUTF();
String value = input.readUTF();
if (input.readBoolean()) {
String signature = input.readUTF();
properties.put(key, new Property(key, value, signature));
} else {
properties.put(key, new Property(key, value));
}
}
return result;
}
}