package org.ultramine.mods.bukkit;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.plugin.PluginDescriptionFile;
import org.bukkit.plugin.SimplePluginManager;
import org.ultramine.mods.bukkit.api.BukkitRegistry;
import org.ultramine.mods.bukkit.api.BukkitStateForgeEvent;
import javax.annotation.Nullable;
import java.util.ArrayList;
import java.util.List;
public class BukkitRegistryImpl implements BukkitRegistry
{
private final List<InjectedPluginRegistration> injectedPlugins = new ArrayList<InjectedPluginRegistration>();
private @Nullable CraftServer server;
@Override
public void injectPlugin(String pkg, PluginDescriptionFile description)
{
if(server != null) // TODO add post init registration
throw new IllegalStateException("Bukkit server is already init. You should inject bukkit plugins on LOAD forge state");
InjectedPluginRegistration reg = new InjectedPluginRegistration(pkg, description);
injectedPlugins.add(reg);
}
@SubscribeEvent
public void onPrePluginsLoad(BukkitStateForgeEvent.PluginsLoad.Pre e)
{
CraftServer server = this.server = e.getServer();
for(InjectedPluginRegistration reg : injectedPlugins)
injectPlugin(server, reg);
}
private void injectPlugin(CraftServer server, InjectedPluginRegistration reg)
{
((SimplePluginManager) server.getPluginManager()).loadInjectedPlugin(reg.pkg, reg.description);
}
private static class InjectedPluginRegistration
{
private final String pkg;
private final PluginDescriptionFile description;
private InjectedPluginRegistration(String pkg, PluginDescriptionFile description)
{
this.pkg = pkg;
this.description = description;
}
}
}