module McBlocky::DSL

Public Class Methods

to_json(*args) click to toggle source
# File lib/mcblocky/dsl.rb, line 147
def to_json(*args)
  if args.length > 1
    JSON.dump(args)
  else
    JSON.dump(args[0])
  end
end
to_nbt(obj) click to toggle source
# File lib/mcblocky/dsl.rb, line 128
def to_nbt(obj)
  case obj
  when String
    JSON.dump(obj)
  when Fixnum, Float
    obj.to_s
  when Array
    "[#{obj.map{|x| to_nbt x}.join(',')}]"
  when Hash
    pairs = obj.map do |k,v|
      "#{k}:#{to_nbt v}"
    end
    "{#{pairs.join(',')}}"
  else
    raise ArgumentError, "No NBT form for #{obj}"
  end
end

Public Instance Methods

after(&block) click to toggle source
# File lib/mcblocky/dsl.rb, line 28
def after(&block)
  chain = Commands.new(context, :after)
  chain.instance_exec(&block)
  chains << chain
end
area(x1, y1, z1, x2, y2, z2) click to toggle source
# File lib/mcblocky/dsl.rb, line 84
def area(x1, y1, z1, x2, y2, z2)
  context.last_area = Rect.new(x1, y1, z1, x2, y2, z2)
end
at(x, y, z, data=0, kind=:normal, nbt={}, &block) click to toggle source
# File lib/mcblocky/dsl.rb, line 64
def at(x, y, z, data=0, kind=:normal, nbt={}, &block)
  if Symbol === data
    kind = data
    data = 0
  end
  block_kind = case kind
               when :normal
                 'minecraft:command_block'
               when :chain
                 'minecraft:chain_command_block'
               when :repeating
                 'minecraft:repeating_command_block'
               else
                 raise ArgumentError, 'Unknown command block type'
               end
  cblock = CommandBlock.new(context, x, y, z, data, block_kind, nbt)
  cblock.instance_exec(&block)
  blocks[Location.new(x, y, z)] = cblock
end
chain(*args, &block) click to toggle source
# File lib/mcblocky/dsl.rb, line 49
def chain(*args, &block)
  if Symbol === args[0]
    name = args.delete_at(0)
    raise NameError, 'Name already exists' if named_chains.has_key? name
  end
  if args.empty?
    rect = context.last_area
    args = [rect.x1, rect.y1, rect.z1, rect.x2, rect.y2, rect.z2]
  end
  chain = ImpulseChain.new(context, *args)
  chain.instance_exec(&block)
  chains << chain
  named_chains[name] = chain if name
end
chest(x, y, z, data=0, &block) click to toggle source
# File lib/mcblocky/dsl.rb, line 98
def chest(x, y, z, data=0, &block)
  container = Container.new(x, y, z, 'minecraft:chest', data)
  container.instance_exec(&block)
  blocks[Location.new(x, y, z)] = container
end
cleanup(&block) click to toggle source
# File lib/mcblocky/dsl.rb, line 22
def cleanup(&block)
  chain = Commands.new(context, :cleanup)
  chain.instance_exec(&block)
  chains << chain
end
dispenser(x, y, z, data=0, &block) click to toggle source
# File lib/mcblocky/dsl.rb, line 110
def dispenser(x, y, z, data=0, &block)
  container = Container.new(x, y, z, 'minecraft:dispenser', data)
  container.instance_exec(&block)
  blocks[Location.new(x, y, z)] = container
end
dropper(x, y, z, data=0, &block) click to toggle source
# File lib/mcblocky/dsl.rb, line 116
def dropper(x, y, z, data=0, &block)
  container = Container.new(x, y, z, 'minecraft:dropper', data)
  container.instance_exec(&block)
  blocks[Location.new(x, y, z)] = container
end
fill(x1, y1, z1, x2, y2, z2, kind, data=0) click to toggle source
# File lib/mcblocky/dsl.rb, line 93
def fill(x1, y1, z1, x2, y2, z2, kind, data=0)
  block = Block.new(nil, nil, nil, kind, data)
  rects[Rect.new(x1, y1, z1, x2, y2, z2)] = block
end
furnace(x, y, z, data=0, &block) click to toggle source
# File lib/mcblocky/dsl.rb, line 122
def furnace(x, y, z, data=0, &block)
  container = Container.new(x, y, z, 'minecraft:furnace', data)
  container.instance_exec(&block)
  blocks[Location.new(x, y, z)] = container
end
helper(*command, &block) click to toggle source
# File lib/mcblocky/dsl.rb, line 12
def helper(*command, &block)
  context.helpers << [command, block]
end
initial(&block) click to toggle source
# File lib/mcblocky/dsl.rb, line 16
def initial(&block)
  chain = Commands.new(context, :initial)
  chain.instance_exec(&block)
  chains << chain
end
repeat(*args, &block) click to toggle source
# File lib/mcblocky/dsl.rb, line 34
def repeat(*args, &block)
  if Symbol === args[0]
    name = args.delete_at(0)
    raise NameError, 'Name already exists' if named_chains.has_key? name
  end
  if args.empty?
    rect = context.last_area
    args = [rect.x1, rect.y1, rect.z1, rect.x2, rect.y2, rect.z2]
  end
  chain = RepeatChain.new(context, *args)
  chain.instance_exec(&block)
  chains << chain
  named_chains[name] = chain if name
end
setblock(x, y, z, kind, data=0, replacemode='replace', nbt={}) click to toggle source
# File lib/mcblocky/dsl.rb, line 88
def setblock(x, y, z, kind, data=0, replacemode='replace', nbt={})
  block = Block.new(x, y, z, kind, data, nbt)
  blocks[Location.new(x, y, z)] = block
end
trapped_chest(x, y, z, data=0, &block) click to toggle source
# File lib/mcblocky/dsl.rb, line 104
def trapped_chest(x, y, z, data=0, &block)
  container = Container.new(x, y, z, 'minecraft:trapped_chest', data)
  container.instance_exec(&block)
  blocks[Location.new(x, y, z)] = container
end

Private Instance Methods

to_json(*args) click to toggle source
# File lib/mcblocky/dsl.rb, line 147
def to_json(*args)
  if args.length > 1
    JSON.dump(args)
  else
    JSON.dump(args[0])
  end
end
to_nbt(obj) click to toggle source
# File lib/mcblocky/dsl.rb, line 128
def to_nbt(obj)
  case obj
  when String
    JSON.dump(obj)
  when Fixnum, Float
    obj.to_s
  when Array
    "[#{obj.map{|x| to_nbt x}.join(',')}]"
  when Hash
    pairs = obj.map do |k,v|
      "#{k}:#{to_nbt v}"
    end
    "{#{pairs.join(',')}}"
  else
    raise ArgumentError, "No NBT form for #{obj}"
  end
end