
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