/
DataPersistenceHelper.java
67 lines (57 loc) · 2.61 KB
/
DataPersistenceHelper.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package com.denizenscript.denizen.utilities;
import com.denizenscript.denizen.utilities.debugging.Debug;
import com.denizenscript.denizencore.objects.ObjectFetcher;
import com.denizenscript.denizencore.objects.ObjectTag;
import org.bukkit.NamespacedKey;
import org.bukkit.entity.Entity;
import org.bukkit.persistence.PersistentDataAdapterContext;
import org.bukkit.persistence.PersistentDataHolder;
import org.bukkit.persistence.PersistentDataType;
/**
* Helper class for PersistentDataContainers.
*/
public class DataPersistenceHelper {
public static class DenizenObjectType implements PersistentDataType<String, ObjectTag> {
@Override
public Class<String> getPrimitiveType() {
return String.class;
}
@Override
public Class<ObjectTag> getComplexType() {
return ObjectTag.class;
}
@Override
public String toPrimitive(ObjectTag complex, PersistentDataAdapterContext context) {
return complex.toString();
}
@Override
public ObjectTag fromPrimitive(String primitive, PersistentDataAdapterContext context) {
return ObjectFetcher.pickObjectFor(primitive);
}
}
public static final DenizenObjectType PERSISTER_TYPE = new DenizenObjectType();
public static void setDenizenKey(PersistentDataHolder holder, String keyName, ObjectTag keyValue) {
holder.getPersistentDataContainer().set(new NamespacedKey(DenizenAPI.getCurrentInstance(), keyName), PERSISTER_TYPE, keyValue);
}
public static boolean hasDenizenKey(PersistentDataHolder holder, String keyName) {
return holder.getPersistentDataContainer().has(new NamespacedKey(DenizenAPI.getCurrentInstance(), keyName), PERSISTER_TYPE);
}
public static ObjectTag getDenizenKey(PersistentDataHolder holder, String keyName) {
try {
return holder.getPersistentDataContainer().get(new NamespacedKey(DenizenAPI.getCurrentInstance(), keyName), PERSISTER_TYPE);
}
catch (NullPointerException ex) {
return null;
}
catch (IllegalArgumentException ex) {
if (holder instanceof Entity) {
Debug.echoError("Failed to read ObjectTag from entity key '" + keyName + "' for entity " + ((Entity) holder).getUniqueId() + "...");
}
else {
Debug.echoError("Failed to read ObjectTag from object key '" + keyName + "' for holder '" + holder.toString() + "'...");
}
Debug.echoError(ex);
return null;
}
}
}