5151import java .util .stream .Collectors ;
5252import org .checkerframework .checker .nullness .qual .Nullable ;
5353
54- public final class MappingDataLoader {
54+ public class MappingDataLoader {
5555
56- private static final Map <String , CompoundTag > MAPPINGS_CACHE = new HashMap <>();
57- private static final TagReader <CompoundTag > MAPPINGS_READER = NBTIO .reader (CompoundTag .class ).named ();
56+ public static final TagReader <CompoundTag > MAPPINGS_READER = NBTIO .reader (CompoundTag .class ).named ();
5857 private static final byte DIRECT_ID = 0 ;
5958 private static final byte SHIFTS_ID = 1 ;
6059 private static final byte CHANGES_ID = 2 ;
6160 private static final byte IDENTITY_ID = 3 ;
62- private static boolean cacheValid = true ;
6361
64- public static void clearCache () {
65- MAPPINGS_CACHE .clear ();
62+ public static final MappingDataLoader INSTANCE = new MappingDataLoader (MappingDataLoader .class , "assets/viaversion/data/" );
63+
64+ private final Map <String , CompoundTag > mappingsCache = new HashMap <>();
65+ private final Class <?> dataLoaderClass ;
66+ private final String dataPath ;
67+ private boolean cacheValid = true ;
68+
69+ public MappingDataLoader (final Class <?> dataLoaderClass , final String dataPath ) {
70+ this .dataLoaderClass = dataLoaderClass ;
71+ this .dataPath = dataPath ;
72+ }
73+
74+ public void clearCache () {
75+ mappingsCache .clear ();
6676 cacheValid = false ;
6777 }
6878
@@ -71,8 +81,8 @@ public static void clearCache() {
7181 *
7282 * @return loaded json object, or null if not found or invalid
7383 */
74- public static @ Nullable JsonObject loadFromDataDir (final String name ) {
75- final File file = new File ( Via . getPlatform (). getDataFolder (), name );
84+ public @ Nullable JsonObject loadFromDataDir (final String name ) {
85+ final File file = getFile ( name );
7686 if (!file .exists ()) {
7787 return loadData (name );
7888 }
@@ -94,7 +104,7 @@ public static void clearCache() {
94104 *
95105 * @return loaded json object from bundled resources if present
96106 */
97- public static @ Nullable JsonObject loadData (final String name ) {
107+ public @ Nullable JsonObject loadData (final String name ) {
98108 final InputStream stream = getResource (name );
99109 if (stream == null ) {
100110 return null ;
@@ -107,29 +117,29 @@ public static void clearCache() {
107117 }
108118 }
109119
110- public static @ Nullable CompoundTag loadNBT (final String name , final boolean cache ) {
120+ public @ Nullable CompoundTag loadNBT (final String name , final boolean cache ) {
111121 if (!cacheValid ) {
112122 return loadNBTFromFile (name );
113123 }
114124
115- CompoundTag data = MAPPINGS_CACHE .get (name );
125+ CompoundTag data = mappingsCache .get (name );
116126 if (data != null ) {
117127 return data ;
118128 }
119129
120130 data = loadNBTFromFile (name );
121131
122132 if (cache && data != null ) {
123- MAPPINGS_CACHE .put (name , data );
133+ mappingsCache .put (name , data );
124134 }
125135 return data ;
126136 }
127137
128- public static @ Nullable CompoundTag loadNBT (final String name ) {
138+ public @ Nullable CompoundTag loadNBT (final String name ) {
129139 return loadNBT (name , false );
130140 }
131141
132- public static @ Nullable CompoundTag loadNBTFromFile (final String name ) {
142+ public @ Nullable CompoundTag loadNBTFromFile (final String name ) {
133143 final InputStream resource = getResource (name );
134144 if (resource == null ) {
135145 return null ;
@@ -142,7 +152,7 @@ public static void clearCache() {
142152 }
143153 }
144154
145- public static @ Nullable Mappings loadMappings (final CompoundTag mappingsTag , final String key ) {
155+ public @ Nullable Mappings loadMappings (final CompoundTag mappingsTag , final String key ) {
146156 return loadMappings (mappingsTag , key , size -> {
147157 final int [] array = new int [size ];
148158 Arrays .fill (array , -1 );
@@ -151,12 +161,12 @@ public static void clearCache() {
151161 }
152162
153163 @ Beta
154- public static <M extends Mappings , V > @ Nullable Mappings loadMappings (
155- final CompoundTag mappingsTag ,
156- final String key ,
157- final MappingHolderSupplier <V > holderSupplier ,
158- final AddConsumer <V > addConsumer ,
159- final MappingsSupplier <M , V > mappingsSupplier
164+ public <M extends Mappings , V > @ Nullable Mappings loadMappings (
165+ final CompoundTag mappingsTag ,
166+ final String key ,
167+ final MappingHolderSupplier <V > holderSupplier ,
168+ final AddConsumer <V > addConsumer ,
169+ final MappingsSupplier <M , V > mappingsSupplier
160170 ) {
161171 final CompoundTag tag = mappingsTag .getCompoundTag (key );
162172 if (tag == null ) {
@@ -227,7 +237,7 @@ public static void clearCache() {
227237 return mappingsSupplier .create (mappings , mappedSizeTag .asInt ());
228238 }
229239
230- public static FullMappings loadFullMappings (final CompoundTag mappingsTag , final CompoundTag unmappedIdentifiers , final CompoundTag mappedIdentifiers , final String key ) {
240+ public FullMappings loadFullMappings (final CompoundTag mappingsTag , final CompoundTag unmappedIdentifiers , final CompoundTag mappedIdentifiers , final String key ) {
231241 final ListTag <StringTag > unmappedElements = unmappedIdentifiers .getListTag (key , StringTag .class );
232242 final ListTag <StringTag > mappedElements = mappedIdentifiers .getListTag (key , StringTag .class );
233243 if (unmappedElements == null || mappedElements == null ) {
@@ -240,9 +250,9 @@ public static FullMappings loadFullMappings(final CompoundTag mappingsTag, final
240250 }
241251
242252 return new FullMappingsBase (
243- unmappedElements .stream ().map (StringTag ::getValue ).collect (Collectors .toList ()),
244- mappedElements .stream ().map (StringTag ::getValue ).collect (Collectors .toList ()),
245- mappings
253+ unmappedElements .stream ().map (StringTag ::getValue ).collect (Collectors .toList ()),
254+ mappedElements .stream ().map (StringTag ::getValue ).collect (Collectors .toList ()),
255+ mappings
246256 );
247257 }
248258
@@ -252,7 +262,7 @@ public static FullMappings loadFullMappings(final CompoundTag mappingsTag, final
252262 * @param object json object
253263 * @return map with indexes hashed by their id value
254264 */
255- public static Object2IntMap <String > indexedObjectToMap (final JsonObject object ) {
265+ public Object2IntMap <String > indexedObjectToMap (final JsonObject object ) {
256266 final Object2IntMap <String > map = new Object2IntOpenHashMap <>(object .size (), .99F );
257267 map .defaultReturnValue (-1 );
258268 for (final Map .Entry <String , JsonElement > entry : object .entrySet ()) {
@@ -267,7 +277,7 @@ public static Object2IntMap<String> indexedObjectToMap(final JsonObject object)
267277 * @param array json array
268278 * @return map with indexes hashed by their id value
269279 */
270- public static Object2IntMap <String > arrayToMap (final JsonArray array ) {
280+ public Object2IntMap <String > arrayToMap (final JsonArray array ) {
271281 final Object2IntMap <String > map = new Object2IntOpenHashMap <>(array .size (), .99F );
272282 map .defaultReturnValue (-1 );
273283 for (int i = 0 ; i < array .size (); i ++) {
@@ -276,8 +286,12 @@ public static Object2IntMap<String> arrayToMap(final JsonArray array) {
276286 return map ;
277287 }
278288
279- public static @ Nullable InputStream getResource (final String name ) {
280- return MappingDataLoader .class .getClassLoader ().getResourceAsStream ("assets/viaversion/data/" + name );
289+ public @ Nullable InputStream getResource (final String name ) {
290+ return dataLoaderClass .getClassLoader ().getResourceAsStream (dataPath + name );
291+ }
292+
293+ public File getFile (final String name ) {
294+ return new File (Via .getPlatform ().getDataFolder (), name );
281295 }
282296
283297 @ FunctionalInterface
0 commit comments