@ -6,6 +6,9 @@
local S = protector.intllib
local F = minetest.formspec_escape
-- MineClone2 support
local mcl = not minetest.registered_items [ " default:steel_ingot " ]
-- Registers a door
function register_door ( name , def )
def.groups . not_in_creative_inventory = 1
@ -74,7 +77,7 @@ function register_door(name, def)
minetest.get_meta ( pt2 ) : set_int ( " right " , 1 )
end
if not minetest.setting _get bool( " creative_mode " ) then
if not minetest.setting s: get_ bool( " creative_mode " ) then
itemstack : take_item ( )
end
return itemstack
@ -147,6 +150,7 @@ function register_door(name, def)
tiles = { tb [ 2 ] , tb [ 2 ] , tb [ 2 ] , tb [ 2 ] , tb [ 1 ] , tb [ 1 ] .. " ^[transformfx " } ,
paramtype = " light " ,
paramtype2 = " facedir " ,
use_texture_alpha = " clip " ,
is_ground_content = false ,
drop = name ,
drawtype = " nodebox " ,
@ -184,6 +188,7 @@ function register_door(name, def)
tiles = { tt [ 2 ] , tt [ 2 ] , tt [ 2 ] , tt [ 2 ] , tt [ 1 ] , tt [ 1 ] .. " ^[transformfx " } ,
paramtype = " light " ,
paramtype2 = " facedir " ,
use_texture_alpha = " clip " ,
is_ground_content = false ,
drop = " " ,
drawtype = " nodebox " ,
@ -221,6 +226,7 @@ function register_door(name, def)
tiles = { tb [ 2 ] , tb [ 2 ] , tb [ 2 ] , tb [ 2 ] , tb [ 1 ] .. " ^[transformfx " , tb [ 1 ] } ,
paramtype = " light " ,
paramtype2 = " facedir " ,
use_texture_alpha = " clip " ,
is_ground_content = false ,
drop = name ,
drawtype = " nodebox " ,
@ -258,6 +264,7 @@ function register_door(name, def)
tiles = { tt [ 2 ] , tt [ 2 ] , tt [ 2 ] , tt [ 2 ] , tt [ 1 ] .. " ^[transformfx " , tt [ 1 ] } ,
paramtype = " light " ,
paramtype2 = " facedir " ,
use_texture_alpha = " clip " ,
is_ground_content = false ,
drop = " " ,
drawtype = " nodebox " ,
@ -310,6 +317,14 @@ register_door(name, {
sunlight = false ,
} )
if mcl then
minetest.register_craft ( {
output = name ,
recipe = {
{ " mcl_doors:wooden_door " , " mcl_core:gold_ingot " }
}
} )
else
minetest.register_craft ( {
output = name ,
recipe = {
@ -325,6 +340,7 @@ minetest.register_craft({
{ " doors:door_wood " , " default:copper_ingot " }
}
} )
end
-- Protected Steel Door
@ -343,6 +359,14 @@ register_door(name, {
sunlight = false ,
} )
if mcl then
minetest.register_craft ( {
output = name ,
recipe = {
{ " mcl_doors:iron_door " , " mcl_core:gold_ingot " }
}
} )
else
minetest.register_craft ( {
output = name ,
recipe = {
@ -358,6 +382,7 @@ minetest.register_craft({
{ " doors:door_steel " , " default:copper_ingot " }
}
} )
end
----trapdoor----
@ -383,6 +408,7 @@ function register_trapdoor(name, def)
def.drawtype = " nodebox "
def.paramtype = " light "
def.paramtype2 = " facedir "
def.use_texture_alpha = " clip "
def.is_ground_content = false
local def_opened = table.copy ( def )
@ -408,8 +434,8 @@ function register_trapdoor(name, def)
fixed = { - 0.5 , - 0.5 , 6 / 16 , 0.5 , 0.5 , 0.5 }
}
def_opened.tiles = { def.tile_side , def.tile_side ,
def.tile_side .. ' ^[transform3 ' ,
def.tile_side .. ' ^[transform1 ' ,
def.tile_side .. " ^[transform3 " ,
def.tile_side .. " ^[transform1 " ,
def.tile_front , def.tile_front }
def_opened.drop = name_closed
@ -434,12 +460,19 @@ register_trapdoor("protector:trapdoor", {
sounds = default.node_sound_wood_defaults ( ) ,
} )
if mcl then
minetest.register_craft ( {
output = " protector:trapdoor " ,
recipe = {
{ " mcl_doors:trapdoor " , " mcl_core:gold_ingot " }
}
} )
else
minetest.register_craft ( {
output = ' protector:trapdoor 2 ' ,
output = " protector:trapdoor 2 " ,
recipe = {
{ ' group:wood ' , ' default:copper_ingot ' , ' group:wood ' } ,
{ ' group:wood ' , ' group:wood ' , ' group:wood ' } ,
{ ' ' , ' ' , ' ' } ,
{ " group:wood " , " default:copper_ingot " , " group:wood " } ,
{ " group:wood " , " group:wood " , " group:wood " } ,
}
} )
@ -449,6 +482,7 @@ minetest.register_craft({
{ " doors:trapdoor " , " default:copper_ingot " }
}
} )
end
-- Protected Steel Trapdoor
@ -465,11 +499,19 @@ register_trapdoor("protector:trapdoor_steel", {
sounds = default.node_sound_wood_defaults ( ) ,
} )
if mcl then
minetest.register_craft ( {
output = " protector:trapdoor_steel " ,
recipe = {
{ " mcl_doors:iron_trapdoor " , " mcl_core:gold_ingot " }
}
} )
else
minetest.register_craft ( {
output = ' protector:trapdoor_steel ' ,
output = " protector:trapdoor_steel " ,
recipe = {
{ ' default:copper_ingot ' , ' default:steel_ingot ' } ,
{ ' default:steel_ingot ' , ' default:steel_ingot ' } ,
{ " default:copper_ingot " , " default:steel_ingot " } ,
{ " default:steel_ingot " , " default:steel_ingot " } ,
}
} )
@ -479,6 +521,7 @@ minetest.register_craft({
{ " doors:trapdoor_steel " , " default:copper_ingot " }
}
} )
end
-- Protected Chest
@ -501,7 +544,7 @@ minetest.register_node("protector:chest", {
local inv = meta : get_inventory ( )
meta : set_string ( " infotext " , S ( " Protected Chest " ) )
meta : set_string ( " name " , " ")
meta : set_string ( " name " , S ( " Protected Chest ") )
inv : set_size ( " main " , 8 * 4 )
end ,
@ -520,20 +563,24 @@ minetest.register_node("protector:chest", {
on_metadata_inventory_put = function ( pos , listname , index , stack , player )
minetest.log ( " action " , S ( " @1 moves stuff to protected chest at @2 " ,
player : get_player_name ( ) , minetest.pos_to_string ( pos ) ) )
minetest.log ( " action " , player : get_player_name ( ) ..
" moves stuff to protected chest at " ..
minetest.pos_to_string ( pos ) )
end ,
on_metadata_inventory_take = function ( pos , listname , index , stack , player )
minetest.log ( " action " , S ( " @1 takes stuff from protected chest at @2 " ,
player : get_player_name ( ) , minetest.pos_to_string ( pos ) ) )
minetest.log ( " action " , player : get_player_name ( ) ..
" takes stuff from protected chest at " ..
minetest.pos_to_string ( pos ) )
end ,
on_metadata_inventory_move = function ( pos , from_list , from_index , to_list , to_index , count , player )
on_metadata_inventory_move = function (
pos , from_list , from_index , to_list , to_index , count , player )
minetest.log ( " action " , S ( " @1 moves stuff inside protected chest at @2 " ,
player : get_player_name ( ) , minetest.pos_to_string ( pos ) ) )
minetest.log ( " action " , player : get_player_name ( ) ..
" moves stuff inside protected chest at " ..
minetest.pos_to_string ( pos ) )
end ,
allow_metadata_inventory_put = function ( pos , listname , index , stack , player )
@ -554,7 +601,8 @@ minetest.register_node("protector:chest", {
return stack : get_count ( )
end ,
allow_metadata_inventory_move = function ( pos , from_list , from_index , to_list , to_index , count , player )
allow_metadata_inventory_move = function (
pos , from_list , from_index , to_list , to_index , count , player )
if minetest.is_protected ( pos , player : get_player_name ( ) ) then
return 0
@ -577,9 +625,9 @@ minetest.register_node("protector:chest", {
local spos = pos.x .. " , " .. pos.y .. " , " .. pos.z
local formspec = " size[8,9] "
.. default.gui_bg
.. default.gui_bg_img
.. default.gui_slots
-- .. default.gui_bg
-- .. default.gui_bg_img
-- .. default.gui_slots
.. " list[nodemeta: " .. spos .. " ;main;0,0.3;8,4;] "
.. " button[0,4.5;2,0.25;toup; " .. F ( S ( " To Chest " ) ) .. " ] "
.. " field[2.3,4.8;4,0.25;chestname;; "
@ -599,15 +647,39 @@ minetest.register_node("protector:chest", {
on_blast = function ( ) end ,
} )
-- Container transfer helper
local to_from = function ( src , dst )
local stack , item , leftover
local size = dst : get_size ( " main " )
for i = 1 , size do
stack = src : get_stack ( " main " , i )
item = stack : get_name ( )
if item ~= " " and dst : room_for_item ( " main " , item ) then
leftover = dst : add_item ( " main " , stack )
if leftover and not leftover : is_empty ( ) then
src : set_stack ( " main " , i , leftover )
else
src : set_stack ( " main " , i , nil )
end
end
end
end
-- Protected Chest formspec buttons
minetest.register_on_player_receive_fields ( function ( player , formname , fields )
if string.sub ( formname , 0 , string.len ( " protector:chest_ " ) ) ~= " protector:chest_ " then
if string.sub ( formname , 0 , 16 ) ~= " protector:chest_ " then
return
end
local pos_s = string.sub ( formname , string.len ( " protector:chest_ " ) + 1 )
local pos_s = string.sub ( formname , 1 7 )
local pos = minetest.string_to_pos ( pos_s )
if minetest.is_protected ( pos , player : get_player_name ( ) ) then
@ -617,43 +689,16 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
local meta = minetest.get_meta ( pos ) ; if not meta then return end
local chest_inv = meta : get_inventory ( ) ; if not chest_inv then return end
local player_inv = player : get_inventory ( )
local leftover
-- copy contents of player inventory to chest
if fields.toup then
-- copy contents of players inventory to chest
for i , v in ipairs ( player_inv : get_list ( " main " ) or { } ) do
if chest_inv : room_for_item ( " main " , v ) then
leftover = chest_inv : add_item ( " main " , v )
player_inv : remove_item ( " main " , v )
if leftover
and not leftover : is_empty ( ) then
player_inv : add_item ( " main " , v )
end
end
end
to_from ( player_inv , chest_inv )
-- copy contents of chest to player inventory
elseif fields.todn then
-- copy contents of chest to players inventory
for i , v in ipairs ( chest_inv : get_list ( " main " ) or { } ) do
if player_inv : room_for_item ( " main " , v ) then
leftover = player_inv : add_item ( " main " , v )
chest_inv : remove_item ( " main " , v )
if leftover
and not leftover : is_empty ( ) then
chest_inv : add_item ( " main " , v )
end
end
end
to_from ( chest_inv , player_inv )
elseif fields.chestname then
@ -661,9 +706,9 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
if fields.chestname ~= " " then
meta : set_string ( " name " , fields.chestname )
meta : set_string ( " infotext " ,
S ( " Protected Chest (@1) " , fields.chestname ) )
meta : set_string ( " infotext " , fields.chestname )
else
meta : set_string ( " name " , S ( " Protected Chest " ) )
meta : set_string ( " infotext " , S ( " Protected Chest " ) )
end
@ -672,18 +717,27 @@ end)
-- Protected Chest recipes
if mcl then
minetest.register_craft ( {
output = ' protector:chest ' ,
output = " protector:chest " ,
recipe = {
{ ' group:wood ' , ' group:wood ' , ' group:wood ' } ,
{ ' group:wood ' , ' default:copper_ingot ' , ' group:wood ' } ,
{ ' group:wood ' , ' group:wood ' , ' group:wood ' } ,
{ " mcl_chests:chest " , " mcl_core:gold_ingot " } ,
}
} )
else
minetest.register_craft ( {
output = " protector:chest " ,
recipe = {
{ " group:wood " , " group:wood " , " group:wood " } ,
{ " group:wood " , " default:copper_ingot " , " group:wood " } ,
{ " group:wood " , " group:wood " , " group:wood " } ,
}
} )
minetest.register_craft ( {
output = ' protector:chest ' ,
output = " protector:chest " ,
recipe = {
{ ' default:chest ' , ' default:copper_ingot ' , ' ' } ,
{ " default:chest " , " default:copper_ingot " } ,
}
} )
end