Skip to content

Commit

Permalink
Revert "Share the PluginLoader instance (#3062)"
Browse files Browse the repository at this point in the history
This reverts commit a73dbbb.
  • Loading branch information
Zidane committed Jul 22, 2020
1 parent 013fdda commit 6b05c5e
Show file tree
Hide file tree
Showing 10 changed files with 84 additions and 82 deletions.
14 changes: 11 additions & 3 deletions src/launch/java/org/spongepowered/common/launch/Launcher.java
Original file line number Diff line number Diff line change
Expand Up @@ -55,9 +55,9 @@ public abstract class Launcher {
private final List<PluginContainer> launcherPlugins;
private PluginContainer minecraftPlugin, apiPlugin, commonPlugin;

protected Launcher(final PluginEnvironment pluginEnvironment, final SpongePluginManager pluginManager) {
protected Launcher(final SpongePluginManager pluginManager) {
this.logger = LogManager.getLogger("Sponge");
this.pluginEnvironment = pluginEnvironment;
this.pluginEnvironment = new PluginEnvironment();
this.pluginManager = pluginManager;
this.launcherPlugins = new ArrayList<>();
}
Expand Down Expand Up @@ -150,10 +150,18 @@ public final List<PluginContainer> getLauncherPlugins() {
return this.launcherPlugins;
}

protected void onLaunch(final String[] args) {
protected void onLaunch(final String pluginSpiVersion, final Path baseDirectory, final List<Path> pluginDirectories, final String[] args) {
this.populateBlackboard(pluginSpiVersion, baseDirectory, pluginDirectories);
this.createInternalPlugins();
}

protected void populateBlackboard(final String pluginSpiVersion, final Path baseDirectory, final List<Path> pluginDirectories) {
final Blackboard blackboard = this.getPluginEnvironment().getBlackboard();
blackboard.getOrCreate(PluginKeys.VERSION, () -> pluginSpiVersion);
blackboard.getOrCreate(PluginKeys.BASE_DIRECTORY, () -> baseDirectory);
blackboard.getOrCreate(PluginKeys.PLUGIN_DIRECTORIES, () -> pluginDirectories);
}

private void createInternalPlugins() {
final Path gameDirectory = this.pluginEnvironment.getBlackboard().get(PluginKeys.BASE_DIRECTORY).get();
try {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,18 +28,20 @@
import net.minecraft.client.main.Main;
import org.spongepowered.common.SpongeBootstrap;
import org.spongepowered.common.launch.Launcher;
import org.spongepowered.vanilla.launch.plugin.PluginLoader;

import java.nio.file.Path;
import java.util.List;

public final class ClientLauncher extends VanillaLauncher {

protected ClientLauncher(final PluginLoader pluginLoader, final Stage injectionStage) {
super(pluginLoader, injectionStage);
protected ClientLauncher(final Stage injectionStage) {
super(injectionStage);
}

public static void launch(final PluginLoader pluginLoader, final Boolean isDeveloperEnvironment, final String[] args) {
final ClientLauncher launcher = new ClientLauncher(pluginLoader, isDeveloperEnvironment ? Stage.DEVELOPMENT : Stage.PRODUCTION);
public static void launch(final String pluginSpiVersion, final Path baseDirectory, final List<Path> pluginDirectories, final Boolean isDeveloperEnvironment, final String[] args) {
final ClientLauncher launcher = new ClientLauncher(isDeveloperEnvironment ? Stage.DEVELOPMENT : Stage.PRODUCTION);
Launcher.setInstance(launcher);
launcher.onLaunch(args);
launcher.onLaunch(pluginSpiVersion, baseDirectory, pluginDirectories, args);
}

@Override
Expand All @@ -48,11 +50,10 @@ public boolean isDedicatedServer() {
}

@Override
public void onLaunch(final String[] args) {
super.onLaunch(args);
public void onLaunch(final String pluginSpiVersion, final Path baseDirectory, final List<Path> pluginDirectories, final String[] args) {
super.onLaunch(pluginSpiVersion, baseDirectory, pluginDirectories, args);
this.getLogger().info("Loading Minecraft Client, please wait...");

SpongeBootstrap.perform("Client", () -> Main.main(args));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -30,34 +30,31 @@
import org.spongepowered.api.Server;
import org.spongepowered.common.SpongeBootstrap;
import org.spongepowered.common.launch.Launcher;
import org.spongepowered.vanilla.launch.plugin.PluginLoader;

import java.nio.file.Path;
import java.util.List;

public final class DedicatedServerLauncher extends VanillaLauncher {

protected DedicatedServerLauncher(final PluginLoader pluginLoader, final Stage injectionStage) {
super(pluginLoader, injectionStage);
protected DedicatedServerLauncher(final Stage injectionStage) {
super(injectionStage);
}

public static void launch(final PluginLoader pluginLoader, final Boolean isDeveloperEnvironment, final String[] args) {
final DedicatedServerLauncher launcher = new DedicatedServerLauncher(pluginLoader, isDeveloperEnvironment ? Stage.DEVELOPMENT : Stage.PRODUCTION);
public static void launch(final String pluginSpiVersion, final Path baseDirectory, final List<Path> pluginDirectories, final Boolean isDeveloperEnvironment, final String[] args) {
final DedicatedServerLauncher launcher = new DedicatedServerLauncher(isDeveloperEnvironment ? Stage.DEVELOPMENT : Stage.PRODUCTION);
Launcher.setInstance(launcher);
launcher.onLaunch(args);
launcher.launchPlatform(pluginSpiVersion, baseDirectory, pluginDirectories, args);
}

@Override
public boolean isDedicatedServer() {
return true;
}

@Override
protected void onLaunch(final String[] args) {
super.onLaunch(args);
this.getLogger().info("Loading Minecraft Server, please wait...");
public void launchPlatform(final String pluginSpiVersion, final Path baseDirectory, final List<Path> pluginDirectories, final String[] args) {
super.onLaunch(pluginSpiVersion, baseDirectory, pluginDirectories, args);
this.getLogger().info("Loading Sponge, please wait...");

SpongeBootstrap.perform("Server", () -> MinecraftServer.main(args));
}

@Override
public boolean isDedicatedServer() {
return true;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -39,13 +39,11 @@

public abstract class VanillaLauncher extends Launcher {

private final PluginLoader pluginLoader;
private final Stage injectionStage;
private PluginContainer vanillaPlugin;

protected VanillaLauncher(final PluginLoader pluginLoader, final Stage injectionStage) {
super(pluginLoader.getEnvironment(), new VanillaPluginManager());
this.pluginLoader = pluginLoader;
protected VanillaLauncher(Stage injectionStage) {
super(new VanillaPluginManager());
this.injectionStage = injectionStage;
}

Expand All @@ -61,9 +59,12 @@ public final Stage getInjectionStage() {

@Override
public final void loadPlugins() {
this.pluginLoader.setPluginManager(this.getPluginManager());
this.pluginLoader.createPluginCandidates();
this.pluginLoader.createPlugins();
final PluginLoader pluginLoader = new PluginLoader(this.getPluginEnvironment(), this.getPluginManager());
pluginLoader.discoverLanguageServices();
pluginLoader.initialize();
pluginLoader.discoverPluginResources();
pluginLoader.createPluginCandidates();
pluginLoader.createPlugins();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
*/
package org.spongepowered.vanilla.launch.plugin;

import com.google.common.base.Preconditions;
import org.spongepowered.common.launch.plugin.SpongePluginManager;
import org.spongepowered.plugin.InvalidPluginException;
import org.spongepowered.plugin.PluginCandidate;
Expand All @@ -44,13 +45,14 @@
public final class PluginLoader {

private final PluginEnvironment pluginEnvironment;
private SpongePluginManager pluginManager;
private final SpongePluginManager pluginManager;
private final Map<String, PluginLanguageService<PluginContainer>> languageServices;
private final Map<String, List<Path>> pluginFiles;
private final Map<PluginLanguageService<PluginContainer>, List<PluginCandidate>> pluginCandidates;

public PluginLoader(final PluginEnvironment pluginEnvironment) {
public PluginLoader(final PluginEnvironment pluginEnvironment, final SpongePluginManager pluginManager) {
this.pluginEnvironment = pluginEnvironment;
this.pluginManager = pluginManager;
this.languageServices = new HashMap<>();
this.pluginFiles = new HashMap<>();
this.pluginCandidates = new HashMap<>();
Expand All @@ -60,10 +62,6 @@ public PluginEnvironment getEnvironment() {
return this.pluginEnvironment;
}

public void setPluginManager(final SpongePluginManager pluginManager) {
this.pluginManager = pluginManager;
}

public Map<String, PluginLanguageService<?>> getServices() {
return Collections.unmodifiableMap(this.languageServices);
}
Expand Down Expand Up @@ -116,9 +114,7 @@ public void createPluginCandidates() {
}

public void createPlugins() {
if (this.pluginManager == null) {
throw new RuntimeException("Attempted to create plugins before the PluginManager was created!");
}
Preconditions.checkNotNull(this.pluginManager, "Attempt made to create containers outside the game classloader!");

for (final Map.Entry<PluginLanguageService<PluginContainer>, List<PluginCandidate>> languageCandidates : this.pluginCandidates.entrySet()) {
final PluginLanguageService<PluginContainer> languageService = languageCandidates.getKey();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@
import joptsimple.OptionSet;
import joptsimple.util.PathConverter;
import joptsimple.util.PathProperties;
import org.spongepowered.vanilla.launch.plugin.PluginLoader;
import org.spongepowered.vanilla.modlauncher.util.ArgumentList;
import org.spongepowered.plugin.PluginEnvironment;
import org.spongepowered.plugin.PluginKeys;
Expand All @@ -43,15 +42,7 @@

public final class Main {

/**
* The {@link PluginEnvironment environment} plugins are running in.
*/
public static final PluginEnvironment pluginEnvironment = new PluginEnvironment();

/**
* The {@link PluginLoader loader} plugins are loaded by.
*/
public static final PluginLoader pluginLoader = new PluginLoader(Main.pluginEnvironment);
private static PluginEnvironment pluginEnvironment;

public static void main(final String[] args) throws IOException {
final OptionParser parser = new OptionParser();
Expand All @@ -60,6 +51,7 @@ public static void main(final String[] args) throws IOException {
final OptionSet optionSet = parser.parse(args);

final Path gameDirectory = optionSet.valueOf(gameDir);
Main.pluginEnvironment = new PluginEnvironment();
final String implementationVersion = PluginEnvironment.class.getPackage().getImplementationVersion();
Main.pluginEnvironment.getBlackboard().getOrCreate(PluginKeys.VERSION, () -> implementationVersion == null ? "dev" : implementationVersion);
Main.pluginEnvironment.getBlackboard().getOrCreate(PluginKeys.BASE_DIRECTORY, () -> gameDirectory);
Expand All @@ -74,4 +66,7 @@ public static void main(final String[] args) throws IOException {
Launcher.main(lst.getArguments());
}

public static PluginEnvironment getLaunchPluginEnvironment() {
return Main.pluginEnvironment;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -57,12 +57,6 @@ public abstract class AbstractSpongeLaunchHandler implements ILaunchHandlerServi
* be to exclude {@code "org.neptune."}.
*/
protected static final List<String> EXCLUDED_PACKAGES = Arrays.asList(
// Libraries
"org.spongepowered.plugin.Blackboard",
"org.spongepowered.plugin.PluginEnvironment",

// Implementation
"org.spongepowered.vanilla.launch.plugin.PluginLoader"
);

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,13 @@
package org.spongepowered.vanilla.modlauncher.bootstrap;

import cpw.mods.modlauncher.api.ITransformingClassLoader;
import org.spongepowered.vanilla.launch.plugin.PluginLoader;
import org.spongepowered.plugin.PluginEnvironment;
import org.spongepowered.plugin.PluginKeys;
import org.spongepowered.vanilla.modlauncher.Main;

import java.nio.file.Path;
import java.util.List;

public final class ClientDevLaunchHandler extends AbstractSpongeDevLaunchHandler {

@Override
Expand All @@ -37,13 +41,14 @@ public String name() {

@Override
protected void launchService0(final String[] arguments, final ITransformingClassLoader launchClassLoader) throws Exception {
Class.forName("org.spongepowered.vanilla.launch.ClientLauncher", true, launchClassLoader.getInstance())
.getMethod("launch", PluginLoader.class, Boolean.class, String[].class)
.invoke(null,
Main.pluginLoader,
Boolean.TRUE,
arguments
);
final PluginEnvironment launchPluginEnvironment = Main.getLaunchPluginEnvironment();
Class.forName("org.spongepowered.vanilla.launch.ClientLauncher", true, launchClassLoader.getInstance()).getMethod("launch", String.class,
Path.class, List.class, Boolean.class, String[].class).invoke(null,
launchPluginEnvironment.getBlackboard().get(PluginKeys.VERSION).orElse(null),
launchPluginEnvironment.getBlackboard().get(PluginKeys.BASE_DIRECTORY).orElse(null),
launchPluginEnvironment.getBlackboard().get(PluginKeys.PLUGIN_DIRECTORIES).orElse(null),
Boolean.TRUE,
arguments);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,13 @@
package org.spongepowered.vanilla.modlauncher.bootstrap;

import cpw.mods.modlauncher.api.ITransformingClassLoader;
import org.spongepowered.vanilla.launch.plugin.PluginLoader;
import org.spongepowered.plugin.PluginEnvironment;
import org.spongepowered.plugin.PluginKeys;
import org.spongepowered.vanilla.modlauncher.Main;

import java.nio.file.Path;
import java.util.List;

public final class ServerDevLaunchHandler extends AbstractSpongeDevLaunchHandler {

@Override
Expand All @@ -37,13 +41,14 @@ public String name() {

@Override
protected void launchService0(final String[] arguments, final ITransformingClassLoader launchClassLoader) throws Exception {
Class.forName("org.spongepowered.vanilla.launch.DedicatedServerLauncher", true, launchClassLoader.getInstance())
.getMethod("launch", PluginLoader.class, Boolean.class, String[].class)
.invoke(null,
Main.pluginLoader,
Boolean.TRUE,
arguments
);
final PluginEnvironment launchPluginEnvironment = Main.getLaunchPluginEnvironment();
Class.forName("org.spongepowered.vanilla.launch.DedicatedServerLauncher", true, launchClassLoader.getInstance()).getMethod("launch", String.class,
Path.class, List.class, Boolean.class, String[].class).invoke(null,
launchPluginEnvironment.getBlackboard().get(PluginKeys.VERSION).orElse(null),
launchPluginEnvironment.getBlackboard().get(PluginKeys.BASE_DIRECTORY).orElse(null),
launchPluginEnvironment.getBlackboard().get(PluginKeys.PLUGIN_DIRECTORIES).orElse(null),
Boolean.TRUE,
arguments);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@
import org.spongepowered.vanilla.launch.plugin.PluginLoader;
import org.spongepowered.vanilla.modlauncher.Main;

import javax.annotation.Nonnull;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Collection;
Expand All @@ -43,16 +42,17 @@
import java.util.Set;
import java.util.stream.Collectors;

import javax.annotation.Nonnull;

public final class PluginDiscovererService implements ITransformationService {

private static final String NAME = "plugin_discoverer";

private final PluginEnvironment pluginEnvironment;
private final PluginLoader pluginLoader;

private PluginLoader pluginLoader;

public PluginDiscovererService() {
this.pluginEnvironment = Main.pluginEnvironment;
this.pluginLoader = Main.pluginLoader;
this.pluginEnvironment = Main.getLaunchPluginEnvironment();
}

@Nonnull
Expand Down Expand Up @@ -93,14 +93,14 @@ public List<Map.Entry<String, Path>> runScan(final IEnvironment environment) {
@Override
public void onLoad(final IEnvironment env, final Set<String> otherServices) {
this.pluginEnvironment.getLogger().info("SpongePowered PLUGIN Subsystem Version={} Service=ModLauncher", this.pluginEnvironment.getBlackboard().get(PluginKeys.VERSION).get());
this.pluginLoader = new PluginLoader(this.pluginEnvironment, null);
this.pluginLoader.discoverLanguageServices();
this.pluginLoader.getServices().forEach((k, v) -> this.pluginEnvironment.getLogger().info("Plugin language loader '{}' found.", k));
this.pluginLoader.getServices().forEach((k, v) -> this.pluginLoader.getEnvironment().getLogger().info("Plugin language loader '{}' found.", k));
}

@Nonnull
@Override
public List<ITransformer> transformers() {
return ImmutableList.of();
}

}

0 comments on commit 6b05c5e

Please sign in to comment.