mirror of
https://github.com/minetest-mods/technic.git
synced 2025-07-03 00:30:36 +02:00
Externalize common functions and protect inventories
This commit is contained in:
@ -134,18 +134,10 @@ function technic.register_alloy_furnace(data)
|
||||
inv:set_size("upgrade1", 1)
|
||||
inv:set_size("upgrade2", 1)
|
||||
end,
|
||||
can_dig = function(pos, player)
|
||||
local meta = minetest.get_meta(pos);
|
||||
local inv = meta:get_inventory()
|
||||
if not inv:is_empty("src") or not inv:is_empty("dst") or
|
||||
not inv:is_empty("upgrade1") or not inv:is_empty("upgrade2") then
|
||||
minetest.chat_send_player(player:get_player_name(),
|
||||
S("Machine cannot be removed because it is not empty"))
|
||||
return false
|
||||
else
|
||||
return true
|
||||
end
|
||||
end,
|
||||
can_dig = technic.machine_can_dig,
|
||||
allow_metadata_inventory_put = technic.machine_inventory_put,
|
||||
allow_metadata_inventory_take = technic.machine_inventory_take,
|
||||
allow_metadata_inventory_move = technic.machine_inventory_move,
|
||||
})
|
||||
|
||||
minetest.register_node("technic:"..ltier.."_alloy_furnace_active",{
|
||||
@ -163,36 +155,10 @@ function technic.register_alloy_furnace(data)
|
||||
tube = data.tube and tube or nil,
|
||||
legacy_facedir_simple = true,
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
can_dig = function(pos, player)
|
||||
local meta = minetest.get_meta(pos);
|
||||
local inv = meta:get_inventory()
|
||||
if not inv:is_empty("src") or not inv:is_empty("dst") or
|
||||
not inv:is_empty("upgrade1") or not inv:is_empty("upgrade2") then
|
||||
minetest.chat_send_player(player:get_player_name(),
|
||||
S("Machine cannot be removed because it is not empty"))
|
||||
return false
|
||||
else
|
||||
return true
|
||||
end
|
||||
end,
|
||||
-- These three makes sure upgrades are not moved in or out while the furnace is active.
|
||||
allow_metadata_inventory_put = function(pos, listname, index, stack, player)
|
||||
if listname == "src" or listname == "dst" then
|
||||
return stack:get_count()
|
||||
else
|
||||
return 0 -- Disallow the move
|
||||
end
|
||||
end,
|
||||
allow_metadata_inventory_take = function(pos, listname, index, stack, player)
|
||||
if listname == "src" or listname == "dst" then
|
||||
return stack:get_count()
|
||||
else
|
||||
return 0 -- Disallow the move
|
||||
end
|
||||
end,
|
||||
allow_metadata_inventory_move = function(pos, from_list, to_list, to_list, to_index, count, player)
|
||||
return 0
|
||||
end,
|
||||
can_dig = technic.machine_can_dig,
|
||||
allow_metadata_inventory_put = technic.machine_inventory_put,
|
||||
allow_metadata_inventory_take = technic.machine_inventory_take,
|
||||
allow_metadata_inventory_move = technic.machine_inventory_move,
|
||||
})
|
||||
|
||||
minetest.register_abm({
|
||||
|
@ -47,17 +47,10 @@ function technic.register_battery_box(data)
|
||||
inv:set_size("src", 1)
|
||||
inv:set_size("dst", 1)
|
||||
end,
|
||||
can_dig = function(pos, player)
|
||||
local meta = minetest.get_meta(pos);
|
||||
local inv = meta:get_inventory()
|
||||
if not inv:is_empty("src") or not inv:is_empty("dst") then
|
||||
minetest.chat_send_player(player:get_player_name(),
|
||||
S("Machine cannot be removed because it is not empty"))
|
||||
return false
|
||||
else
|
||||
return true
|
||||
end
|
||||
end,
|
||||
can_dig = technic.machine_can_dig,
|
||||
allow_metadata_inventory_put = technic.machine_inventory_put,
|
||||
allow_metadata_inventory_take = technic.machine_inventory_take,
|
||||
allow_metadata_inventory_move = technic.machine_inventory_move,
|
||||
})
|
||||
end
|
||||
|
||||
|
@ -1,4 +1,6 @@
|
||||
|
||||
local S = technic.getter
|
||||
|
||||
function technic.handle_machine_upgrades(meta)
|
||||
-- Get the names of the upgrades
|
||||
local inv = meta:get_inventory()
|
||||
@ -109,3 +111,39 @@ function technic.handle_machine_pipeworks(pos, tube_upgrade)
|
||||
meta:set_int("tube_time", tube_time)
|
||||
end
|
||||
|
||||
|
||||
function technic.machine_can_dig(pos, player)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
if not inv:is_empty("src") or not inv:is_empty("dst") or
|
||||
not inv:is_empty("upgrade1") or not inv:is_empty("upgrade2") then
|
||||
minetest.chat_send_player(player:get_player_name(),
|
||||
S("Machine cannot be removed because it is not empty"))
|
||||
return false
|
||||
else
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
local function inv_change(pos, player, count)
|
||||
if minetest.is_protected(pos, player:get_player_name()) then
|
||||
minetest.chat_send_player(player:get_player_name(),
|
||||
S("Inventory move disallowed due to protection"))
|
||||
return 0
|
||||
end
|
||||
return count
|
||||
end
|
||||
|
||||
function technic.machine_inventory_put(pos, listname, index, stack, player)
|
||||
return inv_change(pos, player, stack:get_count())
|
||||
end
|
||||
|
||||
function technic.machine_inventory_take(pos, listname, index, stack, player)
|
||||
return inv_change(pos, player, stack:get_count())
|
||||
end
|
||||
|
||||
function technic.machine_inventory_move(pos, from_list, from_index,
|
||||
to_list, to_index, count, player)
|
||||
return inv_change(pos, player, count)
|
||||
end
|
||||
|
||||
|
@ -69,18 +69,10 @@ function technic.register_electric_furnace(data)
|
||||
inv:set_size("upgrade1", 1)
|
||||
inv:set_size("upgrade2", 1)
|
||||
end,
|
||||
can_dig = function(pos, player)
|
||||
local meta = minetest.get_meta(pos);
|
||||
local inv = meta:get_inventory()
|
||||
if not inv:is_empty("src") or not inv:is_empty("dst") or
|
||||
not inv:is_empty("upgrade1") or not inv:is_empty("upgrade2") then
|
||||
minetest.chat_send_player(player:get_player_name(),
|
||||
S("Machine cannot be removed because it is not empty"))
|
||||
return false
|
||||
else
|
||||
return true
|
||||
end
|
||||
end,
|
||||
can_dig = technic.machine_can_dig,
|
||||
allow_metadata_inventory_put = technic.machine_inventory_put,
|
||||
allow_metadata_inventory_take = technic.machine_inventory_take,
|
||||
allow_metadata_inventory_move = technic.machine_inventory_move,
|
||||
})
|
||||
|
||||
minetest.register_node("technic:"..ltier.."_electric_furnace_active", {
|
||||
@ -110,36 +102,10 @@ function technic.register_electric_furnace(data)
|
||||
inv:set_size("upgrade1", 1)
|
||||
inv:set_size("upgrade2", 1)
|
||||
end,
|
||||
can_dig = function(pos, player)
|
||||
local meta = minetest.get_meta(pos);
|
||||
local inv = meta:get_inventory()
|
||||
if not inv:is_empty("src") or not inv:is_empty("dst") or
|
||||
not inv:is_empty("upgrade1") or not inv:is_empty("upgrade2") then
|
||||
minetest.chat_send_player(player:get_player_name(),
|
||||
S("Machine cannot be removed because it is not empty"))
|
||||
return false
|
||||
else
|
||||
return true
|
||||
end
|
||||
end,
|
||||
-- These three makes sure upgrades are not moved in or out while the furnace is active.
|
||||
allow_metadata_inventory_put = function(pos, listname, index, stack, player)
|
||||
if listname == "src" or listname == "dst" then
|
||||
return stack:get_stack_max()
|
||||
else
|
||||
return 0 -- Disallow the move
|
||||
end
|
||||
end,
|
||||
allow_metadata_inventory_take = function(pos, listname, index, stack, player)
|
||||
if listname == "src" or listname == "dst" then
|
||||
return stack:get_stack_max()
|
||||
else
|
||||
return 0 -- Disallow the move
|
||||
end
|
||||
end,
|
||||
allow_metadata_inventory_move = function(pos, from_list, to_list, to_list, to_index, count, player)
|
||||
return 0
|
||||
end,
|
||||
can_dig = technic.machine_can_dig,
|
||||
allow_metadata_inventory_put = technic.machine_inventory_put,
|
||||
allow_metadata_inventory_take = technic.machine_inventory_take,
|
||||
allow_metadata_inventory_move = technic.machine_inventory_move,
|
||||
})
|
||||
|
||||
minetest.register_abm({
|
||||
|
@ -31,18 +31,12 @@ function technic.register_generator(data)
|
||||
local inv = meta:get_inventory()
|
||||
inv:set_size("src", 1)
|
||||
end,
|
||||
can_dig = function(pos, player)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
if not inv:is_empty("src") then
|
||||
minetest.chat_send_player(player:get_player_name(),
|
||||
S("Machine cannot be removed because it is not empty"))
|
||||
return false
|
||||
else
|
||||
return true
|
||||
end
|
||||
end,
|
||||
can_dig = technic.machine_can_dig,
|
||||
allow_metadata_inventory_put = technic.machine_inventory_put,
|
||||
allow_metadata_inventory_take = technic.machine_inventory_take,
|
||||
allow_metadata_inventory_move = technic.machine_inventory_move,
|
||||
})
|
||||
|
||||
minetest.register_node("technic:"..ltier.."_generator_active", {
|
||||
description = desc,
|
||||
tiles = {"technic_"..ltier.."_generator_top.png", "technic_machine_bottom.png",
|
||||
@ -54,17 +48,10 @@ function technic.register_generator(data)
|
||||
legacy_facedir_simple = true,
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
drop = "technic:"..ltier.."_generator",
|
||||
can_dig = function(pos, player)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
if not inv:is_empty("src") then
|
||||
minetest.chat_send_player(player:get_player_name(),
|
||||
S("Machine cannot be removed because it is not empty"))
|
||||
return false
|
||||
else
|
||||
return true
|
||||
end
|
||||
end,
|
||||
can_dig = technic.machine_can_dig,
|
||||
allow_metadata_inventory_put = technic.machine_inventory_put,
|
||||
allow_metadata_inventory_take = technic.machine_inventory_take,
|
||||
allow_metadata_inventory_move = technic.machine_inventory_move,
|
||||
})
|
||||
minetest.register_abm({
|
||||
nodenames = {"technic:"..ltier.."_generator", "technic:"..ltier.."_generator_active"},
|
||||
|
@ -64,18 +64,10 @@ function technic.register_grinder(data)
|
||||
inv:set_size("upgrade1", 1)
|
||||
inv:set_size("upgrade2", 1)
|
||||
end,
|
||||
can_dig = function(pos,player)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
if not inv:is_empty("src") or not inv:is_empty("dst") or
|
||||
not inv:is_empty("upgrade1") or not inv:is_empty("upgrade2") then
|
||||
minetest.chat_send_player(player:get_player_name(),
|
||||
S("Machine cannot be removed because it is not empty"))
|
||||
return false
|
||||
else
|
||||
return true
|
||||
end
|
||||
end,
|
||||
can_dig = technic.machine_can_dig,
|
||||
allow_metadata_inventory_put = technic.machine_inventory_put,
|
||||
allow_metadata_inventory_take = technic.machine_inventory_take,
|
||||
allow_metadata_inventory_move = technic.machine_inventory_move,
|
||||
})
|
||||
|
||||
minetest.register_node("technic:"..ltier.."_grinder_active",{
|
||||
@ -88,36 +80,10 @@ function technic.register_grinder(data)
|
||||
legacy_facedir_simple = true,
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
tube = data.tube and tube or nil,
|
||||
can_dig = function(pos, player)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
if not inv:is_empty("src") or not inv:is_empty("dst") or
|
||||
not inv:is_empty("upgrade1") or not inv:is_empty("upgrade2") then
|
||||
minetest.chat_send_player(player:get_player_name(),
|
||||
S("Machine cannot be removed because it is not empty"))
|
||||
return false
|
||||
else
|
||||
return true
|
||||
end
|
||||
end,
|
||||
-- These three makes sure upgrades are not moved in or out while the grinder is active.
|
||||
allow_metadata_inventory_put = function(pos, listname, index, stack, player)
|
||||
if listname == "src" or listname == "dst" then
|
||||
return stack:get_stack_max()
|
||||
else
|
||||
return 0 -- Disallow the move
|
||||
end
|
||||
end,
|
||||
allow_metadata_inventory_take = function(pos, listname, index, stack, player)
|
||||
if listname == "src" or listname == "dst" then
|
||||
return stack:get_stack_max()
|
||||
else
|
||||
return 0 -- Disallow the move
|
||||
end
|
||||
end,
|
||||
allow_metadata_inventory_move = function(pos, from_list, to_list, to_list, to_index, count, player)
|
||||
return 0
|
||||
end,
|
||||
can_dig = technic.machine_can_dig,
|
||||
allow_metadata_inventory_put = technic.machine_inventory_put,
|
||||
allow_metadata_inventory_take = technic.machine_inventory_take,
|
||||
allow_metadata_inventory_move = technic.machine_inventory_move,
|
||||
})
|
||||
|
||||
minetest.register_abm({
|
||||
|
Reference in New Issue
Block a user