repo_description: Create Minecraft bots with a powerful, stable, and high level JavaScript API.
repo_topics: bot minecraft minecraft-api minecraft-bot network nodejs
code: const assert = require('assert')
  
  module.exports = inject
  
  function inject (bot, options) {
    let loaded = false
    const pluginList = []
    bot.once('inject_allowed', onInjectAllowed)
  
    function onInjectAllowed () {
      loaded = true
      injectPlugins()
    }
  
    function loadPlugin (plugin) {
      assert.ok(typeof plugin === 'function', 'plugin needs to be a function')
  
      if (hasPlugin(plugin)) {
        return
      }
  
      pluginList.push(plugin)
  
      if (loaded) {
        plugin(bot, options)
      }
    }
  
    function loadPlugins (plugins) {
      // While type checking if already done in the other function, it's useful to do
      // it here to prevent situations where only half the plugin list is loaded.
      assert.ok(plugins.filter(plugin => typeof plugin === 'function').length === plugins.length, 'plugins need to be an array of functions')
  
      plugins.forEach((plugin) => {
        loadPlugin(plugin)
      })
    }
  
    function injectPlugins () {
      pluginList.forEach((plugin) => {
        plugin(bot, options)
      })
    }
  
    function hasPlugin (plugin) {
      return pluginList.indexOf(plugin) >= 0
    }
  
    bot.loadPlugin = loadPlugin
    bot.loadPlugins = loadPlugins
    bot.hasPlugin = hasPlugin
  }
  