|
| 1 | + |
| 2 | +local old_furnace = table.copy(minetest.registered_nodes["mcl_furnaces:furnace"]) |
| 3 | + |
| 4 | +local tube_entry = "^pipeworks_tube_connection_stony.png" |
| 5 | + |
| 6 | +local groups = old_furnace.groups |
| 7 | +groups["tubedevice"] = 1 |
| 8 | +groups["tubedevice_receiver"] = 1 |
| 9 | +local groups_active = table.copy(groups) |
| 10 | +groups_active["not_in_creative_inventory"] = 1 |
| 11 | + |
| 12 | +-- a hack to give the exp to fake players it's be dropped instead added to (fake) player inv |
| 13 | +local function give_xp(pos, player) |
| 14 | + local meta = minetest.get_meta(pos) |
| 15 | + local dir = vector.divide(minetest.facedir_to_dir(minetest.get_node(pos).param2),-1.95) |
| 16 | + local xp = meta:get_int("xp") |
| 17 | + if xp > 0 then |
| 18 | + mcl_experience.throw_xp(vector.add(pos, dir), xp) |
| 19 | + meta:set_int("xp", 0) |
| 20 | + end |
| 21 | +end |
| 22 | + |
| 23 | +local override = {} |
| 24 | + |
| 25 | +override.tiles = { |
| 26 | + "default_furnace_top.png"..tube_entry, |
| 27 | + "default_furnace_bottom.png"..tube_entry, |
| 28 | + "default_furnace_side.png"..tube_entry, |
| 29 | + "default_furnace_side.png"..tube_entry, |
| 30 | + "default_furnace_side.png"..tube_entry, |
| 31 | + "default_furnace_front.png" |
| 32 | +} |
| 33 | + |
| 34 | +override.groups = groups |
| 35 | + |
| 36 | +override.tube = { |
| 37 | + insert_object = function(pos, node, stack, direction) |
| 38 | + local meta = minetest.get_meta(pos) |
| 39 | + local inv = meta:get_inventory() |
| 40 | + local timer = minetest.get_node_timer(pos) |
| 41 | + if not timer:is_started() then |
| 42 | + timer:start(1.0) |
| 43 | + end |
| 44 | + if direction.y == 1 then |
| 45 | + return inv:add_item("fuel", stack) |
| 46 | + else |
| 47 | + return inv:add_item("src", stack) |
| 48 | + end |
| 49 | + end, |
| 50 | + can_insert = function(pos,node,stack,direction) |
| 51 | + local meta = minetest.get_meta(pos) |
| 52 | + local inv = meta:get_inventory() |
| 53 | + if direction.y == 1 then |
| 54 | + return inv:room_for_item("fuel", stack) |
| 55 | + else |
| 56 | + if meta:get_int("split_material_stacks") == 1 then |
| 57 | + stack = stack:peek_item(1) |
| 58 | + end |
| 59 | + return inv:room_for_item("src", stack) |
| 60 | + end |
| 61 | + end, |
| 62 | + input_inventory = "dst", |
| 63 | + connect_sides = {left = 1, right = 1, back = 1, bottom = 1, top = 1} |
| 64 | +} |
| 65 | + |
| 66 | +override.after_place_node = function(pos, placer, itemstack, pointed_thing) |
| 67 | + pipeworks.after_place(pos, placer, itemstack, pointed_thing) |
| 68 | +end |
| 69 | + |
| 70 | +override.after_dig_node = function(pos, oldnode, oldmetadata, digger) |
| 71 | + old_furnace.after_dig_node(pos, oldnode, oldmetadata, digger) |
| 72 | + pipeworks.after_dig(pos) |
| 73 | +end |
| 74 | + |
| 75 | +override.on_metadata_inventory_take = function(pos, listname, index, stack, player) |
| 76 | + if listname == "dst" then |
| 77 | + if stack:get_name() == "mcl_core:iron_ingot" then |
| 78 | + awards.unlock(player:get_player_name(), "mcl:acquireIron") |
| 79 | + elseif stack:get_name() == "mcl_fishing:fish_cooked" then |
| 80 | + awards.unlock(player:get_player_name(), "mcl:cookFish") |
| 81 | + end |
| 82 | + give_xp(pos, player) |
| 83 | + end |
| 84 | +end |
| 85 | + |
| 86 | +override.on_rotate = pipeworks.on_rotate |
| 87 | + |
| 88 | + |
| 89 | +local override_active = table.copy(override) |
| 90 | + |
| 91 | +override_active.tiles = { |
| 92 | + "default_furnace_top.png"..tube_entry, |
| 93 | + "default_furnace_bottom.png"..tube_entry, |
| 94 | + "default_furnace_side.png"..tube_entry, |
| 95 | + "default_furnace_side.png"..tube_entry, |
| 96 | + "default_furnace_side.png"..tube_entry, |
| 97 | + "default_furnace_front_active.png", |
| 98 | +} |
| 99 | + |
| 100 | +override_active.groups = groups_active |
| 101 | + |
| 102 | +override_active.tube = { |
| 103 | + insert_object = function(pos,node,stack,direction) |
| 104 | + local meta = minetest.get_meta(pos) |
| 105 | + local inv = meta:get_inventory() |
| 106 | + local timer = minetest.get_node_timer(pos) |
| 107 | + if not timer:is_started() then |
| 108 | + timer:start(1.0) |
| 109 | + end |
| 110 | + if direction.y == 1 then |
| 111 | + return inv:add_item("fuel", stack) |
| 112 | + else |
| 113 | + return inv:add_item("src", stack) |
| 114 | + end |
| 115 | + end, |
| 116 | + can_insert = function(pos, node, stack, direction) |
| 117 | + local meta = minetest.get_meta(pos) |
| 118 | + local inv = meta:get_inventory() |
| 119 | + if direction.y == 1 then |
| 120 | + return inv:room_for_item("fuel", stack) |
| 121 | + else |
| 122 | + return inv:room_for_item("src", stack) |
| 123 | + end |
| 124 | + end, |
| 125 | + input_inventory = "dst", |
| 126 | + connect_sides = {left = 1, right = 1, back = 1, bottom = 1, top = 1} |
| 127 | +} |
| 128 | + |
| 129 | + |
| 130 | +-- override |
| 131 | +minetest.override_item("mcl_furnaces:furnace", override) |
| 132 | +minetest.override_item("mcl_furnaces:furnace_active", override_active) |
0 commit comments