/
MetadataStore.java
163 lines (146 loc) · 3.87 KB
/
MetadataStore.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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
package net.citizensnpcs.api.npc;
import net.citizensnpcs.api.npc.NPC.Metadata;
import net.citizensnpcs.api.util.DataKey;
/**
* Represents a storage system for metadata
*/
public interface MetadataStore {
/**
* Copies the metadata store.
*/
MetadataStore clone();
/**
* Fetches metadata from the given key.
*
* @param key
* The key to get metadata from
* @return The metadata at the given key, or null if not found
*/
default <T> T get(NPC.Metadata key) {
return get(key.getKey());
}
/**
* Fetches metadata from the given key.
*
* @param key
* The key to get metadata from
* @param def
* The default value to return
* @return The metadata at the given key, or def if not found
*/
default <T> T get(NPC.Metadata key, T def) {
return get(key.getKey(), def);
}
/**
* Fetches metadata from the given key.
*
* @param key
* The key to get metadata from
* @return The metadata at the given key, or null if not found
*/
<T> T get(String key);
/**
* Fetches metadata from the given key. Sets the default value provided via {@link #set(String, Object)} if the
* metadata is not already stored.
*
* @param key
* The key to get metadata from
* @param def
* The default value to return
* @return The metadata at the given key, or def if not found
*/
<T> T get(String key, T def);
/**
* Returns whether the metadata exists.
*
* @param key
* The metadata key
* @return Whether the metadata exists
*/
default boolean has(NPC.Metadata key) {
return has(key.getKey());
}
/**
* Returns whether the metadata exists.
*
* @param key
* The metadata key
* @return Whether the metadata exists
*/
boolean has(String key);
/**
* Loads persistent metadata from the given {@link DataKey}.
*
* @param key
* The key to load from
*/
void loadFrom(DataKey key);
/**
* Removes any metadata at the given metadata key.
*
* @param key
* The metadata key
*/
default void remove(Metadata key) {
remove(key.getKey());
}
/**
* Removes any metadata at the given metadata key.
*
* @param key
* The metadata key
*/
void remove(String key);
/**
* Saves persistent metadata to the given {@link DataKey}.
*
* @param key
* The key to save to.
*/
void saveTo(DataKey key);
/**
* Stores data at the given key. Data will not persist.
*
* @param key
* The metadata key
* @param data
* The data to store
*/
default void set(NPC.Metadata key, Object data) {
set(key.getKey(), data);
}
/**
* Stores data at the given key. Data will not persist.
*
* @param key
* The metadata key
* @param data
* The data to store
*/
void set(String key, Object data);
/**
* Stores data at the given key. Data will persist and must be a primitive type or {@link String}.
*
* @param key
* The metadata key
* @param data
* The data to store
*/
default void setPersistent(NPC.Metadata key, Object data) {
setPersistent(key.getKey(), data);
}
/**
* Stores data at the given key. Data will persist and must be a primitive type or {@link String}.
*
* @param key
* The metadata key
* @param data
* The data to store
*/
void setPersistent(String key, Object data);
/**
*
* @return The number of elements in the store
*/
int size();
}