diff options
author | SHsuperCM <shsupercm@gmail.com> | 2021-09-11 12:53:16 +0300 |
---|---|---|
committer | SHsuperCM <shsupercm@gmail.com> | 2021-09-11 12:53:16 +0300 |
commit | 4b9608dc2d7470c4993c1a1ed7f96da86bf86b31 (patch) | |
tree | 67860bb1ecbd79849679b7968005d2f3979312f1 /src/main/java/shcm/shsupercm/fabric/citresewn/mixin | |
parent | 7da68bd04c77ada6db04a5a7d20b56d08bfb8862 (diff) | |
download | CITResewn-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')
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; + } +} |