Compare commits

...

3 Commits
6.2.0 ... 6.2.1

Author SHA1 Message Date
Auxilor
f53c29cd56 Updated to 6.2.1 2021-07-31 16:59:46 +01:00
Auxilor
6845152a09 Fixed extension classloader bug with unclosed classloaders 2021-07-31 16:59:33 +01:00
Auxilor
7eaf2dc8ed Fixed Javadoc 2021-07-27 19:02:04 +01:00
3 changed files with 19 additions and 10 deletions

View File

@@ -10,7 +10,7 @@ import org.jetbrains.annotations.NotNull;
import java.util.List; import java.util.List;
/** /**
* The armor change event <b>does</> contain information about the event.</b> * The armor change event <b>does</b> contain information about the event.
* <p> * <p>
* Unlike {@link ArmorEquipEvent}, it is called the next tick and contains previous and current armor contents. * Unlike {@link ArmorEquipEvent}, it is called the next tick and contains previous and current armor contents.
*/ */

View File

@@ -13,16 +13,18 @@ import org.bukkit.configuration.file.YamlConfiguration;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.io.File; import java.io.File;
import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.net.MalformedURLException; import java.net.MalformedURLException;
import java.net.URL; import java.net.URL;
import java.net.URLClassLoader; import java.net.URLClassLoader;
import java.util.HashSet; import java.util.HashMap;
import java.util.Map;
import java.util.Set; import java.util.Set;
public class EcoExtensionLoader extends PluginDependent<EcoPlugin> implements ExtensionLoader { public class EcoExtensionLoader extends PluginDependent<EcoPlugin> implements ExtensionLoader {
private final Set<Extension> extensions = new HashSet<>(); private final Map<Extension, ClassLoader> extensions = new HashMap<>();
public EcoExtensionLoader(@NotNull final EcoPlugin plugin) { public EcoExtensionLoader(@NotNull final EcoPlugin plugin) {
super(plugin); super(plugin);
@@ -62,9 +64,9 @@ public class EcoExtensionLoader extends PluginDependent<EcoPlugin> implements Ex
e.printStackTrace(); e.printStackTrace();
} }
ClassLoader cl = new URLClassLoader(new URL[]{url}, this.getPlugin().getClass().getClassLoader()); ClassLoader classLoader = new URLClassLoader(new URL[]{url}, this.getPlugin().getClass().getClassLoader());
InputStream ymlIn = cl.getResourceAsStream("extension.yml"); InputStream ymlIn = classLoader.getResourceAsStream("extension.yml");
if (ymlIn == null) { if (ymlIn == null) {
throw new MalformedExtensionException("No extension.yml found in " + extensionJar.getName()); throw new MalformedExtensionException("No extension.yml found in " + extensionJar.getName());
@@ -101,7 +103,7 @@ public class EcoExtensionLoader extends PluginDependent<EcoPlugin> implements Ex
Class<?> cls; Class<?> cls;
Object object = null; Object object = null;
try { try {
cls = cl.loadClass(mainClass); cls = classLoader.loadClass(mainClass);
object = cls.getConstructor(EcoPlugin.class).newInstance(this.getPlugin()); object = cls.getConstructor(EcoPlugin.class).newInstance(this.getPlugin());
} catch (ReflectiveOperationException e) { } catch (ReflectiveOperationException e) {
e.printStackTrace(); e.printStackTrace();
@@ -113,17 +115,24 @@ public class EcoExtensionLoader extends PluginDependent<EcoPlugin> implements Ex
extension.setMetadata(metadata); extension.setMetadata(metadata);
extension.enable(); extension.enable();
extensions.add(extension); extensions.put(extension, classLoader);
} }
@Override @Override
public void unloadExtensions() { public void unloadExtensions() {
extensions.forEach(Extension::disable); extensions.keySet().forEach(Extension::disable);
for (ClassLoader loader : extensions.values()) {
try {
((URLClassLoader) loader).close();
} catch (IOException e) {
// Do nothing.
}
}
extensions.clear(); extensions.clear();
} }
@Override @Override
public Set<Extension> getLoadedExtensions() { public Set<Extension> getLoadedExtensions() {
return extensions; return extensions.keySet();
} }
} }

View File

@@ -1,2 +1,2 @@
version = 6.2.0 version = 6.2.1
plugin-name = eco plugin-name = eco