Skip to content

Commit ecae74f

Browse files
committed
fix *another* server error with miins
1 parent a95e8b2 commit ecae74f

5 files changed

Lines changed: 72 additions & 16 deletions

File tree

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ if(rootProject.file('private.gradle').exists()) { //Publishing details
3030

3131
archivesBaseName = "libcd"
3232
group = "io.github.cottonmc"
33-
version = "1.2.2+1.14.3"
33+
version = "1.2.3+1.14.3"
3434

3535
minecraft {
3636
refmapName = 'mixins.libcd.refmap.json'
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package io.github.cottonmc.libcd.impl;
2+
3+
import net.minecraft.util.Identifier;
4+
5+
public interface ResourceSearcher {
6+
boolean libcd_contains(Identifier id);
7+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package io.github.cottonmc.libcd.mixin;
2+
3+
import io.github.cottonmc.libcd.impl.ResourceSearcher;
4+
import net.minecraft.resource.NamespaceResourceManager;
5+
import net.minecraft.resource.ResourceManager;
6+
import net.minecraft.resource.ResourcePack;
7+
import net.minecraft.resource.ResourceType;
8+
import net.minecraft.util.Identifier;
9+
import org.spongepowered.asm.mixin.Final;
10+
import org.spongepowered.asm.mixin.Mixin;
11+
import org.spongepowered.asm.mixin.Shadow;
12+
13+
import java.util.List;
14+
15+
@Mixin(NamespaceResourceManager.class)
16+
public abstract class MixinNamespaceResourceManager implements ResourceManager, ResourceSearcher {
17+
@Shadow @Final protected List<ResourcePack> packList;
18+
19+
@Shadow @Final private ResourceType type;
20+
21+
@Shadow protected abstract boolean isPathAbsolute(Identifier id);
22+
23+
public boolean libcd_contains(Identifier id) {
24+
if (!this.isPathAbsolute(id)) {
25+
return false;
26+
} else {
27+
for(int i = this.packList.size() - 1; i >= 0; --i) {
28+
ResourcePack pack = this.packList.get(i);
29+
if (pack.contains(this.type, id)) {
30+
return true;
31+
}
32+
}
33+
34+
return false;
35+
}
36+
}
37+
38+
}

src/main/java/io/github/cottonmc/libcd/mixin/MixinResourceManagerImpl.java

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,8 @@
22

33
import io.github.cottonmc.libcd.condition.ConditionalData;
44
import io.github.cottonmc.libcd.impl.ReloadListenersAccessor;
5-
import net.minecraft.resource.ReloadableResourceManager;
6-
import net.minecraft.resource.ReloadableResourceManagerImpl;
7-
import net.minecraft.resource.Resource;
8-
import net.minecraft.resource.ResourceReloadListener;
5+
import io.github.cottonmc.libcd.impl.ResourceSearcher;
6+
import net.minecraft.resource.*;
97
import net.minecraft.util.Identifier;
108
import org.apache.commons.io.IOUtils;
119
import org.apache.logging.log4j.Logger;
@@ -17,19 +15,25 @@
1715
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
1816
import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
1917

18+
import java.io.FileNotFoundException;
2019
import java.io.IOException;
2120
import java.util.ArrayList;
2221
import java.util.List;
22+
import java.util.Map;
2323
import java.util.Set;
2424
import java.util.function.Predicate;
2525

2626
@Mixin(ReloadableResourceManagerImpl.class)
27-
public abstract class MixinResourceManagerImpl implements ReloadableResourceManager, ReloadListenersAccessor {
27+
public abstract class MixinResourceManagerImpl implements ReloadableResourceManager, ReloadListenersAccessor, ResourceSearcher {
2828

2929
@Shadow @Final private static Logger LOGGER;
3030

3131
@Shadow @Final private List<ResourceReloadListener> listeners;
3232

33+
@Shadow public abstract List<Resource> getAllResources(Identifier identifier_1) throws IOException;
34+
35+
@Shadow @Final private Map<String, NamespaceResourceManager> namespaceManagers;
36+
3337
@Inject(method = "findResources", at = @At("RETURN"), locals = LocalCapture.CAPTURE_FAILEXCEPTION)
3438
private void checkConditioalRecipes(String parent, Predicate<String> loadFilter, CallbackInfoReturnable cir,
3539
Set<Identifier> foundResources, List<Identifier> sortedResources) {
@@ -38,16 +42,15 @@ private void checkConditioalRecipes(String parent, Predicate<String> loadFilter,
3842
//don't try to load for things that use mcmetas already!
3943
if (id.getPath().contains(".mcmeta") || id.getPath().contains(".png")) continue;
4044
Identifier metaId = new Identifier(id.getNamespace(), id.getPath() + ".mcmeta");
41-
if (containsResource(metaId)) {
42-
try {
43-
Resource meta = getResource(metaId);
44-
String metaText = IOUtils.toString(meta.getInputStream());
45-
if (!ConditionalData.shouldLoad(id, metaText)) {
46-
sortedResources.remove(id);
47-
}
48-
} catch (IOException e) {
49-
LOGGER.error("Error when accessing recipe metadata for {}: {}", id.toString(), e.getMessage());
45+
try {
46+
Resource meta = getResource(metaId);
47+
String metaText = IOUtils.toString(meta.getInputStream());
48+
if (!ConditionalData.shouldLoad(id, metaText)) {
49+
sortedResources.remove(id);
5050
}
51+
} catch (IOException e) {
52+
//this is so ugly but I can't really do anything else when containsResource is client-side only for *no* reason
53+
if (!(e instanceof FileNotFoundException)) LOGGER.error("Error when accessing recipe metadata for {}: {}", id.toString(), e.getMessage());
5154
}
5255
}
5356
}
@@ -56,4 +59,11 @@ private void checkConditioalRecipes(String parent, Predicate<String> loadFilter,
5659
public List<ResourceReloadListener> libcd_getListeners() {
5760
return listeners;
5861
}
62+
63+
public boolean libcd_contains(Identifier id) {
64+
ResourceManager manager = this.namespaceManagers.get(id.getNamespace());
65+
return manager != null && ((ResourceSearcher) manager).libcd_contains(id);
66+
}
67+
68+
5969
}

src/main/resources/mixins.libcd.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
"compatibilityLevel": "JAVA_8",
66
"mixins": [
77
"MixinResourceManagerImpl",
8-
"MixinRecipeManager"
8+
"MixinRecipeManager",
9+
"MixinNamespaceResourceManager"
910
]
1011
}

0 commit comments

Comments
 (0)