mirror of
https://github.com/plexusorg/Plex-FAWE.git
synced 2024-12-23 01:37:37 +00:00
feat: save region selector to session store (#2621)
* feat: save region selector to session store - closes #2397 * Move new gson adapters to FAWE packages
This commit is contained in:
parent
b93f01c5b3
commit
b512182e1f
@ -1,4 +1,4 @@
|
|||||||
package com.sk89q.worldedit.util.gson;
|
package com.fastasyncworldedit.core.util.gson;
|
||||||
|
|
||||||
import com.google.gson.JsonDeserializationContext;
|
import com.google.gson.JsonDeserializationContext;
|
||||||
import com.google.gson.JsonDeserializer;
|
import com.google.gson.JsonDeserializer;
|
@ -0,0 +1,33 @@
|
|||||||
|
package com.fastasyncworldedit.core.util.gson;
|
||||||
|
|
||||||
|
import com.google.gson.JsonDeserializationContext;
|
||||||
|
import com.google.gson.JsonDeserializer;
|
||||||
|
import com.google.gson.JsonElement;
|
||||||
|
import com.google.gson.JsonParseException;
|
||||||
|
import com.google.gson.JsonPrimitive;
|
||||||
|
import com.google.gson.JsonSerializationContext;
|
||||||
|
import com.google.gson.JsonSerializer;
|
||||||
|
import com.sk89q.worldedit.regions.RegionSelector;
|
||||||
|
import com.sk89q.worldedit.regions.selector.RegionSelectorType;
|
||||||
|
|
||||||
|
import java.lang.reflect.Type;
|
||||||
|
|
||||||
|
public class RegionSelectorAdapter implements JsonDeserializer<RegionSelector>, JsonSerializer<RegionSelector> {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public RegionSelector deserialize(JsonElement json, Type type, JsonDeserializationContext context) throws JsonParseException {
|
||||||
|
RegionSelectorType regionType = RegionSelectorType.valueOf(json.getAsString());
|
||||||
|
return regionType.createSelector();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public JsonElement serialize(RegionSelector selector, Type type, JsonSerializationContext context) {
|
||||||
|
RegionSelectorType regionType = RegionSelectorType.getForSelector(selector);
|
||||||
|
// Cannot nicely deserialize Fuzzy region type
|
||||||
|
if (regionType == null || regionType == RegionSelectorType.FUZZY) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return new JsonPrimitive(regionType.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -125,7 +125,9 @@ public class LocalSession implements TextureHolder {
|
|||||||
private transient int cuiVersion = CUI_VERSION_UNINITIALIZED;
|
private transient int cuiVersion = CUI_VERSION_UNINITIALIZED;
|
||||||
|
|
||||||
// Session related
|
// Session related
|
||||||
private transient RegionSelector selector = new CuboidRegionSelector();
|
//FAWE start - allow saving to session store
|
||||||
|
private RegionSelector selector = new CuboidRegionSelector();
|
||||||
|
//FAWE end
|
||||||
private transient boolean placeAtPos1 = false;
|
private transient boolean placeAtPos1 = false;
|
||||||
//FAWE start
|
//FAWE start
|
||||||
private final transient List<Object> history = Collections.synchronizedList(new LinkedList<>() {
|
private final transient List<Object> history = Collections.synchronizedList(new LinkedList<>() {
|
||||||
@ -771,6 +773,7 @@ public class LocalSession implements TextureHolder {
|
|||||||
checkNotNull(selector);
|
checkNotNull(selector);
|
||||||
selector.setWorld(world);
|
selector.setWorld(world);
|
||||||
this.selector = selector;
|
this.selector = selector;
|
||||||
|
setDirty();
|
||||||
if (hasWorldOverride() && !world.equals(getWorldOverride())) {
|
if (hasWorldOverride() && !world.equals(getWorldOverride())) {
|
||||||
setWorldOverride(null);
|
setWorldOverride(null);
|
||||||
}
|
}
|
||||||
|
@ -755,13 +755,7 @@ public class SelectionCommands {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (setDefaultSelector) {
|
if (setDefaultSelector) {
|
||||||
RegionSelectorType found = null;
|
RegionSelectorType found = RegionSelectorType.getForSelector(newSelector);
|
||||||
for (RegionSelectorType type : RegionSelectorType.values()) {
|
|
||||||
if (type.getSelectorClass() == newSelector.getClass()) {
|
|
||||||
found = type;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (found != null) {
|
if (found != null) {
|
||||||
session.setDefaultRegionSelector(found);
|
session.setDefaultRegionSelector(found);
|
||||||
|
@ -19,8 +19,14 @@
|
|||||||
|
|
||||||
package com.sk89q.worldedit.regions.selector;
|
package com.sk89q.worldedit.regions.selector;
|
||||||
|
|
||||||
|
import com.fastasyncworldedit.core.regions.selector.FuzzyRegionSelector;
|
||||||
|
import com.fastasyncworldedit.core.regions.selector.PolyhedralRegionSelector;
|
||||||
import com.sk89q.worldedit.regions.RegionSelector;
|
import com.sk89q.worldedit.regions.RegionSelector;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An enum of default region selector types.
|
* An enum of default region selector types.
|
||||||
*/
|
*/
|
||||||
@ -32,7 +38,21 @@ public enum RegionSelectorType {
|
|||||||
SPHERE(SphereRegionSelector.class),
|
SPHERE(SphereRegionSelector.class),
|
||||||
ELLIPSOID(EllipsoidRegionSelector.class),
|
ELLIPSOID(EllipsoidRegionSelector.class),
|
||||||
POLYGON(Polygonal2DRegionSelector.class),
|
POLYGON(Polygonal2DRegionSelector.class),
|
||||||
CONVEX_POLYHEDRON(ConvexPolyhedralRegionSelector.class);
|
CONVEX_POLYHEDRON(ConvexPolyhedralRegionSelector.class),
|
||||||
|
//FAWE start
|
||||||
|
POLYHEDRAL(PolyhedralRegionSelector.class),
|
||||||
|
FUZZY(FuzzyRegionSelector.class);
|
||||||
|
//FAWE end
|
||||||
|
|
||||||
|
//FAWE start
|
||||||
|
private static final Map<Class<? extends RegionSelector>, RegionSelectorType> VALUE_MAP = new HashMap<>();
|
||||||
|
|
||||||
|
static {
|
||||||
|
for (RegionSelectorType type : values()) {
|
||||||
|
VALUE_MAP.put(type.getSelectorClass(), type);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//FAWE end
|
||||||
|
|
||||||
private final Class<? extends RegionSelector> selectorClass;
|
private final Class<? extends RegionSelector> selectorClass;
|
||||||
|
|
||||||
@ -40,6 +60,19 @@ public enum RegionSelectorType {
|
|||||||
this.selectorClass = selectorClass;
|
this.selectorClass = selectorClass;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//FAWE start
|
||||||
|
/**
|
||||||
|
* Get a {@link RegionSelectorType} for the given {@link RegionSelector}
|
||||||
|
*
|
||||||
|
* @param selector Region selector to get type enum for
|
||||||
|
* @since TODO
|
||||||
|
*/
|
||||||
|
@Nullable
|
||||||
|
public static RegionSelectorType getForSelector(RegionSelector selector) {
|
||||||
|
return VALUE_MAP.get(selector.getClass());
|
||||||
|
}
|
||||||
|
//FAWE end
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the selector class.
|
* Get the selector class.
|
||||||
*
|
*
|
||||||
|
@ -19,12 +19,14 @@
|
|||||||
|
|
||||||
package com.sk89q.worldedit.util.gson;
|
package com.sk89q.worldedit.util.gson;
|
||||||
|
|
||||||
|
import com.fastasyncworldedit.core.util.gson.ItemTypeAdapter;
|
||||||
|
import com.fastasyncworldedit.core.util.gson.RegionSelectorAdapter;
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
import com.google.gson.GsonBuilder;
|
import com.google.gson.GsonBuilder;
|
||||||
import com.sk89q.worldedit.math.BlockVector3;
|
import com.sk89q.worldedit.math.BlockVector3;
|
||||||
import com.sk89q.worldedit.math.Vector3;
|
import com.sk89q.worldedit.math.Vector3;
|
||||||
|
import com.sk89q.worldedit.regions.RegionSelector;
|
||||||
import com.sk89q.worldedit.world.item.ItemType;
|
import com.sk89q.worldedit.world.item.ItemType;
|
||||||
import com.sk89q.worldedit.world.item.ItemTypes;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Utility methods for Google's GSON library.
|
* Utility methods for Google's GSON library.
|
||||||
@ -43,7 +45,10 @@ public final class GsonUtil {
|
|||||||
GsonBuilder gsonBuilder = new GsonBuilder();
|
GsonBuilder gsonBuilder = new GsonBuilder();
|
||||||
gsonBuilder.registerTypeAdapter(Vector3.class, new VectorAdapter());
|
gsonBuilder.registerTypeAdapter(Vector3.class, new VectorAdapter());
|
||||||
gsonBuilder.registerTypeAdapter(BlockVector3.class, new BlockVectorAdapter());
|
gsonBuilder.registerTypeAdapter(BlockVector3.class, new BlockVectorAdapter());
|
||||||
|
//FAWE start
|
||||||
|
gsonBuilder.registerTypeAdapter(RegionSelector.class, new RegionSelectorAdapter());
|
||||||
gsonBuilder.registerTypeAdapter(ItemType.class, new ItemTypeAdapter());
|
gsonBuilder.registerTypeAdapter(ItemType.class, new ItemTypeAdapter());
|
||||||
|
//FAWE end
|
||||||
return gsonBuilder;
|
return gsonBuilder;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user