mirror of
https://github.com/minetest-mods/digtron.git
synced 2025-01-03 01:27:28 +01:00
Apply area protections on storage nodes (#108)
* Apply area protections on storage nodes * Fix player undefined * Reuse codes, and add code for duplicator inventory * Add code for controller and builder * Fix luacheck
This commit is contained in:
parent
9e6c2db897
commit
320a05f70d
@ -65,7 +65,7 @@ local def = {
|
|||||||
end,
|
end,
|
||||||
|
|
||||||
-- Allow all items with energy storage to be placed in the inventory
|
-- Allow all items with energy storage to be placed in the inventory
|
||||||
allow_metadata_inventory_put = function(_, listname, _, stack)
|
allow_metadata_inventory_put = function(pos, listname, _, stack, player)
|
||||||
if listname == "batteries" then
|
if listname == "batteries" then
|
||||||
if not minetest.global_exists("technic") then
|
if not minetest.global_exists("technic") then
|
||||||
return 0
|
return 0
|
||||||
@ -80,11 +80,13 @@ local def = {
|
|||||||
-- And specifically if they hold any charge
|
-- And specifically if they hold any charge
|
||||||
-- Disregard empty batteries, the player should know better
|
-- Disregard empty batteries, the player should know better
|
||||||
if md and md.charge > 0 then
|
if md and md.charge > 0 then
|
||||||
|
if digtron.check_protected_and_record(pos, player) then
|
||||||
|
return 0
|
||||||
|
end
|
||||||
return stack:get_count()
|
return stack:get_count()
|
||||||
else
|
else
|
||||||
return 0
|
return 0
|
||||||
end
|
end
|
||||||
|
|
||||||
else
|
else
|
||||||
return 0
|
return 0
|
||||||
end
|
end
|
||||||
@ -92,6 +94,10 @@ local def = {
|
|||||||
return 0
|
return 0
|
||||||
end,
|
end,
|
||||||
|
|
||||||
|
allow_metadata_inventory_move = digtron.protected_allow_metadata_inventory_move,
|
||||||
|
|
||||||
|
allow_metadata_inventory_take = digtron.protected_allow_metadata_inventory_take,
|
||||||
|
|
||||||
|
|
||||||
can_dig = function(pos)
|
can_dig = function(pos)
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
|
@ -259,7 +259,11 @@ minetest.register_node("digtron:builder", {
|
|||||||
digtron.update_builder_item(pos)
|
digtron.update_builder_item(pos)
|
||||||
end,
|
end,
|
||||||
|
|
||||||
allow_metadata_inventory_put = function(pos, listname, index, stack)
|
allow_metadata_inventory_put = function(pos, listname, index, stack, player)
|
||||||
|
if digtron.check_protected_and_record(pos, player) then
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
|
||||||
local stack_name = stack:get_name()
|
local stack_name = stack:get_name()
|
||||||
|
|
||||||
if minetest.get_item_group(stack_name, "digtron") ~= 0 then
|
if minetest.get_item_group(stack_name, "digtron") ~= 0 then
|
||||||
@ -284,10 +288,12 @@ minetest.register_node("digtron:builder", {
|
|||||||
return 0
|
return 0
|
||||||
end,
|
end,
|
||||||
|
|
||||||
allow_metadata_inventory_take = function(pos, listname, index)
|
allow_metadata_inventory_take = function(pos, listname, index, _, player)
|
||||||
node_inventory_table.pos = pos
|
if not digtron.check_protected_and_record(pos, player) then
|
||||||
local inv = minetest.get_inventory(node_inventory_table)
|
node_inventory_table.pos = pos
|
||||||
inv:set_stack(listname, index, ItemStack(""))
|
local inv = minetest.get_inventory(node_inventory_table)
|
||||||
|
inv:set_stack(listname, index, ItemStack(""))
|
||||||
|
end
|
||||||
return 0
|
return 0
|
||||||
end,
|
end,
|
||||||
|
|
||||||
|
@ -237,8 +237,9 @@ minetest.register_node("digtron:auto_controller", {
|
|||||||
inv:set_size("stop", 1)
|
inv:set_size("stop", 1)
|
||||||
end,
|
end,
|
||||||
|
|
||||||
allow_metadata_inventory_put = function(pos, listname, index, stack)
|
allow_metadata_inventory_put = function(pos, listname, index, stack, player)
|
||||||
if minetest.get_item_group(stack:get_name(), "digtron") ~= 0 then
|
if digtron.check_protected_and_record(pos, player)
|
||||||
|
or minetest.get_item_group(stack:get_name(), "digtron") ~= 0 then
|
||||||
return 0 -- pointless setting a Digtron node as a stop block
|
return 0 -- pointless setting a Digtron node as a stop block
|
||||||
end
|
end
|
||||||
node_inventory_table.pos = pos
|
node_inventory_table.pos = pos
|
||||||
@ -247,10 +248,12 @@ minetest.register_node("digtron:auto_controller", {
|
|||||||
return 0
|
return 0
|
||||||
end,
|
end,
|
||||||
|
|
||||||
allow_metadata_inventory_take = function(pos, listname, index)
|
allow_metadata_inventory_take = function(pos, listname, index, _, player)
|
||||||
node_inventory_table.pos = pos
|
if not digtron.check_protected_and_record(pos, player) then
|
||||||
local inv = minetest.get_inventory(node_inventory_table)
|
node_inventory_table.pos = pos
|
||||||
inv:set_stack(listname, index, ItemStack(""))
|
local inv = minetest.get_inventory(node_inventory_table)
|
||||||
|
inv:set_stack(listname, index, ItemStack(""))
|
||||||
|
end
|
||||||
return 0
|
return 0
|
||||||
end,
|
end,
|
||||||
|
|
||||||
|
@ -76,7 +76,11 @@ minetest.register_node("digtron:duplicator", {
|
|||||||
return inv:is_empty("main")
|
return inv:is_empty("main")
|
||||||
end,
|
end,
|
||||||
|
|
||||||
allow_metadata_inventory_put = function(_, _, _, stack)
|
allow_metadata_inventory_put = function(pos, _, _, stack, player)
|
||||||
|
if digtron.check_protected_and_record(pos, player) then
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
|
||||||
if minetest.get_item_group(stack:get_name(), "digtron") > 0 then
|
if minetest.get_item_group(stack:get_name(), "digtron") > 0 then
|
||||||
return stack:get_count()
|
return stack:get_count()
|
||||||
else
|
else
|
||||||
@ -84,6 +88,10 @@ minetest.register_node("digtron:duplicator", {
|
|||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
|
|
||||||
|
allow_metadata_inventory_move = digtron.protected_allow_metadata_inventory_move,
|
||||||
|
|
||||||
|
allow_metadata_inventory_take = digtron.protected_allow_metadata_inventory_take,
|
||||||
|
|
||||||
on_receive_fields = function(pos, _, fields, sender)
|
on_receive_fields = function(pos, _, fields, sender)
|
||||||
local player_name = sender:get_player_name()
|
local player_name = sender:get_player_name()
|
||||||
if fields.help then
|
if fields.help then
|
||||||
|
@ -74,6 +74,12 @@ minetest.register_node("digtron:inventory", set_logger({
|
|||||||
return inv:is_empty("main")
|
return inv:is_empty("main")
|
||||||
end,
|
end,
|
||||||
|
|
||||||
|
allow_metadata_inventory_put = digtron.protected_allow_metadata_inventory_put,
|
||||||
|
|
||||||
|
allow_metadata_inventory_move = digtron.protected_allow_metadata_inventory_move,
|
||||||
|
|
||||||
|
allow_metadata_inventory_take = digtron.protected_allow_metadata_inventory_take,
|
||||||
|
|
||||||
-- Pipeworks compatibility
|
-- Pipeworks compatibility
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
|
|
||||||
@ -150,17 +156,21 @@ minetest.register_node("digtron:fuelstore", set_logger({
|
|||||||
end,
|
end,
|
||||||
|
|
||||||
-- Only allow fuel items to be placed in fuel
|
-- Only allow fuel items to be placed in fuel
|
||||||
allow_metadata_inventory_put = function(_, listname, _, stack)
|
allow_metadata_inventory_put = function(pos, listname, _, stack, player)
|
||||||
if listname == "fuel" then
|
if digtron.check_protected_and_record(pos, player) then
|
||||||
if minetest.get_craft_result({method="fuel", width=1, items={stack}}).time ~= 0 then
|
return 0
|
||||||
return stack:get_count()
|
end
|
||||||
else
|
|
||||||
return 0
|
if listname == "fuel" and minetest.get_craft_result({method="fuel", width=1, items={stack}}).time ~= 0 then
|
||||||
end
|
return stack:get_count()
|
||||||
end
|
end
|
||||||
return 0
|
return 0
|
||||||
end,
|
end,
|
||||||
|
|
||||||
|
allow_metadata_inventory_move = digtron.protected_allow_metadata_inventory_move,
|
||||||
|
|
||||||
|
allow_metadata_inventory_take = digtron.protected_allow_metadata_inventory_take,
|
||||||
|
|
||||||
can_dig = function(pos)
|
can_dig = function(pos)
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
local inv = meta:get_inventory()
|
local inv = meta:get_inventory()
|
||||||
@ -252,7 +262,11 @@ minetest.register_node("digtron:combined_storage", set_logger({
|
|||||||
end,
|
end,
|
||||||
|
|
||||||
-- Only allow fuel items to be placed in fuel
|
-- Only allow fuel items to be placed in fuel
|
||||||
allow_metadata_inventory_put = function(_, listname, _, stack)
|
allow_metadata_inventory_put = function(pos, listname, _, stack, player)
|
||||||
|
if digtron.check_protected_and_record(pos, player) then
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
|
||||||
if listname == "fuel" then
|
if listname == "fuel" then
|
||||||
if minetest.get_craft_result({method="fuel", width=1, items={stack}}).time ~= 0 then
|
if minetest.get_craft_result({method="fuel", width=1, items={stack}}).time ~= 0 then
|
||||||
return stack:get_count()
|
return stack:get_count()
|
||||||
@ -263,7 +277,11 @@ minetest.register_node("digtron:combined_storage", set_logger({
|
|||||||
return stack:get_count() -- otherwise, allow all drops
|
return stack:get_count() -- otherwise, allow all drops
|
||||||
end,
|
end,
|
||||||
|
|
||||||
allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, _, count)
|
allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, _, count, player)
|
||||||
|
if digtron.check_protected_and_record(pos, player) then
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
|
||||||
if to_list == "main" then
|
if to_list == "main" then
|
||||||
return count
|
return count
|
||||||
end
|
end
|
||||||
@ -277,6 +295,8 @@ minetest.register_node("digtron:combined_storage", set_logger({
|
|||||||
return 0
|
return 0
|
||||||
end,
|
end,
|
||||||
|
|
||||||
|
allow_metadata_inventory_take = digtron.protected_allow_metadata_inventory_take,
|
||||||
|
|
||||||
can_dig = function(pos)
|
can_dig = function(pos)
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
local inv = meta:get_inventory()
|
local inv = meta:get_inventory()
|
||||||
|
21
util.lua
21
util.lua
@ -431,3 +431,24 @@ digtron.show_offset_markers = function(pos, offset, period)
|
|||||||
if entity ~= nil then entity:set_yaw(1.5708) end
|
if entity ~= nil then entity:set_yaw(1.5708) end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
digtron.check_protected_and_record = function(pos, player)
|
||||||
|
local name = player:get_player_name()
|
||||||
|
if minetest.is_protected(pos, name) then
|
||||||
|
minetest.record_protection_violation(pos, name)
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
digtron.protected_allow_metadata_inventory_put = function(pos, _, _, stack, player)
|
||||||
|
return digtron.check_protected_and_record(pos, player) and 0 or stack:get_count()
|
||||||
|
end
|
||||||
|
|
||||||
|
digtron.protected_allow_metadata_inventory_move = function(pos, _, _, _, _, count, player)
|
||||||
|
return digtron.check_protected_and_record(pos, player) and 0 or count
|
||||||
|
end
|
||||||
|
|
||||||
|
digtron.protected_allow_metadata_inventory_take = function(pos, _, _, stack, player)
|
||||||
|
return digtron.check_protected_and_record(pos, player) and 0 or stack:get_count()
|
||||||
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user