forked from mtcontrib/pipeworks
		
	MineClone smoker and blast furnace support (#85)
This commit is contained in:
		
				
					committed by
					
						
						GitHub
					
				
			
			
				
	
			
			
			
						parent
						
							4f55610df5
						
					
				
				
					commit
					d90c17edee
				
			
							
								
								
									
										260
									
								
								mcl_furnaces.lua
									
									
									
									
									
								
							
							
						
						
									
										260
									
								
								mcl_furnaces.lua
									
									
									
									
									
								
							@@ -1,18 +1,34 @@
 | 
			
		||||
 | 
			
		||||
local old_furnace = table.copy(minetest.registered_nodes["mcl_furnaces:furnace"])
 | 
			
		||||
local old_blast_furnace = table.copy(minetest.registered_nodes["mcl_blast_furnace:blast_furnace"])
 | 
			
		||||
local old_smoker = table.copy(minetest.registered_nodes["mcl_smoker:smoker"])
 | 
			
		||||
 | 
			
		||||
local tube_entry = "^pipeworks_tube_connection_stony.png"
 | 
			
		||||
 | 
			
		||||
local groups = old_furnace.groups
 | 
			
		||||
groups["tubedevice"] = 1
 | 
			
		||||
groups["tubedevice_receiver"] = 1
 | 
			
		||||
local groups_active = table.copy(groups)
 | 
			
		||||
groups_active["not_in_creative_inventory"] = 1
 | 
			
		||||
-- groups
 | 
			
		||||
local furnace_groups = old_furnace.groups
 | 
			
		||||
furnace_groups["tubedevice"] = 1
 | 
			
		||||
furnace_groups["tubedevice_receiver"] = 1
 | 
			
		||||
local furnace_groups_active = table.copy(furnace_groups)
 | 
			
		||||
furnace_groups_active["not_in_creative_inventory"] = 1
 | 
			
		||||
 | 
			
		||||
local blast_furnace_groups = old_blast_furnace.groups
 | 
			
		||||
blast_furnace_groups["tubedevice"] = 1
 | 
			
		||||
blast_furnace_groups["tubedevice_receiver"] = 1
 | 
			
		||||
local blast_furnace_groups_active = table.copy(blast_furnace_groups)
 | 
			
		||||
blast_furnace_groups_active["not_in_creative_inventory"] = 1
 | 
			
		||||
 | 
			
		||||
local smoker_groups = old_smoker.groups
 | 
			
		||||
smoker_groups["tubedevice"] = 1
 | 
			
		||||
smoker_groups["tubedevice_receiver"] = 1
 | 
			
		||||
local smoker_groups_active = table.copy(smoker_groups)
 | 
			
		||||
smoker_groups_active["not_in_creative_inventory"] = 1
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
-- a hack to give the exp to fake players it's be dropped instead added to (fake) player inv
 | 
			
		||||
local function give_xp(pos, player)
 | 
			
		||||
   local meta = minetest.get_meta(pos)
 | 
			
		||||
   local dir = vector.divide(minetest.facedir_to_dir(minetest.get_node(pos).param2),-1.95)
 | 
			
		||||
   local dir = vector.divide(minetest.facedir_to_dir(minetest.get_node(pos).param2), -1.95)
 | 
			
		||||
   local xp = meta:get_int("xp")
 | 
			
		||||
   if xp > 0 then
 | 
			
		||||
      mcl_experience.throw_xp(vector.add(pos, dir), xp)
 | 
			
		||||
@@ -31,7 +47,7 @@ override.tiles = {
 | 
			
		||||
   "default_furnace_front.png"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
override.groups = groups
 | 
			
		||||
override.groups = furnace_groups
 | 
			
		||||
 | 
			
		||||
override.tube = {
 | 
			
		||||
   insert_object = function(pos, node, stack, direction)
 | 
			
		||||
@@ -97,7 +113,7 @@ override_active.tiles = {
 | 
			
		||||
   "default_furnace_front_active.png",
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
override_active.groups = groups_active
 | 
			
		||||
override_active.groups = furnace_groups_active
 | 
			
		||||
 | 
			
		||||
override_active.tube = {
 | 
			
		||||
   insert_object = function(pos,node,stack,direction)
 | 
			
		||||
@@ -127,6 +143,234 @@ override_active.tube = {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
--blast furnace
 | 
			
		||||
 | 
			
		||||
local override_blast_furnace = {}
 | 
			
		||||
 | 
			
		||||
override_blast_furnace.tiles = {
 | 
			
		||||
   "blast_furnace_top.png"..tube_entry,
 | 
			
		||||
   "blast_furnace_top.png"..tube_entry,
 | 
			
		||||
   "blast_furnace_side.png"..tube_entry,
 | 
			
		||||
   "blast_furnace_side.png"..tube_entry,
 | 
			
		||||
   "blast_furnace_side.png"..tube_entry,
 | 
			
		||||
   "blast_furnace_front.png"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
override_blast_furnace.groups = blast_furnace_groups
 | 
			
		||||
 | 
			
		||||
override_blast_furnace.tube = {
 | 
			
		||||
   insert_object = function(pos, node, stack, direction)
 | 
			
		||||
      local meta = minetest.get_meta(pos)
 | 
			
		||||
      local inv = meta:get_inventory()
 | 
			
		||||
      local timer = minetest.get_node_timer(pos)
 | 
			
		||||
      if not timer:is_started() then
 | 
			
		||||
	 timer:start(1.0)
 | 
			
		||||
      end
 | 
			
		||||
      if direction.y == 1 then
 | 
			
		||||
	 return inv:add_item("fuel", stack)
 | 
			
		||||
      else
 | 
			
		||||
	 return inv:add_item("src", stack)
 | 
			
		||||
      end
 | 
			
		||||
   end,
 | 
			
		||||
   can_insert = function(pos,node,stack,direction)
 | 
			
		||||
      local meta = minetest.get_meta(pos)
 | 
			
		||||
      local inv = meta:get_inventory()
 | 
			
		||||
      if direction.y == 1 then
 | 
			
		||||
	 return inv:room_for_item("fuel", stack)
 | 
			
		||||
      else
 | 
			
		||||
	 if meta:get_int("split_material_stacks") == 1 then
 | 
			
		||||
	    stack = stack:peek_item(1)
 | 
			
		||||
	 end
 | 
			
		||||
	 return inv:room_for_item("src", stack)
 | 
			
		||||
      end
 | 
			
		||||
   end,
 | 
			
		||||
   input_inventory = "dst",
 | 
			
		||||
   connect_sides = {left = 1, right = 1, back = 1, bottom = 1, top = 1}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
override_blast_furnace.after_place_node = function(pos, placer, itemstack, pointed_thing)
 | 
			
		||||
   pipeworks.after_place(pos, placer, itemstack, pointed_thing)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
override_blast_furnace.after_dig_node = function(pos, oldnode, oldmetadata, digger)
 | 
			
		||||
   old_blast_furnace.after_dig_node(pos, oldnode, oldmetadata, digger)
 | 
			
		||||
   pipeworks.after_dig(pos)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
override_blast_furnace.on_metadata_inventory_take = function(pos, listname, index, stack, player)
 | 
			
		||||
   -- Award smelting achievements
 | 
			
		||||
   if listname == "dst" then
 | 
			
		||||
      if stack:get_name() == "mcl_core:iron_ingot" then
 | 
			
		||||
	 awards.unlock(player:get_player_name(), "mcl:acquireIron")
 | 
			
		||||
      end
 | 
			
		||||
      give_xp(pos, player)
 | 
			
		||||
   end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
override_blast_furnace.on_rotate = pipeworks.on_rotate
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
local override_blast_active = table.copy(override)
 | 
			
		||||
 | 
			
		||||
override_blast_active.tiles = {
 | 
			
		||||
   "blast_furnace_top.png"..tube_entry,
 | 
			
		||||
   "blast_furnace_top.png"..tube_entry,
 | 
			
		||||
   "blast_furnace_side.png"..tube_entry,
 | 
			
		||||
   "blast_furnace_side.png"..tube_entry,
 | 
			
		||||
   "blast_furnace_side.png"..tube_entry,
 | 
			
		||||
   {
 | 
			
		||||
      name = "blast_furnace_front_on.png",
 | 
			
		||||
      animation = { type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 48 }
 | 
			
		||||
   },
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
override_blast_active.groups = blast_furnace_groups_active
 | 
			
		||||
 | 
			
		||||
override_blast_active.tube = {
 | 
			
		||||
   insert_object = function(pos,node,stack,direction)
 | 
			
		||||
      local meta = minetest.get_meta(pos)
 | 
			
		||||
      local inv = meta:get_inventory()
 | 
			
		||||
      local timer = minetest.get_node_timer(pos)
 | 
			
		||||
      if not timer:is_started() then
 | 
			
		||||
	 timer:start(1.0)
 | 
			
		||||
      end
 | 
			
		||||
      if direction.y == 1 then
 | 
			
		||||
	 return inv:add_item("fuel", stack)
 | 
			
		||||
      else
 | 
			
		||||
	 return inv:add_item("src", stack)
 | 
			
		||||
      end
 | 
			
		||||
   end,
 | 
			
		||||
   can_insert = function(pos, node, stack, direction)
 | 
			
		||||
      local meta = minetest.get_meta(pos)
 | 
			
		||||
      local inv = meta:get_inventory()
 | 
			
		||||
      if direction.y == 1 then
 | 
			
		||||
	 return inv:room_for_item("fuel", stack)
 | 
			
		||||
      else
 | 
			
		||||
	 return inv:room_for_item("src", stack)
 | 
			
		||||
      end
 | 
			
		||||
   end,
 | 
			
		||||
   input_inventory = "dst",
 | 
			
		||||
   connect_sides = {left = 1, right = 1, back = 1, bottom = 1, top = 1}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
-- smoker
 | 
			
		||||
 | 
			
		||||
local override_smoker = {}
 | 
			
		||||
 | 
			
		||||
override_smoker.tiles = {
 | 
			
		||||
   "smoker_top.png"..tube_entry,
 | 
			
		||||
   "smoker_bottom.png"..tube_entry,
 | 
			
		||||
   "smoker_side.png"..tube_entry,
 | 
			
		||||
   "smoker_side.png"..tube_entry,
 | 
			
		||||
   "smoker_side.png"..tube_entry,
 | 
			
		||||
   "smoker_front.png"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
override_smoker.groups = smoker_groups
 | 
			
		||||
 | 
			
		||||
override_smoker.tube = {
 | 
			
		||||
   insert_object = function(pos, node, stack, direction)
 | 
			
		||||
      local meta = minetest.get_meta(pos)
 | 
			
		||||
      local inv = meta:get_inventory()
 | 
			
		||||
      local timer = minetest.get_node_timer(pos)
 | 
			
		||||
      if not timer:is_started() then
 | 
			
		||||
	 timer:start(1.0)
 | 
			
		||||
      end
 | 
			
		||||
      if direction.y == 1 then
 | 
			
		||||
	 return inv:add_item("fuel", stack)
 | 
			
		||||
      else
 | 
			
		||||
	 return inv:add_item("src", stack)
 | 
			
		||||
      end
 | 
			
		||||
   end,
 | 
			
		||||
   can_insert = function(pos,node,stack,direction)
 | 
			
		||||
      local meta = minetest.get_meta(pos)
 | 
			
		||||
      local inv = meta:get_inventory()
 | 
			
		||||
      if direction.y == 1 then
 | 
			
		||||
	 return inv:room_for_item("fuel", stack)
 | 
			
		||||
      else
 | 
			
		||||
	 if meta:get_int("split_material_stacks") == 1 then
 | 
			
		||||
	    stack = stack:peek_item(1)
 | 
			
		||||
	 end
 | 
			
		||||
	 return inv:room_for_item("src", stack)
 | 
			
		||||
      end
 | 
			
		||||
   end,
 | 
			
		||||
   input_inventory = "dst",
 | 
			
		||||
   connect_sides = {left = 1, right = 1, back = 1, bottom = 1, top = 1}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
override_smoker.after_place_node = function(pos, placer, itemstack, pointed_thing)
 | 
			
		||||
   pipeworks.after_place(pos, placer, itemstack, pointed_thing)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
override_smoker.after_dig_node = function(pos, oldnode, oldmetadata, digger)
 | 
			
		||||
   old_smoker.after_dig_node(pos, oldnode, oldmetadata, digger)
 | 
			
		||||
   pipeworks.after_dig(pos)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
override_smoker.on_metadata_inventory_take = function(pos, listname, index, stack, player)
 | 
			
		||||
   -- Award fish achievements
 | 
			
		||||
   if listname == "dst" then
 | 
			
		||||
      if stack:get_name() == "mcl_fishing:fish_cooked" then
 | 
			
		||||
	 awards.unlock(player:get_player_name(), "mcl:cookFish")
 | 
			
		||||
      end
 | 
			
		||||
      give_xp(pos, player)
 | 
			
		||||
   end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
override_smoker.on_rotate = pipeworks.on_rotate
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
local override_smoker_active = table.copy(override)
 | 
			
		||||
 | 
			
		||||
override_smoker_active.tiles = {
 | 
			
		||||
   "smoker_top.png"..tube_entry,
 | 
			
		||||
   "smoker_bottom.png"..tube_entry,
 | 
			
		||||
   "smoker_side.png"..tube_entry,
 | 
			
		||||
   "smoker_side.png"..tube_entry,
 | 
			
		||||
   "smoker_side.png"..tube_entry,
 | 
			
		||||
   {
 | 
			
		||||
      name = "smoker_front_on.png",
 | 
			
		||||
      animation = { type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 48 }
 | 
			
		||||
   },
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
override_smoker_active.groups = smoker_groups_active
 | 
			
		||||
 | 
			
		||||
override_smoker_active.tube = {
 | 
			
		||||
   insert_object = function(pos,node,stack,direction)
 | 
			
		||||
      local meta = minetest.get_meta(pos)
 | 
			
		||||
      local inv = meta:get_inventory()
 | 
			
		||||
      local timer = minetest.get_node_timer(pos)
 | 
			
		||||
      if not timer:is_started() then
 | 
			
		||||
	 timer:start(1.0)
 | 
			
		||||
      end
 | 
			
		||||
      if direction.y == 1 then
 | 
			
		||||
	 return inv:add_item("fuel", stack)
 | 
			
		||||
      else
 | 
			
		||||
	 return inv:add_item("src", stack)
 | 
			
		||||
      end
 | 
			
		||||
   end,
 | 
			
		||||
   can_insert = function(pos, node, stack, direction)
 | 
			
		||||
      local meta = minetest.get_meta(pos)
 | 
			
		||||
      local inv = meta:get_inventory()
 | 
			
		||||
      if direction.y == 1 then
 | 
			
		||||
	 return inv:room_for_item("fuel", stack)
 | 
			
		||||
      else
 | 
			
		||||
	 return inv:room_for_item("src", stack)
 | 
			
		||||
      end
 | 
			
		||||
   end,
 | 
			
		||||
   input_inventory = "dst",
 | 
			
		||||
   connect_sides = {left = 1, right = 1, back = 1, bottom = 1, top = 1}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
-- override
 | 
			
		||||
minetest.override_item("mcl_furnaces:furnace", override)
 | 
			
		||||
minetest.override_item("mcl_furnaces:furnace_active", override_active)
 | 
			
		||||
 | 
			
		||||
minetest.override_item("mcl_blast_furnace:blast_furnace", override_blast_furnace)
 | 
			
		||||
minetest.override_item("mcl_blast_furnace:blast_furnace_active", override_blast_active)
 | 
			
		||||
 | 
			
		||||
minetest.override_item("mcl_smoker:smoker", override_smoker)
 | 
			
		||||
minetest.override_item("mcl_smoker:smoker_active", override_smoker_active)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user