fabric-resource-loader-v0-3.3.1+d4d4122a6f.jar

Download file
    package net.fabricmc.fabric.mixin.resource.loader.client;

import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.LinkOption;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.fabricmc.fabric.impl.resource.loader.FabricResourcePackProfile;
import net.fabricmc.fabric.impl.resource.loader.ModNioResourcePack;
import net.fabricmc.fabric.impl.resource.loader.ModResourcePackCreator;
import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.class_2487;
import net.minecraft.class_2499;
import net.minecraft.class_2505;
import net.minecraft.class_2507;
import net.minecraft.class_2519;
import net.minecraft.class_315;
import net.minecraft.class_3262;
import net.minecraft.class_3288;
import org.slf4j.Logger;
import org.spongepowered.asm.mixin.Final;
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.CallbackInfo;

@Environment(EnvType.CLIENT)
@Mixin({class_315.class})
public class GameOptionsMixin {
   @Shadow
   public List<String> field_1887;
   @Shadow
   @Final
   static Logger field_1834;

   @Inject(
      method = {"method_1636()V"},
      at = {@At("RETURN")}
   )
   private void onLoad(CallbackInfo ci) {
      Path dataDir = FabricLoader.getInstance().getGameDir().resolve("data");
      if (Files.notExists(dataDir, new LinkOption[0])) {
         try {
            Files.createDirectories(dataDir);
         } catch (IOException var14) {
            field_1834.warn("[Fabric Resource Loader] Could not create data directory: " + String.valueOf(dataDir.toAbsolutePath()));
         }
      }

      Path trackerFile = dataDir.resolve("fabricDefaultResourcePacks.dat");
      Set<String> trackedPacks = new HashSet();
      if (Files.exists(trackerFile, new LinkOption[0])) {
         try {
            class_2487 data = class_2507.method_30613(trackerFile, class_2505.method_53898());
            class_2499 values = (class_2499)data.method_10554("values").orElseThrow();

            for(int i = 0; i < values.size(); ++i) {
               trackedPacks.add((String)values.method_10608(i).orElseThrow());
            }
         } catch (IOException e) {
            field_1834.warn("[Fabric Resource Loader] Could not read " + String.valueOf(trackerFile.toAbsolutePath()), e);
         }
      }

      Set<String> removedPacks = new HashSet(trackedPacks);
      Set<String> resourcePacks = new LinkedHashSet(this.field_1887);
      List<class_3288> profiles = new ArrayList();
      ModResourcePackCreator var10000 = ModResourcePackCreator.CLIENT_RESOURCE_PACK_PROVIDER;
      Objects.requireNonNull(profiles);
      var10000.method_14453(profiles::add);

      for(class_3288 profile : profiles) {
         if (profile.method_14463().equals("fabric")) {
            resourcePacks.add(profile.method_14463());
         } else {
            class_3262 pack = profile.method_14458();

            try {
               if (pack instanceof ModNioResourcePack) {
                  ModNioResourcePack builtinPack = (ModNioResourcePack)pack;
                  if (builtinPack.getActivationType().isEnabledByDefault()) {
                     if (trackedPacks.add(builtinPack.method_14409())) {
                        resourcePacks.add(profile.method_14463());
                     } else {
                        removedPacks.remove(builtinPack.method_14409());
                     }
                  }
               }
            } catch (Throwable var16) {
               if (pack != null) {
                  try {
                     pack.close();
                  } catch (Throwable var13) {
                     var16.addSuppressed(var13);
                  }
               }

               throw var16;
            }

            if (pack != null) {
               pack.close();
            }
         }
      }

      try {
         class_2499 values = new class_2499();

         for(String id : trackedPacks) {
            if (!removedPacks.contains(id)) {
               values.add(class_2519.method_23256(id));
            }
         }

         class_2487 nbt = new class_2487();
         nbt.method_10566("values", values);
         class_2507.method_30614(nbt, trackerFile);
      } catch (IOException e) {
         field_1834.warn("[Fabric Resource Loader] Could not write to " + String.valueOf(trackerFile.toAbsolutePath()), e);
      }

      this.field_1887 = new ArrayList(resourcePacks);
   }

   @WrapOperation(
      method = {"method_49598(Lnet/minecraft/class_3283;)V"},
      at = {@At(
   value = "INVOKE",
   target = "Lnet/minecraft/class_3288;method_14465()Z"
)}
   )
   private boolean excludeInternalResourcePacksFromRefreshCheck(class_3288 instance, Operation<Boolean> original) {
      return (Boolean)original.call(new Object[]{instance}) || ((FabricResourcePackProfile)instance).fabric_isHidden();
   }
}
    
Download file