chemical reactor added, further bugfixes
This commit is contained in:
parent
52844aab26
commit
762347521c
@ -67,6 +67,7 @@ end
|
|||||||
function techage.boiler.water_temperature(pos, nvm)
|
function techage.boiler.water_temperature(pos, nvm)
|
||||||
nvm.temperature = nvm.temperature or 20
|
nvm.temperature = nvm.temperature or 20
|
||||||
nvm.num_water = nvm.num_water or 0
|
nvm.num_water = nvm.num_water or 0
|
||||||
|
nvm.water_level = nvm.water_level or 0
|
||||||
if nvm.fire_trigger then
|
if nvm.fire_trigger then
|
||||||
nvm.temperature = math.min(nvm.temperature + HEAT_STEP, 100)
|
nvm.temperature = math.min(nvm.temperature + HEAT_STEP, 100)
|
||||||
else
|
else
|
||||||
|
@ -71,91 +71,6 @@ function techage.fuel.formspec(nvm)
|
|||||||
techage.fuel.fuel_container(1.5, 1, nvm)
|
techage.fuel.fuel_container(1.5, 1, nvm)
|
||||||
end
|
end
|
||||||
|
|
||||||
--local function fill_container(pos, inv, nvm)
|
|
||||||
-- nvm.liquid = nvm.liquid or {}
|
|
||||||
-- nvm.liquid.amount = nvm.liquid.amount or 0
|
|
||||||
-- local empty_container = inv:get_stack("fuel", 1):get_name()
|
|
||||||
-- local full_container = liquid.get_full_container(empty_container, nvm.liquid.name)
|
|
||||||
-- if empty_container and full_container then
|
|
||||||
-- local ldef = liquid.get_liquid_def(full_container)
|
|
||||||
-- if ldef and nvm.liquid.amount - ldef.size >= 0 then
|
|
||||||
-- inv:remove_item("fuel", ItemStack(empty_container))
|
|
||||||
-- inv:add_item("fuel", ItemStack(full_container))
|
|
||||||
-- nvm.liquid.amount = nvm.liquid.amount - ldef.size
|
|
||||||
-- if nvm.liquid.amount == 0 then
|
|
||||||
-- nvm.liquid.name = nil
|
|
||||||
-- end
|
|
||||||
-- end
|
|
||||||
-- end
|
|
||||||
--end
|
|
||||||
|
|
||||||
--local function empty_container(pos, inv, nvm)
|
|
||||||
-- nvm.liquid = nvm.liquid or {}
|
|
||||||
-- nvm.liquid.amount = nvm.liquid.amount or 0
|
|
||||||
-- local stack = inv:get_stack("fuel", 1)
|
|
||||||
-- if stack:get_count() == 1 then
|
|
||||||
-- local ldef = liquid.get_liquid_def(stack:get_name())
|
|
||||||
-- if ldef and ValidOilFuels[ldef.inv_item] then
|
|
||||||
-- if not nvm.liquid.name or ldef.inv_item == nvm.liquid.name then
|
|
||||||
-- if nvm.liquid.amount + ldef.size <= CAPACITY then
|
|
||||||
-- inv:remove_item("fuel", stack)
|
|
||||||
-- inv:add_item("fuel", ItemStack(ldef.container))
|
|
||||||
-- nvm.liquid.amount = nvm.liquid.amount + ldef.size
|
|
||||||
-- nvm.liquid.name = ldef.inv_item
|
|
||||||
-- end
|
|
||||||
-- end
|
|
||||||
-- end
|
|
||||||
-- end
|
|
||||||
--end
|
|
||||||
|
|
||||||
--local function move_item(pos, stack)
|
|
||||||
-- local nvm = techage.get_nvm(pos)
|
|
||||||
-- local inv = M(pos):get_inventory()
|
|
||||||
-- if liquid.is_container_empty(stack:get_name()) then
|
|
||||||
-- fill_container(pos, inv, nvm)
|
|
||||||
-- else
|
|
||||||
-- empty_container(pos, inv, nvm)
|
|
||||||
-- end
|
|
||||||
-- M(pos):set_string("formspec", techage.fuel.formspec(nvm))
|
|
||||||
--end
|
|
||||||
|
|
||||||
--function techage.fuel.move_item(pos, stack, formspec)
|
|
||||||
-- local nvm = techage.get_nvm(pos)
|
|
||||||
-- local inv = M(pos):get_inventory()
|
|
||||||
-- if liquid.is_container_empty(stack:get_name()) then
|
|
||||||
-- fill_container(pos, inv, nvm)
|
|
||||||
-- else
|
|
||||||
-- empty_container(pos, inv, nvm)
|
|
||||||
-- end
|
|
||||||
-- M(pos):set_string("formspec", formspec(pos, nvm))
|
|
||||||
--end
|
|
||||||
|
|
||||||
--function techage.fuel.allow_metadata_inventory_put(pos, listname, index, stack, player)
|
|
||||||
-- if minetest.is_protected(pos, player:get_player_name()) then
|
|
||||||
-- return 0
|
|
||||||
-- end
|
|
||||||
-- if liquid.is_container_empty(stack:get_name()) then
|
|
||||||
-- return 1
|
|
||||||
-- end
|
|
||||||
-- local category = LQD(pos).fuel_cat
|
|
||||||
-- local ldef = liquid.get_liquid_def(stack:get_name())
|
|
||||||
-- if ldef and ValidOilFuels[ldef.inv_item] and ValidOilFuels[ldef.inv_item] <= category then
|
|
||||||
-- return 1
|
|
||||||
-- end
|
|
||||||
-- return 0
|
|
||||||
--end
|
|
||||||
|
|
||||||
--function techage.fuel.allow_metadata_inventory_take(pos, listname, index, stack, player)
|
|
||||||
-- if minetest.is_protected(pos, player:get_player_name()) then
|
|
||||||
-- return 0
|
|
||||||
-- end
|
|
||||||
-- return stack:get_count()
|
|
||||||
--end
|
|
||||||
|
|
||||||
--function techage.fuel.on_metadata_inventory_put(pos, listname, index, stack, player)
|
|
||||||
-- minetest.after(0.5, move_item, pos, stack)
|
|
||||||
--end
|
|
||||||
|
|
||||||
function techage.fuel.can_dig(pos, player)
|
function techage.fuel.can_dig(pos, player)
|
||||||
if minetest.is_protected(pos, player:get_player_name()) then
|
if minetest.is_protected(pos, player:get_player_name()) then
|
||||||
return false
|
return false
|
||||||
@ -173,22 +88,6 @@ function techage.fuel.on_rightclick(pos, node, clicker)
|
|||||||
M(pos):set_string("formspec", techage.fuel.formspec(nvm))
|
M(pos):set_string("formspec", techage.fuel.formspec(nvm))
|
||||||
end
|
end
|
||||||
|
|
||||||
--function techage.fuel.on_receive_fields(pos, formname, fields, player)
|
|
||||||
-- if minetest.is_protected(pos, player:get_player_name()) then
|
|
||||||
-- return
|
|
||||||
-- end
|
|
||||||
-- local nvm = techage.get_nvm(pos)
|
|
||||||
-- nvm.countdown = 10
|
|
||||||
-- M(pos):set_string("formspec", techage.fuel.formspec(nvm))
|
|
||||||
--end
|
|
||||||
|
|
||||||
--function techage.fuel.formspec_update(pos, nvm)
|
|
||||||
-- if nvm.countdown and nvm.countdown > 0 then
|
|
||||||
-- nvm.countdown = nvm.countdown - 1
|
|
||||||
-- M(pos):set_string("formspec", techage.fuel.formspec(nvm))
|
|
||||||
-- end
|
|
||||||
--end
|
|
||||||
|
|
||||||
-- name is the fuel item name
|
-- name is the fuel item name
|
||||||
function techage.fuel.burntime(name)
|
function techage.fuel.burntime(name)
|
||||||
if ValidOilFuels[name] then
|
if ValidOilFuels[name] then
|
||||||
@ -229,3 +128,20 @@ function techage.fuel.on_punch(pos, node, puncher, pointed_thing)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function techage.fuel.get_fuel(nvm)
|
||||||
|
if nvm.liquid and nvm.liquid.name and nvm.liquid.amount then
|
||||||
|
if nvm.liquid.amount > 0 then
|
||||||
|
nvm.liquid.amount = nvm.liquid.amount - 1
|
||||||
|
return nvm.liquid.name
|
||||||
|
end
|
||||||
|
nvm.liquid.name = nil
|
||||||
|
end
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
|
function techage.fuel.has_fuel(nvm)
|
||||||
|
nvm.liquid = nvm.liquid or {}
|
||||||
|
nvm.liquid.amount = nvm.liquid.amount or 0
|
||||||
|
return nvm.liquid.amount > 0
|
||||||
|
end
|
@ -48,15 +48,15 @@ local function get_starter_name(pos)
|
|||||||
end
|
end
|
||||||
|
|
||||||
local function formspec(self, pos, nvm)
|
local function formspec(self, pos, nvm)
|
||||||
return "size[8,7]"..
|
return "size[6,3.6]"..
|
||||||
default.gui_bg..
|
default.gui_bg..
|
||||||
default.gui_bg_img..
|
default.gui_bg_img..
|
||||||
default.gui_slots..
|
default.gui_slots..
|
||||||
recipes.formspec(0, 0, "ta4_doser", nvm)..
|
"box[0,-0.1;5.8,0.5;#c6e8ff]"..
|
||||||
"image_button[6,1;1,1;".. self:get_state_button_image(nvm) ..";state_button;]"..
|
"label[2.5,-0.1;"..minetest.colorize( "#000000", S("Doser")).."]"..
|
||||||
"tooltip[6,1;1,1;"..self:get_state_tooltip(nvm).."]"..
|
recipes.formspec(0.1, 0.8, "ta4_doser", nvm)..
|
||||||
"list[current_player;main;0,3.3;8,4;]" ..
|
"image_button[5,2;1,1;".. self:get_state_button_image(nvm) ..";state_button;]"..
|
||||||
default.get_hotbar_bg(0, 3.5)
|
"tooltip[5,2;1,1;"..self:get_state_tooltip(nvm).."]"
|
||||||
end
|
end
|
||||||
|
|
||||||
local function get_liquids(pos)
|
local function get_liquids(pos)
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
TechAge
|
TechAge
|
||||||
=======
|
=======
|
||||||
|
|
||||||
Copyright (C) 2019 Joachim Stolberg
|
Copyright (C) 2019-2020 Joachim Stolberg
|
||||||
|
|
||||||
GPL v3
|
GPL v3
|
||||||
See LICENSE.txt for more information
|
See LICENSE.txt for more information
|
||||||
@ -23,16 +23,39 @@ local liquid = techage.liquid
|
|||||||
local PWR_NEEDED = 8
|
local PWR_NEEDED = 8
|
||||||
local CYCLE_TIME = 4
|
local CYCLE_TIME = 4
|
||||||
|
|
||||||
local function on_power(pos, nvm)
|
local function play_sound(pos)
|
||||||
if nvm.running then
|
local mem = techage.get_mem(pos)
|
||||||
minetest.get_node_timer(pos):start(CYCLE_TIME)
|
if not mem.handle or mem.handle == -1 then
|
||||||
M(pos):set_string("infotext", S("on"))
|
mem.handle = minetest.sound_play("techage_reactor", {
|
||||||
nvm.has_power = true
|
pos = pos,
|
||||||
|
gain = 0.5,
|
||||||
|
max_hear_distance = 10,
|
||||||
|
loop = true})
|
||||||
|
if mem.handle == -1 then
|
||||||
|
minetest.after(1, play_sound, pos)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local function on_nopower(pos, nvm)
|
local function stop_sound(pos)
|
||||||
|
local mem = techage.get_mem(pos)
|
||||||
|
if mem.handle then
|
||||||
|
minetest.sound_stop(mem.handle)
|
||||||
|
mem.handle = nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function on_power(pos)
|
||||||
|
M(pos):set_string("infotext", S("on"))
|
||||||
|
play_sound(pos)
|
||||||
|
local nvm = techage.get_nvm(pos)
|
||||||
|
nvm.has_power = true
|
||||||
|
end
|
||||||
|
|
||||||
|
local function on_nopower(pos)
|
||||||
M(pos):set_string("infotext", S("no power"))
|
M(pos):set_string("infotext", S("no power"))
|
||||||
|
stop_sound(pos)
|
||||||
|
local nvm = techage.get_nvm(pos)
|
||||||
nvm.has_power = false
|
nvm.has_power = false
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -71,29 +94,25 @@ minetest.register_node("techage:ta4_reactor_stand", {
|
|||||||
|
|
||||||
after_place_node = function(pos, placer)
|
after_place_node = function(pos, placer)
|
||||||
local nvm = techage.get_nvm(pos)
|
local nvm = techage.get_nvm(pos)
|
||||||
techage.power.after_place_node(pos)
|
|
||||||
M(pos):set_string("infotext", S("off"))
|
M(pos):set_string("infotext", S("off"))
|
||||||
M(pos):set_int("outdir", networks.side_to_outdir(pos, "R"))
|
M(pos):set_int("outdir", networks.side_to_outdir(pos, "R"))
|
||||||
Pipe:after_place_node(pos)
|
Pipe:after_place_node(pos)
|
||||||
|
Cable:after_place_node(pos)
|
||||||
end,
|
end,
|
||||||
tubelib2_on_update2 = function(pos, dir, tlib2, node)
|
tubelib2_on_update2 = function(pos, dir, tlib2, node)
|
||||||
liquid.update_network(pos)
|
if tlib2.tube_type == "ele1" then
|
||||||
end,
|
power.update_network(pos, dir, tlib2)
|
||||||
after_tube_update = function(node, pos, out_dir, peer_pos, peer_in_dir)
|
else
|
||||||
techage.power.after_tube_update2(node, pos, out_dir, peer_pos, peer_in_dir)
|
liquid.update_network(pos, dir, tlib2)
|
||||||
|
end
|
||||||
end,
|
end,
|
||||||
on_timer = function(pos, elapsed)
|
on_timer = function(pos, elapsed)
|
||||||
local nvm = techage.get_nvm(pos)
|
power.consumer_alive(pos, Cable, CYCLE_TIME)
|
||||||
power.consumer_alive(pos, nvm)
|
return true
|
||||||
minetest.sound_play("techage_reactor", {
|
|
||||||
pos = pos,
|
|
||||||
gain = 0.5,
|
|
||||||
max_hear_distance = 10})
|
|
||||||
return nvm.running
|
|
||||||
end,
|
end,
|
||||||
after_dig_node = function(pos, oldnode)
|
after_dig_node = function(pos, oldnode)
|
||||||
techage.power.after_dig_node(pos, oldnode)
|
|
||||||
Pipe:after_dig_node(pos)
|
Pipe:after_dig_node(pos)
|
||||||
|
Cable:after_dig_node(pos)
|
||||||
techage.del_mem(pos)
|
techage.del_mem(pos)
|
||||||
end,
|
end,
|
||||||
|
|
||||||
@ -103,23 +122,22 @@ minetest.register_node("techage:ta4_reactor_stand", {
|
|||||||
groups = {cracky=2},
|
groups = {cracky=2},
|
||||||
is_ground_content = false,
|
is_ground_content = false,
|
||||||
sounds = default.node_sound_metal_defaults(),
|
sounds = default.node_sound_metal_defaults(),
|
||||||
-- Pipe connection
|
|
||||||
networks = {
|
networks = {
|
||||||
pipe2 = {
|
pipe2 = {
|
||||||
sides = {R=1},
|
sides = {R=1},
|
||||||
ntype = "pump",
|
ntype = "pump",
|
||||||
},
|
},
|
||||||
|
ele1 = {
|
||||||
|
sides = {L=1},
|
||||||
|
ntype = "con1",
|
||||||
|
on_power = on_power,
|
||||||
|
on_nopower = on_nopower,
|
||||||
|
nominal = PWR_NEEDED,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
-- for electrical connections
|
|
||||||
techage.power.enrich_node({"techage:ta4_reactor_stand"}, {
|
|
||||||
conn_sides = {"L"},
|
|
||||||
power_network = Cable,
|
|
||||||
on_power = on_power,
|
|
||||||
on_nopower = on_nopower,
|
|
||||||
})
|
|
||||||
|
|
||||||
-- controlled by the fillerpipe
|
-- controlled by the fillerpipe
|
||||||
techage.register_node({"techage:ta4_reactor_stand"}, {
|
techage.register_node({"techage:ta4_reactor_stand"}, {
|
||||||
on_transfer = function(pos, in_dir, topic, payload)
|
on_transfer = function(pos, in_dir, topic, payload)
|
||||||
@ -131,14 +149,13 @@ techage.register_node({"techage:ta4_reactor_stand"}, {
|
|||||||
return liquid.put(pos, outdir, payload.name, payload.amount, payload.player_name)
|
return liquid.put(pos, outdir, payload.name, payload.amount, payload.player_name)
|
||||||
elseif topic == "can_start" then
|
elseif topic == "can_start" then
|
||||||
return power.power_available(pos, Cable)
|
return power.power_available(pos, Cable)
|
||||||
elseif topic == "start" and payload then
|
elseif topic == "start" then
|
||||||
nvm.running = true
|
|
||||||
nvm.has_power = false
|
nvm.has_power = false
|
||||||
power.consumer_start(pos, Cable, CYCLE_TIME)
|
power.consumer_start(pos, Cable, CYCLE_TIME)
|
||||||
|
minetest.get_node_timer(pos):start(CYCLE_TIME)
|
||||||
M(pos):set_string("infotext", "...")
|
M(pos):set_string("infotext", "...")
|
||||||
return true
|
return true
|
||||||
elseif topic == "stop" then
|
elseif topic == "stop" then
|
||||||
nvm.running = false
|
|
||||||
nvm.has_power = false
|
nvm.has_power = false
|
||||||
power.consumer_stop(pos, Cable)
|
power.consumer_stop(pos, Cable)
|
||||||
minetest.get_node_timer(pos):stop()
|
minetest.get_node_timer(pos):stop()
|
||||||
@ -146,6 +163,12 @@ techage.register_node({"techage:ta4_reactor_stand"}, {
|
|||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
|
on_node_load = function(pos, node)
|
||||||
|
local nvm = techage.get_nvm(pos)
|
||||||
|
if nvm.has_power then
|
||||||
|
play_sound(pos)
|
||||||
|
end
|
||||||
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_node("techage:ta4_reactor_base", {
|
minetest.register_node("techage:ta4_reactor_base", {
|
||||||
@ -165,7 +188,7 @@ minetest.register_node("techage:ta4_reactor_base", {
|
|||||||
Pipe:after_place_node(pos)
|
Pipe:after_place_node(pos)
|
||||||
end,
|
end,
|
||||||
tubelib2_on_update2 = function(pos, dir, tlib2, node)
|
tubelib2_on_update2 = function(pos, dir, tlib2, node)
|
||||||
liquid.update_network(pos)
|
liquid.update_network(pos, dir, tlib2)
|
||||||
end,
|
end,
|
||||||
after_dig_node = function(pos, oldnode, oldmetadata, digger)
|
after_dig_node = function(pos, oldnode, oldmetadata, digger)
|
||||||
Pipe:after_dig_node(pos)
|
Pipe:after_dig_node(pos)
|
||||||
@ -190,6 +213,8 @@ Pipe:add_secondary_node_names({
|
|||||||
"techage:ta4_reactor_stand",
|
"techage:ta4_reactor_stand",
|
||||||
})
|
})
|
||||||
|
|
||||||
|
Cable:add_secondary_node_names({"techage:ta4_reactor_stand"})
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = 'techage:ta4_reactor_stand',
|
output = 'techage:ta4_reactor_stand',
|
||||||
recipe = {
|
recipe = {
|
||||||
|
@ -36,33 +36,31 @@ end
|
|||||||
|
|
||||||
local function node_timer(pos, elapsed)
|
local function node_timer(pos, elapsed)
|
||||||
local nvm = techage.get_nvm(pos)
|
local nvm = techage.get_nvm(pos)
|
||||||
if nvm.running then
|
local power = techage.transfer(
|
||||||
local power = techage.transfer(
|
{x=pos.x, y=pos.y+2, z=pos.z},
|
||||||
{x=pos.x, y=pos.y+2, z=pos.z},
|
nil, -- outdir
|
||||||
nil, -- outdir
|
"trigger", -- topic
|
||||||
"trigger", -- topic
|
nil, -- payload
|
||||||
nil, -- payload
|
nil, -- network
|
||||||
nil, -- network
|
{"techage:coalboiler_top"} -- nodenames
|
||||||
{"techage:coalboiler_top"} -- nodenames
|
)
|
||||||
)
|
nvm.burn_cycles = (nvm.burn_cycles or 0) - math.max((power or 0.02), 0.02)
|
||||||
nvm.burn_cycles = (nvm.burn_cycles or 0) - math.max((power or 0.02), 0.02)
|
if nvm.burn_cycles <= 0 then
|
||||||
if nvm.burn_cycles <= 0 then
|
local taken = firebox.get_fuel(pos)
|
||||||
local taken = firebox.get_fuel(pos)
|
if taken then
|
||||||
if taken then
|
nvm.burn_cycles = (firebox.Burntime[taken:get_name()] or 1) / CYCLE_TIME * BURN_CYCLE_FACTOR
|
||||||
nvm.burn_cycles = (firebox.Burntime[taken:get_name()] or 1) / CYCLE_TIME * BURN_CYCLE_FACTOR
|
nvm.burn_cycles_total = nvm.burn_cycles
|
||||||
nvm.burn_cycles_total = nvm.burn_cycles
|
else
|
||||||
else
|
nvm.running = false
|
||||||
nvm.running = false
|
firehole(pos, false)
|
||||||
firehole(pos, false)
|
|
||||||
M(pos):set_string("formspec", firebox.formspec(nvm))
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
end
|
|
||||||
if techage.is_activeformspec(pos) then
|
|
||||||
M(pos):set_string("formspec", firebox.formspec(nvm))
|
M(pos):set_string("formspec", firebox.formspec(nvm))
|
||||||
|
return false
|
||||||
end
|
end
|
||||||
return true
|
|
||||||
end
|
end
|
||||||
|
if techage.is_activeformspec(pos) then
|
||||||
|
M(pos):set_string("formspec", firebox.formspec(nvm))
|
||||||
|
end
|
||||||
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
local function start_firebox(pos, nvm)
|
local function start_firebox(pos, nvm)
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
TechAge
|
TechAge
|
||||||
=======
|
=======
|
||||||
|
|
||||||
Copyright (C) 2019 Joachim Stolberg
|
Copyright (C) 2019-2020 Joachim Stolberg
|
||||||
|
|
||||||
GPL v3
|
GPL v3
|
||||||
See LICENSE.txt for more information
|
See LICENSE.txt for more information
|
||||||
@ -23,7 +23,7 @@ local Pipe = techage.LiquidPipe
|
|||||||
local liquid = techage.liquid
|
local liquid = techage.liquid
|
||||||
|
|
||||||
local CYCLE_TIME = 2
|
local CYCLE_TIME = 2
|
||||||
local EFFICIENCY = 0.5
|
local BURN_CYCLE_FACTOR = 0.5
|
||||||
|
|
||||||
local function firehole(pos, on)
|
local function firehole(pos, on)
|
||||||
local param2 = techage.get_node_lvm(pos).param2
|
local param2 = techage.get_node_lvm(pos).param2
|
||||||
@ -39,36 +39,35 @@ end
|
|||||||
|
|
||||||
local function node_timer(pos, elapsed)
|
local function node_timer(pos, elapsed)
|
||||||
local nvm = techage.get_nvm(pos)
|
local nvm = techage.get_nvm(pos)
|
||||||
if nvm.running then
|
local power = techage.transfer(
|
||||||
-- trigger generator and provide power ratio 0..1
|
{x=pos.x, y=pos.y+2, z=pos.z},
|
||||||
local ratio = techage.transfer(
|
nil, -- outdir
|
||||||
{x=pos.x, y=pos.y+2, z=pos.z},
|
"trigger", -- topic
|
||||||
nil, -- outdir
|
nil, -- payload
|
||||||
"trigger", -- topic
|
nil, -- network
|
||||||
(nvm.power_level or 4)/4.0, -- payload
|
{"techage:coalboiler_top"} -- nodenames
|
||||||
nil, -- network
|
)
|
||||||
{"techage:coalboiler_top"} -- nodenames
|
nvm.burn_cycles = (nvm.burn_cycles or 0) - math.max((power or 0.02), 0.02)
|
||||||
)
|
if nvm.burn_cycles <= 0 then
|
||||||
ratio = math.max((ratio or 0.02), 0.02)
|
local liq_name = fuel.get_fuel(nvm)
|
||||||
nvm.burn_cycles = (nvm.burn_cycles or 0) - ratio
|
if liq_name then
|
||||||
if nvm.burn_cycles <= 0 then
|
nvm.burn_cycles = fuel.burntime(liq_name) / CYCLE_TIME * BURN_CYCLE_FACTOR
|
||||||
local taken = firebox.get_fuel(pos)
|
nvm.burn_cycles_total = nvm.burn_cycles
|
||||||
if taken then
|
else
|
||||||
nvm.burn_cycles = (firebox.Burntime[taken:get_name()] or 1) * EFFICIENCY / CYCLE_TIME
|
nvm.running = false
|
||||||
nvm.burn_cycles_total = nvm.burn_cycles
|
firehole(pos, false)
|
||||||
else
|
M(pos):set_string("formspec", fuel.formspec(nvm))
|
||||||
nvm.running = false
|
return false
|
||||||
firehole(pos, false)
|
|
||||||
M(pos):set_string("formspec", firebox.formspec(nvm))
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
return true
|
|
||||||
end
|
end
|
||||||
|
if techage.is_activeformspec(pos) then
|
||||||
|
M(pos):set_string("formspec", fuel.formspec(nvm))
|
||||||
|
end
|
||||||
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
local function start_firebox(pos, nvm)
|
local function start_firebox(pos, nvm)
|
||||||
if not nvm.running then
|
if not nvm.running and fuel.has_fuel(nvm) then
|
||||||
nvm.running = true
|
nvm.running = true
|
||||||
node_timer(pos, 0)
|
node_timer(pos, 0)
|
||||||
firehole(pos, true)
|
firehole(pos, true)
|
||||||
@ -76,162 +75,6 @@ local function start_firebox(pos, nvm)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
minetest.register_node("techage:coalfirebox", {
|
|
||||||
description = S("TA3 Power Station Firebox"),
|
|
||||||
inventory_image = "techage_coal_boiler_inv.png",
|
|
||||||
tiles = {"techage_coal_boiler_mesh_top.png"},
|
|
||||||
drawtype = "mesh",
|
|
||||||
mesh = "techage_cylinder_12.obj",
|
|
||||||
selection_box = {
|
|
||||||
type = "fixed",
|
|
||||||
fixed = {-13/32, -16/32, -13/32, 13/32, 16/32, 13/32},
|
|
||||||
},
|
|
||||||
|
|
||||||
paramtype = "light",
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
on_rotate = screwdriver.disallow,
|
|
||||||
groups = {cracky=2},
|
|
||||||
is_ground_content = false,
|
|
||||||
sounds = default.node_sound_stone_defaults(),
|
|
||||||
|
|
||||||
on_timer = node_timer,
|
|
||||||
can_dig = firebox.can_dig,
|
|
||||||
allow_metadata_inventory_put = firebox.allow_metadata_inventory_put,
|
|
||||||
allow_metadata_inventory_take = firebox.allow_metadata_inventory_take,
|
|
||||||
on_receive_fields = firebox.on_receive_fields,
|
|
||||||
on_rightclick = firebox.on_rightclick,
|
|
||||||
|
|
||||||
on_construct = function(pos)
|
|
||||||
local nvm = techage.get_nvm(pos)
|
|
||||||
techage.add_node(pos, "techage:coalfirebox")
|
|
||||||
nvm.running = false
|
|
||||||
nvm.burn_cycles = 0
|
|
||||||
nvm.power_level = 4
|
|
||||||
local meta = M(pos)
|
|
||||||
meta:set_string("formspec", firebox.formspec(nvm))
|
|
||||||
local inv = meta:get_inventory()
|
|
||||||
inv:set_size('fuel', 1)
|
|
||||||
firehole(pos, false)
|
|
||||||
end,
|
|
||||||
|
|
||||||
on_destruct = function(pos)
|
|
||||||
firehole(pos, nil)
|
|
||||||
end,
|
|
||||||
|
|
||||||
on_metadata_inventory_put = function(pos, listname, index, stack, player)
|
|
||||||
local nvm = techage.get_nvm(pos)
|
|
||||||
start_firebox(pos, nvm)
|
|
||||||
M(pos):set_string("formspec", firebox.formspec(nvm))
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node("techage:coalfirehole", {
|
|
||||||
description = S("TA3 Coal Power Station Firebox"),
|
|
||||||
tiles = {
|
|
||||||
-- up, down, right, left, back, front
|
|
||||||
"techage_coal_boiler.png",
|
|
||||||
"techage_coal_boiler.png",
|
|
||||||
"techage_coal_boiler.png",
|
|
||||||
"techage_coal_boiler.png",
|
|
||||||
"techage_coal_boiler.png",
|
|
||||||
"techage_coal_boiler.png^techage_appl_firehole.png",
|
|
||||||
},
|
|
||||||
drawtype = "nodebox",
|
|
||||||
node_box = {
|
|
||||||
type = "fixed",
|
|
||||||
fixed = {
|
|
||||||
{-6/16, -6/16, 6/16, 6/16, 6/16, 12/16},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
paramtype = "light",
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
pointable = false,
|
|
||||||
diggable = false,
|
|
||||||
is_ground_content = false,
|
|
||||||
groups = {not_in_creative_inventory=1},
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node("techage:coalfirehole_on", {
|
|
||||||
description = S("TA3 Coal Power Station Firebox"),
|
|
||||||
tiles = {
|
|
||||||
-- up, down, right, left, back, front
|
|
||||||
"techage_coal_boiler.png^[colorize:black:80",
|
|
||||||
"techage_coal_boiler.png^[colorize:black:80",
|
|
||||||
"techage_coal_boiler.png^[colorize:black:80",
|
|
||||||
"techage_coal_boiler.png^[colorize:black:80",
|
|
||||||
"techage_coal_boiler.png^[colorize:black:80",
|
|
||||||
{
|
|
||||||
image = "techage_coal_boiler4.png^[colorize:black:80^techage_appl_firehole4.png",
|
|
||||||
backface_culling = false,
|
|
||||||
animation = {
|
|
||||||
type = "vertical_frames",
|
|
||||||
aspect_w = 32,
|
|
||||||
aspect_h = 32,
|
|
||||||
length = 0.4,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
drawtype = "nodebox",
|
|
||||||
node_box = {
|
|
||||||
type = "fixed",
|
|
||||||
fixed = {
|
|
||||||
{-6/16, -6/16, 6/16, 6/16, 6/16, 12/16},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
paramtype = "light",
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
light_source = 8,
|
|
||||||
pointable = false,
|
|
||||||
diggable = false,
|
|
||||||
is_ground_content = false,
|
|
||||||
groups = {not_in_creative_inventory=1},
|
|
||||||
})
|
|
||||||
|
|
||||||
local function on_timer2(pos, elapsed)
|
|
||||||
local nvm = techage.get_nvm(pos)
|
|
||||||
if nvm.running then
|
|
||||||
fuel.formspec_update(pos, nvm)
|
|
||||||
-- trigger generator and provide power ratio 0..1
|
|
||||||
local ratio = techage.transfer(
|
|
||||||
{x=pos.x, y=pos.y+2, z=pos.z},
|
|
||||||
nil, -- outdir
|
|
||||||
"trigger", -- topic
|
|
||||||
(nvm.power_level or 4)/4.0, -- payload
|
|
||||||
nil, -- network
|
|
||||||
{"techage:coalboiler_top"} -- nodenames
|
|
||||||
)
|
|
||||||
ratio = math.max((ratio or 0.02), 0.02)
|
|
||||||
nvm.burn_cycles = (nvm.burn_cycles or 0) - ratio
|
|
||||||
nvm.liquid = nvm.liquid or {}
|
|
||||||
nvm.liquid.amount = nvm.liquid.amount or 0
|
|
||||||
if nvm.burn_cycles <= 0 then
|
|
||||||
if nvm.liquid.amount > 0 then
|
|
||||||
nvm.liquid.amount = nvm.liquid.amount - 1
|
|
||||||
nvm.burn_cycles = fuel.burntime(nvm.liquid.name) * EFFICIENCY / CYCLE_TIME
|
|
||||||
nvm.burn_cycles_total = nvm.burn_cycles
|
|
||||||
else
|
|
||||||
nvm.running = false
|
|
||||||
nvm.liquid.name = nil
|
|
||||||
firehole(pos, false)
|
|
||||||
M(pos):set_string("formspec", fuel.formspec(nvm))
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local function start_firebox2(pos, nvm)
|
|
||||||
if not nvm.running and nvm.liquid.amount > 0 then
|
|
||||||
nvm.running = true
|
|
||||||
on_timer2(pos, 0)
|
|
||||||
firehole(pos, true)
|
|
||||||
minetest.get_node_timer(pos):start(CYCLE_TIME)
|
|
||||||
M(pos):set_string("formspec", fuel.formspec(nvm))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
minetest.register_node("techage:oilfirebox", {
|
minetest.register_node("techage:oilfirebox", {
|
||||||
description = S("TA3 Power Station Oil Burner"),
|
description = S("TA3 Power Station Oil Burner"),
|
||||||
inventory_image = "techage_oil_boiler_inv.png",
|
inventory_image = "techage_oil_boiler_inv.png",
|
||||||
@ -250,16 +93,17 @@ minetest.register_node("techage:oilfirebox", {
|
|||||||
is_ground_content = false,
|
is_ground_content = false,
|
||||||
sounds = default.node_sound_stone_defaults(),
|
sounds = default.node_sound_stone_defaults(),
|
||||||
|
|
||||||
on_timer = on_timer2,
|
on_timer = node_timer,
|
||||||
can_dig = fuel.can_dig,
|
can_dig = fuel.can_dig,
|
||||||
allow_metadata_inventory_take = fuel.allow_metadata_inventory_take,
|
|
||||||
allow_metadata_inventory_put = fuel.allow_metadata_inventory_put,
|
allow_metadata_inventory_put = fuel.allow_metadata_inventory_put,
|
||||||
on_receive_fields = fuel.on_receive_fields,
|
allow_metadata_inventory_take = fuel.allow_metadata_inventory_take,
|
||||||
on_rightclick = fuel.on_rightclick,
|
on_rightclick = fuel.on_rightclick,
|
||||||
|
on_receive_fields = fuel.on_receive_fields,
|
||||||
|
on_punch = fuel.on_punch,
|
||||||
|
|
||||||
on_construct = function(pos)
|
on_construct = function(pos)
|
||||||
local nvm = techage.get_nvm(pos)
|
|
||||||
techage.add_node(pos, "techage:oilfirebox")
|
techage.add_node(pos, "techage:oilfirebox")
|
||||||
|
local nvm = techage.get_nvm(pos)
|
||||||
nvm.running = false
|
nvm.running = false
|
||||||
nvm.burn_cycles = 0
|
nvm.burn_cycles = 0
|
||||||
nvm.liquid = {}
|
nvm.liquid = {}
|
||||||
@ -279,7 +123,7 @@ minetest.register_node("techage:oilfirebox", {
|
|||||||
local nvm = techage.get_nvm(pos)
|
local nvm = techage.get_nvm(pos)
|
||||||
nvm.liquid = nvm.liquid or {}
|
nvm.liquid = nvm.liquid or {}
|
||||||
nvm.liquid.amount = nvm.liquid.amount or 0
|
nvm.liquid.amount = nvm.liquid.amount or 0
|
||||||
minetest.after(1, start_firebox2, pos, nvm)
|
minetest.after(1, start_firebox, pos, nvm)
|
||||||
fuel.on_metadata_inventory_put(pos, listname, index, stack, player)
|
fuel.on_metadata_inventory_put(pos, listname, index, stack, player)
|
||||||
end,
|
end,
|
||||||
|
|
||||||
@ -293,15 +137,26 @@ minetest.register_node("techage:oilfirebox", {
|
|||||||
local nvm = techage.get_nvm(pos)
|
local nvm = techage.get_nvm(pos)
|
||||||
nvm.liquid = nvm.liquid or {}
|
nvm.liquid = nvm.liquid or {}
|
||||||
nvm.liquid.amount = nvm.liquid.amount or 0
|
nvm.liquid.amount = nvm.liquid.amount or 0
|
||||||
start_firebox2(pos, nvm)
|
start_firebox(pos, nvm)
|
||||||
|
if techage.is_activeformspec(pos) then
|
||||||
|
local nvm = techage.get_nvm(pos)
|
||||||
|
M(pos):set_string("formspec", fuel.formspec(nvm))
|
||||||
|
end
|
||||||
return leftover
|
return leftover
|
||||||
end
|
end
|
||||||
return amount
|
return amount
|
||||||
end,
|
end,
|
||||||
take = liquid.srv_take,
|
take = function(pos, indir, name, amount)
|
||||||
|
amount, name = liquid.srv_take(pos, indir, name, amount)
|
||||||
|
if techage.is_activeformspec(pos) then
|
||||||
|
local nvm = techage.get_nvm(pos)
|
||||||
|
M(pos):set_string("formspec", fuel.formspec(nvm))
|
||||||
|
end
|
||||||
|
return amount, name
|
||||||
|
end
|
||||||
},
|
},
|
||||||
networks = {
|
networks = {
|
||||||
pipe = {
|
pipe2 = {
|
||||||
sides = techage.networks.AllSides, -- Pipe connection sides
|
sides = techage.networks.AllSides, -- Pipe connection sides
|
||||||
ntype = "tank",
|
ntype = "tank",
|
||||||
},
|
},
|
||||||
@ -311,45 +166,6 @@ minetest.register_node("techage:oilfirebox", {
|
|||||||
Pipe:add_secondary_node_names({"techage:oilfirebox"})
|
Pipe:add_secondary_node_names({"techage:oilfirebox"})
|
||||||
|
|
||||||
|
|
||||||
techage.register_node({"techage:coalfirebox"}, {
|
|
||||||
on_pull_item = function(pos, in_dir, num)
|
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
local inv = meta:get_inventory()
|
|
||||||
return techage.get_items(inv, "fuel", num)
|
|
||||||
end,
|
|
||||||
on_push_item = function(pos, in_dir, stack)
|
|
||||||
if firebox.Burntime[stack:get_name()] then
|
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
local inv = meta:get_inventory()
|
|
||||||
local nvm = techage.get_nvm(pos)
|
|
||||||
start_firebox(pos, nvm)
|
|
||||||
return techage.put_items(inv, "fuel", stack)
|
|
||||||
end
|
|
||||||
return false
|
|
||||||
end,
|
|
||||||
on_unpull_item = function(pos, in_dir, stack)
|
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
local inv = meta:get_inventory()
|
|
||||||
return techage.put_items(inv, "fuel", stack)
|
|
||||||
end,
|
|
||||||
on_recv_message = function(pos, src, topic, payload)
|
|
||||||
local nvm = techage.get_nvm(pos)
|
|
||||||
if topic == "state" then
|
|
||||||
if nvm.running then
|
|
||||||
return "running"
|
|
||||||
else
|
|
||||||
return "stopped"
|
|
||||||
end
|
|
||||||
elseif topic == "fuel" then
|
|
||||||
local inv = M(pos):get_inventory()
|
|
||||||
local stack = inv:get_stack("fuel", 1)
|
|
||||||
return stack:get_count()
|
|
||||||
else
|
|
||||||
return "unsupported"
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
|
|
||||||
techage.register_node({"techage:oilfirebox"}, {
|
techage.register_node({"techage:oilfirebox"}, {
|
||||||
on_recv_message = function(pos, src, topic, payload)
|
on_recv_message = function(pos, src, topic, payload)
|
||||||
local nvm = techage.get_nvm(pos)
|
local nvm = techage.get_nvm(pos)
|
||||||
@ -367,15 +183,6 @@ techage.register_node({"techage:oilfirebox"}, {
|
|||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_craft({
|
|
||||||
output = "techage:coalfirebox",
|
|
||||||
recipe = {
|
|
||||||
{'default:stone', 'default:stone', 'default:stone'},
|
|
||||||
{'default:steel_ingot', '', 'default:steel_ingot'},
|
|
||||||
{'default:stone', 'default:stone', 'default:stone'},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = "techage:oilfirebox",
|
output = "techage:oilfirebox",
|
||||||
recipe = {
|
recipe = {
|
||||||
@ -388,9 +195,11 @@ minetest.register_craft({
|
|||||||
minetest.register_lbm({
|
minetest.register_lbm({
|
||||||
label = "[techage] Power Station firebox",
|
label = "[techage] Power Station firebox",
|
||||||
name = "techage:steam_engine",
|
name = "techage:steam_engine",
|
||||||
nodenames = {"techage:coalfirebox", "techage:oilfirebox"},
|
nodenames = {"techage:oilfirebox"},
|
||||||
run_at_every_load = true,
|
run_at_every_load = true,
|
||||||
action = function(pos, node)
|
action = function(pos, node)
|
||||||
|
local nvm = techage.get_nvm(pos)
|
||||||
|
nvm.running = true
|
||||||
minetest.get_node_timer(pos):start(CYCLE_TIME)
|
minetest.get_node_timer(pos):start(CYCLE_TIME)
|
||||||
end
|
end
|
||||||
})
|
})
|
||||||
|
@ -41,7 +41,6 @@ local function node_timer(pos, elapsed)
|
|||||||
nvm.liquid = nvm.liquid or {}
|
nvm.liquid = nvm.liquid or {}
|
||||||
nvm.liquid.amount = nvm.liquid.amount or 0
|
nvm.liquid.amount = nvm.liquid.amount or 0
|
||||||
if nvm.running then
|
if nvm.running then
|
||||||
fuel.formspec_update(pos, nvm)
|
|
||||||
nvm.burn_cycles = (nvm.burn_cycles or 0) - 1
|
nvm.burn_cycles = (nvm.burn_cycles or 0) - 1
|
||||||
if nvm.burn_cycles <= 0 then
|
if nvm.burn_cycles <= 0 then
|
||||||
if nvm.liquid.amount > 0 then
|
if nvm.liquid.amount > 0 then
|
||||||
|
5
init.lua
5
init.lua
@ -119,6 +119,7 @@ else
|
|||||||
dofile(MP.."/coal_power_station/generator.lua")
|
dofile(MP.."/coal_power_station/generator.lua")
|
||||||
dofile(MP.."/coal_power_station/turbine.lua")
|
dofile(MP.."/coal_power_station/turbine.lua")
|
||||||
dofile(MP.."/coal_power_station/cooler.lua")
|
dofile(MP.."/coal_power_station/cooler.lua")
|
||||||
|
dofile(MP.."/coal_power_station/oilfirebox.lua")
|
||||||
|
|
||||||
-- -- Industrial Furnace
|
-- -- Industrial Furnace
|
||||||
dofile(MP.."/furnace/firebox.lua")
|
dofile(MP.."/furnace/firebox.lua")
|
||||||
@ -199,8 +200,8 @@ else
|
|||||||
|
|
||||||
-- -- Chemistry
|
-- -- Chemistry
|
||||||
dofile(MP.."/chemistry/ta4_reactor.lua")
|
dofile(MP.."/chemistry/ta4_reactor.lua")
|
||||||
-- dofile(MP.."/chemistry/ta4_stand.lua")
|
dofile(MP.."/chemistry/ta4_stand.lua")
|
||||||
-- dofile(MP.."/chemistry/ta4_doser.lua")
|
dofile(MP.."/chemistry/ta4_doser.lua")
|
||||||
|
|
||||||
-- -- Hydrogen
|
-- -- Hydrogen
|
||||||
-- dofile(MP.."/hydrogen/fuelcellstack.lua")
|
-- dofile(MP.."/hydrogen/fuelcellstack.lua")
|
||||||
|
@ -1,268 +0,0 @@
|
|||||||
--[[
|
|
||||||
|
|
||||||
TechAge
|
|
||||||
=======
|
|
||||||
|
|
||||||
Copyright (C) 2019-2020 Joachim Stolberg
|
|
||||||
|
|
||||||
GPL v3
|
|
||||||
See LICENSE.txt for more information
|
|
||||||
|
|
||||||
Oil fuel burning lib
|
|
||||||
|
|
||||||
]]--
|
|
||||||
|
|
||||||
local S2P = minetest.string_to_pos
|
|
||||||
local P2S = minetest.pos_to_string
|
|
||||||
local M = minetest.get_meta
|
|
||||||
local S = techage.S
|
|
||||||
local LQD = function(pos) return (minetest.registered_nodes[techage.get_node_lvm(pos).name] or {}).liquid end
|
|
||||||
local Pipe = techage.LiquidPipe
|
|
||||||
local liquid = techage.liquid
|
|
||||||
local ValidOilFuels = techage.firebox.ValidOilFuels
|
|
||||||
local Burntime = techage.firebox.Burntime
|
|
||||||
|
|
||||||
techage.fuel = {}
|
|
||||||
|
|
||||||
local CAPACITY = 50
|
|
||||||
local BLOCKING_TIME = 0.3 -- 300ms
|
|
||||||
|
|
||||||
techage.fuel.CAPACITY = CAPACITY
|
|
||||||
|
|
||||||
-- fuel burning categories (better than...)
|
|
||||||
techage.fuel.BT_BITUMEN = 4
|
|
||||||
techage.fuel.BT_OIL = 3
|
|
||||||
techage.fuel.BT_FUELOIL = 2
|
|
||||||
techage.fuel.BT_NAPHTHA = 1
|
|
||||||
|
|
||||||
|
|
||||||
function techage.fuel.fuel_container(x, y, nvm)
|
|
||||||
local itemname = ""
|
|
||||||
if nvm.liquid and nvm.liquid.name and nvm.liquid.amount and nvm.liquid.amount > 0 then
|
|
||||||
itemname = nvm.liquid.name.." "..nvm.liquid.amount
|
|
||||||
end
|
|
||||||
local fuel_percent = 0
|
|
||||||
if nvm.running then
|
|
||||||
fuel_percent = ((nvm.burn_cycles or 1) * 100) / (nvm.burn_cycles_total or 1)
|
|
||||||
end
|
|
||||||
return "container["..x..","..y.."]"..
|
|
||||||
"box[0,0;1.05,2.1;#000000]"..
|
|
||||||
"image[0.1,0.1;1,1;default_furnace_fire_bg.png^[lowpart:"..
|
|
||||||
fuel_percent..":default_furnace_fire_fg.png]"..
|
|
||||||
techage.item_image(0.1, 1.1, itemname)..
|
|
||||||
"container_end[]"
|
|
||||||
end
|
|
||||||
|
|
||||||
local function help(x, y)
|
|
||||||
local tooltip = S("To add fuel punch\nthis block\nwith a fuel container")
|
|
||||||
return "label["..x..","..y..";"..minetest.colorize("#000000", minetest.formspec_escape("[?]")).."]"..
|
|
||||||
"tooltip["..x..","..y..";0.5,0.5;"..tooltip..";#0C3D32;#FFFFFF]"
|
|
||||||
end
|
|
||||||
|
|
||||||
function techage.fuel.formspec(nvm)
|
|
||||||
local title = S("Fuel Menu")
|
|
||||||
return "size[4,3]"..
|
|
||||||
default.gui_bg..
|
|
||||||
default.gui_bg_img..
|
|
||||||
default.gui_slots..
|
|
||||||
"box[0,-0.1;3.8,0.5;#c6e8ff]"..
|
|
||||||
"label[1,-0.1;"..minetest.colorize("#000000", title).."]"..
|
|
||||||
help(3.4, -0.1)..
|
|
||||||
techage.fuel.fuel_container(1.5, 1, nvm)
|
|
||||||
end
|
|
||||||
|
|
||||||
--local function fill_container(pos, inv, nvm)
|
|
||||||
-- nvm.liquid = nvm.liquid or {}
|
|
||||||
-- nvm.liquid.amount = nvm.liquid.amount or 0
|
|
||||||
-- local empty_container = inv:get_stack("fuel", 1):get_name()
|
|
||||||
-- local full_container = liquid.get_full_container(empty_container, nvm.liquid.name)
|
|
||||||
-- if empty_container and full_container then
|
|
||||||
-- local ldef = liquid.get_liquid_def(full_container)
|
|
||||||
-- if ldef and nvm.liquid.amount - ldef.size >= 0 then
|
|
||||||
-- inv:remove_item("fuel", ItemStack(empty_container))
|
|
||||||
-- inv:add_item("fuel", ItemStack(full_container))
|
|
||||||
-- nvm.liquid.amount = nvm.liquid.amount - ldef.size
|
|
||||||
-- if nvm.liquid.amount == 0 then
|
|
||||||
-- nvm.liquid.name = nil
|
|
||||||
-- end
|
|
||||||
-- end
|
|
||||||
-- end
|
|
||||||
--end
|
|
||||||
|
|
||||||
--local function empty_container(pos, inv, nvm)
|
|
||||||
-- nvm.liquid = nvm.liquid or {}
|
|
||||||
-- nvm.liquid.amount = nvm.liquid.amount or 0
|
|
||||||
-- local stack = inv:get_stack("fuel", 1)
|
|
||||||
-- if stack:get_count() == 1 then
|
|
||||||
-- local ldef = liquid.get_liquid_def(stack:get_name())
|
|
||||||
-- if ldef and ValidOilFuels[ldef.inv_item] then
|
|
||||||
-- if not nvm.liquid.name or ldef.inv_item == nvm.liquid.name then
|
|
||||||
-- if nvm.liquid.amount + ldef.size <= CAPACITY then
|
|
||||||
-- inv:remove_item("fuel", stack)
|
|
||||||
-- inv:add_item("fuel", ItemStack(ldef.container))
|
|
||||||
-- nvm.liquid.amount = nvm.liquid.amount + ldef.size
|
|
||||||
-- nvm.liquid.name = ldef.inv_item
|
|
||||||
-- end
|
|
||||||
-- end
|
|
||||||
-- end
|
|
||||||
-- end
|
|
||||||
--end
|
|
||||||
|
|
||||||
--local function move_item(pos, stack)
|
|
||||||
-- local nvm = techage.get_nvm(pos)
|
|
||||||
-- local inv = M(pos):get_inventory()
|
|
||||||
-- if liquid.is_container_empty(stack:get_name()) then
|
|
||||||
-- fill_container(pos, inv, nvm)
|
|
||||||
-- else
|
|
||||||
-- empty_container(pos, inv, nvm)
|
|
||||||
-- end
|
|
||||||
-- M(pos):set_string("formspec", techage.fuel.formspec(nvm))
|
|
||||||
--end
|
|
||||||
|
|
||||||
--function techage.fuel.move_item(pos, stack, formspec)
|
|
||||||
-- local nvm = techage.get_nvm(pos)
|
|
||||||
-- local inv = M(pos):get_inventory()
|
|
||||||
-- if liquid.is_container_empty(stack:get_name()) then
|
|
||||||
-- fill_container(pos, inv, nvm)
|
|
||||||
-- else
|
|
||||||
-- empty_container(pos, inv, nvm)
|
|
||||||
-- end
|
|
||||||
-- M(pos):set_string("formspec", formspec(pos, nvm))
|
|
||||||
--end
|
|
||||||
|
|
||||||
--function techage.fuel.allow_metadata_inventory_put(pos, listname, index, stack, player)
|
|
||||||
-- if minetest.is_protected(pos, player:get_player_name()) then
|
|
||||||
-- return 0
|
|
||||||
-- end
|
|
||||||
-- if liquid.is_container_empty(stack:get_name()) then
|
|
||||||
-- return 1
|
|
||||||
-- end
|
|
||||||
-- local category = LQD(pos).fuel_cat
|
|
||||||
-- local ldef = liquid.get_liquid_def(stack:get_name())
|
|
||||||
-- if ldef and ValidOilFuels[ldef.inv_item] and ValidOilFuels[ldef.inv_item] <= category then
|
|
||||||
-- return 1
|
|
||||||
-- end
|
|
||||||
-- return 0
|
|
||||||
--end
|
|
||||||
|
|
||||||
--function techage.fuel.allow_metadata_inventory_take(pos, listname, index, stack, player)
|
|
||||||
-- if minetest.is_protected(pos, player:get_player_name()) then
|
|
||||||
-- return 0
|
|
||||||
-- end
|
|
||||||
-- return stack:get_count()
|
|
||||||
--end
|
|
||||||
|
|
||||||
--function techage.fuel.on_metadata_inventory_put(pos, listname, index, stack, player)
|
|
||||||
-- minetest.after(0.5, move_item, pos, stack)
|
|
||||||
--end
|
|
||||||
|
|
||||||
function techage.fuel.can_dig(pos, player)
|
|
||||||
if minetest.is_protected(pos, player:get_player_name()) then
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
local nvm = techage.get_nvm(pos)
|
|
||||||
nvm.liquid = nvm.liquid or {}
|
|
||||||
nvm.liquid.amount = nvm.liquid.amount or 0
|
|
||||||
local inv = M(pos):get_inventory()
|
|
||||||
return inv:is_empty("fuel") and nvm.liquid.amount == 0
|
|
||||||
end
|
|
||||||
|
|
||||||
function techage.fuel.on_rightclick(pos, node, clicker)
|
|
||||||
techage.set_activeformspec(pos, clicker)
|
|
||||||
local nvm = techage.get_nvm(pos)
|
|
||||||
M(pos):set_string("formspec", techage.fuel.formspec(nvm))
|
|
||||||
end
|
|
||||||
|
|
||||||
--function techage.fuel.on_receive_fields(pos, formname, fields, player)
|
|
||||||
-- if minetest.is_protected(pos, player:get_player_name()) then
|
|
||||||
-- return
|
|
||||||
-- end
|
|
||||||
-- local nvm = techage.get_nvm(pos)
|
|
||||||
-- nvm.countdown = 10
|
|
||||||
-- M(pos):set_string("formspec", techage.fuel.formspec(nvm))
|
|
||||||
--end
|
|
||||||
|
|
||||||
--function techage.fuel.formspec_update(pos, nvm)
|
|
||||||
-- if nvm.countdown and nvm.countdown > 0 then
|
|
||||||
-- nvm.countdown = nvm.countdown - 1
|
|
||||||
-- M(pos):set_string("formspec", techage.fuel.formspec(nvm))
|
|
||||||
-- end
|
|
||||||
--end
|
|
||||||
|
|
||||||
-- name is the fuel item name
|
|
||||||
function techage.fuel.burntime(name)
|
|
||||||
if ValidOilFuels[name] then
|
|
||||||
return Burntime[name] or 0.01 -- not zero !
|
|
||||||
end
|
|
||||||
return 0.01 -- not zero !
|
|
||||||
end
|
|
||||||
|
|
||||||
function techage.fuel.valid_fuel(name, category)
|
|
||||||
return ValidOilFuels[name] and ValidOilFuels[name] <= category
|
|
||||||
end
|
|
||||||
|
|
||||||
-- check if the given empty container can be replaced by a full
|
|
||||||
-- container and added to the players inventory
|
|
||||||
local function fill(nvm, empty_container, item_count, puncher)
|
|
||||||
nvm.liquid = nvm.liquid or {}
|
|
||||||
nvm.liquid.amount = nvm.liquid.amount or 0
|
|
||||||
local full_container = liquid.get_full_container(empty_container, nvm.liquid.name)
|
|
||||||
if empty_container and full_container then
|
|
||||||
local item = ItemStack(full_container) -- to be added
|
|
||||||
local ldef = liquid.get_liquid_def(full_container)
|
|
||||||
if ldef and nvm.liquid.amount - ldef.size >= 0 then
|
|
||||||
if item_count > 1 then -- can't be simply replaced?
|
|
||||||
-- check for extra free space
|
|
||||||
local inv = puncher:get_inventory()
|
|
||||||
if inv:room_for_item("main", item) then
|
|
||||||
-- add full container and return
|
|
||||||
-- the empty once - 1
|
|
||||||
inv:add_item("main", item)
|
|
||||||
item = {name = empty_container, count = item_count - 1}
|
|
||||||
else
|
|
||||||
return -- no free space
|
|
||||||
end
|
|
||||||
end
|
|
||||||
nvm.liquid.amount = nvm.liquid.amount - ldef.size
|
|
||||||
if nvm.liquid.amount == 0 then
|
|
||||||
nvm.liquid.name = nil
|
|
||||||
end
|
|
||||||
return item -- to be added to the players inv.
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local function empty(nvm, full_container)
|
|
||||||
nvm.liquid = nvm.liquid or {}
|
|
||||||
nvm.liquid.amount = nvm.liquid.amount or 0
|
|
||||||
local ldef = liquid.get_liquid_def(full_container)
|
|
||||||
if ldef and ValidOilFuels[ldef.inv_item] then
|
|
||||||
if not nvm.liquid.name or ldef.inv_item == nvm.liquid.name then
|
|
||||||
if nvm.liquid.amount + ldef.size <= CAPACITY then
|
|
||||||
nvm.liquid.amount = nvm.liquid.amount + ldef.size
|
|
||||||
nvm.liquid.name = ldef.inv_item
|
|
||||||
return ItemStack(ldef.container)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function techage.fuel.on_punch(pos, node, puncher, pointed_thing)
|
|
||||||
local nvm = techage.get_nvm(pos)
|
|
||||||
local mem = techage.get_mem(pos)
|
|
||||||
mem.blocking_time = mem.blocking_time or 0
|
|
||||||
if mem.blocking_time > techage.SystemTime then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
local wielded_item = puncher:get_wielded_item():get_name()
|
|
||||||
local item_count = puncher:get_wielded_item():get_count()
|
|
||||||
local new_item = fill(nvm, wielded_item, item_count, puncher)
|
|
||||||
or empty(nvm, wielded_item)
|
|
||||||
if new_item then
|
|
||||||
puncher:set_wielded_item(ItemStack(new_item))
|
|
||||||
M(pos):set_string("formspec", techage.fuel.formspec(pos, nvm))
|
|
||||||
mem.blocking_time = techage.SystemTime + BLOCKING_TIME
|
|
||||||
return
|
|
||||||
end
|
|
||||||
end
|
|
@ -41,7 +41,7 @@ local function after_place_node(pos, placer)
|
|||||||
end
|
end
|
||||||
|
|
||||||
local function tubelib2_on_update2(pos, dir, tlib2, node)
|
local function tubelib2_on_update2(pos, dir, tlib2, node)
|
||||||
liquid.update_network(pos)
|
liquid.update_network(pos, dir, tlib2)
|
||||||
end
|
end
|
||||||
|
|
||||||
local function after_dig_node(pos, oldnode, oldmetadata, digger)
|
local function after_dig_node(pos, oldnode, oldmetadata, digger)
|
||||||
|
@ -96,6 +96,7 @@ local function start_node(pos)
|
|||||||
if power.power_available(pos, Cable) then
|
if power.power_available(pos, Cable) then
|
||||||
nvm.running = true
|
nvm.running = true
|
||||||
power.consumer_start(pos, Cable, CYCLE_TIME)
|
power.consumer_start(pos, Cable, CYCLE_TIME)
|
||||||
|
minetest.get_node_timer(pos):start(CYCLE_TIME)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -105,14 +106,14 @@ local function node_timer(pos, elapsed)
|
|||||||
nvm.liquid = nvm.liquid or {}
|
nvm.liquid = nvm.liquid or {}
|
||||||
nvm.liquid.amount = nvm.liquid.amount or 0
|
nvm.liquid.amount = nvm.liquid.amount or 0
|
||||||
|
|
||||||
power.consumer_alive(pos, nvm)
|
power.consumer_alive(pos, Cable, CYCLE_TIME)
|
||||||
|
|
||||||
if nvm.liquid.amount >= 5 and nvm.liquid.name == "techage:oil_source" then
|
if nvm.liquid.amount >= 5 and nvm.liquid.name == "techage:oil_source" then
|
||||||
nvm.liquid.amount = nvm.liquid.amount - 5
|
nvm.liquid.amount = nvm.liquid.amount - 5
|
||||||
local leftover = pump_cmnd(pos, "put")
|
local leftover = pump_cmnd(pos, "put")
|
||||||
if (tonumber(leftover) or 1) > 0 then
|
if (tonumber(leftover) or 1) > 0 then
|
||||||
nvm.liquid.amount = nvm.liquid.amount + 5
|
nvm.liquid.amount = nvm.liquid.amount + 5
|
||||||
nvm.error = 25 -- = 5 pump cycles
|
nvm.error = 2 -- = 2 pump cycles
|
||||||
M(pos):set_string("infotext", S("TA3 Oil Reboiler: blocked"))
|
M(pos):set_string("infotext", S("TA3 Oil Reboiler: blocked"))
|
||||||
swap_node(pos, false)
|
swap_node(pos, false)
|
||||||
return false
|
return false
|
||||||
@ -135,8 +136,9 @@ local function after_dig_node(pos, oldnode)
|
|||||||
end
|
end
|
||||||
|
|
||||||
local function tubelib2_on_update2(pos, outdir, tlib2, node)
|
local function tubelib2_on_update2(pos, outdir, tlib2, node)
|
||||||
if tlib2 == Pipe then
|
print("tubelib2_on_update2", tlib2.tube_type)
|
||||||
liquid.update_network(pos, outdir)
|
if tlib2.tube_type == "pipe2" then
|
||||||
|
liquid.update_network(pos, outdir, tlib2)
|
||||||
else
|
else
|
||||||
power.update_network(pos, outdir, tlib2)
|
power.update_network(pos, outdir, tlib2)
|
||||||
end
|
end
|
||||||
@ -196,6 +198,9 @@ minetest.register_node("techage:ta3_reboiler", {
|
|||||||
local meta = M(pos)
|
local meta = M(pos)
|
||||||
meta:set_string("infotext", S("TA3 Oil Reboiler"))
|
meta:set_string("infotext", S("TA3 Oil Reboiler"))
|
||||||
meta:set_int("outdir", networks.side_to_outdir(pos, "R"))
|
meta:set_int("outdir", networks.side_to_outdir(pos, "R"))
|
||||||
|
local number = techage.add_node(pos, "techage:ta3_reboiler")
|
||||||
|
meta:set_string("node_number", number)
|
||||||
|
meta:set_string("owner", placer:get_player_name())
|
||||||
Pipe:after_place_node(pos)
|
Pipe:after_place_node(pos)
|
||||||
power.after_place_node(pos)
|
power.after_place_node(pos)
|
||||||
end,
|
end,
|
||||||
@ -261,6 +266,33 @@ minetest.register_node("techage:ta3_reboiler_on", {
|
|||||||
Pipe:add_secondary_node_names({"techage:ta3_reboiler", "techage:ta3_reboiler_on"})
|
Pipe:add_secondary_node_names({"techage:ta3_reboiler", "techage:ta3_reboiler_on"})
|
||||||
Cable:add_secondary_node_names({"techage:ta3_reboiler", "techage:ta3_reboiler_on"})
|
Cable:add_secondary_node_names({"techage:ta3_reboiler", "techage:ta3_reboiler_on"})
|
||||||
|
|
||||||
|
techage.register_node({"techage:ta3_reboiler", "techage:ta3_reboiler_on"}, {
|
||||||
|
on_recv_message = function(pos, src, topic, payload)
|
||||||
|
local nvm = techage.get_nvm(pos)
|
||||||
|
if topic == "on" then
|
||||||
|
start_node(pos)
|
||||||
|
return true
|
||||||
|
elseif topic == "off" then
|
||||||
|
swap_node(pos, false)
|
||||||
|
return true
|
||||||
|
elseif topic == "state" then
|
||||||
|
if nvm.error and nvm.error > 0 then
|
||||||
|
return "blocked"
|
||||||
|
elseif nvm.running then
|
||||||
|
return "running"
|
||||||
|
end
|
||||||
|
return "stopped"
|
||||||
|
else
|
||||||
|
return "unsupported"
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
on_node_load = function(pos, node)
|
||||||
|
if node.name == "techage:ta3_reboiler_on" then
|
||||||
|
play_sound(pos)
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = "techage:ta3_reboiler",
|
output = "techage:ta3_reboiler",
|
||||||
recipe = {
|
recipe = {
|
||||||
|
@ -126,7 +126,7 @@ function techage.power.power_distribution(network, tlib_type)
|
|||||||
network.available2 = get_generator_sum(network.gen2, tlib_type)
|
network.available2 = get_generator_sum(network.gen2, tlib_type)
|
||||||
network.needed1 = get_consumer_sum(network.con1, tlib_type)
|
network.needed1 = get_consumer_sum(network.con1, tlib_type)
|
||||||
network.needed2 = get_consumer_sum(network.con2, tlib_type)
|
network.needed2 = get_consumer_sum(network.con2, tlib_type)
|
||||||
print(network.available1, network.available2, network.needed1, network.needed2, network.alive)
|
--print(network.available1, network.available2, network.needed1, network.needed2, network.alive)
|
||||||
|
|
||||||
-- store results
|
-- store results
|
||||||
network.on = network.available1 + network.available2 >= network.needed1
|
network.on = network.available1 + network.available2 >= network.needed1
|
||||||
|
Binary file not shown.
Loading…
Reference in New Issue
Block a user