Skip to content

Commit 504207d

Browse files
committed
Made most of the code loader agnostic, better support for relative paths
1 parent 7935a0d commit 504207d

8 files changed

Lines changed: 235 additions & 116 deletions

File tree

src/main/java/dev/latvian/mods/packsync/Checksum.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package dev.latvian.mods.packsync;
22

3-
import net.neoforged.fml.ModLoadingIssue;
4-
import net.neoforged.neoforgespi.IIssueReporting;
3+
import dev.latvian.mods.packsync.platform.Issue;
4+
import dev.latvian.mods.packsync.platform.PackSyncPlatformContext;
55

66
import java.nio.ByteBuffer;
77
import java.nio.charset.StandardCharsets;
@@ -28,7 +28,7 @@ static ByteBuffer allocateTempBuffer(int maxBufferSize, long fileSize) {
2828
return ByteBuffer.allocate(Math.min(maxBufferSize, (int) Math.min(Integer.MAX_VALUE, fileSize)));
2929
}
3030

31-
static String checksum(Path path, String algorithm, IIssueReporting issues) {
31+
static String checksum(PackSyncPlatformContext context, Path path, String algorithm) {
3232
if (Files.notExists(path)) {
3333
return "";
3434
}
@@ -45,17 +45,17 @@ static String checksum(Path path, String algorithm, IIssueReporting issues) {
4545

4646
return toHex(md.digest());
4747
} catch (Exception ex) {
48-
issues.addIssue(ModLoadingIssue.error("Failed to read checksum of file %s!", path.getFileName().toString()).withCause(ex).withAffectedPath(path));
48+
context.addIssue(Issue.error("Failed to read checksum of file %s!", path.getFileName().toString()).cause(ex).path(path));
4949
}
5050

5151
return "";
5252
}
5353

54-
static String md5(Path path, IIssueReporting issues) {
55-
return checksum(path, "MD5", issues);
54+
static String md5(PackSyncPlatformContext context, Path path) {
55+
return checksum(context, path, "MD5");
5656
}
5757

58-
static String sha512(Path path, IIssueReporting issues) {
59-
return checksum(path, "SHA-512", issues);
58+
static String sha512(PackSyncPlatformContext context, Path path) {
59+
return checksum(context, path, "SHA-512");
6060
}
6161
}

src/main/java/dev/latvian/mods/packsync/FileInfo.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package dev.latvian.mods.packsync;
22

33
import com.google.gson.JsonObject;
4-
import net.neoforged.neoforgespi.IIssueReporting;
4+
import dev.latvian.mods.packsync.platform.PackSyncPlatformContext;
55
import org.jetbrains.annotations.NotNull;
66

77
import java.nio.file.Path;
@@ -25,8 +25,8 @@ public FileInfo(String filename, long size) {
2525
this("", filename, size, Artifact.NONE);
2626
}
2727

28-
public boolean isEqual(Path path, IIssueReporting issues) {
29-
return size == PackSync.size(path) && checksum.equals(Checksum.md5(path, issues));
28+
public boolean isEqual(PackSyncPlatformContext context, Path path) {
29+
return size == PackSync.size(path) && checksum.equals(Checksum.md5(context, path));
3030
}
3131

3232
public void write(JsonObject json) {

src/main/java/dev/latvian/mods/packsync/PackSync.java

Lines changed: 81 additions & 101 deletions
Large diffs are not rendered by default.

src/main/java/dev/latvian/mods/packsync/RemoteFile.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package dev.latvian.mods.packsync;
22

33
import com.google.gson.JsonObject;
4-
import net.neoforged.neoforgespi.IIssueReporting;
4+
import dev.latvian.mods.packsync.platform.PackSyncPlatformContext;
55

66
import java.nio.file.Files;
77
import java.nio.file.Path;
@@ -25,7 +25,7 @@ public RemoteFile(JsonObject json) {
2525
);
2626
}
2727

28-
public boolean replace(Path path, IIssueReporting issues) {
29-
return lazy ? Files.notExists(path) : !fileInfo.isEqual(path, issues);
28+
public boolean replace(PackSyncPlatformContext context, Path path) {
29+
return lazy ? Files.notExists(path) : !fileInfo.isEqual(context, path);
3030
}
3131
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package dev.latvian.mods.packsync.platform;
2+
3+
import java.nio.file.Path;
4+
5+
public class Issue {
6+
public static Issue error(String message, Object... args) {
7+
var issue = new Issue();
8+
issue.warning = false;
9+
issue.message = message;
10+
issue.args = args;
11+
return issue;
12+
}
13+
14+
public static Issue warning(String message, Object... args) {
15+
var issue = new Issue();
16+
issue.warning = true;
17+
issue.message = message;
18+
issue.args = args;
19+
return issue;
20+
}
21+
22+
public boolean warning;
23+
public String message;
24+
public Object[] args;
25+
public Throwable cause;
26+
public Path path;
27+
28+
public Issue cause(Throwable cause) {
29+
this.cause = cause;
30+
return this;
31+
}
32+
33+
public Issue path(Path path) {
34+
this.path = path;
35+
return this;
36+
}
37+
}
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package dev.latvian.mods.packsync.platform;
2+
3+
import dev.latvian.mods.packsync.PackSync;
4+
import net.neoforged.fml.ModLoadingIssue;
5+
import net.neoforged.fml.loading.FMLLoader;
6+
import net.neoforged.fml.loading.FMLPaths;
7+
import net.neoforged.neoforgespi.ILaunchContext;
8+
import net.neoforged.neoforgespi.locating.IDiscoveryPipeline;
9+
import net.neoforged.neoforgespi.locating.IModFileCandidateLocator;
10+
import net.neoforged.neoforgespi.locating.IncompatibleFileReporting;
11+
import net.neoforged.neoforgespi.locating.ModFileDiscoveryAttributes;
12+
13+
import java.nio.file.Path;
14+
15+
public class PackSyncModFileCandidateLocator implements IModFileCandidateLocator {
16+
private record NeoForgeContext(ILaunchContext context, IDiscoveryPipeline pipeline) implements PackSyncPlatformContext {
17+
@Override
18+
public void addIssue(Issue issue) {
19+
pipeline.addIssue((issue.warning ? ModLoadingIssue.warning(issue.message, issue.args) : ModLoadingIssue.error(issue.message, issue.args)).withAffectedPath(issue.path).withCause(issue.cause));
20+
}
21+
22+
@Override
23+
public String getMinecraftVersion() {
24+
return context.getVersions().mcVersion();
25+
}
26+
27+
@Override
28+
public String getLoaderVersion() {
29+
return context.getVersions().neoFormVersion() + "/" + context.getVersions().neoForgeVersion();
30+
}
31+
32+
@Override
33+
public String getDataVersion() {
34+
// FIXME: Figure out how to get SharedConstants.getCurrentVersion().getDataVersion().getVersion()
35+
return "4325";
36+
}
37+
38+
@Override
39+
public boolean isDev() {
40+
return !FMLLoader.getCurrent().isProduction();
41+
}
42+
43+
@Override
44+
public boolean isServer() {
45+
return context.getRequiredDistribution().isDedicatedServer();
46+
}
47+
48+
@Override
49+
public Path getGameDirectory() {
50+
return FMLPaths.GAMEDIR.get();
51+
}
52+
53+
@Override
54+
public Path getModsDirectory() {
55+
return FMLPaths.MODSDIR.get();
56+
}
57+
58+
@Override
59+
public void addPath(Path path) {
60+
pipeline.addPath(path, ModFileDiscoveryAttributes.DEFAULT, IncompatibleFileReporting.WARN_ALWAYS);
61+
}
62+
}
63+
64+
@Override
65+
public void findCandidates(ILaunchContext context, IDiscoveryPipeline pipeline) {
66+
PackSync.load(new NeoForgeContext(context, pipeline));
67+
}
68+
69+
@Override
70+
public String toString() {
71+
return "PackSync";
72+
}
73+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package dev.latvian.mods.packsync.platform;
2+
3+
import java.nio.file.Path;
4+
5+
public interface PackSyncPlatformContext {
6+
void addIssue(Issue issue);
7+
8+
String getMinecraftVersion();
9+
10+
String getLoaderVersion();
11+
12+
String getDataVersion();
13+
14+
boolean isDev();
15+
16+
boolean isServer();
17+
18+
Path getGameDirectory();
19+
20+
default Path getModsDirectory() {
21+
return getGameDirectory().resolve("mods");
22+
}
23+
24+
default Path getLocalDirectory() {
25+
return getGameDirectory().resolve("local");
26+
}
27+
28+
void addPath(Path path);
29+
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
dev.latvian.mods.packsync.PackSync
1+
dev.latvian.mods.packsync.platform.PackSyncModFileCandidateLocator

0 commit comments

Comments
 (0)