Skip to content

Commit 500cce8

Browse files
MineClone containers support (#81)
* mcl_barrels compat * open barrel is not in creative inv * fix barrel drop content after dig * fix barrel local var * mcl_furnaces compat * optional depends mcl_barrels and mcl_furnaces * fixing luacheck * .luacheckrc update * renamed files to use _ * renamed files to init.lua * format improvement
1 parent cb3e775 commit 500cce8

File tree

5 files changed

+212
-2
lines changed

5 files changed

+212
-2
lines changed

.luacheckrc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,6 @@ read_globals = {
2020
-- mods
2121
"default", "mesecon", "digiline",
2222
"screwdriver", "unified_inventory",
23-
"i3",
23+
"i3", "mcl_experience", "awards"
2424

2525
}

init.lua

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,12 @@ if pipeworks.enable_redefines and (minetest.get_modpath("default") or minetest.g
182182
dofile(pipeworks.modpath.."/compat-chests.lua")
183183
dofile(pipeworks.modpath.."/compat-furnaces.lua")
184184
end
185+
if pipeworks.enable_redefines and minetest.get_modpath("mcl_barrels") then
186+
dofile(pipeworks.modpath.."/mcl_barrels.lua")
187+
end
188+
if pipeworks.enable_redefines and minetest.get_modpath("mcl_furnaces") then
189+
dofile(pipeworks.modpath.."/mcl_furnaces.lua")
190+
end
185191
if pipeworks.enable_autocrafter then
186192
dofile(pipeworks.modpath.."/autocrafter.lua")
187193
end

mcl_barrels.lua

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
-- this bit of code modifies the mcl barrels to be compatible with
2+
-- pipeworks.
3+
4+
-- Pipeworks Specific
5+
local tube_entry = "^pipeworks_tube_connection_wooden.png"
6+
7+
-- Original Definitions
8+
local old_barrel = table.copy(minetest.registered_items["mcl_barrels:barrel_closed"])
9+
10+
local groups = old_barrel.groups
11+
groups["tubedevice"] = 1
12+
groups["tubedevice_receiver"] = 1
13+
local groups_open = table.copy(groups)
14+
groups_open["not_in_creative_inventory"] = 1
15+
16+
17+
-- Override Construction
18+
local override_barrel = {}
19+
20+
override_barrel.tiles = {
21+
"mcl_barrels_barrel_top.png^[transformR270",
22+
"mcl_barrels_barrel_bottom.png"..tube_entry,
23+
"mcl_barrels_barrel_side.png"..tube_entry
24+
}
25+
26+
override_barrel.after_place_node = function(pos, placer, itemstack, pointed_thing)
27+
old_barrel.after_place_node(pos, placer, itemstack, pointed_thing)
28+
pipeworks.after_place(pos, placer, itemstack, pointed_thing)
29+
end
30+
31+
override_barrel.tube = {
32+
insert_object = function(pos, node, stack, direction)
33+
local meta = minetest.get_meta(pos)
34+
local inv = meta:get_inventory()
35+
return inv:add_item("main", stack)
36+
end,
37+
can_insert = function(pos, node, stack, direction)
38+
local meta = minetest.get_meta(pos)
39+
local inv = meta:get_inventory()
40+
if meta:get_int("splitstacks") == 1 then
41+
stack = stack:peek_item(1)
42+
end
43+
return inv:room_for_item("main", stack)
44+
end,
45+
input_inventory = "main",
46+
connect_sides = {left = 1, right = 1, back = 1, front = 1, bottom = 1}
47+
}
48+
49+
override_barrel.after_dig_node = function(pos, oldnode, oldmetadata, digger)
50+
old_barrel.after_dig_node(pos, oldnode, oldmetadata, digger)
51+
pipeworks.after_dig(pos)
52+
end
53+
54+
override_barrel.groups = table.copy(old_barrel.groups)
55+
56+
override_barrel.on_rotate = pipeworks.on_rotate
57+
58+
59+
local override_barrel_open = table.copy(override_barrel)
60+
61+
override_barrel_open.tiles = {
62+
"mcl_barrels_barrel_top_open.png",
63+
"mcl_barrels_barrel_bottom.png"..tube_entry,
64+
"mcl_barrels_barrel_side.png"..tube_entry
65+
}
66+
67+
override_barrel_open.groups = groups_open
68+
69+
70+
-- Override with the new modifications.
71+
minetest.override_item("mcl_barrels:barrel_closed", override_barrel)
72+
minetest.override_item("mcl_barrels:barrel_open", override_barrel_open)

mcl_furnaces.lua

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
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)

mod.conf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name = pipeworks
22
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.
33
depends = basic_materials
4-
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
4+
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_barrels, mcl_furnaces, mcl_experience
55
min_minetest_version = 5.4.0

0 commit comments

Comments
 (0)