Skip to content

Commit a312a91

Browse files
committed
Remove Container and Inheritable from plugin-meta
1 parent cad24e6 commit a312a91

7 files changed

Lines changed: 80 additions & 20 deletions

File tree

forge/src/applaunch/java/org/spongepowered/forge/applaunch/mod/metadata/PluginFileConfigurable.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ public <T> Optional<T> getConfigElement(final String... key) {
6565

6666
if ("license".equals(query)) {
6767
return (Optional<T>) Optional.of(this.plugins.values().stream()
68-
.map(m -> m.container().license()).distinct().collect(Collectors.joining(", ")));
68+
.flatMap(m -> m.license().stream()).distinct().collect(Collectors.joining(", ")));
6969
}
7070

7171
if (key.length == 2) {

forge/src/main/java/org/spongepowered/forge/launch/plugin/PluginMetadataConverter.java

Lines changed: 33 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,28 +25,50 @@
2525
package org.spongepowered.forge.launch.plugin;
2626

2727
import net.minecraftforge.fml.loading.moddiscovery.ModInfo;
28+
import net.minecraftforge.forgespi.language.IModFileInfo;
2829
import net.minecraftforge.forgespi.language.IModInfo;
30+
import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
31+
import org.apache.maven.artifact.versioning.VersionRange;
2932
import org.spongepowered.plugin.metadata.PluginMetadata;
33+
import org.spongepowered.plugin.metadata.builtin.InheritableMetadata;
3034
import org.spongepowered.plugin.metadata.builtin.StandardPluginMetadata;
3135
import org.spongepowered.plugin.metadata.model.PluginContributor;
3236
import org.spongepowered.plugin.metadata.model.PluginDependency;
3337
import org.spongepowered.plugin.metadata.model.PluginLinks;
38+
import org.spongepowered.plugin.metadata.model.PluginLoaderSpec;
3439

3540
import java.net.URISyntaxException;
3641
import java.net.URL;
42+
import java.util.List;
3743
import java.util.Optional;
3844

3945
public final class PluginMetadataConverter {
46+
private static final VersionRange ANY_VERSION;
47+
48+
static {
49+
try {
50+
ANY_VERSION = VersionRange.createFromVersionSpec("*");
51+
} catch (InvalidVersionSpecificationException e) {
52+
throw new RuntimeException(e);
53+
}
54+
}
4055

4156
@SuppressWarnings("UnstableApiUsage")
4257
public static PluginMetadata modToPlugin(final ModInfo info) {
43-
final StandardPluginMetadata.Builder builder = StandardPluginMetadata.builder();
44-
builder
45-
.id(info.getModId())
58+
final List<IModFileInfo.LanguageSpec> loaders = info.getOwningFile().requiredLanguageLoaders();
59+
final PluginLoaderSpec loaderSpec;
60+
if (loaders.isEmpty()) {
61+
loaderSpec = new PluginLoaderSpec("forge", PluginMetadataConverter.ANY_VERSION);
62+
} else {
63+
final VersionRange loaderVersion = loaders.getFirst().acceptedVersions();
64+
loaderSpec = new PluginLoaderSpec("forge:" + loaders.getFirst().languageName(), loaderVersion == null ? PluginMetadataConverter.ANY_VERSION : loaderVersion);
65+
}
66+
67+
final InheritableMetadata.Builder builder = InheritableMetadata.builder()
4668
.name(info.getDisplayName())
47-
.version(info.getVersion().toString())
69+
.version(info.getVersion())
70+
.loader(loaderSpec)
4871
.description(info.getDescription())
49-
.entrypoint("unknown")
5072
.addContributor(new PluginContributor(info.getConfigElement("authors").orElse("unknown").toString(), Optional.empty()))
5173
.properties(info.getModProperties());
5274

@@ -63,7 +85,12 @@ public static PluginMetadata modToPlugin(final ModInfo info) {
6385
false
6486
));
6587
}
66-
return builder.build();
88+
89+
return StandardPluginMetadata.builder()
90+
.id(info.getModId())
91+
.entrypoint("unknown")
92+
.override(builder.build())
93+
.build();
6794
}
6895

6996
private static PluginDependency.LoadOrder orderingToLoad(final IModInfo.Ordering ordering) {

neoforge/src/applaunch/java/org/spongepowered/neoforge/applaunch/mod/metadata/PluginFileConfigurable.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ public <T> Optional<T> getConfigElement(final String... key) {
6565

6666
if ("license".equals(query)) {
6767
return (Optional<T>) Optional.of(this.plugins.values().stream()
68-
.map(m -> m.container().license()).distinct().collect(Collectors.joining(", ")));
68+
.flatMap(m -> m.license().stream()).distinct().collect(Collectors.joining(", ")));
6969
}
7070

7171
if (key.length == 2) {

neoforge/src/main/java/org/spongepowered/neoforge/launch/plugin/PluginMetadataConverter.java

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,27 +25,50 @@
2525
package org.spongepowered.neoforge.launch.plugin;
2626

2727
import net.neoforged.fml.loading.moddiscovery.ModInfo;
28+
import net.neoforged.neoforgespi.language.IModFileInfo;
2829
import net.neoforged.neoforgespi.language.IModInfo;
30+
import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
31+
import org.apache.maven.artifact.versioning.VersionRange;
2932
import org.spongepowered.plugin.metadata.PluginMetadata;
33+
import org.spongepowered.plugin.metadata.builtin.InheritableMetadata;
3034
import org.spongepowered.plugin.metadata.builtin.StandardPluginMetadata;
3135
import org.spongepowered.plugin.metadata.model.PluginContributor;
3236
import org.spongepowered.plugin.metadata.model.PluginDependency;
3337
import org.spongepowered.plugin.metadata.model.PluginLinks;
38+
import org.spongepowered.plugin.metadata.model.PluginLoaderSpec;
3439

3540
import java.net.URISyntaxException;
3641
import java.net.URL;
42+
import java.util.List;
3743
import java.util.Optional;
3844

3945
public final class PluginMetadataConverter {
46+
private static final VersionRange ANY_VERSION;
47+
48+
static {
49+
try {
50+
ANY_VERSION = VersionRange.createFromVersionSpec("*");
51+
} catch (InvalidVersionSpecificationException e) {
52+
throw new RuntimeException(e);
53+
}
54+
}
4055

4156
public static PluginMetadata modToPlugin(final ModInfo info) {
42-
final StandardPluginMetadata.Builder builder = StandardPluginMetadata.builder();
57+
final List<IModFileInfo.LanguageSpec> loaders = info.getOwningFile().requiredLanguageLoaders();
58+
final PluginLoaderSpec loaderSpec;
59+
if (loaders.isEmpty()) {
60+
loaderSpec = new PluginLoaderSpec("neoforge", PluginMetadataConverter.ANY_VERSION);
61+
} else {
62+
final VersionRange loaderVersion = loaders.getFirst().acceptedVersions();
63+
loaderSpec = new PluginLoaderSpec("neoforge:" + loaders.getFirst().languageName(), loaderVersion == null ? PluginMetadataConverter.ANY_VERSION : loaderVersion);
64+
}
65+
66+
final InheritableMetadata.Builder builder = InheritableMetadata.builder();
4367
builder
44-
.id(info.getModId())
4568
.name(info.getDisplayName())
46-
.version(info.getVersion().toString())
69+
.version(info.getVersion())
70+
.loader(loaderSpec)
4771
.description(info.getDescription())
48-
.entrypoint("unknown")
4972
.addContributor(new PluginContributor(info.getConfigElement("authors").orElse("unknown").toString(), Optional.empty()))
5073
.properties(info.getModProperties());
5174

@@ -62,7 +85,12 @@ public static PluginMetadata modToPlugin(final ModInfo info) {
6285
false
6386
));
6487
}
65-
return builder.build();
88+
89+
return StandardPluginMetadata.builder()
90+
.id(info.getModId())
91+
.entrypoint("unknown")
92+
.override(builder.build())
93+
.build();
6694
}
6795

6896
private static PluginDependency.LoadOrder orderingToLoad(final IModInfo.Ordering ordering) {

src/applaunch/java/org/spongepowered/common/applaunch/plugin/discovery/PluginDiscovery.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ public final class Candidate {
126126
private final PluginResource resource;
127127
private final List<PluginResourceLocator> locators = new ArrayList<>();
128128
private @MonotonicNonNull UnknownResourceStrategy unknownResourceStrategy;
129-
private final SequencedSet<PluginMetadata> metadata = new LinkedHashSet<>();
129+
private final SequencedMap<String, PluginMetadata> metadata = new LinkedHashMap<>();
130130
private boolean locatorFound, readerFound, loaderFound, modFound;
131131

132132
public Candidate(final PluginResource resource, final UnknownResourceStrategy unknownResourceStrategy) {
@@ -172,16 +172,21 @@ public List<PluginResourceLocator> locators() {
172172
public void readMetadata() {
173173
this.metadata.clear();
174174
for (final PluginMetadataReader reader : PluginDiscovery.this.readers) {
175+
final Collection<? extends PluginMetadata> plugins;
175176
try {
176-
this.metadata.addAll(reader.readPluginMetadata(PluginDiscovery.this.environment, this.resource, this.locators()));
177+
plugins = reader.readPluginMetadata(PluginDiscovery.this.environment, this.resource, this.locators());
177178
} catch (final Exception e) {
178179
PluginDiscovery.this.environment.logger().error("Service '{}' failed to read plugin metadata", reader.name(), e);
180+
continue;
181+
}
182+
for (final PluginMetadata plugin : plugins) {
183+
this.metadata.put(plugin.id(), plugin);
179184
}
180185
}
181186
}
182187

183-
public SequencedSet<PluginMetadata> metadata() {
184-
return Collections.unmodifiableSequencedSet(this.metadata);
188+
public SequencedCollection<PluginMetadata> metadata() {
189+
return Collections.unmodifiableSequencedCollection(this.metadata.sequencedValues());
185190
}
186191

187192
public boolean pluginFound() {

src/main/java/org/spongepowered/common/launch/plugin/loader/PluginCandidateFactory.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
import org.spongepowered.plugin.PluginLoader;
3030
import org.spongepowered.plugin.discovery.PluginResource;
3131
import org.spongepowered.plugin.metadata.PluginMetadata;
32-
import org.spongepowered.plugin.metadata.model.ContainerLoader;
32+
import org.spongepowered.plugin.metadata.model.PluginLoaderSpec;
3333

3434
import java.util.Map;
3535
import java.util.NoSuchElementException;
@@ -49,7 +49,7 @@ protected <T> ServiceLoader<T> newServiceLoader(final Class<T> serviceClass) {
4949
}
5050

5151
public PluginCandidate create(final PluginResource resource, final PluginMetadata metadata) {
52-
final ContainerLoader loaderSpec = metadata.container().loader();
52+
final PluginLoaderSpec loaderSpec = metadata.loader();
5353
final PluginLoader loader = this.loaders.get(loaderSpec.name());
5454
if (loader == null) {
5555
throw new NoSuchElementException("Cannot find loader " + loaderSpec.name());

vanilla/src/applaunch/java/org/spongepowered/vanilla/applaunch/plugin/discovery/MinecraftMetadataReader.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ public Collection<? extends PluginMetadata> readPluginMetadata(final Environment
5858
}
5959

6060
try (final BufferedReader reader = new BufferedReader(new InputStreamReader(input, StandardCharsets.UTF_8))) {
61-
return MetadataParser.read(reader).metadata();
61+
return MetadataParser.read(reader).plugins();
6262
}
6363
}
6464
return List.of();

0 commit comments

Comments
 (0)