mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-12 17:07:55 -04:00
replace org.json with gjson (performance improvements)
This commit is contained in:
parent
9031d04f0c
commit
4ec65a65a5
7
pom.xml
7
pom.xml
@ -41,9 +41,9 @@
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.json</groupId>
|
||||
<artifactId>json</artifactId>
|
||||
<version>20180813</version>
|
||||
<groupId>com.google.code.gson</groupId>
|
||||
<artifactId>gson</artifactId>
|
||||
<version>2.8.6</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.yaml</groupId>
|
||||
@ -56,5 +56,4 @@
|
||||
<version>29.0-jre</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
</project>
|
@ -13,6 +13,7 @@
|
||||
|
||||
package de.bixilon.minosoft;
|
||||
|
||||
import com.google.gson.JsonObject;
|
||||
import de.bixilon.minosoft.config.Configuration;
|
||||
import de.bixilon.minosoft.config.GameConfiguration;
|
||||
import de.bixilon.minosoft.game.datatypes.Mappings;
|
||||
@ -30,12 +31,13 @@ import de.bixilon.minosoft.protocol.protocol.ProtocolVersion;
|
||||
import de.bixilon.minosoft.util.FolderUtil;
|
||||
import de.bixilon.minosoft.util.OSUtil;
|
||||
import de.bixilon.minosoft.util.Util;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.*;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
public class Minosoft {
|
||||
static Configuration config;
|
||||
@ -65,8 +67,7 @@ public class Minosoft {
|
||||
Log.info("Loading all mappings...");
|
||||
long mappingsStart = System.currentTimeMillis();
|
||||
loadMappings();
|
||||
Log.info(String.format("Mappings loaded in a total of %sms", (System.currentTimeMillis() - mappingsStart)));
|
||||
System.exit(0);
|
||||
Log.info(String.format("Mappings loaded within %sms", (System.currentTimeMillis() - mappingsStart)));
|
||||
|
||||
checkClientToken();
|
||||
|
||||
@ -143,17 +144,15 @@ public class Minosoft {
|
||||
}
|
||||
long startTime = System.currentTimeMillis();
|
||||
for (Map.Entry<String, Mappings> mappingSet : mappingsHashMap.entrySet()) {
|
||||
JSONObject data = Util.readJsonFromFile(Config.homeDir + String.format("assets/mapping/%s/%s.json", version.getVersionString(), mappingSet.getKey()));
|
||||
for (Iterator<String> mods = data.keys(); mods.hasNext(); ) {
|
||||
// key = mod name
|
||||
String mod = mods.next();
|
||||
JSONObject modJSON = data.getJSONObject(mod);
|
||||
JsonObject data = Util.readJsonFromFile(Config.homeDir + String.format("assets/mapping/%s/%s.json", version.getVersionString(), mappingSet.getKey()));
|
||||
for (String mod : data.keySet()) {
|
||||
JsonObject modJSON = data.getAsJsonObject(mod);
|
||||
switch (mappingSet.getValue()) {
|
||||
case REGISTRIES:
|
||||
Items.load(mod, modJSON.getJSONObject("item").getJSONObject("entries"), version);
|
||||
Entities.load(mod, modJSON.getJSONObject("entity_type").getJSONObject("entries"), version);
|
||||
Enchantments.load(mod, modJSON.getJSONObject("enchantment").getJSONObject("entries"), version);
|
||||
Statistics.load(mod, modJSON.getJSONObject("custom_stat").getJSONObject("entries"), version);
|
||||
Items.load(mod, modJSON.getAsJsonObject("item").getAsJsonObject("entries"), version);
|
||||
Entities.load(mod, modJSON.getAsJsonObject("entity_type").getAsJsonObject("entries"), version);
|
||||
Enchantments.load(mod, modJSON.getAsJsonObject("enchantment").getAsJsonObject("entries"), version);
|
||||
Statistics.load(mod, modJSON.getAsJsonObject("custom_stat").getAsJsonObject("entries"), version);
|
||||
break;
|
||||
case BLOCKS:
|
||||
Blocks.load(mod, modJSON, version);
|
||||
@ -163,7 +162,7 @@ public class Minosoft {
|
||||
}
|
||||
Log.verbose(String.format("Loaded mappings for version %s in %dms (%s)", version, (System.currentTimeMillis() - startTime), version.getReleaseName()));
|
||||
}
|
||||
} catch (IOException | JSONException e) {
|
||||
} catch (IOException e) {
|
||||
Log.fatal("Error occurred while loading version mapping: " + e.getLocalizedMessage());
|
||||
System.exit(1);
|
||||
}
|
||||
|
@ -13,46 +13,45 @@
|
||||
|
||||
package de.bixilon.minosoft;
|
||||
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonParseException;
|
||||
import de.bixilon.minosoft.game.datatypes.TextComponent;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
public class ServerListPing {
|
||||
final JSONObject raw;
|
||||
final JsonObject raw;
|
||||
|
||||
public ServerListPing(JSONObject json) {
|
||||
public ServerListPing(JsonObject json) {
|
||||
this.raw = json;
|
||||
}
|
||||
|
||||
public int getProtocolNumber() {
|
||||
return raw.getJSONObject("version").getInt("protocol");
|
||||
return raw.getAsJsonObject("version").get("protocol").getAsInt();
|
||||
}
|
||||
|
||||
public String getServerBrand() {
|
||||
return raw.getJSONObject("version").getString("name");
|
||||
return raw.getAsJsonObject("version").get("name").getAsString();
|
||||
}
|
||||
|
||||
public int getPlayerOnline() {
|
||||
return raw.getJSONObject("players").getInt("online");
|
||||
return raw.getAsJsonObject("players").get("online").getAsInt();
|
||||
}
|
||||
|
||||
public int getMaxPlayers() {
|
||||
return raw.getJSONObject("players").getInt("max");
|
||||
return raw.getAsJsonObject("players").get("max").getAsInt();
|
||||
}
|
||||
|
||||
public String getBase64EncodedFavicon() {
|
||||
return raw.getString("favicon");
|
||||
return raw.get("favicon").getAsString();
|
||||
}
|
||||
|
||||
public TextComponent getMotd() {
|
||||
try {
|
||||
return new TextComponent(raw.getJSONObject("description"));
|
||||
} catch (JSONException ignored) {
|
||||
return new TextComponent(raw.getAsJsonObject("description"));
|
||||
} catch (JsonParseException ignored) {
|
||||
}
|
||||
return new TextComponent(raw.getString("description"));
|
||||
return new TextComponent(raw.get("description").getAsString());
|
||||
}
|
||||
|
||||
public JSONObject getRaw() {
|
||||
public JsonObject getRaw() {
|
||||
return this.raw;
|
||||
}
|
||||
}
|
||||
|
@ -13,27 +13,28 @@
|
||||
|
||||
package de.bixilon.minosoft.game.datatypes;
|
||||
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonParseException;
|
||||
import com.google.gson.JsonParser;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class TextComponent {
|
||||
JSONObject json;
|
||||
JsonObject json;
|
||||
|
||||
public TextComponent(String raw) {
|
||||
if (raw == null) {
|
||||
this.json = new JSONObject();
|
||||
this.json = new JsonObject();
|
||||
return;
|
||||
}
|
||||
try {
|
||||
this.json = new JSONObject(raw);
|
||||
} catch (JSONException e) {
|
||||
this.json = JsonParser.parseString(raw).getAsJsonObject();
|
||||
} catch (IllegalStateException e) {
|
||||
// not a text component, is a legacy string
|
||||
this.json = new JSONObject();
|
||||
JSONArray extra = new JSONArray();
|
||||
this.json = new JsonObject();
|
||||
JsonArray extra = new JsonArray();
|
||||
|
||||
String[] paragraphSplit = raw.split("§");
|
||||
|
||||
@ -75,7 +76,7 @@ public class TextComponent {
|
||||
break;
|
||||
case "r":
|
||||
//save and clear
|
||||
extra.put(getExtraByAttributes(message.toString(), color, attributesList));
|
||||
extra.add(getExtraByAttributes(message.toString(), color, attributesList));
|
||||
attributesList.clear();
|
||||
color = ChatAttributes.WHITE;
|
||||
message = new StringBuilder();
|
||||
@ -84,7 +85,7 @@ public class TextComponent {
|
||||
} else {
|
||||
// save current
|
||||
if (!message.toString().isEmpty()) {
|
||||
extra.put(getExtraByAttributes(message.toString(), color, attributesList));
|
||||
extra.add(getExtraByAttributes(message.toString(), color, attributesList));
|
||||
message = new StringBuilder();
|
||||
}
|
||||
color = ChatAttributes.byColor(colorCheck);
|
||||
@ -98,55 +99,55 @@ public class TextComponent {
|
||||
}
|
||||
}
|
||||
// save
|
||||
extra.put(getExtraByAttributes(message.toString(), color, attributesList));
|
||||
extra.add(getExtraByAttributes(message.toString(), color, attributesList));
|
||||
|
||||
this.json.put("extra", extra);
|
||||
this.json.add("extra", extra);
|
||||
}
|
||||
}
|
||||
|
||||
public TextComponent(JSONObject json) {
|
||||
public TextComponent(JsonObject json) {
|
||||
this.json = json;
|
||||
}
|
||||
|
||||
static JSONObject getExtraByAttributes(String message, ChatAttributes color, List<ChatAttributes> formatting) {
|
||||
JSONObject ret = new JSONObject();
|
||||
ret.put("text", message);
|
||||
static JsonObject getExtraByAttributes(String message, ChatAttributes color, List<ChatAttributes> formatting) {
|
||||
JsonObject ret = new JsonObject();
|
||||
ret.addProperty("text", message);
|
||||
if (color != null) {
|
||||
ret.put("color", color.getName());
|
||||
ret.addProperty("color", color.getName());
|
||||
}
|
||||
for (ChatAttributes attribute : formatting) {
|
||||
if (attribute == ChatAttributes.BOLD && !ret.has("bold")) {
|
||||
ret.put("bold", true);
|
||||
ret.addProperty("bold", true);
|
||||
} else if (attribute == ChatAttributes.ITALIC && !ret.has("italic")) {
|
||||
ret.put("italic", true);
|
||||
ret.addProperty("italic", true);
|
||||
} else if (attribute == ChatAttributes.UNDERLINED && !ret.has("underlined")) {
|
||||
ret.put("underlined", true);
|
||||
ret.addProperty("underlined", true);
|
||||
} else if (attribute == ChatAttributes.STRIKETHROUGH && !ret.has("strikethrough")) {
|
||||
ret.put("strikethrough", true);
|
||||
ret.addProperty("strikethrough", true);
|
||||
} else if (attribute == ChatAttributes.OBFUSCATED && !ret.has("obfuscated")) {
|
||||
ret.put("obfuscated", true);
|
||||
ret.addProperty("obfuscated", true);
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
public String getRawMessage() {
|
||||
if (json.has("text") && json.getString("text").length() != 0) {
|
||||
return json.getString("text");
|
||||
if (json.has("text") && json.get("text").getAsString().length() != 0) {
|
||||
return json.get("text").getAsString();
|
||||
}
|
||||
StringBuilder buffer = new StringBuilder();
|
||||
if (json.has("extra")) {
|
||||
JSONArray arr = json.getJSONArray("extra");
|
||||
for (int i = 0; i < arr.length(); i++) {
|
||||
JSONObject object;
|
||||
JsonArray arr = json.getAsJsonArray("extra");
|
||||
for (int i = 0; i < arr.size(); i++) {
|
||||
JsonObject object;
|
||||
try {
|
||||
object = arr.getJSONObject(i);
|
||||
} catch (JSONException e) {
|
||||
object = arr.get(i).getAsJsonObject();
|
||||
} catch (JsonParseException e) {
|
||||
// reset text
|
||||
buffer.append(arr.getString(i));
|
||||
buffer.append(arr.get(i).getAsString());
|
||||
continue;
|
||||
}
|
||||
buffer.append(object.getString("text"));
|
||||
buffer.append(object.get("text").getAsString());
|
||||
}
|
||||
buffer.append(ChatAttributes.RESET);
|
||||
return buffer.toString();
|
||||
@ -154,46 +155,46 @@ public class TextComponent {
|
||||
return "";
|
||||
}
|
||||
|
||||
public JSONObject getRaw() {
|
||||
public JsonObject getRaw() {
|
||||
return this.json;
|
||||
}
|
||||
|
||||
public String getColoredMessage() {
|
||||
if (json.has("text") && json.getString("text").length() != 0) {
|
||||
return json.getString("text");
|
||||
if (json.has("text") && json.get("text").getAsString().length() != 0) {
|
||||
return json.get("text").getAsString();
|
||||
}
|
||||
StringBuilder buffer = new StringBuilder();
|
||||
if (json.has("extra")) {
|
||||
JSONArray arr = json.getJSONArray("extra");
|
||||
for (int i = 0; i < arr.length(); i++) {
|
||||
JSONObject object;
|
||||
JsonArray arr = json.getAsJsonArray("extra");
|
||||
for (int i = 0; i < arr.size(); i++) {
|
||||
JsonObject object;
|
||||
try {
|
||||
object = arr.getJSONObject(i);
|
||||
} catch (JSONException e) {
|
||||
object = arr.get(i).getAsJsonObject();
|
||||
} catch (JsonParseException e) {
|
||||
// reset text
|
||||
buffer.append(ChatAttributes.RESET);
|
||||
buffer.append(arr.getString(i));
|
||||
buffer.append(arr.get(i).getAsString());
|
||||
continue;
|
||||
}
|
||||
if (object.has("bold") && object.getBoolean("bold")) {
|
||||
if (object.has("bold") && object.get("bold").getAsBoolean()) {
|
||||
buffer.append(ChatAttributes.BOLD);
|
||||
}
|
||||
if (object.has("color")) {
|
||||
buffer.append(ChatAttributes.byName(object.getString("color")));
|
||||
buffer.append(ChatAttributes.byName(object.get("color").getAsString()));
|
||||
}
|
||||
if (object.has("italic") && object.getBoolean("italic")) {
|
||||
if (object.has("italic") && object.get("italic").getAsBoolean()) {
|
||||
buffer.append(ChatAttributes.ITALIC);
|
||||
}
|
||||
if (object.has("underlined") && object.getBoolean("underlined")) {
|
||||
if (object.has("underlined") && object.get("underlined").getAsBoolean()) {
|
||||
buffer.append(ChatAttributes.UNDERLINED);
|
||||
}
|
||||
if (object.has("strikethrough") && object.getBoolean("strikethrough")) {
|
||||
if (object.has("strikethrough") && object.get("strikethrough").getAsBoolean()) {
|
||||
buffer.append(ChatAttributes.STRIKETHROUGH);
|
||||
}
|
||||
if (object.has("obfuscated") && object.getBoolean("obfuscated")) {
|
||||
if (object.has("obfuscated") && object.get("obfuscated").getAsBoolean()) {
|
||||
buffer.append(ChatAttributes.OBFUSCATED);
|
||||
}
|
||||
buffer.append(object.getString("text"));
|
||||
buffer.append(object.get("text").getAsString());
|
||||
}
|
||||
buffer.append(ChatAttributes.RESET);
|
||||
return buffer.toString();
|
||||
|
@ -13,13 +13,12 @@ package de.bixilon.minosoft.game.datatypes.objectLoader.blocks;
|
||||
*/
|
||||
|
||||
import com.google.common.collect.HashBiMap;
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonObject;
|
||||
import de.bixilon.minosoft.protocol.protocol.ProtocolVersion;
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
|
||||
public class Blocks {
|
||||
public static Block nullBlock;
|
||||
@ -454,36 +453,34 @@ public class Blocks {
|
||||
return blockMap.get(version).get(protocolId);
|
||||
}
|
||||
|
||||
public static void load(String mod, JSONObject json, ProtocolVersion version) {
|
||||
public static void load(String mod, JsonObject json, ProtocolVersion version) {
|
||||
HashBiMap<Integer, Block> versionMapping = HashBiMap.create();
|
||||
for (Iterator<String> identifiers = json.keys(); identifiers.hasNext(); ) {
|
||||
String identifierName = identifiers.next();
|
||||
JSONObject identifierJSON = json.getJSONObject(identifierName);
|
||||
JSONArray statesArray = identifierJSON.getJSONArray("states");
|
||||
for (int i = 0; i < statesArray.length(); i++) {
|
||||
JSONObject statesJSON = statesArray.getJSONObject(i);
|
||||
for (String identifierName : json.keySet()) {
|
||||
JsonObject identifierJSON = json.getAsJsonObject(identifierName);
|
||||
JsonArray statesArray = identifierJSON.getAsJsonArray("states");
|
||||
for (int i = 0; i < statesArray.size(); i++) {
|
||||
JsonObject statesJSON = statesArray.get(i).getAsJsonObject();
|
||||
if (statesJSON.has("properties")) {
|
||||
// properties are optional
|
||||
JSONObject propertiesJSON = statesJSON.getJSONObject("properties");
|
||||
JsonObject propertiesJSON = statesJSON.getAsJsonObject("properties");
|
||||
BlockRotation rotation = BlockRotation.NONE;
|
||||
if (propertiesJSON.has("facing")) {
|
||||
rotation = rotationMapping.get(propertiesJSON.getString("facing"));
|
||||
rotation = rotationMapping.get(propertiesJSON.get("facing").getAsString());
|
||||
propertiesJSON.remove("facing");
|
||||
} else if (propertiesJSON.has("rotation")) {
|
||||
rotation = rotationMapping.get(propertiesJSON.getString("rotation"));
|
||||
rotation = rotationMapping.get(propertiesJSON.get("rotation").getAsString());
|
||||
propertiesJSON.remove("rotation");
|
||||
}
|
||||
BlockProperties[] properties = new BlockProperties[propertiesJSON.length()];
|
||||
BlockProperties[] properties = new BlockProperties[propertiesJSON.size()];
|
||||
int ii = 0;
|
||||
for (Iterator<String> it = propertiesJSON.keys(); it.hasNext(); ) {
|
||||
String propertyName = it.next();
|
||||
for (String propertyName : propertiesJSON.keySet()) {
|
||||
if (propertiesMapping.get(propertyName) == null) {
|
||||
throw new RuntimeException(String.format("Unknown block property: %s (identifier=%s)", propertyName, identifierName));
|
||||
}
|
||||
if (propertiesMapping.get(propertyName).get(propertiesJSON.getString(propertyName)) == null) {
|
||||
throw new RuntimeException(String.format("Unknown block property: %s -> %s (identifier=%s)", propertyName, propertiesJSON.getString(propertyName), identifierName));
|
||||
if (propertiesMapping.get(propertyName).get(propertiesJSON.get(propertyName).getAsString()) == null) {
|
||||
throw new RuntimeException(String.format("Unknown block property: %s -> %s (identifier=%s)", propertyName, propertiesJSON.get(propertyName).getAsString(), identifierName));
|
||||
}
|
||||
properties[ii] = propertiesMapping.get(propertyName).get(propertiesJSON.getString(propertyName));
|
||||
properties[ii] = propertiesMapping.get(propertyName).get(propertiesJSON.get(propertyName).getAsString());
|
||||
ii++;
|
||||
}
|
||||
|
||||
@ -528,13 +525,13 @@ public class Blocks {
|
||||
blockMap.put(version, versionMapping);
|
||||
}
|
||||
|
||||
private static int getBlockId(JSONObject json, ProtocolVersion version) {
|
||||
int blockId = json.getInt("id");
|
||||
private static int getBlockId(JsonObject json, ProtocolVersion version) {
|
||||
int blockId = json.get("id").getAsInt();
|
||||
if (version.getVersionNumber() <= ProtocolVersion.VERSION_1_12_2.getVersionNumber()) {
|
||||
// old format (with metadata)
|
||||
blockId <<= 4;
|
||||
if (json.has("meta")) {
|
||||
blockId |= json.getInt("meta");
|
||||
blockId |= json.get("meta").getAsByte();
|
||||
}
|
||||
}
|
||||
return blockId;
|
||||
|
@ -14,12 +14,11 @@
|
||||
package de.bixilon.minosoft.game.datatypes.objectLoader.enchantments;
|
||||
|
||||
import com.google.common.collect.HashBiMap;
|
||||
import com.google.gson.JsonObject;
|
||||
import de.bixilon.minosoft.protocol.protocol.ProtocolVersion;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
|
||||
public class Enchantments {
|
||||
|
||||
@ -33,15 +32,14 @@ public class Enchantments {
|
||||
return enchantmentMap.get(version).get(protocolId);
|
||||
}
|
||||
|
||||
public static void load(String mod, JSONObject json, ProtocolVersion version) {
|
||||
public static void load(String mod, JsonObject json, ProtocolVersion version) {
|
||||
HashBiMap<Integer, Enchantment> versionMapping = HashBiMap.create();
|
||||
for (Iterator<String> identifiers = json.keys(); identifiers.hasNext(); ) {
|
||||
String identifierName = identifiers.next();
|
||||
for (String identifierName : json.keySet()) {
|
||||
Enchantment enchantment = new Enchantment(mod, identifierName);
|
||||
if (enchantmentList.contains(enchantment)) {
|
||||
enchantment = enchantmentList.get(enchantmentList.indexOf(enchantment));
|
||||
}
|
||||
versionMapping.put(json.getJSONObject(identifierName).getInt("id"), enchantment);
|
||||
versionMapping.put(json.getAsJsonObject(identifierName).get("id").getAsInt(), enchantment);
|
||||
}
|
||||
enchantmentMap.put(version, versionMapping);
|
||||
}
|
||||
|
@ -14,13 +14,12 @@
|
||||
package de.bixilon.minosoft.game.datatypes.objectLoader.entities;
|
||||
|
||||
import com.google.common.collect.HashBiMap;
|
||||
import com.google.gson.JsonObject;
|
||||
import de.bixilon.minosoft.game.datatypes.objectLoader.entities.mob.*;
|
||||
import de.bixilon.minosoft.game.datatypes.objectLoader.entities.objects.*;
|
||||
import de.bixilon.minosoft.protocol.protocol.ProtocolVersion;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
|
||||
public class Entities {
|
||||
|
||||
@ -157,11 +156,10 @@ public class Entities {
|
||||
return entityClassMap.get(identifier);
|
||||
}
|
||||
|
||||
public static void load(String mod, JSONObject json, ProtocolVersion version) {
|
||||
public static void load(String mod, JsonObject json, ProtocolVersion version) {
|
||||
HashBiMap<Integer, String> versionMapping = HashBiMap.create();
|
||||
for (Iterator<String> identifiers = json.keys(); identifiers.hasNext(); ) {
|
||||
String identifierName = identifiers.next();
|
||||
versionMapping.put(json.getJSONObject(identifierName).getInt("id"), mod + ":" + identifierName);
|
||||
for (String identifierName : json.keySet()) {
|
||||
versionMapping.put(json.getAsJsonObject(identifierName).get("id").getAsInt(), mod + ":" + identifierName);
|
||||
}
|
||||
entityMapping.put(version, versionMapping);
|
||||
}
|
||||
|
@ -14,12 +14,11 @@
|
||||
package de.bixilon.minosoft.game.datatypes.objectLoader.entities.items;
|
||||
|
||||
import com.google.common.collect.HashBiMap;
|
||||
import com.google.gson.JsonObject;
|
||||
import de.bixilon.minosoft.protocol.protocol.ProtocolVersion;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
|
||||
public class Items {
|
||||
|
||||
@ -43,23 +42,22 @@ public class Items {
|
||||
return itemMap.get(version).get(protocolId);
|
||||
}
|
||||
|
||||
public static void load(String mod, JSONObject json, ProtocolVersion version) {
|
||||
public static void load(String mod, JsonObject json, ProtocolVersion version) {
|
||||
HashBiMap<Integer, Item> versionMapping = HashBiMap.create();
|
||||
for (Iterator<String> identifiers = json.keys(); identifiers.hasNext(); ) {
|
||||
String identifierName = identifiers.next();
|
||||
for (String identifierName : json.keySet()) {
|
||||
Item item = getItem(mod, identifierName);
|
||||
if (item == null) {
|
||||
// does not exist. create
|
||||
item = new Item(mod, identifierName);
|
||||
itemList.add(item);
|
||||
}
|
||||
JSONObject identifierJSON = json.getJSONObject(identifierName);
|
||||
int itemId = identifierJSON.getInt("id");
|
||||
JsonObject identifierJSON = json.getAsJsonObject(identifierName);
|
||||
int itemId = identifierJSON.get("id").getAsInt();
|
||||
if (version.getVersionNumber() <= ProtocolVersion.VERSION_1_12_2.getVersionNumber()) {
|
||||
// old format (with metadata)
|
||||
itemId <<= 4;
|
||||
if (identifierJSON.has("meta")) {
|
||||
itemId |= identifierJSON.getInt("meta");
|
||||
itemId |= identifierJSON.get("meta").getAsInt();
|
||||
}
|
||||
}
|
||||
versionMapping.put(itemId, item);
|
||||
|
@ -14,12 +14,11 @@
|
||||
package de.bixilon.minosoft.game.datatypes.objectLoader.statistics;
|
||||
|
||||
import com.google.common.collect.HashBiMap;
|
||||
import com.google.gson.JsonObject;
|
||||
import de.bixilon.minosoft.protocol.protocol.ProtocolVersion;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
|
||||
public class Statistics {
|
||||
|
||||
@ -41,17 +40,16 @@ public class Statistics {
|
||||
return statisticsIdentifierMap.get(version).get(identifier);
|
||||
}
|
||||
|
||||
public static void load(String mod, JSONObject json, ProtocolVersion version) {
|
||||
public static void load(String mod, JsonObject json, ProtocolVersion version) {
|
||||
HashBiMap<Integer, Statistic> versionIdMapping = HashBiMap.create();
|
||||
HashBiMap<String, Statistic> versionIdentifierMapping = HashBiMap.create();
|
||||
for (Iterator<String> identifiers = json.keys(); identifiers.hasNext(); ) {
|
||||
String identifierName = identifiers.next();
|
||||
for (String identifierName : json.keySet()) {
|
||||
Statistic statistic = new Statistic(mod, identifierName);
|
||||
if (statisticList.contains(statistic)) {
|
||||
statistic = statisticList.get(statisticList.indexOf(statistic));
|
||||
}
|
||||
if (json.getJSONObject(identifierName).has("id")) {
|
||||
versionIdMapping.put(json.getJSONObject(identifierName).getInt("id"), statistic);
|
||||
if (json.getAsJsonObject(identifierName).has("id")) {
|
||||
versionIdMapping.put(json.getAsJsonObject(identifierName).get("id").getAsInt(), statistic);
|
||||
} else {
|
||||
versionIdentifierMapping.put(identifierName, statistic);
|
||||
}
|
||||
|
@ -13,10 +13,10 @@
|
||||
|
||||
package de.bixilon.minosoft.mojang.api;
|
||||
|
||||
import com.google.gson.JsonObject;
|
||||
import de.bixilon.minosoft.Config;
|
||||
import de.bixilon.minosoft.Minosoft;
|
||||
import de.bixilon.minosoft.util.Util;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
@ -30,15 +30,15 @@ public class MojangAccount {
|
||||
|
||||
final String mojangUserName;
|
||||
|
||||
public MojangAccount(JSONObject json) {
|
||||
this.accessToken = json.getString("accessToken");
|
||||
JSONObject profile = json.getJSONObject("selectedProfile");
|
||||
this.uuid = Util.formatUUID(profile.getString("id"));
|
||||
this.playerName = profile.getString("name");
|
||||
public MojangAccount(JsonObject json) {
|
||||
this.accessToken = json.get("accessToken").getAsString();
|
||||
JsonObject profile = json.get("selectedProfile").getAsJsonObject();
|
||||
this.uuid = Util.formatUUID(profile.get("id").getAsString());
|
||||
this.playerName = profile.get("name").getAsString();
|
||||
|
||||
JSONObject mojang = json.getJSONObject("user");
|
||||
this.userId = mojang.getString("id");
|
||||
this.mojangUserName = mojang.getString("username");
|
||||
JsonObject mojang = json.get("user").getAsJsonObject();
|
||||
this.userId = mojang.get("id").getAsString();
|
||||
this.mojangUserName = mojang.get("username").getAsString();
|
||||
}
|
||||
|
||||
public MojangAccount(String accessToken, String userId, UUID uuid, String playerName, String mojangUserName) {
|
||||
|
@ -13,33 +13,38 @@
|
||||
|
||||
package de.bixilon.minosoft.mojang.api;
|
||||
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonParser;
|
||||
import de.bixilon.minosoft.Config;
|
||||
import de.bixilon.minosoft.Minosoft;
|
||||
import de.bixilon.minosoft.config.GameConfiguration;
|
||||
import de.bixilon.minosoft.logging.Log;
|
||||
import de.bixilon.minosoft.util.HTTP;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.net.http.HttpResponse;
|
||||
|
||||
public class MojangAuthentication {
|
||||
|
||||
public static MojangAccount login(String clientToken, String username, String password) {
|
||||
JSONObject payload = new JSONObject();
|
||||
payload.put("agent", new JSONObject().put("name", "Minecraft").put("version", 1));
|
||||
payload.put("username", username);
|
||||
payload.put("password", password);
|
||||
payload.put("clientToken", clientToken);
|
||||
payload.put("requestUser", true);
|
||||
JsonObject agent = new JsonObject();
|
||||
agent.addProperty("name", "Minecraft");
|
||||
agent.addProperty("version", 1);
|
||||
|
||||
JsonObject payload = new JsonObject();
|
||||
payload.add("agent", agent);
|
||||
payload.addProperty("username", username);
|
||||
payload.addProperty("password", password);
|
||||
payload.addProperty("clientToken", clientToken);
|
||||
payload.addProperty("requestUser", true);
|
||||
|
||||
HttpResponse<String> response = HTTP.postJson(MojangURLs.LOGIN.getUrl(), payload);
|
||||
if (response == null) {
|
||||
Log.mojang(String.format("Failed to login with username %s", username));
|
||||
return null;
|
||||
}
|
||||
JSONObject jsonResponse = new JSONObject(response.body());
|
||||
JsonObject jsonResponse = JsonParser.parseString(response.body()).getAsJsonObject();
|
||||
if (response.statusCode() != 200) {
|
||||
Log.mojang(String.format("Failed to login with error code %d: %s", response.statusCode(), jsonResponse.getString("errorMessage")));
|
||||
Log.mojang(String.format("Failed to login with error code %d: %s", response.statusCode(), jsonResponse.get("errorMessage").getAsString()));
|
||||
return null;
|
||||
}
|
||||
// now it is okay
|
||||
@ -55,10 +60,10 @@ public class MojangAuthentication {
|
||||
return;
|
||||
}
|
||||
|
||||
JSONObject payload = new JSONObject();
|
||||
payload.put("accessToken", account.getAccessToken());
|
||||
payload.put("selectedProfile", account.getUUID().toString().replace("-", ""));
|
||||
payload.put("serverId", serverId);
|
||||
JsonObject payload = new JsonObject();
|
||||
payload.addProperty("accessToken", account.getAccessToken());
|
||||
payload.addProperty("selectedProfile", account.getUUID().toString().replace("-", ""));
|
||||
payload.addProperty("serverId", serverId);
|
||||
|
||||
HttpResponse<String> response = HTTP.postJson(MojangURLs.JOIN.toString(), payload);
|
||||
|
||||
@ -67,8 +72,8 @@ public class MojangAuthentication {
|
||||
return;
|
||||
}
|
||||
if (response.statusCode() != 204) {
|
||||
JSONObject jsonResponse = new JSONObject(response.body());
|
||||
Log.mojang(String.format("Failed to join server with error code %d: %s", response.statusCode(), jsonResponse.has("errorMessage") ? jsonResponse.getString("errorMessage") : "null"));
|
||||
JsonObject jsonResponse = JsonParser.parseString(response.body()).getAsJsonObject();
|
||||
Log.mojang(String.format("Failed to join server with error code %d: %s", response.statusCode(), jsonResponse.has("errorMessage") ? jsonResponse.get("errorMessage").getAsString() : "null"));
|
||||
return;
|
||||
}
|
||||
// joined
|
||||
@ -79,9 +84,9 @@ public class MojangAuthentication {
|
||||
if (Config.skipAuthentication) {
|
||||
return clientToken;
|
||||
}
|
||||
JSONObject payload = new JSONObject();
|
||||
payload.put("accessToken", accessToken);
|
||||
payload.put("clientToken", clientToken);
|
||||
JsonObject payload = new JsonObject();
|
||||
payload.addProperty("accessToken", accessToken);
|
||||
payload.addProperty("clientToken", clientToken);
|
||||
|
||||
HttpResponse<String> response;
|
||||
try {
|
||||
@ -94,13 +99,13 @@ public class MojangAuthentication {
|
||||
Log.mojang("Failed to refresh session");
|
||||
return null;
|
||||
}
|
||||
JSONObject jsonResponse = new JSONObject(response.body());
|
||||
JsonObject jsonResponse = JsonParser.parseString(response.body()).getAsJsonObject();
|
||||
if (response.statusCode() != 200) {
|
||||
Log.mojang(String.format("Failed to refresh session with error code %d: %s", response.statusCode(), jsonResponse.getString("errorMessage")));
|
||||
Log.mojang(String.format("Failed to refresh session with error code %d: %s", response.statusCode(), jsonResponse.get("errorMessage").getAsString()));
|
||||
return null;
|
||||
}
|
||||
// now it is okay
|
||||
return jsonResponse.getString("accessToken");
|
||||
return jsonResponse.get("accessToken").getAsString();
|
||||
}
|
||||
|
||||
public static String refresh(String accessToken) {
|
||||
|
@ -13,15 +13,15 @@
|
||||
|
||||
package de.bixilon.minosoft.mojang.api;
|
||||
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonParseException;
|
||||
import com.google.gson.JsonParser;
|
||||
import de.bixilon.minosoft.logging.Log;
|
||||
import de.bixilon.minosoft.util.HTTP;
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.net.http.HttpResponse;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
|
||||
public class MojangStatus {
|
||||
public static HashMap<Services, ServiceStatus> getStatus() {
|
||||
@ -37,14 +37,12 @@ public class MojangStatus {
|
||||
// now it is hopefully okay
|
||||
HashMap<Services, ServiceStatus> ret = new HashMap<>();
|
||||
try {
|
||||
JSONArray json = new JSONArray(response.body());
|
||||
for (int i = 0; i < json.length(); i++) {
|
||||
JSONObject innerJson = json.getJSONObject(i);
|
||||
Iterator<String> keys = innerJson.keys();
|
||||
while (keys.hasNext()) {
|
||||
String key = keys.next();
|
||||
JsonArray json = JsonParser.parseString(response.body()).getAsJsonArray();
|
||||
for (int i = 0; i < json.size(); i++) {
|
||||
JsonObject innerJson = json.get(i).getAsJsonObject();
|
||||
for (String key : innerJson.keySet()) {
|
||||
Services service = Services.byKey(key);
|
||||
ret.put(service, ServiceStatus.byKey(innerJson.getString(key)));
|
||||
ret.put(service, ServiceStatus.byKey(innerJson.get(key).getAsString()));
|
||||
}
|
||||
}
|
||||
if (ret.size() != Services.values().length) {
|
||||
@ -53,7 +51,7 @@ public class MojangStatus {
|
||||
}
|
||||
return ret;
|
||||
|
||||
} catch (NullPointerException | JSONException e) {
|
||||
} catch (NullPointerException | JsonParseException e) {
|
||||
e.printStackTrace();
|
||||
return getUnknownStatusMap();
|
||||
}
|
||||
|
@ -13,6 +13,8 @@
|
||||
|
||||
package de.bixilon.minosoft.protocol.protocol;
|
||||
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonParser;
|
||||
import de.bixilon.minosoft.game.datatypes.Direction;
|
||||
import de.bixilon.minosoft.game.datatypes.TextComponent;
|
||||
import de.bixilon.minosoft.game.datatypes.inventory.Slot;
|
||||
@ -26,7 +28,6 @@ import de.bixilon.minosoft.game.datatypes.world.BlockPosition;
|
||||
import de.bixilon.minosoft.nbt.tag.CompoundTag;
|
||||
import de.bixilon.minosoft.util.BitByte;
|
||||
import de.bixilon.minosoft.util.Util;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
@ -172,8 +173,8 @@ public class InByteBuffer {
|
||||
return readByte() / 32.0D;
|
||||
}
|
||||
|
||||
public JSONObject readJSON() {
|
||||
return new JSONObject(readString());
|
||||
public JsonObject readJSON() {
|
||||
return JsonParser.parseString(readString()).getAsJsonObject();
|
||||
}
|
||||
|
||||
public BlockPosition readPosition() {
|
||||
|
@ -13,11 +13,11 @@
|
||||
|
||||
package de.bixilon.minosoft.protocol.protocol;
|
||||
|
||||
import com.google.gson.JsonObject;
|
||||
import de.bixilon.minosoft.game.datatypes.TextComponent;
|
||||
import de.bixilon.minosoft.game.datatypes.inventory.Slot;
|
||||
import de.bixilon.minosoft.game.datatypes.world.BlockPosition;
|
||||
import de.bixilon.minosoft.nbt.tag.CompoundTag;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
@ -148,7 +148,7 @@ public class OutByteBuffer {
|
||||
return bytes;
|
||||
}
|
||||
|
||||
public void writeJSON(JSONObject j) {
|
||||
public void writeJSON(JsonObject j) {
|
||||
writeString(j.toString());
|
||||
}
|
||||
|
||||
|
@ -13,7 +13,7 @@
|
||||
|
||||
package de.bixilon.minosoft.util;
|
||||
|
||||
import org.json.JSONObject;
|
||||
import com.google.gson.JsonObject;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
@ -23,7 +23,7 @@ import java.net.http.HttpResponse;
|
||||
|
||||
public class HTTP {
|
||||
|
||||
public static HttpResponse<String> postJson(String url, JSONObject json) {
|
||||
public static HttpResponse<String> postJson(String url, JsonObject json) {
|
||||
HttpClient client = HttpClient.newHttpClient();
|
||||
HttpRequest request = HttpRequest.newBuilder()
|
||||
.uri(URI.create(url))
|
||||
|
@ -13,9 +13,10 @@
|
||||
|
||||
package de.bixilon.minosoft.util;
|
||||
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonParser;
|
||||
import de.bixilon.minosoft.protocol.protocol.InByteBuffer;
|
||||
import de.bixilon.minosoft.protocol.protocol.ProtocolVersion;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.io.*;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
@ -122,7 +123,7 @@ public class Util {
|
||||
return stringBuilder.toString();
|
||||
}
|
||||
|
||||
public static JSONObject readJsonFromFile(String fileName) throws IOException {
|
||||
return new JSONObject(readFile(fileName));
|
||||
public static JsonObject readJsonFromFile(String fileName) throws IOException {
|
||||
return JsonParser.parseString(readFile(fileName)).getAsJsonObject();
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user