commit f360f9edba7c0d938bac0d37f90cda259cec85d4 Author: tchncs Date: Tue Apr 19 12:10:19 2016 +0200 hello gitlab diff --git a/depends.txt b/depends.txt new file mode 100644 index 0000000..5643dca --- /dev/null +++ b/depends.txt @@ -0,0 +1,5 @@ +default +streets? +homedecor? +protector? +node_ownership? diff --git a/init.lua b/init.lua new file mode 100644 index 0000000..0909989 --- /dev/null +++ b/init.lua @@ -0,0 +1,322 @@ +dofile(minetest.get_modpath("steel").."/rust.lua") + +if minetest.setting_getbool("creative_mode") and not minetest.get_modpath("unified_inventory") then + steel_expect_infinite_stacks = true +else + steel_expect_infinite_stacks = false +end + +function steel_node_is_owned(pos, placer) + local ownername = false + if type(IsPlayerNodeOwner) == "function" then -- node_ownership mod + if HasOwner(pos, placer) then -- returns true if the node is owned + if not IsPlayerNodeOwner(pos, placer:get_player_name()) then + if type(getLastOwner) == "function" then -- ...is an old version + ownername = getLastOwner(pos) + elseif type(GetNodeOwnerName) == "function" then -- ...is a recent version + ownername = GetNodeOwnerName(pos) + else + ownername = "someone" + end + end + end + + elseif type(isprotect)=="function" then -- glomie's protection mod + if not isprotect(5, pos, placer) then + ownername = "someone" + end + elseif type(protector)=="table" and type(protector.can_dig)=="function" then -- Zeg9's protection mod + if not protector.can_dig(5, pos, placer) then + ownername = "someone" + end + end + + if ownername ~= false then + minetest.chat_send_player( placer:get_player_name(), ("Sorry, %s owns that spot."):format(ownername) ) + return true + else + return false + end +end + +function steel_rotate_and_place(itemstack, placer, pointed_thing) + + local node = minetest.get_node(pointed_thing.under) + if not minetest.registered_nodes[node.name] or not minetest.registered_nodes[node.name].on_rightclick then + if steel_node_is_owned(pointed_thing.above, placer) then + return itemstack + end + local above = pointed_thing.above + local under = pointed_thing.under + local pitch = placer:get_look_pitch() + local node = minetest.get_node(above) + local fdir = minetest.dir_to_facedir(placer:get_look_dir()) + local wield_name = itemstack:get_name() + + if node.name ~= "air" then return end + + local iswall = (above.x ~= under.x) or (above.z ~= under.z) + local isceiling = (above.x == under.x) and (above.z == under.z) and (pitch > 0) + + if iswall then + local dirs = { 2, 3, 0, 1 } + minetest.add_node(above, {name = wield_name.."_wall", param2 = dirs[fdir+1] }) -- place wall variant + elseif isceiling then + minetest.add_node(above, {name = wield_name.."_wall", param2 = 19 }) -- place wall variant on ceiling + else + minetest.add_node(above, {name = wield_name }) -- place regular variant + end + + if not steel_expect_infinite_stacks then + itemstack:take_item() + return itemstack + end + else + minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer, itemstack) + end +end + +minetest.register_node("steel:plate_soft", { + description = "Soft steel plate", + tiles = {"steelplatesoft.png"}, + is_ground_content = true, + groups = {cracky=2}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("steel:plate_hard", { + description = "Hardened steel plate", + tiles = {"steelplatehard.png"}, + is_ground_content = true, + groups = {cracky=1}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("steel:plate_rusted", { + description = "Rusted steel plate", + tiles = {"steel_rusted.png"}, + is_ground_content = true, + groups = {cracky=1,choppy=1}, + sounds = default.node_sound_stone_defaults(), +}) + +if minetest.registered_nodes["streets:steel_support"] then + minetest.register_alias("steel:strut","streets:steel_support") +else + minetest.register_node("steel:strut", { + drawtype = "glasslike", + description = "Strut", + tiles = {"strut.png"}, + is_ground_content = true, + paramtype= "light", + groups = {choppy=1,cracky=1}, + sounds = default.node_sound_stone_defaults(), + }) + minetest.register_alias("streets:steel_support","steel:strut") +end +minetest.register_node("steel:grate_soft", { + description = "Soft Steel Grate", + drawtype = "fencelike", + tiles = {"worldgratesoft.png"}, + inventory_image = "gratesoft.png", + wield_image = "gratesoft.png", + paramtype = "light", + is_ground_content = true, + selection_box = { + type = "fixed", + fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7}, + }, + groups = {cracky=2,choppy=2}, + sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_node("steel:grate_hard", { + description = "Hardened Steel Grate", + drawtype = "fencelike", + tiles = {"worldgratehard.png"}, + inventory_image = "gratehard.png", + wield_image = "gratehard.png", + paramtype = "light", + is_ground_content = true, + selection_box = { + type = "fixed", + fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7}, + }, + groups = {cracky=1,choppy=1}, + sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_node("steel:roofing", { + description = "Corrugated steel roofing", + drawtype = "raillike", + tiles = {"corrugated_steel.png"}, + inventory_image = "corrugated_steel.png", + wield_image = "corrugated_steel.png", + paramtype = "light", + is_ground_content = true, + walkable = true, + selection_box = { + type = "fixed", + -- but how to specify the dimensions for curved and sideways rails? + fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2}, + }, + groups = {bendy=2,snappy=1,dig_immediate=2}, + on_place = function(itemstack, placer, pointed_thing) + steel_rotate_and_place(itemstack, placer, pointed_thing) + return itemstack + end +}) + +minetest.register_node("steel:roofing_wall", { + description = "Corrugated steel wall", + drawtype = "nodebox", + tiles = {"corrugated_steel.png"}, + inventory_image = "corrugated_steel.png", + wield_image = "corrugated_steel.png", + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = true, + walkable = true, + groups = {bendy=2,snappy=1,dig_immediate=2, not_in_creative_inventory=1}, + drop = "steel:roofing", + on_place = function(itemstack, placer, pointed_thing) + steel_rotate_and_place(itemstack, placer, pointed_thing) + return itemstack + end, + node_box = { + type = "fixed", + fixed = { -0.5, -0.5, -0.48, 0.5, 0.5, -0.48 } + }, + selection_box = { + type = "fixed", + fixed = { -0.5, -0.5, -0.5, 0.5, 0.5, -0.4 } + }, +}) + +if homedecor_register_slope and homedecor_register_roof then + homedecor_register_slope("steel", "roofing", + "steel:roofing", + {bendy=2,snappy=1,dig_immediate=2}, + {"corrugated_steel.png"}, + "Corrugated steel roofing" + ) + homedecor_register_roof("steel", "roofing", + {bendy=2,snappy=1,dig_immediate=2}, + {"corrugated_steel.png"}, + "Corrugated steel roofing" + ) +end + + --steel scrap are only used to recover ingots + +minetest.register_craftitem("steel:scrap", { + description = "Steel scraps", + inventory_image = "scrap.png", +}) + + --recipes + +minetest.register_craft({ + output = 'steel:plate_soft 2', + recipe = { + {'default:steelblock', 'default:steelblock'}, + {'default:steelblock', 'default:steelblock'}, + } +}) + + + +minetest.register_craft({ + type = "cooking", + output = "steel:plate_hard", + recipe = "steel:plate_soft", +}) + + +minetest.register_craft({ + output = 'steel:grate_soft 3', + recipe = { + {'default:steel_ingot', '', 'default:steel_ingot'}, + {'default:steel_ingot', '', 'default:steel_ingot'}, + } +}) + + +minetest.register_craft({ + type = "cooking", + output = "steel:grate_hard", + recipe = "steel:grate_soft", +}) + +-- only register this craft if streets is not loaded +if not minetest.registered_nodes["streets:steel_support"] then + minetest.register_craft({ + output = 'steel:strut 5', + recipe = { + {'default:steel_ingot', '', 'default:steel_ingot'}, + {'', 'default:steel_ingot', ''}, + {'default:steel_ingot', '', 'default:steel_ingot'}, + } + }) +end + +minetest.register_craft({ + output = 'steel:roofing 6', + recipe = { + {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'}, + } +}) + --remelting recipes + +minetest.register_craft({ + output = 'steel:scrap 2', + recipe = { + {'steel:strut'}, + } +}) + +minetest.register_craft({ + output = 'steel:scrap 2', + recipe = { + {'steel:grate_soft'}, + } +}) + +minetest.register_craft({ + output = 'steel:scrap 2', + recipe = { + {'steel:grate_hard'}, + } +}) + +minetest.register_craft({ + output = 'steel:scrap', + recipe = { + {'steel:roofing'}, + } +}) + +minetest.register_craft({ + output = 'steel:scrap 4', + recipe = { + {'steel:plate_soft'}, + } +}) + +minetest.register_craft({ + output = 'steel:scrap 4', + recipe = { + {'steel:plate_hard'}, + } +}) + +minetest.register_craft({ + output = 'default:iron_lump', + recipe = { + {'steel:scrap', 'steel:scrap'}, + } +}) + + + + diff --git a/recipes.png b/recipes.png new file mode 100644 index 0000000..7b10124 Binary files /dev/null and b/recipes.png differ diff --git a/rust.lua b/rust.lua new file mode 100644 index 0000000..9eea7ca --- /dev/null +++ b/rust.lua @@ -0,0 +1,15 @@ +local function moss(input, output) + minetest.register_abm({ + nodenames = {input}, + neighbors = {"group:water"}, + interval = 50, + chance = 20, + action = function(pos) + if not minetest.find_node_near(pos, 3, output) then + minetest.add_node(pos, {name=output}) + end + end, + }) +end + +moss("steel:plate_soft", "steel:plate_rusted") diff --git a/textures/corrugated_steel.png b/textures/corrugated_steel.png new file mode 100644 index 0000000..a704a85 Binary files /dev/null and b/textures/corrugated_steel.png differ diff --git a/textures/gratehard.png b/textures/gratehard.png new file mode 100644 index 0000000..71b0921 Binary files /dev/null and b/textures/gratehard.png differ diff --git a/textures/gratesoft.png b/textures/gratesoft.png new file mode 100644 index 0000000..0ac6a52 Binary files /dev/null and b/textures/gratesoft.png differ diff --git a/textures/scrap.png b/textures/scrap.png new file mode 100644 index 0000000..043292a Binary files /dev/null and b/textures/scrap.png differ diff --git a/textures/steel_rusted.png b/textures/steel_rusted.png new file mode 100644 index 0000000..4d7e598 Binary files /dev/null and b/textures/steel_rusted.png differ diff --git a/textures/steelplatehard.png b/textures/steelplatehard.png new file mode 100644 index 0000000..75e3bf0 Binary files /dev/null and b/textures/steelplatehard.png differ diff --git a/textures/steelplatesoft.png b/textures/steelplatesoft.png new file mode 100644 index 0000000..5891a8b Binary files /dev/null and b/textures/steelplatesoft.png differ diff --git a/textures/strut.png b/textures/strut.png new file mode 100644 index 0000000..faa6b94 Binary files /dev/null and b/textures/strut.png differ diff --git a/textures/worldgratehard.png b/textures/worldgratehard.png new file mode 100644 index 0000000..2e53ae7 Binary files /dev/null and b/textures/worldgratehard.png differ diff --git a/textures/worldgratesoft.png b/textures/worldgratesoft.png new file mode 100644 index 0000000..b8bf99f Binary files /dev/null and b/textures/worldgratesoft.png differ