Skip to content

Latest commit

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

BetterGeoIP

通过第三方 API 查询玩家 IP 归属地,并在玩家加入服务器时发送欢迎消息的 Spigot 1.8.8 插件。

包名:org.lengmc.bettergeoip
仓库:https://github.com/LengMC/BetterGeoIP

✨ 功能

  • 🔍 查询玩家 / IP 的归属地(国家 / 省 / 市 / 区 / 运营商 / ASN / 经纬度)
  • 👋 加入欢迎:可隐藏原版加入消息,广播自定义欢迎消息
  • 🔄 多数据源:内置 4 个 API(IP.CN / 百度 / Ping00 / IP-API.com),可热切换
  • 💾 缓存:IP 维度缓存,可配置过期时间(默认 60 分钟),重启后保留
  • 🔁 重试:API 查询失败自动重试(默认 3 次)
  • 🌐 异步:所有 HTTP 请求都在异步线程执行,不卡主线程
  • 🎨 占位符:欢迎消息支持十余种变量({player}{ip}{location} 等)

📦 安装

  1. BetterGeoIP-1.0.jar 放到服务器的 plugins/ 目录
  2. 启动一次服务器,会自动生成 plugins/BetterGeoIP/config.yml
  3. 根据需要修改 config.yml
  4. 重启服务器或使用 /geoip reload 重载

兼容 Spigot 1.8.8(理论上 1.8.x 都可以跑)。

⚙️ 配置 (config.yml)

api:
selected: "ip_api"# 当前使用的 API(可从 available_apis 中选)retry_count: 3# 查询失败重试次数timeout_seconds: 10# HTTP 超时available_apis:
ip_cn: { name: "IP.CN", url: "...", enabled: true }baidu: { name: "百度IP查询", url: "...", enabled: true }ping00: { name: "Ping00", url: "...", enabled: true }ip_api: { name: "IP-API.com", url: "...", enabled: true }welcome:
enabled: truehide_original_join_message: true# 默认只显示玩家名 + 归属地,不暴露 IP 和运营商(隐私考虑)message: "&a欢迎 &e{player} &a来自 &b{location}"cache:
enabled: trueexpire_minutes: 60

支持的占位符

占位符含义示例
{player}玩家名Steve
{ip}IP 地址1.2.3.4
{country}国家中国
{region}省/地区北京
{city}城市北京
{district}区/县海淀
{isp}运营商电信
{asn}ASNAS4134
{lat}纬度39.9042
{lon}经度116.4074
{location}国家·省·市·区 拼接中国 · 北京 · 北京
{source}数据来源IP-API.com

📜 命令

主命令 /geoip(简写 /bgi

命令权限说明
/geoip megeoip.use查询自己的 IP 归属地
/geoip <player>geoip.admin查询其他玩家
/geoip ip <ip|player>geoip.admin查询任意 IP 或玩家
/geoip reloadgeoip.admin重载配置
/geoip api listgeoip.use列出可用 API
/geoip api infogeoip.use查看当前 API 详情
/geoip api switch <name>geoip.admin切换 API
/geoip cache cleargeoip.admin清空 IP 缓存
/geoip cache statusgeoip.use查看缓存状态
/geoip statusgeoip.use插件状态总览

权限节点

  • geoip.use — 基础命令(默认所有玩家)
  • geoip.admin — 管理员命令(默认 OP)

🔌 API 数据源对比

Key名称速度国内精度国外精度经纬度备注
ip_apiIP-API.com⭐⭐⭐⭐⭐⭐⭐⭐免费版限 45 req/min
ip_cnIP.CN⭐⭐⭐⭐⭐⭐⭐国内比较准
baidu百度 IP 查询⭐⭐⭐⭐无 Key 也能用
ping00Ping00⭐⭐⭐⭐⭐⭐⭐部分地区需付费

⚠️ 国内 API(IP.CN、百度、Ping00)在境外服务器访问可能不稳定,建议国外服务器用 ip_api

🛠️ 从源码构建

git clone https://github.com/LengMC/BetterGeoIP.git
cd BetterGeoIP
mvn clean package

产物:target/BetterGeoIP-1.0.jar

依赖:JDK 8+、Maven 3.6+

📂 项目结构

src/main/java/org/lengmc/bettergeoip/
├─ BetterGeoIP.java # 插件主类
├─ ConfigManager.java # 配置加载 / API 选择
├─ CacheManager.java # IP 缓存(持久化)
├─ GeoInfo.java # 数据模型 + 占位符替换 + JSON 提取
├─ GeoIPManager.java # HTTP 调用 + 4 个 API 解析
├─ GeoIPCommand.java # /geoip 命令(含 Tab 补全)
└─ PlayerJoinListener.java # 加入事件 → 异步查询 → 欢迎广播

🐛 常见问题

Q: 启动后控制台报 "API 测试失败"?
A: 服务器无法访问外部网络,或当前 API 被防火墙拦截。换一个 API 试试,或检查 api.timeout_seconds

Q: 欢迎消息里的变量没有被替换?
A: 检查 config.yml 里是否用错了占位符(例如 {player} 写成了 {Player}),占位符区分大小写。

Q: 切换 API 后还需要重启服务器吗?
A: 不需要,/geoip api switch <name> 热切换,立刻生效。

Q: hide_original_join_message 不生效?
A: 确认 welcome.enabled 也是 true。原版加入消息在优先级最高的 handler 里被设为 null

📄 许可

MIT License

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages