From 6a7ca1e518ca829ff02efa2fc5585c7f0e92e1c8 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Fri, 10 Mar 2023 20:14:11 -0500 Subject: [PATCH] Remove unnecessary Files.exists call in ModFileResourcePack.getResource() --- .../resourcepacks/ModFileResourcePackMixin.java | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/resourcepacks/ModFileResourcePackMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/resourcepacks/ModFileResourcePackMixin.java index f4e7d0e9..15d99e15 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/perf/resourcepacks/ModFileResourcePackMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/resourcepacks/ModFileResourcePackMixin.java @@ -3,6 +3,7 @@ package org.embeddedt.modernfix.mixin.perf.resourcepacks; import com.google.common.base.Joiner; import net.minecraft.server.packs.PackType; import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.packs.ResourcePackFileNotFoundException; import net.minecraftforge.fml.loading.moddiscovery.ModFile; import net.minecraftforge.fml.packs.ModFileResourcePack; import org.embeddedt.modernfix.util.FileUtil; @@ -14,11 +15,11 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import org.spongepowered.asm.mixin.injection.callback.LocalCapture; import java.io.IOException; -import java.nio.file.FileSystem; -import java.nio.file.Files; -import java.nio.file.Path; +import java.io.InputStream; +import java.nio.file.*; import java.util.*; import java.util.function.Predicate; import java.util.stream.Collectors; @@ -97,6 +98,15 @@ public abstract class ModFileResourcePackMixin { cir.setReturnValue(this.containedPaths.contains(FileUtil.normalize(path))); } + @Inject(method = "getResource(Ljava/lang/String;)Ljava/io/InputStream;", at = @At(value = "INVOKE", target = "Ljava/nio/file/Files;exists(Ljava/nio/file/Path;[Ljava/nio/file/LinkOption;)Z"), cancellable = true, locals = LocalCapture.CAPTURE_FAILHARD) + private void fasterGetResource(String resourcePath, CallbackInfoReturnable cir, Path path) throws IOException { + try { + cir.setReturnValue(Files.newInputStream(path, StandardOpenOption.READ)); + } catch(NoSuchFileException e) { + throw new ResourcePackFileNotFoundException(this.modFile.getFilePath().toFile(), resourcePath); + } + } + /** * @author embeddedt * @reason Use cached listing of mod resources