Skip to content

Commit

Permalink
updata via upload
Browse files Browse the repository at this point in the history
  • Loading branch information
yxc0915 authored Mar 25, 2024
1 parent a57a4ec commit 9774309
Show file tree
Hide file tree
Showing 2 changed files with 100 additions and 3 deletions.
21 changes: 18 additions & 3 deletions src/main/java/ogcl/fun/PlayerIPadmin.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,35 @@

public class PlayerIPadmin extends JavaPlugin {
private DatabaseManager dbManager;
private Commands commands;
private PlayerIPadminAPI api;

@Override
public void onEnable() {
saveDefaultConfig(); // 确保配置文件被加载
saveDefaultConfig(); // 确保加载默认配置
dbManager = new DatabaseManager(this); // 初始化数据库管理器
// 注册getip命令执行器
this.getCommand("getip").setExecutor(new Commands(this, dbManager));
commands = new Commands(this, dbManager); // 初始化命令处理器
getCommand("getip").setExecutor(commands); // 注册/getip命令

api = new PlayerIPadminAPI(this); // 初始化API

// 注册事件监听器
getServer().getPluginManager().registerEvents(new PlayerLoginListener(this, dbManager), this);

getLogger().info("PlayerIPadmin 插件已启动!");
}

@Override
public void onDisable() {
getLogger().info("PlayerIPadmin 插件已关闭!");
}

public PlayerIPadminAPI getApi() {
return api;
}

// 如果其他地方需要访问Commands实例,可以提供getter方法
public Commands getCommands() {
return commands;
}
}
82 changes: 82 additions & 0 deletions src/main/java/ogcl/fun/PlayerIPadminAPI.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
package ogcl.fun;

import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class PlayerIPadminAPI {
private final PlayerIPadmin plugin;

public PlayerIPadminAPI(PlayerIPadmin plugin) {
this.plugin = plugin;
}

/**
* 获取指定玩家的IP地址。
*
* @param player 目标玩家
* @return 返回玩家的IP地址,如果无法获取则返回"未知"。
*/
public String getPlayerIP(Player player) {
if (player.getAddress() != null) {
return player.getAddress().getAddress().getHostAddress();
}
return "未知";
}

/**
* 异步方式获取指定IP的地理位置信息。
*
* @param ip 目标IP地址
* @param callback 当获取到地理位置信息后将通过这个回调返回
*/
public void getPlayerLocationAsync(String ip, LocationInfoCallback callback) {
Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> {
String locationInfo = getLocationInfo(ip);
// 确保回调在主线程执行
Bukkit.getScheduler().runTask(plugin, () -> callback.onLocationInfoReceived(locationInfo));
});
}

/**
* 从外部API获取IP地址对应的地理位置信息。
*
* @param ip 目标IP地址
* @return 返回地理位置信息,如果失败则返回"未知"。
*/
private String getLocationInfo(String ip) {
String apiUrl = "https://www.ip.cn/api/index?ip=" + ip + "&type=1";
try {
URL url = new URL(apiUrl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
StringBuilder response = new StringBuilder();
String inputLine;
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
JsonObject jsonResponse = JsonParser.parseString(response.toString()).getAsJsonObject();
if (jsonResponse.get("code").getAsInt() == 0) {
return jsonResponse.get("address").getAsString();
}
} catch (Exception e) {
Bukkit.getLogger().warning("[PlayerIPadmin] Failed to fetch location for IP: " + ip + " - " + e.getMessage());
}
return "未知";
}

/**
* 地理位置信息获取完成后的回调接口。
*/
public interface LocationInfoCallback {
void onLocationInfoReceived(String locationInfo);
}
}

0 comments on commit 9774309

Please sign in to comment.