From 80dccc54e9bf9864ca1128b6f38bf25f42d5c875 Mon Sep 17 00:00:00 2001 From: Freeman Date: Tue, 22 Aug 2023 17:28:26 +0200 Subject: [PATCH] mcl_furnaces compat --- init.lua | 3 ++ mcl-furnaces.lua | 127 +++++++++++++++++++++++++++++++++++++++++++++++ mod.conf | 2 +- 3 files changed, 131 insertions(+), 1 deletion(-) create mode 100644 mcl-furnaces.lua diff --git a/init.lua b/init.lua index dbf6403..ce89f24 100644 --- a/init.lua +++ b/init.lua @@ -185,6 +185,9 @@ end if pipeworks.enable_redefines and minetest.get_modpath("mcl_barrels") then dofile(pipeworks.modpath.."/mcl-barrels.lua") end +if pipeworks.enable_redefines and minetest.get_modpath("mcl_furnaces") then + dofile(pipeworks.modpath.."/mcl-furnaces.lua") +end if pipeworks.enable_autocrafter then dofile(pipeworks.modpath.."/autocrafter.lua") end diff --git a/mcl-furnaces.lua b/mcl-furnaces.lua new file mode 100644 index 0000000..2cacb5d --- /dev/null +++ b/mcl-furnaces.lua @@ -0,0 +1,127 @@ + +local old_furnace = table.copy(minetest.registered_nodes["mcl_furnaces:furnace"]) +local old_furnace_active = table.copy(minetest.registered_nodes["mcl_furnaces:furnace_active"]) + +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 + +-- 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 xp = meta:get_int("xp") + if xp > 0 then + mcl_experience.throw_xp(vector.add(pos, dir), xp) + meta:set_int("xp", 0) + end +end + +local override = { + tiles = { + "default_furnace_top.png"..tube_entry, + "default_furnace_bottom.png"..tube_entry, + "default_furnace_side.png"..tube_entry, + "default_furnace_side.png"..tube_entry, + "default_furnace_side.png"..tube_entry, + "default_furnace_front.png" + }, + groups = groups, + 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} + }, + after_place_node = function(pos, placer, itemstack, pointed_thing) + pipeworks.after_place(pos, placer, itemstack, pointed_thing) + end, + after_dig_node = function(pos, oldnode, oldmetadata, digger) + old_furnace.after_dig_node(pos, oldnode, oldmetadata, digger) + pipeworks.after_dig(pos) + end, + on_metadata_inventory_take = function(pos, listname, index, stack, player) + if listname == "dst" then + if stack:get_name() == "mcl_core:iron_ingot" then + awards.unlock(player:get_player_name(), "mcl:acquireIron") + elseif stack:get_name() == "mcl_fishing:fish_cooked" then + awards.unlock(player:get_player_name(), "mcl:cookFish") + end + give_xp(pos, player) + end + end, + on_rotate = pipeworks.on_rotate +} + + +local override_active = table.copy(override) + +override_active.tiles = { + "default_furnace_top.png"..tube_entry, + "default_furnace_bottom.png"..tube_entry, + "default_furnace_side.png"..tube_entry, + "default_furnace_side.png"..tube_entry, + "default_furnace_side.png"..tube_entry, + "default_furnace_front_active.png", +} + +override_active.groups = groups_active + +override_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) diff --git a/mod.conf b/mod.conf index 51e0f95..4ec5170 100644 --- a/mod.conf +++ b/mod.conf @@ -1,5 +1,5 @@ name = pipeworks description = This mod uses mesh nodes and nodeboxes to supply a complete set of 3D pipes and tubes, along with devices that work with them. depends = basic_materials -optional_depends = mesecons, mesecons_mvps, digilines, signs_lib, unified_inventory, default, screwdriver, fl_mapgen, sound_api, i3, hades_core, hades_furnaces, hades_chests, mcl_mapgen_core +optional_depends = mesecons, mesecons_mvps, digilines, signs_lib, unified_inventory, default, screwdriver, fl_mapgen, sound_api, i3, hades_core, hades_furnaces, hades_chests, mcl_mapgen_core, mcl_experience min_minetest_version = 5.4.0