mirror of
https://github.com/PaperMC/Paper.git
synced 2025-08-15 12:13:54 -07:00
@@ -1,4 +1,3 @@
|
||||
|
||||
package org.bukkit.plugin;
|
||||
|
||||
import org.bukkit.event.Event;
|
||||
@@ -8,5 +7,5 @@ import org.bukkit.event.Listener;
|
||||
* Interface which defines the class for event call backs to plugins
|
||||
*/
|
||||
public interface EventExecutor {
|
||||
public void execute( Listener listener, Event event );
|
||||
}
|
||||
public void execute(Listener listener, Event event);
|
||||
}
|
||||
|
@@ -1,4 +1,3 @@
|
||||
|
||||
package org.bukkit.plugin;
|
||||
|
||||
/**
|
||||
@@ -9,9 +8,7 @@ public class IllegalPluginAccessException extends RuntimeException {
|
||||
/**
|
||||
* Creates a new instance of <code>IllegalPluginAccessException</code> without detail message.
|
||||
*/
|
||||
public IllegalPluginAccessException() {
|
||||
}
|
||||
|
||||
public IllegalPluginAccessException() {}
|
||||
|
||||
/**
|
||||
* Constructs an instance of <code>IllegalPluginAccessException</code> with the specified detail message.
|
||||
|
@@ -1,4 +1,3 @@
|
||||
|
||||
package org.bukkit.plugin;
|
||||
|
||||
/**
|
||||
|
@@ -1,4 +1,3 @@
|
||||
|
||||
package org.bukkit.plugin;
|
||||
|
||||
/**
|
||||
|
@@ -1,4 +1,3 @@
|
||||
|
||||
package org.bukkit.plugin;
|
||||
|
||||
import com.avaje.ebean.EbeanServer;
|
||||
@@ -11,6 +10,7 @@ import org.bukkit.util.config.Configuration;
|
||||
* Represents a Plugin
|
||||
*/
|
||||
public interface Plugin extends CommandExecutor {
|
||||
|
||||
/**
|
||||
* Returns the folder that the plugin data's files are located in. The
|
||||
* folder may not yet exist.
|
||||
|
@@ -1,4 +1,3 @@
|
||||
|
||||
package org.bukkit.plugin;
|
||||
|
||||
import java.io.InputStream;
|
||||
@@ -28,7 +27,7 @@ public final class PluginDescriptionFile {
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public PluginDescriptionFile(final InputStream stream) throws InvalidDescriptionException {
|
||||
loadMap((Map<String, Object>)yaml.load(stream));
|
||||
loadMap((Map<String, Object>) yaml.load(stream));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -37,7 +36,7 @@ public final class PluginDescriptionFile {
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public PluginDescriptionFile(final Reader reader) throws InvalidDescriptionException {
|
||||
loadMap((Map<String, Object>)yaml.load(reader));
|
||||
loadMap((Map<String, Object>) yaml.load(reader));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -139,7 +138,7 @@ public final class PluginDescriptionFile {
|
||||
name = map.get("name").toString();
|
||||
|
||||
if (!name.matches("^[A-Za-z0-9 _.-]+$")) {
|
||||
throw new InvalidDescriptionException("name '" + name + "' contains invalid characters.");
|
||||
throw new InvalidDescriptionException("name '" + name + "' contains invalid characters.");
|
||||
}
|
||||
} catch (NullPointerException ex) {
|
||||
throw new InvalidDescriptionException(ex, "name is not defined");
|
||||
@@ -176,7 +175,7 @@ public final class PluginDescriptionFile {
|
||||
|
||||
if (map.containsKey("depend")) {
|
||||
try {
|
||||
depend = (ArrayList<String>)map.get("depend");
|
||||
depend = (ArrayList<String>) map.get("depend");
|
||||
} catch (ClassCastException ex) {
|
||||
throw new InvalidDescriptionException(ex, "depend is of wrong type");
|
||||
}
|
||||
@@ -184,7 +183,7 @@ public final class PluginDescriptionFile {
|
||||
|
||||
if (map.containsKey("softdepend")) {
|
||||
try {
|
||||
softDepend = (ArrayList<String>)map.get("softdepend");
|
||||
softDepend = (ArrayList<String>) map.get("softdepend");
|
||||
} catch (ClassCastException ex) {
|
||||
throw new InvalidDescriptionException(ex, "softdepend is of wrong type");
|
||||
}
|
||||
@@ -192,7 +191,7 @@ public final class PluginDescriptionFile {
|
||||
|
||||
if (map.containsKey("database")) {
|
||||
try {
|
||||
database = (Boolean)map.get("database");
|
||||
database = (Boolean) map.get("database");
|
||||
} catch (ClassCastException ex) {
|
||||
throw new InvalidDescriptionException(ex, "database is of wrong type");
|
||||
}
|
||||
@@ -200,7 +199,7 @@ public final class PluginDescriptionFile {
|
||||
|
||||
if (map.containsKey("website")) {
|
||||
try {
|
||||
website = (String)map.get("website");
|
||||
website = (String) map.get("website");
|
||||
} catch (ClassCastException ex) {
|
||||
throw new InvalidDescriptionException(ex, "website is of wrong type");
|
||||
}
|
||||
@@ -208,7 +207,7 @@ public final class PluginDescriptionFile {
|
||||
|
||||
if (map.containsKey("description")) {
|
||||
try {
|
||||
description = (String)map.get("description");
|
||||
description = (String) map.get("description");
|
||||
} catch (ClassCastException ex) {
|
||||
throw new InvalidDescriptionException(ex, "description is of wrong type");
|
||||
}
|
||||
@@ -216,7 +215,8 @@ public final class PluginDescriptionFile {
|
||||
|
||||
if (map.containsKey("author")) {
|
||||
try {
|
||||
String extra = (String)map.get("author");
|
||||
String extra = (String) map.get("author");
|
||||
|
||||
authors.add(extra);
|
||||
} catch (ClassCastException ex) {
|
||||
throw new InvalidDescriptionException(ex, "author is of wrong type");
|
||||
@@ -225,7 +225,8 @@ public final class PluginDescriptionFile {
|
||||
|
||||
if (map.containsKey("authors")) {
|
||||
try {
|
||||
ArrayList<String> extra = (ArrayList<String>)map.get("authors");
|
||||
ArrayList<String> extra = (ArrayList<String>) map.get("authors");
|
||||
|
||||
authors.addAll(extra);
|
||||
} catch (ClassCastException ex) {
|
||||
throw new InvalidDescriptionException(ex, "authors are of wrong type");
|
||||
@@ -235,16 +236,27 @@ public final class PluginDescriptionFile {
|
||||
|
||||
private Map<String, Object> saveMap() {
|
||||
Map<String, Object> map = new HashMap<String, Object>();
|
||||
|
||||
map.put("name", name);
|
||||
map.put("main", main);
|
||||
map.put("version", version);
|
||||
map.put("database", database);
|
||||
|
||||
if (commands != null) map.put("command", commands);
|
||||
if (depend != null) map.put("depend", depend);
|
||||
if (softDepend != null) map.put("softdepend", softDepend);
|
||||
if (website != null) map.put("website", website);
|
||||
if (description != null) map.put("description", description);
|
||||
if (commands != null) {
|
||||
map.put("command", commands);
|
||||
}
|
||||
if (depend != null) {
|
||||
map.put("depend", depend);
|
||||
}
|
||||
if (softDepend != null) {
|
||||
map.put("softdepend", softDepend);
|
||||
}
|
||||
if (website != null) {
|
||||
map.put("website", website);
|
||||
}
|
||||
if (description != null) {
|
||||
map.put("description", description);
|
||||
}
|
||||
|
||||
if (authors.size() == 1) {
|
||||
map.put("author", authors.get(0));
|
||||
|
@@ -1,4 +1,3 @@
|
||||
|
||||
package org.bukkit.plugin;
|
||||
|
||||
import java.io.File;
|
||||
@@ -12,6 +11,7 @@ import org.bukkit.event.Listener;
|
||||
* of plugins
|
||||
*/
|
||||
public interface PluginLoader {
|
||||
|
||||
/**
|
||||
* Loads the plugin contained in the specified file
|
||||
*
|
||||
|
@@ -1,4 +1,3 @@
|
||||
|
||||
package org.bukkit.plugin;
|
||||
|
||||
import java.io.File;
|
||||
|
@@ -1,4 +1,3 @@
|
||||
|
||||
package org.bukkit.plugin;
|
||||
|
||||
import org.bukkit.event.Event;
|
||||
@@ -13,18 +12,18 @@ public class RegisteredListener {
|
||||
private final Plugin plugin;
|
||||
private final EventExecutor executor;
|
||||
|
||||
public RegisteredListener(final Listener pluginListener, final EventExecutor eventExecutor, final Event.Priority eventPriority, final Plugin registeredPlugin ) {
|
||||
public RegisteredListener(final Listener pluginListener, final EventExecutor eventExecutor, final Event.Priority eventPriority, final Plugin registeredPlugin) {
|
||||
listener = pluginListener;
|
||||
priority = eventPriority;
|
||||
plugin = registeredPlugin;
|
||||
executor = eventExecutor;
|
||||
}
|
||||
|
||||
public RegisteredListener(final Listener pluginListener, final Event.Priority eventPriority, final Plugin registeredPlugin, Event.Type type ) {
|
||||
public RegisteredListener(final Listener pluginListener, final Event.Priority eventPriority, final Plugin registeredPlugin, Event.Type type) {
|
||||
listener = pluginListener;
|
||||
priority = eventPriority;
|
||||
plugin = registeredPlugin;
|
||||
executor = registeredPlugin.getPluginLoader().createExecutor( type, pluginListener );
|
||||
executor = registeredPlugin.getPluginLoader().createExecutor(type, pluginListener);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -56,6 +55,6 @@ public class RegisteredListener {
|
||||
* @return Registered Priority
|
||||
*/
|
||||
public void callEvent(Event event) {
|
||||
executor.execute( listener, event );
|
||||
executor.execute(listener, event);
|
||||
}
|
||||
}
|
||||
|
@@ -2,18 +2,17 @@ package org.bukkit.plugin;
|
||||
|
||||
/**
|
||||
* A registered service provider.
|
||||
*
|
||||
*
|
||||
* @author sk89q
|
||||
* @param <T> Service
|
||||
*/
|
||||
public class RegisteredServiceProvider<T>
|
||||
implements Comparable<RegisteredServiceProvider<?>> {
|
||||
public class RegisteredServiceProvider<T> implements Comparable<RegisteredServiceProvider<?>> {
|
||||
|
||||
private Class<T> service;
|
||||
private Plugin plugin;
|
||||
private T provider;
|
||||
private ServicePriority priority;
|
||||
|
||||
|
||||
public RegisteredServiceProvider(Class<T> service, T provider,
|
||||
ServicePriority priority, Plugin plugin) {
|
||||
|
||||
@@ -22,7 +21,7 @@ public class RegisteredServiceProvider<T>
|
||||
this.provider = provider;
|
||||
this.priority = priority;
|
||||
}
|
||||
|
||||
|
||||
public Class<T> getService() {
|
||||
return service;
|
||||
}
|
||||
@@ -46,5 +45,4 @@ public class RegisteredServiceProvider<T>
|
||||
return priority.ordinal() < other.getPriority().ordinal() ? 1 : -1;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -9,4 +9,4 @@ public enum ServicePriority {
|
||||
Normal,
|
||||
High,
|
||||
Highest
|
||||
}
|
||||
}
|
||||
|
@@ -7,17 +7,17 @@ import java.util.List;
|
||||
* Manages services and service providers. Services are an interface specifying
|
||||
* a list of methods that a provider must implement. Providers are
|
||||
* implementations of these services. A provider can be queried from the
|
||||
* services manager in order to use a service (if one is available). If
|
||||
* services manager in order to use a service (if one is available). If
|
||||
* multiple plugins register a service, then the service with the highest
|
||||
* priority takes precedence.
|
||||
*
|
||||
*
|
||||
* @author sk89q
|
||||
*/
|
||||
public interface ServicesManager {
|
||||
|
||||
/**
|
||||
* Register a provider of a service.
|
||||
*
|
||||
*
|
||||
* @param <T> Provider
|
||||
* @param service service class
|
||||
* @param provider provider to register
|
||||
@@ -29,22 +29,22 @@ public interface ServicesManager {
|
||||
|
||||
/**
|
||||
* Unregister all the providers registered by a particular plugin.
|
||||
*
|
||||
*
|
||||
* @param plugin
|
||||
*/
|
||||
public void unregisterAll(Plugin plugin);
|
||||
|
||||
/**
|
||||
* Unregister a particular provider for a particular service.
|
||||
*
|
||||
* @param service
|
||||
*
|
||||
* @param service
|
||||
* @param provider
|
||||
*/
|
||||
public void unregister(Class<?> service, Object provider);
|
||||
|
||||
/**
|
||||
* Unregister a particular provider.
|
||||
*
|
||||
*
|
||||
* @param provider
|
||||
*/
|
||||
public void unregister(Object provider);
|
||||
@@ -52,7 +52,7 @@ public interface ServicesManager {
|
||||
/**
|
||||
* Queries for a provider. This may return if no provider has been
|
||||
* registered for a service. The highest priority provider is returned.
|
||||
*
|
||||
*
|
||||
* @param <T>
|
||||
* @param service
|
||||
* @return provider or null
|
||||
@@ -62,7 +62,7 @@ public interface ServicesManager {
|
||||
/**
|
||||
* Queries for a provider registration. This may return if no provider
|
||||
* has been registered for a service.
|
||||
*
|
||||
*
|
||||
* @param <T>
|
||||
* @param service
|
||||
* @return provider registration or null
|
||||
@@ -71,7 +71,7 @@ public interface ServicesManager {
|
||||
|
||||
/**
|
||||
* Get registrations of providers for a plugin.
|
||||
*
|
||||
*
|
||||
* @param plugin
|
||||
* @return provider registration or null
|
||||
*/
|
||||
@@ -80,7 +80,7 @@ public interface ServicesManager {
|
||||
/**
|
||||
* Get registrations of providers for a service. The returned list is
|
||||
* unmodifiable.
|
||||
*
|
||||
*
|
||||
* @param <T>
|
||||
* @param service
|
||||
* @return list of registrations
|
||||
@@ -91,7 +91,7 @@ public interface ServicesManager {
|
||||
/**
|
||||
* Get a list of known services. A service is known if it has registered
|
||||
* providers for it.
|
||||
*
|
||||
*
|
||||
* @return list of known services
|
||||
*/
|
||||
public Collection<Class<?>> getKnownServices();
|
||||
@@ -99,12 +99,12 @@ public interface ServicesManager {
|
||||
/**
|
||||
* Returns whether a provider has been registered for a service. Do not
|
||||
* check this first only to call <code>load(service)</code> later, as that
|
||||
* would be a non-thread safe situation.
|
||||
*
|
||||
* would be a non-thread safe situation.
|
||||
*
|
||||
* @param <T> service
|
||||
* @param service service to check
|
||||
* @return whether there has been a registered provider
|
||||
*/
|
||||
public <T> boolean isProvidedFor(Class<T> service);
|
||||
|
||||
}
|
||||
}
|
||||
|
@@ -1,4 +1,3 @@
|
||||
|
||||
package org.bukkit.plugin;
|
||||
|
||||
import java.io.File;
|
||||
@@ -63,12 +62,14 @@ public final class SimplePluginManager implements PluginManager {
|
||||
|
||||
if (PluginLoader.class.isAssignableFrom(loader)) {
|
||||
Constructor<? extends PluginLoader> constructor;
|
||||
|
||||
try {
|
||||
constructor = loader.getConstructor(Server.class);
|
||||
instance = constructor.newInstance(server);
|
||||
} catch (NoSuchMethodException ex) {
|
||||
String className = loader.getName();
|
||||
throw new IllegalArgumentException(String.format("Class %s does not have a public %s(Server) constructor", className,className), ex);
|
||||
|
||||
throw new IllegalArgumentException(String.format("Class %s does not have a public %s(Server) constructor", className, className), ex);
|
||||
} catch (Exception ex) {
|
||||
throw new IllegalArgumentException(String.format("Unexpected exception %s while attempting to construct a new instance of %s", ex.getClass().getName(), loader.getName()), ex);
|
||||
}
|
||||
@@ -100,14 +101,15 @@ public final class SimplePluginManager implements PluginManager {
|
||||
|
||||
LinkedList<File> filesList = new LinkedList(Arrays.asList(files));
|
||||
|
||||
if (!(server.getUpdateFolder().equals(""))) {
|
||||
updateDirectory = new File(directory, server.getUpdateFolder());
|
||||
}
|
||||
if (!(server.getUpdateFolder().equals(""))) {
|
||||
updateDirectory = new File(directory, server.getUpdateFolder());
|
||||
}
|
||||
|
||||
while(!allFailed || finalPass) {
|
||||
while (!allFailed || finalPass) {
|
||||
allFailed = true;
|
||||
Iterator<File> itr = filesList.iterator();
|
||||
while(itr.hasNext()) {
|
||||
|
||||
while (itr.hasNext()) {
|
||||
File file = itr.next();
|
||||
Plugin plugin = null;
|
||||
|
||||
@@ -115,7 +117,7 @@ public final class SimplePluginManager implements PluginManager {
|
||||
plugin = loadPlugin(file, finalPass);
|
||||
itr.remove();
|
||||
} catch (UnknownDependencyException ex) {
|
||||
if(finalPass) {
|
||||
if (finalPass) {
|
||||
server.getLogger().log(Level.SEVERE, "Could not load '" + file.getPath() + "' in folder '" + directory.getPath() + "': " + ex.getMessage(), ex);
|
||||
itr.remove();
|
||||
} else {
|
||||
@@ -135,9 +137,9 @@ public final class SimplePluginManager implements PluginManager {
|
||||
finalPass = false;
|
||||
}
|
||||
}
|
||||
if(finalPass) {
|
||||
if (finalPass) {
|
||||
break;
|
||||
} else if(allFailed) {
|
||||
} else if (allFailed) {
|
||||
finalPass = true;
|
||||
}
|
||||
}
|
||||
@@ -171,12 +173,12 @@ public final class SimplePluginManager implements PluginManager {
|
||||
* @throws InvalidDescriptionException Thrown when the specified file contains an invalid description
|
||||
*/
|
||||
public synchronized Plugin loadPlugin(File file, boolean ignoreSoftDependencies) throws InvalidPluginException, InvalidDescriptionException, UnknownDependencyException {
|
||||
File updateFile = null;
|
||||
File updateFile = null;
|
||||
|
||||
if (updateDirectory != null && updateDirectory.isDirectory() && (updateFile = new File(updateDirectory, file.getName())).isFile()) {
|
||||
if (FileUtil.copy(updateFile, file)) {
|
||||
updateFile.delete();
|
||||
}
|
||||
if (updateDirectory != null && updateDirectory.isDirectory() && (updateFile = new File(updateDirectory, file.getName())).isFile()) {
|
||||
if (FileUtil.copy(updateFile, file)) {
|
||||
updateFile.delete();
|
||||
}
|
||||
}
|
||||
|
||||
Set<Pattern> filters = fileAssociations.keySet();
|
||||
@@ -188,6 +190,7 @@ public final class SimplePluginManager implements PluginManager {
|
||||
|
||||
if (match.find()) {
|
||||
PluginLoader loader = fileAssociations.get(filter);
|
||||
|
||||
result = loader.loadPlugin(file, ignoreSoftDependencies);
|
||||
}
|
||||
}
|
||||
@@ -255,7 +258,7 @@ public final class SimplePluginManager implements PluginManager {
|
||||
}
|
||||
|
||||
public void disablePlugins() {
|
||||
for(Plugin plugin: getPlugins()) {
|
||||
for (Plugin plugin: getPlugins()) {
|
||||
disablePlugin(plugin);
|
||||
}
|
||||
}
|
||||
@@ -265,9 +268,9 @@ public final class SimplePluginManager implements PluginManager {
|
||||
try {
|
||||
plugin.getPluginLoader().disablePlugin(plugin);
|
||||
} catch (Throwable ex) {
|
||||
server.getLogger().log(Level.SEVERE, "Error occurredd (in the plugin loader) while disabling " + plugin.getDescription().getFullName() + " (Is it up to date?): " + ex.getMessage(), ex);
|
||||
server.getLogger().log(Level.SEVERE, "Error occurred (in the plugin loader) while disabling " + plugin.getDescription().getFullName() + " (Is it up to date?): " + ex.getMessage(), ex);
|
||||
}
|
||||
|
||||
|
||||
// Forced disable
|
||||
server.getScheduler().cancelTasks(plugin);
|
||||
server.getServicesManager().unregisterAll(plugin);
|
||||
@@ -296,13 +299,15 @@ public final class SimplePluginManager implements PluginManager {
|
||||
if (eventListeners != null) {
|
||||
for (RegisteredListener registration : eventListeners) {
|
||||
try {
|
||||
registration.callEvent( event );
|
||||
registration.callEvent(event);
|
||||
} catch (AuthorNagException ex) {
|
||||
Plugin plugin = registration.getPlugin();
|
||||
|
||||
if (plugin.isNaggable()) {
|
||||
plugin.setNaggable(false);
|
||||
|
||||
String author = "<NoAuthorGiven>";
|
||||
|
||||
if (plugin.getDescription().getAuthors().size() > 0) {
|
||||
author = plugin.getDescription().getAuthors().get(0);
|
||||
}
|
||||
@@ -333,7 +338,7 @@ public final class SimplePluginManager implements PluginManager {
|
||||
throw new IllegalPluginAccessException("Plugin attempted to register " + type + " while not enabled");
|
||||
}
|
||||
|
||||
getEventListeners( type ).add(new RegisteredListener(listener, priority, plugin, type));
|
||||
getEventListeners(type).add(new RegisteredListener(listener, priority, plugin, type));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -350,7 +355,7 @@ public final class SimplePluginManager implements PluginManager {
|
||||
throw new IllegalPluginAccessException("Plugin attempted to register " + type + " while not enabled");
|
||||
}
|
||||
|
||||
getEventListeners( type ).add(new RegisteredListener(listener, executor, priority, plugin));
|
||||
getEventListeners(type).add(new RegisteredListener(listener, executor, priority, plugin));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -11,7 +11,7 @@ import java.util.NoSuchElementException;
|
||||
|
||||
/**
|
||||
* A simple services manager.
|
||||
*
|
||||
*
|
||||
* @author sk89q
|
||||
*/
|
||||
public class SimpleServicesManager implements ServicesManager {
|
||||
@@ -19,12 +19,11 @@ public class SimpleServicesManager implements ServicesManager {
|
||||
/**
|
||||
* Map of providers.
|
||||
*/
|
||||
private final Map<Class<?>, List<RegisteredServiceProvider<?>>> providers =
|
||||
new HashMap<Class<?>, List<RegisteredServiceProvider<?>>>();
|
||||
private final Map<Class<?>, List<RegisteredServiceProvider<?>>> providers = new HashMap<Class<?>, List<RegisteredServiceProvider<?>>>();
|
||||
|
||||
/**
|
||||
* Register a provider of a service.
|
||||
*
|
||||
*
|
||||
* @param <T> Provider
|
||||
* @param service service class
|
||||
* @param provider provider to register
|
||||
@@ -33,19 +32,17 @@ public class SimpleServicesManager implements ServicesManager {
|
||||
*/
|
||||
public <T> void register(Class<T> service, T provider,
|
||||
Plugin plugin, ServicePriority priority) {
|
||||
|
||||
|
||||
synchronized (providers) {
|
||||
List<RegisteredServiceProvider<?>> registered =
|
||||
providers.get(service);
|
||||
|
||||
List<RegisteredServiceProvider<?>> registered = providers.get(service);
|
||||
|
||||
if (registered == null) {
|
||||
registered = new ArrayList<RegisteredServiceProvider<?>>();
|
||||
providers.put(service, registered);
|
||||
}
|
||||
|
||||
registered.add(new RegisteredServiceProvider<T>(
|
||||
service, provider, priority, plugin));
|
||||
|
||||
|
||||
registered.add(new RegisteredServiceProvider<T>(service, provider, priority, plugin));
|
||||
|
||||
// Make sure that providers are in the right order in order
|
||||
// for priorities to work correctly
|
||||
Collections.sort(registered);
|
||||
@@ -54,123 +51,117 @@ public class SimpleServicesManager implements ServicesManager {
|
||||
|
||||
/**
|
||||
* Unregister all the providers registered by a particular plugin.
|
||||
*
|
||||
*
|
||||
* @param plugin
|
||||
*/
|
||||
public void unregisterAll(Plugin plugin) {
|
||||
synchronized (providers) {
|
||||
Iterator<Map.Entry<Class<?>, List<RegisteredServiceProvider<?>>>> it =
|
||||
providers.entrySet().iterator();
|
||||
Iterator<Map.Entry<Class<?>, List<RegisteredServiceProvider<?>>>> it = providers.entrySet().iterator();
|
||||
|
||||
try {
|
||||
while (it.hasNext()) {
|
||||
Map.Entry<Class<?>, List<RegisteredServiceProvider<?>>> entry = it.next();
|
||||
Iterator<RegisteredServiceProvider<?>> it2 = entry.getValue().iterator();
|
||||
|
||||
|
||||
try {
|
||||
// Removed entries that are from this plugin
|
||||
|
||||
while (it2.hasNext()) {
|
||||
if (it2.next().getPlugin() == plugin) {
|
||||
it2.remove();
|
||||
}
|
||||
}
|
||||
} catch (NoSuchElementException e) {
|
||||
// Why does Java suck
|
||||
} catch (NoSuchElementException e) { // Why does Java suck
|
||||
}
|
||||
|
||||
|
||||
// Get rid of the empty list
|
||||
if (entry.getValue().size() == 0) {
|
||||
it.remove();
|
||||
}
|
||||
}
|
||||
} catch (NoSuchElementException e) {
|
||||
}
|
||||
} catch (NoSuchElementException e) {}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Unregister a particular provider for a particular service.
|
||||
*
|
||||
* @param service
|
||||
*
|
||||
* @param service
|
||||
* @param provider
|
||||
*/
|
||||
public void unregister(Class<?> service, Object provider) {
|
||||
synchronized (providers) {
|
||||
Iterator<Map.Entry<Class<?>, List<RegisteredServiceProvider<?>>>> it =
|
||||
providers.entrySet().iterator();
|
||||
Iterator<Map.Entry<Class<?>, List<RegisteredServiceProvider<?>>>> it = providers.entrySet().iterator();
|
||||
|
||||
try {
|
||||
while (it.hasNext()) {
|
||||
Map.Entry<Class<?>, List<RegisteredServiceProvider<?>>> entry = it.next();
|
||||
|
||||
|
||||
// We want a particular service
|
||||
if (entry.getKey() != service) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
Iterator<RegisteredServiceProvider<?>> it2 = entry.getValue().iterator();
|
||||
|
||||
|
||||
try {
|
||||
// Removed entries that are from this plugin
|
||||
|
||||
while (it2.hasNext()) {
|
||||
if (it2.next().getProvider() == provider) {
|
||||
it2.remove();
|
||||
}
|
||||
}
|
||||
} catch (NoSuchElementException e) {
|
||||
// Why does Java suck
|
||||
} catch (NoSuchElementException e) { // Why does Java suck
|
||||
}
|
||||
|
||||
|
||||
// Get rid of the empty list
|
||||
if (entry.getValue().size() == 0) {
|
||||
it.remove();
|
||||
}
|
||||
}
|
||||
} catch (NoSuchElementException e) {
|
||||
}
|
||||
} catch (NoSuchElementException e) {}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Unregister a particular provider.
|
||||
*
|
||||
*
|
||||
* @param provider
|
||||
*/
|
||||
public void unregister(Object provider) {
|
||||
synchronized (providers) {
|
||||
Iterator<Map.Entry<Class<?>, List<RegisteredServiceProvider<?>>>> it =
|
||||
providers.entrySet().iterator();
|
||||
Iterator<Map.Entry<Class<?>, List<RegisteredServiceProvider<?>>>> it = providers.entrySet().iterator();
|
||||
|
||||
try {
|
||||
while (it.hasNext()) {
|
||||
Map.Entry<Class<?>, List<RegisteredServiceProvider<?>>> entry = it.next();
|
||||
Iterator<RegisteredServiceProvider<?>> it2 = entry.getValue().iterator();
|
||||
|
||||
|
||||
try {
|
||||
// Removed entries that are from this plugin
|
||||
|
||||
while (it2.hasNext()) {
|
||||
if (it2.next().getProvider() == provider) {
|
||||
it2.remove();
|
||||
}
|
||||
}
|
||||
} catch (NoSuchElementException e) {
|
||||
// Why does Java suck
|
||||
} catch (NoSuchElementException e) { // Why does Java suck
|
||||
}
|
||||
|
||||
|
||||
// Get rid of the empty list
|
||||
if (entry.getValue().size() == 0) {
|
||||
it.remove();
|
||||
}
|
||||
}
|
||||
} catch (NoSuchElementException e) {
|
||||
}
|
||||
} catch (NoSuchElementException e) {}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Queries for a provider. This may return if no provider has been
|
||||
* registered for a service. The highest priority provider is returned.
|
||||
*
|
||||
*
|
||||
* @param <T>
|
||||
* @param service
|
||||
* @return provider or null
|
||||
@@ -179,11 +170,11 @@ public class SimpleServicesManager implements ServicesManager {
|
||||
public <T> T load(Class<T> service) {
|
||||
synchronized (providers) {
|
||||
List<RegisteredServiceProvider<?>> registered = providers.get(service);
|
||||
|
||||
|
||||
if (registered == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
// This should not be null!
|
||||
return (T) registered.get(0).getProvider();
|
||||
}
|
||||
@@ -192,7 +183,7 @@ public class SimpleServicesManager implements ServicesManager {
|
||||
/**
|
||||
* Queries for a provider registration. This may return if no provider
|
||||
* has been registered for a service.
|
||||
*
|
||||
*
|
||||
* @param <T>
|
||||
* @param service
|
||||
* @return provider registration or null
|
||||
@@ -201,11 +192,11 @@ public class SimpleServicesManager implements ServicesManager {
|
||||
public <T> RegisteredServiceProvider<T> getRegistration(Class<T> service) {
|
||||
synchronized (providers) {
|
||||
List<RegisteredServiceProvider<?>> registered = providers.get(service);
|
||||
|
||||
|
||||
if (registered == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
// This should not be null!
|
||||
return (RegisteredServiceProvider<T>) registered.get(0);
|
||||
}
|
||||
@@ -213,15 +204,14 @@ public class SimpleServicesManager implements ServicesManager {
|
||||
|
||||
/**
|
||||
* Get registrations of providers for a plugin.
|
||||
*
|
||||
*
|
||||
* @param plugin
|
||||
* @return provider registration or null
|
||||
*/
|
||||
public List<RegisteredServiceProvider<?>> getRegistrations(Plugin plugin) {
|
||||
synchronized (providers) {
|
||||
List<RegisteredServiceProvider<?>> ret =
|
||||
new ArrayList<RegisteredServiceProvider<?>>();
|
||||
|
||||
List<RegisteredServiceProvider<?>> ret = new ArrayList<RegisteredServiceProvider<?>>();
|
||||
|
||||
for (List<RegisteredServiceProvider<?>> registered : providers.values()) {
|
||||
for (RegisteredServiceProvider<?> provider : registered) {
|
||||
if (provider.getPlugin() == plugin) {
|
||||
@@ -229,7 +219,7 @@ public class SimpleServicesManager implements ServicesManager {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
@@ -237,7 +227,7 @@ public class SimpleServicesManager implements ServicesManager {
|
||||
/**
|
||||
* Get registrations of providers for a service. The returned list is
|
||||
* unmodifiable.
|
||||
*
|
||||
*
|
||||
* @param <T>
|
||||
* @param service
|
||||
* @return list of registrations
|
||||
@@ -246,19 +236,17 @@ public class SimpleServicesManager implements ServicesManager {
|
||||
public <T> Collection<RegisteredServiceProvider<T>> getRegistrations(Class<T> service) {
|
||||
synchronized (providers) {
|
||||
List<RegisteredServiceProvider<?>> registered = providers.get(service);
|
||||
|
||||
|
||||
if (registered == null) {
|
||||
return Collections.unmodifiableList(
|
||||
new ArrayList<RegisteredServiceProvider<T>>());
|
||||
return Collections.unmodifiableList(new ArrayList<RegisteredServiceProvider<T>>());
|
||||
}
|
||||
|
||||
List<RegisteredServiceProvider<T>> ret =
|
||||
new ArrayList<RegisteredServiceProvider<T>>();
|
||||
|
||||
|
||||
List<RegisteredServiceProvider<T>> ret = new ArrayList<RegisteredServiceProvider<T>>();
|
||||
|
||||
for (RegisteredServiceProvider<?> provider : registered) {
|
||||
ret.add((RegisteredServiceProvider<T>) provider);
|
||||
}
|
||||
|
||||
|
||||
return Collections.unmodifiableList(ret);
|
||||
}
|
||||
}
|
||||
@@ -266,7 +254,7 @@ public class SimpleServicesManager implements ServicesManager {
|
||||
/**
|
||||
* Get a list of known services. A service is known if it has registered
|
||||
* providers for it.
|
||||
*
|
||||
*
|
||||
* @return list of known services
|
||||
*/
|
||||
public Collection<Class<?>> getKnownServices() {
|
||||
@@ -276,8 +264,8 @@ public class SimpleServicesManager implements ServicesManager {
|
||||
/**
|
||||
* Returns whether a provider has been registered for a service. Do not
|
||||
* check this first only to call <code>load(service)</code> later, as that
|
||||
* would be a non-thread safe situation.
|
||||
*
|
||||
* would be a non-thread safe situation.
|
||||
*
|
||||
* @param <T> service
|
||||
* @param service service to check
|
||||
* @return whether there has been a registered provider
|
||||
|
@@ -1,4 +1,3 @@
|
||||
|
||||
package org.bukkit.plugin;
|
||||
|
||||
/**
|
||||
|
@@ -41,5 +41,4 @@ public class UnknownSoftDependencyException extends UnknownDependencyException {
|
||||
public UnknownSoftDependencyException() {
|
||||
this(null, "Unknown dependency");
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -1,4 +1,3 @@
|
||||
|
||||
package org.bukkit.plugin.java;
|
||||
|
||||
import com.avaje.ebean.EbeanServer;
|
||||
@@ -35,8 +34,7 @@ public abstract class JavaPlugin implements Plugin {
|
||||
private boolean naggable = true;
|
||||
private EbeanServer ebean = null;
|
||||
|
||||
public JavaPlugin() {
|
||||
}
|
||||
public JavaPlugin() {}
|
||||
|
||||
/**
|
||||
* Returns the folder that the plugin data's files are located in. The
|
||||
@@ -125,7 +123,7 @@ public abstract class JavaPlugin implements Plugin {
|
||||
|
||||
if (isEnabled) {
|
||||
onEnable();
|
||||
} else {
|
||||
} else {
|
||||
onDisable();
|
||||
}
|
||||
}
|
||||
@@ -167,10 +165,12 @@ public abstract class JavaPlugin implements Plugin {
|
||||
server.configureDbConfig(db);
|
||||
|
||||
DataSourceConfig ds = db.getDataSourceConfig();
|
||||
|
||||
ds.setUrl(replaceDatabaseString(ds.getUrl()));
|
||||
getDataFolder().mkdirs();
|
||||
|
||||
ClassLoader previous = Thread.currentThread().getContextClassLoader();
|
||||
|
||||
Thread.currentThread().setContextClassLoader(classLoader);
|
||||
ebean = EbeanServerFactory.create(db);
|
||||
Thread.currentThread().setContextClassLoader(previous);
|
||||
@@ -230,16 +230,14 @@ public abstract class JavaPlugin implements Plugin {
|
||||
}
|
||||
}
|
||||
|
||||
public void onLoad() {
|
||||
// Empty!
|
||||
}
|
||||
public void onLoad() {} // Empty!
|
||||
|
||||
public final boolean isNaggable() {
|
||||
return naggable;
|
||||
}
|
||||
|
||||
public final void setNaggable(boolean canNag) {
|
||||
this.naggable = canNag;;
|
||||
this.naggable = canNag;
|
||||
}
|
||||
|
||||
public EbeanServer getDatabase() {
|
||||
@@ -247,14 +245,14 @@ public abstract class JavaPlugin implements Plugin {
|
||||
}
|
||||
|
||||
protected void installDDL() {
|
||||
SpiEbeanServer serv = (SpiEbeanServer)getDatabase();
|
||||
SpiEbeanServer serv = (SpiEbeanServer) getDatabase();
|
||||
DdlGenerator gen = serv.getDdlGenerator();
|
||||
|
||||
gen.runScript(false, gen.generateCreateDdl());
|
||||
}
|
||||
|
||||
protected void removeDDL() {
|
||||
SpiEbeanServer serv = (SpiEbeanServer)getDatabase();
|
||||
SpiEbeanServer serv = (SpiEbeanServer) getDatabase();
|
||||
DdlGenerator gen = serv.getDdlGenerator();
|
||||
|
||||
gen.runScript(true, gen.generateDropDdl());
|
||||
|
@@ -35,7 +35,7 @@ import org.yaml.snakeyaml.error.YAMLException;
|
||||
public final class JavaPluginLoader implements PluginLoader {
|
||||
private final Server server;
|
||||
private final Pattern[] fileFilters = new Pattern[] {
|
||||
Pattern.compile("\\.jar$"),
|
||||
Pattern.compile("\\.jar$"),
|
||||
};
|
||||
private final Map<String, Class<?>> classes = new HashMap<String, Class<?>>();
|
||||
private final Map<String, PluginClassLoader> loaders = new HashMap<String, PluginClassLoader>();
|
||||
@@ -64,6 +64,7 @@ public final class JavaPluginLoader implements PluginLoader {
|
||||
}
|
||||
|
||||
InputStream stream = jar.getInputStream(entry);
|
||||
|
||||
description = new PluginDescriptionFile(stream);
|
||||
|
||||
stream.close();
|
||||
@@ -81,7 +82,7 @@ public final class JavaPluginLoader implements PluginLoader {
|
||||
if (dataFolder.equals(oldDataFolder)) {
|
||||
// They are equal -- nothing needs to be done!
|
||||
} else if (dataFolder.isDirectory() && oldDataFolder.isDirectory()) {
|
||||
server.getLogger().log( Level.INFO, String.format(
|
||||
server.getLogger().log(Level.INFO, String.format(
|
||||
"While loading %s (%s) found old-data folder: %s next to the new one: %s",
|
||||
description.getName(),
|
||||
file,
|
||||
@@ -92,7 +93,7 @@ public final class JavaPluginLoader implements PluginLoader {
|
||||
if (!oldDataFolder.renameTo(dataFolder)) {
|
||||
throw new InvalidPluginException(new Exception("Unable to rename old data folder: '" + oldDataFolder + "' to: '" + dataFolder + "'"));
|
||||
}
|
||||
server.getLogger().log( Level.INFO, String.format(
|
||||
server.getLogger().log(Level.INFO, String.format(
|
||||
"While loading %s (%s) renamed data folder: '%s' to '%s'",
|
||||
description.getName(),
|
||||
file,
|
||||
@@ -111,34 +112,37 @@ public final class JavaPluginLoader implements PluginLoader {
|
||||
}
|
||||
|
||||
ArrayList<String> depend;
|
||||
|
||||
try {
|
||||
depend = (ArrayList)description.getDepend();
|
||||
if(depend == null) {
|
||||
depend = (ArrayList) description.getDepend();
|
||||
if (depend == null) {
|
||||
depend = new ArrayList<String>();
|
||||
}
|
||||
} catch (ClassCastException ex) {
|
||||
throw new InvalidPluginException(ex);
|
||||
throw new InvalidPluginException(ex);
|
||||
}
|
||||
|
||||
for(String pluginName : depend) {
|
||||
if(loaders == null) {
|
||||
for (String pluginName : depend) {
|
||||
if (loaders == null) {
|
||||
throw new UnknownDependencyException(pluginName);
|
||||
}
|
||||
PluginClassLoader current = loaders.get(pluginName);
|
||||
if(current == null) {
|
||||
|
||||
if (current == null) {
|
||||
throw new UnknownDependencyException(pluginName);
|
||||
}
|
||||
}
|
||||
|
||||
if (!ignoreSoftDependencies) {
|
||||
ArrayList<String> softDepend;
|
||||
|
||||
try {
|
||||
softDepend = (ArrayList)description.getSoftDepend();
|
||||
softDepend = (ArrayList) description.getSoftDepend();
|
||||
if (softDepend == null) {
|
||||
softDepend = new ArrayList<String>();
|
||||
}
|
||||
} catch (ClassCastException ex) {
|
||||
throw new InvalidPluginException(ex);
|
||||
throw new InvalidPluginException(ex);
|
||||
}
|
||||
|
||||
for (String pluginName : softDepend) {
|
||||
@@ -146,6 +150,7 @@ public final class JavaPluginLoader implements PluginLoader {
|
||||
throw new UnknownSoftDependencyException(pluginName);
|
||||
}
|
||||
PluginClassLoader current = loaders.get(pluginName);
|
||||
|
||||
if (current == null) {
|
||||
throw new UnknownSoftDependencyException(pluginName);
|
||||
}
|
||||
@@ -153,14 +158,17 @@ public final class JavaPluginLoader implements PluginLoader {
|
||||
}
|
||||
|
||||
PluginClassLoader loader = null;
|
||||
|
||||
try {
|
||||
URL[] urls = new URL[1];
|
||||
|
||||
urls[0] = file.toURI().toURL();
|
||||
loader = new PluginClassLoader(this, urls, getClass().getClassLoader());
|
||||
Class<?> jarClass = Class.forName(description.getMain(), true, loader);
|
||||
Class<? extends JavaPlugin> plugin = jarClass.asSubclass(JavaPlugin.class);
|
||||
|
||||
Constructor<? extends JavaPlugin> constructor = plugin.getConstructor();
|
||||
|
||||
result = constructor.newInstance();
|
||||
|
||||
result.initialize(this, server, description, dataFolder, file, loader);
|
||||
@@ -168,9 +176,9 @@ public final class JavaPluginLoader implements PluginLoader {
|
||||
throw new InvalidPluginException(ex);
|
||||
}
|
||||
|
||||
loaders.put(description.getName(), (PluginClassLoader)loader);
|
||||
loaders.put(description.getName(), (PluginClassLoader) loader);
|
||||
|
||||
return (Plugin)result;
|
||||
return (Plugin) result;
|
||||
}
|
||||
|
||||
private File getDataFolder(File file) {
|
||||
@@ -181,15 +189,15 @@ public final class JavaPluginLoader implements PluginLoader {
|
||||
|
||||
if (index != -1) {
|
||||
String name = filename.substring(0, index);
|
||||
|
||||
dataFolder = new File(file.getParentFile(), name);
|
||||
} else {
|
||||
// This is if there is no extension, which should not happen
|
||||
// Using _ to prevent name collision
|
||||
|
||||
dataFolder = new File(file.getParentFile(), filename + "_");
|
||||
}
|
||||
|
||||
//dataFolder.mkdirs();
|
||||
|
||||
return dataFolder;
|
||||
}
|
||||
|
||||
@@ -199,16 +207,17 @@ public final class JavaPluginLoader implements PluginLoader {
|
||||
|
||||
public Class<?> getClassByName(final String name) {
|
||||
Class<?> cachedClass = classes.get(name);
|
||||
if(cachedClass != null) {
|
||||
|
||||
if (cachedClass != null) {
|
||||
return cachedClass;
|
||||
} else {
|
||||
for(String current : loaders.keySet()) {
|
||||
for (String current : loaders.keySet()) {
|
||||
PluginClassLoader loader = loaders.get(current);
|
||||
|
||||
try {
|
||||
cachedClass = loader.findClass(name, false);
|
||||
} catch (ClassNotFoundException cnfe) {
|
||||
}
|
||||
if(cachedClass != null) {
|
||||
} catch (ClassNotFoundException cnfe) {}
|
||||
if (cachedClass != null) {
|
||||
return cachedClass;
|
||||
}
|
||||
}
|
||||
@@ -222,142 +231,166 @@ public final class JavaPluginLoader implements PluginLoader {
|
||||
}
|
||||
}
|
||||
|
||||
public EventExecutor createExecutor(Event.Type type, Listener listener ) {
|
||||
public EventExecutor createExecutor(Event.Type type, Listener listener) {
|
||||
// TODO: remove multiple Listener type and hence casts
|
||||
|
||||
switch (type) {
|
||||
// Player Events
|
||||
|
||||
case PLAYER_JOIN:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
((PlayerListener) listener).onPlayerJoin((PlayerJoinEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case PLAYER_QUIT:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
((PlayerListener) listener).onPlayerQuit((PlayerQuitEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case PLAYER_RESPAWN:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
((PlayerListener) listener).onPlayerRespawn((PlayerRespawnEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case PLAYER_KICK:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
((PlayerListener) listener).onPlayerKick((PlayerKickEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case PLAYER_COMMAND_PREPROCESS:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
((PlayerListener) listener).onPlayerCommandPreprocess((PlayerCommandPreprocessEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case PLAYER_CHAT:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
((PlayerListener) listener).onPlayerChat((PlayerChatEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case PLAYER_MOVE:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
((PlayerListener) listener).onPlayerMove((PlayerMoveEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case PLAYER_TELEPORT:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
((PlayerListener) listener).onPlayerTeleport((PlayerTeleportEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case PLAYER_INTERACT:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
((PlayerListener) listener).onPlayerInteract((PlayerInteractEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case PLAYER_INTERACT_ENTITY:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
((PlayerListener) listener).onPlayerInteractEntity((PlayerInteractEntityEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case PLAYER_LOGIN:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
((PlayerListener) listener).onPlayerLogin((PlayerLoginEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case PLAYER_PRELOGIN:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
((PlayerListener) listener).onPlayerPreLogin((PlayerPreLoginEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case PLAYER_EGG_THROW:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
((PlayerListener) listener).onPlayerEggThrow((PlayerEggThrowEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case PLAYER_ANIMATION:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
((PlayerListener) listener).onPlayerAnimation((PlayerAnimationEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case INVENTORY_OPEN:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
((PlayerListener) listener).onInventoryOpen((PlayerInventoryEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case PLAYER_ITEM_HELD:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
((PlayerListener) listener).onItemHeldChange((PlayerItemHeldEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case PLAYER_DROP_ITEM:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
((PlayerListener) listener).onPlayerDropItem((PlayerDropItemEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case PLAYER_PICKUP_ITEM:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
((PlayerListener) listener).onPlayerPickupItem((PlayerPickupItemEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case PLAYER_TOGGLE_SNEAK:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
((PlayerListener) listener).onPlayerToggleSneak((PlayerToggleSneakEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case PLAYER_BUCKET_EMPTY:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
((PlayerListener) listener).onPlayerBucketEmpty((PlayerBucketEmptyEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case PLAYER_BUCKET_FILL:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
((PlayerListener) listener).onPlayerBucketFill((PlayerBucketFillEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case PLAYER_BED_ENTER:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
((PlayerListener) listener).onPlayerBedEnter((PlayerBedEnterEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case PLAYER_BED_LEAVE:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
@@ -372,72 +405,84 @@ public final class JavaPluginLoader implements PluginLoader {
|
||||
((BlockListener) listener).onBlockPhysics((BlockPhysicsEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case BLOCK_CANBUILD:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
((BlockListener) listener).onBlockCanBuild((BlockCanBuildEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case BLOCK_PLACE:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
((BlockListener) listener).onBlockPlace((BlockPlaceEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case BLOCK_DAMAGE:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
((BlockListener) listener).onBlockDamage((BlockDamageEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case BLOCK_FROMTO:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
((BlockListener) listener).onBlockFromTo((BlockFromToEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case LEAVES_DECAY:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
((BlockListener) listener).onLeavesDecay((LeavesDecayEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case SIGN_CHANGE:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
((BlockListener) listener).onSignChange((SignChangeEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case BLOCK_IGNITE:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
((BlockListener) listener).onBlockIgnite((BlockIgniteEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case REDSTONE_CHANGE:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
((BlockListener) listener).onBlockRedstoneChange((BlockRedstoneEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case BLOCK_BURN:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
((BlockListener) listener).onBlockBurn((BlockBurnEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case BLOCK_BREAK:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
((BlockListener) listener).onBlockBreak((BlockBreakEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case SNOW_FORM:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
((BlockListener) listener).onSnowForm((SnowFormEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case BLOCK_DISPENSE:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
@@ -452,12 +497,14 @@ public final class JavaPluginLoader implements PluginLoader {
|
||||
((ServerListener) listener).onPluginEnable((PluginEnableEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case PLUGIN_DISABLE:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
((ServerListener) listener).onPluginDisable((PluginDisableEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case SERVER_COMMAND:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
@@ -472,24 +519,28 @@ public final class JavaPluginLoader implements PluginLoader {
|
||||
((WorldListener) listener).onChunkLoad((ChunkLoadEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case CHUNK_UNLOAD:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
((WorldListener) listener).onChunkUnload((ChunkUnloadEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case SPAWN_CHANGE:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
((WorldListener) listener).onSpawnChange((SpawnChangeEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case WORLD_SAVE:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
((WorldListener) listener).onWorldSave((WorldSaveEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case WORLD_LOAD:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
@@ -497,13 +548,14 @@ public final class JavaPluginLoader implements PluginLoader {
|
||||
}
|
||||
};
|
||||
|
||||
//Painting Events
|
||||
// Painting Events
|
||||
case PAINTING_PLACE:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
((EntityListener) listener).onPaintingPlace((PaintingPlaceEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case PAINTING_BREAK:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
@@ -518,54 +570,63 @@ public final class JavaPluginLoader implements PluginLoader {
|
||||
((EntityListener) listener).onEntityDamage((EntityDamageEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case ENTITY_DEATH:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
((EntityListener) listener).onEntityDeath((EntityDeathEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case ENTITY_COMBUST:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
((EntityListener) listener).onEntityCombust((EntityCombustEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case ENTITY_EXPLODE:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
((EntityListener) listener).onEntityExplode((EntityExplodeEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case EXPLOSION_PRIME:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
((EntityListener) listener).onExplosionPrime((ExplosionPrimeEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case ENTITY_TARGET:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
((EntityListener) listener).onEntityTarget((EntityTargetEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case ENTITY_INTERACT:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
((EntityListener) listener).onEntityInteract((EntityInteractEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case CREATURE_SPAWN:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
((EntityListener) listener).onCreatureSpawn((CreatureSpawnEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case PIG_ZAP:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
((EntityListener) listener).onPigZap((PigZapEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case CREEPER_POWER:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
@@ -580,47 +641,56 @@ public final class JavaPluginLoader implements PluginLoader {
|
||||
((VehicleListener) listener).onVehicleCreate((VehicleCreateEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case VEHICLE_DAMAGE:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
((VehicleListener) listener).onVehicleDamage((VehicleDamageEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case VEHICLE_DESTROY:
|
||||
return new EventExecutor() { public void execute( Listener listener, Event event ) {
|
||||
((VehicleListener)listener).onVehicleDestroy( (VehicleDestroyEvent)event );
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
((VehicleListener) listener).onVehicleDestroy((VehicleDestroyEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case VEHICLE_COLLISION_BLOCK:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
((VehicleListener) listener).onVehicleBlockCollision((VehicleBlockCollisionEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case VEHICLE_COLLISION_ENTITY:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
((VehicleListener) listener).onVehicleEntityCollision((VehicleEntityCollisionEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case VEHICLE_ENTER:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
((VehicleListener) listener).onVehicleEnter((VehicleEnterEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case VEHICLE_EXIT:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
((VehicleListener) listener).onVehicleExit((VehicleExitEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case VEHICLE_MOVE:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
((VehicleListener) listener).onVehicleMove((VehicleMoveEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case VEHICLE_UPDATE:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
@@ -635,12 +705,14 @@ public final class JavaPluginLoader implements PluginLoader {
|
||||
((WeatherListener) listener).onWeatherChange((WeatherChangeEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case THUNDER_CHANGE:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
((WeatherListener) listener).onThunderChange((ThunderChangeEvent) event);
|
||||
}
|
||||
};
|
||||
|
||||
case LIGHTNING_STRIKE:
|
||||
return new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) {
|
||||
@@ -657,7 +729,7 @@ public final class JavaPluginLoader implements PluginLoader {
|
||||
};
|
||||
}
|
||||
|
||||
throw new IllegalArgumentException( "Event " + type + " is not supported" );
|
||||
throw new IllegalArgumentException("Event " + type + " is not supported");
|
||||
}
|
||||
|
||||
public void enablePlugin(final Plugin plugin) {
|
||||
@@ -666,11 +738,12 @@ public final class JavaPluginLoader implements PluginLoader {
|
||||
}
|
||||
|
||||
if (!plugin.isEnabled()) {
|
||||
JavaPlugin jPlugin = (JavaPlugin)plugin;
|
||||
JavaPlugin jPlugin = (JavaPlugin) plugin;
|
||||
|
||||
String pluginName = jPlugin.getDescription().getName();
|
||||
if(!loaders.containsKey(pluginName)) {
|
||||
loaders.put(pluginName, (PluginClassLoader)jPlugin.getClassLoader());
|
||||
|
||||
if (!loaders.containsKey(pluginName)) {
|
||||
loaders.put(pluginName, (PluginClassLoader) jPlugin.getClassLoader());
|
||||
}
|
||||
|
||||
try {
|
||||
@@ -678,10 +751,9 @@ public final class JavaPluginLoader implements PluginLoader {
|
||||
} catch (Throwable ex) {
|
||||
server.getLogger().log(Level.SEVERE, "Error occurred while enabling " + plugin.getDescription().getFullName() + " (Is it up to date?): " + ex.getMessage(), ex);
|
||||
}
|
||||
|
||||
|
||||
// Perhaps abort here, rather than continue going, but as it stands,
|
||||
// an abort is not possible the way it's currently written
|
||||
|
||||
server.getPluginManager().callEvent(new PluginEnableEvent(plugin));
|
||||
}
|
||||
}
|
||||
@@ -692,7 +764,7 @@ public final class JavaPluginLoader implements PluginLoader {
|
||||
}
|
||||
|
||||
if (plugin.isEnabled()) {
|
||||
JavaPlugin jPlugin = (JavaPlugin)plugin;
|
||||
JavaPlugin jPlugin = (JavaPlugin) plugin;
|
||||
ClassLoader cloader = jPlugin.getClassLoader();
|
||||
|
||||
try {
|
||||
@@ -706,7 +778,7 @@ public final class JavaPluginLoader implements PluginLoader {
|
||||
loaders.remove(jPlugin.getDescription().getName());
|
||||
|
||||
if (cloader instanceof PluginClassLoader) {
|
||||
PluginClassLoader loader = (PluginClassLoader)cloader;
|
||||
PluginClassLoader loader = (PluginClassLoader) cloader;
|
||||
Set<String> names = loader.getClasses();
|
||||
|
||||
for (String name : names) {
|
||||
@@ -716,4 +788,3 @@ public final class JavaPluginLoader implements PluginLoader {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -29,15 +29,16 @@ public class PluginClassLoader extends URLClassLoader {
|
||||
// 1. Local first, this avoids IllegalAccessError exceptions for duplicate classes
|
||||
// 2. Global cache second which prevents ClassCastException's apparently
|
||||
Class<?> result = classes.get(name);
|
||||
if ( null == result ) {
|
||||
|
||||
if (null == result) {
|
||||
try {
|
||||
result = super.findClass(name);
|
||||
classes.put(name, result);
|
||||
loader.setClass(name, result);
|
||||
} catch ( ClassNotFoundException e ) {
|
||||
if ( checkGlobal ) {
|
||||
} catch (ClassNotFoundException e) {
|
||||
if (checkGlobal) {
|
||||
result = loader.getClassByName(name);
|
||||
if ( null == result ) {
|
||||
if (null == result) {
|
||||
// We really couldnt find it
|
||||
throw new ClassNotFoundException(name);
|
||||
}
|
||||
@@ -53,7 +54,6 @@ public class PluginClassLoader extends URLClassLoader {
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
public Set<String> getClasses() {
|
||||
return classes.keySet();
|
||||
}
|
||||
|
Reference in New Issue
Block a user