All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.handyplus.lib.util.HandyHttpUtil Maven / Gradle / Ivy

The newest version!
package cn.handyplus.lib.util;

import cn.handyplus.lib.InitApi;
import cn.handyplus.lib.adapter.HandyRunnable;
import cn.handyplus.lib.adapter.HandySchedulerUtil;
import cn.handyplus.lib.constants.BaseConstants;
import cn.handyplus.lib.constants.LanguageTypeEnum;
import cn.handyplus.lib.core.HttpUtil;
import cn.handyplus.lib.core.JsonUtil;
import cn.handyplus.lib.core.StrUtil;
import com.google.common.collect.Maps;
import com.google.gson.JsonObject;
import net.md_5.bungee.api.chat.TextComponent;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;

import java.io.File;
import java.io.IOException;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.logging.Level;

/**
 * 调用http工具类
 *
 * @author handy
 */
public class HandyHttpUtil {
    private HandyHttpUtil() {
    }

    /**
     * 版本检测
     *
     * @param player 玩家
     */
    public static void checkVersion(Player player) {
        if (player != null && !player.isOp()) {
            return;
        }
        HandySchedulerUtil.runTaskAsynchronously(() -> {
            String version = InitApi.PLUGIN.getDescription().getVersion();
            Optional tagNameOpt = getOfficialVersion();
            if (!tagNameOpt.isPresent()) {
                return;
            }
            if (BaseUtil.convertVersion(tagNameOpt.get()) > BaseUtil.convertVersion(version)) {
                String oneMsg = ChatColor.GRAY + "_________________/ &e" + InitApi.PLUGIN.getDescription().getName() + ChatColor.GRAY + " \\_________________\n";
                TextComponent message = TextUtil.getInstance().init(oneMsg).build();
                String twoMsg = "&7| &a最新版本: &d" + tagNameOpt.get() + " &a当前版本: &d" + version + " &a点击&d&n此处查看&a更新内容 &7|\n";
                message.addExtra(TextUtil.getInstance().init("     " + twoMsg).addClickUrl(InitApi.PLUGIN.getDescription().getWebsite()).build());
                message.addExtra(TextUtil.getInstance().init(ChatColor.GRAY + "-----------------------------------------------").build());
                if (player == null) {
                    MessageUtil.sendConsoleMessage(twoMsg);
                } else {
                    MessageUtil.sendMessage(player, message);
                }
            }
        });
    }

    /**
     * 云汉化系统
     *
     * @param language 语言类型
     */
    public static void getI18nJson(LanguageTypeEnum language) {
        // 获取版本
        String url = null;
        switch (BaseConstants.VERSION_CHECK_ENUM) {
            case V_1_6:
            case V_1_7:
            case V_1_8:
            case V_1_8_3:
            case V_1_8_4:
            case V_1_8_5:
            case V_1_8_6:
            case V_1_8_7:
            case V_1_8_8:
            case V_1_9:
            case V_1_9_4:
            case V_1_10:
            case V_1_11:
            case V_1_12:
                break;
            case V_1_13:
            case V_1_13_2:
                url = BaseConstants.URL_1_13;
                break;
            case V_1_14:
                url = BaseConstants.URL_1_14;
                break;
            case V_1_15:
                url = BaseConstants.URL_1_15;
                break;
            case V_1_16:
            case V_1_16_2:
            case V_1_16_3:
            case V_1_16_4:
            case V_1_16_5:
                url = BaseConstants.URL_1_16;
                break;
            case V_1_17:
                url = BaseConstants.URL_1_17;
                break;
            case V_1_18:
            case V_1_18_2:
                url = BaseConstants.URL_1_18;
                break;
            case V_1_19:
            case V_1_19_3:
            case V_1_19_4:
                url = BaseConstants.URL_1_19;
                break;
            case V_1_20:
            case V_1_20_2:
            case V_1_20_3:
            case V_1_20_4:
            case V_1_20_5:
            case V_1_20_6:
                url = BaseConstants.URL_1_20;
                break;
            case V_1_21:
            default:
                url = BaseConstants.URL_1_21;
                break;
        }
        if (url != null) {
            url = url.replace(LanguageTypeEnum.ZH_CN.getValue(), language.getValue());
            getCloudI18nJson(url, language);
        }
    }

    /**
     * 获取云汉化数据
     *
     * @param version 版本
     */
    public static void setCloudItemJsonCacheMap(String version) {
        AtomicInteger retryNumber = new AtomicInteger(6);
        HandyRunnable handyRunnable = new HandyRunnable() {
            @Override
            public void run() {
                try {
                    HashMap paramMap = Maps.newHashMapWithExpectedSize(1);
                    paramMap.put("version", version);
                    String result = HttpUtil.get(BaseConstants.CLOUD_GET_URL, paramMap);
                    if (StrUtil.isNotEmpty(result)) {
                        BaseConstants.CLOUD_ITEM_JSON_CACHE_MAP = JsonUtil.toMap(result);
                    }
                    this.cancel();
                } catch (Throwable ignored) {
                    retryNumber.getAndDecrement();
                    if (retryNumber.get() < 1) {
                        this.cancel();
                    }
                }
            }
        };
        HandySchedulerUtil.runTaskTimerAsynchronously(handyRunnable, 20 * 3, 20 * 60);
    }

    /**
     * 同步自定义汉化数据
     */
    public static void setItemName() {
        HandySchedulerUtil.runTaskLaterAsynchronously(() -> {
            try {
                Map itemJsonCacheMap = BaseConstants.ITEM_JSON_CACHE_MAP;
                if (itemJsonCacheMap.isEmpty()) {
                    return;
                }
                itemJsonCacheMap.put("version", BaseConstants.VERSION_CHECK_ENUM.getMainVersion());
                HttpUtil.post(BaseConstants.CLOUD_SET_URL, JsonUtil.toJson(itemJsonCacheMap));
            } catch (Exception ignored) {
            }
        }, 20 * 60);
    }

    /**
     * 获取公网ip
     *
     * @return ip
     */
    public static String getIp() {
        try {
            return HttpUtil.get(BaseConstants.IP_CHINA_URL);
        } catch (NoSuchAlgorithmException | IOException | KeyManagementException e) {
            Bukkit.getLogger().log(Level.SEVERE, "getIp 发生异常", e);
        }
        return "";
    }

    /**
     * 下载云汉化文件
     *
     * @param url      下载路径
     * @param language 语言
     */
    private static void getCloudI18nJson(String url, LanguageTypeEnum language) {
        AtomicInteger retryNumber = new AtomicInteger(6);
        HandyRunnable handyRunnable = new HandyRunnable() {
            @Override
            public void run() {
                try {
                    // 下载文件保存到目录
                    HttpUtil.downloadFile(url, InitApi.PLUGIN.getDataFolder(), language.getValue() + ".json");
                    File i18nFile = new File(InitApi.PLUGIN.getDataFolder(), language.getValue() + ".json");
                    if (i18nFile.exists()) {
                        BaseUtil.readJsonFileToJsonCacheMap(i18nFile);
                    }
                    this.cancel();
                } catch (Exception ignored) {
                    retryNumber.getAndDecrement();
                    if (retryNumber.get() < 1) {
                        this.cancel();
                    }
                }
            }
        };
        HandySchedulerUtil.runTaskTimerAsynchronously(handyRunnable, 20 * 2, 20 * 60);
    }

    /**
     * 通过url获取版本json
     *
     * @return 版本号
     * @since 3.10.5
     */
    private static Optional getOfficialVersion() {
        try {
            String result = HttpUtil.get(BaseConstants.VERSION_URL);
            if (StrUtil.isEmpty(result)) {
                return Optional.empty();
            }
            JsonObject jsonObject = JsonUtil.toBean(result, JsonObject.class);
            // 获取到的信息
            return Optional.ofNullable(jsonObject.get(InitApi.PLUGIN.getDescription().getName()).getAsString());
        } catch (Throwable ignored) {
        }
        return Optional.empty();
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy