Merge branch 'master' into nuce_reactor_digiline_remote

This commit is contained in:
DS 2017-04-24 18:51:37 +02:00 committed by GitHub
commit 042f860100
42 changed files with 1153 additions and 217 deletions

View File

@ -94,9 +94,9 @@ minetest.register_node(":technic:blast_resistant_concrete", {
local box_platform = {-0.5, 0.3, -0.5, 0.5, 0.5, 0.5}
local box_post = {-0.15, -0.5, -0.15, 0.15, 0.5, 0.15}
local box_front = {-0.1, -0.3, 0, 0.1, 0.3, -0.5}
local box_front = {-0.1, -0.3, -0.5, 0.1, 0.3, 0}
local box_back = {-0.1, -0.3, 0, 0.1, 0.3, 0.5}
local box_left = {0, -0.3, -0.1, -0.5, 0.3, 0.1}
local box_left = {-0.5, -0.3, -0.1, 0, 0.3, 0.1}
local box_right = {0, -0.3, -0.1, 0.5, 0.3, 0.1}
minetest.register_node(":technic:concrete_post_platform", {

View File

@ -961,7 +961,8 @@ The primary purpose of battery boxes is to temporarily store electrical
energy to let an electrical network cope with mismatched supply and
demand. They have a secondary purpose of charging and discharging
powered tools. They are thus a mixture of electrical infrastructure,
powered machine, and generator.
powered machine, and generator. Battery boxes connect to cables only
from the bottom.
MV and HV battery boxes have upgrade slots. Energy upgrades increase
the capacity of a battery box, each by 10% of the un-upgraded capacity.
@ -976,10 +977,10 @@ be worth building a battery box of higher tier before one has other
infrastructure of that tier, just to get access to faster charging.
MV and HV battery boxes work with pneumatic tubes. An item can be input
to the charging slot through the bottom of the battery box, or to the
discharging slot through the top. Items are not accepted through the
front, back, or sides. With a tube upgrade, fully charged/discharged
tools (as appropriate for their slot) will be ejected through a side.
to the charging slot through the sides or back of the battery box, or
to the discharging slot through the top. With a tube upgrade, fully
charged/discharged tools (as appropriate for their slot) will be ejected
through a side.
### processing machines ###
@ -1243,12 +1244,12 @@ with light sources such as meselamps.
### hydro generator ###
The hydro generator is an LV power generator that generates a small amount
of power from the natural motion of water. To operate, the generator must
be horizontally adjacent to water. It doesn't matter whether the water
consists of source blocks or flowing blocks. Having water adjacent on
more than one side, up to the full four, increases the generator's output.
The water itself is unaffected by the generator.
The hydro generator is an LV power generator that generates a respectable
amount of power from the natural motion of water. To operate, the
generator must be horizontally adjacent to flowing water. The power
produced is dependent on how much flow there is across any or all four
sides, the most flow of course coming from water that's flowing straight
down.
### geothermal generator ###

View File

@ -1,6 +1,23 @@
-- check if we have the necessary dependencies to allow actually using these materials in the crafts
local mesecons_materials = minetest.get_modpath("mesecons_materials")
-- Remove some recipes
-- Bronze
minetest.clear_craft({
type = "shapeless",
output = "default:bronze_ingot"
})
-- Accelerator tube
minetest.clear_craft({
output = "pipeworks:accelerator_tube_1",
})
-- Teleport tube
minetest.clear_craft({
output = "pipeworks:teleport_tube_1",
})
-- tubes crafting recipes
minetest.register_craft({
@ -163,33 +180,6 @@ minetest.register_craft({
},
})
-- Remove some recipes
-- Bronze
minetest.register_craft({
type = "shapeless",
output = "default:bronze_ingot 0",
recipe = {"default:copper_ingot", "default:steel_ingot"}
})
-- Accelerator tube
minetest.register_craft({
output = "pipeworks:accelerator_tube_1 0",
recipe = {
{ "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" },
{ "default:mese_crystal_fragment", "default:steel_ingot", "default:mese_crystal_fragment" },
{ "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }
},
})
-- Teleport tube
minetest.register_craft({
output = "pipeworks:teleport_tube_1 0",
recipe = {
{ "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" },
{ "default:desert_stone", "default:mese", "default:desert_stone" },
{ "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }
},
})
minetest.register_craft({
output = "default:dirt 2",

View File

@ -6,10 +6,14 @@
-- How expensive is the generator?
-- Leaves room for upgrades lowering the power drain?
local digilines_path = minetest.get_modpath("digilines")
local forcefield_power_drain = 10
local S = technic.getter
local cable_entry = "^technic_cable_connection_overlay.png"
minetest.register_craft({
output = "technic:forcefield_emitter_off",
recipe = {
@ -90,7 +94,14 @@ local function update_forcefield(pos, meta, active, first)
end
local function set_forcefield_formspec(meta)
local formspec = "size[5,2.25]"..
local formspec
if digilines_path then
formspec = "size[5,3.25]"..
"field[0.3,3;5,1;channel;Digiline Channel;"..meta:get_string("channel").."]"
else
formspec = "size[5,2.25]"
end
formspec = formspec..
"field[0.3,0.5;2,1;range;"..S("Range")..";"..meta:get_int("range").."]"
-- The names for these toggle buttons are explicit about which
-- state they'll switch to, so that multiple presses (arising
@ -130,9 +141,10 @@ local forcefield_receive_fields = function(pos, formname, fields, sender)
update_forcefield(pos, meta, false)
end
if range then meta:set_int("range", range) end
if fields.shape0 then meta:set_int("shape", 0) end
if fields.shape1 then meta:set_int("shape", 1) end
if fields.enable then meta:set_int("enabled", 1) end
if fields.channel then meta:set_string("channel", fields.channel) end
if fields.shape0 then meta:set_int("shape", 0) end
if fields.shape1 then meta:set_int("shape", 1) end
if fields.enable then meta:set_int("enabled", 1) end
if fields.disable then meta:set_int("enabled", 0) end
if fields.mesecon_mode_0 then meta:set_int("mesecon_mode", 0) end
if fields.mesecon_mode_1 then meta:set_int("mesecon_mode", 1) end
@ -150,6 +162,60 @@ local mesecons = {
}
}
local digiline_def = {
receptor = {action = function() end},
effector = {
action = function(pos, node, channel, msg)
local meta = minetest.get_meta(pos)
if channel ~= meta:get_string("channel") then
return
end
msg = msg:lower()
if msg == "get" then
digilines.receptor_send(pos, digilines.rules.default, channel, {
enabled = meta:get_int("enabled"),
range = meta:get_int("range"),
shape = meta:get_int("shape")
})
return
elseif msg == "off" then
meta:set_int("enabled", 0)
elseif msg == "on" then
meta:set_int("enabled", 1)
elseif msg == "toggle" then
local onn = meta:get_int("enabled")
onn = 1-onn -- Mirror onn with pivot 0.5, so switch between 1 and 0.
meta:set_int("enabled", onn)
elseif msg:sub(1, 5) == "range" then
local range = tonumber(msg:sub(7))
if not range then
return
end
range = math.max(range, 5)
range = math.min(range, 20)
update_forcefield(pos, meta, false)
meta:set_int("range", range)
elseif msg:sub(1, 5) == "shape" then
local shape = msg:sub(7):lower()
if shape == "sphere" then
shape = 0
elseif shape == "cube" then
shape = 1
end
shape = tonumber(shape)
if not shape then
return
end
update_forcefield(pos, meta, false)
meta:set_int("shape", shape)
else
return
end
set_forcefield_formspec(meta)
end
},
}
local function run(pos, node)
local meta = minetest.get_meta(pos)
local eu_input = meta:get_int("HV_EU_input")
@ -194,7 +260,14 @@ end
minetest.register_node("technic:forcefield_emitter_off", {
description = S("%s Forcefield Emitter"):format("HV"),
tiles = {"technic_forcefield_emitter_off.png"},
tiles = {
"technic_forcefield_emitter_off.png",
"technic_machine_bottom.png"..cable_entry,
"technic_forcefield_emitter_off.png",
"technic_forcefield_emitter_off.png",
"technic_forcefield_emitter_off.png",
"technic_forcefield_emitter_off.png"
},
groups = {cracky = 1, technic_machine = 1, technic_hv = 1},
on_receive_fields = forcefield_receive_fields,
on_construct = function(pos)
@ -205,16 +278,27 @@ minetest.register_node("technic:forcefield_emitter_off", {
meta:set_int("enabled", 0)
meta:set_int("mesecon_mode", 0)
meta:set_int("mesecon_effect", 0)
if digilines_path then
meta:set_string("channel", "forcefield"..minetest.pos_to_string(pos))
end
meta:set_string("infotext", S("%s Forcefield Emitter"):format("HV"))
set_forcefield_formspec(meta)
end,
mesecons = mesecons,
digiline = digiline_def,
technic_run = run,
})
minetest.register_node("technic:forcefield_emitter_on", {
description = S("%s Forcefield Emitter"):format("HV"),
tiles = {"technic_forcefield_emitter_on.png"},
tiles = {
"technic_forcefield_emitter_on.png",
"technic_machine_bottom.png"..cable_entry,
"technic_forcefield_emitter_on.png",
"technic_forcefield_emitter_on.png",
"technic_forcefield_emitter_on.png",
"technic_forcefield_emitter_on.png"
},
groups = {cracky = 1, technic_machine = 1, technic_hv = 1,
not_in_creative_inventory=1},
drop = "technic:forcefield_emitter_off",
@ -224,6 +308,7 @@ minetest.register_node("technic:forcefield_emitter_on", {
update_forcefield(pos, meta, false)
end,
mesecons = mesecons,
digiline = digiline_def,
technic_run = run,
technic_on_disable = function (pos, node)
local meta = minetest.get_meta(pos)

View File

@ -18,8 +18,8 @@ local digiline_remote_path = minetest.get_modpath("digiline_remote")
local S = technic.getter
local reactor_desc = S("@1 Nuclear Reactor Core", S("HV")),
local reactor_desc = S("@1 Nuclear Reactor Core", S("HV"))
local cable_entry = "^technic_cable_connection_overlay.png"
-- FIXME: Recipe should make more sense like a rod recepticle, steam chamber, HV generator?
minetest.register_craft({
@ -44,26 +44,6 @@ if digiline_remote_path then
"field[1,4;4,1;remote_channel;Digiline Remote Channel;${remote_channel}]"
end
-- "Boxy sphere"
local node_box = {
{-0.353, -0.353, -0.353, 0.353, 0.353, 0.353}, -- Box
{-0.495, -0.064, -0.064, 0.495, 0.064, 0.064}, -- Circle +-x
{-0.483, -0.128, -0.128, 0.483, 0.128, 0.128},
{-0.462, -0.191, -0.191, 0.462, 0.191, 0.191},
{-0.433, -0.249, -0.249, 0.433, 0.249, 0.249},
{-0.397, -0.303, -0.303, 0.397, 0.303, 0.303},
{-0.305, -0.396, -0.305, 0.305, 0.396, 0.305}, -- Circle +-y
{-0.250, -0.432, -0.250, 0.250, 0.432, 0.250},
{-0.191, -0.461, -0.191, 0.191, 0.461, 0.191},
{-0.130, -0.482, -0.130, 0.130, 0.482, 0.130},
{-0.066, -0.495, -0.066, 0.066, 0.495, 0.066},
{-0.064, -0.064, -0.495, 0.064, 0.064, 0.495}, -- Circle +-z
{-0.128, -0.128, -0.483, 0.128, 0.128, 0.483},
{-0.191, -0.191, -0.462, 0.191, 0.191, 0.462},
{-0.249, -0.249, -0.433, 0.249, 0.249, 0.433},
{-0.303, -0.303, -0.397, 0.303, 0.303, 0.397},
}
local SS_OFF = 0
local SS_DANGER = 1
local SS_CLEAR = 2
@ -367,17 +347,18 @@ end
minetest.register_node("technic:hv_nuclear_reactor_core", {
description = reactor_desc,
tiles = {"technic_hv_nuclear_reactor_core.png"},
groups = {cracky=1, technic_machine=1, technic_hv=1, digiline_remote_receive = 1},
tiles = {
"technic_hv_nuclear_reactor_core.png",
"technic_hv_nuclear_reactor_core.png"..cable_entry
},
drawtype = "mesh",
mesh = "technic_reactor.obj",
groups = {cracky = 1, technic_machine = 1, technic_hv = 1, digiline_remote_receive = 1},
legacy_facedir_simple = true,
sounds = default.node_sound_wood_defaults(),
drawtype = "nodebox",
paramtype = "light",
paramtype2 = "facedir",
stack_max = 1,
node_box = {
type = "fixed",
fixed = node_box
},
on_receive_fields = nuclear_reactor_receive_fields,
on_construct = function(pos)
local meta = minetest.get_meta(pos)
@ -400,20 +381,21 @@ minetest.register_node("technic:hv_nuclear_reactor_core", {
})
minetest.register_node("technic:hv_nuclear_reactor_core_active", {
tiles = {"technic_hv_nuclear_reactor_core.png"},
groups = {cracky=1, technic_machine=1, technic_hv=1, radioactive=4,
not_in_creative_inventory=1, digiline_remote_receive = 1},
tiles = {
"technic_hv_nuclear_reactor_core.png",
"technic_hv_nuclear_reactor_core.png"..cable_entry
},
drawtype = "mesh",
mesh = "technic_reactor.obj",
groups = {cracky = 1, technic_machine = 1, technic_hv = 1, radioactive = 4,
not_in_creative_inventory = 1, digiline_remote_receive = 1},
legacy_facedir_simple = true,
sounds = default.node_sound_wood_defaults(),
drop = "technic:hv_nuclear_reactor_core",
drawtype = "nodebox",
light_source = 14,
paramtype = "light",
node_box = {
type = "fixed",
fixed = node_box
},
_on_digiline_remote_receive = digiline_remote_def,
paramtype2 = "facedir",
can_dig = technic.machine_can_dig,
after_dig_node = melt_down_reactor,
on_destruct = function(pos) siren_set_state(pos, SS_OFF) end,

View File

@ -1,6 +1,9 @@
local S = technic.getter
local tube_entry = "^pipeworks_tube_connection_metallic.png"
local cable_entry = "^technic_cable_connection_overlay.png"
minetest.register_craft({
recipe = {
{"technic:carbon_plate", "pipeworks:filter", "technic:composite_plate"},
@ -207,12 +210,14 @@ end
minetest.register_node("technic:quarry", {
description = S("%s Quarry"):format("HV"),
tiles = {"technic_carbon_steel_block.png", "technic_carbon_steel_block.png",
"technic_carbon_steel_block.png", "technic_carbon_steel_block.png",
"technic_carbon_steel_block.png^default_tool_mesepick.png", "technic_carbon_steel_block.png"},
inventory_image = minetest.inventorycube("technic_carbon_steel_block.png",
"technic_carbon_steel_block.png^default_tool_mesepick.png",
"technic_carbon_steel_block.png"),
tiles = {
"technic_carbon_steel_block.png"..tube_entry,
"technic_carbon_steel_block.png"..cable_entry,
"technic_carbon_steel_block.png"..cable_entry,
"technic_carbon_steel_block.png"..cable_entry,
"technic_carbon_steel_block.png^default_tool_mesepick.png",
"technic_carbon_steel_block.png"..cable_entry
},
paramtype2 = "facedir",
groups = {cracky=2, tubedevice=1, technic_machine=1, technic_hv=1},
connect_sides = {"bottom", "front", "left", "right"},

View File

@ -4,6 +4,8 @@
local S = technic.getter
local cable_entry = "^technic_cable_connection_overlay.png"
minetest.register_alias("water_mill", "technic:water_mill")
minetest.register_craft({
@ -50,9 +52,7 @@ local run = function(pos, node)
eu_supply = math.min(35 * water_flow, max_output)
production_level = math.floor(100 * eu_supply / max_output)
if production_level > 0 then
meta:set_int("LV_EU_supply", eu_supply)
end
meta:set_int("LV_EU_supply", eu_supply)
meta:set_string("infotext",
S("Hydro %s Generator"):format("LV").." ("..production_level.."%)")
@ -70,9 +70,14 @@ end
minetest.register_node("technic:water_mill", {
description = S("Hydro %s Generator"):format("LV"),
tiles = {"technic_water_mill_top.png", "technic_machine_bottom.png",
"technic_water_mill_side.png", "technic_water_mill_side.png",
"technic_water_mill_side.png", "technic_water_mill_side.png"},
tiles = {
"technic_water_mill_top.png",
"technic_machine_bottom.png"..cable_entry,
"technic_water_mill_side.png",
"technic_water_mill_side.png",
"technic_water_mill_side.png",
"technic_water_mill_side.png"
},
paramtype2 = "facedir",
groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2,
technic_machine=1, technic_lv=1},

View File

@ -5,6 +5,8 @@ minetest.register_alias("tool_workshop", "technic:tool_workshop")
local S = technic.getter
local tube_entry = "^pipeworks_tube_connection_wooden.png"
minetest.register_craft({
output = 'technic:tool_workshop',
recipe = {
@ -83,8 +85,14 @@ end
minetest.register_node("technic:tool_workshop", {
description = S("%s Tool Workshop"):format("MV"),
paramtype2 = "facedir",
tiles = {"technic_workshop_top.png", "technic_machine_bottom.png", "technic_workshop_side.png",
"technic_workshop_side.png", "technic_workshop_side.png", "technic_workshop_side.png"},
tiles = {
"technic_workshop_top.png"..tube_entry,
"technic_machine_bottom.png"..tube_entry,
"technic_workshop_side.png"..tube_entry,
"technic_workshop_side.png"..tube_entry,
"technic_workshop_side.png"..tube_entry,
"technic_workshop_side.png"
},
groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2,
technic_machine=1, technic_mv=1, tubedevice=1, tubedevice_receiver=1},
connect_sides = {"bottom", "back", "left", "right"},

View File

@ -2,6 +2,7 @@
local S = technic.getter
local function deploy_node(inv, slot_name, pos, node, machine_node)
if node.param2 > 3 then return end
if node.name ~= "air" then
if node.name == "ignore" or
node.name == "default:lava_source" or
@ -162,6 +163,7 @@ local function make_constructor(mark, length)
allow_metadata_inventory_put = technic.machine_inventory_put,
allow_metadata_inventory_take = technic.machine_inventory_take,
allow_metadata_inventory_move = technic.machine_inventory_move,
on_rotate = screwdriver.rotate_simple
})
minetest.register_node("technic:constructor_mk"..mark.."_on", {
@ -180,6 +182,7 @@ local function make_constructor(mark, length)
allow_metadata_inventory_put = technic.machine_inventory_put,
allow_metadata_inventory_take = technic.machine_inventory_take,
allow_metadata_inventory_move = technic.machine_inventory_move,
on_rotate = false
})
end

View File

@ -1,6 +1,10 @@
local S = technic.getter
local fs_helpers = pipeworks.fs_helpers
local tube_entry = "^pipeworks_tube_connection_metallic.png"
local function inject_items (pos)
local meta=minetest.get_meta(pos)
local inv = meta:get_inventory()
@ -51,37 +55,59 @@ minetest.register_craft({
local function set_injector_formspec(meta)
local is_stack = meta:get_string("mode") == "whole stacks"
meta:set_string("formspec",
"invsize[8,9;]"..
"item_image[0,0;1,1;technic:injector]"..
"label[1,0;"..S("Self-Contained Injector").."]"..
(is_stack and
"button[0,1;2,1;mode_item;"..S("Stackwise").."]" or
"button[0,1;2,1;mode_stack;"..S("Itemwise").."]")..
"list[current_name;main;0,2;8,2;]"..
"list[current_player;main;0,5;8,4;]"..
"listring[]")
"invsize[8,9;]"..
"item_image[0,0;1,1;technic:injector]"..
"label[1,0;"..S("Self-Contained Injector").."]"..
(is_stack and
"button[0,1;2,1;mode_item;"..S("Stackwise").."]" or
"button[0,1;2,1;mode_stack;"..S("Itemwise").."]")..
"list[current_name;main;0,2;8,2;]"..
"list[current_player;main;0,5;8,4;]"..
"listring[]"..
fs_helpers.cycling_button(
meta,
pipeworks.button_base,
"splitstacks",
{
pipeworks.button_off,
pipeworks.button_on
}
)..pipeworks.button_label
)
end
minetest.register_node("technic:injector", {
description = S("Self-Contained Injector"),
tiles = {"technic_injector_top.png", "technic_injector_bottom.png", "technic_injector_side.png",
"technic_injector_side.png", "technic_injector_side.png", "technic_injector_side.png"},
tiles = {
"technic_injector_top.png"..tube_entry,
"technic_injector_bottom.png",
"technic_injector_side.png"..tube_entry,
"technic_injector_side.png"..tube_entry,
"technic_injector_side.png"..tube_entry,
"technic_injector_side.png"
},
paramtype2 = "facedir",
groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2, tubedevice=1, tubedevice_receiver=1},
tube = {
can_insert = function(pos, node, stack, direction)
return minetest.get_meta(pos):get_inventory():room_for_item("main",stack)
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
if meta:get_int("splitstacks") == 1 then
stack = stack:peek_item(1)
end
return meta:get_inventory():room_for_item("main", stack)
end,
insert_object = function(pos, node, stack, direction)
return minetest.get_meta(pos):get_inventory():add_item("main",stack)
return minetest.get_meta(pos):get_inventory():add_item("main", stack)
end,
connect_sides = {left=1, right=1, front=1, back=1, top=1, bottom=1},
connect_sides = {left=1, right=1, back=1, top=1, bottom=1},
},
sounds = default.node_sound_wood_defaults(),
on_construct = function(pos)
local meta = minetest.get_meta(pos)
meta:set_string("infotext", S("Self-Contained Injector"))
local inv = meta:get_inventory()
inv:set_size("main", 8*4)
inv:set_size("main", 8*2)
meta:set_string("mode","single items")
set_injector_formspec(meta)
end,
@ -94,6 +120,12 @@ minetest.register_node("technic:injector", {
local meta = minetest.get_meta(pos)
if fields.mode_item then meta:set_string("mode", "single items") end
if fields.mode_stack then meta:set_string("mode", "whole stacks") end
if fields["fs_helpers_cycling:0:splitstacks"]
or fields["fs_helpers_cycling:1:splitstacks"] then
if not pipeworks.may_configure(pos, sender) then return end
fs_helpers.on_receive_fields(pos, fields)
end
set_injector_formspec(meta)
end,
allow_metadata_inventory_put = technic.machine_inventory_put,

View File

@ -4,6 +4,8 @@
local S = technic.getter
local cable_entry = "^technic_cable_connection_overlay.png"
minetest.register_craft({
output = "technic:power_monitor",
recipe = {
@ -17,10 +19,10 @@ minetest.register_node("technic:power_monitor",{
description = S("Power Monitor"),
tiles = {
"technic_power_monitor_sides.png",
"technic_power_monitor_bottom_back.png",
"technic_power_monitor_sides.png"..cable_entry,
"technic_power_monitor_sides.png",
"technic_power_monitor_sides.png",
"technic_power_monitor_bottom_back.png",
"technic_power_monitor_sides.png"..cable_entry,
"technic_power_monitor_front.png"
},
paramtype2 = "facedir",

View File

@ -2,6 +2,10 @@
local digilines_path = minetest.get_modpath("digilines")
local S = technic.getter
local tube_entry = "^pipeworks_tube_connection_metallic.png"
local cable_entry = "^technic_cable_connection_overlay.png"
local fs_helpers = pipeworks.fs_helpers
technic.register_power_tool("technic:battery", 10000)
technic.register_power_tool("technic:red_energy_crystal", 50000)
@ -31,34 +35,80 @@ minetest.register_tool("technic:battery", {
}
})
-- x+2 + (z+2)*2
local dirtab = {
[4] = 2,
[5] = 3,
[7] = 1,
[8] = 0
}
local tube = {
insert_object = function(pos, node, stack, direction)
if direction.y == 0 then
print(minetest.pos_to_string(direction), dirtab[direction.x+2+(direction.z+2)*2], node.param2)
if direction.y == 1
or (direction.y == 0 and dirtab[direction.x+2+(direction.z+2)*2] == node.param2) then
return stack
end
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
if direction.y > 0 then
if direction.y == 0 then
return inv:add_item("src", stack)
else
return inv:add_item("dst", stack)
end
end,
can_insert = function(pos, node, stack, direction)
if direction.y == 0 then
print(minetest.pos_to_string(direction), dirtab[direction.x+2+(direction.z+2)*2], node.param2)
if direction.y == 1
or (direction.y == 0 and dirtab[direction.x+2+(direction.z+2)*2] == node.param2) then
return false
end
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
if direction.y > 0 then
if direction.y == 0 then
if meta:get_int("split_src_stacks") == 1 then
stack = stack:peek_item(1)
end
return inv:room_for_item("src", stack)
else
if meta:get_int("split_dst_stacks") == 1 then
stack = stack:peek_item(1)
end
return inv:room_for_item("dst", stack)
end
end,
connect_sides = {left=1, right=1, back=1, top=1, bottom=1},
connect_sides = {left=1, right=1, back=1, top=1},
}
local function add_on_off_buttons(meta, ltier, charge_percent)
local formspec = ""
if ltier == "mv" or ltier == "hv" then
formspec = "image[1,1;1,2;technic_power_meter_bg.png"
.."^[lowpart:"..charge_percent
..":technic_power_meter_fg.png]"..
fs_helpers.cycling_button(
meta,
"image_button[3,2.0;1,0.6",
"split_src_stacks",
{
pipeworks.button_off,
pipeworks.button_on
}
).."label[3.9,2.01;Allow splitting incoming 'charge' stacks from tubes]"..
fs_helpers.cycling_button(
meta,
"image_button[3,2.5;1,0.6",
"split_dst_stacks",
{
pipeworks.button_off,
pipeworks.button_on
}
).."label[3.9,2.51;Allow splitting incoming 'discharge' stacks]"
end
return formspec
end
function technic.register_battery_box(data)
local tier = data.tier
local ltier = string.lower(tier)
@ -78,6 +128,7 @@ function technic.register_battery_box(data)
"listring[current_player;main]"..
"listring[context;src]"..
"listring[current_player;main]"
if digilines_path then
formspec = formspec.."button[0.6,3.7;2,1;edit_channel;edit Channel]"
end
@ -94,7 +145,14 @@ function technic.register_battery_box(data)
end
local run = function(pos, node)
local below = minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z})
local meta = minetest.get_meta(pos)
if not technic.is_tier_cable(below.name, tier) then
meta:set_string("infotext", S("%s Battery Box Has No Network"):format(tier))
return
end
local eu_input = meta:get_int(tier.."_EU_input")
local current_charge = meta:get_int("internal_EU_charge")
@ -149,12 +207,7 @@ function technic.register_battery_box(data)
end
local charge_percent = math.floor(current_charge / max_charge * 100)
meta:set_string("formspec",
formspec..
"image[1,1;1,2;technic_power_meter_bg.png"
.."^[lowpart:"..charge_percent
..":technic_power_meter_fg.png]")
meta:set_string("formspec", formspec..add_on_off_buttons(meta, ltier, charge_percent))
local infotext = S("@1 Battery Box: @2/@3", tier,
technic.pretty_num(current_charge), technic.pretty_num(max_charge))
if eu_input == 0 then
@ -175,15 +228,26 @@ function technic.register_battery_box(data)
groups.tubedevice_receiver = 1
end
local top_tex = "technic_"..ltier.."_battery_box_top.png"..tube_entry
local front_tex = "technic_"..ltier.."_battery_box_front.png^technic_power_meter"..i..".png"
local side_tex = "technic_"..ltier.."_battery_box_side.png"..tube_entry
local bottom_tex = "technic_"..ltier.."_battery_box_bottom.png"..cable_entry
if ltier == "lv" then
top_tex = "technic_"..ltier.."_battery_box_top.png"
front_tex = "technic_"..ltier.."_battery_box_side.png^technic_power_meter"..i..".png"
side_tex = "technic_"..ltier.."_battery_box_side.png^technic_power_meter"..i..".png"
end
minetest.register_node("technic:"..ltier.."_battery_box"..i, {
description = S("%s Battery Box"):format(tier),
tiles = {
"technic_"..ltier.."_battery_box_top.png",
"technic_"..ltier.."_battery_box_bottom.png",
"technic_"..ltier.."_battery_box_side.png^technic_power_meter"..i..".png",
"technic_"..ltier.."_battery_box_side.png^technic_power_meter"..i..".png",
"technic_"..ltier.."_battery_box_side.png^technic_power_meter"..i..".png",
"technic_"..ltier.."_battery_box_side.png^technic_power_meter"..i..".png"},
top_tex,
bottom_tex,
side_tex,
side_tex,
side_tex,
front_tex},
groups = groups,
connect_sides = {"bottom"},
tube = data.tube and tube or nil,
@ -192,11 +256,17 @@ function technic.register_battery_box(data)
drop = "technic:"..ltier.."_battery_box0",
on_construct = function(pos)
local meta = minetest.get_meta(pos)
local EU_upgrade, tube_upgrade = 0, 0
if data.upgrade then
EU_upgrade, tube_upgrade = technic.handle_machine_upgrades(meta)
end
local max_charge = data.max_charge * (1 + EU_upgrade / 10)
local charge = meta:get_int("internal_EU_charge")
local cpercent = math.floor(charge / max_charge * 100)
local inv = meta:get_inventory()
local node = minetest.get_node(pos)
meta:set_string("infotext", S("%s Battery Box"):format(tier))
meta:set_string("formspec", formspec)
meta:set_string("formspec", formspec..add_on_off_buttons(meta, ltier, cpercent))
meta:set_string("channel", ltier.."_battery_box"..minetest.pos_to_string(pos))
meta:set_int(tier.."_EU_demand", 0)
meta:set_int(tier.."_EU_supply", 0)
@ -212,16 +282,32 @@ function technic.register_battery_box(data)
allow_metadata_inventory_take = technic.machine_inventory_take,
allow_metadata_inventory_move = technic.machine_inventory_move,
technic_run = run,
on_rotate = screwdriver.rotate_simple,
after_place_node = data.tube and pipeworks.after_place,
after_dig_node = technic.machine_after_dig_node,
on_receive_fields = function(pos, formname, fields, sender)
if not fields.edit_channel then
return
end
local meta = minetest.get_meta(pos)
minetest.show_formspec(sender:get_player_name(),
local nodename = minetest.get_node(pos).name
if fields.edit_channel then
minetest.show_formspec(sender:get_player_name(),
"technic:battery_box_edit_channel"..minetest.pos_to_string(pos),
"field[channel;Digiline Channel;"..meta:get_string("channel").."]")
elseif fields["fs_helpers_cycling:0:split_src_stacks"]
or fields["fs_helpers_cycling:0:split_dst_stacks"]
or fields["fs_helpers_cycling:1:split_src_stacks"]
or fields["fs_helpers_cycling:1:split_dst_stacks"] then
local meta = minetest.get_meta(pos)
if not pipeworks.may_configure(pos, sender) then return end
fs_helpers.on_receive_fields(pos, fields)
local EU_upgrade, tube_upgrade = 0, 0
if data.upgrade then
EU_upgrade, tube_upgrade = technic.handle_machine_upgrades(meta)
end
local max_charge = data.max_charge * (1 + EU_upgrade / 10)
local charge = meta:get_int("internal_EU_charge")
local cpercent = math.floor(charge / max_charge * 100)
meta:set_string("formspec", formspec..add_on_off_buttons(meta, ltier, cpercent))
end
end,
digiline = {
receptor = {action = function() end},
@ -277,7 +363,6 @@ minetest.register_on_player_receive_fields(
end
)
function technic.charge_tools(meta, batt_charge, charge_step)
local inv = meta:get_inventory()
if inv:is_empty("src") then

View File

@ -121,7 +121,8 @@ function technic.register_cable(tier, size)
local ltier = string.lower(tier)
cable_tier["technic:"..ltier.."_cable"] = tier
local groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2}
local groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2,
["technic_"..ltier.."_cable"] = 1}
local node_box = {
type = "connected",
@ -146,11 +147,97 @@ function technic.register_cable(tier, size)
sunlight_propagates = true,
drawtype = "nodebox",
node_box = node_box,
connects_to = {"technic:"..ltier.."_cable",
connects_to = {"group:technic_"..ltier.."_cable",
"group:technic_"..ltier, "group:technic_all_tiers"},
on_construct = clear_networks,
on_destruct = clear_networks,
})
local xyz = {
["-x"] = 1,
["-y"] = 2,
["-z"] = 3,
["x"] = 4,
["y"] = 5,
["z"] = 6,
}
local notconnects = {
[1] = "left",
[2] = "bottom",
[3] = "front",
[4] = "right",
[5] = "top",
[6] = "back",
}
local function s(p)
if p:find("-") then
return p:sub(2)
else
return "-"..p
end
end
for p, i in pairs(xyz) do
local def = {
description = S("%s Cable Plate"):format(tier),
tiles = {"technic_"..ltier.."_cable.png"},
groups = table.copy(groups),
sounds = default.node_sound_wood_defaults(),
drop = "technic:"..ltier.."_cable_plate_1",
paramtype = "light",
sunlight_propagates = true,
drawtype = "nodebox",
node_box = table.copy(node_box),
connects_to = {"group:technic_"..ltier.."_cable",
"group:technic_"..ltier, "group:technic_all_tiers"},
on_construct = clear_networks,
on_destruct = clear_networks,
}
def.node_box.fixed = {
{-size, -size, -size, size, size, size},
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}
}
def.node_box.fixed[1][xyz[p]] = 7/16 * (i-3.5)/math.abs(i-3.5)
def.node_box.fixed[2][xyz[s(p)]] = 3/8 * (i-3.5)/math.abs(i-3.5)
def.node_box["connect_"..notconnects[i]] = nil
if i == 1 then
def.on_place = function(itemstack, placer, pointed_thing)
local pointed_thing_diff = vector.subtract(pointed_thing.above, pointed_thing.under)
local num
for k, v in pairs(pointed_thing_diff) do
if v ~= 0 then
num = xyz[s(tostring(v):sub(-2, -2)..k)]
break
end
end
minetest.set_node(pointed_thing.above, {name = "technic:"..ltier.."_cable_plate_"..num})
if not (creative and creative.is_enabled_for(placer)) then
itemstack:take_item()
end
return itemstack
end
else
def.groups.not_in_creative_inventory = 1
end
minetest.register_node("technic:"..ltier.."_cable_plate_"..i, def)
cable_tier["technic:"..ltier.."_cable_plate_"..i] = tier
end
local c = "technic:"..ltier.."_cable"
minetest.register_craft({
output = "technic:"..ltier.."_cable_plate_1 5",
recipe = {
{"", "", c},
{c , c , c},
{"", "", c},
}
})
minetest.register_craft({
output = c,
recipe = {
{"technic:"..ltier.."_cable_plate_1"},
}
})
end

View File

@ -20,11 +20,11 @@ local recipes = {
}
-- defuse the default sandstone recipe, since we have the compressor to take over in a more realistic manner
minetest.register_craft({
output = "default:sand 0",
minetest.clear_craft({
output = "default:sandstone",
recipe = {
{'group:sand', 'group:sand'},
{'group:sand', 'group:sand'}
{'group:sand', 'group:sand'}
},
})

View File

@ -1,5 +1,8 @@
local S = technic.getter
local fs_helpers = pipeworks.fs_helpers
local tube_entry = "^pipeworks_tube_connection_metallic.png"
local tube = {
insert_object = function(pos, node, stack, direction)
local meta = minetest.get_meta(pos)
@ -9,12 +12,16 @@ local tube = {
can_insert = function(pos, node, stack, direction)
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
if meta:get_int("splitstacks") == 1 then
stack = stack:peek_item(1)
end
return inv:room_for_item("src", stack)
end,
connect_sides = {left=1, right=1, back=1, top=1, bottom=1},
}
function technic.register_generator(data)
function technic.register_generator(data)
local tier = data.tier
local ltier = string.lower(tier)
@ -76,21 +83,44 @@ function technic.register_generator(data)
if burn_totaltime == 0 then burn_totaltime = 1 end
local percent = math.floor((burn_time / burn_totaltime) * 100)
meta:set_string("infotext", desc.." ("..percent.."%)")
meta:set_string("formspec",
"size[8, 9]"..
"label[0, 0;"..minetest.formspec_escape(desc).."]"..
"list[current_name;src;3, 1;1, 1;]"..
"image[4, 1;1, 1;default_furnace_fire_bg.png^[lowpart:"..
(percent)..":default_furnace_fire_fg.png]"..
"list[current_player;main;0, 5;8, 4;]"..
"listring[]")
local form_buttons = ""
if ltier ~= "lv" then
form_buttons = fs_helpers.cycling_button(
meta,
pipeworks.button_base,
"splitstacks",
{
pipeworks.button_off,
pipeworks.button_on
}
)..pipeworks.button_label
end
meta:set_string("formspec",
"size[8, 9]"..
"label[0, 0;"..minetest.formspec_escape(desc).."]"..
"list[current_name;src;3, 1;1, 1;]"..
"image[4, 1;1, 1;default_furnace_fire_bg.png^[lowpart:"..
(percent)..":default_furnace_fire_fg.png]"..
"list[current_player;main;0, 5;8, 4;]"..
"listring[]"..
form_buttons
)
end
local tentry = tube_entry
if ltier == "lv" then tentry = "" end
minetest.register_node("technic:"..ltier.."_generator", {
description = desc,
tiles = {"technic_"..ltier.."_generator_top.png", "technic_machine_bottom.png",
"technic_"..ltier.."_generator_side.png", "technic_"..ltier.."_generator_side.png",
"technic_"..ltier.."_generator_side.png", "technic_"..ltier.."_generator_front.png"},
tiles = {
"technic_"..ltier.."_generator_top.png"..tentry,
"technic_machine_bottom.png"..tentry,
"technic_"..ltier.."_generator_side.png"..tentry,
"technic_"..ltier.."_generator_side.png"..tentry,
"technic_"..ltier.."_generator_side.png"..tentry,
"technic_"..ltier.."_generator_front.png"
},
paramtype2 = "facedir",
groups = groups,
connect_sides = {"bottom", "back", "left", "right"},
@ -99,11 +129,24 @@ function technic.register_generator(data)
tube = data.tube and tube or nil,
on_construct = function(pos)
local meta = minetest.get_meta(pos)
local node = minetest.get_node(pos)
meta:set_string("infotext", desc)
meta:set_int(data.tier.."_EU_supply", 0)
meta:set_int("burn_time", 0)
meta:set_int("tube_time", 0)
meta:set_string("formspec", generator_formspec)
local form_buttons = ""
if not string.find(node.name, ":lv_") then
form_buttons = fs_helpers.cycling_button(
meta,
pipeworks.button_base,
"splitstacks",
{
pipeworks.button_off,
pipeworks.button_on
}
)..pipeworks.button_label
end
meta:set_string("formspec", generator_formspec..form_buttons)
local inv = meta:get_inventory()
inv:set_size("src", 1)
end,
@ -113,14 +156,39 @@ function technic.register_generator(data)
allow_metadata_inventory_move = technic.machine_inventory_move,
technic_run = run,
after_place_node = data.tube and pipeworks.after_place,
after_dig_node = technic.machine_after_dig_node
after_dig_node = technic.machine_after_dig_node,
on_receive_fields = function(pos, formname, fields, sender)
if not pipeworks.may_configure(pos, sender) then return end
fs_helpers.on_receive_fields(pos, fields)
local meta = minetest.get_meta(pos)
local node = minetest.get_node(pos)
local form = generator_formspec
local form_buttons = ""
if not string.find(node.name, ":lv_") then
form_buttons = fs_helpers.cycling_button(
meta,
pipeworks.button_base,
"splitstacks",
{
pipeworks.button_off,
pipeworks.button_on
}
)..pipeworks.button_label
end
meta:set_string("formspec", generator_formspec..form_buttons)
end,
})
minetest.register_node("technic:"..ltier.."_generator_active", {
description = desc,
tiles = {"technic_"..ltier.."_generator_top.png", "technic_machine_bottom.png",
"technic_"..ltier.."_generator_side.png", "technic_"..ltier.."_generator_side.png",
"technic_"..ltier.."_generator_side.png", "technic_"..ltier.."_generator_front_active.png"},
tiles = {
"technic_"..ltier.."_generator_top.png"..tube_entry,
"technic_machine_bottom.png"..tube_entry,
"technic_"..ltier.."_generator_side.png"..tube_entry,
"technic_"..ltier.."_generator_side.png"..tube_entry,
"technic_"..ltier.."_generator_side.png"..tube_entry,
"technic_"..ltier.."_generator_front_active.png"
},
paramtype2 = "facedir",
groups = active_groups,
connect_sides = {"bottom"},
@ -129,6 +197,7 @@ function technic.register_generator(data)
tube = data.tube and tube or nil,
drop = "technic:"..ltier.."_generator",
can_dig = technic.machine_can_dig,
after_dig_node = technic.machine_after_dig_node,
allow_metadata_inventory_put = technic.machine_inventory_put,
allow_metadata_inventory_take = technic.machine_inventory_take,
allow_metadata_inventory_move = technic.machine_inventory_move,
@ -139,7 +208,8 @@ function technic.register_generator(data)
end,
on_timer = function(pos, node)
local meta = minetest.get_meta(pos)
local node = minetest.get_node(pos)
-- Connected back?
if meta:get_int(tier.."_EU_timeout") > 0 then return false end
@ -157,6 +227,19 @@ function technic.register_generator(data)
burn_time = burn_time - 1
meta:set_int("burn_time", burn_time)
local percent = math.floor(burn_time / burn_totaltime * 100)
local form_buttons = ""
if not string.find(node.name, ":lv_") then
form_buttons = fs_helpers.cycling_button(
meta,
pipeworks.button_base,
"splitstacks",
{
pipeworks.button_off,
pipeworks.button_on
}
)..pipeworks.button_label
end
meta:set_string("formspec",
"size[8, 9]"..
"label[0, 0;"..minetest.formspec_escape(desc).."]"..
@ -164,9 +247,44 @@ function technic.register_generator(data)
"image[4, 1;1, 1;default_furnace_fire_bg.png^[lowpart:"..
(percent)..":default_furnace_fire_fg.png]"..
"list[current_player;main;0, 5;8, 4;]"..
"listring[]")
"listring[]"..
form_buttons
)
return true
end,
on_receive_fields = function(pos, formname, fields, sender)
if not pipeworks.may_configure(pos, sender) then return end
fs_helpers.on_receive_fields(pos, fields)
local meta = minetest.get_meta(pos)
local node = minetest.get_node(pos)
local form_buttons = ""
if not string.find(node.name, ":lv_") then
form_buttons = fs_helpers.cycling_button(
meta,
pipeworks.button_base,
"splitstacks",
{
pipeworks.button_off,
pipeworks.button_on
}
)..pipeworks.button_label
end
local burn_totaltime = meta:get_int("burn_totaltime") or 0
local burn_time = meta:get_int("burn_time")
local percent = math.floor(burn_time / burn_totaltime * 100)
meta:set_string("formspec",
"size[8, 9]"..
"label[0, 0;"..minetest.formspec_escape(desc).."]"..
"list[current_name;src;3, 1;1, 1;]"..
"image[4, 1;1, 1;default_furnace_fire_bg.png^[lowpart:"..
(percent)..":default_furnace_fire_fg.png]"..
"list[current_player;main;0, 5;8, 4;]"..
"listring[]"..
form_buttons
)
end,
})
technic.register_machine(tier, "technic:"..ltier.."_generator", technic.producer)

View File

@ -30,8 +30,7 @@ local recipes = {
}
-- defuse the sandstone -> 4 sand recipe to avoid infinite sand bugs (also consult the inverse compressor recipe)
minetest.register_craft({
output = "default:sandstone 0",
minetest.clear_craft({
recipe = {
{'default:sandstone'}
},
@ -63,12 +62,6 @@ for _, data in pairs(recipes) do
technic.register_grinder_recipe({input = {data[1]}, output = data[2]})
end
-- defuse common grinder unfriendly recipes
if minetest.get_modpath("fake_fire") then -- from homedecor_modpack
minetest.register_craft({ output='default:cobble 0', recipe={{'default:cobble'}}})
minetest.register_craft({ output='default:gravel 0', recipe={{'default:gravel'}}})
end
-- dusts
local function register_dust(name, ingot)
local lname = string.lower(name)

View File

@ -1,6 +1,9 @@
local S = technic.getter
local fs_helpers = pipeworks.fs_helpers
local tube_entry = "^pipeworks_tube_connection_metallic.png"
local tube = {
insert_object = function(pos, node, stack, direction)
local meta = minetest.get_meta(pos)
@ -10,6 +13,9 @@ local tube = {
can_insert = function(pos, node, stack, direction)
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
if meta:get_int("splitstacks") == 1 then
stack = stack:peek_item(1)
end
return inv:room_for_item("src", stack)
end,
connect_sides = {left = 1, right = 1, back = 1, top = 1, bottom = 1},
@ -133,15 +139,21 @@ function technic.register_base_machine(data)
inv:set_list("dst", inv:get_list("dst_tmp"))
end
end
local tentry = tube_entry
if ltier == "lv" then
tentry = ""
end
minetest.register_node("technic:"..ltier.."_"..machine_name, {
description = machine_desc:format(tier),
tiles = {"technic_"..ltier.."_"..machine_name.."_top.png",
"technic_"..ltier.."_"..machine_name.."_bottom.png",
"technic_"..ltier.."_"..machine_name.."_side.png",
"technic_"..ltier.."_"..machine_name.."_side.png",
"technic_"..ltier.."_"..machine_name.."_side.png",
"technic_"..ltier.."_"..machine_name.."_front.png"},
tiles = {
"technic_"..ltier.."_"..machine_name.."_top.png"..tentry,
"technic_"..ltier.."_"..machine_name.."_bottom.png"..tentry,
"technic_"..ltier.."_"..machine_name.."_side.png"..tentry,
"technic_"..ltier.."_"..machine_name.."_side.png"..tentry,
"technic_"..ltier.."_"..machine_name.."_side.png"..tentry,
"technic_"..ltier.."_"..machine_name.."_front.png"
},
paramtype2 = "facedir",
groups = groups,
tube = data.tube and tube or nil,
@ -151,9 +163,23 @@ function technic.register_base_machine(data)
on_construct = function(pos)
local node = minetest.get_node(pos)
local meta = minetest.get_meta(pos)
local form_buttons = ""
if not string.find(node.name, ":lv_") then
form_buttons = fs_helpers.cycling_button(
meta,
pipeworks.button_base,
"splitstacks",
{
pipeworks.button_off,
pipeworks.button_on
}
)..pipeworks.button_label
end
meta:set_string("infotext", machine_desc:format(tier))
meta:set_int("tube_time", 0)
meta:set_string("formspec", formspec)
meta:set_string("formspec", formspec..form_buttons)
local inv = meta:get_inventory()
inv:set_size("src", input_size)
inv:set_size("dst", 4)
@ -166,17 +192,38 @@ function technic.register_base_machine(data)
allow_metadata_inventory_move = technic.machine_inventory_move,
technic_run = run,
after_place_node = data.tube and pipeworks.after_place,
after_dig_node = technic.machine_after_dig_node
after_dig_node = technic.machine_after_dig_node,
on_receive_fields = function(pos, formname, fields, sender)
local node = minetest.get_node(pos)
if not pipeworks.may_configure(pos, sender) then return end
fs_helpers.on_receive_fields(pos, fields)
local meta = minetest.get_meta(pos)
local form_buttons = ""
if not string.find(node.name, ":lv_") then
form_buttons = fs_helpers.cycling_button(
meta,
pipeworks.button_base,
"splitstacks",
{
pipeworks.button_off,
pipeworks.button_on
}
)..pipeworks.button_label
end
meta:set_string("formspec", formspec..form_buttons)
end,
})
minetest.register_node("technic:"..ltier.."_"..machine_name.."_active",{
description = machine_desc:format(tier),
tiles = {"technic_"..ltier.."_"..machine_name.."_top.png",
"technic_"..ltier.."_"..machine_name.."_bottom.png",
"technic_"..ltier.."_"..machine_name.."_side.png",
"technic_"..ltier.."_"..machine_name.."_side.png",
"technic_"..ltier.."_"..machine_name.."_side.png",
"technic_"..ltier.."_"..machine_name.."_front_active.png"},
tiles = {
"technic_"..ltier.."_"..machine_name.."_top.png"..tentry,
"technic_"..ltier.."_"..machine_name.."_bottom.png"..tentry,
"technic_"..ltier.."_"..machine_name.."_side.png"..tentry,
"technic_"..ltier.."_"..machine_name.."_side.png"..tentry,
"technic_"..ltier.."_"..machine_name.."_side.png"..tentry,
"technic_"..ltier.."_"..machine_name.."_front_active.png"
},
paramtype2 = "facedir",
drop = "technic:"..ltier.."_"..machine_name,
groups = active_groups,
@ -190,6 +237,25 @@ function technic.register_base_machine(data)
allow_metadata_inventory_move = technic.machine_inventory_move,
technic_run = run,
technic_disabled_machine_name = "technic:"..ltier.."_"..machine_name,
on_receive_fields = function(pos, formname, fields, sender)
local node = minetest.get_node(pos)
if not pipeworks.may_configure(pos, sender) then return end
fs_helpers.on_receive_fields(pos, fields)
local meta = minetest.get_meta(pos)
local form_buttons = ""
if not string.find(node.name, ":lv_") then
form_buttons = fs_helpers.cycling_button(
meta,
pipeworks.button_base,
"splitstacks",
{
pipeworks.button_off,
pipeworks.button_on
}
)..pipeworks.button_label
end
meta:set_string("formspec", formspec..form_buttons)
end,
})
technic.register_machine(tier, "technic:"..ltier.."_"..machine_name, technic.receiver)

View File

@ -7,11 +7,19 @@
-- Once the receiver side is powered it will deliver power to the other side.
-- Unused power is wasted just like any other producer!
local digilines_path = minetest.get_modpath("digilines")
local S = technic.getter
local cable_entry = "^technic_cable_connection_overlay.png"
local function set_supply_converter_formspec(meta)
local formspec = "size[5,2.25]"..
"field[0.3,0.5;2,1;power;"..S("Input Power")..";"..meta:get_int("power").."]"
if digilines_path then
formspec = formspec..
"field[2.3,0.5;3,1;channel;Digiline Channel;"..meta:get_string("channel").."]"
end
-- The names for these toggle buttons are explicit about which
-- state they'll switch to, so that multiple presses (arising
-- from the ambiguity between lag and a missed press) only make
@ -34,13 +42,14 @@ local supply_converter_receive_fields = function(pos, formname, fields, sender)
local power = nil
if fields.power then
power = tonumber(fields.power) or 0
power = 100 * math.floor(power / 100)
power = math.max(power, 0)
power = math.min(power, 10000)
power = 100 * math.floor(power / 100)
if power == meta:get_int("power") then power = nil end
end
if power then meta:set_int("power", power) end
if fields.enable then meta:set_int("enabled", 1) end
if fields.channel then meta:set_string("channel", fields.channel) end
if fields.enable then meta:set_int("enabled", 1) end
if fields.disable then meta:set_int("enabled", 0) end
if fields.mesecon_mode_0 then meta:set_int("mesecon_mode", 0) end
if fields.mesecon_mode_1 then meta:set_int("mesecon_mode", 1) end
@ -58,6 +67,48 @@ local mesecons = {
}
}
local digiline_def = {
receptor = {action = function() end},
effector = {
action = function(pos, node, channel, msg)
local meta = minetest.get_meta(pos)
if channel ~= meta:get_string("channel") then
return
end
msg = msg:lower()
if msg == "get" then
digilines.receptor_send(pos, digilines.rules.default, channel, {
enabled = meta:get_int("enabled"),
power = meta:get_int("power"),
mesecon_mode = meta:get_int("mesecon_mode")
})
return
elseif msg == "off" then
meta:set_int("enabled", 0)
elseif msg == "on" then
meta:set_int("enabled", 1)
elseif msg == "toggle" then
local onn = meta:get_int("enabled")
onn = -(onn-1) -- Mirror onn with pivot 0.5, so switch between 1 and 0.
meta:set_int("enabled", onn)
elseif msg:sub(1, 5) == "power" then
local power = tonumber(msg:sub(7))
if not power then
return
end
power = math.max(power, 0)
power = math.min(power, 10000)
power = 100 * math.floor(power / 100)
meta:set_int("power", power)
elseif msg:sub(1, 12) == "mesecon_mode" then
meta:set_int("mesecon_mode", tonumber(msg:sub(14)))
end
set_supply_converter_formspec(meta)
end
},
}
local run = function(pos, node, run_stage)
-- run only in producer stage.
if run_stage == technic.receiver then
@ -109,9 +160,14 @@ end
minetest.register_node("technic:supply_converter", {
description = S("Supply Converter"),
tiles = {"technic_supply_converter_top.png", "technic_supply_converter_bottom.png",
"technic_supply_converter_side.png", "technic_supply_converter_side.png",
"technic_supply_converter_side.png", "technic_supply_converter_side.png"},
tiles = {
"technic_supply_converter_tb.png"..cable_entry,
"technic_supply_converter_tb.png"..cable_entry,
"technic_supply_converter_side.png",
"technic_supply_converter_side.png",
"technic_supply_converter_side.png",
"technic_supply_converter_side.png"
},
groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2,
technic_machine=1, technic_all_tiers=1},
connect_sides = {"top", "bottom"},
@ -120,6 +176,9 @@ minetest.register_node("technic:supply_converter", {
on_construct = function(pos)
local meta = minetest.get_meta(pos)
meta:set_string("infotext", S("Supply Converter"))
if digilines_path then
meta:set_string("channel", "supply_converter"..minetest.pos_to_string(pos))
end
meta:set_int("power", 10000)
meta:set_int("enabled", 1)
meta:set_int("mesecon_mode", 0)
@ -127,6 +186,7 @@ minetest.register_node("technic:supply_converter", {
set_supply_converter_formspec(meta)
end,
mesecons = mesecons,
digiline = digiline_def,
technic_run = run,
technic_on_disable = run,
})

View File

@ -39,6 +39,8 @@ local digilines_path = minetest.get_modpath("digilines")
local S = technic.getter
local cable_entry = "^technic_cable_connection_overlay.png"
minetest.register_craft({
output = "technic:switching_station",
recipe = {
@ -57,9 +59,13 @@ end
minetest.register_node("technic:switching_station",{
description = S("Switching Station"),
tiles = {"technic_water_mill_top_active.png", "technic_water_mill_top_active.png",
"technic_water_mill_top_active.png", "technic_water_mill_top_active.png",
"technic_water_mill_top_active.png", "technic_water_mill_top_active.png"},
tiles = {
"technic_water_mill_top_active.png",
"technic_water_mill_top_active.png"..cable_entry,
"technic_water_mill_top_active.png",
"technic_water_mill_top_active.png",
"technic_water_mill_top_active.png",
"technic_water_mill_top_active.png"},
groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2, technic_all_tiers=1},
connect_sides = {"bottom"},
sounds = default.node_sound_wood_defaults(),

View File

@ -0,0 +1,362 @@
# Blender v2.78 (sub 0) OBJ File: 'technic-reactor.blend'
# www.blender.org
o Cube.002
v 0.249998 -0.500500 -0.249998
v 0.249998 -0.500500 0.249998
v -0.249999 -0.500500 -0.249998
v -0.249999 -0.500500 0.249998
v 0.283224 0.283132 0.423876
v 0.283224 -0.283316 0.423876
v -0.283224 0.283132 0.423875
v -0.283224 -0.283316 0.423875
v 0.195088 -0.195188 0.470985
v 0.195088 0.194988 0.470985
v -0.195088 -0.195188 0.470985
v -0.195088 0.194988 0.470985
v 0.099454 -0.099560 0.499495
v 0.099454 0.099349 0.499495
v -0.099455 -0.099560 0.499495
v -0.099455 0.099349 0.499495
v -0.360476 -0.360431 -0.360476
v -0.195088 -0.195024 -0.470985
v -0.195088 0.195153 -0.470985
v 0.195089 -0.195024 -0.470985
v 0.195089 0.195153 -0.470985
v 0.283225 -0.283168 -0.423875
v 0.283225 0.283281 -0.423875
v -0.283224 -0.283168 -0.423875
v -0.283224 0.283281 -0.423875
v 0.099455 -0.099386 -0.499495
v 0.099455 0.099525 -0.499495
v -0.099455 -0.099386 -0.499495
v -0.099455 0.099525 -0.499495
v -0.360492 0.360411 0.360457
v -0.099717 0.499491 0.099455
v 0.099194 0.499491 0.099456
v -0.195335 0.470933 0.195089
v 0.195097 0.470933 0.195089
v 0.194842 0.471069 0.194640
v -0.283446 0.423808 0.283224
v 0.283003 0.424005 0.282855
v 0.360288 0.360647 0.360170
v -0.099717 0.499526 -0.099455
v 0.099194 0.499526 -0.099455
v -0.194886 0.471001 -0.195088
v 0.194842 0.471001 -0.195088
v -0.195335 0.470865 -0.195343
v -0.283076 0.423907 -0.283224
v 0.283003 0.423907 -0.283224
v -0.360358 0.360522 -0.360476
v 0.360429 0.360474 -0.360515
v 0.360664 -0.360306 -0.360247
v -0.423875 -0.283187 0.283224
v -0.423875 0.283165 0.283224
v -0.423727 -0.283464 -0.283405
v -0.423875 0.283165 -0.283224
v 0.283446 -0.423844 -0.283224
v -0.283244 -0.423843 -0.283224
v -0.470985 0.195015 -0.195088
v -0.470985 -0.195016 -0.195088
v -0.360287 -0.360683 0.360323
v 0.283446 -0.423745 0.283465
v -0.283002 -0.423942 0.283224
v 0.360664 -0.360306 0.360247
v 0.423875 0.283152 0.283225
v 0.423727 0.283428 -0.283405
v 0.424023 -0.283021 0.282947
v -0.470985 -0.195017 0.195088
v 0.470985 0.195317 0.195089
v 0.424023 -0.283021 -0.282948
v 0.470985 -0.194860 -0.195088
v 0.470883 0.195317 -0.195279
v 0.471087 -0.194860 0.194752
v -0.471087 0.194824 0.194751
v -0.499495 0.099176 0.099455
v -0.499495 -0.099735 0.099455
v -0.499495 0.099175 -0.099455
v -0.499495 -0.099735 -0.099455
v 0.499495 -0.099212 0.099456
v 0.499495 0.099699 0.099456
v 0.499495 -0.099212 -0.099455
v 0.499495 0.099699 -0.099455
v 0.254894 -0.439053 0.254894
v 0.254894 -0.438992 -0.254894
v -0.254894 -0.439019 -0.254894
v -0.254664 -0.439081 0.254894
vt 0.2500 0.0000
vt 0.2451 0.0610
vt 0.7549 0.0609
vt 0.7500 0.0000
vt 0.2500 0.0000
vt 0.2451 0.0609
vt 0.7547 0.0609
vt 0.7500 0.0000
vt 0.2500 0.0000
vt 0.2451 0.0609
vt 0.7549 0.0610
vt 0.7500 0.0000
vt 0.2498 0.0000
vt 0.2449 0.0610
vt 0.7547 0.0610
vt 0.7498 0.0000
vt 0.2168 0.2167
vt 0.1393 0.1397
vt 0.1397 0.8606
vt 0.2168 0.7831
vt 0.4004 0.4006
vt 0.3047 0.3050
vt 0.3047 0.6952
vt 0.4004 0.5995
vt 0.7830 0.2168
vt 0.8605 0.1397
vt 0.1393 0.1396
vt 0.2166 0.2168
vt 0.3049 0.3048
vt 0.3049 0.6950
vt 0.6949 0.3050
vt 0.5993 0.4006
vt 0.5993 0.5995
vt 0.6949 0.6952
vt 0.7830 0.7833
vt 0.2166 0.7833
vt 0.7832 0.7831
vt 0.6951 0.6950
vt 0.8602 0.8605
vt 0.1395 0.8605
vt 0.4005 0.5993
vt 0.5995 0.5993
vt 0.6951 0.3048
vt 0.7832 0.2167
vt 0.5995 0.4004
vt 0.8605 0.1396
vt 0.7834 0.2165
vt 0.7832 0.7832
vt 0.8605 0.8605
vt 0.4005 0.4004
vt 0.8605 0.8604
vt 0.1396 0.1395
vt 0.2170 0.2168
vt 0.2170 0.7829
vt 0.1397 0.8602
vt 0.2168 0.2168
vt 0.1397 0.1393
vt 0.1396 0.8604
vt 0.2168 0.7832
vt 0.6951 0.6950
vt 0.3053 0.6948
vt 0.6953 0.3047
vt 0.7831 0.2168
vt 0.7834 0.7832
vt 0.6953 0.6951
vt 0.8604 0.1395
vt 0.3052 0.3049
vt 0.6949 0.3049
vt 0.8602 0.1397
vt 0.7829 0.2170
vt 0.7832 0.7832
vt 0.8602 0.8606
vt 0.3052 0.6946
vt 0.3049 0.6951
vt 0.2171 0.2170
vt 0.1398 0.1397
vt 0.1395 0.8605
vt 0.2166 0.7834
vt 0.4005 0.4008
vt 0.3049 0.3051
vt 0.3047 0.6953
vt 0.4005 0.5997
vt 0.6951 0.6953
vt 0.4006 0.4003
vt 0.4006 0.5992
vt 0.5995 0.5992
vt 0.5995 0.4003
vt 0.6948 0.3051
vt 0.5995 0.4008
vt 0.5995 0.5997
vt 0.5997 0.4005
vt 0.5997 0.5995
vt 0.6951 0.3050
vt 0.3049 0.3050
vt 0.4008 0.4005
vt 0.4008 0.5995
vt 0.8603 0.1393
vt 0.2169 0.2168
vt 0.1397 0.1395
vt 0.1395 0.8605
vt 0.2166 0.7832
vt 0.8605 0.8605
vt 0.1393 0.1398
vt 0.2166 0.2168
vt 0.7832 0.2168
vt 0.8605 0.1395
vt 0.1393 0.8602
vt 0.2166 0.7835
vt 0.7830 0.7832
vt 0.8603 0.8603
vt 0.2451 0.2451
vt 0.7549 0.2451
vt 0.7547 0.7549
vt 0.2451 0.7549
vt 0.2500 0.7500
vt 0.7500 0.7500
vt 0.7500 0.2500
vt 0.2500 0.2500
vn 0.9968 -0.0794 -0.0000
vn 0.0000 -0.0794 0.9968
vn -0.9970 -0.0776 0.0002
vn 0.0000 -0.0794 -0.9968
vn 0.6360 0.0002 0.7717
vn -0.2857 0.0000 -0.9583
vn 0.0002 -0.6353 -0.7722
vn 0.4714 -0.0000 0.8819
vn 0.2857 0.0000 -0.9583
vn 0.0000 -0.2857 -0.9583
vn 0.0000 0.4714 -0.8819
vn -0.0000 0.4714 0.8819
vn 0.6346 -0.0000 -0.7728
vn -0.6347 0.0001 -0.7728
vn -0.0000 0.2857 0.9583
vn -0.0000 -0.4714 0.8819
vn -0.2857 -0.0000 0.9583
vn -0.7727 0.0001 -0.6347
vn -0.0000 -0.2857 0.9583
vn -0.4714 0.0000 -0.8819
vn 0.2857 -0.0000 0.9583
vn -0.4714 -0.0000 0.8819
vn 0.4714 0.0000 -0.8819
vn 0.0001 0.6347 0.7728
vn 0.0000 -0.4714 -0.8819
vn 0.0000 0.2857 -0.9583
vn 0.6339 0.7734 -0.0001
vn -0.7722 -0.0002 0.6353
vn -0.8820 0.4713 0.0000
vn -0.4717 0.8817 -0.0002
vn 0.0000 0.7730 -0.6344
vn 0.0000 0.8820 -0.4713
vn 0.7721 0.0002 0.6355
vn 0.4711 0.8821 -0.0002
vn 0.0000 0.0000 -1.0000
vn 0.7732 -0.0000 -0.6342
vn -0.0000 -0.0000 1.0000
vn 0.9583 0.0001 -0.2859
vn -0.7730 0.6345 -0.0000
vn 0.8815 0.4723 -0.0001
vn -1.0000 -0.0000 0.0000
vn 0.9583 0.0000 0.2857
vn 0.0000 0.6344 -0.7730
vn -0.2867 0.9580 -0.0001
vn -0.9580 -0.2867 0.0000
vn 0.0000 0.9583 -0.2858
vn 0.7733 -0.6340 0.0000
vn 1.0000 0.0000 0.0000
vn -0.8818 -0.0000 -0.4716
vn 0.9585 -0.2852 -0.0002
vn 0.2853 0.9584 -0.0001
vn 0.9582 0.2862 -0.0002
vn -0.0000 0.8819 0.4715
vn 0.0002 -0.6359 0.7718
vn -0.7728 -0.6346 0.0000
vn -0.9586 0.2849 -0.0001
vn -0.6353 -0.0002 0.7722
vn -0.0000 0.9582 0.2861
vn -0.9583 0.0000 -0.2857
vn 0.8821 -0.0001 0.4711
vn -0.6348 0.7727 -0.0001
vn -0.8821 0.0001 0.4711
vn 0.8818 0.0000 -0.4716
vn -0.9583 -0.0000 0.2857
vn -0.8820 -0.4713 -0.0000
vn 0.0000 1.0000 0.0002
vn 0.8824 -0.4705 -0.0001
vn 0.7729 0.6346 0.0000
vn 0.0001 0.7732 0.6342
vn 0.0002 -0.7722 -0.6354
vn 0.6351 -0.7724 0.0001
vn -0.6340 -0.7733 0.0000
vn 0.0000 -0.8817 -0.4719
vn -0.4716 -0.8818 0.0001
vn 0.0003 -0.7720 0.6356
vn 0.4706 -0.8823 0.0000
vn 0.0001 -0.8817 0.4718
vn 0.0000 -1.0000 0.0000
g Cube.002_Cube.002_allsides
s off
f 1/1/1 80/2/1 79/3/1 2/4/1
f 2/5/2 79/6/2 82/7/2 4/8/2
f 4/9/3 82/10/3 81/11/3 3/12/3
f 3/13/4 81/14/4 80/15/4 1/16/4
f 6/17/5 60/18/5 38/19/5 5/20/5
f 28/21/6 18/22/6 19/23/6 29/24/6
f 22/25/7 48/26/7 17/27/7 24/28/7
f 9/29/8 6/17/8 5/20/8 10/30/8
f 20/31/9 26/32/9 27/33/9 21/34/9
f 26/32/10 20/31/10 18/22/10 28/21/10
f 23/35/11 21/34/11 19/23/11 25/36/11
f 10/30/12 5/20/12 7/37/12 12/38/12
f 48/26/13 22/25/13 23/35/13 47/39/13
f 24/28/14 17/27/14 46/40/14 25/36/14
f 14/41/15 10/30/15 12/38/15 16/42/15
f 6/17/16 9/29/16 11/43/16 8/44/16
f 11/43/17 15/45/17 16/42/17 12/38/17
f 17/46/18 51/47/18 52/48/18 46/49/18
f 9/29/19 13/50/19 15/45/19 11/43/19
f 18/22/20 24/28/20 25/36/20 19/23/20
f 13/50/21 9/29/21 10/30/21 14/41/21
f 8/44/22 11/43/22 12/38/22 7/37/22
f 22/25/23 20/31/23 21/34/23 23/35/23
f 5/20/24 38/19/24 30/51/24 7/37/24
f 20/31/25 22/25/25 24/28/25 18/22/25
f 21/34/26 27/33/26 29/24/26 19/23/26
f 47/52/27 45/53/27 37/54/27 38/55/27
f 49/56/28 57/57/28 30/58/28 50/59/28
f 52/48/29 55/60/29 70/61/29 50/59/29
f 43/62/30 44/63/30 36/64/30 33/65/30
f 45/53/31 47/52/31 46/66/31 44/63/31
f 42/67/32 45/53/32 44/63/32 43/62/32 41/68/32
f 60/69/33 63/70/33 61/71/33 38/72/33
f 45/53/34 42/67/34 35/73/34 34/74/34 37/54/34
f 28/21/35 29/24/35 27/33/35 26/32/35
f 66/75/36 48/76/36 47/77/36 62/78/36
f 13/50/37 14/41/37 16/42/37 15/45/37
f 77/79/38 67/80/38 68/81/38 78/82/38
f 46/49/39 52/48/39 50/59/39 30/58/39
f 68/81/40 62/78/40 61/71/40 65/83/40
f 72/84/41 71/85/41 73/86/41 74/87/41
f 69/88/42 75/89/42 76/90/42 65/83/42
f 47/39/43 23/35/43 25/36/43 46/40/43
f 39/91/44 41/68/44 43/62/44 33/65/44 31/92/44
f 74/87/45 56/93/45 64/94/45 72/84/45
f 40/95/46 42/67/46 41/68/46 39/91/46
f 48/76/47 66/75/47 63/70/47 60/69/47
f 77/79/48 78/82/48 76/90/48 75/89/48
f 51/47/49 56/93/49 55/60/49 52/48/49
f 67/80/50 77/79/50 75/89/50 69/88/50
f 42/67/51 40/95/51 32/96/51 35/73/51
f 78/82/52 68/81/52 65/83/52 76/90/52
f 37/54/53 34/74/53 33/65/53 36/64/53
f 60/18/54 6/17/54 8/44/54 57/97/54
f 51/47/55 17/46/55 57/57/55 49/56/55
f 55/60/56 73/86/56 71/85/56 70/61/56
f 57/97/57 8/44/57 7/37/57 30/51/57
f 34/74/58 35/73/58 32/96/58 31/92/58 33/65/58
f 56/93/59 74/87/59 73/86/59 55/60/59
f 63/70/60 69/88/60 65/83/60 61/71/60
f 44/98/61 46/99/61 30/100/61 36/101/61
f 64/94/62 49/56/62 50/59/62 70/61/62
f 67/80/63 66/75/63 62/78/63 68/81/63
f 72/84/64 64/94/64 70/61/64 71/85/64
f 56/93/65 51/47/65 49/56/65 64/94/65
f 40/95/66 39/91/66 31/92/66 32/96/66
f 66/75/67 67/80/67 69/88/67 63/70/67
f 62/78/68 47/77/68 38/72/68 61/71/68
f 30/102/69 38/55/69 37/54/69 36/64/69
g Cube.002_Cube.002_bottom
f 48/103/70 53/104/70 54/105/70 17/106/70
f 53/104/71 48/103/71 60/107/71 58/108/71
f 17/106/72 54/105/72 59/109/72 57/110/72
f 53/104/73 80/111/73 81/112/73 54/105/73
f 54/105/74 81/112/74 82/113/74 59/109/74
f 58/108/75 60/107/75 57/110/75 59/109/75
f 79/114/76 80/111/76 53/104/76 58/108/76
f 82/113/77 79/114/77 58/108/77 59/109/77
f 2/115/78 4/116/78 3/117/78 1/118/78

Binary file not shown.

Before

Width:  |  Height:  |  Size: 576 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 639 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 587 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 299 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 653 B

After

Width:  |  Height:  |  Size: 338 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 452 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 777 B

After

Width:  |  Height:  |  Size: 475 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 792 B

After

Width:  |  Height:  |  Size: 575 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 738 B

After

Width:  |  Height:  |  Size: 591 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 594 B

After

Width:  |  Height:  |  Size: 236 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 337 B

After

Width:  |  Height:  |  Size: 197 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 738 B

After

Width:  |  Height:  |  Size: 591 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 239 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 587 B

After

Width:  |  Height:  |  Size: 159 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 337 B

After

Width:  |  Height:  |  Size: 197 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 506 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 738 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 656 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 738 B

View File

@ -1,4 +1,3 @@
technic.chests.groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2,
tubedevice=1, tubedevice_receiver=1}
technic.chests.groups_noinv = {snappy=2, choppy=2, oddly_breakable_by_hand=2,
@ -13,6 +12,9 @@ technic.chests.tube = {
can_insert = function(pos, node, stack, direction)
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
if meta:get_int("splitstacks") == 1 then
stack = stack:peek_item(1)
end
return inv:room_for_item("main",stack)
end,
input_inventory = "main",

View File

@ -1,9 +1,16 @@
local S = rawget(_G, "intllib") and intllib.Getter() or function(s) return s end
local pipeworks = rawget(_G, "pipeworks")
local fs_helpers = rawget(_G, "fs_helpers")
local allow_label = ""
local tube_entry = ""
local shift_edit_field = 0
if not minetest.get_modpath("pipeworks") then
-- Pipeworks is not installed. Simulate using a dummy table...
pipeworks = {}
fs_helpers = {}
local pipeworks_meta = {}
setmetatable(pipeworks, pipeworks_meta)
local dummy = function()
@ -15,6 +22,12 @@ if not minetest.get_modpath("pipeworks") then
end
pipeworks.after_place = dummy
pipeworks.after_dig = dummy
fs_helpers.cycling_button = function() return "" end
else
fs_helpers = pipeworks.fs_helpers
allow_label = "label[0.9,0.36;Allow splitting incoming stacks from tubes]"
shift_edit_field = 3
tube_entry = "^pipeworks_tube_connection_metallic.png"
end
local chest_mark_colors = {
@ -72,6 +85,16 @@ local function set_formspec(pos, data, page)
local meta = minetest.get_meta(pos)
local node = minetest.get_node(pos)
local formspec = data.base_formspec
formspec = formspec..fs_helpers.cycling_button(
meta,
"image_button[0,0.35;1,0.6",
"splitstacks",
{
pipeworks.button_off,
pipeworks.button_on
}
)..allow_label
if data.autosort then
local status = meta:get_int("autosort")
formspec = formspec.."button["..(data.hileft+2)..","..(data.height+1.1)..";3,0.8;autosort_to_"..(1-status)..";"..S("Auto-sort is %s"):format(status == 1 and S("On") or S("Off")).."]"
@ -79,13 +102,13 @@ local function set_formspec(pos, data, page)
if data.infotext then
local formspec_infotext = minetest.formspec_escape(meta:get_string("infotext"))
if page == "main" then
formspec = formspec.."image_button["..(data.hileft+2.1)..",0.1;0.8,0.8;"
formspec = formspec.."image_button["..(shift_edit_field+data.hileft+2.1)..",0.1;0.8,0.8;"
.."technic_pencil_icon.png;edit_infotext;]"
.."label["..(data.hileft+3)..",0;"..formspec_infotext.."]"
.."label["..(shift_edit_field+data.hileft+3)..",0;"..formspec_infotext.."]"
elseif page == "edit_infotext" then
formspec = formspec.."image_button["..(data.hileft+2.1)..",0.1;0.8,0.8;"
formspec = formspec.."image_button["..(shift_edit_field+data.hileft+2.1)..",0.1;0.8,0.8;"
.."technic_checkmark_icon.png;save_infotext;]"
.."field["..(data.hileft+3.3)..",0.2;4.8,1;"
.."field["..(shift_edit_field+data.hileft+3.3)..",0.2;4.8,1;"
.."infotext_box;"..S("Edit chest description:")..";"
..formspec_infotext.."]"
end
@ -169,12 +192,17 @@ local function get_receive_fields(name, data)
local nn = "technic:"..lname..(data.locked and "_locked" or "").."_chest"
check_color_buttons(pos, meta, nn, fields)
end
if fields["fs_helpers_cycling:0:splitstacks"]
or fields["fs_helpers_cycling:1:splitstacks"] then
if not pipeworks.may_configure(pos, sender) then return end
fs_helpers.on_receive_fields(pos, fields)
end
meta:get_inventory():set_size("main", data.width * data.height)
set_formspec(pos, data, page)
end
end
function technic.chests:definition(name, data)
local lname = name:lower()
name = S(name)
@ -211,6 +239,7 @@ function technic.chests:definition(name, data)
"background["..data.hileft..",1;"..data.width..","..data.height..";technic_"..lname.."_chest_inventory.png]"..
"background["..data.loleft..","..data.lotop..";8,4;technic_main_inventory.png]"..
"listring[]"
if data.sort then
data.base_formspec = data.base_formspec.."button["..data.hileft..","..(data.height+1.1)..";1,0.8;sort;"..S("Sort").."]"
end
@ -239,11 +268,24 @@ function technic.chests:definition(name, data)
desc = S("%s Chest"):format(name)
end
local tentry = tube_entry
if tube_entry ~= "" then
if lname == "wooden" then
tentry = "^pipeworks_tube_connection_wooden.png"
elseif lname == "mithril" then
tentry = "^pipeworks_tube_connection_stony.png"
end
end
local def = {
description = desc,
tiles = {"technic_"..lname.."_chest_top.png", "technic_"..lname.."_chest_top.png",
"technic_"..lname.."_chest_side.png", "technic_"..lname.."_chest_side.png",
"technic_"..lname.."_chest_side.png", table.concat(front, "^")},
tiles = {
"technic_"..lname.."_chest_top.png"..tentry,
"technic_"..lname.."_chest_top.png"..tentry,
"technic_"..lname.."_chest_side.png"..tentry,
"technic_"..lname.."_chest_side.png"..tentry,
"technic_"..lname.."_chest_side.png"..tentry,
table.concat(front, "^")
},
paramtype2 = "facedir",
groups = self.groups,
tube = self.tube,

View File

@ -1,14 +1,14 @@
local uranium_params = {offset = 0, scale = 1, spread = {x = 100, y = 100, z = 100}, seed = 420, octaves = 3, persist = 0.7}
local uranium_threshhold = 0.55
local uranium_threshold = 0.55
local chromium_params = {offset = 0, scale = 1, spread = {x = 100, y = 100, z = 100}, seed = 421, octaves = 3, persist = 0.7}
local chromium_threshhold = 0.55
local chromium_threshold = 0.55
local zinc_params = {offset = 0, scale = 1, spread = {x = 100, y = 100, z = 100}, seed = 422, octaves = 3, persist = 0.7}
local zinc_threshhold = 0.5
local zinc_threshold = 0.5
local lead_params = {offset = 0, scale = 1, spread = {x = 100, y = 100, z = 100}, seed = 423, octaves = 3, persist = 0.7}
local lead_threshhold = 0.3
local lead_threshold = 0.3
minetest.register_ore({
ore_type = "scatter",
@ -20,7 +20,7 @@ minetest.register_ore({
y_min = -300,
y_max = -80,
noise_params = uranium_params,
noise_threshhold = uranium_threshhold,
noise_threshold = uranium_threshold,
})
minetest.register_ore({
@ -33,7 +33,7 @@ minetest.register_ore({
y_min = -200,
y_max = -100,
noise_params = chromium_params,
noise_threshhold = chromium_threshhold,
noise_threshold = chromium_threshold,
})
minetest.register_ore({
@ -47,7 +47,7 @@ minetest.register_ore({
y_max = -200,
flags = "absheight",
noise_params = chromium_params,
noise_threshhold = chromium_threshhold,
noise_threshold = chromium_threshold,
})
minetest.register_ore({
@ -58,7 +58,9 @@ minetest.register_ore({
clust_num_ores = 5,
clust_size = 7,
y_min = -32,
y_max = 2
y_max = 2,
noise_params = zinc_params,
noise_threshold = zinc_threshold,
})
minetest.register_ore({
@ -72,7 +74,7 @@ minetest.register_ore({
y_max = -32,
flags = "absheight",
noise_params = zinc_params,
noise_threshhold = zinc_threshhold,
noise_threshold = zinc_threshold,
})
minetest.register_ore({
@ -85,7 +87,7 @@ minetest.register_ore({
y_min = -16,
y_max = 16,
noise_params = lead_params,
noise_threshhold = lead_threshhold,
noise_threshold = lead_threshold,
})
minetest.register_ore({
@ -98,7 +100,7 @@ minetest.register_ore({
y_min = -128,
y_max = -16,
noise_params = lead_params,
noise_threshhold = lead_threshhold,
noise_threshold = lead_threshold,
})
minetest.register_ore({
@ -112,7 +114,7 @@ minetest.register_ore({
y_max = -128,
flags = "absheight",
noise_params = lead_params,
noise_threshhold = lead_threshhold,
noise_threshold = lead_threshold,
})
-- Sulfur
@ -170,7 +172,7 @@ minetest.register_ore({
clust_size = 3,
y_min = -31000,
y_max = -50,
noise_threshhold = 0.4,
noise_threshold = 0.4,
noise_params = {offset=0, scale=15, spread={x=150, y=150, z=150}, seed=23, octaves=3, persist=0.70}
})
end
@ -185,7 +187,7 @@ minetest.register_ore({
clust_size = 4,
y_min = -31000,
y_max = -150,
noise_threshhold = 0.4,
noise_threshold = 0.4,
noise_params = {offset=0, scale=15, spread={x=130, y=130, z=130}, seed=24, octaves=3, persist=0.70}
})
end