summaryrefslogtreecommitdiff
path: root/extranodes
diff options
context:
space:
mode:
Diffstat (limited to 'extranodes')
-rw-r--r--extranodes/aspirin.lua41
-rw-r--r--extranodes/depends.txt3
-rw-r--r--extranodes/extramesecons.lua63
-rw-r--r--extranodes/extratubes.lua241
-rw-r--r--extranodes/init.lua84
-rw-r--r--extranodes/lox.lua194
-rw-r--r--extranodes/textures/mesecons_switch_locked_frame.pngbin0 -> 178 bytes
-rw-r--r--extranodes/textures/pipeworks_conductor_one_way_tube_input_off.pngbin0 -> 665 bytes
-rw-r--r--extranodes/textures/pipeworks_conductor_one_way_tube_input_on.pngbin0 -> 682 bytes
-rw-r--r--extranodes/textures/pipeworks_conductor_one_way_tube_output_off.pngbin0 -> 665 bytes
-rw-r--r--extranodes/textures/pipeworks_conductor_one_way_tube_output_on.pngbin0 -> 682 bytes
-rw-r--r--extranodes/textures/pipeworks_conductor_one_way_tube_side_off.pngbin0 -> 933 bytes
-rw-r--r--extranodes/textures/pipeworks_conductor_one_way_tube_side_on.pngbin0 -> 741 bytes
-rw-r--r--extranodes/textures/pipeworks_conductor_one_way_tube_top_off.pngbin0 -> 940 bytes
-rw-r--r--extranodes/textures/pipeworks_conductor_one_way_tube_top_on.pngbin0 -> 746 bytes
-rw-r--r--extranodes/textures/pipeworks_straight_tube_input.pngbin0 -> 349 bytes
-rw-r--r--extranodes/textures/pipeworks_straight_tube_output.pngbin0 -> 349 bytes
-rw-r--r--extranodes/textures/pipeworks_straight_tube_side.pngbin0 -> 925 bytes
-rw-r--r--extranodes/textures/pipeworks_tube_valve_side_off.pngbin0 -> 1053 bytes
-rw-r--r--extranodes/textures/pipeworks_tube_valve_side_on.pngbin0 -> 1058 bytes
-rw-r--r--extranodes/textures/technic_aspirin_bottle.pngbin0 -> 569 bytes
-rw-r--r--extranodes/textures/technic_aspirin_pill.pngbin0 -> 292 bytes
-rw-r--r--extranodes/textures/technic_cottonseed_oil.pngbin0 -> 363 bytes
-rw-r--r--extranodes/textures/technic_fbomb.pngbin0 -> 2099 bytes
-rw-r--r--extranodes/textures/technic_fbombact.pngbin0 -> 2427 bytes
-rw-r--r--extranodes/textures/technic_lox.pngbin0 -> 352 bytes
-rw-r--r--extranodes/textures/technic_snowflake.pngbin0 -> 635 bytes
-rw-r--r--extranodes/trampoline.lua94
28 files changed, 720 insertions, 0 deletions
diff --git a/extranodes/aspirin.lua b/extranodes/aspirin.lua
new file mode 100644
index 0000000..a9ddad8
--- /dev/null
+++ b/extranodes/aspirin.lua
@@ -0,0 +1,41 @@
+-- aspirin
+
+-- makes any sence only when there is hunger as a separate status of the player
+-- also it uses willow twigs - ethereal dependency
+-- A bottle of aspirin pills heals the player immediately.
+
+local S = rawget(_G, "intllib") and intllib.Getter() or function(s) return s end
+
+if minetest.get_modpath("hunger") and minetest.get_modpath("ethereal") then
+
+ minetest.register_craftitem(":technic:aspirin_pill", {
+ description = S("Aspirin pill"),
+ inventory_image = "technic_aspirin_pill.png",
+ on_use = function(itemstack, user, pointed_thing)
+ user:set_hp(user:get_hp() + 2)
+ itemstack:take_item()
+ return itemstack
+ end
+ })
+
+ minetest.register_craftitem(":technic:aspirin_bottle", {
+ description = S("Aspirin pills"),
+ inventory_image = "technic_aspirin_bottle.png",
+ on_use = function(itemstack, user, pointed_thing)
+ user:set_hp(20)
+ itemstack:take_item()
+ return itemstack
+ end
+ })
+
+ minetest.register_craft({
+ type = "shapeless",
+ output = "technic:aspirin_bottle",
+ recipe = {"technic:aspirin_pill", "technic:aspirin_pill",
+ "technic:aspirin_pill", "technic:aspirin_pill",
+ "technic:aspirin_pill", "technic:aspirin_pill",
+ "technic:aspirin_pill", "vessels:glass_bottle"}
+ })
+
+end
+
diff --git a/extranodes/depends.txt b/extranodes/depends.txt
index 15b9ef5..fa27879 100644
--- a/extranodes/depends.txt
+++ b/extranodes/depends.txt
@@ -1,4 +1,7 @@
default
+technic?
+pipeworks?
+mesecons?
technic_worldgen
concrete
unifieddyes?
diff --git a/extranodes/extramesecons.lua b/extranodes/extramesecons.lua
new file mode 100644
index 0000000..05581c5
--- /dev/null
+++ b/extranodes/extramesecons.lua
@@ -0,0 +1,63 @@
+local S = rawget(_G, "intllib") and intllib.Getter() or function(s) return s end
+
+if minetest.get_modpath("mesecons") then
+
+ mesecon.register_node("extranodes:mesecon_switch_protected", {
+ paramtype2="facedir",
+ description="Switch (protected)",
+ is_ground_content = false,
+ sounds = default.node_sound_stone_defaults(),
+ after_place_node = function(pos, placer, itemstack, pointed_thing)
+ local meta = minetest.get_meta(pos)
+ meta:set_string("owner", placer:get_player_name() or "")
+ end,
+ on_rightclick = function (pos, node, player)
+ local meta = minetest.get_meta(pos)
+ local owner = meta:get_string("owner")
+ local pname = player:get_player_name();
+ if owner ~= pname then
+ minetest.chat_send_player(pname, "This switch can only be used by " .. owner)
+ return
+ end
+ if(mesecon.flipstate(pos, node) == "on") then
+ mesecon.receptor_on(pos)
+ else
+ mesecon.receptor_off(pos)
+ end
+ minetest.sound_play("mesecons_switch", {pos=pos})
+ end
+ },{
+ groups = {dig_immediate=2},
+ tiles = { "mesecons_switch_side.png",
+ "mesecons_switch_side.png",
+ "mesecons_switch_side.png^default_key.png^[transformR180",
+ "mesecons_switch_side.png^default_key.png^[transformR180FX",
+ "mesecons_switch_side.png",
+ "mesecons_switch_off.png^mesecons_switch_locked_frame.png"},
+ mesecons = {receptor = { state = mesecon.state.off }}
+ },{
+ groups = {dig_immediate=2, not_in_creative_inventory=1},
+ tiles = { "mesecons_switch_side.png",
+ "mesecons_switch_side.png",
+ "mesecons_switch_side.png^default_key.png^[transformR180",
+ "mesecons_switch_side.png^default_key.png^[transformR180FX",
+ "mesecons_switch_side.png",
+ "mesecons_switch_on.png^mesecons_switch_locked_frame.png"},
+ mesecons = {receptor = { state = mesecon.state.on }}
+ })
+
+ minetest.register_craft({
+ output = "extranodes:mesecon_switch_protected_off 2",
+ recipe = {
+ {"default:steel_ingot", "default:cobble", "default:steel_ingot"},
+ {"group:mesecon_conductor_craftable","default:skeleton_key", "group:mesecon_conductor_craftable"},
+ }
+ })
+
+ minetest.register_craft({
+ output = "extranodes:mesecon_switch_protected_off",
+ type = "shapeless",
+ recipe = {"default:skeleton_key", "mesecons_switch:mesecon_switch_off"}
+ })
+
+end \ No newline at end of file
diff --git a/extranodes/extratubes.lua b/extranodes/extratubes.lua
new file mode 100644
index 0000000..e624c87
--- /dev/null
+++ b/extranodes/extratubes.lua
@@ -0,0 +1,241 @@
+-- EXTRATUBES
+-- This files add some new tube types, to widen the pipeworks mod assortment of
+-- available parts in order to better meet the needs of expansive automation
+local S = rawget(_G, "intllib") and intllib.Getter() or function(s) return s end
+
+if minetest.get_modpath("pipeworks") then
+
+ ---------------------------------------------------------------------
+ -- straight-only pipe
+ -- does not connect side-wise, allows items in both directions
+ -- a counterpart to straight-only pipe, and a cheap alternative
+ -- to one-way tube for long segments of parallel pipes
+ ---------------------------------------------------------------------
+
+ minetest.register_node(":pipeworks:straight_tube", {
+ description = S("Straight-only Tube"),
+ tiles = {"pipeworks_straight_tube_side.png",
+ "pipeworks_straight_tube_side.png",
+ "pipeworks_straight_tube_output.png",
+ "pipeworks_straight_tube_input.png",
+ "pipeworks_straight_tube_side.png",
+ "pipeworks_straight_tube_side.png"},
+ paramtype2 = "facedir",
+ drawtype = "nodebox",
+ paramtype = "light",
+ node_box = {type = "fixed",
+ fixed = {{-1/2, -9/64, -9/64, 1/2, 9/64, 9/64}}},
+ groups = {snappy = 2, choppy = 2, oddly_breakable_by_hand = 2, tubedevice = 1},
+ sounds = default.node_sound_wood_defaults(),
+ tube = {
+ connect_sides = {left = 1, right = 1},
+ can_go = function(pos, node, velocity, stack)
+ return {velocity}
+ end,
+ can_insert = function(pos, node, stack, direction)
+ local dir = pipeworks.facedir_to_right_dir(node.param2)
+ local opdir = vector.multiply(dir, -1)
+ return vector.equals(dir, direction) or vector.equals(opdir, direction)
+ end,
+ priority = 60 -- Higher than normal tubes, but lower than one-way tubes
+ },
+ after_place_node = pipeworks.after_place,
+ after_dig_node = pipeworks.after_dig,
+ })
+
+ minetest.register_craft({
+ output = "pipeworks:straight_tube 3",
+ recipe = {
+ { "pipeworks:tube_1", "pipeworks:tube_1", "pipeworks:tube_1" },
+ },
+ })
+
+
+ ---------------------------------------------------------------------
+ -- conducting one-way tube - to stop making those ugly shunting wires
+ ---------------------------------------------------------------------
+
+
+ if pipeworks.enable_one_way_tube and pipeworks.enable_conductor_tube then
+ minetest.register_node(":pipeworks:conductor_one_way_tube_on", {
+ description = S("One-way Conducting Tube"),
+ tiles = {"pipeworks_conductor_one_way_tube_top_on.png",
+ "pipeworks_conductor_one_way_tube_top_on.png",
+ "pipeworks_conductor_one_way_tube_output_on.png",
+ "pipeworks_conductor_one_way_tube_input_on.png",
+ "pipeworks_conductor_one_way_tube_side_on.png",
+ "pipeworks_conductor_one_way_tube_top_on.png"},
+ paramtype2 = "facedir",
+ drawtype = "nodebox",
+ paramtype = "light",
+ node_box = {type = "fixed",
+ fixed = {{-1/2, -9/64, -9/64, 1/2, 9/64, 9/64}}},
+ groups = {snappy = 2, choppy = 2, oddly_breakable_by_hand = 2, tubedevice = 1, mesecon = 2, not_in_creative_inventory = 1},
+ sounds = default.node_sound_wood_defaults(),
+ tube = {
+ connect_sides = {left = 1, right = 1},
+ can_go = function(pos, node, velocity, stack)
+ return {velocity}
+ end,
+ can_insert = function(pos, node, stack, direction)
+ local dir = pipeworks.facedir_to_right_dir(node.param2)
+ return vector.equals(dir, direction)
+ end,
+ priority = 75 -- Higher than normal tubes, but lower than receivers
+ },
+ after_place_node = pipeworks.after_place,
+ after_dig_node = pipeworks.after_dig,
+ mesecons = {
+ conductor = {state = mesecon.state.on,
+ rules = pipeworks.mesecons_rules,
+ onstate = "pipeworks:conductor_one_way_tube_on",
+ offstate = "pipeworks:conductor_one_way_tube_off"
+ }
+ },
+ drop = "pipeworks:conductor_one_way_tube_off",
+ })
+
+ minetest.register_node(":pipeworks:conductor_one_way_tube_off", {
+ description = S("One-way Conducting Tube"),
+ tiles = {"pipeworks_conductor_one_way_tube_top_off.png",
+ "pipeworks_conductor_one_way_tube_top_off.png",
+ "pipeworks_conductor_one_way_tube_output_off.png",
+ "pipeworks_conductor_one_way_tube_input_off.png",
+ "pipeworks_conductor_one_way_tube_side_off.png",
+ "pipeworks_conductor_one_way_tube_top_off.png"},
+ paramtype2 = "facedir",
+ drawtype = "nodebox",
+ paramtype = "light",
+ node_box = {type = "fixed",
+ fixed = {{-1/2, -9/64, -9/64, 1/2, 9/64, 9/64}}},
+ groups = {snappy = 2, choppy = 2, oddly_breakable_by_hand = 2, tubedevice = 1, mesecon = 2},
+ sounds = default.node_sound_wood_defaults(),
+ tube = {
+ connect_sides = {left = 1, right = 1},
+ can_go = function(pos, node, velocity, stack)
+ return {velocity}
+ end,
+ can_insert = function(pos, node, stack, direction)
+ local dir = pipeworks.facedir_to_right_dir(node.param2)
+ return vector.equals(dir, direction)
+ end,
+ priority = 75 -- Higher than normal tubes, but lower than receivers
+ },
+ after_place_node = pipeworks.after_place,
+ after_dig_node = pipeworks.after_dig,
+ mesecons = {
+ conductor = {state = mesecon.state.off,
+ rules = pipeworks.mesecons_rules,
+ onstate = "pipeworks:conductor_one_way_tube_on",
+ offstate = "pipeworks:conductor_one_way_tube_off"
+ }
+ },
+ drop = "pipeworks:conductor_one_way_tube_off",
+ })
+
+ minetest.register_craft({
+ output = "pipeworks:conductor_one_way_tube_off",
+ recipe = {
+ { "pipeworks:one_way_tube", "mesecons:wire_00000000_off"}
+ },
+ })
+ end
+
+ ---------------------------------------------------------------------
+ -- mesecon-controlled valve (bidirectional)
+ ---------------------------------------------------------------------
+
+ minetest.register_node(":pipeworks:tube_valve_on", {
+ description = S("Tube Valve"),
+ tiles = {"pipeworks_tube_valve_side_on.png",
+ "pipeworks_tube_valve_side_on.png",
+ "pipeworks_straight_tube_output.png",
+ "pipeworks_straight_tube_input.png",
+ "pipeworks_tube_valve_side_on.png",
+ "pipeworks_tube_valve_side_on.png"},
+ paramtype2 = "facedir",
+ drawtype = "nodebox",
+ paramtype = "light",
+ node_box = {type = "fixed",
+ fixed = {{-1/2, -9/64, -9/64, 1/2, 9/64, 9/64}}},
+ groups = {snappy = 2, choppy = 2, oddly_breakable_by_hand = 2, tubedevice = 1, mesecon = 2, not_in_creative_inventory = 1},
+ sounds = default.node_sound_wood_defaults(),
+ tube = {
+ connect_sides = {left = 1, right = 1},
+ can_go = function(pos, node, velocity, stack)
+ return {velocity}
+ end,
+ can_insert = function(pos, node, stack, direction)
+ local dir = pipeworks.facedir_to_right_dir(node.param2)
+ local opdir = vector.multiply(dir, -1)
+ return vector.equals(dir, direction) or vector.equals(opdir, direction)
+ end,
+ priority = 50 -- regular tube
+ },
+ after_place_node = pipeworks.after_place,
+ after_dig_node = pipeworks.after_dig,
+ mesecons = {
+ effector = {
+ rules = pipeworks.mesecons_rules,
+ action_on = function (pos, node)
+ minetest.swap_node(pos, {name = "pipeworks:tube_valve_on", param2 = node.param2 })
+ end,
+ action_off = function (pos, node)
+ minetest.swap_node(pos, {name = "pipeworks:tube_valve_off", param2 = node.param2 })
+ end,
+ }
+ },
+ drop = "pipeworks:tube_valve_off",
+ })
+
+ minetest.register_node(":pipeworks:tube_valve_off", {
+ description = S("Tube Valve"),
+ tiles = {"pipeworks_tube_valve_side_off.png",
+ "pipeworks_tube_valve_side_off.png",
+ "pipeworks_straight_tube_output.png",
+ "pipeworks_straight_tube_input.png",
+ "pipeworks_tube_valve_side_off.png",
+ "pipeworks_tube_valve_side_off.png"},
+ paramtype2 = "facedir",
+ drawtype = "nodebox",
+ paramtype = "light",
+ node_box = {type = "fixed",
+ fixed = {{-1/2, -9/64, -9/64, 1/2, 9/64, 9/64}}},
+ groups = {snappy = 2, choppy = 2, oddly_breakable_by_hand = 2, tubedevice = 1, mesecon = 2},
+ sounds = default.node_sound_wood_defaults(),
+ tube = {
+ connect_sides = {left = 1, right = 1},
+ can_go = function(pos, node, velocity, stack)
+ return {velocity}
+ end,
+ can_insert = function(pos, node, stack, direction)
+ return false
+ end,
+ priority = 50 -- regular tube
+ },
+ after_place_node = pipeworks.after_place,
+ after_dig_node = pipeworks.after_dig,
+ mesecons = {
+ effector = {
+ rules = pipeworks.mesecons_rules,
+ action_on = function (pos, node)
+ minetest.swap_node(pos, {name = "pipeworks:tube_valve_on", param2 = node.param2 })
+ end,
+ action_off = function (pos, node)
+ minetest.swap_node(pos, {name = "pipeworks:tube_valve_off", param2 = node.param2 })
+ end,
+ }
+ },
+ drop = "pipeworks:tube_valve_off",
+ })
+
+ minetest.register_craft({
+ output = "pipeworks:tube_valve_off 2",
+ recipe = {
+ { "pipeworks:tube_1", "homedecor:plastic_sheeting", "pipeworks:tube_1"},
+ { "", "mesecons:wire_00000000_off", ""}
+ },
+ })
+
+
+end \ No newline at end of file
diff --git a/extranodes/init.lua b/extranodes/init.lua
index eb54067..69cb820 100644
--- a/extranodes/init.lua
+++ b/extranodes/init.lua
@@ -3,6 +3,23 @@
-- Boilerplate to support localized strings if intllib mod is installed.
local S = rawget(_G, "intllib") and intllib.Getter() or function(s) return s end
+-- some extras to the extras
+local path = string.gsub(technic.modpath, "technic/technic", "technic/extranodes")
+dofile(path.."/aspirin.lua")
+dofile(path.."/trampoline.lua")
+dofile(path.."/extratubes.lua")
+dofile(path.."/extramesecons.lua")
+dofile(path.."/lox.lua")
+
+if minetest.get_modpath("bakedclay") then
+ -- bring back them sticks
+ minetest.register_craft( {
+ type = "shapeless",
+ output = "default:stick",
+ recipe = {"default:dry_shrub"}
+ })
+end
+
if minetest.get_modpath("moreblocks") then
-- register stairsplus/circular_saw nodes
@@ -107,6 +124,7 @@ local iclip_def = {
drawtype = "mesh",
mesh = "technic_insulator_clip.obj",
tiles = {"technic_insulator_clip.png"},
+ paramtype2 = "facedir",
is_ground_content = false,
groups = {choppy=1, snappy=1, oddly_breakable_by_hand=1 },
sounds = default.node_sound_stone_defaults(),
@@ -185,3 +203,69 @@ minetest.register_craft({
{ "technic:raw_latex", "default:fence_wood", "technic:raw_latex"},
}
})
+
+-- Artificial diamonds
+
+minetest.register_craftitem(":technic:diamond_seed", {
+ description = S("Diamond Seed"),
+ inventory_image = "technic_diamond_seed.png",
+})
+
+minetest.register_craft({
+ type = "cooking",
+ output = "technic:diamond_seed",
+ recipe = "technic:graphite"
+})
+
+-- Cotton seed oil: fuel and fertilizer
+
+if minetest.get_modpath("farming") then
+ if minetest.get_modpath("bonemeal") then
+ minetest.register_craftitem(":technic:cottonseed_oil", {
+ description = S("Cottonseed Oil"),
+ inventory_image = "technic_cottonseed_oil.png",
+ on_use = function(itemstack, user, pointed_thing)
+ if pointed_thing.type ~= "node" then
+ return
+ end
+ if minetest.is_protected(pointed_thing.under, user:get_player_name()) then
+ return
+ end
+ if not is_creative(user:get_player_name()) then
+ itemstack:take_item()
+ end
+ bonemeal:on_use(pointed_thing.under, 4)
+ return itemstack
+ end,
+ })
+ else
+ minetest.register_craftitem(":technic:cottonseed_oil", {
+ description = S("Cottonseed Oil"),
+ inventory_image = "technic_cottonseed_oil.png",
+ })
+ end
+
+ minetest.register_craft({
+ type = "fuel",
+ recipe = "technic:cottonseed_oil",
+ burntime = 20,
+ })
+
+end
+
+
+-- -- Additional recipe for straw blocks out of straw mat from cottages (if present)
+-- -- not to let the centifuge output go to waste, since farming:straw can be used with a saw...
+--
+-- if minetest.get_modpath("cottages") and minetest.get_modpath("farming") then
+-- minetest.register_craft({
+-- output = "farming:straw 2",
+-- recipe = {
+-- { "cottages:straw_mat", "cottages:straw_mat", "cottages:straw_mat" },
+-- { "cottages:straw_mat", "cottages:straw_mat", "cottages:straw_mat" },
+-- { "cottages:straw_mat", "cottages:straw_mat", "cottages:straw_mat" },
+-- }
+-- })
+-- end
+
+
diff --git a/extranodes/lox.lua b/extranodes/lox.lua
new file mode 100644
index 0000000..3aaadee
--- /dev/null
+++ b/extranodes/lox.lua
@@ -0,0 +1,194 @@
+-- An small arsenal of tools to battle the lava craters
+
+
+local S = rawget(_G, "intllib") and intllib.Getter() or function(s) return s end
+
+local freezing_rules = {
+ ["default:water_source"] = "default:ice",
+ ["default:water_flowing"] = "default:snowblock",
+ ["default:river_water_source"] = "default:ice",
+ ["default:river_water_flowing"] = "default:snowblock",
+ ["default:lava_source"] = "default:obsidian",
+ ["default:lava_flowing"] = "default:stone",
+ ["fire:basic_flame"] = "air",
+ ["default:dirt"] = "default:dirt_with_snow",
+ ["ethereal:fiery_dirt"] = "default:dirt_with_snow",
+ ["ethereal:mushroom_dirt"] = "default:dirt_with_snow",
+}
+
+local function freeze(user, pos, radius)
+
+ -- if the function is used by a node: user is a string
+ -- if it's called by an item, user is a PlayerRef
+
+ if type(user) == 'string' then
+ if minetest.is_protected(pos, user) then
+ minetest.record_protection_violation(pos, user)
+ return
+ end
+ else
+ if minetest.is_protected(pos, user:get_player_name()) then
+ minetest.record_protection_violation(pos, user:get_player_name())
+ return
+ end
+ end
+
+ local loc = {}
+ local wrk = false
+ -- R = 2, d = 3
+ -- R = 10, d = 5
+ local depth = math.floor(0.25*radius+2.5)
+
+ for y = 0,depth,1 do
+ for x = -radius,radius,1 do
+ for z = -radius,radius,1 do
+ loc = {x = pos.x - x, y = pos.y - y, z = pos.z - z}
+ if freezing_rules[minetest.get_node(loc).name] then
+ wrk = true
+ minetest.swap_node(loc, {name = freezing_rules[minetest.get_node(loc).name]})
+ end
+ if math.random(1,5) == 5 then
+ if minetest.get_node({x = loc.x, y = loc.y+1, z = loc.z}).name == "air"
+ and minetest.get_node(loc).name ~= "air"
+ and minetest.get_node(loc).name ~= "stairs:slab_snowblock" then
+ minetest.set_node({x = loc.x, y = loc.y+1, z = loc.z}, {name = "stairs:slab_snowblock"})
+ end
+ end
+ end
+ end
+ end
+
+ if wrk then
+ minetest.sound_play("default_cool_lava", {gain = 1, pos = pos})
+ end
+
+ return true
+
+end
+
+minetest.register_craftitem(":technic:lox", {
+ description = S("Liquid Oxygen"),
+ tiles = {"technic_lox.png"},
+ inventory_image = "technic_lox.png",
+ wield_image = "technic_lox.png",
+ paramtype = "light",
+ is_ground_content = false,
+ walkable = false,
+ liquids_pointable = true,
+ selection_box = {
+ type = "fixed",
+ fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25}
+ },
+ groups = {vessel = 1, dig_immediate = 3, attached_node = 1},
+ sounds = default.node_sound_defaults(),
+ on_use = function(itemstack, user, pointed_thing)
+ if pointed_thing.type ~= "node" then
+ return itemstack
+ end
+
+ itemstack:take_item()
+
+ freeze(user, pointed_thing.under, 2)
+
+ local uinv = user:get_inventory()
+ if uinv:room_for_item("main", "vessels:steel_bottle 1") then
+ uinv:add_item("main", "vessels:steel_bottle 1")
+ else
+ minetest.item_drop(ItemStack("vessels:steel_bottle 1"), user, user:getpos())
+ end
+
+ user:set_hp(user:get_hp() - 1)
+
+ return itemstack
+ end
+})
+
+minetest.register_node(":technic:fbomb", {
+ description = S("F-Bomb"),
+ tiles = {"technic_fbomb.png"},
+ paramtype = "light",
+ is_ground_content = false,
+ walkable = false,
+ selection_box = {
+ type = "fixed",
+ fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25}
+ },
+ groups = {dig_immediate = 2, falling_node = 1},
+ sounds = default.node_sound_defaults(),
+ on_punch = function(pos, node, player, pointed_thing)
+ minetest.remove_node(pos)
+ minetest.place_node(pos, {name="technic:fbombact"})
+ local nm = minetest.get_meta(pos)
+ nm:set_string("player", player:get_player_name())
+ end
+})
+
+minetest.register_node(":technic:fbombact", {
+ description = S("F-Bomb Active"),
+ tiles = {"technic_fbombact.png"},
+ paramtype = "light",
+ is_ground_content = false,
+ walkable = false,
+ light_source = 3,
+ selection_box = {
+ type = "fixed",
+ fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25}
+ },
+ groups = {falling_node = 1, cracky = 1, not_in_creative_inventory = 1},
+ sounds = default.node_sound_defaults(),
+ on_construct = function(pos)
+ local nm = minetest.get_meta(pos)
+ local id = minetest.add_particlespawner({
+ amount = 30,
+ time = 0,
+ minpos = pos,
+ maxpos = pos,
+ minvel = {x=-2, y=0, z=-2},
+ maxvel = {x=2, y=0, z=2},
+ minacc = {x=0, y=0, z=0},
+ maxacc = {x=0.5, y=0, z=0.5},
+ minexptime = 1,
+ maxexptime = 5,
+ minsize = 1,
+ maxsize = 4,
+ collisiondetection = false,
+ vertical = false,
+ texture = "technic_snowflake.png",
+ glow = 2
+ })
+ nm:set_int("id", id)
+ local tm = minetest.get_node_timer(pos)
+ tm:start(5)
+ end,
+ on_timer = function(pos, elapsed)
+ local nm = minetest.get_meta(pos)
+ local pn = nm:get_string("player")
+ freeze(pn, pos, 10)
+ minetest.remove_node(pos)
+ return false
+ end,
+ on_destruct = function(pos)
+ local nm = minetest.get_meta(pos)
+ if (nm:get_int("id")) then
+ minetest.delete_particlespawner(nm:get_int("id"))
+ end
+ end,
+ drop = "technic:fbomb"
+
+})
+
+minetest.register_craft({
+ output = "technic:fbomb 3",
+ recipe = {
+ { "technic:lox", "tnt:tnt", "technic:lox"},
+ { "tnt:tnt", "technic:lox", "tnt:tnt"},
+ { "technic:lox", "tnt:tnt", "technic:lox"}
+ },
+ })
+
+-- since there will be a significant surplus of snow slabs, a recipe for recycling is in order
+minetest.register_craft({
+ output = "default:snowblock",
+ type = "shapeless",
+ recipe = { "stairs:slab_snowblock", "stairs:slab_snowblock" },
+ }) \ No newline at end of file
diff --git a/extranodes/textures/mesecons_switch_locked_frame.png b/extranodes/textures/mesecons_switch_locked_frame.png
new file mode 100644
index 0000000..239f97e
--- /dev/null
+++ b/extranodes/textures/mesecons_switch_locked_frame.png
Binary files differ
diff --git a/extranodes/textures/pipeworks_conductor_one_way_tube_input_off.png b/extranodes/textures/pipeworks_conductor_one_way_tube_input_off.png
new file mode 100644
index 0000000..8f77487
--- /dev/null
+++ b/extranodes/textures/pipeworks_conductor_one_way_tube_input_off.png
Binary files differ
diff --git a/extranodes/textures/pipeworks_conductor_one_way_tube_input_on.png b/extranodes/textures/pipeworks_conductor_one_way_tube_input_on.png
new file mode 100644
index 0000000..85b20aa
--- /dev/null
+++ b/extranodes/textures/pipeworks_conductor_one_way_tube_input_on.png
Binary files differ
diff --git a/extranodes/textures/pipeworks_conductor_one_way_tube_output_off.png b/extranodes/textures/pipeworks_conductor_one_way_tube_output_off.png
new file mode 100644
index 0000000..8f77487
--- /dev/null
+++ b/extranodes/textures/pipeworks_conductor_one_way_tube_output_off.png
Binary files differ
diff --git a/extranodes/textures/pipeworks_conductor_one_way_tube_output_on.png b/extranodes/textures/pipeworks_conductor_one_way_tube_output_on.png
new file mode 100644
index 0000000..85b20aa
--- /dev/null
+++ b/extranodes/textures/pipeworks_conductor_one_way_tube_output_on.png
Binary files differ
diff --git a/extranodes/textures/pipeworks_conductor_one_way_tube_side_off.png b/extranodes/textures/pipeworks_conductor_one_way_tube_side_off.png
new file mode 100644
index 0000000..beab600
--- /dev/null
+++ b/extranodes/textures/pipeworks_conductor_one_way_tube_side_off.png
Binary files differ
diff --git a/extranodes/textures/pipeworks_conductor_one_way_tube_side_on.png b/extranodes/textures/pipeworks_conductor_one_way_tube_side_on.png
new file mode 100644
index 0000000..c0150e2
--- /dev/null
+++ b/extranodes/textures/pipeworks_conductor_one_way_tube_side_on.png
Binary files differ
diff --git a/extranodes/textures/pipeworks_conductor_one_way_tube_top_off.png b/extranodes/textures/pipeworks_conductor_one_way_tube_top_off.png
new file mode 100644
index 0000000..36c7684
--- /dev/null
+++ b/extranodes/textures/pipeworks_conductor_one_way_tube_top_off.png
Binary files differ
diff --git a/extranodes/textures/pipeworks_conductor_one_way_tube_top_on.png b/extranodes/textures/pipeworks_conductor_one_way_tube_top_on.png
new file mode 100644
index 0000000..080c09c
--- /dev/null
+++ b/extranodes/textures/pipeworks_conductor_one_way_tube_top_on.png
Binary files differ
diff --git a/extranodes/textures/pipeworks_straight_tube_input.png b/extranodes/textures/pipeworks_straight_tube_input.png
new file mode 100644
index 0000000..8490858
--- /dev/null
+++ b/extranodes/textures/pipeworks_straight_tube_input.png
Binary files differ
diff --git a/extranodes/textures/pipeworks_straight_tube_output.png b/extranodes/textures/pipeworks_straight_tube_output.png
new file mode 100644
index 0000000..8490858
--- /dev/null
+++ b/extranodes/textures/pipeworks_straight_tube_output.png
Binary files differ
diff --git a/extranodes/textures/pipeworks_straight_tube_side.png b/extranodes/textures/pipeworks_straight_tube_side.png
new file mode 100644
index 0000000..4e03b3d
--- /dev/null
+++ b/extranodes/textures/pipeworks_straight_tube_side.png
Binary files differ
diff --git a/extranodes/textures/pipeworks_tube_valve_side_off.png b/extranodes/textures/pipeworks_tube_valve_side_off.png
new file mode 100644
index 0000000..56186e6
--- /dev/null
+++ b/extranodes/textures/pipeworks_tube_valve_side_off.png
Binary files differ
diff --git a/extranodes/textures/pipeworks_tube_valve_side_on.png b/extranodes/textures/pipeworks_tube_valve_side_on.png
new file mode 100644
index 0000000..f25ad9c
--- /dev/null
+++ b/extranodes/textures/pipeworks_tube_valve_side_on.png
Binary files differ
diff --git a/extranodes/textures/technic_aspirin_bottle.png b/extranodes/textures/technic_aspirin_bottle.png
new file mode 100644
index 0000000..64c2b03
--- /dev/null
+++ b/extranodes/textures/technic_aspirin_bottle.png
Binary files differ
diff --git a/extranodes/textures/technic_aspirin_pill.png b/extranodes/textures/technic_aspirin_pill.png
new file mode 100644
index 0000000..f7fccb8
--- /dev/null
+++ b/extranodes/textures/technic_aspirin_pill.png
Binary files differ
diff --git a/extranodes/textures/technic_cottonseed_oil.png b/extranodes/textures/technic_cottonseed_oil.png
new file mode 100644
index 0000000..be4550e
--- /dev/null
+++ b/extranodes/textures/technic_cottonseed_oil.png
Binary files differ
diff --git a/extranodes/textures/technic_fbomb.png b/extranodes/textures/technic_fbomb.png
new file mode 100644
index 0000000..edae1a1
--- /dev/null
+++ b/extranodes/textures/technic_fbomb.png
Binary files differ
diff --git a/extranodes/textures/technic_fbombact.png b/extranodes/textures/technic_fbombact.png
new file mode 100644
index 0000000..061f23f
--- /dev/null
+++ b/extranodes/textures/technic_fbombact.png
Binary files differ
diff --git a/extranodes/textures/technic_lox.png b/extranodes/textures/technic_lox.png
new file mode 100644
index 0000000..341cba3
--- /dev/null
+++ b/extranodes/textures/technic_lox.png
Binary files differ
diff --git a/extranodes/textures/technic_snowflake.png b/extranodes/textures/technic_snowflake.png
new file mode 100644
index 0000000..1e039af
--- /dev/null
+++ b/extranodes/textures/technic_snowflake.png
Binary files differ
diff --git a/extranodes/trampoline.lua b/extranodes/trampoline.lua
new file mode 100644
index 0000000..d36e356
--- /dev/null
+++ b/extranodes/trampoline.lua
@@ -0,0 +1,94 @@
+-- bouncy-bouncy
+-- this adds two useful kinds of nodes. Two fall damage dampeners (50% and 100%)
+-- and a trampoline. Unlike on the mushroom spores from ethereal, players can
+-- freely jump on the dampeners.
+-- The latex foam adds use to sulphur, and may be employed for something else later.
+
+local S = rawget(_G, "intllib") and intllib.Getter() or function(s) return s end
+
+
+minetest.register_craftitem(":technic:latex_foam", {
+ description = S("Latex Foam"),
+ inventory_image = "technic_latex_foam.png",
+})
+
+minetest.register_node(":technic:fall_dampener_50", {
+ description = S("Fall Dampener 50%"),
+ drawtype = "nodebox",
+ node_box = {
+ type = "fixed",
+ fixed = {-0.5,-0.5,-0.5,0.5,0,0.5}
+ },
+ collision_box = {
+ type = "fixed",
+ fixed = {-0.5,-0.5,-0.5,0.5,0,0.5}
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {-0.5,-0.5,-0.5,0.5,0,0.5}
+ },
+ tiles = { "technic_fall_dampener_top.png",
+ "technic_fall_dampener_bottom.png",
+ "technic_fall_dampener_side.png",
+ "technic_fall_dampener_side.png",
+ "technic_fall_dampener_side.png",
+ "technic_fall_dampener_side.png"},
+ groups = {crumbly = 3, fall_damage_add_percent = -50},
+ sounds = default.node_sound_dirt_defaults(),
+})
+
+minetest.register_node(":technic:fall_dampener_100", {
+ description = S("Fall Dampener 100%"),
+ drawtype = "normal",
+ tiles = {"technic_fall_dampener_top.png",
+ "technic_fall_dampener_bottom.png",
+ "technic_fall_dampener_side.png",
+ "technic_fall_dampener_side.png",
+ "technic_fall_dampener_side.png",
+ "technic_fall_dampener_side.png"},
+ groups = {crumbly = 3, fall_damage_add_percent = -100},
+ sounds = default.node_sound_dirt_defaults(),
+})
+
+minetest.register_node(":technic:trampoline", {
+ description = S("Trampoline"),
+ drawtype = "normal",
+ tiles = {"technic_trampoline_top.png",
+ "technic_fall_dampener_bottom.png", -- cost cuts
+ "technic_trampoline_side.png",
+ "technic_trampoline_side.png",
+ "technic_trampoline_side.png",
+ "technic_trampoline_side.png"},
+ groups = {crumbly = 3, bouncy = 100, fall_damage_add_percent = -100},
+ sounds = {footstep = {name = "trampoline_boing", gain = 1.0}}
+})
+
+
+minetest.register_craft({
+ output = "technic:fall_dampener_50",
+ recipe = {
+ { "", "", ""},
+ { "technic:raw_latex", "technic:raw_latex", "technic:raw_latex"},
+ { "technic:latex_foam", "technic:latex_foam", "technic:latex_foam"},
+ }
+})
+
+minetest.register_craft({
+ output = "technic:fall_dampener_100",
+ recipe = {
+ { "technic:raw_latex", "technic:raw_latex", "technic:raw_latex"},
+ { "technic:latex_foam", "technic:latex_foam", "technic:latex_foam"},
+ { "technic:latex_foam", "technic:latex_foam", "technic:latex_foam"},
+ }
+})
+
+minetest.register_craft({
+ output = "technic:trampoline",
+ recipe = {
+ { "dye:green", "dye:green", "dye:green"},
+ { "technic:rubber", "technic:rubber", "technic:rubber"},
+ { "technic:rubber", "technic:rubber", "technic:rubber"},
+ }
+})
+
+