Skip to content

Commit 075f3e9

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

File tree

4 files changed

+42
-8
lines changed

4 files changed

+42
-8
lines changed

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

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,15 @@ 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+
44+
public ResourcePool() {
45+
this.mapper = null;
46+
}
47+
48+
public ResourcePool(ResourcePoolMapper mapper) {
49+
this.mapper = mapper;
50+
}
4251

4352
public void put(Key path, T value) {
4453
put(new ResourcePath<>(path), value);
@@ -70,6 +79,9 @@ public Collection<T> values() {
7079
}
7180

7281
public boolean contains(Key path) {
82+
if (mapper != null) {
83+
path = mapper.remapResource(path);
84+
}
7385
return paths.containsKey(path);
7486
}
7587

@@ -78,7 +90,7 @@ public boolean contains(Key path) {
7890
}
7991

8092
public @Nullable T get(Key path) {
81-
ResourcePath<T> rp = paths.get(path);
93+
ResourcePath<T> rp = getPath(path);
8294
return rp == null ? null : rp.getResource(this::get);
8395
}
8496

@@ -88,6 +100,9 @@ public synchronized void remove(Key path) {
88100
}
89101

90102
public @Nullable ResourcePath<T> getPath(Key path) {
103+
if (mapper != null) {
104+
path = mapper.remapResource(path);
105+
}
91106
return paths.get(path);
92107
}
93108

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

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

Lines changed: 16 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;
@@ -63,7 +64,7 @@
6364
import java.util.concurrent.TimeUnit;
6465
import java.util.function.Predicate;
6566

66-
public class ResourcePack extends Pack {
67+
public class ResourcePack extends Pack implements ResourcePoolMapper {
6768

6869
public interface Extension<T extends ResourcePackExtension> extends Keyed {
6970
Registry<Extension<?>> REGISTRY = new Registry<>();
@@ -94,12 +95,12 @@ public interface Extension<T extends ResourcePackExtension> extends Keyed {
9495
public ResourcePack(PackVersion packVersion) {
9596
super(packVersion);
9697

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<>();
98+
this.atlases = new ResourcePool<>(this);
99+
this.blockStates = new ResourcePool<>(this);
100+
this.entityStates = new ResourcePool<>(this);
101+
this.models = new ResourcePool<>(this);
102+
this.textures = new ResourcePool<>(this);
103+
this.colormaps = new ResourcePool<>(this);
103104

104105
this.colorCalculatorFactory = new BlockColorCalculatorFactory();
105106
this.blockPropertiesConfig = new BlockPropertiesConfig();
@@ -115,6 +116,14 @@ public ResourcePack(PackVersion packVersion) {
115116
extensions.put(extensionType, extensionType.create(this));
116117
}
117118

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

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,4 +35,7 @@ default Set<Key> collectUsedTextureKeys() {
3535
return Set.of();
3636
}
3737

38+
default Key remapResource(Key src) {
39+
return src;
40+
}
3841
}

0 commit comments

Comments
 (0)