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