3
0
Fork 0
This repository has been archived on 2024-11-14. You can view files and clone it, but cannot push or open issues or pull requests.
ThemeParkPlus/src/main/lombok/nl/sbdeveloper/themeparkplus/util/LocationGsonAdapter.java
2020-08-11 09:01:53 +02:00

65 lines
2.3 KiB
Java

package nl.sbdeveloper.themeparkplus.util;
import com.google.gson.Gson;
import com.google.gson.TypeAdapter;
import com.google.gson.reflect.TypeToken;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonToken;
import com.google.gson.stream.JsonWriter;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.World;
import java.io.IOException;
import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.Map;
public class LocationGsonAdapter extends TypeAdapter<Location> {
private static Gson g = new Gson();
private static Type seriType = new TypeToken<Map<String, Object>>(){}.getType();
private static String UUID = "uuid";
private static String X = "x";
private static String Y = "y";
private static String Z = "z";
private static String YAW = "yaw";
private static String PITCH = "pitch";
@Override
public void write(JsonWriter jsonWriter, Location location) throws IOException {
if(location == null) {
jsonWriter.nullValue();
return;
}
jsonWriter.value(getRaw(location));
}
@Override
public Location read(JsonReader jsonReader) throws IOException {
if(jsonReader.peek() == JsonToken.NULL) {
jsonReader.nextNull();
return null;
}
return fromRaw(jsonReader.nextString());
}
private String getRaw (Location location) {
Map<String, Object> serial = new HashMap<>();
serial.put(UUID, location.getWorld().getUID().toString());
serial.put(X, Double.toString(location.getX()));
serial.put(Y, Double.toString(location.getY()));
serial.put(Z, Double.toString(location.getZ()));
serial.put(YAW, Float.toString(location.getYaw()));
serial.put(PITCH, Float.toString(location.getPitch()));
return g.toJson(serial);
}
private Location fromRaw (String raw) {
Map<String, Object> keys = g.fromJson(raw, seriType);
World w = Bukkit.getWorld(java.util.UUID.fromString((String) keys.get(UUID)));
return new Location(w, Double.parseDouble((String) keys.get(X)), Double.parseDouble((String) keys.get(Y)), Double.parseDouble((String) keys.get(Z)),
Float.parseFloat((String) keys.get(YAW)), Float.parseFloat((String) keys.get(PITCH)));
}
}