Add a MojangApiUtil based on the work of @evilmidget38. Thanks man.
This commit is contained in:
parent
33d1de2e13
commit
ebb5cbe74a
@ -2,13 +2,10 @@ package com.massivecraft.mcore;
|
|||||||
|
|
||||||
import java.lang.reflect.Modifier;
|
import java.lang.reflect.Modifier;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Map.Entry;
|
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.inventory.Inventory;
|
import org.bukkit.inventory.Inventory;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.PlayerInventory;
|
import org.bukkit.inventory.PlayerInventory;
|
||||||
@ -33,8 +30,6 @@ import com.massivecraft.mcore.store.Coll;
|
|||||||
import com.massivecraft.mcore.store.ExamineThread;
|
import com.massivecraft.mcore.store.ExamineThread;
|
||||||
import com.massivecraft.mcore.teleport.EngineScheduledTeleport;
|
import com.massivecraft.mcore.teleport.EngineScheduledTeleport;
|
||||||
import com.massivecraft.mcore.util.PlayerUtil;
|
import com.massivecraft.mcore.util.PlayerUtil;
|
||||||
import com.massivecraft.mcore.util.TimeDiffUtil;
|
|
||||||
import com.massivecraft.mcore.util.TimeUnit;
|
|
||||||
import com.massivecraft.mcore.xlib.bson.types.ObjectId;
|
import com.massivecraft.mcore.xlib.bson.types.ObjectId;
|
||||||
import com.massivecraft.mcore.xlib.gson.Gson;
|
import com.massivecraft.mcore.xlib.gson.Gson;
|
||||||
import com.massivecraft.mcore.xlib.gson.GsonBuilder;
|
import com.massivecraft.mcore.xlib.gson.GsonBuilder;
|
||||||
@ -177,19 +172,7 @@ public class MCore extends MPlugin
|
|||||||
VaultFeatures.get()
|
VaultFeatures.get()
|
||||||
);
|
);
|
||||||
|
|
||||||
/*
|
// test();
|
||||||
test("");
|
|
||||||
test("+1day");
|
|
||||||
test("1day");
|
|
||||||
test("1 day");
|
|
||||||
test("-1day");
|
|
||||||
test("1week4d");
|
|
||||||
test("+1week-4d");
|
|
||||||
test("day");
|
|
||||||
test("1month");
|
|
||||||
test("1months");
|
|
||||||
test("1months2ms");
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Delete Files (at once and additionally after all plugins loaded)
|
// Delete Files (at once and additionally after all plugins loaded)
|
||||||
TaskDeleteFiles.get().run();
|
TaskDeleteFiles.get().run();
|
||||||
@ -198,37 +181,24 @@ public class MCore extends MPlugin
|
|||||||
this.postEnable();
|
this.postEnable();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void test(String diffString)
|
public void test()
|
||||||
{
|
{
|
||||||
log("===========================");
|
log("===========================");
|
||||||
log("Testing Diff String \""+diffString+"\":");
|
log("===========================");
|
||||||
|
log("===========================");
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Map<TimeUnit, Long> unitcounts = TimeDiffUtil.unitcounts(diffString);
|
// whatever you fee like
|
||||||
for (Entry<TimeUnit, Long> entry : unitcounts.entrySet())
|
|
||||||
{
|
|
||||||
System.out.println(entry.getValue()+": "+entry.getKey());
|
|
||||||
}
|
|
||||||
|
|
||||||
System.out.println("---");
|
|
||||||
|
|
||||||
long millis = TimeDiffUtil.millis(unitcounts);
|
|
||||||
log("millis: "+millis);
|
|
||||||
|
|
||||||
String verboose = ChatColor.stripColor(TimeDiffUtil.formatedVerboose(unitcounts));
|
|
||||||
String minimal = ChatColor.stripColor(TimeDiffUtil.formatedMinimal(unitcounts));
|
|
||||||
log("verboose: "+verboose);
|
|
||||||
log("minimal: "+minimal);
|
|
||||||
|
|
||||||
long millisRec = TimeDiffUtil.millis(minimal);
|
|
||||||
log("millisRec: "+millisRec);
|
|
||||||
log("matches: "+(millis == millisRec));
|
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
log("===========================");
|
||||||
|
log("===========================");
|
||||||
|
log("===========================");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
124
src/com/massivecraft/mcore/util/MojangApiUtil.java
Normal file
124
src/com/massivecraft/mcore/util/MojangApiUtil.java
Normal file
@ -0,0 +1,124 @@
|
|||||||
|
package com.massivecraft.mcore.util;
|
||||||
|
|
||||||
|
import java.io.DataOutputStream;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.net.HttpURLConnection;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import org.json.simple.JSONArray;
|
||||||
|
import org.json.simple.JSONObject;
|
||||||
|
import org.json.simple.JSONValue;
|
||||||
|
import org.json.simple.parser.JSONParser;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Many thanks to evilmidget38!
|
||||||
|
* This utility class is based on his work.
|
||||||
|
* http://forums.bukkit.org/threads/player-name-uuid-fetcher.250926/
|
||||||
|
*/
|
||||||
|
public class MojangApiUtil
|
||||||
|
{
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// NAME --> ID
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// The player names you supply does not have to use correct capitalization.
|
||||||
|
// In the map returned however, the names will have correction capitalization.
|
||||||
|
|
||||||
|
public static Map<String, UUID> getPlayerIds(Collection<String> playerNames) throws Exception
|
||||||
|
{
|
||||||
|
Map<String, UUID> ret = new HashMap<String, UUID>();
|
||||||
|
JSONParser jsonParser = new JSONParser();
|
||||||
|
String body = createBody(playerNames);
|
||||||
|
for (int i = 1; i < 100; i++)
|
||||||
|
{
|
||||||
|
HttpURLConnection connection = createConnection(i);
|
||||||
|
writeBody(connection, body);
|
||||||
|
JSONObject jsonObject = (JSONObject) jsonParser.parse(new InputStreamReader(connection.getInputStream()));
|
||||||
|
JSONArray profiles = (JSONArray) jsonObject.get("profiles");
|
||||||
|
Number count = (Number) jsonObject.get("size");
|
||||||
|
|
||||||
|
if (count.intValue() == 0)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (Object profile : profiles)
|
||||||
|
{
|
||||||
|
JSONObject jsonProfile = (JSONObject) profile;
|
||||||
|
String id = (String) jsonProfile.get("id");
|
||||||
|
String name = (String) jsonProfile.get("name");
|
||||||
|
UUID uuid = UUID.fromString(id.substring(0, 8) + "-" + id.substring(8, 12) + "-" + id.substring(12, 16) + "-" + id.substring(16, 20) + "-" + id.substring(20, 32));
|
||||||
|
ret.put(name, uuid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void writeBody(HttpURLConnection connection, String body) throws Exception
|
||||||
|
{
|
||||||
|
DataOutputStream writer = new DataOutputStream(connection.getOutputStream());
|
||||||
|
writer.write(body.getBytes());
|
||||||
|
writer.flush();
|
||||||
|
writer.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static HttpURLConnection createConnection(int page) throws Exception
|
||||||
|
{
|
||||||
|
URL url = new URL("https://api.mojang.com/profiles/page/" + page);
|
||||||
|
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
|
||||||
|
connection.setRequestMethod("POST");
|
||||||
|
connection.setRequestProperty("Content-Type", "application/json");
|
||||||
|
connection.setUseCaches(false);
|
||||||
|
connection.setDoInput(true);
|
||||||
|
connection.setDoOutput(true);
|
||||||
|
return connection;
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
private static String createBody(Collection<String> playerNames)
|
||||||
|
{
|
||||||
|
List<JSONObject> lookups = new ArrayList<JSONObject>();
|
||||||
|
for (String playerName : playerNames)
|
||||||
|
{
|
||||||
|
JSONObject obj = new JSONObject();
|
||||||
|
obj.put("name", playerName);
|
||||||
|
obj.put("agent", "minecraft");
|
||||||
|
lookups.add(obj);
|
||||||
|
}
|
||||||
|
return JSONValue.toJSONString(lookups);
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// ID --> NAME
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public static Map<UUID, String> getPlayerNames(Collection<UUID> playerIds) throws Exception
|
||||||
|
{
|
||||||
|
Map<UUID, String> ret = new HashMap<UUID, String>();
|
||||||
|
JSONParser jsonParser = new JSONParser();
|
||||||
|
for (UUID playerId: playerIds)
|
||||||
|
{
|
||||||
|
HttpURLConnection connection = (HttpURLConnection) new URL("https://sessionserver.mojang.com/session/minecraft/profile/" + playerId.toString().replace("-", "")).openConnection();
|
||||||
|
JSONObject response = (JSONObject) jsonParser.parse(new InputStreamReader(connection.getInputStream()));
|
||||||
|
String name = (String) response.get("name");
|
||||||
|
if (name == null)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
String cause = (String) response.get("cause");
|
||||||
|
if (cause != null && cause.length() > 0)
|
||||||
|
{
|
||||||
|
String errorMessage = (String) response.get("errorMessage");
|
||||||
|
throw new IllegalStateException(errorMessage);
|
||||||
|
}
|
||||||
|
ret.put(playerId, name);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user