下面列出了怎么用org.bukkit.plugin.PluginLoader的API类实例代码及写法,或者点击链接到github查看源代码。
@SuppressWarnings("unchecked")
public Plugin loadPlugin(PluginDescriptionFile plugin) throws UnknownDependencyException {
final SimplePluginManager manager = (SimplePluginManager) server.getPluginManager();
try {
final File file = new File("plugins", plugin.getName());
final Class[] init =
new Class[] {
PluginLoader.class, Server.class, PluginDescriptionFile.class, File.class, File.class
};
final JavaPlugin instance =
(JavaPlugin)
Class.forName(plugin.getMain())
.getConstructor(init)
.newInstance(this, server, plugin, file, file);
readField(SimplePluginManager.class, manager, List.class, "plugins").add(instance);
readField(SimplePluginManager.class, manager, Map.class, "lookupNames")
.put(instance.getName().toLowerCase(), instance);
return instance;
} catch (Throwable t) {
throw new UnknownDependencyException(
t, "Unable to load plugin: " + plugin.getName() + " (" + plugin.getMain() + ")");
}
}
public PGMPlugin(
PluginLoader loader,
Server server,
PluginDescriptionFile description,
File dataFolder,
File file) {
super(loader, server, description, dataFolder, file);
}
final void init(PluginLoader loader, Server server, PluginDescriptionFile description, File dataFolder, File file, ClassLoader classLoader) {
this.loader = loader;
this.server = server;
this.file = file;
this.description = description;
this.dataFolder = dataFolder;
this.classLoader = classLoader;
this.configFile = new File(dataFolder, "config.yml");
this.logger = new PluginLogger(this);
}
@Override
public PluginLoader getPluginLoader() {
return InternalPluginLoader.getLoader();
}
@Override
public void registerInterface(Class<? extends PluginLoader> loader)
throws IllegalArgumentException {
delegate.registerInterface(loader);
}
@SuppressWarnings({"resource", "deprecation"})
@Before
public void before() throws Exception {
final File dataDir = new File("build/resources/");
final File jar = new File("build/", "skript.jar");
assumeTrue(jar.exists());
final Logger l = Logger.getLogger(getClass().getCanonicalName());
l.setParent(SkriptLogger.LOGGER);
l.setLevel(Level.WARNING);
final Server s = createMock(Server.class);
s.getLogger();
expectLastCall().andReturn(l).anyTimes();
s.isPrimaryThread();
expectLastCall().andReturn(true).anyTimes();
s.getName();
expectLastCall().andReturn("Whatever").anyTimes();
s.getVersion();
expectLastCall().andReturn("2.0").anyTimes();
s.getBukkitVersion();
expectLastCall().andReturn("2.0").anyTimes();
replay(s);
Bukkit.setServer(s);
final Skript skript = (Skript) ObjenesisHelper.newInstance(Skript.class); // bypass the class loader check
final Field instance = Skript.class.getDeclaredField("instance");
instance.setAccessible(true);
instance.set(null, skript);
final PluginDescriptionFile pdf = new PluginDescriptionFile(new FileInputStream(new File(dataDir, "plugin.yml")));
// final void init(PluginLoader loader, Server server, PluginDescriptionFile description, File dataFolder, File file, ClassLoader classLoader) {
final Method init = JavaPlugin.class.getDeclaredMethod("init", PluginLoader.class, Server.class, PluginDescriptionFile.class, File.class, File.class, ClassLoader.class);
init.setAccessible(true);
init.invoke(skript, new JavaPluginLoader(s), s, pdf, dataDir, jar, getClass().getClassLoader());
Skript.getAddonInstance().loadClasses("ch.njol.skript", "entity");
new JavaClasses();
new BukkitClasses();
new BukkitEventValues();
new SkriptClasses();
final Field r = Skript.class.getDeclaredField("acceptRegistrations");
r.setAccessible(true);
r.set(null, false);
Classes.onRegistrationsStop();
}
@Override
public PluginLoader getPluginLoader() {
return delegate.getPluginLoader();
}
@Override
public void registerInterface(Class<? extends PluginLoader> loader) throws IllegalArgumentException {
delegate.registerInterface(loader);
}
/**
* Gets the associated PluginLoader responsible for this plugin
*
* @return PluginLoader that controls this plugin
*/
@Override
public final PluginLoader getPluginLoader() {
return loader;
}