Newer
Older
ultramine_bukkit / src / main / java / org / ultramine / mods / bukkit / BukkitRegistryImpl.java
@vlad20012 vlad20012 on 24 Feb 2017 1 KB initial
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;
		}
	}
}