Skip to content

Commit 8658480

Browse files
committed
Fix reloads
1 parent 9831a90 commit 8658480

1 file changed

Lines changed: 25 additions & 11 deletions

File tree

  • ScalaLoader-Paper/src/main/java/xyz/janboerman/scalaloader/paper

ScalaLoader-Paper/src/main/java/xyz/janboerman/scalaloader/paper/ScalaLoader.java

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@
7575
import java.util.Enumeration;
7676
import java.util.HashMap;
7777
import java.util.HashSet;
78+
import java.util.Iterator;
7879
import java.util.LinkedHashSet;
7980
import java.util.List;
8081
import java.util.Map;
@@ -103,6 +104,8 @@ public final class ScalaLoader extends JavaPlugin implements IScalaLoader, Liste
103104
Migration.addMigrator(PaperPluginTransformer::new);
104105
//TODO Paper's ClassloaderBytecodeModifier api gives us the ability to transform bytecode of JavaPlugins.
105106
//TODO should I make use of this? Are there any ScalaLoader apis that I broke that can be called by JavaPlugins?
107+
//TODO the only thing that comes to mind right now is ScalaPluginLoader.openUpToJavaPlugin(ScalaPlugin, JavaPlugin).
108+
//TODO the replacement would be to make the ScalaPlugin's classloader accessible to the JavaPlugin's classloader (perhaps through ClassLoader groups).
106109
}
107110

108111
private EventBus eventBus;
@@ -167,13 +170,23 @@ public void onEnable() {
167170
initCommands();
168171
getServer().getPluginManager().registerEvents(this, this);
169172
enableScalaPlugins(PluginLoadOrder.STARTUP); //Enable ScalaPlugins at STARTUP because ScalaLoader itself enables on STARTUP.
173+
for (ScalaPlugin scalaPlugin : getScalaPlugins()) {
174+
registerScalaPlugin(scalaPlugin);
175+
}
170176
ScalaLoaderUtils.initBStats(this);
171177
}
172178

179+
@Override
180+
public void onDisable() {
181+
scalaPlugins.clear();
182+
}
183+
173184
@EventHandler
174185
public void onServerLoad(ServerLoadEvent event) {
175-
//enable ScalaPlugin's at POSTWORLD for both load types (STARTUP, RELOAD)
176-
enableScalaPlugins(PluginLoadOrder.POSTWORLD);
186+
if (event.getType() == LoadType.STARTUP) {
187+
enableScalaPlugins(PluginLoadOrder.POSTWORLD);
188+
}
189+
//Don't need to enable ScalaPlugins at LoadType.RELOAD, because the server itself already does this.
177190
}
178191

179192
private void initCommands() {
@@ -363,16 +376,9 @@ private static void bootstrap(PluginBootstrap bootstrapper, ScalaPluginProviderC
363376

364377
private void enableScalaPlugins(PluginLoadOrder loadOrder) {
365378
for (ScalaPlugin scalaPlugin : getScalaPlugins()) {
379+
//if this is the right moment to load
366380
if (scalaPlugin.getPluginMeta().getLoadOrder() == loadOrder) {
367-
368-
//register the ScalaPlugin with Paper's pluginManager.
369-
PaperPluginManagerImpl paperPluginManager = PaperHacks.getPaperPluginManager();
370-
if (paperPluginManager.getPlugin(scalaPlugin.getName()) == null) { //ensure idempotency
371-
paperPluginManager.loadPlugin(scalaPlugin); //more like "registerPlugin" since PaperPluginInstanceManager.loadPlugin(Plugin) does not call Plugin.onLoad()!
372-
//note that scalaPlugin.onLoad() has already been called!
373-
}
374-
375-
//now, enable the scalaPlugin.
381+
//enable the scalaPlugin.
376382
if (!scalaPlugin.isEnabled()) {
377383
ScalaPluginEnableEvent event = new ScalaPluginEnableEvent(scalaPlugin);
378384
getServer().getPluginManager().callEvent(event);
@@ -385,6 +391,14 @@ private void enableScalaPlugins(PluginLoadOrder loadOrder) {
385391
}
386392
}
387393

394+
private static void registerScalaPlugin(ScalaPlugin scalaPlugin) {
395+
PaperPluginManagerImpl paperPluginManager = PaperHacks.getPaperPluginManager();
396+
if (paperPluginManager.getPlugin(scalaPlugin.getName()) == null) { //ensure idempotency
397+
paperPluginManager.loadPlugin(scalaPlugin); //more like "registerPlugin" since PaperPluginInstanceManager.loadPlugin(Plugin) does not call Plugin.onLoad()!
398+
//note that scalaPlugin.onLoad() has already been called!
399+
}
400+
}
401+
388402
private static Comparator<String> dependencyOrder(MutableGraph<String> dependencies) {
389403
return new Comparator<String>() {
390404
@Override

0 commit comments

Comments
 (0)