
minetest.register_node('lights:torch', {
   description = 'Torch',
   drawtype = 'mesh',
   mesh = 'torch_floor.obj',
   inventory_image = 'lights_torch_wield.png',
   wield_image = 'lights_torch_wield.png',
   tiles = {'lights_torch.png',
      {name = 'lights_torch_flame.png',
         animation = {type = 'vertical_frames', aspect_w = 16, aspect_h = 16, length = 2}
   }},
   use_texture_alpha = 'clip',
   paramtype = 'light',
   paramtype2 = 'wallmounted',
   sunlight_propagates = true,
   walkable = false,
   liquids_pointable = false,
   light_source = 12,
   groups = {breakable=1},
   drop = 'lights:torch',
   selection_box = {
      type = 'wallmounted',
      wall_bottom = {-1/8, -1/2, -1/8, 1/8, 2/16, 1/8},
   },
   on_place = function(itemstack, placer, pointed_thing)
   local under = pointed_thing.under
   local node = minetest.get_node(under)
   local def = minetest.registered_nodes[node.name]
   if def and def.on_rightclick and not (placer and placer:is_player() and placer:get_player_control().sneak) then
      return def.on_rightclick(under, node, placer, itemstack, pointed_thing) or itemstack
   end

   local above = pointed_thing.above
   local wdir = minetest.dir_to_wallmounted(vector.subtract(under, above))
   local fakestack = itemstack
   if wdir == 0 then
      fakestack:set_name('lights:torch_ceiling')
   elseif wdir == 1 then
      fakestack:set_name('lights:torch')
   else
      fakestack:set_name('lights:torch_wall')
   end

   itemstack = minetest.item_place(fakestack, placer, pointed_thing, wdir)
   itemstack:set_name('lights:torch')

   return itemstack
   end,
})

minetest.register_node('lights:torch_wall', {
   drawtype = 'mesh',
   mesh = 'torch_wall.obj',
   tiles = {'lights_torch.png',
      {name = 'lights_torch_flame.png',
         animation = {type = 'vertical_frames', aspect_w = 16, aspect_h = 16, length = 2}
   }},
   use_texture_alpha = 'clip',
   paramtype = 'light',
   paramtype2 = 'wallmounted',
   sunlight_propagates = true,
   walkable = false,
   light_source = 12,
   groups = {breakable=1},
   drop = 'lights:torch',
   selection_box = {
      type = 'wallmounted',
      wall_side = {-1/2, -1/2, -1/8, -1/8, 1/8, 1/8},
   },
})

minetest.register_node('lights:torch_ceiling', {
   drawtype = 'mesh',
   mesh = 'torch_ceiling.obj',
   tiles = {'lights_torch.png',
      {name = 'lights_torch_flame.png',
         animation = {type = 'vertical_frames', aspect_w = 16, aspect_h = 16, length = 2}
   }},
   use_texture_alpha = 'clip',
   paramtype = 'light',
   paramtype2 = 'wallmounted',
   sunlight_propagates = true,
   walkable = false,
   light_source = 12,
   groups = {breakable=1},
   drop = 'lights:torch',
   selection_box = {
      type = 'wallmounted',
      wall_top = {-1/8, -1/16, -5/16, 1/8, 1/2, 1/8},
   },
})
