package yushijinhun.authlibagent.api;

import java.rmi.Remote;
import java.rmi.RemoteException;
import java.util.UUID;

/**
 * 管理账户
 * 
 * @author yushijinhun
 */
public interface AccountManager extends Remote {

	/**
	 * 根据uuid查询角色。
	 * 
	 * @param uuid uuid
	 * @return 查询到的角色，如果uuid为null或没有角色与给定uuid对应则返回null
	 * @throws RemoteException 如果RMI调用期间出现异常
	 */
	GameProfile lookupGameProfile(UUID uuid) throws RemoteException;

	/**
	 * 根据角色名查询角色。
	 * <p>
	 * 因为改名机制，所以不推荐使用角色名作为标识。
	 * 
	 * @param name 角色名
	 * @return 查询到的角色，如果name为null或没有角色与给定name对应则返回null
	 * @throws RemoteException 如果RMI调用期间出现异常
	 */
	GameProfile lookupGameProfile(String name) throws RemoteException;

	/**
	 * 根据账户id查询账户。
	 * 
	 * @param id 账户id
	 * @return 查询到的账户，如果id为null或没有角色与给定id对应则返回null
	 * @throws RemoteException 如果RMI调用期间出现异常
	 */
	YggdrasilAccount lookupAccount(String id) throws RemoteException;

	/**
	 * 创建一个账户。
	 * <p>
	 * 注意：捕获IDCollisionException时，同时要注意处理ServerException里包装了IDCollisionException的情况。
	 * 
	 * @param id 账户id，须满足 {@link YggdrasilValidate#isValidId(String)}，必须保证唯一
	 * @return 创建的账户
	 * @throws IDCollisionException 如果id发生冲突
	 * @throws RemoteException 如果RMI调用期间出现异常
	 */
	YggdrasilAccount createAccount(String id) throws IDCollisionException, RemoteException;

}

@@ -909,16 +909,24 @@
  * %E6%B3%A8%E6%84%8F%EF%BC%9A%E6%8D%95%E8%8E%B7
+ %7B@link 
 IDCollis
@@ -937,16 +937,18 @@
 xception
+%7D 
 %E6%97%B6%EF%BC%8C%E5%90%8C%E6%97%B6%E8%A6%81%E6%B3%A8%E6%84%8F%E5%A4%84
@@ -967,16 +967,24 @@
 tion%E9%87%8C%E5%8C%85%E8%A3%85%E4%BA%86
+ %7B@link 
 IDCollis
@@ -995,16 +995,18 @@
 xception
+%7D 
 %E7%9A%84%E6%83%85%E5%86%B5%E3%80%82%0A%09 *

use @link in javadoc