aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/shcm/shsupercm/fabric/citresewn/mixin
diff options
context:
space:
mode:
authorSHsuperCM <shsupercm@gmail.com>2021-09-11 12:53:16 +0300
committerSHsuperCM <shsupercm@gmail.com>2021-09-11 12:53:16 +0300
commit4b9608dc2d7470c4993c1a1ed7f96da86bf86b31 (patch)
tree67860bb1ecbd79849679b7968005d2f3979312f1 /src/main/java/shcm/shsupercm/fabric/citresewn/mixin
parent7da68bd04c77ada6db04a5a7d20b56d08bfb8862 (diff)
downloadCITResewn-4b9608dc2d7470c4993c1a1ed7f96da86bf86b31.tar.gz
CITResewn-4b9608dc2d7470c4993c1a1ed7f96da86bf86b31.tar.bz2
CITResewn-4b9608dc2d7470c4993c1a1ed7f96da86bf86b31.zip
Rewrote cit discovery
• Added support for namespaces other than minecraft. • Added support for cits in fabric resources(allowing mod jars to include cits if fabric api is present) Closes #12
Diffstat (limited to 'src/main/java/shcm/shsupercm/fabric/citresewn/mixin')
-rw-r--r--src/main/java/shcm/shsupercm/fabric/citresewn/mixin/core/GroupResourcePackAccessor.java14
-rw-r--r--src/main/java/shcm/shsupercm/fabric/citresewn/mixin/core/ModelLoaderMixin.java2
-rw-r--r--src/main/java/shcm/shsupercm/fabric/citresewn/mixin/core/ZipResourcePackMixin.java60
3 files changed, 75 insertions, 1 deletions
diff --git a/src/main/java/shcm/shsupercm/fabric/citresewn/mixin/core/GroupResourcePackAccessor.java b/src/main/java/shcm/shsupercm/fabric/citresewn/mixin/core/GroupResourcePackAccessor.java
new file mode 100644
index 0000000..7ab1c16
--- /dev/null
+++ b/src/main/java/shcm/shsupercm/fabric/citresewn/mixin/core/GroupResourcePackAccessor.java
@@ -0,0 +1,14 @@
+package shcm.shsupercm.fabric.citresewn.mixin.core;
+
+import net.fabricmc.fabric.api.resource.ModResourcePack;
+import net.fabricmc.fabric.impl.resource.loader.GroupResourcePack;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.gen.Accessor;
+
+import java.util.List;
+
+/* if (FabricLoader.getInstance().isModLoaded("fabric-resource-loader-v0")) */ @Mixin(GroupResourcePack.class)
+public interface GroupResourcePackAccessor {
+ @Accessor
+ List<ModResourcePack> getPacks();
+}
diff --git a/src/main/java/shcm/shsupercm/fabric/citresewn/mixin/core/ModelLoaderMixin.java b/src/main/java/shcm/shsupercm/fabric/citresewn/mixin/core/ModelLoaderMixin.java
index 0ece247..e6ac888 100644
--- a/src/main/java/shcm/shsupercm/fabric/citresewn/mixin/core/ModelLoaderMixin.java
+++ b/src/main/java/shcm/shsupercm/fabric/citresewn/mixin/core/ModelLoaderMixin.java
@@ -61,7 +61,7 @@ public abstract class ModelLoaderMixin {
info("Loading CIT Resewn..");
info("Parsing CITs...");
- Collection<CIT> parsed = CITParser.parse(resourceManager.streamResourcePacks().collect(Collectors.toCollection(ArrayList::new)));
+ Collection<CIT> parsed = CITParser.parseCITs(resourceManager.streamResourcePacks().collect(Collectors.toCollection(ArrayList::new)));
if (parsed.size() > 0) {
info("Loading CITItem models..");
diff --git a/src/main/java/shcm/shsupercm/fabric/citresewn/mixin/core/ZipResourcePackMixin.java b/src/main/java/shcm/shsupercm/fabric/citresewn/mixin/core/ZipResourcePackMixin.java
new file mode 100644
index 0000000..7acbcb7
--- /dev/null
+++ b/src/main/java/shcm/shsupercm/fabric/citresewn/mixin/core/ZipResourcePackMixin.java
@@ -0,0 +1,60 @@
+package shcm.shsupercm.fabric.citresewn.mixin.core;
+
+import com.google.common.collect.Lists;
+import net.minecraft.resource.ResourceType;
+import net.minecraft.resource.ZipResourcePack;
+import net.minecraft.util.Identifier;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.Shadow;
+import org.spongepowered.asm.mixin.injection.At;
+import org.spongepowered.asm.mixin.injection.Inject;
+import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
+
+import java.io.IOException;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.function.Predicate;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+
+@Mixin(ZipResourcePack.class)
+public abstract class ZipResourcePackMixin {
+ @Shadow protected abstract ZipFile getZipFile() throws IOException;
+
+ @Inject(method = "findResources", cancellable = true, at = @At("HEAD"))
+ public void fixDepthBug(ResourceType type, String namespace, String prefix, int maxDepth, Predicate<String> pathFilter, CallbackInfoReturnable<Collection<Identifier>> cir) {
+ if (maxDepth != Integer.MAX_VALUE - 53)
+ return;
+
+ ZipFile zipFile2;
+ try {
+ zipFile2 = this.getZipFile();
+ } catch (IOException var15) {
+ cir.setReturnValue(Collections.emptySet()); return;
+ }
+
+ Enumeration<? extends ZipEntry> enumeration = zipFile2.entries();
+ List<Identifier> list = Lists.newArrayList();
+ String var10000 = type.getDirectory();
+ String string = var10000 + "/" + namespace + "/";
+ String string2 = string + prefix + "/";
+
+ while(enumeration.hasMoreElements()) {
+ ZipEntry zipEntry = enumeration.nextElement();
+ if (!zipEntry.isDirectory()) {
+ String string3 = zipEntry.getName();
+ if (!string3.endsWith(".mcmeta") && string3.startsWith(string2)) {
+ String string4 = string3.substring(string.length());
+ String[] strings = string4.split("/");
+ if (pathFilter.test(strings[strings.length - 1])) {
+ list.add(new Identifier(namespace, string4));
+ }
+ }
+ }
+ }
+
+ cir.setReturnValue(list); return;
+ }
+}