IPAddressData support
This commit is contained in:
70
src/main/kotlin/net/axay/kspigot/ipaddress/IPAddressData.kt
Normal file
70
src/main/kotlin/net/axay/kspigot/ipaddress/IPAddressData.kt
Normal file
@@ -0,0 +1,70 @@
|
||||
@file:Suppress("unused")
|
||||
|
||||
package net.axay.kspigot.ipaddress
|
||||
|
||||
import com.google.gson.JsonObject
|
||||
import net.axay.kspigot.main.ValueHolder
|
||||
import org.bukkit.entity.Player
|
||||
import java.net.URL
|
||||
|
||||
private const val IP_API = "http://ip-api.com/json/"
|
||||
private const val IP_API_FIELDS = "12120063"
|
||||
|
||||
val Player.ipAddressData get() = ipAddressData()
|
||||
|
||||
fun Player.ipAddressData(language: IPAddressDataLanguage = IPAddressDataLanguage.ENGLISH): IPAddressData? {
|
||||
|
||||
val hostString = address?.hostString ?: return null
|
||||
val jsonObject = ValueHolder.gson.fromJson(
|
||||
URL("$IP_API${hostString}?fields=${IP_API_FIELDS}?lang=${language.code}").readText(),
|
||||
JsonObject::class.java
|
||||
)
|
||||
|
||||
if (jsonObject["status"].toString() == "fail") return null
|
||||
|
||||
return IPAddressData(jsonObject)
|
||||
|
||||
}
|
||||
|
||||
enum class IPAddressDataLanguage(val code: String) {
|
||||
ENGLISH("en"),
|
||||
GERMAN("de"),
|
||||
SPANISH("es"),
|
||||
PORTUGUESE("pt-BR"),
|
||||
FRENCH("fr"),
|
||||
JAPANESE("ja"),
|
||||
CHINESE("zh-CN"),
|
||||
RUSSIAN("ru")
|
||||
}
|
||||
|
||||
class IPAddressData(private val json: JsonObject) {
|
||||
|
||||
val ip get() = json.getString("query")
|
||||
|
||||
// region
|
||||
val continent get() = json.getString("continent")
|
||||
val continentCode get() = json.getString("continentCode")
|
||||
val country get() = json.getString("country")
|
||||
val countryCode get() = json.getString("countryCode")
|
||||
val region get() = json.getString("regionName")
|
||||
val regionCode get() = json.getString("region")
|
||||
val city get() = json.getString("city")
|
||||
val district get() = json.getString("district")
|
||||
val postalCode get() = json.getString("zip")
|
||||
val timezone get() = json.getString("timezone")
|
||||
|
||||
// position
|
||||
val latitude get() = json.getString("lat")
|
||||
val longitude get() = json.getString("lon")
|
||||
|
||||
// information
|
||||
val internetServiceProvider get() = json.getString("isp")
|
||||
val organisation get() = json.getString("org")
|
||||
|
||||
}
|
||||
|
||||
private fun JsonObject.getString(key: String) = try {
|
||||
this[key].toString()
|
||||
} catch (exc: Exception) {
|
||||
null
|
||||
}
|
15
src/main/kotlin/net/axay/kspigot/main/ValueHolder.kt
Normal file
15
src/main/kotlin/net/axay/kspigot/main/ValueHolder.kt
Normal file
@@ -0,0 +1,15 @@
|
||||
package net.axay.kspigot.main
|
||||
|
||||
import com.google.gson.Gson
|
||||
import com.google.gson.GsonBuilder
|
||||
|
||||
object ValueHolder {
|
||||
|
||||
private val gsonBuilder by lazy {
|
||||
GsonBuilder()
|
||||
}
|
||||
|
||||
val gson: Gson by lazy { gsonBuilder.create() }
|
||||
val gsonPretty: Gson by lazy { gsonBuilder.setPrettyPrinting().create() }
|
||||
|
||||
}
|
Reference in New Issue
Block a user