001package com.ericlam.mc.bungee.hnmc.managers;
002
003import com.ericlam.mc.bungee.hnmc.container.PlayerSkin;
004import com.ericlam.mc.bungee.hnmc.exceptions.SkinUpdateTooFastException;
005import net.md_5.bungee.api.connection.ProxiedPlayer;
006import net.md_5.bungee.connection.LoginResult;
007
008import java.util.UUID;
009import java.util.concurrent.CompletableFuture;
010
011public interface SkinValueManager {
012
013    /**
014     * 更新玩家皮膚
015     *
016     * @param uuid 玩家UUID
017     * @return 玩家皮膚
018     * @throws SkinUpdateTooFastException 距離上次更新不夠一日拋出
019     */
020    CompletableFuture<PlayerSkin> updateSkin(UUID uuid) throws SkinUpdateTooFastException;
021
022    /**
023     * @param uuid 玩家UUID
024     * @return 玩家皮膚
025     */
026    CompletableFuture<PlayerSkin> getOrSaveSkinForPlayer(UUID uuid);
027
028    /**
029     * @param uuid 玩家UUID
030     * @param name 玩家名稱
031     * @return 玩家皮膚
032     */
033    CompletableFuture<PlayerSkin> getOrSaveSkinForPlayer(UUID uuid, String name);
034
035    /**
036     * 刪除玩家皮膚資料
037     *
038     * @param uuid 玩家UUID
039     * @return 是否存在
040     */
041    CompletableFuture<Boolean> dropSkin(UUID uuid);
042
043
044    /**
045     * 設置玩家皮膚
046     *
047     * @param player 玩家
048     * @param skin  皮膚設置
049     */
050    void applySkin(final ProxiedPlayer player, final PlayerSkin skin);
051
052
053    /**
054     * 修改玩家 Profile
055     *
056     * @param result 登入 Profile
057     * @param skin 皮膚設置
058     * @return 登入 Profile
059     */
060    LoginResult editResult(final LoginResult result, final PlayerSkin skin);
061
062}