package com.alecgorge.minecraft.jsonapi.util;
import java.util.UUID;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
import com.mojang.authlib.GameProfile;
//#ifdefined mcversion
//$import net.minecraft.server./*$mcversion$*/.EntityPlayer;
//$import net.minecraft.server./*$mcversion$*/.*;
//$import org.bukkit.craftbukkit./*$mcversion$*/.*;
//#else
import net.minecraft.server.v1_11_R1.EntityPlayer;
import net.minecraft.server.v1_11_R1.*;
import org.bukkit.craftbukkit.v1_11_R1.*;
//#endif
public class OfflinePlayerLoader {
public static Player load(String exactPlayerName) {
// big thanks to
// https://github.com/lishid/OpenInv/blob/master/src/main/java/com/lishid/openinv/internal/v1_8_R1/PlayerDataManager.java
// Offline inv here...
try {
UUID uuid = matchUser(exactPlayerName);
if (uuid == null) {
return null;
}
OfflinePlayer player = Bukkit.getOfflinePlayer(uuid);
return loadFromOfflinePlayer(player);
}
catch (Exception e) {
e.printStackTrace();
}
catch (Error e) {
e.printStackTrace();
}
return null;
}
public static Player loadFromOfflinePlayer(OfflinePlayer player) {
if (player == null) {
return null;
}
GameProfile profile = new GameProfile(player.getUniqueId(), player.getName());
MinecraftServer server = ((CraftServer) Bukkit.getServer()).getServer();
// Create an entity to load the player data
EntityPlayer entity = new EntityPlayer(server, server.getWorldServer(0), profile, new PlayerInteractManager(server.getWorldServer(0)));
// Get the bukkit entity
Player target = entity.getBukkitEntity();
if (target != null) {
// Load data
target.loadData();
// Return the entity
return target;
}
return null;
}
public static UUID matchUser(String search) {
OfflinePlayer[] offlinePlayers = Bukkit.getOfflinePlayers();
for (OfflinePlayer player : offlinePlayers) {
String name = player.getName();
if (name == null) {
continue;
}
if (name.equalsIgnoreCase(search)) {
return player.getUniqueId();
}
}
return null;
}
}