diff --git a/src/org/nwapw/abacus/Abacus.java b/src/org/nwapw/abacus/Abacus.java index 4d50e38..3343d71 100644 --- a/src/org/nwapw/abacus/Abacus.java +++ b/src/org/nwapw/abacus/Abacus.java @@ -2,6 +2,7 @@ package org.nwapw.abacus; import org.nwapw.abacus.plugin.PluginManager; //import org.nwapw.abacus.plugin.StandardPlugin; +import org.nwapw.abacus.plugin.StandardPlugin; import org.nwapw.abacus.window.Window; import org.nwapw.abacus.plugin.ClassFinder; @@ -25,6 +26,7 @@ public class Abacus { e.printStackTrace(); } manager = new PluginManager(); + manager.addInstantiated(new StandardPlugin(manager)); try { ClassFinder.loadJars("plugins") .forEach(plugin -> manager.addClass(plugin)); diff --git a/src/org/nwapw/abacus/plugin/PluginManager.java b/src/org/nwapw/abacus/plugin/PluginManager.java index 62b8bb1..8bb3879 100644 --- a/src/org/nwapw/abacus/plugin/PluginManager.java +++ b/src/org/nwapw/abacus/plugin/PluginManager.java @@ -12,10 +12,14 @@ import java.util.*; */ public class PluginManager { + /** + * List of classes loaded by this manager. + */ + private Set> loadedPluginClasses; /** * A list of loaded plugins. */ - private List plugins; + private Set plugins; /** * List of functions that have been cached, * that is, found in a plugin and returned. @@ -43,7 +47,8 @@ public class PluginManager { * Creates a new plugin manager. */ public PluginManager(){ - plugins = new ArrayList<>(); + loadedPluginClasses = new HashSet<>(); + plugins = new HashSet<>(); cachedFunctions = new HashMap<>(); cachedOperators = new HashMap<>(); allFunctions = new HashSet<>(); @@ -104,7 +109,9 @@ public class PluginManager { * @param plugin the plugin to add. */ public void addInstantiated(Plugin plugin){ + if(loadedPluginClasses.contains(plugin.getClass())) return; plugins.add(plugin); + loadedPluginClasses.add(plugin.getClass()); } /**