5 Commits

Author SHA1 Message Date
140701c99e Add technic_on_disable callback (#592)
This adds a new callback to trigger when the machine is no longer powered by the technic power grid. Also allows mods to override the infotext if needed.
2021-09-10 20:42:27 +02:00
1c219487d3 Add support for craftguide mod recipe registration (#584) 2021-04-14 16:20:20 +02:00
43acec2900 Add Rubber Goo as replacement for the grinder (#578)
Fixes the circular dependency in issue #474 by adding a new item that can be used to craft Rubber.
2021-02-09 19:03:55 +01:00
0f7810e538 Public/private mode for self-contained injector (#567)
Fixes #537.
2021-02-06 12:41:09 +01:00
11e43ffe13 nuclear_reactor: Add error messages on start failure (#574) 2021-01-06 18:12:51 +01:00
11 changed files with 116 additions and 45 deletions

View File

@ -28,6 +28,8 @@ read_globals = {
"protector", "isprotect",
"homedecor_expect_infinite_stacks",
"craftguide", "i3"
}
files["concrete/init.lua"].ignore = { "steel_ingot" }

View File

@ -174,7 +174,6 @@ minetest.register_craft({
},
})
minetest.register_craft({
output = "default:dirt 2",
type = "shapeless",
@ -186,3 +185,25 @@ minetest.register_craft({
"group:sand",
},
})
minetest.register_craft({
output = "technic:rubber_goo",
type = "shapeless",
recipe = {
"technic:raw_latex",
"default:coal_lump",
"default:coal_lump",
"default:coal_lump",
"default:coal_lump",
"default:coal_lump",
"default:coal_lump",
"default:coal_lump",
"default:coal_lump",
},
})
minetest.register_craft({
output = "technic:rubber",
type = "cooking",
recipe = "technic:rubber_goo",
})

View File

@ -1,14 +0,0 @@
default
pipeworks
technic_worldgen
basic_materials
bucket?
screwdriver?
mesecons?
mesecons_mvps?
digilines?
digiline_remote?
intllib?
unified_inventory?
vector_extras?
dye?

View File

@ -136,10 +136,15 @@ Additional definition fields:
* Specifies how the tool wear level is handled. Available modes:
* `"mechanical_wear"`: represents physical damage
* `"technic_RE_charge"`: represents electrical charge
* `<itemdef>.technic_run(pos, node)`
* This function is currently used to update the node.
* `<itemdef>.technic_run = function(pos, node) ...`
* This callback is used to update the node.
Modders have to manually change the information about supply etc. in the
node metadata.
* `<itemdef>.technic_disabled_machine_name = "string"`
* Specifies the machine's node name to use when it's not connected connected to a network
* `<itemdef>.technic_on_disable = function(pos, node) ...`
* This callback is run when the machine is no longer connected to a technic-powered network.
## Node Metadata fields
Nodes connected to the network will have one or more of these parameters as meta

View File

@ -134,6 +134,11 @@ minetest.register_node("technic:machine_casing", {
sounds = default.node_sound_stone_defaults(),
})
minetest.register_craftitem("technic:rubber_goo", {
description = S("Rubber Goo"),
inventory_image = "technic_rubber_goo.png",
})
for p = 0, 35 do
local nici = (p ~= 0 and p ~= 7 and p ~= 35) and 1 or nil
local psuffix = p == 7 and "" or p

View File

@ -217,24 +217,33 @@ end
local function start_reactor(pos, meta)
local correct_fuel_count = 6
local msg_fuel_missing = "Error: You need to insert " .. correct_fuel_count .. " pieces of Uranium Fuel."
if minetest.get_node(pos).name ~= "technic:hv_nuclear_reactor_core" then
return false
return msg_fuel_missing
end
local inv = meta:get_inventory()
if inv:is_empty("src") then
return false
return msg_fuel_missing
end
local src_list = inv:get_list("src")
local correct_fuel_count = 0
local fuel_count = 0
for _, src_stack in pairs(src_list) do
if src_stack and src_stack:get_name() == fuel_type then
correct_fuel_count = correct_fuel_count + 1
fuel_count = fuel_count + 1
end
end
-- Check that the reactor is complete and has the correct fuel
if correct_fuel_count ~= 6 or reactor_structure_badness(pos) ~= 0 then
return false
-- Check that the has the correct fuel
if fuel_count ~= correct_fuel_count then
return msg_fuel_missing
end
-- Check that the reactor is complete
if reactor_structure_badness(pos) ~= 0 then
return "Error: The power plant seems to be built incorrectly."
end
meta:set_int("burn_time", 1)
technic.swap_node(pos, "technic:hv_nuclear_reactor_core_active")
meta:set_int("HV_EU_supply", power_supply)
@ -242,7 +251,8 @@ local function start_reactor(pos, meta)
src_stack:take_item()
inv:set_stack("src", idx, src_stack)
end
return true
return nil
end
@ -281,7 +291,7 @@ local function run(pos, node)
"fuel used", 6, true)
end
if meta:get_string("autostart") == "true" then
if start_reactor(pos, meta) then
if not start_reactor(pos, meta) then
return
end
end
@ -313,11 +323,11 @@ local nuclear_reactor_receive_fields = function(pos, formname, fields, sender)
meta:set_string("remote_channel", fields.remote_channel)
end
if fields.start then
local b = start_reactor(pos, meta)
if b then
local start_error_msg = start_reactor(pos, meta)
if not start_error_msg then
minetest.chat_send_player(player_name, "Start successful")
else
minetest.chat_send_player(player_name, "Error")
minetest.chat_send_player(player_name, start_error_msg)
end
end
if fields.autostart then
@ -385,11 +395,11 @@ local digiline_remote_def = function(pos, channel, msg)
melt_down_reactor(pos)
end
elseif msg.command == "start" then
local b = start_reactor(pos, meta)
if b then
local start_error_msg = start_reactor(pos, meta)
if not start_error_msg then
digiline_remote.send_to_node(pos, channel, "Start successful", 6, true)
else
digiline_remote.send_to_node(pos, channel, "Error", 6, true)
digiline_remote.send_to_node(pos, channel, start_error_msg, 6, true)
end
end
end

View File

@ -61,6 +61,9 @@ local function set_injector_formspec(meta)
(is_stack and
"button[0,1;2,1;mode_item;"..S("Stackwise").."]" or
"button[0,1;2,1;mode_stack;"..S("Itemwise").."]")..
(meta:get_int("public") == 1 and
"button[2,1;2,1;mode_private;"..S("Public").."]" or
"button[2,1;2,1;mode_public;"..S("Private").."]")..
"list[current_name;main;0,2;8,2;]"..
"list[current_player;main;0,5;8,4;]"..
"listring[]"..
@ -123,6 +126,9 @@ minetest.register_node("technic:injector", {
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.mode_private then meta:set_int("public", 0) end
if fields.mode_public then meta:set_int("public", 1) 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

View File

@ -1,4 +1,6 @@
local have_ui = minetest.get_modpath("unified_inventory")
local have_cg = minetest.get_modpath("craftguide")
local have_i3 = minetest.get_modpath("i3")
technic.recipes = { cooking = { input_size = 1, output_size = 1 } }
function technic.register_recipe_type(typename, origdata)
@ -6,12 +8,24 @@ function technic.register_recipe_type(typename, origdata)
for k, v in pairs(origdata) do data[k] = v end
data.input_size = data.input_size or 1
data.output_size = data.output_size or 1
if have_ui and unified_inventory.register_craft_type and data.output_size == 1 then
unified_inventory.register_craft_type(typename, {
description = data.description,
width = data.input_size,
height = 1,
})
if data.output_size == 1 then
if have_ui and unified_inventory.register_craft_type then
unified_inventory.register_craft_type(typename, {
description = data.description,
width = data.input_size,
height = 1,
})
end
if have_cg and craftguide.register_craft_type then
craftguide.register_craft_type(typename, {
description = data.description,
})
end
if have_i3 then
i3.register_craft_type(typename, {
description = data.description,
})
end
end
data.recipes = {}
technic.recipes[typename] = data
@ -59,6 +73,27 @@ local function register_recipe(typename, data)
width = 0,
})
end
if (have_cg or have_i3) and technic.recipes[typename].output_size == 1 then
local result = data.output
if (type(result)=="table") then
result = result[1]
end
local items = table.concat(data.input, ", ")
if have_cg and craftguide.register_craft then
craftguide.register_craft({
type = typename,
result = result,
items = {items},
})
end
if have_i3 then
i3.register_craft({
type = typename,
result = result,
items = {items},
})
end
end
end
function technic.register_recipe(typename, data)

View File

@ -465,16 +465,17 @@ minetest.register_abm({
for tier, machines in pairs(technic.machines) do
if machines[node.name] and switching_station_timeout_count(pos, tier) then
local nodedef = minetest.registered_nodes[node.name]
if nodedef and nodedef.technic_disabled_machine_name then
node.name = nodedef.technic_disabled_machine_name
minetest.swap_node(pos, node)
elseif nodedef and nodedef.technic_on_disable then
nodedef.technic_on_disable(pos, node)
end
if nodedef then
local meta = minetest.get_meta(pos)
meta:set_string("infotext", S("%s Has No Network"):format(nodedef.description))
end
if nodedef and nodedef.technic_disabled_machine_name then
node.name = nodedef.technic_disabled_machine_name
minetest.swap_node(pos, node)
end
if nodedef and nodedef.technic_on_disable then
nodedef.technic_on_disable(pos, node)
end
end
end
end,

View File

@ -1,3 +1,3 @@
name = technic
depends = default, pipeworks, technic_worldgen, basic_materials
optional_depends = bucket, screwdriver, mesecons, mesecons_mvps, digilines, digiline_remote, intllib, unified_inventory, vector_extras, dye
optional_depends = bucket, screwdriver, mesecons, mesecons_mvps, digilines, digiline_remote, intllib, unified_inventory, vector_extras, dye, craftguide,i3

Binary file not shown.

After

Width:  |  Height:  |  Size: 501 B