1
|
|
|
package de.kleiner3.lasertag.resource; |
2
|
|
|
|
3
|
|
|
import de.kleiner3.lasertag.LasertagMod; |
4
|
|
|
import de.kleiner3.lasertag.common.util.StringUtil; |
5
|
|
|
import net.fabricmc.fabric.api.resource.SimpleSynchronousResourceReloadListener; |
6
|
|
|
import net.minecraft.resource.Resource; |
7
|
|
|
import net.minecraft.resource.ResourceManager; |
8
|
|
|
import net.minecraft.util.Identifier; |
9
|
|
|
|
10
|
|
|
import java.util.HashMap; |
11
|
|
|
import java.util.List; |
12
|
|
|
import java.util.Map; |
13
|
|
|
|
14
|
|
|
/** |
15
|
|
|
* Manages all .nbt file resources |
16
|
|
|
* |
17
|
|
|
* @author Étienne Muser |
18
|
|
|
*/ |
19
|
|
|
public class StructureResourceManager implements SimpleSynchronousResourceReloadListener { |
20
|
|
|
//region Private fields |
21
|
|
|
|
22
|
|
|
private final Map<Identifier, Resource> structureResources = new HashMap<>(); |
23
|
|
|
|
24
|
|
|
public static final String LITEMATIC_FILE_ENDING = ".litematic"; |
25
|
|
|
public static final String NBT_FILE_ENDING = ".nbt"; |
26
|
|
|
public static final String[] FILE_ENDINGS = new String[] { NBT_FILE_ENDING, LITEMATIC_FILE_ENDING }; |
27
|
|
|
|
28
|
|
|
//endregion |
29
|
|
|
|
30
|
|
|
public Resource get(Identifier id) { |
31
|
|
|
return structureResources.get(id); |
32
|
|
|
} |
33
|
|
|
|
34
|
|
|
public List<Map.Entry<Identifier, Resource>> getFolder(Identifier folderId) { |
35
|
|
|
return structureResources.entrySet().stream() |
36
|
|
|
.filter(entry -> entry.getKey().getPath().startsWith(folderId.getPath())) |
37
|
|
|
.toList(); |
38
|
|
|
} |
39
|
|
|
|
40
|
|
|
@Override |
41
|
|
|
public Identifier getFabricId() { |
42
|
|
|
return new Identifier(LasertagMod.ID, "lasertag_structure_resource_manager"); |
43
|
|
|
} |
44
|
|
|
|
45
|
|
|
@Override |
46
|
|
|
public void reload(ResourceManager manager) { |
47
|
|
|
var resources = manager.findResources("structures", path -> StringUtil.stringEndsWithList(path.getPath(), FILE_ENDINGS)); |
48
|
|
|
for(var entry : resources.entrySet()) { |
49
|
|
|
if (!entry.getKey().getNamespace().equals(LasertagMod.ID)) { |
50
|
|
|
continue; |
51
|
|
|
} |
52
|
|
|
|
53
|
|
|
structureResources.put(entry.getKey(), entry.getValue()); |
54
|
|
|
} |
55
|
|
|
} |
56
|
|
|
} |
57
|
|
|
|