package com.gmail.zahusek.tinyprotocolapi.wrapper; import org.bukkit.entity.Player; import com.gmail.zahusek.tinyprotocolapi.asm.reflection.ClassAccess; import com.mojang.authlib.GameProfile; import com.mojang.authlib.minecraft.MinecraftSessionService; import static com.google.common.collect.Iterables.getFirst; import static org.bukkit.Bukkit.getOfflinePlayer; import static org.bukkit.Bukkit.getPlayerExact; import static org.bukkit.Bukkit.getServer; import static org.bukkit.Bukkit.getOnlineMode; public abstract class WrapperService { private static final ClassAccess craftonline = new ClassAccess("{obc}.entity.CraftPlayer"); private static final ClassAccess craftofffline = new ClassAccess("{obc}.CraftOfflinePlayer"); private static final ClassAccess entity = new ClassAccess("{nms}.EntityPlayer"); private static final ClassAccess craftserver = new ClassAccess("{obc}.CraftServer"); public static final ClassAccess minecraftserver = new ClassAccess("{nms}.MinecraftServer"); public static final Object server = craftserver.invoke(getServer(), "getServer"); private static final boolean mode = getOnlineMode(); public static GameProfile getProfile (String name) { Player online = getPlayerExact(name); @SuppressWarnings("deprecation") GameProfile profile = online != null ? entity.invoke(craftonline.invoke(online, "getHandle"), "getProfile"): craftofffline.invoke(getOfflinePlayer(name), "getProfile"); if(!mode) return profile; if (getFirst(profile.getProperties().get("textures"), null) == null) { MinecraftSessionService service = minecraftserver.get(server, MinecraftSessionService.class, 0); profile = service.fillProfileProperties(profile, true); } return profile; } }