package toadmess.explosives; import static toadmess.explosives.config.ConfProps.*; import java.util.ArrayList; import java.util.List; import java.util.logging.Logger; import org.bukkit.entity.Creeper; import org.bukkit.entity.Fireball; import org.bukkit.entity.TNTPrimed; import org.bukkit.plugin.PluginDescriptionFile; import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.util.config.Configuration; import toadmess.explosives.config.ConfProps; import toadmess.explosives.config.MultiWorldConfStore; import toadmess.explosives.config.entity.EntityConf; import toadmess.explosives.events.handlers.EventRouter; public class HEMain extends JavaPlugin { /** True if we should print out some debugging of the configuration */ public boolean IS_DEBUG_CONF; protected Logger log; private final List<BukkitListeners> entityListeners = new ArrayList<BukkitListeners>(); @Override public void onEnable() { this.log = getServer().getLogger(); final PluginManager pm = getServer().getPluginManager(); Gatekeeper.onEnable(pm, this.log); configureWorkarounds(pm); IS_DEBUG_CONF = this.getConfiguration().getBoolean(CONF_DEBUGCONFIG.toString(), false); final MultiWorldConfStore confStore = new MultiWorldConfStore(this.log); confStore.readConfsForEntity(Creeper.class, this.getConfiguration()); confStore.readConfsForEntity(TNTPrimed.class, this.getConfiguration()); confStore.readConfsForEntity(Fireball.class, this.getConfiguration()); final BukkitListeners el = new BukkitListeners(this, new EventRouter(this, confStore), confStore); el.registerNeededEvents(pm, this); this.log.info(pluginDescription() + " primed and ready"); } @Override public void onDisable() { this.entityListeners.clear(); this.log.info(pluginDescription() + " defused and disabled"); } private void configureWorkarounds(final PluginManager pm) { if(null != pm.getPlugin("Mining TNT") || null != pm.getPlugin("MiningTNT")) { this.log.info(pluginDescription() + " detected MiningTNT. Default yield value will be 1.0 instead of 0.3 (unless a value is given in config.yml)"); EntityConf.hasConflictWithMiningTNT = true; } else { EntityConf.hasConflictWithMiningTNT = false; } } private String pluginDescription() { final PluginDescriptionFile desc = getDescription(); return desc.getName() + " " + desc.getVersion(); } @Override public Configuration getConfiguration() { final Configuration conf = super.getConfiguration(); final String pluginVersion = getDescription().getVersion(); final String configVersion = conf.getString(CONF_VERSION.toString(), ""); if(null == conf || "".equals(configVersion)) { this.log.info(pluginDescription() + " found no configuration file. Creating a fresh default one."); conf.setProperty(CONF_VERSION.toString(), pluginVersion); conf.setProperty(CONF_ENTITIES + ".TNTPrimed." + CONF_ENTITY_RADIUSMULT, 2.0f); conf.setProperty(CONF_ENTITIES + ".TNTPrimed." + CONF_ENTITY_YIELD, 0.15f); conf.save(); } else if(!configVersion.equalsIgnoreCase(pluginVersion)) { this.log.warning(pluginDescription() + ": Found a configuration file for a different version ("+configVersion+"). Going to try using it anyway."); } return conf; } }