summaryrefslogtreecommitdiff
path: root/castle/town_item.lua
diff options
context:
space:
mode:
Diffstat (limited to 'castle/town_item.lua')
-rw-r--r--castle/town_item.lua306
1 files changed, 306 insertions, 0 deletions
diff --git a/castle/town_item.lua b/castle/town_item.lua
new file mode 100644
index 0000000..64db0e8
--- /dev/null
+++ b/castle/town_item.lua
@@ -0,0 +1,306 @@
+minetest.register_alias("darkage:box", "castle:crate")
+minetest.register_alias("cottages:straw", "farming:straw")
+minetest.register_alias("castle:straw", "farming:straw")
+minetest.register_alias("darkage:straw", "farming:straw")
+minetest.register_alias("cottages:straw_bale", "castle:bound_straw")
+minetest.register_alias("darkage:straw_bale", "castle:bound_straw")
+minetest.register_alias("darkage:lamp", "castle:street_light")
+
+minetest.register_node("castle:anvil",{
+ drawtype = "nodebox",
+ description = "Anvil",
+ tiles = {"castle_steel.png"},
+ groups = {cracky=2,falling_node=1},
+ paramtype = "light",
+ paramtype2 = "facedir",
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-0.500000,-0.500000,-0.500000,0.500000,-0.250000,0.500000},
+ {-0.187500,-0.500000,-0.375000,0.187500,0.312500,0.375000},
+ {-0.375000,-0.500000,-0.437500,0.375000,-0.125000,0.437500},
+ {-0.500000,0.312500,-0.500000,0.500000,0.500000,0.500000},
+ {-0.375000,0.187500,-0.437500,0.375000,0.425000,0.437500},
+ },
+ },
+})
+
+minetest.register_craft({
+ output = "castle:anvil",
+ recipe = {
+ {"default:steel_ingot","default:steel_ingot","default:steel_ingot"},
+ {"","default:steel_ingot", ""},
+ {"default:steel_ingot", "default:steel_ingot","default:steel_ingot"},
+ }
+})
+
+minetest.register_node("castle:workbench",{
+ description = "Workbench",
+ tiles = {"castle_workbench_top.png", "default_wood.png", "castle_workbench_1.png", "castle_workbench_1.png", "castle_workbench_2.png", "castle_workbench_2.png"},
+ paramtype2 = "facedir",
+ paramtype = "light",
+ groups = {choppy=2,oddly_breakable_by_hand=2,flammable=2},
+ drawtype = "normal",
+ on_construct = function ( pos )
+ local meta = minetest.get_meta( pos )
+ meta:set_string( 'formspec', 'size[10,10;]' ..
+ 'label[1,0;Source Material]' ..
+ 'list[context;src;1,1;2,4;]' ..
+ 'label[4,0;Recipe to Use]' ..
+ 'list[context;rec;4,1;3,3;]' ..
+ 'label[7.5,0;Craft Output]' ..
+ 'list[context;dst;8,1;1,4;]' ..
+ 'list[current_player;main;1,6;8,4;]' )
+ meta:set_string( 'infotext', 'Workbench' )
+ local inv = meta:get_inventory()
+ inv:set_size( 'src', 2 * 4 )
+ inv:set_size( 'rec', 3 * 3 )
+ inv:set_size( 'dst', 1 * 4 )
+ end,
+ can_dig = function(pos,player)
+ local meta = minetest.get_meta(pos);
+ local inv = meta:get_inventory()
+ return inv:is_empty("main")
+ end,
+ on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
+ minetest.log("action", player:get_player_name()..
+ " moves stuff in workbench at "..minetest.pos_to_string(pos))
+ end,
+ on_metadata_inventory_put = function(pos, listname, index, stack, player)
+ minetest.log("action", player:get_player_name()..
+ " moves stuff to workbench at "..minetest.pos_to_string(pos))
+ end,
+ on_metadata_inventory_take = function(pos, listname, index, stack, player)
+ minetest.log("action", player:get_player_name()..
+ " takes stuff from workbench at "..minetest.pos_to_string(pos))
+ end,
+})
+local get_recipe = function ( inv )
+ local result, needed, input
+ needed = inv:get_list( 'rec' )
+
+ result, input = minetest.get_craft_result( {
+ method = 'normal',
+ width = 3,
+ items = needed
+ } )
+
+ local totalneed = {}
+
+ if result.item:is_empty() then
+ result = nil
+ else
+ result = result.item
+ for _, item in ipairs( needed ) do
+ if item ~= nil and not item:is_empty() and not inv:contains_item( 'src', item ) then
+ result = nil
+ break
+ end
+ if item ~= nil and not item:is_empty() then
+ if totalneed[item:get_name()] == nil then
+ totalneed[item:get_name()] = 1
+ else
+ totalneed[item:get_name()] = totalneed[item:get_name()] + 1
+ end
+ end
+ end
+ for name, number in pairs( totalneed ) do
+ local totallist = inv:get_list( 'src' )
+ for i, srcitem in pairs( totallist ) do
+ if srcitem:get_name() == name then
+ local taken = srcitem:take_item( number )
+ number = number - taken:get_count()
+ totallist[i] = srcitem
+ end
+ if number <= 0 then
+ break
+ end
+ end
+ if number > 0 then
+ result = nil
+ break
+ end
+ end
+ end
+
+ return needed, input, result
+end
+
+minetest.register_abm( {
+ nodenames = { 'castle:workbench' },
+ interval = 5,
+ chance = 1,
+ action = function ( pos, node )
+ local meta = minetest.get_meta( pos )
+ local inv = meta:get_inventory()
+ local cresult, newinput, needed
+ if not inv:is_empty( 'src' ) then
+ -- Check for a valid recipe and sufficient resources to craft it
+ needed, newinput, result = get_recipe( inv )
+ if result ~= nil and inv:room_for_item( 'dst', result ) then
+ inv:add_item( 'dst', result )
+ for i, item in pairs( needed ) do
+ if item ~= nil and item ~= '' then
+ inv:remove_item( 'src', ItemStack( item ) )
+ end
+ if newinput[i] ~= nil and not newinput[i]:is_empty() then
+ inv:add_item( 'src', newinput[i] )
+ end
+ end
+ end
+ end
+ end
+} )
+
+
+local function has_locked_chest_privilege(meta, player)
+ if player:get_player_name() ~= meta:get_string("owner") then
+ return false
+ end
+ return true
+end
+
+
+minetest.register_craft({
+ output = "castle:workbench",
+ recipe = {
+ {"default:steel_ingot","default:steel_ingot","default:steel_ingot"},
+ {"default:wood", "default:wood","default:steel_ingot"},
+ {"default:tree", "default:tree","default:steel_ingot"},
+ }
+})
+
+minetest.register_node("castle:dungeon_stone", {
+ description = "Dungeon Stone",
+ drawtype = "normal",
+ tiles = {"castle_dungeon_stone.png"},
+ groups = {cracky=2},
+ paramtype = "light",
+})
+
+minetest.register_craft({
+ output = "castle:dungeon_stone",
+ recipe = {
+ {"default:stonebrick", "default:obsidian"},
+ }
+})
+
+minetest.register_craft({
+ output = "castle:dungeon_stone",
+ recipe = {
+ {"default:stonebrick"},
+ {"default:obsidian"},
+
+ }
+})
+
+minetest.register_node("castle:crate", {
+ description = "Crate",
+ drawtype = "normal",
+ tiles = {"castle_crate_top.png","castle_crate_top.png","castle_crate.png","castle_crate.png","castle_crate.png","castle_crate.png"},
+ groups = {choppy=3},
+ paramtype = "light",
+ on_construct = function(pos)
+ local meta = minetest.get_meta(pos)
+ meta:set_string("formspec",
+ "size[8,9]"..
+ "list[current_name;main;0,1;8,4;]"..
+ "list[current_player;main;0,5;8,4;]")
+ meta:set_string("infotext", "Crate")
+ local inv = meta:get_inventory()
+ inv:set_size("main", 8*3)
+ end,
+ can_dig = function(pos,player)
+ local meta = minetest.get_meta(pos);
+ local inv = meta:get_inventory()
+ return inv:is_empty("main")
+ end,
+ on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
+ minetest.log("action", player:get_player_name()..
+ " moves stuff in crate at "..minetest.pos_to_string(pos))
+ end,
+ on_metadata_inventory_put = function(pos, listname, index, stack, player)
+ minetest.log("action", player:get_player_name()..
+ " moves stuff to crate at "..minetest.pos_to_string(pos))
+ end,
+ on_metadata_inventory_take = function(pos, listname, index, stack, player)
+ minetest.log("action", player:get_player_name()..
+ " takes stuff from crate at "..minetest.pos_to_string(pos))
+ end,
+})
+
+local function has_locked_chest_privilege(meta, player)
+ if player:get_player_name() ~= meta:get_string("owner") then
+ return false
+ end
+ return true
+end
+
+minetest.register_craft({
+ output = "castle:crate",
+ recipe = {
+ {"default:wood", "default:wood", "default:wood"},
+ {"default:wood", "default:steel_ingot", "default:wood"},
+ }
+})
+
+minetest.register_node("castle:bound_straw", {
+ description = "Bound Straw",
+ drawtype = "normal",
+ tiles = {"castle_straw_bale.png"},
+ groups = {choppy=4, flammable=1, oddly_breakable_by_hand=3},
+ paramtype = "light",
+})
+
+minetest.register_craft({
+ output = "castle:bound_straw",
+ recipe = {
+ {"castle:straw", "castle:ropes"},
+ }
+})
+
+stairs.register_stair_and_slab("straw", "farming:straw",
+ {choppy=3, flammable=1, oddly_breakable_by_hand=3},
+ {"farming_straw.png"},
+ "Castle Straw Stair",
+ "Castle Straw Slab",
+ default.node_sound_leaves_defaults()
+)
+
+minetest.register_node("castle:pavement", {
+ description = "Paving Stone",
+ drawtype = "normal",
+ tiles = {"castle_pavement_brick.png"},
+ groups = {cracky=2},
+ paramtype = "light",
+})
+
+minetest.register_craft({
+ output = "castle:pavement 4",
+ recipe = {
+ {"default:stone", "default:cobble"},
+ {"default:cobble", "default:stone"},
+ }
+})
+
+
+minetest.register_node("castle:light",{
+ drawtype = "glasslike",
+ description = "Light Block",
+ sunlight_propagates = true,
+ light_source = 14,
+ tiles = {"castle_street_light.png"},
+ groups = {cracky=2},
+ paramtype = "light",
+})
+
+minetest.register_craft({
+ output = "castle:light",
+ recipe = {
+ {"default:stick", "default:glass", "default:stick"},
+ {"default:glass", "default:torch", "default:glass"},
+ {"default:stick", "default:glass", "default:stick"},
+ }
+})
+
+