9
0
mirror of https://github.com/WiIIiam278/HuskSync.git synced 2025-12-31 20:56:42 +00:00

Correct Persistent Data serialization

This commit is contained in:
William
2022-07-21 14:23:27 +01:00
parent 31552f85e4
commit 8847483ff8
7 changed files with 204 additions and 103 deletions

View File

@@ -0,0 +1,35 @@
package net.william278.husksync.data;
import org.jetbrains.annotations.NotNull;
import java.util.Optional;
/**
* Represents the type of a {@link PersistentDataTag}
*/
public enum BukkitPersistentDataTagType {
BYTE,
SHORT,
INTEGER,
LONG,
FLOAT,
DOUBLE,
STRING,
BYTE_ARRAY,
INTEGER_ARRAY,
LONG_ARRAY,
TAG_CONTAINER_ARRAY,
TAG_CONTAINER;
public static Optional<BukkitPersistentDataTagType> getDataType(@NotNull String typeName) {
for (BukkitPersistentDataTagType type : values()) {
if (type.name().equalsIgnoreCase(typeName)) {
return Optional.of(type);
}
}
return Optional.empty();
}
}

View File

@@ -4,6 +4,8 @@ import com.google.gson.annotations.SerializedName;
import org.jetbrains.annotations.NotNull;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
/**
* Store's a user's persistent data container, holding a map of plugin-set persistent values
@@ -14,9 +16,9 @@ public class PersistentDataContainerData {
* Map of namespaced key strings to a byte array representing the persistent data
*/
@SerializedName("persistent_data_map")
public Map<String, PersistentDataTag> persistentDataMap;
protected Map<String, PersistentDataTag<?>> persistentDataMap;
public PersistentDataContainerData(@NotNull final Map<String, PersistentDataTag> persistentDataMap) {
public PersistentDataContainerData(@NotNull final Map<String, PersistentDataTag<?>> persistentDataMap) {
this.persistentDataMap = persistentDataMap;
}
@@ -24,4 +26,23 @@ public class PersistentDataContainerData {
protected PersistentDataContainerData() {
}
public <T> Optional<T> getTagValue(@NotNull final String tagName, @NotNull Class<T> tagClass) {
if (persistentDataMap.containsKey(tagName)) {
return Optional.of(tagClass.cast(persistentDataMap.get(tagName).value));
}
return Optional.empty();
}
public Optional<BukkitPersistentDataTagType> getTagType(@NotNull final String tagType) {
if (persistentDataMap.containsKey(tagType)) {
return BukkitPersistentDataTagType.getDataType(persistentDataMap.get(tagType).type);
}
return Optional.empty();
}
public Set<String> getTags() {
return persistentDataMap.keySet();
}
}

View File

@@ -2,29 +2,33 @@ package net.william278.husksync.data;
import org.jetbrains.annotations.NotNull;
import java.util.Objects;
import java.util.Optional;
/**
* Represents a persistent data tag set by a plugin.
*/
public class PersistentDataTag {
public class PersistentDataTag<T> {
/**
* The enumerated primitive data type name value of the tag
*/
public String type;
protected String type;
/**
* The value of the tag
*/
public Object value;
public T value;
public PersistentDataTag(@NotNull String type, @NotNull Object value) {
this.type = type;
public PersistentDataTag(@NotNull BukkitPersistentDataTagType type, @NotNull T value) {
this.type = type.name();
this.value = value;
}
private PersistentDataTag() {
}
public Optional<BukkitPersistentDataTagType> getType() {
return BukkitPersistentDataTagType.getDataType(type);
}
}