diff --git a/common/src/main/java/dev/architectury/platform/Mod.java b/common/src/main/java/dev/architectury/platform/Mod.java index 8aa80a28..68e67cb4 100644 --- a/common/src/main/java/dev/architectury/platform/Mod.java +++ b/common/src/main/java/dev/architectury/platform/Mod.java @@ -61,6 +61,15 @@ public interface Mod { @Deprecated(forRemoval = true) Path getFilePath(); + /** + * Gets an NIO Path to the given resource contained within the mod file / folder. + * The path is verified to exist, and an empty optional is returned if it doesn't. + * + * @param path The resource to search for + * @return The path of the resource if it exists, or {@link Optional#empty()} if it doesn't + */ + Optional findResource(String... path); + Collection getAuthors(); @Nullable diff --git a/fabric/src/main/java/dev/architectury/platform/fabric/PlatformImpl.java b/fabric/src/main/java/dev/architectury/platform/fabric/PlatformImpl.java index 2419158f..bf11e5a2 100644 --- a/fabric/src/main/java/dev/architectury/platform/fabric/PlatformImpl.java +++ b/fabric/src/main/java/dev/architectury/platform/fabric/PlatformImpl.java @@ -132,7 +132,12 @@ public class PlatformImpl { public Path getFilePath() { return container.getRootPath(); } - + + @Override + public Optional findResource(String... path) { + return container.findPath(String.join("/", path)); + } + @Override public Collection getAuthors() { return metadata.getAuthors().stream() diff --git a/forge/src/main/java/dev/architectury/platform/forge/PlatformImpl.java b/forge/src/main/java/dev/architectury/platform/forge/PlatformImpl.java index 16926d02..f39b80e4 100644 --- a/forge/src/main/java/dev/architectury/platform/forge/PlatformImpl.java +++ b/forge/src/main/java/dev/architectury/platform/forge/PlatformImpl.java @@ -35,6 +35,7 @@ import org.jetbrains.annotations.Nullable; import javax.annotation.Nonnull; import java.net.URL; +import java.nio.file.Files; import java.nio.file.Path; import java.util.*; import java.util.concurrent.ConcurrentHashMap; @@ -126,15 +127,20 @@ public class PlatformImpl { public Optional getLogoFile(int i) { return this.info.getLogoFile(); } - + @Override public List getFilePaths() { return List.of(getFilePath()); } - + @Override public Path getFilePath() { - return this.info.getOwningFile().getFile().getFilePath(); + return this.info.getOwningFile().getFile().getSecureJar().getRootPath(); + } + + @Override + public Optional findResource(String... path) { + return Optional.of(this.info.getOwningFile().getFile().findResource(path)).filter(Files::exists); } @Override