Skip to content

Commit aa4f8b4

Browse files
committed
Allow remapping resources via addons
1 parent fe91e65 commit aa4f8b4

File tree

4 files changed

+49
-8
lines changed

4 files changed

+49
-8
lines changed

core/src/main/java/de/bluecolored/bluemap/core/resources/pack/ResourcePool.java

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,18 @@ public class ResourcePool<T> {
3939

4040
private final Map<Key, T> pool = new HashMap<>();
4141
private final Map<Key, ResourcePath<T>> paths = new HashMap<>();
42+
private final ResourcePoolMapper mapper;
43+
private final Class<T> type;
44+
45+
public ResourcePool() {
46+
this.type = null;
47+
this.mapper = null;
48+
}
49+
50+
public ResourcePool(Class<T> type, ResourcePoolMapper mapper) {
51+
this.type = type;
52+
this.mapper = mapper;
53+
}
4254

4355
public void put(Key path, T value) {
4456
put(new ResourcePath<>(path), value);
@@ -70,6 +82,9 @@ public Collection<T> values() {
7082
}
7183

7284
public boolean contains(Key path) {
85+
if (mapper != null) {
86+
path = mapper.remapResource(type, path);
87+
}
7388
return paths.containsKey(path);
7489
}
7590

@@ -78,7 +93,7 @@ public boolean contains(Key path) {
7893
}
7994

8095
public @Nullable T get(Key path) {
81-
ResourcePath<T> rp = paths.get(path);
96+
ResourcePath<T> rp = getPath(path);
8297
return rp == null ? null : rp.getResource(this::get);
8398
}
8499

@@ -88,6 +103,9 @@ public synchronized void remove(Key path) {
88103
}
89104

90105
public @Nullable ResourcePath<T> getPath(Key path) {
106+
if (mapper != null) {
107+
path = mapper.remapResource(type, path);
108+
}
91109
return paths.get(path);
92110
}
93111

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package de.bluecolored.bluemap.core.resources.pack;
2+
3+
import de.bluecolored.bluemap.core.util.Key;
4+
5+
import java.lang.reflect.Type;
6+
7+
public interface ResourcePoolMapper {
8+
Key remapResource(Type type, Key src);
9+
}

core/src/main/java/de/bluecolored/bluemap/core/resources/pack/resourcepack/ResourcePack.java

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import de.bluecolored.bluemap.core.resources.pack.Pack;
3636
import de.bluecolored.bluemap.core.resources.pack.PackVersion;
3737
import de.bluecolored.bluemap.core.resources.pack.ResourcePool;
38+
import de.bluecolored.bluemap.core.resources.pack.ResourcePoolMapper;
3839
import de.bluecolored.bluemap.core.resources.pack.resourcepack.atlas.Atlas;
3940
import de.bluecolored.bluemap.core.resources.pack.resourcepack.blockstate.BlockState;
4041
import de.bluecolored.bluemap.core.resources.pack.resourcepack.entitystate.EntityState;
@@ -53,6 +54,7 @@
5354
import java.io.BufferedReader;
5455
import java.io.IOException;
5556
import java.io.InputStream;
57+
import java.lang.reflect.Type;
5658
import java.nio.file.Files;
5759
import java.nio.file.Path;
5860
import java.util.HashMap;
@@ -63,7 +65,7 @@
6365
import java.util.concurrent.TimeUnit;
6466
import java.util.function.Predicate;
6567

66-
public class ResourcePack extends Pack {
68+
public class ResourcePack extends Pack implements ResourcePoolMapper {
6769

6870
public interface Extension<T extends ResourcePackExtension> extends Keyed {
6971
Registry<Extension<?>> REGISTRY = new Registry<>();
@@ -94,12 +96,12 @@ public interface Extension<T extends ResourcePackExtension> extends Keyed {
9496
public ResourcePack(PackVersion packVersion) {
9597
super(packVersion);
9698

97-
this.atlases = new ResourcePool<>();
98-
this.blockStates = new ResourcePool<>();
99-
this.entityStates = new ResourcePool<>();
100-
this.models = new ResourcePool<>();
101-
this.textures = new ResourcePool<>();
102-
this.colormaps = new ResourcePool<>();
99+
this.atlases = new ResourcePool<>(Atlas.class, this);
100+
this.blockStates = new ResourcePool<>(BlockState.class, this);
101+
this.entityStates = new ResourcePool<>(EntityState.class, this);
102+
this.models = new ResourcePool<>(Model.class, this);
103+
this.textures = new ResourcePool<>(Texture.class, this);
104+
this.colormaps = new ResourcePool<>(BufferedImage.class, this);
103105

104106
this.colorCalculatorFactory = new BlockColorCalculatorFactory();
105107
this.blockPropertiesConfig = new BlockPropertiesConfig();
@@ -115,6 +117,14 @@ public ResourcePack(PackVersion packVersion) {
115117
extensions.put(extensionType, extensionType.create(this));
116118
}
117119

120+
@Override
121+
public Key remapResource(Type type, Key src) {
122+
for (ResourcePackExtension extension : extensions.values()) {
123+
src = extension.remapResource(type, src);
124+
}
125+
return src;
126+
}
127+
118128
@Override
119129
public synchronized void loadResources(Iterable<Path> roots) throws IOException, InterruptedException {
120130
Logger.global.logInfo("Loading resources...");

core/src/main/java/de/bluecolored/bluemap/core/resources/pack/resourcepack/ResourcePackExtension.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import de.bluecolored.bluemap.core.resources.pack.PackExtension;
2828
import de.bluecolored.bluemap.core.util.Key;
2929

30+
import java.lang.reflect.Type;
3031
import java.util.Set;
3132

3233
public interface ResourcePackExtension extends PackExtension {
@@ -35,4 +36,7 @@ default Set<Key> collectUsedTextureKeys() {
3536
return Set.of();
3637
}
3738

39+
default Key remapResource(Type type, Key src) {
40+
return src;
41+
}
3842
}

0 commit comments

Comments
 (0)