TF-Marriage/src/main/java/com/lenis0012/bukkit/marriage2/internal/MarriageBase.java

95 lines
2.6 KiB
Java
Raw Normal View History

2014-11-12 19:41:40 +00:00
package com.lenis0012.bukkit.marriage2.internal;
2016-04-21 07:39:59 +00:00
import com.google.common.collect.Lists;
import com.google.common.reflect.ClassPath;
import com.lenis0012.bukkit.marriage2.Marriage;
import com.lenis0012.bukkit.marriage2.commands.Command;
import com.lenis0012.bukkit.marriage2.misc.BConfig;
import org.bukkit.Bukkit;
import org.bukkit.event.Listener;
2014-11-12 21:27:22 +00:00
import java.io.File;
2015-02-03 21:59:57 +00:00
import java.io.IOException;
import java.util.List;
import java.util.logging.Level;
2014-11-12 19:41:40 +00:00
import java.util.logging.Logger;
public abstract class MarriageBase implements Marriage {
protected final MarriagePlugin plugin;
2015-02-03 21:59:57 +00:00
private final ClassPath classPath;
private MarriageCommandExecutor commandExecutor;
2014-11-12 19:41:40 +00:00
public MarriageBase(MarriagePlugin plugin) {
this.plugin = plugin;
2015-02-03 21:59:57 +00:00
try {
this.classPath = ClassPath.from(getClass().getClassLoader());
} catch (IOException e) {
throw new RuntimeException("Failed to intialize class path!", e);
}
}
void enable() {
2014-11-12 19:41:40 +00:00
this.commandExecutor = new MarriageCommandExecutor(this);
plugin.getCommand("marry").setExecutor(commandExecutor);
}
@Override
public void register(Listener listener) {
Bukkit.getPluginManager().registerEvents(listener, plugin);
}
@Override
public void register(Class<? extends Command> commandClass) {
2016-06-12 16:24:04 +00:00
commandExecutor.register(commandClass);
2014-11-12 19:41:40 +00:00
}
2014-11-12 21:27:22 +00:00
@Override
public BConfig getBukkitConfig(String fileName) {
2015-05-26 21:58:01 +00:00
File file = new File(plugin.getDataFolder(), fileName);
2014-11-12 21:27:22 +00:00
return new BConfig(this, file);
}
2014-11-12 19:41:40 +00:00
@Override
public Logger getLogger() {
return plugin.getLogger();
}
@Override
public MarriagePlugin getPlugin() {
return plugin;
}
2015-01-09 19:43:37 +00:00
public MarriageCommandExecutor getCommandExecutor() {
return commandExecutor;
}
2015-02-03 21:59:57 +00:00
@SuppressWarnings("unchecked")
protected <T> List<Class<? extends T>> findClasses(String pkg, Class<T> type, Object... params) {
List<Class<? extends T>> list = Lists.newArrayList();
2015-05-26 21:58:01 +00:00
for(ClassPath.ClassInfo info : classPath.getTopLevelClassesRecursive(pkg)) {
2015-02-03 21:59:57 +00:00
try {
Class<?> clazz = Class.forName(info.getName());
2015-05-26 21:58:01 +00:00
if(type.isAssignableFrom(clazz) && !type.equals(clazz)) {
2015-02-03 21:59:57 +00:00
list.add((Class<? extends T>) clazz);
}
} catch(Exception e) {
plugin.getLogger().log(Level.WARNING, "Failed to intiate class", e);
}
}
return list;
}
protected <T> List<T> findObjects(String pkg, Class<T> type, Object... params) {
List<T> list = Lists.newArrayList();
for(Class<? extends T> clazz : findClasses(pkg, type)) {
try {
list.add(type.cast(clazz.getConstructors()[0].newInstance(params)));
} catch (Exception e) {
plugin.getLogger().log(Level.WARNING, "Failed to construct class", e);
}
}
return list;
}
2014-11-12 19:41:40 +00:00
}