package jk_5.nailed.server.plugin;
import com.google.common.base.MoreObjects;
import jk_5.eventbus.Event;
import jk_5.eventbus.EventBus;
import jk_5.nailed.api.event.PlatformEvent;
import jk_5.nailed.api.plugin.Plugin;
import jk_5.nailed.api.plugin.PluginContainer;
import jk_5.nailed.api.plugin.PluginIdentifier;
import jk_5.nailed.server.NailedPlatform;
import java.io.File;
public class DefaultPluginContainer implements PluginContainer, PluginIdentifier {
private final Plugin annotation;
private final Object instance;
private final File location;
private final EventBus eventBus = new EventBus();
public DefaultPluginContainer(Plugin annotation, Object instance, File location) {
this.annotation = annotation;
this.instance = instance;
this.location = location;
eventBus.register(instance);
NailedPlatform.instance().getEventBus().register(instance);
}
public <T extends Event> T fireEvent(T event){
if(event instanceof PlatformEvent){
((PlatformEvent) event).setPlatform(NailedPlatform.instance());
}
eventBus.post(event);
return event;
}
public EventBus getEventBus() {
return eventBus;
}
@Override
public String getId() {
return annotation.id();
}
@Override
public String getName() {
return annotation.name();
}
@Override
public String getVersion() {
return annotation.version();
}
@Override
public Object getInstance() {
return instance;
}
@Override
public PluginIdentifier getIdentifier() {
return this;
}
public boolean hasLocation(){
return this.location != null;
}
public File getLocation(){
return location;
}
@Override
public String toString() {
return MoreObjects.toStringHelper(this)
.add("id", getId())
.add("name", getName())
.add("version", getVersion())
.add("instance", instance)
.toString();
}
}