public class PlayerData {
private static final Map<UUID, PlayerData> PLAYER_DATAS = new HashMap<>();
public final UUID uuid;
public int foo;
public int bar;
public int baz;
public float qux;
public float quux;
private PlayerData(UUID uuid, int foo, int bar, int baz, float qux, float quux) {
this.uuid = uuid;
this.foo = foo;
this.bar = bar;
this.baz = baz;
this.qux = qux;
this.quux = quux;
}
private PlayerData(UUID uuid) {
this(uuid, 0, 0, 0, 0f, 0f);
}
public static PlayerData from(UUID uuid) {
return PLAYER_DATAS.computeIfAbsent(uuid, PlayerData::new);
}
public static PlayerData from(OfflinePlayer player) {
return from(player.getUniqueId());
}
public OfflinePlayer getOfflinePlayer() {
return Bukkit.getOfflinePlayer(uuid);
}
// java.util.Optional<T>
public Optional<Player> getPlayer() {
return Optional.ofNullable(Bukkit.getPlayer(uuid));
}
}
// Example
@EventHandler
public void gimmePlayer(PlayerJoinEvent event) {
PlayerData data = PlayerData.from(event.getPlayer());
Player fromData = data.getPlayer().get();
System.out.println(fromData.getName());
System.out.println(data.uuid);
System.out.println(data.foo);
System.out.println(data.bar);
System.out.println(data.baz);
System.out.println(data.qux);
System.out.println(data.quux);
}