Skip to content

Commit 31a47ad

Browse files
committed
Revert "Add support for complex rules in version.json"
This reverts commit 99a1b10.
1 parent 99a1b10 commit 31a47ad

File tree

7 files changed

+77
-84
lines changed

7 files changed

+77
-84
lines changed

settings.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ dependencyResolutionManagement {
3030
library 'utils-download', 'net.minecraftforge', 'download-utils' version '0.3.1'
3131
library 'utils-files', 'net.minecraftforge', 'file-utils' version '0.3.1'
3232
library 'utils-hash', 'net.minecraftforge', 'hash-utils' version '0.1.9'
33-
library 'utils-data', 'net.minecraftforge', 'json-data-utils' version '0.3.0'
33+
library 'utils-data', 'net.minecraftforge', 'json-data-utils' version '0.2.3'
3434
library 'utils-logging', 'net.minecraftforge', 'log-utils' version '0.3.1'
3535
bundle 'utils', ['utils-download', 'utils-files', 'utils-hash', 'utils-data', 'utils-logging']
3636

src/main/java/net/minecraftforge/mcmaven/impl/repo/Repo.java

Lines changed: 20 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
import net.minecraftforge.mcmaven.impl.util.POMBuilder;
1515
import net.minecraftforge.mcmaven.impl.util.Task;
1616
import net.minecraftforge.mcmaven.impl.util.Util;
17-
import net.minecraftforge.util.data.OS;
1817
import net.minecraftforge.util.data.json.JsonData;
1918
import net.minecraftforge.util.file.FileUtils;
2019
import net.minecraftforge.util.hash.HashStore;
@@ -25,14 +24,8 @@
2524
import java.io.IOException;
2625
import java.nio.charset.StandardCharsets;
2726
import java.util.ArrayList;
28-
import java.util.Arrays;
29-
import java.util.Collection;
30-
import java.util.Collections;
31-
import java.util.EnumMap;
32-
import java.util.EnumSet;
3327
import java.util.HashMap;
3428
import java.util.List;
35-
import java.util.Objects;
3629
import java.util.function.Consumer;
3730
import java.util.function.Supplier;
3831

@@ -109,27 +102,23 @@ protected Supplier<GradleModule.Variant[]> simpleVariant(String name, Mappings m
109102
// Classes needs a variant for each OS type so that we can have different natives
110103
protected GradleModule.Variant[] classVariants(Mappings mappings, MCPSide side, Artifact... extraDeps) {
111104
var all = new ArrayList<Artifact>();
112-
var natives = new EnumMap<GradleAttributes.OperatingSystemFamily, List<Artifact>>(GradleAttributes.OperatingSystemFamily.class);
113-
natives.put(GradleAttributes.OperatingSystemFamily.WINDOWS, new ArrayList<>());
114-
natives.put(GradleAttributes.OperatingSystemFamily.MACOS, new ArrayList<>());
115-
natives.put(GradleAttributes.OperatingSystemFamily.LINUX, new ArrayList<>());
105+
var natives = new HashMap<GradleAttributes.OperatingSystemFamily, List<Artifact>>();
116106

117-
Consumer<Artifact> addToVariants = artifact -> {
118-
if (artifact == null) return;
119-
120-
if (GradleAttributes.OperatingSystemFamily.allowsAll(artifact)) {
107+
for (var artifact : side.getMCLibraries()) {
108+
var variant = GradleAttributes.OperatingSystemFamily.from(artifact.getOs());
109+
if (variant == null)
121110
all.add(artifact);
122-
} else {
123-
for (var os : artifact.getOs()) {
124-
GradleAttributes.OperatingSystemFamily variant = GradleAttributes.OperatingSystemFamily.from(os);
125-
natives.get(variant).add(artifact);
126-
}
127-
}
128-
};
111+
else
112+
natives.computeIfAbsent(variant, k -> new ArrayList<>()).add(artifact);
113+
}
129114

130-
side.getMCLibraries().forEach(addToVariants);
131-
side.getMCPConfigLibraries().forEach(addToVariants);
132-
Arrays.asList(extraDeps).forEach(addToVariants);
115+
for (var artifact : side.getMCPConfigLibraries())
116+
all.add(artifact);
117+
118+
for (var extra : extraDeps) {
119+
if (extra != null)
120+
all.add(extra);
121+
}
133122

134123
var java = Util.replace(
135124
JsonData.minecraftVersion(side.getMCP().getMinecraftTasks().versionJson.get()),
@@ -158,14 +147,12 @@ protected GradleModule.Variant[] classVariants(Mappings mappings, MCPSide side,
158147
// Launching the game wouldn't work because of that. If we need a common variant, it would need to include everything
159148
// But since FG7 will never not have the OS attribute, it wouldn't be used anyways.
160149
//variants.add(GradleModule.Variant.of("classes", common));
161-
natives.forEach((os, deps) -> {
162-
variants.add(
163-
GradleModule.Variant
164-
.of("classes-" + os.getValue(), common)
165-
.attribute(os)
166-
.deps(deps)
167-
);
168-
});
150+
for (var e : natives.entrySet()) {
151+
var variant = GradleModule.Variant.of("classes-" + e.getKey().getValue(), common);
152+
variant.attribute(e.getKey());
153+
variant.deps(e.getValue());
154+
variants.add(variant);
155+
}
169156

170157
return variants.toArray(new GradleModule.Variant[0]);
171158
}

src/main/java/net/minecraftforge/mcmaven/impl/repo/forge/ForgeRepo.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
import net.minecraftforge.mcmaven.impl.util.ComparableVersion;
1717
import net.minecraftforge.mcmaven.impl.util.Constants;
1818
import net.minecraftforge.mcmaven.impl.GlobalOptions;
19-
import net.minecraftforge.mcmaven.impl.util.GradleAttributes;
2019
import net.minecraftforge.mcmaven.impl.util.POMBuilder;
2120
import net.minecraftforge.mcmaven.impl.util.Task;
2221
import net.minecraftforge.mcmaven.impl.util.Util;
@@ -245,7 +244,7 @@ private static Task pom(File build, Patcher patcher, String version, Artifact cl
245244
if (mappings != null)
246245
dependencies.add(mappings);
247246

248-
patcher.forAllLibraries(dependencies::add, GradleAttributes.OperatingSystemFamily::allowsAll);
247+
patcher.forAllLibraries(dependencies::add, Artifact::hasNoOs);
249248
});
250249

251250
FileUtils.ensureParent(output);

src/main/java/net/minecraftforge/mcmaven/impl/repo/mcpconfig/MCPConfigRepo.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import net.minecraftforge.mcmaven.impl.cache.Cache;
1212
import net.minecraftforge.mcmaven.impl.mappings.Mappings;
1313
import net.minecraftforge.mcmaven.impl.util.Artifact;
14-
import net.minecraftforge.mcmaven.impl.util.GradleAttributes;
1514
import net.minecraftforge.mcmaven.impl.util.POMBuilder;
1615
import net.minecraftforge.mcmaven.impl.util.Task;
1716
import net.minecraftforge.mcmaven.impl.util.Util;
@@ -236,7 +235,7 @@ private static Task pom(File build, String side, MCPSide mcpSide, String version
236235
GlobalOptions.assertNotCacheOnly();
237236

238237
var builder = new POMBuilder("net.minecraft", side, version).preferGradleModule().dependencies(dependencies -> {
239-
mcpSide.forAllLibraries(dependencies::add, GradleAttributes.OperatingSystemFamily::allowsAll);
238+
mcpSide.forAllLibraries(dependencies::add, Artifact::hasNoOs);
240239
});
241240

242241
FileUtils.ensureParent(output);

src/main/java/net/minecraftforge/mcmaven/impl/repo/mcpconfig/MCPTaskFactory.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -618,7 +618,9 @@ private File listLibraries(Task jsonTask, File output) {
618618

619619
buf.append("-e=").append(target.getAbsolutePath()).append('\n');
620620

621-
var artifact = Artifact.from(lib.coord).withOS(lib.os);
621+
var artifact = Artifact.from(lib.coord);
622+
if (lib.os != null && lib.os != OS.UNKNOWN)
623+
artifact = artifact.withOS(lib.os);
622624

623625
downloadedLibs.add(new Lib(artifact, target));
624626
cache.add(lib.coord, target);

src/main/java/net/minecraftforge/mcmaven/impl/util/Artifact.java

Lines changed: 51 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@
1010
import java.io.File;
1111
import java.io.Serial;
1212
import java.io.Serializable;
13-
import java.util.Arrays;
14-
import java.util.EnumSet;
1513
import java.util.Locale;
1614
import java.util.Objects;
1715
import java.util.regex.Pattern;
@@ -29,7 +27,8 @@ public class Artifact implements Comparable<Artifact>, Serializable {
2927
private final @Nullable String version;
3028
private final @Nullable String classifier;
3129
private final String ext;
32-
private final EnumSet<OS> os;
30+
private final OS os;
31+
private final Arch arch;
3332

3433
// Cached after building the first time we're asked
3534
// Transient field so these aren't serialized
@@ -59,7 +58,7 @@ public static Artifact from(String descriptor) {
5958
* @return The created artifact
6059
*/
6160
public static Artifact from(String group, String name, String version) {
62-
return new Artifact(group, name, version, null, null, OS.UNKNOWN);
61+
return new Artifact(group, name, version, null, null, OS.UNKNOWN, Arch.UNKNOWN);
6362
}
6463

6564
/**
@@ -72,7 +71,7 @@ public static Artifact from(String group, String name, String version) {
7271
* @return The created artifact
7372
*/
7473
public static Artifact from(String group, String name, String version, @Nullable String classifier) {
75-
return new Artifact(group, name, version, classifier, null, OS.UNKNOWN);
74+
return new Artifact(group, name, version, classifier, null, OS.UNKNOWN, Arch.UNKNOWN);
7675
}
7776

7877
/**
@@ -86,7 +85,7 @@ public static Artifact from(String group, String name, String version, @Nullable
8685
* @return The created artifact
8786
*/
8887
public static Artifact from(String group, String name, String version, @Nullable String classifier, @Nullable String ext) {
89-
return new Artifact(group, name, version, classifier, ext, OS.UNKNOWN);
88+
return new Artifact(group, name, version, classifier, ext, OS.UNKNOWN, Arch.UNKNOWN);
9089
}
9190

9291
private Artifact(String descriptor) {
@@ -107,24 +106,44 @@ private Artifact(String descriptor) {
107106

108107
this.version = pts.length > 2 ? pts[2] : null;
109108
this.classifier = pts.length > 3 ? pts[3] : null;
110-
this.os = EnumSet.noneOf(OS.class);
109+
this.os = this.classifier != null ? findOS(this.classifier) : OS.UNKNOWN;
110+
this.arch = this.classifier != null ? findArch(this.classifier) : Arch.UNKNOWN;
111111
}
112112

113-
private Artifact(String group, String name, String version, @Nullable String classifier, @Nullable String ext, OS os) {
114-
this(group, name, version, classifier, ext, os, new OS[0]);
115-
}
116-
117-
private Artifact(String group, String name, String version, @Nullable String classifier, @Nullable String ext, OS osFirst, OS... osRest) {
118-
this(group, name, version, classifier, ext, EnumSet.of(osFirst, osRest));
119-
}
120-
121-
private Artifact(String group, String name, String version, @Nullable String classifier, @Nullable String ext, EnumSet<OS> os) {
113+
private Artifact(String group, String name, String version, @Nullable String classifier, @Nullable String ext, OS os, Arch arch) {
122114
this.group = group;
123115
this.name = name;
124116
this.version = version;
125117
this.classifier = classifier;
126118
this.ext = Objects.requireNonNullElse(ext, "jar");
127-
this.os = os;
119+
this.os = os == OS.UNKNOWN && classifier != null ? findOS(classifier) : os;
120+
this.arch = arch == Arch.UNKNOWN && classifier != null ? findArch(classifier) : arch;
121+
}
122+
123+
private static OS findOS(String classifier) {
124+
for (var s : classifier.split("-")) {
125+
if (s.isBlank()) continue;
126+
127+
var osCandidate = OS.byName(s);
128+
if (osCandidate != OS.UNKNOWN) {
129+
return osCandidate;
130+
}
131+
}
132+
133+
return OS.UNKNOWN;
134+
}
135+
136+
private static Arch findArch(String classifier) {
137+
for (var s : classifier.split("-")) {
138+
if (s.isBlank()) continue;
139+
140+
var archCandidate = Arch.byName(s);
141+
if (archCandidate != Arch.UNKNOWN) {
142+
return archCandidate;
143+
}
144+
}
145+
146+
return Arch.UNKNOWN;
128147
}
129148

130149
/**
@@ -196,13 +215,18 @@ public String getExtension() {
196215
return ext;
197216
}
198217

199-
public EnumSet<OS> getOs() {
218+
/** @return The os of this artifact (defaults to {@link OS#UNKNOWN}) */
219+
public OS getOs() {
200220
return os;
201221
}
202222

203-
/** @return The os of this artifact (defaults to {@link OS#UNKNOWN}) */
204-
public boolean allowsOS(OS os) {
205-
return this.os.isEmpty() || this.os.contains(os);
223+
public boolean hasNoOs() {
224+
return this.os == OS.UNKNOWN;
225+
}
226+
227+
/** @return The arch of this artifact (defaults to {@link Arch#UNKNOWN}) */
228+
public Arch getArch() {
229+
return arch;
206230
}
207231

208232
/** @return The file name of this artifact */
@@ -235,25 +259,23 @@ public boolean isSnapshot() {
235259
* @return The new artifact
236260
*/
237261
public Artifact withVersion(String version) {
238-
return new Artifact(group, name, version, classifier, ext, os);
262+
return new Artifact(group, name, version, classifier, ext, os, arch);
239263
}
240264

241265
public Artifact withClassifier(String classifier) {
242-
return new Artifact(group, name, version, classifier, ext, os);
266+
return new Artifact(group, name, version, classifier, ext, os, arch);
243267
}
244268

245269
public Artifact withExtension(String ext) {
246-
return new Artifact(group, name, version, classifier, ext, os);
270+
return new Artifact(group, name, version, classifier, ext, os, arch);
247271
}
248272

249273
public Artifact withOS(OS os) {
250-
var osSet = EnumSet.copyOf(this.os);
251-
osSet.add(os);
252-
return new Artifact(group, name, version, classifier, ext, osSet);
274+
return new Artifact(group, name, version, classifier, ext, os, arch);
253275
}
254276

255-
public Artifact withOS(EnumSet<OS> os) {
256-
return new Artifact(group, name, version, classifier, ext, os);
277+
public Artifact withArch(Arch arch) {
278+
return new Artifact(group, name, version, classifier, ext, os, arch);
257279
}
258280

259281
@Override

src/main/java/net/minecraftforge/mcmaven/impl/util/GradleAttributes.java

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -32,21 +32,5 @@ public String getValue() {
3232
case null, default -> null;
3333
};
3434
}
35-
36-
public OS toOS() {
37-
return switch (this) {
38-
case WINDOWS -> OS.WINDOWS;
39-
case MACOS -> OS.MACOS;
40-
case LINUX -> OS.LINUX;
41-
};
42-
}
43-
44-
public static boolean allowsAll(Artifact artifact) {
45-
for (var os : OperatingSystemFamily.values()) {
46-
if (!artifact.allowsOS(os.toOS())) return false;
47-
}
48-
49-
return true;
50-
}
5135
}
5236
}

0 commit comments

Comments
 (0)