Skip to content

Commit dace534

Browse files
committed
Better cache handling
1 parent 91aa379 commit dace534

File tree

12 files changed

+172
-21
lines changed

12 files changed

+172
-21
lines changed

src/main/java/fr/catcore/modremapperapi/utils/Constants.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,20 @@
66
import java.io.File;
77

88
public class Constants {
9+
@Deprecated
910
public static final File MAIN_FOLDER = CacheUtils.BASE_FOLDER.toFile();
11+
@Deprecated
1012
public static final File VERSIONED_FOLDER = CacheUtils.MAIN_FOLDER.toFile();
13+
@Deprecated
1114
public static final File LIB_FOLDER = CacheUtils.LIBRARY_FOLDER.toFile();
1215

16+
@Deprecated
1317
public static final File EXTRA_MAPPINGS_FILE = CacheUtils.getCachePath("extra_mappings.tiny").toFile();
18+
@Deprecated
1419
public static final File REMAPPED_MAPPINGS_FILE = CacheUtils.getCachePath("remapped_mappings.tiny").toFile();
20+
@Deprecated
1521
public static final File MC_MAPPINGS_FILE = CacheUtils.getCachePath("mc_mappings.tiny").toFile();
22+
@Deprecated
1623
public static final File FULL_MAPPINGS_FILE = CacheUtils.getCachePath("full_mappings.tiny").toFile();
1724

1825
public static final Logger MAIN_LOGGER = Logger.get("ModRemappingAPI");

src/main/java/io/github/fabriccompatibilitylayers/modremappingapi/Dummy.java

Lines changed: 0 additions & 4 deletions
This file was deleted.
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package io.github.fabriccompatibilitylayers.modremappingapi.api.v2;
2+
3+
import java.nio.file.Path;
4+
5+
public interface CacheHandler {
6+
Path resolveTemp(String name);
7+
Path resolveCache(String name);
8+
Path resolveLibrary(String name);
9+
}

src/main/java/io/github/fabriccompatibilitylayers/modremappingapi/api/v2/ModRemapper.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
public interface ModRemapper {
66
String getContextId();
77

8+
void init(CacheHandler cacheHandler);
9+
810
List<ModDiscovererConfig> getModDiscoverers();
911
List<ModRemapper> collectSubRemappers(List<ModCandidate> discoveredMods);
1012
MappingsConfig getMappingsConfig();
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package io.github.fabriccompatibilitylayers.modremappingapi.impl;
2+
3+
import io.github.fabriccompatibilitylayers.modremappingapi.api.v2.CacheHandler;
4+
5+
import java.nio.file.Path;
6+
7+
public interface InternalCacheHandler extends CacheHandler {
8+
Path resolveMappings(String name);
9+
Path resolveRoot(String name);
10+
Path getTempDirectory();
11+
}

src/main/java/io/github/fabriccompatibiltylayers/modremappingapi/impl/context/MappingsRegistryInstance.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import fr.catcore.modremapperapi.utils.Constants;
44
import fr.catcore.wfvaio.WhichFabricVariantAmIOn;
5+
import io.github.fabriccompatibilitylayers.modremappingapi.impl.InternalCacheHandler;
56
import io.github.fabriccompatibiltylayers.modremappingapi.api.v1.MappingBuilder;
67
import io.github.fabriccompatibiltylayers.modremappingapi.impl.MappingBuilderImpl;
78
import io.github.fabriccompatibiltylayers.modremappingapi.impl.MappingsUtilsImpl;
@@ -30,8 +31,11 @@ public class MappingsRegistryInstance extends MappingsRegistry {
3031
private String defaultPackage = "";
3132
private String sourceNamespace = "official";
3233

33-
public MappingsRegistryInstance() {
34+
private final InternalCacheHandler cacheHandler;
35+
36+
public MappingsRegistryInstance(InternalCacheHandler cacheHandler) {
3437
super();
38+
this.cacheHandler = cacheHandler;
3539

3640
try {
3741
this.formatVanillaMappings();
@@ -121,7 +125,7 @@ public void completeFormattedMappings() throws IOException {
121125
}
122126

123127
try {
124-
MappingTreeHelper.exportMappings(formatted, Constants.MC_MAPPINGS_FILE.toPath());
128+
MappingTreeHelper.exportMappings(formatted, this.cacheHandler.resolveMappings("mc_mappings.tiny"));
125129
} catch (IOException e) {
126130
throw new RuntimeException("Error while writing formatted mappings", e);
127131
}
@@ -151,7 +155,7 @@ public void generateModMappings() {
151155
try {
152156
mods.visitEnd();
153157

154-
MappingTreeHelper.exportMappings(mods, Constants.REMAPPED_MAPPINGS_FILE.toPath());
158+
MappingTreeHelper.exportMappings(mods, this.cacheHandler.resolveMappings("remapped_mappings.tiny"));
155159
} catch (IOException e) {
156160
throw new RuntimeException("Error while generating mods mappings", e);
157161
}
@@ -174,7 +178,7 @@ public void generateAdditionalMappings() {
174178
additional.visitEnd();
175179

176180
try {
177-
MappingTreeHelper.exportMappings(additional, Constants.EXTRA_MAPPINGS_FILE.toPath());
181+
MappingTreeHelper.exportMappings(additional, this.cacheHandler.resolveMappings("extra_mappings.tiny"));
178182
} catch (IOException e) {
179183
throw new RuntimeException("Error while generating remappers mappings", e);
180184
}
@@ -211,7 +215,7 @@ public String getTargetNamespace() {
211215
@Override
212216
public void writeFullMappings() {
213217
try {
214-
MappingTreeHelper.exportMappings(full, Constants.FULL_MAPPINGS_FILE.toPath());
218+
MappingTreeHelper.exportMappings(full, this.cacheHandler.resolveMappings("full_mappings.tiny"));
215219
} catch (IOException e) {
216220
throw new RuntimeException(e);
217221
}

src/main/java/io/github/fabriccompatibiltylayers/modremappingapi/impl/context/v1/ModRemapperV1Context.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.github.fabriccompatibiltylayers.modremappingapi.impl.context.v1;
22

33
import fr.catcore.modremapperapi.utils.Constants;
4+
import io.github.fabriccompatibilitylayers.modremappingapi.impl.InternalCacheHandler;
45
import io.github.fabriccompatibiltylayers.modremappingapi.api.v1.MappingBuilder;
56
import io.github.fabriccompatibiltylayers.modremappingapi.api.v1.ModRemapper;
67
import io.github.fabriccompatibiltylayers.modremappingapi.impl.*;
@@ -27,7 +28,8 @@ public class ModRemapperV1Context extends BaseModRemapperContext<ModRemapper> {
2728
private final Set<RemappingFlags> remapFlags = new HashSet<>();
2829
private final List<ModRemapper> remappers = new ArrayList<>();
2930
private final MixinData mixinData = new MixinData();
30-
private final MappingsRegistryInstance mappingsRegistry = new MappingsRegistryInstance();
31+
private final InternalCacheHandler cacheHandler = new V1CacheHandler();
32+
private final MappingsRegistryInstance mappingsRegistry = new MappingsRegistryInstance(cacheHandler);
3133
private final LibraryHandler libraryHandler = new LibraryHandler();
3234
private final V1ModDiscoverer modDiscoverer = new V1ModDiscoverer();
3335

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package io.github.fabriccompatibiltylayers.modremappingapi.impl.context.v1;
2+
3+
import io.github.fabriccompatibilitylayers.modremappingapi.impl.InternalCacheHandler;
4+
import io.github.fabriccompatibiltylayers.modremappingapi.impl.utils.CacheUtils;
5+
6+
import java.io.IOException;
7+
import java.nio.file.Files;
8+
import java.nio.file.Path;
9+
10+
public class V1CacheHandler implements InternalCacheHandler {
11+
private final Path contextDirectory = CacheUtils.MAIN_FOLDER;
12+
private final Path tempDirectory = contextDirectory.resolve("temp");
13+
private final Path libsDirectory = contextDirectory.resolve("libs");
14+
15+
public V1CacheHandler() {
16+
for (Path p : new Path[] {tempDirectory, libsDirectory}) {
17+
if (!Files.exists(p)) {
18+
try {
19+
Files.createDirectories(p);
20+
} catch (IOException e) {
21+
throw new RuntimeException(e);
22+
}
23+
}
24+
}
25+
}
26+
27+
@Override
28+
public Path resolveMappings(String name) {
29+
return this.resolveRoot(name);
30+
}
31+
32+
@Override
33+
public Path resolveRoot(String name) {
34+
return contextDirectory.resolve(name);
35+
}
36+
37+
@Override
38+
public Path getTempDirectory() {
39+
return tempDirectory;
40+
}
41+
42+
@Override
43+
public Path resolveTemp(String name) {
44+
return tempDirectory.resolve(name);
45+
}
46+
47+
@Override
48+
public Path resolveCache(String name) {
49+
return null;
50+
}
51+
52+
@Override
53+
public Path resolveLibrary(String name) {
54+
return libsDirectory.resolve(name);
55+
}
56+
}

src/main/java/io/github/fabriccompatibiltylayers/modremappingapi/impl/context/v2/ModRemmaperV2Context.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,19 @@
22

33
import fr.catcore.modremapperapi.utils.Constants;
44
import io.github.fabriccompatibilitylayers.modremappingapi.api.v2.*;
5+
import io.github.fabriccompatibilitylayers.modremappingapi.impl.InternalCacheHandler;
56
import io.github.fabriccompatibiltylayers.modremappingapi.impl.LibraryHandler;
67
import io.github.fabriccompatibiltylayers.modremappingapi.impl.context.BaseModRemapperContext;
78
import io.github.fabriccompatibiltylayers.modremappingapi.impl.context.MappingsRegistryInstance;
89
import io.github.fabriccompatibiltylayers.modremappingapi.impl.context.MixinData;
910
import io.github.fabriccompatibiltylayers.modremappingapi.impl.mappings.MappingsRegistry;
1011
import io.github.fabriccompatibiltylayers.modremappingapi.impl.remapper.ModTrRemapper;
1112
import io.github.fabriccompatibiltylayers.modremappingapi.impl.remapper.SoftLockFixer;
13+
import io.github.fabriccompatibiltylayers.modremappingapi.impl.utils.CacheUtils;
1214
import net.fabricmc.tinyremapper.TinyRemapper;
1315

1416
import java.io.ByteArrayInputStream;
1517
import java.io.IOException;
16-
import java.io.StringReader;
1718
import java.nio.charset.StandardCharsets;
1819
import java.nio.file.Path;
1920
import java.util.*;
@@ -23,17 +24,22 @@ public class ModRemmaperV2Context extends BaseModRemapperContext<ModRemapper> {
2324
private final List<ModRemapper> remappers;
2425
private final Set<RemappingFlags> remapFlags = new HashSet<>();
2526
private final MixinData mixinData = new MixinData();
26-
private final MappingsRegistryInstance mappingsRegistry = new MappingsRegistryInstance();
27+
private final MappingsRegistryInstance mappingsRegistry;
2728
private final LibraryHandler libraryHandler = new LibraryHandler();
29+
private final InternalCacheHandler cacheHandler;
2830

2931
public ModRemmaperV2Context(String id, List<ModRemapper> remappers) {
3032
super(id);
3133
this.remappers = remappers;
34+
this.cacheHandler = new V2CacheHandler(CacheUtils.getCachePath(id));
35+
this.mappingsRegistry = new MappingsRegistryInstance(this.cacheHandler);
3236
}
3337

3438
@Override
3539
public void init() {
3640
for (ModRemapper remapper : remappers) {
41+
remapper.init(this.cacheHandler);
42+
3743
MappingsConfig mappings = remapper.getMappingsConfig();
3844

3945
if (mappings.getSourceNamespace() != null) {
@@ -89,7 +95,7 @@ public List<ModRemapper> discoverMods(boolean remapClassEdits) {
8995

9096
for (ModRemapper remapper : remappers) {
9197
for (ModDiscovererConfig config : remapper.getModDiscoverers()) {
92-
V2ModDiscoverer discoverer = new V2ModDiscoverer(this.contextId, config);
98+
V2ModDiscoverer discoverer = new V2ModDiscoverer(config);
9399
config2Discoverer.put(config, discoverer);
94100
candidates.addAll(discoverer.collect());
95101
}
@@ -114,7 +120,7 @@ public List<ModRemapper> discoverMods(boolean remapClassEdits) {
114120
ModDiscovererConfig config = entry.getKey();
115121

116122
candidateToOutput.putAll(
117-
config2Discoverer.get(config).computeDestinations(entry.getValue())
123+
config2Discoverer.get(config).computeDestinations(entry.getValue(), this.cacheHandler)
118124
);
119125
}
120126

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package io.github.fabriccompatibiltylayers.modremappingapi.impl.context.v2;
2+
3+
import io.github.fabriccompatibilitylayers.modremappingapi.impl.InternalCacheHandler;
4+
5+
import java.io.IOException;
6+
import java.nio.file.Files;
7+
import java.nio.file.Path;
8+
9+
public class V2CacheHandler implements InternalCacheHandler {
10+
private final Path contextDirectory;
11+
private final Path tempDirectory, cacheDirectory, mappingsDirectory, librariesDirectory;
12+
13+
public V2CacheHandler(Path contextDirectory) {
14+
this.contextDirectory = contextDirectory;
15+
tempDirectory = this.contextDirectory.resolve("temp");
16+
cacheDirectory = this.contextDirectory.resolve("cache");
17+
mappingsDirectory = this.contextDirectory.resolve("mappings");
18+
librariesDirectory = this.contextDirectory.resolve("libraries");
19+
20+
for (Path p : new Path[]{tempDirectory, cacheDirectory, mappingsDirectory, librariesDirectory}) {
21+
if (!Files.exists(p)) {
22+
try {
23+
Files.createDirectories(p);
24+
} catch (IOException e) {
25+
throw new RuntimeException(e);
26+
}
27+
}
28+
}
29+
}
30+
31+
@Override
32+
public Path resolveTemp(String name) {
33+
return tempDirectory.resolve(name);
34+
}
35+
36+
@Override
37+
public Path resolveCache(String name) {
38+
return cacheDirectory.resolve(name);
39+
}
40+
41+
@Override
42+
public Path resolveLibrary(String name) {
43+
return librariesDirectory.resolve(name);
44+
}
45+
46+
@Override
47+
public Path resolveMappings(String name) {
48+
return mappingsDirectory.resolve(name);
49+
}
50+
51+
@Override
52+
public Path resolveRoot(String name) {
53+
return this.contextDirectory.resolve(name);
54+
}
55+
56+
@Override
57+
public Path getTempDirectory() {
58+
return tempDirectory;
59+
}
60+
}

0 commit comments

Comments
 (0)