From 888b0ebfec8c2eff9015163549a7e47443cb8665 Mon Sep 17 00:00:00 2001 From: Vanessa Ezekowitz Date: Fri, 1 Apr 2016 21:00:20 -0400 Subject: "explode" all modpacks into their individual components (you can't have a modpack buried inside a modpack) --- concrete/init.lua | 274 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 274 insertions(+) create mode 100644 concrete/init.lua (limited to 'concrete/init.lua') diff --git a/concrete/init.lua b/concrete/init.lua new file mode 100644 index 0000000..d1fa1aa --- /dev/null +++ b/concrete/init.lua @@ -0,0 +1,274 @@ +--Minetest 0.4.7 mod: concrete +--(c) 2013 by RealBadAngel + +local technic = rawget(_G, "technic") or {} +technic.concrete_posts = {} + +-- Boilerplate to support localized strings if intllib mod is installed. +local S = rawget(_G, "intllib") and intllib.Getter() or function(s) return s end + +minetest.register_alias("technic:concrete_post", "technic:concrete_post0") +minetest.register_alias("technic:concrete_post32", "technic:concrete_post12") +minetest.register_alias("technic:concrete_post33", "technic:concrete_post3") +minetest.register_alias("technic:concrete_post34", "technic:concrete_post28") +minetest.register_alias("technic:concrete_post35", "technic:concrete_post19") + +local steel_ingot +if minetest.get_modpath("technic_worldgen") then + steel_ingot = "technic:carbon_steel_ingot" +else + steel_ingot = "default:steel_ingot" +end + +minetest.register_craft({ + output = 'technic:rebar 6', + recipe = { + {'','', steel_ingot}, + {'',steel_ingot,''}, + {steel_ingot, '', ''}, + } +}) + +minetest.register_craft({ + output = 'technic:concrete 5', + recipe = { + {'default:stone','technic:rebar','default:stone'}, + {'technic:rebar','default:stone','technic:rebar'}, + {'default:stone','technic:rebar','default:stone'}, + } +}) + +minetest.register_craft({ + output = 'technic:concrete_post_platform 6', + recipe = { + {'technic:concrete','technic:concrete_post0','technic:concrete'}, + } +}) + +minetest.register_craft({ + output = 'technic:concrete_post0 12', + recipe = { + {'default:stone','technic:rebar','default:stone'}, + {'default:stone','technic:rebar','default:stone'}, + {'default:stone','technic:rebar','default:stone'}, +} +}) + +minetest.register_craft({ + output = 'technic:blast_resistant_concrete 5', + recipe = { + {'technic:concrete','technic:composite_plate','technic:concrete'}, + {'technic:composite_plate','technic:concrete','technic:composite_plate'}, + {'technic:concrete','technic:composite_plate','technic:concrete'}, + } +}) + +local box_platform = {-0.5, 0.3, -0.5, 0.5, 0.5, 0.5} +local box_center = {-0.15, -0.5, -0.15, 0.15, 0.5, 0.15} +local box_x1 = {0, -0.3, -0.1, 0.5, 0.3, 0.1} +local box_z1 = {-0.1, -0.3, 0, 0.1, 0.3, 0.5} +local box_x2 = {0, -0.3, -0.1, -0.5, 0.3, 0.1} +local box_z2 = {-0.1, -0.3, 0, 0.1, 0.3, -0.5} + +minetest.register_craftitem(":technic:rebar", { + description = S("Rebar"), + inventory_image = "technic_rebar.png", +}) + +minetest.register_node(":technic:concrete", { + description = S("Concrete Block"), + tiles = {"technic_concrete_block.png",}, + groups = {cracky=1, level=2, concrete=1}, + sounds = default.node_sound_stone_defaults(), + after_place_node = function(pos, placer, itemstack) + technic.update_posts(pos, false) + end, + after_dig_node = function (pos, oldnode, oldmetadata, digger) + technic.update_posts(pos, false) + end, +}) + +minetest.register_node(":technic:blast_resistant_concrete", { + description = S("Blast-resistant Concrete Block"), + tiles = {"technic_blast_resistant_concrete_block.png",}, + groups={cracky=1, level=3, concrete=1}, + sounds = default.node_sound_stone_defaults(), + after_place_node = function(pos, player, itemstack) + technic.update_posts(pos, false) + end, + after_dig_node = function (pos, oldnode, oldmetadata, digger) + technic.update_posts(pos, false) + end, +}) + +minetest.register_node(":technic:concrete_post_platform", { + description = S("Concrete Post Platform"), + tiles = {"technic_concrete_block.png",}, + groups={cracky=1, level=2}, + sounds = default.node_sound_stone_defaults(), + paramtype = "light", + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = {box_platform} + }, + on_place = function (itemstack, placer, pointed_thing) + local node = minetest.get_node(pointed_thing.under) + if not technic.concrete_posts[node.name] then + return minetest.item_place_node(itemstack, placer, pointed_thing) + end + local links = technic.concrete_posts[node.name] + if links[6] ~= 0 then -- The post already has a platform + return minetest.item_place_node(itemstack, placer, pointed_thing) + end + local id = technic.get_post_id({links[1], links[2], links[3], links[4], links[5], 1}) + minetest.set_node(pointed_thing.under, {name="technic:concrete_post"..id}) + itemstack:take_item() + placer:set_wielded_item(itemstack) + return itemstack + end, +}) + +local function gen_post_nodebox(x1, x2, z1, z2, y, platform) + local box + local xx = x1 + x2 + local zz = z1 + z2 + if ((xx == 2 and zz == 0) or (xx == 0 and zz == 2)) and y == 0 then + box = {} + else + box = {box_center} + end + if x1 ~= 0 then + table.insert(box, box_x1) + end + if x2 ~= 0 then + table.insert(box, box_x2) + end + if z1 ~= 0 then + table.insert(box, box_z1) + end + if z2 ~= 0 then + table.insert(box, box_z2) + end + if platform ~= 0 then + table.insert(box, box_platform) + end + return box +end + +local function dig_post_with_platform(pos, oldnode, oldmetadata) + oldnode.name = "technic:concrete_post0" + minetest.set_node(pos, oldnode) + technic.update_posts(pos, true) +end + +function technic.posts_should_connect(pos) + local node = minetest.get_node(pos) + if technic.concrete_posts[node.name] then + return "post" + elseif minetest.get_item_group(node.name, "concrete") ~= 0 then + return "block" + end +end + +function technic.get_post_id(links) + return (links[1] * 1) + (links[2] * 2) + + (links[3] * 4) + (links[4] * 8) + + (links[5] * 16) + (links[6] * 32) +end + +function technic.update_posts(pos, set, secondrun) + local node = minetest.get_node(pos) + local link_positions = { + {x=pos.x+1, y=pos.y, z=pos.z}, + {x=pos.x-1, y=pos.y, z=pos.z}, + {x=pos.x, y=pos.y, z=pos.z+1}, + {x=pos.x, y=pos.y, z=pos.z-1}, + {x=pos.x, y=pos.y-1, z=pos.z}, + {x=pos.x, y=pos.y+1, z=pos.z}, + } + + local links = {0, 0, 0, 0, 0, 0} + + for i, link_pos in pairs(link_positions) do + local connecttype = technic.posts_should_connect(link_pos) + if connecttype then + links[i] = 1 + -- Have posts next to us update theirselves, + -- but only once. (We don't want to start an + -- infinite loop of updates) + if not secondrun and connecttype == "post" then + technic.update_posts(link_pos, true, true) + end + end + end + + if links[5] == 1 or links[6] == 1 then + links[5] = 1 + links[6] = 0 + end + + -- We don't want to set ourselves if we have been removed or we are + -- updating a concrete node + if set then + -- Preserve platform + local oldlinks = technic.concrete_posts[node.name] + if oldlinks then + links[6] = oldlinks[6] + end + minetest.set_node(pos, {name="technic:concrete_post" + ..technic.get_post_id(links)}) + end +end + +for x1 = 0, 1 do +for x2 = 0, 1 do +for z1 = 0, 1 do +for z2 = 0, 1 do +for y = 0, 1 do +for platform = 0, 1 do + local links = {x1, x2, z1, z2, y, platform} + local id = technic.get_post_id(links) + technic.concrete_posts["technic:concrete_post"..id] = links + + local groups = {cracky=1, level=2, concrete_post=1} + if id ~= 0 then + groups.not_in_creative_inventory = 1 + end + + local drop = "technic:concrete_post0" + local after_dig_node = function(pos, oldnode, oldmetadata, digger) + technic.update_posts(pos, false) + end + if platform ~= 0 then + drop = "technic:concrete_post_platform" + after_dig_node = function(pos, oldnode, oldmetadata, digger) + dig_post_with_platform(pos, oldnode, oldmetadata) + end + end + + minetest.register_node(":technic:concrete_post"..id, { + description = S("Concrete Post"), + tiles = {"technic_concrete_block.png"}, + groups = groups, + sounds = default.node_sound_stone_defaults(), + drop = drop, + paramtype = "light", + sunlight_propagates = true, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = gen_post_nodebox(x1, x2, z1, z2, y, platform), + }, + after_place_node = function(pos, placer, itemstack) + technic.update_posts(pos, true) + end, + after_dig_node = after_dig_node, + }) +end +end +end +end +end +end + -- cgit v1.2.3