Whitespace + general cleanup

By: Erik Broes <erikbroes@grum.nl>
This commit is contained in:
Bukkit/Spigot
2011-05-14 23:22:54 +02:00
parent 8217ff1836
commit 855f4133b6
216 changed files with 1649 additions and 1637 deletions

View File

@@ -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);
}

View File

@@ -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.

View File

@@ -1,4 +1,3 @@
package org.bukkit.plugin;
/**

View File

@@ -1,4 +1,3 @@
package org.bukkit.plugin;
/**

View File

@@ -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.

View File

@@ -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));

View File

@@ -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
*

View File

@@ -1,4 +1,3 @@
package org.bukkit.plugin;
import java.io.File;

View 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);
}
}

View File

@@ -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;
}
}
}

View File

@@ -9,4 +9,4 @@ public enum ServicePriority {
Normal,
High,
Highest
}
}

View File

@@ -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);
}
}

View File

@@ -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));
}
/**

View File

@@ -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

View File

@@ -1,4 +1,3 @@
package org.bukkit.plugin;
/**

View File

@@ -41,5 +41,4 @@ public class UnknownSoftDependencyException extends UnknownDependencyException {
public UnknownSoftDependencyException() {
this(null, "Unknown dependency");
}
}

View File

@@ -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());

View File

@@ -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 {
}
}
}

View File

@@ -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();
}