package com.supaham.commons.bukkit;
import static com.google.common.base.Preconditions.checkNotNull;
import com.supaham.commons.CMain;
import com.supaham.commons.bukkit.serializers.CBSerializers;
import org.bukkit.plugin.Plugin;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import javax.annotation.Nonnull;
/**
* Commons main bukkit class.
*
* @since 0.1
*/
public class CBukkitMain {
private static CBukkitMain instance = null;
private final Map<String, Plugin> hookedPlugins = new HashMap<>();
/**
* Gets the instance of this singleton class.
*
* @return {@link CBukkitMain} instance.
*/
public static CBukkitMain get() {
if (CBukkitMain.instance == null) {
CBukkitMain.instance = new CBukkitMain();
}
return CBukkitMain.instance;
}
public static void hook(@Nonnull Plugin plugin) {
checkNotNull(plugin, "plugin cannot be null.");
if (CMain.get() == null) {
CMain.main(plugin.getLogger());
}
CBukkitMain inst = CBukkitMain.get();
if (inst.hookedPlugins.containsValue(plugin)) {
return;
}
inst.hookedPlugins.put(plugin.getName(), plugin);
plugin.getLogger().fine("Hooked into commons-bukkit.");
}
public static boolean unhook(@Nonnull Plugin plugin) {
checkNotNull(plugin, "plugin cannot be null.");
return CBukkitMain.instance != null
&& instance.hookedPlugins.remove(plugin.getName()) != null;
}
private CBukkitMain() {
}
public Map<String, Plugin> getHookedPlugins() {
return Collections.unmodifiableMap(this.hookedPlugins);
}
}