class McBlocky::Cli

Public Instance Methods

list() click to toggle source
# File lib/mcblocky/cli.rb, line 18
def list
  begin
    Config.load(options[:config])
  rescue ArgumentError => e
    log_error "Error in #{File.basename Config.config_path}:"
    log_error e.message
    exit 1
  end
  if options[:watch]
    $old_context = nil
    listener = Listener.from_config do |context|
      Executor.to_commands(context, options[:diff] ? $old_context : nil).each{|c| puts c}
      $old_context = context
    end
    listener.start
    while true; end
  else
    context = Context.run_file(Config.config['code']['main'], File.dirname(Config.config_path))
    Executor.to_commands(context).each{|c| puts c}
  end
rescue Interrupt
end
start() click to toggle source
# File lib/mcblocky/cli.rb, line 42
def start
  begin
    Config.load(options[:config])
  rescue ArgumentError => e
    log_error "Error in #{File.basename Config.config_path}:"
    log_error e.message
    exit 1
  end
  $server = Server.from_config
  log_status "Starting server..."
  $server.start
  log_status "Server is ready! Connect to 127.0.0.1:25565"
  reader = Thread.new do
    until $stdin.closed?
      line = $stdin.gets.chomp
      $server.command line unless line.empty?
    end
  end
  $server.say("McBlocky is ready")
  $server.on_message '!stop' do
    log_status "Stopping server..."
    $server.stop
  end
  $server.on_message /^!/ do |message, user|
    next unless $context
    command, _, args = message.partition(/\s+/)
    $context.helpers.each do |aliases, block|
      aliases = [aliases] if String === aliases
      aliases.each do |a|
        if command == "!#{a}"
          block.call(args, user, a)
          break
        end
      end
    end
  end
  listener = Listener.from_config do |context|
    old_context = $context
    $context = context
    $context.server = $server # needed by helpers
    Executor.to_commands(context, old_context).each{|c| $server.command c}
  end
  listener.start
  $server.loop!
rescue SystemExit
  if $server
    log_status "Stopping server..."
    $server.stop
  end
  reader.kill if reader
rescue Interrupt
  if $server
    log_status "Stopping server..."
    $server.stop
  end
  reader.kill if reader
rescue Exception
  log_error "Caught error, stopping server..."
  begin
    $server.stop if $server
    reader.kill if reader
  rescue
  end
  log_error "Error trace:"
  raise
end
version() click to toggle source
# File lib/mcblocky/cli.rb, line 110
def version
  puts "mcblocky #{McBlocky::VERSION}"
end