delete EOL blanks
This commit is contained in:
parent
ae35581c61
commit
8a21364d4b
@ -7,7 +7,7 @@
|
||||
|
||||
GPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
Demo for a electrical power consuming node
|
||||
|
||||
]]--
|
||||
@ -62,7 +62,7 @@ end
|
||||
minetest.register_node("techage:sink", {
|
||||
description = "Sink",
|
||||
tiles = {'techage_electric_button.png^[colorize:#000000:50'},
|
||||
|
||||
|
||||
on_timer = function(pos, elapsed)
|
||||
local consumed = power.consume_power(pos, Cable, nil, PWR_NEEDED)
|
||||
if consumed == PWR_NEEDED then
|
||||
@ -76,7 +76,7 @@ minetest.register_node("techage:sink", {
|
||||
after_dig_node = after_dig_node,
|
||||
|
||||
paramtype = "light",
|
||||
light_source = 0,
|
||||
light_source = 0,
|
||||
paramtype2 = "facedir",
|
||||
groups = {choppy = 2, cracky = 2, crumbly = 2},
|
||||
is_ground_content = false,
|
||||
@ -100,7 +100,7 @@ minetest.register_node("techage:sink_on", {
|
||||
after_dig_node = after_dig_node,
|
||||
|
||||
paramtype = "light",
|
||||
light_source = minetest.LIGHT_MAX,
|
||||
light_source = minetest.LIGHT_MAX,
|
||||
paramtype2 = "facedir",
|
||||
diggable = false,
|
||||
drop = "",
|
||||
@ -109,4 +109,4 @@ minetest.register_node("techage:sink_on", {
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
})
|
||||
|
||||
power.register_nodes({"techage:sink", "techage:sink_on"}, Cable, "con")
|
||||
power.register_nodes({"techage:sink", "techage:sink_on"}, Cable, "con")
|
@ -8,11 +8,11 @@
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
The autocrafter is derived from pipeworks:
|
||||
The autocrafter is derived from pipeworks:
|
||||
Copyright (C) 2004 Sam Hocevar <sam@hocevar.net> WTFPL
|
||||
|
||||
|
||||
TA2/TA3/TA4 Autocrafter
|
||||
|
||||
|
||||
]]--
|
||||
|
||||
-- for lazy programmers
|
||||
@ -69,7 +69,7 @@ local function count_index(invlist)
|
||||
end
|
||||
|
||||
-- caches some recipe data
|
||||
local autocrafterCache = {}
|
||||
local autocrafterCache = {}
|
||||
|
||||
local function get_craft(pos, inventory, hash)
|
||||
hash = hash or minetest.hash_node_position(pos)
|
||||
@ -78,13 +78,13 @@ local function get_craft(pos, inventory, hash)
|
||||
local recipe = inventory:get_list("recipe")
|
||||
local output, decremented_input = minetest.get_craft_result(
|
||||
{method = "normal", width = 3, items = recipe})
|
||||
|
||||
|
||||
-- check if registered item
|
||||
if UncraftableItems[output.item:get_name()] then
|
||||
if UncraftableItems[output.item:get_name()] then
|
||||
output.item = ItemStack()
|
||||
end
|
||||
|
||||
craft = {recipe = recipe, consumption = count_index(recipe),
|
||||
|
||||
craft = {recipe = recipe, consumption = count_index(recipe),
|
||||
output = output, decremented_input = decremented_input}
|
||||
autocrafterCache[hash] = craft
|
||||
end
|
||||
@ -93,18 +93,18 @@ end
|
||||
|
||||
local function autocraft(pos, crd, nvm, inv)
|
||||
local craft = get_craft(pos, inv)
|
||||
if not craft then
|
||||
if not craft then
|
||||
crd.State:idle(pos, nvm)
|
||||
return
|
||||
end
|
||||
local output_item = craft.output.item
|
||||
if output_item:get_name() == "" then
|
||||
crd.State:idle(pos, nvm)
|
||||
return
|
||||
return
|
||||
end
|
||||
|
||||
|
||||
-- check if we have enough room in dst
|
||||
if not inv:room_for_item("dst", output_item) then
|
||||
if not inv:room_for_item("dst", output_item) then
|
||||
crd.State:blocked(pos, nvm)
|
||||
return
|
||||
end
|
||||
@ -112,9 +112,9 @@ local function autocraft(pos, crd, nvm, inv)
|
||||
local inv_index = count_index(inv:get_list("src"))
|
||||
-- check if we have enough material available
|
||||
for itemname, number in pairs(consumption) do
|
||||
if (not inv_index[itemname]) or inv_index[itemname] < number then
|
||||
if (not inv_index[itemname]) or inv_index[itemname] < number then
|
||||
crd.State:idle(pos, nvm)
|
||||
return
|
||||
return
|
||||
end
|
||||
end
|
||||
-- consume material
|
||||
@ -129,7 +129,7 @@ local function autocraft(pos, crd, nvm, inv)
|
||||
for i = 1, 9 do
|
||||
inv:add_item("dst", craft.decremented_input.items[i])
|
||||
end
|
||||
|
||||
|
||||
crd.State:keep_running(pos, nvm, COUNTDOWN_TICKS)
|
||||
end
|
||||
|
||||
@ -230,7 +230,7 @@ local function determine_recipe_items(pos, input)
|
||||
if num and idx then
|
||||
input = get_input_from_recipeblock(pos, num, idx)
|
||||
end
|
||||
|
||||
|
||||
if input then
|
||||
-- "<item>,<item>,..." input
|
||||
local items = string.split(input, ",", true, 8)
|
||||
@ -452,7 +452,7 @@ local tubing = {
|
||||
end,
|
||||
}
|
||||
|
||||
local node_name_ta2, node_name_ta3, node_name_ta4 =
|
||||
local node_name_ta2, node_name_ta3, node_name_ta4 =
|
||||
techage.register_consumer("autocrafter", S("Autocrafter"), tiles, {
|
||||
drawtype = "normal",
|
||||
cycle_time = CYCLE_TIME,
|
||||
@ -511,4 +511,4 @@ local power = networks.power
|
||||
|
||||
techage.register_node_for_v1_transition({"techage:ta3_autocrafter_pas", "techage:ta4_autocrafter_pas"}, function(pos, node)
|
||||
power.update_network(pos, nil, Cable)
|
||||
end)
|
||||
end)
|
@ -9,7 +9,7 @@
|
||||
See LICENSE.txt for more information
|
||||
|
||||
All items and liquids disappear.
|
||||
|
||||
|
||||
]]--
|
||||
|
||||
local S = techage.S
|
||||
@ -70,7 +70,7 @@ minetest.register_craft({
|
||||
techage.register_node({"techage:blackhole"}, {
|
||||
on_pull_item = nil, -- not needed
|
||||
on_unpull_item = nil, -- not needed
|
||||
|
||||
|
||||
on_push_item = function(pos, in_dir, stack)
|
||||
local meta = minetest.get_meta(pos)
|
||||
if meta:get_int("push_dir") == in_dir then
|
||||
@ -86,4 +86,4 @@ liquid.register_nodes({"techage:blackhole"},
|
||||
put = put_liquid,
|
||||
take = take_liquid,
|
||||
}
|
||||
)
|
||||
)
|
@ -7,9 +7,9 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
TA2/TA3/TA4 Chest
|
||||
|
||||
|
||||
]]--
|
||||
|
||||
-- for lazy programmers
|
||||
@ -76,7 +76,7 @@ minetest.register_node("techage:chest_ta2", {
|
||||
local inv = meta:get_inventory()
|
||||
inv:set_size('main', 32)
|
||||
end,
|
||||
|
||||
|
||||
after_place_node = function(pos, placer)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("owner", placer:get_player_name())
|
||||
@ -86,7 +86,7 @@ minetest.register_node("techage:chest_ta2", {
|
||||
techage_set_numbers = function(pos, numbers, player_name)
|
||||
return techage.logic.set_numbers(pos, numbers, player_name, S("TA2 Protected Chest"))
|
||||
end,
|
||||
|
||||
|
||||
can_dig = can_dig,
|
||||
after_dig_node = after_dig_node,
|
||||
allow_metadata_inventory_put = allow_metadata_inventory_put,
|
||||
@ -126,7 +126,7 @@ minetest.register_node("techage:chest_ta3", {
|
||||
local inv = meta:get_inventory()
|
||||
inv:set_size('main', 40)
|
||||
end,
|
||||
|
||||
|
||||
after_place_node = function(pos, placer)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local number = techage.add_node(pos, "techage:chest_ta3")
|
||||
@ -139,7 +139,7 @@ minetest.register_node("techage:chest_ta3", {
|
||||
techage_set_numbers = function(pos, numbers, player_name)
|
||||
return techage.logic.set_numbers(pos, numbers, player_name, S("TA3 Protected Chest"))
|
||||
end,
|
||||
|
||||
|
||||
can_dig = can_dig,
|
||||
after_dig_node = after_dig_node,
|
||||
allow_metadata_inventory_put = allow_metadata_inventory_put,
|
||||
@ -180,7 +180,7 @@ techage.register_node({"techage:chest_ta2", "techage:chest_ta3"}, {
|
||||
return "unsupported"
|
||||
end
|
||||
end,
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
local function formspec4(pos)
|
||||
@ -227,7 +227,7 @@ local function ta4_allow_metadata_inventory_put(pos, listname, index, stack, pla
|
||||
if not public and minetest.is_protected(pos, player:get_player_name()) then
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
if listname == "main" then
|
||||
return stack:get_count()
|
||||
else
|
||||
@ -240,7 +240,7 @@ local function ta4_allow_metadata_inventory_take(pos, listname, index, stack, pl
|
||||
if not public and minetest.is_protected(pos, player:get_player_name()) then
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
if listname == "main" then
|
||||
return stack:get_count()
|
||||
else
|
||||
@ -253,7 +253,7 @@ local function ta4_allow_metadata_inventory_move(pos, from_list, from_index, to_
|
||||
if not public and minetest.is_protected(pos, player:get_player_name()) then
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
if from_list == "main" then
|
||||
return count
|
||||
else
|
||||
@ -279,7 +279,7 @@ minetest.register_node("techage:chest_ta4", {
|
||||
inv:set_size('main', 50)
|
||||
inv:set_size('conf', 50)
|
||||
end,
|
||||
|
||||
|
||||
after_place_node = function(pos, placer)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local number = techage.add_node(pos, "techage:chest_ta4")
|
||||
@ -293,7 +293,7 @@ minetest.register_node("techage:chest_ta4", {
|
||||
if minetest.is_protected(pos, player:get_player_name()) then
|
||||
return
|
||||
end
|
||||
|
||||
|
||||
local meta = minetest.get_meta(pos)
|
||||
local mem = techage.get_mem(pos)
|
||||
if fields.tab == "1" then
|
||||
@ -320,11 +320,11 @@ minetest.register_node("techage:chest_ta4", {
|
||||
meta:set_string("formspec", formspec4_cfg(pos))
|
||||
end
|
||||
end,
|
||||
|
||||
|
||||
techage_set_numbers = function(pos, numbers, player_name)
|
||||
return techage.logic.set_numbers(pos, numbers, player_name, S("TA4 Protected Chest"))
|
||||
end,
|
||||
|
||||
|
||||
can_dig = can_dig,
|
||||
after_dig_node = after_dig_node,
|
||||
allow_metadata_inventory_put = ta4_allow_metadata_inventory_put,
|
||||
@ -347,14 +347,14 @@ techage.register_node({"techage:chest_ta4"}, {
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
local mem = techage.get_mem(pos)
|
||||
|
||||
|
||||
mem.filter = mem.filter or mConf.item_filter(pos, TA4_INV_SIZE)
|
||||
mem.chest_configured = mem.chest_configured or not inv:is_empty("conf")
|
||||
|
||||
|
||||
if inv:is_empty("main") then
|
||||
return nil
|
||||
end
|
||||
|
||||
|
||||
if item_name then
|
||||
if mem.filter[item_name] or not mem.chest_configured then
|
||||
local taken = inv:remove_item("main", {name = item_name, count = num})
|
||||
@ -374,10 +374,10 @@ techage.register_node({"techage:chest_ta4"}, {
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
local mem = techage.get_mem(pos)
|
||||
|
||||
|
||||
mem.filter = mem.filter or mConf.item_filter(pos, TA4_INV_SIZE)
|
||||
mem.chest_configured = mem.chest_configured or not inv:is_empty("conf")
|
||||
|
||||
|
||||
if mem.chest_configured then
|
||||
local name = item:get_name()
|
||||
local stacks = mem.filter[name] or mem.filter["unconfigured"]
|
||||
@ -390,10 +390,10 @@ techage.register_node({"techage:chest_ta4"}, {
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
local mem = techage.get_mem(pos)
|
||||
|
||||
|
||||
mem.filter = mem.filter or mConf.item_filter(pos, TA4_INV_SIZE)
|
||||
mem.chest_configured = mem.chest_configured or not inv:is_empty("conf")
|
||||
|
||||
|
||||
if mem.chest_configured then
|
||||
local name = item:get_name()
|
||||
local stacks = mem.filter[name] or mem.filter["unconfigured"]
|
||||
@ -402,7 +402,7 @@ techage.register_node({"techage:chest_ta4"}, {
|
||||
return techage.put_items(inv, "main", item)
|
||||
end
|
||||
end,
|
||||
|
||||
|
||||
on_recv_message = function(pos, src, topic, payload)
|
||||
if topic == "state" then
|
||||
local meta = minetest.get_meta(pos)
|
||||
@ -412,7 +412,7 @@ techage.register_node({"techage:chest_ta4"}, {
|
||||
return "unsupported"
|
||||
end
|
||||
end,
|
||||
})
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "shapeless",
|
||||
@ -442,4 +442,4 @@ minetest.register_craft({
|
||||
type = "shapeless",
|
||||
output = "techage:chest_ta4",
|
||||
recipe = {"techage:chest_ta3", "default:chest"}
|
||||
})
|
||||
})
|
@ -65,7 +65,7 @@ techage.register_node(names, {
|
||||
return techage.safe_push_items(pos, push_dir, stack)
|
||||
end,
|
||||
is_pusher = true, -- is a pulling/pushing node
|
||||
})
|
||||
})
|
||||
|
||||
names = networks.register_junction("techage:ta4_concentrator", 2/8, Boxes, Tube, {
|
||||
description = S("TA4 Tube Concentrator"),
|
||||
@ -104,7 +104,7 @@ techage.register_node(names, {
|
||||
return techage.safe_push_items(pos, push_dir, stack)
|
||||
end,
|
||||
is_pusher = true, -- is a pulling/pushing node
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
minetest.register_craft({
|
||||
@ -123,4 +123,4 @@ minetest.register_craft({
|
||||
{"techage:ta4_tubeS", "", "techage:ta4_tubeS"},
|
||||
{"", "techage:ta4_tubeS", ""},
|
||||
},
|
||||
})
|
||||
})
|
@ -7,7 +7,7 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
Consumer node basis functionality.
|
||||
It handles:
|
||||
- up to 4 stages of nodes (TA2/TA3/TA4/TA5)
|
||||
@ -54,7 +54,7 @@ end
|
||||
local function node_timer_pas(pos, elapsed)
|
||||
local crd = CRD(pos)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
|
||||
|
||||
-- handle power consumption
|
||||
if crd.power_netw and techage.needs_power(nvm) then
|
||||
local consumed = power.consume_power(pos, crd.power_netw, nil, crd.power_consumption)
|
||||
@ -62,7 +62,7 @@ local function node_timer_pas(pos, elapsed)
|
||||
crd.State:start(pos, nvm)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
-- call the node timer routine
|
||||
if techage.is_operational(nvm) then
|
||||
nvm.node_timer_call_cyle = (nvm.node_timer_call_cyle or 0) + 1
|
||||
@ -77,7 +77,7 @@ end
|
||||
local function node_timer_act(pos, elapsed)
|
||||
local crd = CRD(pos)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
|
||||
|
||||
-- handle power consumption
|
||||
if crd.power_netw and techage.needs_power(nvm) then
|
||||
local consumed = power.consume_power(pos, crd.power_netw, nil, crd.power_consumption)
|
||||
@ -85,7 +85,7 @@ local function node_timer_act(pos, elapsed)
|
||||
crd.State:nopower(pos, nvm)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
-- call the node timer routine
|
||||
if techage.is_operational(nvm) then
|
||||
nvm.node_timer_call_cyle = (nvm.node_timer_call_cyle or 0) + 1
|
||||
@ -111,7 +111,7 @@ local function prepare_tiles(tiles, stage, power_png)
|
||||
return tbl
|
||||
end
|
||||
|
||||
-- 'validStates' is optional and can be used to e.g. enable
|
||||
-- 'validStates' is optional and can be used to e.g. enable
|
||||
-- only one TA2 node {false, true, false, false}
|
||||
function techage.register_consumer(base_name, inv_name, tiles, tNode, validStates, node_name_prefix)
|
||||
local names = {}
|
||||
@ -163,7 +163,7 @@ function techage.register_consumer(base_name, inv_name, tiles, tNode, validState
|
||||
State = tState,
|
||||
-- number of items to be processed per cycle
|
||||
num_items = tNode.num_items and tNode.num_items[stage],
|
||||
power_consumption = power_used and
|
||||
power_consumption = power_used and
|
||||
tNode.power_consumption[stage] or 0,
|
||||
node_timer = tNode.node_timer,
|
||||
cycle_time = tNode.cycle_time,
|
||||
@ -204,7 +204,7 @@ function techage.register_consumer(base_name, inv_name, tiles, tNode, validState
|
||||
techage.remove_node(pos, oldnode, oldmetadata)
|
||||
techage.del_mem(pos)
|
||||
end
|
||||
|
||||
|
||||
tNode.groups.not_in_creative_inventory = 0
|
||||
|
||||
local def_pas = {
|
||||
@ -285,14 +285,14 @@ function techage.register_consumer(base_name, inv_name, tiles, tNode, validState
|
||||
def_act[k] = v
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
minetest.register_node(name_act, def_act)
|
||||
|
||||
if power_used then
|
||||
power.register_nodes({name_pas, name_act}, power_network, "con", sides)
|
||||
end
|
||||
techage.register_node({name_pas, name_act}, tNode.tubing)
|
||||
|
||||
|
||||
if tNode.tube_sides then
|
||||
Tube:set_valid_sides(name_pas, get_keys(tNode.tube_sides))
|
||||
Tube:set_valid_sides(name_act, get_keys(tNode.tube_sides))
|
||||
@ -300,4 +300,4 @@ function techage.register_consumer(base_name, inv_name, tiles, tNode, validState
|
||||
end
|
||||
end
|
||||
return names[1], names[2], names[3], names[4]
|
||||
end
|
||||
end
|
@ -9,7 +9,7 @@
|
||||
See LICENSE.txt for more information
|
||||
|
||||
TA2/TA3/TA4 Distributor
|
||||
|
||||
|
||||
]]--
|
||||
|
||||
-- for lazy programmers
|
||||
@ -34,7 +34,7 @@ local INFO = [[Turn port on/off or read its state: command = 'port', payload = r
|
||||
|
||||
--local Side2Color = {B="red", L="green", F="blue", R="yellow"}
|
||||
local SlotColors = {"red", "green", "blue", "yellow"}
|
||||
local Num2Ascii = {"B", "L", "F", "R"}
|
||||
local Num2Ascii = {"B", "L", "F", "R"}
|
||||
local FilterCache = {} -- local cache for filter settings
|
||||
|
||||
local function filter_settings(pos)
|
||||
@ -72,9 +72,9 @@ local function filter_settings(pos)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
FilterCache[minetest.hash_node_position(pos)] = {
|
||||
ItemFilter = ItemFilter,
|
||||
ItemFilter = ItemFilter,
|
||||
OpenPorts = OpenPorts,
|
||||
}
|
||||
end
|
||||
@ -88,7 +88,7 @@ local function get_filter_settings(pos)
|
||||
-- }
|
||||
-- local OpenPorts = {3}
|
||||
-- return ItemFilter, OpenPorts
|
||||
|
||||
|
||||
local hash = minetest.hash_node_position(pos)
|
||||
if FilterCache[hash] == nil then
|
||||
filter_settings(pos)
|
||||
@ -111,8 +111,8 @@ local function blocking_checkbox(pos, filter, is_hp)
|
||||
M(pos):set_int("blocking", 0) -- disable blocking
|
||||
end
|
||||
return ""
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
local function formspec(self, pos, nvm)
|
||||
local filter = minetest.deserialize(M(pos):get_string("filter")) or {false,false,false,false}
|
||||
local is_hp = nvm.high_performance == true
|
||||
@ -185,7 +185,7 @@ end
|
||||
local function allow_metadata_inventory_put(pos, listname, index, stack, player)
|
||||
local inv = M(pos):get_inventory()
|
||||
local list = inv:get_list(listname)
|
||||
|
||||
|
||||
if minetest.is_protected(pos, player:get_player_name()) then
|
||||
return 0
|
||||
end
|
||||
@ -247,7 +247,7 @@ local function tubelib2_on_update2(pos, outdir, tlib2, node)
|
||||
is_ta4_tube = is_ta4_tube and techage.TA4tubes[node.name]
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
local nvm = techage.get_nvm(pos)
|
||||
local crd = CRD(pos)
|
||||
if CRD(pos).stage == 4 and not is_ta4_tube then
|
||||
@ -295,10 +295,10 @@ local function distributing(pos, inv, crd, nvm)
|
||||
local sum_num_pushed = 0
|
||||
local num_pushed = 0
|
||||
local blocking_mode = M(pos):get_int("blocking") == 1
|
||||
|
||||
|
||||
-- start searching after last position
|
||||
local offs = nvm.last_index or 1
|
||||
|
||||
|
||||
for i = 1, SRC_INV_SIZE do
|
||||
local idx = ((i + offs - 1) % 8) + 1
|
||||
local stack = inv:get_stack("src", idx)
|
||||
@ -308,7 +308,7 @@ local function distributing(pos, inv, crd, nvm)
|
||||
local stack_to_push = stack:peek_item(num_to_push)
|
||||
local filter = item_filter[item_name]
|
||||
num_pushed = 0
|
||||
|
||||
|
||||
if filter and #filter > 0 then
|
||||
-- Push items based on filter
|
||||
num_pushed = push_item(pos, filter, stack_to_push, num_to_push, nvm)
|
||||
@ -320,16 +320,16 @@ local function distributing(pos, inv, crd, nvm)
|
||||
-- Push items based on open ports
|
||||
num_pushed = push_item(pos, open_ports, stack_to_push, num_to_push, nvm)
|
||||
end
|
||||
|
||||
|
||||
sum_num_pushed = sum_num_pushed + num_pushed
|
||||
stack:take_item(num_pushed)
|
||||
inv:set_stack("src", idx, stack)
|
||||
if sum_num_pushed >= (nvm.num_items or crd.num_items) then
|
||||
if sum_num_pushed >= (nvm.num_items or crd.num_items) then
|
||||
nvm.last_index = idx
|
||||
break
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
if sum_num_pushed == 0 then
|
||||
crd.State:blocked(pos, nvm)
|
||||
else
|
||||
@ -370,9 +370,9 @@ local function on_receive_fields(pos, formname, fields, player)
|
||||
meta:set_int("blocking", fields.blocking == "true" and 1 or 0)
|
||||
end
|
||||
meta:set_string("filter", minetest.serialize(filter))
|
||||
|
||||
|
||||
filter_settings(pos)
|
||||
|
||||
|
||||
local nvm = techage.get_nvm(pos)
|
||||
if fields.state_button ~= nil then
|
||||
crd.State:state_button_event(pos, nvm, fields)
|
||||
@ -391,9 +391,9 @@ local function change_filter_settings(pos, slot, val)
|
||||
filter[num] = val == "on"
|
||||
end
|
||||
meta:set_string("filter", minetest.serialize(filter))
|
||||
|
||||
|
||||
filter_settings(pos)
|
||||
|
||||
|
||||
local nvm = techage.get_nvm(pos)
|
||||
meta:set_string("formspec", formspec(CRD(pos).State, pos, nvm))
|
||||
return true
|
||||
@ -474,7 +474,7 @@ local tubing = {
|
||||
else
|
||||
return change_filter_settings(pos, slot, val)
|
||||
end
|
||||
else
|
||||
else
|
||||
return CRD(pos).State:on_receive_message(pos, topic, payload)
|
||||
end
|
||||
end,
|
||||
@ -599,4 +599,4 @@ minetest.register_craft({
|
||||
{node_name_ta4, "default:copper_ingot"},
|
||||
{"default:mese_crystal_fragment", node_name_ta4},
|
||||
},
|
||||
})
|
||||
})
|
@ -9,7 +9,7 @@
|
||||
See LICENSE.txt for more information
|
||||
|
||||
TA2/TA3/TA4 Electronic Fab
|
||||
|
||||
|
||||
]]--
|
||||
|
||||
-- for lazy programmers
|
||||
@ -109,14 +109,14 @@ local function 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)
|
||||
local crd = CRD(pos)
|
||||
|
||||
if not nvm.running then
|
||||
|
||||
if not nvm.running then
|
||||
recipes.on_receive_fields(pos, formname, fields, player)
|
||||
end
|
||||
|
||||
|
||||
crd.State:state_button_event(pos, nvm, fields)
|
||||
M(pos):set_string("formspec", formspec(crd.State, pos, nvm))
|
||||
end
|
||||
@ -207,7 +207,7 @@ local tubing = {
|
||||
end,
|
||||
}
|
||||
|
||||
local node_name_ta2, node_name_ta3, node_name_ta4 =
|
||||
local node_name_ta2, node_name_ta3, node_name_ta4 =
|
||||
techage.register_consumer("electronic_fab", S("Electronic Fab"), tiles, {
|
||||
drawtype = "normal",
|
||||
cycle_time = CYCLE_TIME,
|
||||
@ -277,4 +277,3 @@ techage.recipes.register_craft_type("ta4_electronic_fab", {
|
||||
width = 2,
|
||||
height = 2,
|
||||
})
|
||||
|
||||
|
@ -9,7 +9,7 @@
|
||||
See LICENSE.txt for more information
|
||||
|
||||
Forceload block
|
||||
|
||||
|
||||
]]--
|
||||
|
||||
-- for lazy programmers
|
||||
@ -38,7 +38,7 @@ end
|
||||
local function remove_list_elem(list, x)
|
||||
local n = nil
|
||||
for idx, v in ipairs(list) do
|
||||
if vector.equals(v, x) then
|
||||
if vector.equals(v, x) then
|
||||
n = idx
|
||||
break
|
||||
end
|
||||
@ -59,12 +59,12 @@ local function postload_area(pos)
|
||||
minetest.after(60, postload_area, pos)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
local function add_pos(pos, player)
|
||||
local meta = player:get_meta()
|
||||
local lPos = minetest.deserialize(meta:get_string("techage_forceload_blocks")) or {}
|
||||
if not in_list(lPos, pos) and (#lPos < techage.max_num_forceload_blocks or
|
||||
creative and creative.is_enabled_for and
|
||||
creative and creative.is_enabled_for and
|
||||
creative.is_enabled_for(player:get_player_name())) then
|
||||
lPos[#lPos+1] = pos
|
||||
local meta = player:get_meta()
|
||||
@ -73,7 +73,7 @@ local function add_pos(pos, player)
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
|
||||
local function del_pos(pos, player)
|
||||
local meta = player:get_meta()
|
||||
local lPos = minetest.deserialize(meta:get_string("techage_forceload_blocks")) or {}
|
||||
@ -202,10 +202,10 @@ minetest.register_node("techage:forceload", {
|
||||
after_dig_node = after_dig_node,
|
||||
on_rightclick = on_rightclick,
|
||||
on_punch = on_punch,
|
||||
|
||||
|
||||
paramtype = "light",
|
||||
sunlight_propagates = true,
|
||||
groups = {choppy=2, cracky=2, crumbly=2,
|
||||
groups = {choppy=2, cracky=2, crumbly=2,
|
||||
digtron_protected = 1,
|
||||
not_in_creative_inventory = techage.max_num_forceload_blocks == 0 and 1 or 0},
|
||||
is_ground_content = false,
|
||||
@ -236,17 +236,17 @@ minetest.register_node("techage:forceloadtile", {
|
||||
{-4/16, -8/16, -4/16, 4/16, -15/32, 4/16},
|
||||
},
|
||||
},
|
||||
|
||||
|
||||
on_place = on_place,
|
||||
after_place_node = after_place_node,
|
||||
after_dig_node = after_dig_node,
|
||||
on_rightclick = on_rightclick,
|
||||
on_punch = on_punch,
|
||||
|
||||
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
sunlight_propagates = true,
|
||||
groups = {choppy=2, cracky=2, crumbly=2,
|
||||
groups = {choppy=2, cracky=2, crumbly=2,
|
||||
not_in_creative_inventory = techage.max_num_forceload_blocks == 0 and 1 or 0},
|
||||
is_ground_content = false,
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
@ -304,4 +304,4 @@ minetest.register_chatcommand("forceload", {
|
||||
return false, S("Priv missing")
|
||||
end
|
||||
end,
|
||||
})
|
||||
})
|
@ -7,16 +7,16 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
Tube support for default chests and furnace
|
||||
|
||||
|
||||
]]--
|
||||
|
||||
local OwnerCache = {
|
||||
}
|
||||
|
||||
-- Check if the chest is in the protected area of the owner
|
||||
local function is_owner(pos, meta)
|
||||
local function is_owner(pos, meta)
|
||||
local owner = meta:get_string("owner")
|
||||
local key = minetest.hash_node_position(pos)
|
||||
-- If successfull, store info in cache
|
||||
@ -27,7 +27,7 @@ local function is_owner(pos, meta)
|
||||
end
|
||||
return OwnerCache[key] == owner
|
||||
end
|
||||
|
||||
|
||||
|
||||
techage.register_node({"default:chest", "default:chest_open"}, {
|
||||
on_inv_request = function(pos, in_dir, access_type)
|
||||
@ -49,7 +49,7 @@ techage.register_node({"default:chest", "default:chest_open"}, {
|
||||
local inv = meta:get_inventory()
|
||||
return techage.put_items(inv, "main", stack)
|
||||
end,
|
||||
})
|
||||
})
|
||||
|
||||
techage.register_node({"default:chest_locked", "default:chest_locked_open"}, {
|
||||
on_inv_request = function(pos, in_dir, access_type)
|
||||
@ -75,7 +75,7 @@ techage.register_node({"default:chest_locked", "default:chest_locked_open"}, {
|
||||
local inv = meta:get_inventory()
|
||||
return techage.put_items(inv, "main", stack)
|
||||
end,
|
||||
})
|
||||
})
|
||||
|
||||
techage.register_node({"shop:shop"}, {
|
||||
on_inv_request = function(pos, in_dir, access_type)
|
||||
@ -101,7 +101,7 @@ techage.register_node({"shop:shop"}, {
|
||||
local inv = meta:get_inventory()
|
||||
return techage.put_items(inv, "register", stack)
|
||||
end,
|
||||
})
|
||||
})
|
||||
|
||||
techage.register_node({"default:furnace", "default:furnace_active"}, {
|
||||
on_pull_item = function(pos, in_dir, num)
|
||||
@ -124,7 +124,7 @@ techage.register_node({"default:furnace", "default:furnace_active"}, {
|
||||
local inv = meta:get_inventory()
|
||||
return techage.put_items(inv, "dst", stack)
|
||||
end,
|
||||
})
|
||||
})
|
||||
|
||||
techage.register_node({"mobs:beehive"}, {
|
||||
on_pull_item = function(pos, in_dir, num)
|
||||
@ -137,7 +137,7 @@ techage.register_node({"mobs:beehive"}, {
|
||||
local inv = meta:get_inventory()
|
||||
return techage.put_items(inv, "beehive", stack)
|
||||
end,
|
||||
})
|
||||
})
|
||||
|
||||
techage.register_node({"xdecor:hive"}, {
|
||||
on_pull_item = function(pos, in_dir, num)
|
||||
@ -150,4 +150,4 @@ techage.register_node({"xdecor:hive"}, {
|
||||
local inv = meta:get_inventory()
|
||||
return techage.put_items(inv, "honey", stack)
|
||||
end,
|
||||
})
|
||||
})
|
@ -7,9 +7,9 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
TA2 Gravel Rinser, washing sieved gravel to find more ores
|
||||
|
||||
|
||||
]]--
|
||||
|
||||
-- for lazy programmers
|
||||
@ -146,7 +146,7 @@ local function washing(pos, crd, nvm, inv)
|
||||
crd.State:keep_running(pos, nvm, COUNTDOWN_TICKS)
|
||||
return
|
||||
end
|
||||
|
||||
|
||||
local src = ItemStack("techage:sieved_gravel")
|
||||
local dst = ItemStack("default:sand")
|
||||
if inv:contains_item("src", src) then
|
||||
@ -255,7 +255,7 @@ local tubing = {
|
||||
end,
|
||||
}
|
||||
|
||||
local node_name_ta2, node_name_ta3, node_name_ta4 =
|
||||
local node_name_ta2, node_name_ta3, node_name_ta4 =
|
||||
techage.register_consumer("rinser", S("Gravel Rinser"), tiles, {
|
||||
drawtype = "nodebox",
|
||||
paramtype = "light",
|
||||
@ -329,8 +329,7 @@ function techage.add_rinser_recipe(recipe)
|
||||
recipe.items = {recipe.input}
|
||||
recipe.type = "rinsing"
|
||||
techage.recipes.register_craft(recipe)
|
||||
end
|
||||
end
|
||||
|
||||
techage.add_rinser_recipe({input="techage:sieved_gravel", output="techage:usmium_nuggets", probability=30})
|
||||
techage.add_rinser_recipe({input="techage:sieved_gravel", output="default:copper_lump", probability=15})
|
||||
|
||||
|
@ -7,9 +7,9 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
TA2/TA3/TA4 Gravel Sieve, sieving gravel to find ores
|
||||
|
||||
|
||||
]]--
|
||||
|
||||
-- for lazy programmers
|
||||
@ -179,7 +179,7 @@ local tubing = {
|
||||
end,
|
||||
}
|
||||
|
||||
local node_name_ta2, node_name_ta3, node_name_ta4 =
|
||||
local node_name_ta2, node_name_ta3, node_name_ta4 =
|
||||
techage.register_consumer("gravelsieve", S("Gravel Sieve"), tiles, {
|
||||
drawtype = "nodebox",
|
||||
paramtype = "light",
|
||||
@ -265,17 +265,17 @@ techage.recipes.register_craft_type("ta4_gravelsieve", {
|
||||
height = 1,
|
||||
})
|
||||
techage.recipes.register_craft({
|
||||
output = "techage:sieved_basalt_gravel",
|
||||
output = "techage:sieved_basalt_gravel",
|
||||
items = {"techage:basalt_gravel"},
|
||||
type = "ta2_gravelsieve",
|
||||
})
|
||||
techage.recipes.register_craft({
|
||||
output = "techage:sieved_basalt_gravel",
|
||||
output = "techage:sieved_basalt_gravel",
|
||||
items = {"techage:basalt_gravel"},
|
||||
type = "ta3_gravelsieve",
|
||||
})
|
||||
techage.recipes.register_craft({
|
||||
output = "techage:sieved_basalt_gravel",
|
||||
output = "techage:sieved_basalt_gravel",
|
||||
items = {"techage:basalt_gravel"},
|
||||
type = "ta4_gravelsieve",
|
||||
})
|
||||
})
|
@ -7,9 +7,9 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
TA2/TA3/TA4 Grinder, grinding Cobble/Basalt to Gravel
|
||||
|
||||
|
||||
]]--
|
||||
|
||||
-- for lazy programmers
|
||||
@ -98,7 +98,7 @@ local function src_to_dst(src_stack, idx, src_name, num_items, inp_num, inv, dst
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
|
||||
local function grinding(pos, crd, nvm, inv)
|
||||
local blocked = false -- idle
|
||||
for idx,stack in ipairs(inv:get_list("src")) do
|
||||
@ -211,7 +211,7 @@ local tubing = {
|
||||
end,
|
||||
}
|
||||
|
||||
local node_name_ta2, node_name_ta3, node_name_ta4 =
|
||||
local node_name_ta2, node_name_ta3, node_name_ta4 =
|
||||
techage.register_consumer("grinder", S("Grinder"), tiles, {
|
||||
drawtype = "nodebox",
|
||||
paramtype = "light",
|
||||
@ -313,7 +313,7 @@ techage.register_node({"techage:ta1_mill_base"}, {
|
||||
on_node_load = function(pos, node)
|
||||
minetest.get_node_timer(pos):start(4)
|
||||
end,
|
||||
})
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "techage:ta1_mill_base",
|
||||
@ -369,19 +369,19 @@ function techage.add_grinder_recipe(recipe, ta1_permitted)
|
||||
if minetest.registered_items[name] then
|
||||
if ta1_permitted then
|
||||
RecipesTa1[name] = {input = name,inp_num = tonumber(num) or 1, output = recipe.output}
|
||||
|
||||
|
||||
recipe.items = {recipe.input}
|
||||
recipe.type = "milling"
|
||||
techage.recipes.register_craft(table.copy(recipe))
|
||||
end
|
||||
|
||||
|
||||
Recipes[name] = {input = name,inp_num = tonumber(num) or 1, output = recipe.output}
|
||||
|
||||
|
||||
recipe.items = {recipe.input}
|
||||
recipe.type = "grinding"
|
||||
techage.recipes.register_craft(recipe)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
techage.add_grinder_recipe({input="default:cobble", output="default:gravel"})
|
||||
@ -422,4 +422,4 @@ if minetest.global_exists("farming") then
|
||||
techage.add_grinder_recipe({input="farming:seed_rice 6", output="farming:rice_flour"}, true)
|
||||
techage.add_grinder_recipe({input="farming:oat 3", output="farming:flour"}, true)
|
||||
techage.add_grinder_recipe({input="farming:seed_oat 6", output="farming:flour"}, true)
|
||||
end
|
||||
end
|
@ -7,7 +7,7 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
Item Source Block
|
||||
]]--
|
||||
|
||||
@ -16,7 +16,7 @@ local M = minetest.get_meta
|
||||
local S = techage.S
|
||||
|
||||
local CYCLE_TIME = 30
|
||||
|
||||
|
||||
local function formspec()
|
||||
return "size[8,7.2]"..
|
||||
default.gui_bg..
|
||||
@ -32,7 +32,7 @@ local function allow_metadata_inventory_put(pos, listname, index, stack, player)
|
||||
if minetest.is_protected(pos, player:get_player_name()) then
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
return stack:get_count()
|
||||
end
|
||||
|
||||
@ -40,7 +40,7 @@ local function 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
|
||||
|
||||
@ -81,7 +81,7 @@ minetest.register_node("techage:itemsource", {
|
||||
end
|
||||
return true
|
||||
end,
|
||||
|
||||
|
||||
allow_metadata_inventory_put = allow_metadata_inventory_put,
|
||||
allow_metadata_inventory_take = allow_metadata_inventory_take,
|
||||
|
||||
@ -97,4 +97,4 @@ techage.register_node({"techage:itemsource"}, {
|
||||
on_node_load = function(pos)
|
||||
minetest.get_node_timer(pos):start(CYCLE_TIME)
|
||||
end,
|
||||
})
|
||||
})
|
@ -7,9 +7,9 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
TA2/TA3 Bucket based Liquid Sampler
|
||||
|
||||
|
||||
]]--
|
||||
|
||||
-- for lazy programmers
|
||||
@ -96,7 +96,7 @@ end
|
||||
local function keep_running(pos, elapsed)
|
||||
--if tubelib.data_not_corrupted(pos) then
|
||||
local nvm = techage.get_nvm(pos)
|
||||
local crd = CRD(pos)
|
||||
local crd = CRD(pos)
|
||||
local inv = M(pos):get_inventory()
|
||||
sample_liquid(pos, crd, nvm, inv)
|
||||
end
|
||||
@ -175,7 +175,7 @@ local tubing = {
|
||||
end,
|
||||
}
|
||||
|
||||
local node_name_ta2, node_name_ta3, _ =
|
||||
local node_name_ta2, node_name_ta3, _ =
|
||||
techage.register_consumer("liquidsampler", S("Liquid Sampler"), tiles, {
|
||||
cycle_time = CYCLE_TIME,
|
||||
standby_ticks = STANDBY_TICKS,
|
||||
@ -220,4 +220,3 @@ minetest.register_craft({
|
||||
{"", "techage:vacuum_tube", ""},
|
||||
},
|
||||
})
|
||||
|
||||
|
@ -7,9 +7,9 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
Tube support for digtron and protector chests
|
||||
|
||||
|
||||
]]--
|
||||
|
||||
|
||||
@ -20,7 +20,7 @@ local CacheForFuelNodeNames = {}
|
||||
|
||||
local function is_fuel(stack)
|
||||
local name = stack:get_name()
|
||||
if CacheForFuelNodeNames[name] then
|
||||
if CacheForFuelNodeNames[name] then
|
||||
return true
|
||||
end
|
||||
if minetest.get_craft_result({method="fuel", width=1, items={stack}}).time ~= 0 then
|
||||
@ -53,7 +53,7 @@ techage.register_node({"digtron:inventory"}, {
|
||||
local inv = meta:get_inventory()
|
||||
return techage.put_items(inv, "main", stack)
|
||||
end,
|
||||
})
|
||||
})
|
||||
|
||||
techage.register_node({"digtron:fuelstore"}, {
|
||||
on_inv_request = function(pos, in_dir, access_type)
|
||||
@ -75,7 +75,7 @@ techage.register_node({"digtron:fuelstore"}, {
|
||||
local inv = meta:get_inventory()
|
||||
return techage.put_items(inv, "fuel", stack)
|
||||
end,
|
||||
})
|
||||
})
|
||||
|
||||
techage.register_node({"digtron:combined_storage"}, {
|
||||
on_inv_request = function(pos, in_dir, access_type)
|
||||
@ -102,7 +102,7 @@ techage.register_node({"digtron:combined_storage"}, {
|
||||
local inv = meta:get_inventory()
|
||||
return techage.put_items(inv, "main", stack)
|
||||
end,
|
||||
})
|
||||
})
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
-- protector
|
||||
@ -128,6 +128,5 @@ techage.register_node({"protector:chest"}, {
|
||||
local inv = meta:get_inventory()
|
||||
return techage.put_items(inv, "main", stack)
|
||||
end,
|
||||
})
|
||||
|
||||
})
|
||||
|
||||
|
@ -7,7 +7,7 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
TA2/TA3/TA4 Pusher
|
||||
Nodes for push/pull operation of StackItems from chests or other
|
||||
inventory/server nodes to tubes or other inventory/server nodes.
|
||||
@ -33,7 +33,7 @@ local Tube = techage.Tube
|
||||
local STANDBY_TICKS = 2
|
||||
local COUNTDOWN_TICKS = 4
|
||||
local CYCLE_TIME = 2
|
||||
|
||||
|
||||
local function ta4_formspec(self, pos, nvm)
|
||||
if CRD(pos).stage == 4 then -- TA4 node?
|
||||
return "size[8,7.2]"..
|
||||
@ -56,12 +56,12 @@ local function allow_metadata_inventory_put(pos, listname, index, stack, player)
|
||||
if minetest.is_protected(pos, player:get_player_name()) then
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
local nvm = techage.get_nvm(pos)
|
||||
if CRD(pos).State:get_state(nvm) ~= techage.STOPPED then
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
local inv = M(pos):get_inventory()
|
||||
local list = inv:get_list(listname)
|
||||
if list[index]:get_count() == 0 then
|
||||
@ -76,12 +76,12 @@ local function allow_metadata_inventory_take(pos, listname, index, stack, player
|
||||
if minetest.is_protected(pos, player:get_player_name()) then
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
local nvm = techage.get_nvm(pos)
|
||||
if CRD(pos).State:get_state(nvm) ~= techage.STOPPED then
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
local inv = M(pos):get_inventory()
|
||||
inv:set_stack(listname, index, nil)
|
||||
return 0
|
||||
@ -118,7 +118,7 @@ local function keep_running(pos, elapsed)
|
||||
local crd = CRD(pos)
|
||||
pushing(pos, crd, M(pos), nvm)
|
||||
crd.State:is_active(nvm)
|
||||
end
|
||||
end
|
||||
|
||||
local function on_rightclick(pos, node, clicker)
|
||||
if CRD(pos).stage ~= 4 then -- Not TA4 node?
|
||||
@ -148,14 +148,14 @@ local function tubelib2_on_update2(pos, outdir, tlib2, node)
|
||||
local pull_dir = M(pos):get_int("pull_dir")
|
||||
local push_dir = M(pos):get_int("push_dir")
|
||||
local is_ta4_tube = true
|
||||
|
||||
|
||||
for i, pos, node in Tube:get_tube_line(pos, pull_dir) do
|
||||
is_ta4_tube = is_ta4_tube and techage.TA4tubes[node.name]
|
||||
end
|
||||
for i, pos, node in Tube:get_tube_line(pos, push_dir) do
|
||||
is_ta4_tube = is_ta4_tube and techage.TA4tubes[node.name]
|
||||
end
|
||||
|
||||
|
||||
local nvm = techage.get_nvm(pos)
|
||||
local crd = CRD(pos)
|
||||
if CRD(pos).stage == 4 and not is_ta4_tube then
|
||||
@ -182,7 +182,7 @@ end
|
||||
|
||||
local function config_item(pos, payload)
|
||||
local name, count = unpack(payload:split(" "))
|
||||
if name and (minetest.registered_nodes[name] or minetest.registered_items[name]
|
||||
if name and (minetest.registered_nodes[name] or minetest.registered_items[name]
|
||||
or minetest.registered_craftitems[name]) then
|
||||
count = tonumber(count) or 1
|
||||
local inv = M(pos):get_inventory()
|
||||
@ -230,14 +230,14 @@ tiles.act = {
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
local tubing = {
|
||||
-- push item through the pusher in opposit direction
|
||||
on_push_item = function(pos, in_dir, stack)
|
||||
return in_dir == M(pos):get_int("pull_dir") and techage.safe_push_items(pos, in_dir, stack)
|
||||
end,
|
||||
is_pusher = true, -- is a pulling/pushing node
|
||||
|
||||
|
||||
on_recv_message = function(pos, src, topic, payload)
|
||||
if topic == "pull" then
|
||||
local nvm = techage.get_nvm(pos)
|
||||
@ -257,8 +257,8 @@ local tubing = {
|
||||
end
|
||||
end,
|
||||
}
|
||||
|
||||
local node_name_ta2, node_name_ta3, node_name_ta4 =
|
||||
|
||||
local node_name_ta2, node_name_ta3, node_name_ta4 =
|
||||
techage.register_consumer("pusher", S("Pusher"), tiles, {
|
||||
cycle_time = CYCLE_TIME,
|
||||
standby_ticks = STANDBY_TICKS,
|
||||
@ -285,7 +285,7 @@ local node_name_ta2, node_name_ta3, node_name_ta4 =
|
||||
node_timer = keep_running,
|
||||
on_rotate = screwdriver.disallow,
|
||||
tubelib2_on_update2 = tubelib2_on_update2,
|
||||
|
||||
|
||||
groups = {choppy=2, cracky=2, crumbly=2},
|
||||
is_ground_content = false,
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
@ -319,4 +319,3 @@ minetest.register_craft({
|
||||
{"", "techage:ta4_wlanchip", ""},
|
||||
},
|
||||
})
|
||||
|
||||
|
@ -7,9 +7,9 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
Quarry machine to dig stones and other ground blocks.
|
||||
|
||||
|
||||
The Quarry digs a hole (default) 5x5 blocks large and up to 80 blocks deep.
|
||||
It starts at the given level (0 is same level as the quarry block,
|
||||
1 is one level higher and so on)) and goes down to the given depth number.
|
||||
@ -34,7 +34,7 @@ local Side2Facedir = {F=0, R=1, B=2, L=3, D=4, U=5}
|
||||
local Depth2Idx = {[1]=1 ,[2]=2, [3]=3, [5]=4, [10]=5, [15]=6, [20]=7, [25]=8, [40]=9, [60]=10, [80]=11}
|
||||
local Holesize2Idx = {["3x3"] = 1, ["5x5"] = 2, ["7x7"] = 3, ["9x9"] = 4, ["11x11"] = 5}
|
||||
local Holesize2Diameter = {["3x3"] = 3, ["5x5"] = 5, ["7x7"] = 7, ["9x9"] = 9, ["11x11"] = 11}
|
||||
local Level2Idx = {[2]=1, [1]=2, [0]=3, [-1]=4, [-2]=5, [-3]=6,
|
||||
local Level2Idx = {[2]=1, [1]=2, [0]=3, [-1]=4, [-2]=5, [-3]=6,
|
||||
[-5]=7, [-10]=8, [-15]=9, [-20]=10}
|
||||
|
||||
local function formspec(self, pos, nvm)
|
||||
@ -53,7 +53,7 @@ local function formspec(self, pos, nvm)
|
||||
elseif CRD(pos).stage == 2 then
|
||||
depth_list = "1,2,3,5,10,15,20"
|
||||
end
|
||||
|
||||
|
||||
return "size[8,8]"..
|
||||
default.gui_bg..
|
||||
default.gui_bg_img..
|
||||
@ -61,11 +61,11 @@ local function formspec(self, pos, nvm)
|
||||
"box[0,-0.1;7.8,0.5;#c6e8ff]"..
|
||||
"label[3.5,-0.1;"..minetest.colorize( "#000000", S("Quarry")).."]"..
|
||||
techage.question_mark_help(8, tooltip)..
|
||||
"dropdown[0,0.8;1.5;level;2,1,0,-1,-2,-3,-5,-10,-15,-20;"..level_idx.."]"..
|
||||
"dropdown[0,0.8;1.5;level;2,1,0,-1,-2,-3,-5,-10,-15,-20;"..level_idx.."]"..
|
||||
"label[1.6,0.9;"..S("Start level").."]"..
|
||||
"dropdown[0,1.8;1.5;depth;"..depth_list..";"..depth_idx.."]"..
|
||||
"dropdown[0,1.8;1.5;depth;"..depth_list..";"..depth_idx.."]"..
|
||||
"label[1.6,1.9;"..S("Digging depth").." ("..level..")]"..
|
||||
"dropdown[0,2.8;1.5;hole_size;"..hsize_list..";"..hsize_idx.."]"..
|
||||
"dropdown[0,2.8;1.5;hole_size;"..hsize_list..";"..hsize_idx.."]"..
|
||||
"label[1.6,2.9;"..S("Hole size").."]"..
|
||||
"list[context;main;5,0.8;3,3;]"..
|
||||
"image[4,0.8;1,1;"..techage.get_power_image(pos, nvm).."]"..
|
||||
@ -80,7 +80,7 @@ local function play_sound(pos)
|
||||
local mem = techage.get_mem(pos)
|
||||
if not mem.handle or mem.handle == -1 then
|
||||
mem.handle = minetest.sound_play("techage_quarry", {
|
||||
pos = pos,
|
||||
pos = pos,
|
||||
gain = 1.5,
|
||||
max_hear_distance = 15,
|
||||
loop = true})
|
||||
@ -114,7 +114,7 @@ local function get_pos(pos, facedir, side, steps)
|
||||
facedir = (facedir + Side2Facedir[side]) % 4
|
||||
local dir = vector.multiply(minetest.facedir_to_dir(facedir), steps or 1)
|
||||
return vector.add(pos, dir)
|
||||
end
|
||||
end
|
||||
|
||||
local function allow_metadata_inventory_put(pos, listname, index, stack, player)
|
||||
if minetest.is_protected(pos, player:get_player_name()) then
|
||||
@ -147,7 +147,7 @@ local function get_corner_positions(pos, facedir, hole_diameter)
|
||||
return pos1, pos2
|
||||
end
|
||||
|
||||
local function is_air_level(pos1, pos2, hole_diameter)
|
||||
local function is_air_level(pos1, pos2, hole_diameter)
|
||||
return #minetest.find_nodes_in_area(pos1, pos2, {"air"}) == hole_diameter * hole_diameter
|
||||
end
|
||||
|
||||
@ -189,7 +189,7 @@ local function quarry_task(pos, crd, nvm)
|
||||
end
|
||||
return at_least_one_added
|
||||
end
|
||||
|
||||
|
||||
local pos1, pos2 = get_corner_positions(pos, facedir, nvm.hole_diameter)
|
||||
nvm.level = 1
|
||||
for y_curr = y_first, y_last, -1 do
|
||||
@ -197,16 +197,16 @@ local function quarry_task(pos, crd, nvm)
|
||||
pos2.y = y_curr
|
||||
|
||||
nvm.level = y_first - y_curr
|
||||
|
||||
|
||||
if minetest.is_area_protected(pos1, pos2, owner, 5) then
|
||||
crd.State:fault(pos, nvm, S("area is protected"))
|
||||
return
|
||||
end
|
||||
|
||||
|
||||
if not is_air_level(pos1, pos2, nvm.hole_diameter) then
|
||||
mark_area(pos1, pos2, owner)
|
||||
coroutine.yield()
|
||||
|
||||
|
||||
for zoffs = 1, nvm.hole_diameter do
|
||||
for xoffs = 1, nvm.hole_diameter do
|
||||
local qpos = get_quarry_pos(pos1, xoffs, zoffs)
|
||||
@ -226,20 +226,20 @@ local function quarry_task(pos, crd, nvm)
|
||||
end
|
||||
crd.State:stop(pos, nvm, S("finished"))
|
||||
end
|
||||
|
||||
|
||||
local function keep_running(pos, elapsed)
|
||||
local mem = techage.get_mem(pos)
|
||||
if not mem.co then
|
||||
mem.co = coroutine.create(quarry_task)
|
||||
end
|
||||
|
||||
|
||||
local nvm = techage.get_nvm(pos)
|
||||
local crd = CRD(pos)
|
||||
local _, err = coroutine.resume(mem.co, pos, crd, nvm)
|
||||
if err then
|
||||
minetest.log("error", "[TA4 Quarry Coroutine Error]" .. err)
|
||||
end
|
||||
|
||||
|
||||
if techage.is_activeformspec(pos) then
|
||||
M(pos):set_string("formspec", formspec(crd.State, pos, nvm))
|
||||
end
|
||||
@ -268,7 +268,7 @@ local function on_receive_fields(pos, formname, fields, player)
|
||||
end
|
||||
local nvm = techage.get_nvm(pos)
|
||||
local mem = techage.get_mem(pos)
|
||||
|
||||
|
||||
if fields.depth then
|
||||
if tonumber(fields.depth) ~= nvm.quarry_depth then
|
||||
nvm.quarry_depth = tonumber(fields.depth)
|
||||
@ -281,7 +281,7 @@ local function on_receive_fields(pos, formname, fields, player)
|
||||
CRD(pos).State:stop(pos, nvm)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
if fields.level then
|
||||
if tonumber(fields.level) ~= nvm.start_level then
|
||||
nvm.start_level = tonumber(fields.level)
|
||||
@ -373,7 +373,7 @@ local tubing = {
|
||||
end,
|
||||
}
|
||||
|
||||
local node_name_ta2, node_name_ta3, node_name_ta4 =
|
||||
local node_name_ta2, node_name_ta3, node_name_ta4 =
|
||||
techage.register_consumer("quarry", S("Quarry"), tiles, {
|
||||
drawtype = "normal",
|
||||
cycle_time = CYCLE_TIME,
|
||||
@ -425,4 +425,4 @@ minetest.register_craft({
|
||||
{"", node_name_ta3, ""},
|
||||
{"", "techage:ta4_wlanchip", ""},
|
||||
},
|
||||
})
|
||||
})
|
@ -91,7 +91,7 @@ local function get_recipe(inv)
|
||||
local input = table.concat(items, ",", 1, last_idx)
|
||||
local stack = inv:get_stack("output", 1)
|
||||
return {
|
||||
input = input,
|
||||
input = input,
|
||||
output = stack:get_name() .. " " .. stack:get_count()
|
||||
}
|
||||
end
|
||||
@ -129,7 +129,7 @@ local function allow_metadata_inventory_put(pos, listname, index, stack, player)
|
||||
if minetest.is_protected(pos, player:get_player_name()) then
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
local inv = M(pos):get_inventory()
|
||||
local list = inv:get_list(listname)
|
||||
stack:set_count(1)
|
||||
@ -142,7 +142,7 @@ local function allow_metadata_inventory_take(pos, listname, index, stack, player
|
||||
if minetest.is_protected(pos, player:get_player_name()) then
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
local inv = M(pos):get_inventory()
|
||||
inv:set_stack(listname, index, nil)
|
||||
after_recipe_change(pos, inv, listname)
|
||||
@ -153,7 +153,7 @@ local function allow_metadata_inventory_move(pos, from_list, from_index, to_list
|
||||
if minetest.is_protected(pos, player:get_player_name()) then
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
local inv = M(pos):get_inventory()
|
||||
if from_list == to_list then
|
||||
minetest.after(0.1, after_recipe_change, pos, inv, from_list)
|
||||
@ -176,7 +176,7 @@ minetest.register_node("techage:ta4_recipeblock", {
|
||||
inv:set_size('input', 9)
|
||||
inv:set_size('output', 1)
|
||||
end,
|
||||
|
||||
|
||||
after_place_node = function(pos, placer, itemstack)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
local number = techage.add_node(pos, "techage:ta4_chest")
|
||||
@ -190,7 +190,7 @@ minetest.register_node("techage:ta4_recipeblock", {
|
||||
if minetest.is_protected(pos, player:get_player_name()) then
|
||||
return
|
||||
end
|
||||
|
||||
|
||||
local nvm = techage.get_nvm(pos)
|
||||
nvm.recipe_idx = nvm.recipe_idx or 1
|
||||
if fields.next == ">>" then
|
||||
@ -202,7 +202,7 @@ minetest.register_node("techage:ta4_recipeblock", {
|
||||
update_inventor(pos, inv, nvm.recipe_idx or 1)
|
||||
M(pos):set_string("formspec", formspec(pos, nvm))
|
||||
end,
|
||||
|
||||
|
||||
after_dig_node = function(pos, oldnode, oldmetadata, digger)
|
||||
techage.remove_node(pos, oldnode, oldmetadata)
|
||||
techage.del_mem(pos)
|
||||
@ -211,7 +211,7 @@ minetest.register_node("techage:ta4_recipeblock", {
|
||||
allow_metadata_inventory_put = allow_metadata_inventory_put,
|
||||
allow_metadata_inventory_take = allow_metadata_inventory_take,
|
||||
allow_metadata_inventory_move = allow_metadata_inventory_move,
|
||||
|
||||
|
||||
paramtype2 = "facedir",
|
||||
groups = {choppy=2, cracky=2, crumbly=2},
|
||||
is_ground_content = false,
|
||||
@ -241,4 +241,3 @@ minetest.register_craft({
|
||||
{"default:steel_ingot", "techage:ta4_wlanchip", "default:steel_ingot"},
|
||||
},
|
||||
})
|
||||
|
||||
|
@ -7,9 +7,9 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
TA4 Recycler, recycling techage machines
|
||||
|
||||
|
||||
]]--
|
||||
|
||||
-- for lazy programmers
|
||||
@ -112,9 +112,9 @@ local function allow_metadata_inventory_take(pos, listname, index, stack, player
|
||||
return stack:get_count()
|
||||
end
|
||||
|
||||
local function cook_reverse(stack, inv, idx, recipe)
|
||||
local function cook_reverse(stack, inv, idx, recipe)
|
||||
-- check space
|
||||
for _,item in ipairs(recipe.items) do
|
||||
for _,item in ipairs(recipe.items) do
|
||||
if not inv:room_for_item("dst", stack) then
|
||||
return false
|
||||
end
|
||||
@ -122,7 +122,7 @@ local function cook_reverse(stack, inv, idx, recipe)
|
||||
-- take item
|
||||
inv:remove_item("src", ItemStack(recipe.output))
|
||||
-- add items
|
||||
for _,item in ipairs(recipe.items) do
|
||||
for _,item in ipairs(recipe.items) do
|
||||
inv:add_item("dst", item)
|
||||
end
|
||||
return true
|
||||
@ -240,7 +240,7 @@ local tubing = {
|
||||
end,
|
||||
}
|
||||
|
||||
local _, _, node_name_ta4 =
|
||||
local _, _, node_name_ta4 =
|
||||
techage.register_consumer("recycler", S("Recycler"), tiles, {
|
||||
drawtype = "nodebox",
|
||||
paramtype = "light",
|
||||
@ -292,13 +292,13 @@ minetest.register_craft({
|
||||
-------------------------------------------------------------------------------
|
||||
-- Prepare recipes
|
||||
-------------------------------------------------------------------------------
|
||||
-- Nodes from mods that can be recycled
|
||||
-- Nodes from mods that can be recycled
|
||||
local ModNames = {
|
||||
techage = true,
|
||||
techage = true,
|
||||
hyperloop = true,
|
||||
}
|
||||
|
||||
local function get_item_list(inputs)
|
||||
local function get_item_list(inputs)
|
||||
local lst = {}
|
||||
for _,input in pairs(inputs or {}) do
|
||||
if SpecialItems[input] then
|
||||
@ -317,7 +317,7 @@ local function get_special_recipe(name)
|
||||
if SpecialItems[name] then
|
||||
return {
|
||||
output = name,
|
||||
items = {SpecialItems[name]}
|
||||
items = {SpecialItems[name]}
|
||||
}
|
||||
end
|
||||
end
|
||||
@ -325,22 +325,22 @@ end
|
||||
local function collect_recipes()
|
||||
local add = function(name, ndef)
|
||||
local _, _, mod, _ = string.find(name, "([%w_]+):([%w_]+)")
|
||||
local recipe = get_special_recipe(name) or
|
||||
techage.recipes.get_recipe(name) or
|
||||
local recipe = get_special_recipe(name) or
|
||||
techage.recipes.get_recipe(name) or
|
||||
minetest.get_craft_recipe(name)
|
||||
local items = get_item_list(recipe.items)
|
||||
|
||||
if ModNames[mod]
|
||||
and ndef.groups.not_in_creative_inventory ~= 1
|
||||
|
||||
if ModNames[mod]
|
||||
and ndef.groups.not_in_creative_inventory ~= 1
|
||||
and not ndef.tool_capabilities
|
||||
and recipe.output
|
||||
and recipe.output
|
||||
and next(items) then
|
||||
local s = table.concat(items, ", ")
|
||||
--print(string.format("%-36s {%s}", recipe.output, s))
|
||||
Recipes[name] = {output = recipe.output, items = items}
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
for name, ndef in pairs(minetest.registered_nodes) do
|
||||
add(name, ndef)
|
||||
end
|
||||
@ -349,4 +349,4 @@ local function collect_recipes()
|
||||
end
|
||||
end
|
||||
|
||||
minetest.after(2, collect_recipes)
|
||||
minetest.after(2, collect_recipes)
|
@ -9,7 +9,7 @@
|
||||
See LICENSE.txt for more information
|
||||
|
||||
TA2/TA3 Power Test Source
|
||||
|
||||
|
||||
]]--
|
||||
|
||||
-- for lazy programmers
|
||||
@ -55,7 +55,7 @@ local function stop_node2(pos, nvm, state)
|
||||
end
|
||||
|
||||
local function start_node3(pos, nvm, state)
|
||||
local meta = M(pos)
|
||||
local meta = M(pos)
|
||||
nvm.running = true
|
||||
nvm.provided = 0
|
||||
techage.evaluate_charge_termination(nvm, meta)
|
||||
@ -241,7 +241,7 @@ techage.register_node({"techage:t4_source"}, {
|
||||
return State3:on_receive_message(pos, topic, payload)
|
||||
end
|
||||
end,
|
||||
})
|
||||
})
|
||||
|
||||
control.register_nodes({"techage:t4_source"}, {
|
||||
on_receive = function(pos, tlib2, topic, payload)
|
||||
@ -256,11 +256,10 @@ control.register_nodes({"techage:t4_source"}, {
|
||||
running = nvm.running or false,
|
||||
available = PWR_PERF,
|
||||
provided = nvm.provided or 0,
|
||||
termpoint = meta:get_string("termpoint"),
|
||||
termpoint = meta:get_string("termpoint"),
|
||||
}
|
||||
end
|
||||
return false
|
||||
end,
|
||||
}
|
||||
)
|
||||
|
||||
|
@ -7,9 +7,9 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
TA4 8x2000 Chest
|
||||
|
||||
|
||||
]]--
|
||||
|
||||
-- for lazy programmers
|
||||
@ -36,7 +36,7 @@ local function repair_inv(nvm)
|
||||
nvm.inventory = nvm.inventory or {}
|
||||
for i = 1,8 do
|
||||
local item = nvm.inventory[i]
|
||||
if not item or type(item) ~= "table"
|
||||
if not item or type(item) ~= "table"
|
||||
or not item.name or type(item.name) ~= "string" or item.name == ""
|
||||
or not item.count or type(item.count) ~= "number" or item.count < 1
|
||||
then
|
||||
@ -102,8 +102,8 @@ end
|
||||
|
||||
local function get_stacksize(pos)
|
||||
local size = M(pos):get_int("stacksize")
|
||||
if size == 0 then
|
||||
return STACK_SIZE
|
||||
if size == 0 then
|
||||
return STACK_SIZE
|
||||
end
|
||||
return size
|
||||
end
|
||||
@ -362,15 +362,15 @@ local function get_front_chest_pos(pos)
|
||||
if nvm.front_chest_pos then
|
||||
return nvm.front_chest_pos
|
||||
end
|
||||
|
||||
|
||||
local node = techage.get_node_lvm(pos)
|
||||
if search_chest_in_front(pos, node) then
|
||||
return nvm.front_chest_pos
|
||||
end
|
||||
|
||||
|
||||
return pos
|
||||
end
|
||||
|
||||
|
||||
local function convert_to_chest_again(pos, node, player)
|
||||
local dir = techage.side_to_outdir("B", node.param2)
|
||||
local pos1 = tubelib2.get_pos(pos, dir)
|
||||
@ -389,8 +389,8 @@ local function convert_to_chest_again(pos, node, player)
|
||||
M(pos1):set_string("formspec", formspec(pos1))
|
||||
M(pos1):set_string("infotext", DESCRIPTION.." "..number)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
local function unlock_chests(pos, player)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
for idx = 1,8 do
|
||||
@ -450,7 +450,7 @@ local function on_receive_fields(pos, formname, fields, player)
|
||||
if minetest.is_protected(pos, player:get_player_name()) then
|
||||
return
|
||||
end
|
||||
|
||||
|
||||
for i = 1,8 do
|
||||
if fields["get"..i] ~= nil then
|
||||
inv_take_from_chest(pos, i)
|
||||
@ -469,7 +469,7 @@ local function on_receive_fields(pos, formname, fields, player)
|
||||
if fields.priority then
|
||||
M(pos):set_int("priority", fields.priority == "true" and 1 or 0)
|
||||
end
|
||||
|
||||
|
||||
M(pos):set_string("formspec", formspec(pos))
|
||||
end
|
||||
|
||||
@ -511,7 +511,7 @@ minetest.register_node("techage:ta4_chest", {
|
||||
local inv = M(pos):get_inventory()
|
||||
inv:set_size('main', 8)
|
||||
end,
|
||||
|
||||
|
||||
after_place_node = function(pos, placer)
|
||||
local node = minetest.get_node(pos)
|
||||
if search_chest_in_front(pos, node) then
|
||||
@ -530,7 +530,7 @@ minetest.register_node("techage:ta4_chest", {
|
||||
techage_set_numbers = function(pos, numbers, player_name)
|
||||
return techage.logic.set_numbers(pos, numbers, player_name, DESCRIPTION)
|
||||
end,
|
||||
|
||||
|
||||
on_rotate = on_rotate,
|
||||
on_rightclick = on_rightclick,
|
||||
on_receive_fields = on_receive_fields,
|
||||
@ -538,7 +538,7 @@ minetest.register_node("techage:ta4_chest", {
|
||||
after_dig_node = after_dig_node,
|
||||
allow_metadata_inventory_put = allow_metadata_inventory_put,
|
||||
allow_metadata_inventory_take = allow_metadata_inventory_take,
|
||||
|
||||
|
||||
on_metadata_inventory_put = on_metadata_inventory_put,
|
||||
on_metadata_inventory_move = on_metadata_inventory_move,
|
||||
on_metadata_inventory_take = on_metadata_inventory_take,
|
||||
@ -593,7 +593,7 @@ techage.register_node({"techage:ta4_chest"}, {
|
||||
end
|
||||
return res
|
||||
end,
|
||||
|
||||
|
||||
on_recv_message = function(pos, src, topic, payload)
|
||||
if topic == "count" then
|
||||
local nvm = techage.get_nvm(pos)
|
||||
@ -608,7 +608,7 @@ techage.register_node({"techage:ta4_chest"}, {
|
||||
return "unsupported"
|
||||
end
|
||||
end,
|
||||
})
|
||||
})
|
||||
|
||||
techage.register_node({"techage:ta4_chest_dummy"}, {
|
||||
on_pull_item = function(pos, in_dir, num, item_name)
|
||||
@ -635,7 +635,7 @@ techage.register_node({"techage:ta4_chest_dummy"}, {
|
||||
end
|
||||
return res
|
||||
end
|
||||
})
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "shapeless",
|
||||
@ -647,4 +647,4 @@ minetest.register_craft({
|
||||
type = "shapeless",
|
||||
output = "techage:chest_ta4",
|
||||
recipe = {"techage:ta4_chest"}
|
||||
})
|
||||
})
|
@ -7,7 +7,7 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
TA4 Injector
|
||||
|
||||
]]--
|
||||
@ -47,12 +47,12 @@ local function allow_metadata_inventory_put(pos, listname, index, stack, player)
|
||||
if minetest.is_protected(pos, player:get_player_name()) then
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
local nvm = techage.get_nvm(pos)
|
||||
if CRD(pos).State:get_state(nvm) ~= techage.STOPPED then
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
local inv = M(pos):get_inventory()
|
||||
local list = inv:get_list(listname)
|
||||
local cdr = CRD(pos)
|
||||
@ -69,12 +69,12 @@ local function allow_metadata_inventory_take(pos, listname, index, stack, player
|
||||
if minetest.is_protected(pos, player:get_player_name()) then
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
local nvm = techage.get_nvm(pos)
|
||||
if CRD(pos).State:get_state(nvm) ~= techage.STOPPED then
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
local inv = M(pos):get_inventory()
|
||||
inv:set_stack(listname, index, nil)
|
||||
return 0
|
||||
@ -148,7 +148,7 @@ local function pushing(pos, crd, meta, nvm)
|
||||
local filter = inv:get_list("filter")
|
||||
local pushed = false
|
||||
local pulled = false
|
||||
|
||||
|
||||
for idx, item in ipairs(filter) do
|
||||
local name = item:get_name()
|
||||
local num = math.min(item:get_count(), crd.num_items)
|
||||
@ -165,7 +165,7 @@ local function pushing(pos, crd, meta, nvm)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
if not pulled then
|
||||
crd.State:idle(pos, nvm)
|
||||
elseif not pushed then
|
||||
@ -179,7 +179,7 @@ local function node_timer(pos, elapsed)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
local crd = CRD(pos)
|
||||
pushing(pos, crd, M(pos), nvm)
|
||||
end
|
||||
end
|
||||
|
||||
local function on_receive_fields(pos, formname, fields, player)
|
||||
if minetest.is_protected(pos, player:get_player_name()) then
|
||||
@ -188,7 +188,7 @@ local function on_receive_fields(pos, formname, fields, player)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
if fields.pull_mode then
|
||||
nvm.pull_mode = fields.pull_mode == "true"
|
||||
end
|
||||
end
|
||||
CRD(pos).State:state_button_event(pos, nvm, fields)
|
||||
M(pos):set_string("formspec", formspec(CRD(pos).State, pos, nvm))
|
||||
end
|
||||
@ -231,14 +231,14 @@ tiles.act = {
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
local tubing = {
|
||||
-- push item through the injector in opposit direction
|
||||
on_push_item = function(pos, in_dir, stack)
|
||||
return in_dir == M(pos):get_int("pull_dir") and techage.safe_push_items(pos, in_dir, stack)
|
||||
end,
|
||||
is_pusher = true, -- is a pulling/pushing node
|
||||
|
||||
|
||||
on_recv_message = function(pos, src, topic, payload)
|
||||
return CRD(pos).State:on_receive_message(pos, topic, payload)
|
||||
end,
|
||||
@ -246,8 +246,8 @@ local tubing = {
|
||||
CRD(pos).State:on_node_load(pos)
|
||||
end,
|
||||
}
|
||||
|
||||
local _, node_name_ta3, node_name_ta4 =
|
||||
|
||||
local _, node_name_ta3, node_name_ta4 =
|
||||
techage.register_consumer("injector", S("Injector"), tiles, {
|
||||
cycle_time = CYCLE_TIME,
|
||||
standby_ticks = STANDBY_TICKS,
|
||||
@ -271,7 +271,7 @@ local _, node_name_ta3, node_name_ta4 =
|
||||
on_receive_fields = on_receive_fields,
|
||||
node_timer = node_timer,
|
||||
on_rotate = screwdriver.disallow,
|
||||
|
||||
|
||||
groups = {choppy=2, cracky=2, crumbly=2},
|
||||
is_ground_content = false,
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
@ -294,4 +294,4 @@ minetest.register_craft({
|
||||
{"", "techage:ta4_pusher_pas", ""},
|
||||
{"", "basic_materials:ic", ""},
|
||||
},
|
||||
})
|
||||
})
|
@ -7,9 +7,9 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
TA5 Hyperloop Chest
|
||||
|
||||
|
||||
]]--
|
||||
|
||||
-- for lazy programmers
|
||||
@ -33,7 +33,7 @@ local function formspec(pos)
|
||||
local title = ndef.description .. " " .. status
|
||||
return "size[8,9]"..
|
||||
"box[0,-0.1;7.8,0.5;#c6e8ff]" ..
|
||||
"label[0.2,-0.1;" .. minetest.colorize( "#000000", title) .. "]" ..
|
||||
"label[0.2,-0.1;" .. minetest.colorize( "#000000", title) .. "]" ..
|
||||
"list[context;main;0,1;8,4;]"..
|
||||
"list[current_player;main;0,5.3;8,4;]"..
|
||||
"listring[context;main]"..
|
||||
@ -175,11 +175,11 @@ techage.register_node({"techage:ta5_hl_chest"}, {
|
||||
return "unsupported"
|
||||
end
|
||||
end,
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
minetest.register_craft({
|
||||
type = "shapeless",
|
||||
output = "techage:ta5_hl_chest",
|
||||
recipe = {"techage:chest_ta4", "techage:ta5_aichip"}
|
||||
})
|
||||
})
|
@ -9,7 +9,7 @@
|
||||
See LICENSE.txt for more information
|
||||
|
||||
Assemble routines
|
||||
|
||||
|
||||
]]--
|
||||
|
||||
-- for lazy programmers
|
||||
@ -28,7 +28,7 @@ local Face2Dir = {[0]=
|
||||
{x=0, y=1, z=0}
|
||||
}
|
||||
|
||||
-- Determine the destination position based on the base position,
|
||||
-- Determine the destination position based on the base position,
|
||||
-- param2, and a route table like : {0,3}
|
||||
-- 0 = forward, 1 = right, 2 = backward, 3 = left
|
||||
local function dest_pos(pos, param2, route, y_offs)
|
||||
@ -54,8 +54,8 @@ local function build(pos, param2, AssemblyPlan, idx)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
nvm.assemble_locked = false
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
-- timer based function
|
||||
local function remove(pos, param2, AssemblyPlan, idx)
|
||||
local item = AssemblyPlan[idx]
|
||||
@ -68,7 +68,7 @@ local function remove(pos, param2, AssemblyPlan, idx)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
nvm.assemble_locked = false
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function check_space(pos, param2, AssemblyPlan, player_name)
|
||||
for _,item in ipairs(AssemblyPlan) do
|
||||
@ -78,7 +78,7 @@ local function check_space(pos, param2, AssemblyPlan, player_name)
|
||||
minetest.chat_send_player(player_name, S("[TA] Area is protected!"))
|
||||
return false
|
||||
end
|
||||
|
||||
|
||||
local node = techage.get_node_lvm(pos1)
|
||||
local ndef = minetest.registered_nodes[node.name]
|
||||
if not ndef or not ndef.buildable_to and node.name ~= node_name then
|
||||
@ -97,7 +97,7 @@ function techage.assemble.build(pos, AssemblyPlan, player_name)
|
||||
-- check protection
|
||||
if minetest.is_protected(pos, player_name) then
|
||||
return
|
||||
end
|
||||
end
|
||||
local nvm = techage.get_nvm(pos)
|
||||
if nvm.assemble_locked then
|
||||
return
|
||||
@ -114,7 +114,7 @@ function techage.assemble.remove(pos, AssemblyPlan, player_name)
|
||||
-- check protection
|
||||
if minetest.is_protected(pos, player_name) then
|
||||
return
|
||||
end
|
||||
end
|
||||
local nvm = techage.get_nvm(pos)
|
||||
if nvm.assemble_locked then
|
||||
return
|
||||
@ -130,7 +130,7 @@ end
|
||||
--------------------------------------------------------------------------------
|
||||
local function play_sound(pos, sound)
|
||||
minetest.sound_play(sound, {
|
||||
pos = pos,
|
||||
pos = pos,
|
||||
gain = 1,
|
||||
max_hear_distance = 10,
|
||||
})
|
||||
@ -232,10 +232,10 @@ function techage.assemble.count_items(AssemblyPlan)
|
||||
end
|
||||
end
|
||||
return t
|
||||
end
|
||||
end
|
||||
|
||||
-- Determine the destination position based on the given route
|
||||
-- param2, and a route table like : {0,3}
|
||||
-- 0 = forward, 1 = right, 2 = backward, 3 = left
|
||||
-- techage.assemble.get_pos(pos, param2, route, y_offs)
|
||||
techage.assemble.get_pos = dest_pos
|
||||
techage.assemble.get_pos = dest_pos
|
@ -7,7 +7,7 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
Boiler common functions
|
||||
|
||||
]]--
|
||||
@ -74,7 +74,7 @@ function techage.boiler.water_temperature(pos, nvm)
|
||||
nvm.temperature = math.max(nvm.temperature - HEAT_STEP, 20)
|
||||
end
|
||||
nvm.fire_trigger = false
|
||||
|
||||
|
||||
if nvm.water_level == 0 then
|
||||
if nvm.num_water > 0 then
|
||||
nvm.num_water = nvm.num_water - 1
|
||||
@ -119,7 +119,7 @@ function techage.boiler.on_punch(pos, node, puncher, pointed_thing)
|
||||
if mem.blocking_time > techage.SystemTime then
|
||||
return
|
||||
end
|
||||
|
||||
|
||||
nvm.num_water = nvm.num_water or 0
|
||||
local wielded_item = puncher:get_wielded_item():get_name()
|
||||
local item_count = puncher:get_wielded_item():get_count()
|
||||
@ -146,4 +146,3 @@ function techage.boiler.on_punch(pos, node, puncher, pointed_thing)
|
||||
M(pos):set_string("formspec", techage.boiler.formspec(pos, nvm))
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -7,7 +7,7 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
Basis functions for inter-node communication
|
||||
|
||||
]]--
|
||||
@ -59,7 +59,7 @@ local function delete_nodeinfo_entry(number)
|
||||
return number
|
||||
end
|
||||
|
||||
-- Keep the cache size small by deleting entries randomly
|
||||
-- Keep the cache size small by deleting entries randomly
|
||||
local function keep_small(number)
|
||||
number = delete_nodeinfo_entry(number)
|
||||
minetest.after(10, keep_small, number)
|
||||
@ -82,13 +82,13 @@ end
|
||||
-- Determine position related node number for addressing purposes
|
||||
local function get_number(pos, new)
|
||||
local meta = minetest.get_meta(pos)
|
||||
if meta:contains("node_number") then
|
||||
return meta:get_string("node_number")
|
||||
if meta:contains("node_number") then
|
||||
return meta:get_string("node_number")
|
||||
end
|
||||
-- generate new number
|
||||
if new then
|
||||
local num = backend.add_nodepos(pos)
|
||||
meta:set_string("node_number", num)
|
||||
meta:set_string("node_number", num)
|
||||
return num
|
||||
end
|
||||
end
|
||||
@ -141,15 +141,15 @@ end
|
||||
local function get_next_node(pos, out_dir)
|
||||
local res, npos, node = Tube:compatible_node(pos, out_dir)
|
||||
local in_dir = tubelib2.Turn180Deg[out_dir]
|
||||
return res, npos, in_dir, node.name
|
||||
return res, npos, in_dir, node.name
|
||||
end
|
||||
|
||||
local function get_dest_node(pos, out_dir)
|
||||
local spos, in_dir = Tube:get_connected_node_pos(pos, out_dir)
|
||||
local _,node = Tube:get_node(spos)
|
||||
return spos, in_dir, node.name
|
||||
return spos, in_dir, node.name
|
||||
end
|
||||
|
||||
|
||||
local function item_handling_node(name)
|
||||
local node_def = name and NodeDef[name]
|
||||
if node_def then
|
||||
@ -181,17 +181,17 @@ end)
|
||||
-------------------------------------------------------------------
|
||||
-- API helper functions
|
||||
-------------------------------------------------------------------
|
||||
|
||||
|
||||
-- Function returns { pos, name } for the node referenced by number
|
||||
function techage.get_node_info(dest_num)
|
||||
return NodeInfoCache[dest_num] or update_nodeinfo(dest_num)
|
||||
end
|
||||
end
|
||||
|
||||
-- Function returns the node number from the given position or
|
||||
-- nil, if no node number for this position is assigned.
|
||||
function techage.get_node_number(pos)
|
||||
return get_number(pos)
|
||||
end
|
||||
end
|
||||
|
||||
function techage.get_pos(pos, side)
|
||||
local node = techage.get_node_lvm(pos)
|
||||
@ -200,11 +200,11 @@ function techage.get_pos(pos, side)
|
||||
dir = side_to_dir(side, node.param2)
|
||||
end
|
||||
return tubelib2.get_pos(pos, dir)
|
||||
end
|
||||
end
|
||||
|
||||
-- Function is used for available nodes with lost numbers, only.
|
||||
function techage.get_new_number(pos, name)
|
||||
-- store position
|
||||
-- store position
|
||||
return get_number(pos, true)
|
||||
end
|
||||
|
||||
@ -217,7 +217,7 @@ end
|
||||
-------------------------------------------------------------------
|
||||
-- Node construction/destruction functions
|
||||
-------------------------------------------------------------------
|
||||
|
||||
|
||||
-- Add node to the techage lists.
|
||||
-- Function determines and returns the node position number,
|
||||
-- needed for message communication.
|
||||
@ -227,7 +227,7 @@ function techage.add_node(pos, name, is_ta2)
|
||||
if item_handling_node(name) then
|
||||
Tube:after_place_node(pos)
|
||||
end
|
||||
if is_ta2 then
|
||||
if is_ta2 then
|
||||
return "-"
|
||||
end
|
||||
local key = minetest.hash_node_position(pos)
|
||||
@ -307,10 +307,10 @@ function techage.register_node(names, node_definition)
|
||||
for _,n in ipairs(names) do
|
||||
NodeDef[n] = node_definition
|
||||
end
|
||||
if node_definition.on_pull_item or node_definition.on_push_item or
|
||||
if node_definition.on_pull_item or node_definition.on_push_item or
|
||||
node_definition.is_pusher then
|
||||
Tube:add_secondary_node_names(names)
|
||||
|
||||
|
||||
for _,n in ipairs(names) do
|
||||
techage.KnownNodes[n] = true
|
||||
end
|
||||
@ -346,7 +346,7 @@ function techage.check_numbers(numbers, placer_name)
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
function techage.send_multi(src, numbers, topic, payload)
|
||||
--print("send_multi", src, numbers, topic)
|
||||
@ -360,7 +360,7 @@ function techage.send_multi(src, numbers, topic, payload)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function techage.send_single(src, number, topic, payload)
|
||||
--print("send_single", src, number, topic)
|
||||
@ -373,7 +373,7 @@ function techage.send_single(src, number, topic, payload)
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
-- The destination node location is either:
|
||||
-- A) a destination position, specified by pos
|
||||
@ -407,7 +407,7 @@ function techage.transfer(pos, outdir, topic, payload, network, nodenames)
|
||||
return ndef.on_transfer(dpos, indir, topic, payload)
|
||||
end
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
-------------------------------------------------------------------
|
||||
-- Client side Push/Pull item functions
|
||||
@ -430,10 +430,10 @@ end
|
||||
function techage.push_items(pos, out_dir, stack, idx)
|
||||
local npos, in_dir, name = get_dest_node(pos, out_dir)
|
||||
if npos and NodeDef[name] and NodeDef[name].on_push_item then
|
||||
return NodeDef[name].on_push_item(npos, in_dir, stack, idx)
|
||||
return NodeDef[name].on_push_item(npos, in_dir, stack, idx)
|
||||
elseif is_air_like(name) or is_cart_available(npos) then
|
||||
minetest.add_item(npos, stack)
|
||||
return true
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end
|
||||
@ -470,9 +470,9 @@ function techage.unpull_items(pos, out_dir, stack)
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
|
||||
-------------------------------------------------------------------
|
||||
-- Client side Push/Pull item functions for hopper like nodes
|
||||
-- Client side Push/Pull item functions for hopper like nodes
|
||||
-- (nodes with no tube support)
|
||||
-------------------------------------------------------------------
|
||||
|
||||
@ -486,10 +486,10 @@ end
|
||||
function techage.neighbour_push_items(pos, out_dir, stack)
|
||||
local res, npos, in_dir, name = get_next_node(pos, out_dir)
|
||||
if res and NodeDef[name] and NodeDef[name].on_push_item then
|
||||
return NodeDef[name].on_push_item(npos, in_dir, stack)
|
||||
return NodeDef[name].on_push_item(npos, in_dir, stack)
|
||||
elseif name == "air" then
|
||||
minetest.add_item(npos, stack)
|
||||
return true
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end
|
||||
@ -624,4 +624,4 @@ minetest.register_chatcommand("my_expoints", {
|
||||
end
|
||||
end
|
||||
end
|
||||
})
|
||||
})
|
@ -7,10 +7,10 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
Configured inventory lib
|
||||
Assuming the inventory has the name "conf"
|
||||
|
||||
|
||||
]]--
|
||||
|
||||
-- for lazy programmers
|
||||
@ -38,7 +38,7 @@ function inv_lib.item_filter(pos, size)
|
||||
for idx = 1, size do
|
||||
local item_name = inv:get_stack("conf", idx):get_name()
|
||||
if item_name == "" then item_name = "unconfigured" end
|
||||
if not filter[item_name] then
|
||||
if not filter[item_name] then
|
||||
filter[item_name] = {}
|
||||
end
|
||||
table.insert(filter[item_name], idx)
|
||||
@ -49,7 +49,7 @@ end
|
||||
function inv_lib.allow_conf_inv_put(pos, listname, index, stack, player)
|
||||
local inv = M(pos):get_inventory()
|
||||
local list = inv:get_list(listname)
|
||||
|
||||
|
||||
if list[index]:get_count() == 0 then
|
||||
stack:set_count(1)
|
||||
inv:set_stack(listname, index, stack)
|
||||
@ -104,6 +104,6 @@ function inv_lib.take_item(pos, inv, listname, num, stacks)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
return inv_lib
|
@ -9,7 +9,7 @@
|
||||
See LICENSE.txt for more information
|
||||
|
||||
Count techage commands player related
|
||||
|
||||
|
||||
]]--
|
||||
|
||||
local PlayerName
|
||||
@ -43,10 +43,10 @@ local function output()
|
||||
if val > MAX_POINTS then
|
||||
local obj = minetest.get_player_by_name(name)
|
||||
if obj then
|
||||
minetest.chat_send_player(name,
|
||||
minetest.chat_send_player(name,
|
||||
S("[techage] The limit for 'number of commands per minute' has been exceeded.") ..
|
||||
" " .. string.format(MAX_POINTS .. " " .. S("is allowed. Current value is") .. " " .. val));
|
||||
minetest.log("action", "[techage] " .. name ..
|
||||
minetest.log("action", "[techage] " .. name ..
|
||||
" exceeds the limit for commands per minute. value = " .. val)
|
||||
local factor = 100 / (obj:get_armor_groups().fleshy or 100)
|
||||
obj:punch(obj, 1.0, {full_punch_interval=1.0, damage_groups = {fleshy=factor * 5}})
|
||||
@ -65,8 +65,7 @@ minetest.register_chatcommand("ta_limit", {
|
||||
description = "Get your current techage command limit value",
|
||||
func = function(name)
|
||||
local num = LastPlayerPoints[name] or 0
|
||||
return true, S("Your current value is") .. " " .. num .. " " .. S("per minute") .. ". " ..
|
||||
return true, S("Your current value is") .. " " .. num .. " " .. S("per minute") .. ". " ..
|
||||
MAX_POINTS .. " " .. S("is allowed")
|
||||
end
|
||||
})
|
||||
|
||||
|
@ -10,7 +10,7 @@
|
||||
See LICENSE.txt for more information
|
||||
|
||||
Fake Player
|
||||
|
||||
|
||||
]]--
|
||||
|
||||
-- Map method names to their return values
|
||||
@ -115,4 +115,3 @@ for method_name, return_value in pairs(methods) do
|
||||
return return_value
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -7,7 +7,7 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
Firebox basic functions
|
||||
|
||||
]]--
|
||||
@ -43,7 +43,7 @@ local function determine_burntimes()
|
||||
local fuel,_ = minetest.get_craft_result({method = "fuel", width = 1, items = {k}})
|
||||
techage.firebox.Burntime[k] = fuel.time
|
||||
end
|
||||
end
|
||||
end
|
||||
minetest.after(1, determine_burntimes)
|
||||
|
||||
function techage.firebox.formspec(nvm)
|
||||
@ -147,5 +147,4 @@ function techage.firebox.set_firehole(pos, on)
|
||||
minetest.swap_node(pos2, {name="air"})
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
@ -9,7 +9,7 @@
|
||||
See LICENSE.txt for more information
|
||||
|
||||
Block fly/move library
|
||||
|
||||
|
||||
]]--
|
||||
|
||||
-- for lazy programmers
|
||||
@ -22,7 +22,7 @@ local flylib = {}
|
||||
|
||||
local function lvect_add_vec(lvect1, offs)
|
||||
if not lvect1 or not offs then return end
|
||||
|
||||
|
||||
local lvect2 = {}
|
||||
for _, v in ipairs(lvect1) do
|
||||
lvect2[#lvect2 + 1] = vector.add(v, offs)
|
||||
@ -32,7 +32,7 @@ end
|
||||
|
||||
local function lvect_add(lvect1, lvect2)
|
||||
if not lvect1 or not lvect2 then return end
|
||||
|
||||
|
||||
local lvect3 = {}
|
||||
for i, v in ipairs(lvect1) do
|
||||
lvect3[#lvect3 + 1] = vector.add(v, lvect2[i])
|
||||
@ -42,7 +42,7 @@ end
|
||||
|
||||
local function lvect_subtract(lvect1, lvect2)
|
||||
if not lvect1 or not lvect2 then return end
|
||||
|
||||
|
||||
local lvect3 = {}
|
||||
for i, v in ipairs(lvect1) do
|
||||
lvect3[#lvect3 + 1] = vector.subtract(v, lvect2[i])
|
||||
@ -58,7 +58,7 @@ local function rotate(v, yaw)
|
||||
end
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
-- to_path function for the fly/move path
|
||||
-- to_path function for the fly/move path
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
local function strsplit(text)
|
||||
@ -79,9 +79,9 @@ function flylib.to_vector(s)
|
||||
local x,y,z = unpack(string.split(s, ","))
|
||||
if x and y and z then
|
||||
return {
|
||||
x=tonumber(x) or 0,
|
||||
y=tonumber(y) or 0,
|
||||
z=tonumber(z) or 0,
|
||||
x=tonumber(x) or 0,
|
||||
y=tonumber(y) or 0,
|
||||
z=tonumber(z) or 0,
|
||||
}
|
||||
end
|
||||
end
|
||||
@ -89,7 +89,7 @@ end
|
||||
function flylib.to_path(s, max_dist)
|
||||
local tPath
|
||||
local dist = 0
|
||||
|
||||
|
||||
for _, line in ipairs(strsplit(s)) do
|
||||
line = trim(line)
|
||||
line = string.split(line, "--", true, 1)[1] or ""
|
||||
@ -125,7 +125,7 @@ local function reverse_path(lpath)
|
||||
end
|
||||
return lres
|
||||
end
|
||||
|
||||
|
||||
local function dest_offset(lpath)
|
||||
local offs = {x=0, y=0, z=0}
|
||||
for i = 1,#lpath do
|
||||
@ -133,9 +133,9 @@ local function dest_offset(lpath)
|
||||
end
|
||||
return offs
|
||||
end
|
||||
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
-- Entity / Move / Attach / Detach
|
||||
-- Entity / Move / Attach / Detach
|
||||
-------------------------------------------------------------------------------
|
||||
local MIN_SPEED = 0.4
|
||||
local MAX_SPEED = 8
|
||||
@ -167,7 +167,7 @@ end
|
||||
-- Check access conflicts with other mods
|
||||
local function lock_player(player)
|
||||
local meta = player:get_meta()
|
||||
if meta:get_int("player_physics_locked") == 0 then
|
||||
if meta:get_int("player_physics_locked") == 0 then
|
||||
meta:set_int("player_physics_locked", 1)
|
||||
meta:set_string("player_physics_locked_by", "ta_flylib")
|
||||
return true
|
||||
@ -177,7 +177,7 @@ end
|
||||
|
||||
local function unlock_player(player)
|
||||
local meta = player:get_meta()
|
||||
if meta:get_int("player_physics_locked") == 1 then
|
||||
if meta:get_int("player_physics_locked") == 1 then
|
||||
if meta:get_string("player_physics_locked_by") == "ta_flylib" then
|
||||
meta:set_int("player_physics_locked", 0)
|
||||
meta:set_string("player_physics_locked_by", "")
|
||||
@ -294,7 +294,7 @@ local function entity_to_node(pos, obj)
|
||||
nvm.running = nil
|
||||
end
|
||||
obj:remove()
|
||||
|
||||
|
||||
local node = minetest.get_node(pos)
|
||||
local ndef1 = minetest.registered_nodes[name]
|
||||
local ndef2 = minetest.registered_nodes[node.name]
|
||||
@ -321,7 +321,7 @@ end
|
||||
local function node_to_entity(start_pos)
|
||||
local meta = M(start_pos)
|
||||
local node, metadata
|
||||
|
||||
|
||||
if meta:contains("ta_move_block") then
|
||||
-- Move-block stored as metadata
|
||||
node = minetest.deserialize(meta:get_string("ta_move_block"))
|
||||
@ -335,17 +335,17 @@ local function node_to_entity(start_pos)
|
||||
end
|
||||
local obj = minetest.add_entity(start_pos, "techage:move_item")
|
||||
if obj then
|
||||
local self = obj:get_luaentity()
|
||||
local self = obj:get_luaentity()
|
||||
local rot = techage.facedir_to_rotation(node.param2)
|
||||
obj:set_rotation(rot)
|
||||
obj:set_properties({wield_item=node.name})
|
||||
obj:set_armor_groups({immortal=1})
|
||||
|
||||
|
||||
-- To be able to revert to node
|
||||
self.item_name = node.name
|
||||
self.param2 = node.param2
|
||||
self.metadata = metadata or {}
|
||||
|
||||
|
||||
-- Prepare for attachments
|
||||
self.players = {}
|
||||
self.entities = {}
|
||||
@ -412,7 +412,7 @@ local function handover_to(obj, self, pos1)
|
||||
nvm.lpos1 = nvm.lpos1 or {}
|
||||
if self.move2to1 then
|
||||
nvm.lpos1[self.pos1_idx] = pos2
|
||||
|
||||
|
||||
else
|
||||
nvm.lpos1[self.pos1_idx] = pos1
|
||||
end
|
||||
@ -435,7 +435,7 @@ minetest.register_entity("techage:move_item", {
|
||||
visual_size = {x=0.67, y=0.67, z=0.67},
|
||||
selectionbox = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
||||
},
|
||||
|
||||
|
||||
get_staticdata = function(self)
|
||||
return minetest.serialize({
|
||||
item_name = self.item_name,
|
||||
@ -454,7 +454,7 @@ minetest.register_entity("techage:move_item", {
|
||||
respawn = true,
|
||||
})
|
||||
end,
|
||||
|
||||
|
||||
on_activate = function(self, staticdata)
|
||||
if staticdata then
|
||||
local tbl = minetest.deserialize(staticdata) or {}
|
||||
@ -478,7 +478,7 @@ minetest.register_entity("techage:move_item", {
|
||||
end
|
||||
end
|
||||
end,
|
||||
|
||||
|
||||
on_step = function(self, dtime, moveresult)
|
||||
local stop_obj = function(obj, self)
|
||||
local dest_pos = self.dest_pos
|
||||
@ -490,14 +490,14 @@ minetest.register_entity("techage:move_item", {
|
||||
self.ttl = 2
|
||||
return dest_pos
|
||||
end
|
||||
|
||||
|
||||
if self.dest_pos then
|
||||
local obj = self.object
|
||||
local pos = obj:get_pos()
|
||||
local dist = vector.distance(pos, self.dest_pos)
|
||||
local speed = calc_speed(obj:get_velocity())
|
||||
self.old_dist = self.old_dist or dist
|
||||
|
||||
|
||||
-- Landing
|
||||
if self.lpath and self.lpath[self.path_idx] then
|
||||
if dist < 1 or dist > self.old_dist then
|
||||
@ -520,26 +520,26 @@ minetest.register_entity("techage:move_item", {
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
self.old_dist = dist
|
||||
|
||||
-- Braking or limit max speed
|
||||
|
||||
-- Braking or limit max speed
|
||||
if self.handover then
|
||||
if speed > (dist * 4) or speed > self.max_speed then
|
||||
speed = math.min(speed, math.max(dist * 4, MIN_SPEED))
|
||||
speed = math.min(speed, math.max(dist * 4, MIN_SPEED))
|
||||
local vel = vector.multiply(self.dir,speed)
|
||||
obj:set_velocity(vel)
|
||||
obj:set_acceleration({x=0, y=0, z=0})
|
||||
end
|
||||
else
|
||||
if speed > (dist * 2) or speed > self.max_speed then
|
||||
speed = math.min(speed, math.max(dist * 2, MIN_SPEED))
|
||||
speed = math.min(speed, math.max(dist * 2, MIN_SPEED))
|
||||
local vel = vector.multiply(self.dir,speed)
|
||||
obj:set_velocity(vel)
|
||||
obj:set_acceleration({x=0, y=0, z=0})
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
elseif self.ttl then
|
||||
self.ttl = self.ttl - dtime
|
||||
if self.ttl < 0 then
|
||||
@ -566,19 +566,19 @@ end
|
||||
local function is_simple_node(pos)
|
||||
-- special handling
|
||||
local name = minetest.get_node(pos).name
|
||||
if SimpleNodes[name] ~= nil then
|
||||
return SimpleNodes[name]
|
||||
if SimpleNodes[name] ~= nil then
|
||||
return SimpleNodes[name]
|
||||
end
|
||||
|
||||
|
||||
local ndef = minetest.registered_nodes[name]
|
||||
if not ndef or name == "air" or name == "ignore" then return false end
|
||||
-- don't remove nodes with some intelligence or undiggable nodes
|
||||
if ndef.drop == "" then return false end
|
||||
if ndef.diggable == false then return false end
|
||||
if ndef.after_dig_node then return false end
|
||||
|
||||
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
local function move_node(pos, pos1_idx, start_pos, lpath, max_speed, height, move2to1, handover, cpos)
|
||||
local pos2 = next_path_pos(start_pos, lpath, 1)
|
||||
@ -618,7 +618,7 @@ local function move_nodes(pos, meta, nvm, lpath, max_speed, height, move2to1, ha
|
||||
--print("move_nodes", dump(nvm), dump(lpath), max_speed, height, move2to1, handover)
|
||||
local owner = meta:get_string("owner")
|
||||
techage.counting_add(owner, #nvm.lpos1 * #lpath)
|
||||
|
||||
|
||||
for idx = 1, #nvm.lpos1 do
|
||||
local pos1 = nvm.lpos1[idx]
|
||||
local pos2 = nvm.lpos2[idx]
|
||||
@ -650,27 +650,27 @@ local function move_nodes(pos, meta, nvm, lpath, max_speed, height, move2to1, ha
|
||||
return true
|
||||
end
|
||||
|
||||
function flylib.move_to_other_pos(pos, move2to1)
|
||||
function flylib.move_to_other_pos(pos, move2to1)
|
||||
local meta = M(pos)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
local lpath, err = flylib.to_path(meta:get_string("path")) or {}
|
||||
local max_speed = meta:contains("max_speed") and meta:get_int("max_speed") or MAX_SPEED
|
||||
local height = meta:contains("height") and meta:get_float("height") or 1
|
||||
local handover
|
||||
|
||||
|
||||
if err then return false end
|
||||
|
||||
|
||||
height = techage.in_range(height, 0, 1)
|
||||
max_speed = techage.in_range(max_speed, MIN_SPEED, MAX_SPEED)
|
||||
nvm.lpos1 = nvm.lpos1 or {}
|
||||
|
||||
|
||||
local offs = dest_offset(lpath)
|
||||
if move2to1 then
|
||||
lpath = reverse_path(lpath)
|
||||
end
|
||||
-- calc destination positions
|
||||
nvm.lpos2 = lvect_add_vec(nvm.lpos1, offs)
|
||||
|
||||
|
||||
if move2to1 then
|
||||
handover = meta:contains("handoverA") and meta:get_string("handoverA")
|
||||
else
|
||||
@ -688,9 +688,9 @@ function flylib.rotate_nodes(pos, posses1, rot)
|
||||
local posses2 = techage.rotate_around_center(posses1, rot, cpos)
|
||||
local param2
|
||||
local nodes2 = {}
|
||||
|
||||
|
||||
techage.counting_add(owner, #posses1 * 2)
|
||||
|
||||
|
||||
for i, pos1 in ipairs(posses1) do
|
||||
local node = techage.get_node_lvm(pos1)
|
||||
if rot == "l" then
|
||||
@ -730,4 +730,4 @@ minetest.register_on_dieplayer(function(player)
|
||||
end
|
||||
end)
|
||||
|
||||
return flylib
|
||||
return flylib
|
@ -7,7 +7,7 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
Keep only one formspec active per player
|
||||
|
||||
]]--
|
||||
@ -49,4 +49,4 @@ minetest.register_on_leaveplayer(function(player)
|
||||
ActiveFormspecs[ActivePlayer[name]] = nil
|
||||
ActivePlayer[name] = nil
|
||||
end
|
||||
end)
|
||||
end)
|
@ -7,7 +7,7 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
Oil fuel burning lib
|
||||
|
||||
]]--
|
||||
@ -51,7 +51,7 @@ function techage.fuel.fuel_container(x, y, nvm)
|
||||
fuel_percent..":default_furnace_fire_fg.png]"..
|
||||
techage.item_image(0.1, 1.1, itemname)..
|
||||
"container_end[]"
|
||||
end
|
||||
end
|
||||
|
||||
local function help(x, y)
|
||||
local tooltip = S("To add fuel punch\nthis block\nwith a fuel container")
|
||||
@ -108,17 +108,17 @@ function techage.fuel.on_punch(pos, node, puncher, pointed_thing)
|
||||
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 = techage.liquid.fill_on_punch(nvm, wielded_item, item_count, puncher)
|
||||
local new_item = techage.liquid.fill_on_punch(nvm, wielded_item, item_count, puncher)
|
||||
if new_item then
|
||||
puncher:set_wielded_item(new_item)
|
||||
M(pos):set_string("formspec", techage.fuel.formspec(pos, nvm))
|
||||
mem.blocking_time = techage.SystemTime + BLOCKING_TIME
|
||||
return
|
||||
end
|
||||
|
||||
|
||||
local ldef = techage.liquid.get_liquid_def(wielded_item)
|
||||
if ldef and ValidOilFuels[ldef.inv_item] then
|
||||
local lqd = (minetest.registered_nodes[node.name] or {}).liquid
|
||||
@ -139,7 +139,7 @@ function techage.fuel.get_fuel(nvm)
|
||||
nvm.liquid.amount = nvm.liquid.amount - 1
|
||||
return nvm.liquid.name
|
||||
end
|
||||
nvm.liquid.name = nil
|
||||
nvm.liquid.name = nil
|
||||
end
|
||||
return nil
|
||||
end
|
||||
|
@ -7,9 +7,9 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
Gravel Sieve basis functions
|
||||
|
||||
|
||||
]]--
|
||||
|
||||
-- Increase the probability over the natural occurrence
|
||||
@ -36,12 +36,12 @@ local function add_ores()
|
||||
and drop ~= ""
|
||||
and item.ore_type == "scatter"
|
||||
and item.wherein == "default:stone"
|
||||
and item.clust_scarcity ~= nil and item.clust_scarcity > 0
|
||||
and item.clust_num_ores ~= nil and item.clust_num_ores > 0
|
||||
and item.clust_scarcity ~= nil and item.clust_scarcity > 0
|
||||
and item.clust_num_ores ~= nil and item.clust_num_ores > 0
|
||||
and item.y_max ~= nil and item.y_min ~= nil then
|
||||
local factor = 0.5
|
||||
if item.y_max < -250 then
|
||||
factor = -250 / item.y_max
|
||||
if item.y_max < -250 then
|
||||
factor = -250 / item.y_max
|
||||
end
|
||||
local probability = (techage.ore_rarity / PROBABILITY_FACTOR) * item.clust_scarcity /
|
||||
(item.clust_num_ores * factor)
|
||||
@ -64,7 +64,7 @@ local function add_ores()
|
||||
overall_probability = overall_probability + 1.0/probability
|
||||
end
|
||||
minetest.log("info", string.format("[techage] Overall probability %g", overall_probability))
|
||||
end
|
||||
end
|
||||
|
||||
minetest.after(1, add_ores)
|
||||
|
||||
@ -93,4 +93,4 @@ function techage.gravelsieve_get_random_basalt_ore()
|
||||
else
|
||||
return ItemStack("techage:sieved_basalt_gravel")
|
||||
end
|
||||
end
|
||||
end
|
@ -7,7 +7,7 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
For chests and tanks with hyperloop support
|
||||
|
||||
]]--
|
||||
@ -85,7 +85,7 @@ end
|
||||
local function update_node_data(pos, state, conn_name, remote_name, rmt_pos)
|
||||
local meta = M(pos)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
|
||||
|
||||
if state == "server_connected" then
|
||||
Stations:update(pos, {conn_name=conn_name, single="nil"})
|
||||
meta:set_string("status", "server")
|
||||
@ -138,7 +138,7 @@ techage.hyperloop.SUBMENU = {
|
||||
choices = "",
|
||||
on_dropdown = on_dropdown,
|
||||
name = "remote_name",
|
||||
label = S("Remote name"),
|
||||
label = S("Remote name"),
|
||||
tooltip = S("Connection name of the remote block"),
|
||||
},
|
||||
}
|
||||
@ -153,7 +153,7 @@ function techage.hyperloop.is_client(pos)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
function techage.hyperloop.is_server(pos)
|
||||
if HYPERLOOP then
|
||||
if M(pos):get_string("status") == "server" then
|
||||
@ -184,28 +184,28 @@ function techage.hyperloop.remote_pos(pos)
|
||||
end
|
||||
return pos
|
||||
end
|
||||
|
||||
|
||||
function techage.hyperloop.after_place_node(pos, placer, node_type)
|
||||
if HYPERLOOP then
|
||||
Stations:set(pos, node_type, {owner=placer:get_player_name()})
|
||||
M(pos):set_string("node_type", node_type)
|
||||
Tube:after_place_node(pos)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function techage.hyperloop.after_dig_node(pos, oldnode, oldmetadata, digger)
|
||||
if HYPERLOOP then
|
||||
local conn_name = oldmetadata.fields.conn_name
|
||||
local remote_name = oldmetadata.fields.remote_name
|
||||
local loc_pos, rmt_pos = pos, techage.get_nvm(pos).rmt_pos
|
||||
|
||||
|
||||
-- Close connections
|
||||
if remote_name and rmt_pos then -- Connected client
|
||||
update_node_data(rmt_pos, "server_not_connected", remote_name, "")
|
||||
elseif conn_name and rmt_pos then -- Connected server
|
||||
update_node_data(rmt_pos, "client_not_connected", "", conn_name)
|
||||
end
|
||||
|
||||
|
||||
Tube:after_dig_node(pos)
|
||||
Stations:delete(pos)
|
||||
end
|
||||
@ -218,7 +218,7 @@ function techage.hyperloop.after_formspec(pos, fields)
|
||||
local remote_name = meta:get_string("remote_name")
|
||||
local status = meta:contains("status") and meta:get_string("status") or "not connected"
|
||||
local loc_pos, rmt_pos = pos, techage.get_nvm(pos).rmt_pos
|
||||
|
||||
|
||||
if status == "not connected" then
|
||||
if fields.remote_name ~= "" then -- Client
|
||||
local rmt_pos = get_remote_pos(pos, fields.remote_name)
|
||||
@ -232,4 +232,3 @@ function techage.hyperloop.after_formspec(pos, fields)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -143,4 +143,4 @@ function techage.add_laser(pos, pos1, pos2)
|
||||
end
|
||||
|
||||
-- techage.del_laser(pos)
|
||||
techage.del_laser = del_laser
|
||||
techage.del_laser = del_laser
|
@ -7,7 +7,7 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
For the transition from v0.26 to v1.0
|
||||
|
||||
]]--
|
||||
@ -22,4 +22,4 @@ function techage.register_node_for_v1_transition(nodenames, on_node_load)
|
||||
on_node_load(pos, node)
|
||||
end
|
||||
})
|
||||
end
|
||||
end
|
@ -7,7 +7,7 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
Helper functions
|
||||
|
||||
]]--
|
||||
@ -69,8 +69,8 @@ local RotationViaYAxis = {}
|
||||
for _,row in ipairs(ROTATION) do
|
||||
for i = 1,4 do
|
||||
local val = row[i]
|
||||
local left = row[i == 1 and 4 or i - 1]
|
||||
local right = row[i == 4 and 1 or i + 1]
|
||||
local left = row[i == 1 and 4 or i - 1]
|
||||
local right = row[i == 4 and 1 or i + 1]
|
||||
RotationViaYAxis[val] = {left, right}
|
||||
end
|
||||
end
|
||||
@ -250,8 +250,8 @@ end
|
||||
|
||||
-- returns true, if node can be dug, otherwise false
|
||||
function techage.can_node_dig(node, ndef)
|
||||
if RegisteredNodesToBeDug[node.name] then
|
||||
return true
|
||||
if RegisteredNodesToBeDug[node.name] then
|
||||
return true
|
||||
end
|
||||
if not ndef then return false end
|
||||
if node.name == "ignore" then return false end
|
||||
@ -329,7 +329,7 @@ function techage.dropped_node(node, ndef)
|
||||
return handle_drop(ndef.drop)
|
||||
end
|
||||
return ndef.drop or node.name
|
||||
end
|
||||
end
|
||||
|
||||
-- needed for windmill plants
|
||||
local function determine_ocean_ids()
|
||||
@ -375,7 +375,7 @@ function techage.item_image(x, y, itemname, count)
|
||||
end
|
||||
label = "label["..(x + offs)..","..(y + 0.45)..";"..tostring(size).."]"
|
||||
end
|
||||
|
||||
|
||||
return "box["..x..","..y..";0.85,0.9;#808080]"..
|
||||
"item_image["..x..","..y..";1,1;"..itemname.."]"..
|
||||
tooltip..
|
||||
@ -386,12 +386,12 @@ function techage.item_image_small(x, y, itemname, tooltip_prefix)
|
||||
local name = unpack(string.split(itemname, " "))
|
||||
local tooltip = ""
|
||||
local ndef = minetest.registered_nodes[name] or minetest.registered_items[name] or minetest.registered_craftitems[name]
|
||||
|
||||
|
||||
if ndef and ndef.description then
|
||||
local text = minetest.formspec_escape(ndef.description)
|
||||
tooltip = "tooltip["..x..","..y..";0.8,0.8;"..tooltip_prefix..": "..text..";#0C3D32;#FFFFFF]"
|
||||
end
|
||||
|
||||
|
||||
return "box["..x..","..y..";0.65,0.7;#808080]"..
|
||||
"item_image["..x..","..y..";0.8,0.8;"..name.."]"..
|
||||
tooltip
|
||||
@ -470,7 +470,7 @@ local BUFFER_DEPTH = 10
|
||||
function techage.historybuffer_add(pos, s)
|
||||
local mem = techage.get_mem(pos)
|
||||
mem.hisbuf = mem.hisbuf or {}
|
||||
|
||||
|
||||
if #s > 2 then
|
||||
table.insert(mem.hisbuf, s)
|
||||
if #mem.hisbuf > BUFFER_DEPTH then
|
||||
@ -484,7 +484,7 @@ function techage.historybuffer_priv(pos)
|
||||
local mem = techage.get_mem(pos)
|
||||
mem.hisbuf = mem.hisbuf or {}
|
||||
mem.hisbuf_idx = mem.hisbuf_idx or 1
|
||||
|
||||
|
||||
mem.hisbuf_idx = math.max(1, mem.hisbuf_idx - 1)
|
||||
return mem.hisbuf[mem.hisbuf_idx]
|
||||
end
|
||||
@ -493,7 +493,7 @@ function techage.historybuffer_next(pos)
|
||||
local mem = techage.get_mem(pos)
|
||||
mem.hisbuf = mem.hisbuf or {}
|
||||
mem.hisbuf_idx = mem.hisbuf_idx or 1
|
||||
|
||||
|
||||
mem.hisbuf_idx = math.min(#mem.hisbuf, mem.hisbuf_idx + 1)
|
||||
return mem.hisbuf[mem.hisbuf_idx]
|
||||
end
|
||||
@ -546,4 +546,4 @@ function techage.set_expoints(player, ex_points)
|
||||
return true
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
@ -7,7 +7,7 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
Liquid lib
|
||||
|
||||
]]--
|
||||
@ -55,7 +55,7 @@ function techage.liquid.formspec(pos, nvm, title)
|
||||
help(7.4, -0.1)..
|
||||
techage.item_image(3.5, 1, itemname)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function techage.liquid.is_empty(pos)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
@ -75,7 +75,7 @@ techage.liquid.recv_message = {
|
||||
return "unsupported"
|
||||
end
|
||||
end,
|
||||
}
|
||||
}
|
||||
|
||||
-- like: register_liquid("techage:ta3_barrel_oil", "techage:ta3_barrel_empty", 10, "techage:oil")
|
||||
function techage.register_liquid(full_container, empty_container, container_size, inv_item)
|
||||
@ -88,7 +88,7 @@ end
|
||||
local function get_liquid_def(full_container)
|
||||
return LiquidDef[full_container]
|
||||
end
|
||||
|
||||
|
||||
local function get_container_def(container_name)
|
||||
return ContainerDef[container_name]
|
||||
end
|
||||
@ -109,7 +109,7 @@ local function fill_container(pos, inv, empty_container)
|
||||
local full_container = get_full_container(empty_container, nvm.liquid.name)
|
||||
if empty_container and full_container then
|
||||
local ldef = get_liquid_def(full_container)
|
||||
if ldef and nvm.liquid.amount - ldef.size >= 0 then
|
||||
if ldef and nvm.liquid.amount - ldef.size >= 0 then
|
||||
if inv:room_for_item("dst", {name = full_container}) then
|
||||
inv:add_item("dst", {name = full_container})
|
||||
nvm.liquid.amount = nvm.liquid.amount - ldef.size
|
||||
@ -134,7 +134,7 @@ local function empty_container(pos, inv, full_container)
|
||||
local tank_size = (ndef_lqd and ndef_lqd.capa) or 0
|
||||
local ldef = get_liquid_def(full_container)
|
||||
if ldef and (not nvm.liquid.name or ldef.inv_item == nvm.liquid.name) then
|
||||
if nvm.liquid.amount + ldef.size <= tank_size then
|
||||
if nvm.liquid.amount + ldef.size <= tank_size then
|
||||
if inv:room_for_item("dst", {name = ldef.container}) then
|
||||
inv:add_item("dst", {name = ldef.container})
|
||||
nvm.liquid.amount = nvm.liquid.amount + ldef.size
|
||||
@ -157,22 +157,22 @@ local function fill_on_punch(nvm, empty_container, item_count, puncher)
|
||||
if empty_container and full_container then
|
||||
local item = {name = full_container}
|
||||
local ldef = get_liquid_def(full_container)
|
||||
if ldef and nvm.liquid.amount - ldef.size >= 0 then
|
||||
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", {name = full_container}) then
|
||||
-- add full container and return
|
||||
-- the empty once - 1
|
||||
inv:add_item("main", {name = full_container})
|
||||
inv:add_item("main", {name = full_container})
|
||||
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
|
||||
if nvm.liquid.amount == 0 then
|
||||
nvm.liquid.name = nil
|
||||
end
|
||||
return item -- to be added to the players inv.
|
||||
end
|
||||
@ -181,8 +181,8 @@ local function fill_on_punch(nvm, empty_container, item_count, puncher)
|
||||
local count = math.max(nvm.liquid.amount, 99)
|
||||
local name = nvm.liquid.name
|
||||
nvm.liquid.amount = nvm.liquid.amount - count
|
||||
if nvm.liquid.amount == 0 then
|
||||
nvm.liquid.name = nil
|
||||
if nvm.liquid.amount == 0 then
|
||||
nvm.liquid.name = nil
|
||||
end
|
||||
return {name = name, count = count}
|
||||
end
|
||||
@ -195,7 +195,7 @@ local function legacy_items(full_container, item_count)
|
||||
elseif full_container == "techage:oil_source" then
|
||||
return {container = "", size = item_count, inv_item = full_container}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- check if the wielded full container can be emptied into the tank
|
||||
local function empty_on_punch(pos, nvm, full_container, item_count)
|
||||
@ -203,10 +203,10 @@ local function empty_on_punch(pos, nvm, full_container, item_count)
|
||||
nvm.liquid.amount = nvm.liquid.amount or 0
|
||||
local lqd_def = get_liquid_def(full_container) or legacy_items(full_container, item_count)
|
||||
local ndef_lqd = LQD(pos)
|
||||
if lqd_def and ndef_lqd then
|
||||
if lqd_def and ndef_lqd then
|
||||
local tank_size = ndef_lqd.capa or 0
|
||||
if not nvm.liquid.name or lqd_def.inv_item == nvm.liquid.name then
|
||||
if nvm.liquid.amount + lqd_def.size <= tank_size then
|
||||
if nvm.liquid.amount + lqd_def.size <= tank_size then
|
||||
nvm.liquid.amount = nvm.liquid.amount + lqd_def.size
|
||||
nvm.liquid.name = lqd_def.inv_item
|
||||
return {name = lqd_def.container}
|
||||
@ -227,10 +227,10 @@ function techage.liquid.on_punch(pos, node, puncher, pointed_thing)
|
||||
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_on_punch(nvm, wielded_item, item_count, puncher)
|
||||
local new_item = fill_on_punch(nvm, wielded_item, item_count, puncher)
|
||||
or empty_on_punch(pos, nvm, wielded_item, item_count)
|
||||
if new_item then
|
||||
puncher:set_wielded_item(new_item)
|
||||
@ -254,4 +254,4 @@ techage.liquid.get_full_container = get_full_container
|
||||
techage.liquid.fill_container = fill_container
|
||||
techage.liquid.empty_container = empty_container
|
||||
techage.liquid.fill_on_punch = fill_on_punch
|
||||
techage.liquid.empty_on_punch = empty_on_punch
|
||||
techage.liquid.empty_on_punch = empty_on_punch
|
@ -90,4 +90,3 @@ techage.manual_DE.aPlanTable = {
|
||||
"",
|
||||
}
|
||||
|
||||
|
||||
|
@ -9,7 +9,7 @@
|
||||
See LICENSE.txt for more information
|
||||
|
||||
mark.lua:
|
||||
|
||||
|
||||
]]--
|
||||
|
||||
local marker_region = {}
|
||||
@ -27,9 +27,9 @@ end
|
||||
function techage.mark_region(name, pos1, pos2, owner, secs)
|
||||
|
||||
if not name or not pos1 or not pos2 then return end
|
||||
|
||||
|
||||
techage.unmark_region(name)
|
||||
|
||||
|
||||
local thickness = 0.2
|
||||
local sizex, sizey, sizez = (1 + pos2.x - pos1.x) / 2, (1 + pos2.y - pos1.y) / 2, (1 + pos2.z - pos1.z) / 2
|
||||
local markers = {}
|
||||
@ -96,4 +96,3 @@ minetest.register_entity(":techage:region_cube", {
|
||||
techage.unmark_region(self.player_name)
|
||||
end,
|
||||
})
|
||||
|
||||
|
@ -9,7 +9,7 @@
|
||||
See LICENSE.txt for more information
|
||||
|
||||
mark.lua:
|
||||
|
||||
|
||||
]]--
|
||||
|
||||
local marker_region = {}
|
||||
@ -44,7 +44,7 @@ function techage.mark_cube(name, pos1, pos2, nametag, color, time)
|
||||
local size_x = math.abs(pos1.x - pos2.x) + 1
|
||||
local size_y = math.abs(pos1.y - pos2.y) + 1
|
||||
local size_z = math.abs(pos1.z - pos2.z) + 1
|
||||
|
||||
|
||||
local marker = minetest.add_entity(
|
||||
{x = new_x, y = new_y, z = new_z}, "techage:position_cube")
|
||||
if marker ~= nil then
|
||||
@ -126,4 +126,3 @@ minetest.register_entity(":techage:position_side", {
|
||||
techage.unmark_position(self.player_name)
|
||||
end,
|
||||
})
|
||||
|
||||
|
@ -9,12 +9,12 @@
|
||||
See LICENSE.txt for more information
|
||||
|
||||
Block marker lib for door/move/fly controller
|
||||
|
||||
|
||||
]]--
|
||||
|
||||
local marker = {}
|
||||
|
||||
local MarkedNodes = {} -- t[player] = {{entity, pos},...}
|
||||
local MarkedNodes = {} -- t[player] = {{entity, pos},...}
|
||||
local MaxNumber = {}
|
||||
local CurrentPos -- to mark punched entities
|
||||
|
||||
@ -67,11 +67,11 @@ end
|
||||
minetest.register_on_punchnode(function(pos, node, puncher, pointed_thing)
|
||||
if puncher and puncher:is_player() then
|
||||
local name = puncher:get_player_name()
|
||||
|
||||
|
||||
if not MarkedNodes[name] then
|
||||
return
|
||||
end
|
||||
|
||||
|
||||
mark_position(name, pointed_thing.under)
|
||||
end
|
||||
end)
|
||||
|
@ -13,33 +13,33 @@
|
||||
]]--
|
||||
|
||||
|
||||
--[[
|
||||
--[[
|
||||
|
||||
Node states:
|
||||
|
||||
+-----------------------------------+ +------------+
|
||||
| | | |
|
||||
| V V |
|
||||
| +---------+ |
|
||||
| | | |
|
||||
| +---------| STOPPED | |
|
||||
| | | | |
|
||||
| button | +---------+ |
|
||||
| | ^ |
|
||||
button | V | button |
|
||||
| +---------+ | | button
|
||||
| +--------->| |---------+ |
|
||||
| | power | RUNNING | |
|
||||
| | +------| |---------+ |
|
||||
| | | +---------+ | |
|
||||
| | | ^ | | |
|
||||
| | | | | | |
|
||||
| | V | V V |
|
||||
| +---------+ +----------+ +---------+ |
|
||||
| | | | | | | |
|
||||
+---| NOPOWER | | STANDBY/ | | FAULT |----------+
|
||||
| | | BLOCKED | | |
|
||||
+---------+ +----------+ +---------+
|
||||
| | | |
|
||||
| V V |
|
||||
| +---------+ |
|
||||
| | | |
|
||||
| +---------| STOPPED | |
|
||||
| | | | |
|
||||
| button | +---------+ |
|
||||
| | ^ |
|
||||
button | V | button |
|
||||
| +---------+ | | button
|
||||
| +--------->| |---------+ |
|
||||
| | power | RUNNING | |
|
||||
| | +------| |---------+ |
|
||||
| | | +---------+ | |
|
||||
| | | ^ | | |
|
||||
| | | | | | |
|
||||
| | V | V V |
|
||||
| +---------+ +----------+ +---------+ |
|
||||
| | | | | | | |
|
||||
+---| NOPOWER | | STANDBY/ | | FAULT |----------+
|
||||
| | | BLOCKED | | |
|
||||
+---------+ +----------+ +---------+
|
||||
|
||||
|
||||
| cycle time operational needs power
|
||||
@ -74,12 +74,12 @@ techage.FAULT = 5 -- any fault state (e.g. wrong source items), which can be f
|
||||
techage.STOPPED = 6 -- not operational/turned off
|
||||
|
||||
techage.StatesImg = {
|
||||
"techage_inv_button_on.png",
|
||||
"techage_inv_button_on.png",
|
||||
"techage_inv_button_warning.png",
|
||||
"techage_inv_button_standby.png",
|
||||
"techage_inv_button_nopower.png",
|
||||
"techage_inv_button_standby.png",
|
||||
"techage_inv_button_nopower.png",
|
||||
"techage_inv_button_error.png",
|
||||
"techage_inv_button_off.png",
|
||||
"techage_inv_button_off.png",
|
||||
}
|
||||
|
||||
local function error(pos, msg)
|
||||
@ -176,7 +176,7 @@ function NodeStates:new(attr)
|
||||
-- optional
|
||||
countdown_ticks = attr.countdown_ticks or 1,
|
||||
node_name_passive = attr.node_name_passive,
|
||||
node_name_active = attr.node_name_active,
|
||||
node_name_active = attr.node_name_active,
|
||||
infotext_name = attr.infotext_name,
|
||||
has_power = attr.has_power or has_power,
|
||||
can_start = attr.can_start or can_start,
|
||||
@ -274,7 +274,7 @@ function NodeStates:start(pos, nvm)
|
||||
self.on_state_change(pos, state, RUNNING)
|
||||
end
|
||||
start_timer_delayed(pos, self.cycle_time)
|
||||
|
||||
|
||||
if self.quick_start and state == STOPPED then
|
||||
self.quick_start(pos, 0)
|
||||
end
|
||||
@ -305,7 +305,7 @@ function NodeStates:standby(pos, nvm, err_string)
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
-- special case of standby for pushing nodes
|
||||
function NodeStates:blocked(pos, nvm, err_string)
|
||||
@ -330,7 +330,7 @@ function NodeStates:blocked(pos, nvm, err_string)
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
function NodeStates:nopower(pos, nvm, err_string)
|
||||
local state = nvm.techage_state or RUNNING
|
||||
@ -354,7 +354,7 @@ function NodeStates:nopower(pos, nvm, err_string)
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
function NodeStates:fault(pos, nvm, err_string)
|
||||
local state = nvm.techage_state or STOPPED
|
||||
@ -379,7 +379,7 @@ function NodeStates:fault(pos, nvm, err_string)
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
function NodeStates:get_state(nvm)
|
||||
return nvm.techage_state or techage.STOPPED
|
||||
@ -431,7 +431,7 @@ function NodeStates:state_button_event(pos, nvm, fields)
|
||||
if state == STOPPED or state == STANDBY or state == BLOCKED then
|
||||
if not self:start(pos, nvm) and (state == STANDBY or state == BLOCKED) then
|
||||
self:stop(pos, nvm)
|
||||
end
|
||||
end
|
||||
elseif state == RUNNING or state == FAULT or state == NOPOWER then
|
||||
self:stop(pos, nvm)
|
||||
end
|
||||
@ -478,7 +478,7 @@ function NodeStates:on_receive_message(pos, topic, payload)
|
||||
return "unsupported"
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
-- restart timer
|
||||
function NodeStates:on_node_load(pos)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
@ -503,4 +503,4 @@ minetest.register_node("techage:defect_dummy", {
|
||||
drop = "",
|
||||
groups = {cracky=2, crumbly=2, choppy=2, not_in_creative_inventory=1},
|
||||
is_ground_content = false,
|
||||
})
|
||||
})
|
@ -7,7 +7,7 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
Data storage system for node related volatile and non-volatile data.
|
||||
Non-volatile data is stored from time to time and at shutdown.
|
||||
Volatile data is lost at every shutdown.
|
||||
@ -41,14 +41,14 @@ local function get_keys(pos)
|
||||
end
|
||||
|
||||
local function pos_from_key(key1, key2)
|
||||
|
||||
|
||||
local x1 = (math.floor(key1 / (4096 * 4096)) - 2048) * 16
|
||||
local y1 = ((math.floor(key1 / 4096) % 4096) - 2048) * 16
|
||||
local z1 = ((key1 % 4096) - 2048) * 16
|
||||
local x2 = math.floor(key2 / (16 * 16))
|
||||
local y2 = math.floor(key2 / 16) % 16
|
||||
local z2 = key2 % 16
|
||||
|
||||
|
||||
return {x = x1 + x2, y = y1 + y2, z = z1 + z2}
|
||||
end
|
||||
|
||||
@ -66,8 +66,8 @@ local function debug(key1, item)
|
||||
end
|
||||
print("mapblock", string.format("%09X", key1), cnt.." nodes")
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
-------------------------------------------------------------------
|
||||
-- Storage scheduler
|
||||
-------------------------------------------------------------------
|
||||
@ -137,12 +137,12 @@ end
|
||||
-- Returns non-volatile node data as table
|
||||
function techage.get_nvm(pos)
|
||||
local key1, key2 = get_keys(pos)
|
||||
|
||||
|
||||
if not NvmStore[key1] then
|
||||
NvmStore[key1] = backend.get_mapblock_data(key1)
|
||||
push(key1)
|
||||
end
|
||||
|
||||
|
||||
local block = NvmStore[key1]
|
||||
block.in_use = true
|
||||
if not block[key2] then
|
||||
@ -161,9 +161,9 @@ end
|
||||
function techage.del_mem(pos)
|
||||
local hash = minetest.hash_node_position(pos)
|
||||
MemStore[hash] = nil
|
||||
|
||||
|
||||
local key1, key2 = get_keys(pos)
|
||||
NvmStore[key1] = NvmStore[key1] or backend.get_mapblock_data(key1)
|
||||
NvmStore[key1][key2] = nil
|
||||
backend.store_mapblock_data(key1, NvmStore[key1])
|
||||
end
|
||||
end
|
@ -7,7 +7,7 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
Storage backend for node related data as node metadata
|
||||
|
||||
]]--
|
||||
@ -35,7 +35,7 @@ if use_marshal then
|
||||
if not marshal then
|
||||
error("Please install marshal via 'luarocks install lua-marshal'")
|
||||
end
|
||||
|
||||
|
||||
serialize = marshal.encode
|
||||
|
||||
deserialize = function(s)
|
||||
@ -76,12 +76,12 @@ end
|
||||
function api.get_node_data(pos)
|
||||
local tbl = {}
|
||||
local s = M(pos):get_string("ta_data")
|
||||
|
||||
|
||||
if s ~= "" then
|
||||
tbl = deserialize(s) or {}
|
||||
end
|
||||
tbl._POS_ = table.copy(pos)
|
||||
|
||||
|
||||
return tbl
|
||||
end
|
||||
|
||||
@ -99,4 +99,4 @@ function api.restore_at_startup()
|
||||
return {}
|
||||
end
|
||||
|
||||
return api
|
||||
return api
|
@ -7,7 +7,7 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
Storage backend for node related data via sqlite database
|
||||
|
||||
]]--
|
||||
@ -44,7 +44,7 @@ if sqlite3 then sqlite3 = nil end
|
||||
|
||||
db:exec[[
|
||||
CREATE TABLE mapblocks(id INTEGER PRIMARY KEY, key INTEGER, data BLOB);
|
||||
CREATE UNIQUE INDEX idx ON mapblocks(key);
|
||||
CREATE UNIQUE INDEX idx ON mapblocks(key);
|
||||
]]
|
||||
|
||||
local set = db:prepare("INSERT or REPLACE INTO mapblocks VALUES(NULL, ?, ?);")
|
||||
@ -54,7 +54,7 @@ local function set_block(key, data)
|
||||
set:reset()
|
||||
set:bind(1, key)
|
||||
set:bind_blob(2, data)
|
||||
set:step()
|
||||
set:step()
|
||||
return true
|
||||
end
|
||||
|
||||
@ -76,8 +76,8 @@ function api.store_mapblock_data(key, mapblock_data)
|
||||
--local s = marshal.encode(mapblock_data)
|
||||
local s = minetest.serialize(mapblock_data)
|
||||
return set_block(key, s)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
function api.get_mapblock_data(key)
|
||||
local s = get_block(key)
|
||||
if s then
|
||||
@ -89,8 +89,8 @@ function api.get_mapblock_data(key)
|
||||
end
|
||||
api.store_mapblock_data(key, {})
|
||||
return {}
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
function api.get_node_data(pos)
|
||||
-- legacy data available?
|
||||
local s = M(pos):get_string("ta_data")
|
||||
@ -116,4 +116,4 @@ function api.restore_at_startup()
|
||||
return {}
|
||||
end
|
||||
|
||||
return api
|
||||
return api
|
@ -7,7 +7,7 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
Storage backend for node number mapping via sqlite database
|
||||
|
||||
]]--
|
||||
@ -46,7 +46,7 @@ if sqlite3 then sqlite3 = nil end
|
||||
|
||||
db:exec[[
|
||||
CREATE TABLE numbers(id INTEGER PRIMARY KEY, number INTEGER, x INTEGER, y INTEGER, z INTEGER);
|
||||
CREATE UNIQUE INDEX idx ON numbers(number);
|
||||
CREATE UNIQUE INDEX idx ON numbers(number);
|
||||
]]
|
||||
|
||||
local set = db:prepare("INSERT or REPLACE INTO numbers VALUES(NULL, ?, ?, ?, ?);")
|
||||
@ -58,7 +58,7 @@ local function set_block(number, pos)
|
||||
set:bind(2, pos.x)
|
||||
set:bind(3, pos.y)
|
||||
set:bind(4, pos.z)
|
||||
set:step()
|
||||
set:step()
|
||||
return true
|
||||
end
|
||||
|
||||
@ -94,7 +94,7 @@ if Version == 3 then
|
||||
storage:set_string(number, "")
|
||||
end
|
||||
end
|
||||
elseif Version == 4 then
|
||||
elseif Version == 4 then
|
||||
NextNumber = storage:get_int("NextNumber")
|
||||
else
|
||||
error("[] Invalid version number for 'number to pos mapping' table!")
|
||||
@ -108,28 +108,28 @@ local api = {}
|
||||
|
||||
function api.get_nodepos(number)
|
||||
return get_block(number)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
function api.set_nodepos(number, pos)
|
||||
set_block(number, pos)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
function api.add_nodepos(pos)
|
||||
local num = tostring(NextNumber)
|
||||
NextNumber = NextNumber + 1
|
||||
storage:set_int("NextNumber", NextNumber)
|
||||
set_block(num, pos)
|
||||
return num
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
function api.del_nodepos(number)
|
||||
del_block(number)
|
||||
end
|
||||
end
|
||||
|
||||
-- delete invalid entries
|
||||
function api.delete_invalid_entries(node_def)
|
||||
minetest.log("info", "[TechAge] Data maintenance started")
|
||||
for id, num, x, y, z in db:urows('SELECT * FROM numbers') do
|
||||
for id, num, x, y, z in db:urows('SELECT * FROM numbers') do
|
||||
local pos = {x = x, y = y, z = z}
|
||||
local name = techage.get_node_lvm(pos).name
|
||||
if not node_def[name] then
|
||||
@ -137,6 +137,6 @@ function api.delete_invalid_entries(node_def)
|
||||
end
|
||||
end
|
||||
minetest.log("info", "[TechAge] Data maintenance finished")
|
||||
end
|
||||
end
|
||||
|
||||
return api
|
||||
return api
|
@ -7,7 +7,7 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
Storage backend for node number mapping via mod storage
|
||||
|
||||
]]--
|
||||
@ -59,23 +59,23 @@ storage:set_int("Version", Version)
|
||||
-------------------------------------------------------------------
|
||||
function backend.get_nodepos(number)
|
||||
return minetest.string_to_pos(storage:get_string(number))
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
function backend.set_nodepos(number, pos)
|
||||
storage:set_string(number, minetest.pos_to_string(pos))
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
function backend.add_nodepos(pos)
|
||||
local num = tostring(NextNumber)
|
||||
NextNumber = NextNumber + 1
|
||||
storage:set_int("NextNumber", NextNumber)
|
||||
storage:set_string(num, minetest.pos_to_string(pos))
|
||||
return num
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
function backend.del_nodepos(number)
|
||||
storage:set_string(number, "")
|
||||
end
|
||||
end
|
||||
|
||||
-- delete invalid entries
|
||||
function backend.delete_invalid_entries(node_def)
|
||||
@ -88,11 +88,11 @@ function backend.delete_invalid_entries(node_def)
|
||||
if not node_def[name] then
|
||||
backend.del_nodepos(number)
|
||||
else
|
||||
minetest.get_meta(pos):set_string("node_number", number)
|
||||
minetest.get_meta(pos):set_string("node_number", number)
|
||||
end
|
||||
end
|
||||
end
|
||||
minetest.log("info", "[TechAge] Data maintenance finished")
|
||||
end
|
||||
end
|
||||
|
||||
return backend
|
||||
return backend
|
@ -100,4 +100,4 @@ techage.OggFileList = {
|
||||
"default_wood_footstep", -- ./games/minetest_game/mods/default/sounds
|
||||
"default_furnace_active", -- ./games/minetest_game/mods/default/sounds
|
||||
"default_item_smoke", -- ./games/minetest_game/mods/default/sounds
|
||||
}
|
||||
}
|
@ -7,7 +7,7 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
Recipe lib for formspecs
|
||||
|
||||
]]--
|
||||
@ -38,7 +38,7 @@ local GROUP_ITEMS = {
|
||||
local RECIPE = {
|
||||
output = {name = "", num = 0},
|
||||
waste = {name = "", num = 0},
|
||||
input = {
|
||||
input = {
|
||||
{name = "", num =0},
|
||||
{name = "", num =0},
|
||||
{name = "", num =0},
|
||||
@ -52,7 +52,7 @@ local function filter_recipes_based_on_points(recipes, owner)
|
||||
local player = minetest.get_player_by_name(owner)
|
||||
ex_points = techage.get_expoints(player) or 0
|
||||
end
|
||||
|
||||
|
||||
local tbl = {}
|
||||
for _,item in ipairs(recipes) do
|
||||
if ex_points >= (item.ex_points or 0) then
|
||||
@ -78,7 +78,7 @@ function techage.recipes.get(nvm, rtype)
|
||||
local recipes = Recipes[rtype] or {}
|
||||
return recipes[nvm.recipe_idx or 1]
|
||||
end
|
||||
|
||||
|
||||
-- Add 4 input/output/waste recipe
|
||||
-- {
|
||||
-- output = "<item-name> <units>", -- units = 1..n
|
||||
@ -92,7 +92,7 @@ function techage.recipes.add(rtype, recipe)
|
||||
if not Recipes[rtype] then
|
||||
Recipes[rtype] = {}
|
||||
end
|
||||
|
||||
|
||||
local name, num, output
|
||||
local item = {input = {}}
|
||||
for idx = 1,4 do
|
||||
@ -100,7 +100,7 @@ function techage.recipes.add(rtype, recipe)
|
||||
name, num = unpack(string.split(inp, " "))
|
||||
item.input[idx] = {name = name or "", num = tonumber(num) or 0}
|
||||
end
|
||||
if recipe.waste then
|
||||
if recipe.waste then
|
||||
name, num = unpack(string.split(recipe.waste, " "))
|
||||
else
|
||||
name, num = "", "0"
|
||||
@ -114,12 +114,12 @@ function techage.recipes.add(rtype, recipe)
|
||||
output = name
|
||||
|
||||
techage.recipes.register_craft({
|
||||
output = recipe.output,
|
||||
output = recipe.output,
|
||||
items = recipe.input,
|
||||
type = rtype,
|
||||
})
|
||||
NormalizedRecipes[output] = {
|
||||
output = recipe.output,
|
||||
output = recipe.output,
|
||||
items = recipe.input,
|
||||
}
|
||||
end
|
||||
@ -151,9 +151,9 @@ function techage.recipes.on_receive_fields(pos, formname, fields, player)
|
||||
return
|
||||
end
|
||||
local nvm = techage.get_nvm(pos)
|
||||
|
||||
|
||||
nvm.recipe_idx = nvm.recipe_idx or 1
|
||||
if not nvm.running then
|
||||
if not nvm.running then
|
||||
if fields.next == ">>" then
|
||||
nvm.recipe_idx = nvm.recipe_idx + 1
|
||||
elseif fields.priv == "<<" then
|
||||
@ -165,8 +165,8 @@ end
|
||||
function techage.recipes.get_recipe(name)
|
||||
return NormalizedRecipes[name]
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
function techage.recipes.get_default_group_item_name(item_name)
|
||||
if item_name and item_name:sub(1, 6) == "group:" then
|
||||
local default_name = GROUP_ITEMS[item_name:sub(7)]
|
||||
@ -182,7 +182,7 @@ function techage.recipes.add_group_item(group, default_item_name)
|
||||
end
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
-- Borrowed from ghaydn
|
||||
-- Borrowed from ghaydn
|
||||
-------------------------------------------------------------------------------
|
||||
local has_i3 = minetest.get_modpath("i3")
|
||||
local has_ui = minetest.get_modpath("unified_inventory")
|
||||
@ -276,4 +276,4 @@ techage.recipes.register_craft = function(def)
|
||||
}
|
||||
unified_inventory.register_craft(ui_def)
|
||||
end
|
||||
end
|
||||
end
|
@ -34,7 +34,7 @@ function techage.shared_inv.node_timer(pos, elapsed)
|
||||
if techage.is_activeformspec(pos) then
|
||||
copy_inventory_list(rmt_pos, pos, "main")
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
@ -64,6 +64,5 @@ function techage.shared_inv.on_rightclick(pos, clicker, listname)
|
||||
copy_inventory_list(rmt_pos, pos, listname)
|
||||
techage.set_activeformspec(pos, clicker)
|
||||
minetest.get_node_timer(pos):start(2)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -39,7 +39,7 @@ function techage.shared_tank.node_timer(pos)
|
||||
if techage.is_activeformspec(pos) then
|
||||
M(pos):set_string("formspec", formspec(pos))
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
@ -47,10 +47,10 @@ function techage.shared_tank.on_rightclick(pos, node, clicker)
|
||||
--if hyperloop.is_client(pos) then
|
||||
techage.set_activeformspec(pos, clicker)
|
||||
minetest.get_node_timer(pos):start(2)
|
||||
--end
|
||||
--end
|
||||
M(pos):set_string("formspec", formspec(pos))
|
||||
end
|
||||
|
||||
|
||||
function techage.shared_tank.can_dig(pos, player)
|
||||
if minetest.is_protected(pos, player:get_player_name()) then
|
||||
return false
|
||||
@ -74,7 +74,7 @@ function techage.shared_tank.take_liquid(pos, indir, name, amount)
|
||||
end
|
||||
return amount, name
|
||||
end
|
||||
|
||||
|
||||
function techage.shared_tank.put_liquid(pos, indir, name, amount)
|
||||
pos = remote_pos(pos)
|
||||
-- check if it is not powder
|
||||
|
@ -7,7 +7,7 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
A formspec control to generate formspec strings for machine settings and monitoring
|
||||
]]--
|
||||
|
||||
@ -43,7 +43,7 @@ local function generate_formspec_substring(pos, meta, form_def, player_name)
|
||||
local player_inv_needed = false
|
||||
if meta and form_def then
|
||||
local nvm = techage.get_nvm(pos)
|
||||
|
||||
|
||||
for i,elem in ipairs(form_def) do
|
||||
local offs = (i - 1) * 0.9 - 0.2
|
||||
tbl[#tbl+1] = "label[0," .. offs .. ";" .. minetest.formspec_escape(elem.label) .. ":]"
|
||||
@ -133,7 +133,7 @@ local function generate_formspec_substring(pos, meta, form_def, player_name)
|
||||
tbl[#tbl+1] = "label[0," .. offs .. ";" .. S("Note: You can't change any values while the block is running!") .. "]"
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
return player_inv_needed, table.concat(tbl, "")
|
||||
end
|
||||
|
||||
@ -143,23 +143,23 @@ local function value_check(elem, value)
|
||||
end
|
||||
return value ~= nil
|
||||
end
|
||||
|
||||
|
||||
local function evaluate_data(pos, meta, form_def, fields, player_name)
|
||||
local res = true
|
||||
|
||||
|
||||
if meta and form_def then
|
||||
local nvm = techage.get_nvm(pos)
|
||||
if nvm.running or techage.is_running(nvm) then
|
||||
return res
|
||||
end
|
||||
for idx,elem in ipairs(form_def) do
|
||||
if elem.type == "number" then
|
||||
if elem.type == "number" then
|
||||
if fields[elem.name] then
|
||||
if fields[elem.name] == "" then
|
||||
if fields[elem.name] == "" then
|
||||
meta:set_string(elem.name, "")
|
||||
elseif fields[elem.name]:find("^[%d ]+$") then
|
||||
local val = tonumber(fields[elem.name])
|
||||
if value_check(elem, val) then
|
||||
if value_check(elem, val) then
|
||||
meta:set_int(elem.name, val)
|
||||
--print("set_int", elem.name, val)
|
||||
else
|
||||
@ -169,11 +169,11 @@ local function evaluate_data(pos, meta, form_def, fields, player_name)
|
||||
res = false
|
||||
end
|
||||
end
|
||||
elseif elem.type == "numbers" then
|
||||
elseif elem.type == "numbers" then
|
||||
if fields[elem.name] then
|
||||
if fields[elem.name] == "" then
|
||||
if fields[elem.name] == "" then
|
||||
meta:set_string(elem.name, "")
|
||||
elseif fields[elem.name]:find("^[%d ]+$") and value_check(elem, fields[elem.name]) then
|
||||
elseif fields[elem.name]:find("^[%d ]+$") and value_check(elem, fields[elem.name]) then
|
||||
meta:set_string(elem.name, fields[elem.name])
|
||||
else
|
||||
res = false
|
||||
@ -184,13 +184,13 @@ local function evaluate_data(pos, meta, form_def, fields, player_name)
|
||||
meta:set_string(elem.name, "")
|
||||
elseif fields[elem.name] then
|
||||
local val = tonumber(fields[elem.name])
|
||||
if val and value_check(elem, val) then
|
||||
if val and value_check(elem, val) then
|
||||
meta:set_string(elem.name, val)
|
||||
else
|
||||
res = false
|
||||
end
|
||||
end
|
||||
elseif elem.type == "ascii" then
|
||||
elseif elem.type == "ascii" then
|
||||
if fields[elem.name] == ""then
|
||||
meta:set_string(elem.name, "")
|
||||
elseif fields[elem.name] then
|
||||
@ -200,11 +200,11 @@ local function evaluate_data(pos, meta, form_def, fields, player_name)
|
||||
res = false
|
||||
end
|
||||
end
|
||||
elseif elem.type == "dropdown" then
|
||||
elseif elem.type == "dropdown" then
|
||||
if fields[elem.name] ~= nil then
|
||||
meta:set_string(elem.name, fields[elem.name])
|
||||
end
|
||||
elseif elem.type == "items" and player_name then
|
||||
elseif elem.type == "items" and player_name then
|
||||
local inv_name = minetest.formspec_escape(player_name) .. "_techage_wrench_menu"
|
||||
local dinv = minetest.get_inventory({type = "detached", name = inv_name})
|
||||
local ninv = minetest.get_inventory({type = "node", pos = pos})
|
||||
@ -232,7 +232,7 @@ function techage.menu.generate_formspec(pos, ndef, form_def, player_name)
|
||||
allow_take = allow_take})
|
||||
local dinv = minetest.get_inventory({type = "detached", name = inv_name})
|
||||
local ninv = minetest.get_inventory({type = "node", pos = pos})
|
||||
if dinv and ninv then
|
||||
if dinv and ninv then
|
||||
dinv:set_size('cfg', ninv:get_size("cfg"))
|
||||
for i = 1, ninv:get_size("cfg") do
|
||||
dinv:set_stack("cfg", i, ninv:get_stack("cfg", i))
|
||||
@ -243,7 +243,7 @@ function techage.menu.generate_formspec(pos, ndef, form_def, player_name)
|
||||
local title = ndef.description .. " (" .. number .. ")"
|
||||
local player_inv_needed, text = generate_formspec_substring(pos, meta, form_def, player_name)
|
||||
local buttons
|
||||
|
||||
|
||||
if player_inv_needed then
|
||||
buttons = "button[0.5,6.2;3,1;refresh;" .. S("Refresh") .. "]" ..
|
||||
"button_exit[3.5,6.2;3,1;cancel;" .. S("Cancel") .. "]" ..
|
||||
@ -254,7 +254,7 @@ function techage.menu.generate_formspec(pos, ndef, form_def, player_name)
|
||||
"button_exit[3.5,8.4;3,1;cancel;" .. S("Cancel") .. "]" ..
|
||||
"button[6.5,8.4;3,1;save;" .. S("Save") .. "]"
|
||||
end
|
||||
|
||||
|
||||
if #form_def > 8 then
|
||||
local size = (#form_def * 10) - 60
|
||||
return "size[10,9]" ..
|
||||
@ -287,10 +287,10 @@ function techage.menu.generate_formspec(pos, ndef, form_def, player_name)
|
||||
return ""
|
||||
end
|
||||
|
||||
function techage.menu.eval_input(pos, form_def, fields, player_name)
|
||||
function techage.menu.eval_input(pos, form_def, fields, player_name)
|
||||
if fields.save or fields.key_enter_field then
|
||||
local meta = minetest.get_meta(pos)
|
||||
evaluate_data(pos, meta, form_def, fields, player_name)
|
||||
end
|
||||
return fields.refresh or fields.save or fields.key_enter_field
|
||||
end
|
||||
return fields.refresh or fields.save or fields.key_enter_field
|
||||
end
|
@ -7,7 +7,7 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
For tupe/pipe blocks with teleport support
|
||||
|
||||
]]--
|
||||
@ -67,7 +67,7 @@ local TELE_MENU = {
|
||||
choices = "",
|
||||
on_dropdown = get_free_server_list,
|
||||
name = "remote_name",
|
||||
label = S("Remote name"),
|
||||
label = S("Remote name"),
|
||||
tooltip = S("Connection name of the remote block"),
|
||||
},
|
||||
{
|
||||
@ -83,7 +83,7 @@ function techage.teleport.formspec(pos)
|
||||
local ndef = NDEF(pos)
|
||||
return menu.generate_formspec(pos, ndef, TELE_MENU)
|
||||
end
|
||||
|
||||
|
||||
local function store_connection(pos, peer_pos)
|
||||
local meta = M(pos)
|
||||
local status = S("connected to") .. " " .. P2S(peer_pos)
|
||||
@ -164,4 +164,4 @@ function techage.teleport.after_formspec(pos, player, fields, max_dist, ex_point
|
||||
M(pos):set_string("status", S("Ex-points missing (@1 < @2)", techage.get_expoints(player), ex_points))
|
||||
M(pos):set_string("formspec", techage.teleport.formspec(pos))
|
||||
end
|
||||
end
|
||||
end
|
@ -7,7 +7,7 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
Tube wall entry
|
||||
|
||||
]]--
|
||||
@ -27,7 +27,7 @@ minetest.register_node("techage:tube_wall_entry", {
|
||||
"basic_materials_concrete_block.png^techage_tube_hole.png",
|
||||
"basic_materials_concrete_block.png^techage_tube_hole.png",
|
||||
},
|
||||
|
||||
|
||||
after_place_node = function(pos, placer, itemstack, pointed_thing)
|
||||
if not Tube:after_place_tube(pos, placer, pointed_thing) then
|
||||
minetest.remove_node(pos)
|
||||
@ -35,11 +35,11 @@ minetest.register_node("techage:tube_wall_entry", {
|
||||
end
|
||||
return false
|
||||
end,
|
||||
|
||||
|
||||
after_dig_node = function(pos, oldnode, oldmetadata, digger)
|
||||
Tube:after_dig_tube(pos, oldnode, oldmetadata)
|
||||
end,
|
||||
|
||||
|
||||
paramtype2 = "facedir", -- important!
|
||||
on_rotate = screwdriver.disallow, -- important!
|
||||
groups = {crumbly = 2, cracky = 2, snappy = 2},
|
||||
@ -54,4 +54,4 @@ minetest.register_craft({
|
||||
{"", "basic_materials:concrete_block", ""},
|
||||
{"", "",""},
|
||||
},
|
||||
})
|
||||
})
|
@ -7,7 +7,7 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
Tubes based on tubelib2
|
||||
|
||||
]]--
|
||||
@ -27,13 +27,13 @@ techage.KnownNodes = {
|
||||
local Tube = tubelib2.Tube:new({
|
||||
-- North, East, South, West, Down, Up
|
||||
dirs_to_check = {1,2,3,4,5,6},
|
||||
max_tube_length = 200,
|
||||
max_tube_length = 200,
|
||||
show_infotext = false,
|
||||
primary_node_names = {
|
||||
"techage:tubeS", "techage:tubeA",
|
||||
"techage:tubeS", "techage:tubeA",
|
||||
"techage:ta4_tubeS", "techage:ta4_tubeA",
|
||||
"techage:tube_wall_entry",
|
||||
},
|
||||
},
|
||||
after_place_tube = function(pos, param2, tube_type, num_tubes, tbl)
|
||||
local name = minetest.get_node(pos).name
|
||||
if name == "techage:tubeS" or name == "techage:tubeA" then
|
||||
@ -58,7 +58,7 @@ minetest.register_node("techage:tubeS", {
|
||||
"techage_tube_hole.png",
|
||||
"techage_tube_hole.png",
|
||||
},
|
||||
|
||||
|
||||
after_place_node = function(pos, placer, itemstack, pointed_thing)
|
||||
if not Tube:after_place_tube(pos, placer, pointed_thing) then
|
||||
minetest.remove_node(pos)
|
||||
@ -66,11 +66,11 @@ minetest.register_node("techage:tubeS", {
|
||||
end
|
||||
return false
|
||||
end,
|
||||
|
||||
|
||||
after_dig_node = function(pos, oldnode, oldmetadata, digger)
|
||||
Tube:after_dig_tube(pos, oldnode, oldmetadata)
|
||||
end,
|
||||
|
||||
|
||||
paramtype2 = "facedir",
|
||||
drawtype = "nodebox",
|
||||
node_box = {
|
||||
@ -106,11 +106,11 @@ minetest.register_node("techage:tubeA", {
|
||||
"techage_tube_knee2.png",
|
||||
"techage_tube_hole2.png",
|
||||
},
|
||||
|
||||
|
||||
after_dig_node = function(pos, oldnode, oldmetadata, digger)
|
||||
Tube:after_dig_tube(pos, oldnode, oldmetadata)
|
||||
end,
|
||||
|
||||
|
||||
paramtype2 = "facedir",
|
||||
drawtype = "nodebox",
|
||||
node_box = {
|
||||
@ -145,4 +145,4 @@ minetest.register_craft({
|
||||
{"", "group:wood", ""},
|
||||
{"group:wood", "", "default:tin_ingot"},
|
||||
},
|
||||
})
|
||||
})
|
@ -7,7 +7,7 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
Tubes in TA4 design based on tubelib2
|
||||
|
||||
]]--
|
||||
@ -25,7 +25,7 @@ minetest.register_node("techage:ta4_tubeS", {
|
||||
"techage_tube_hole.png",
|
||||
"techage_tube_hole.png",
|
||||
},
|
||||
|
||||
|
||||
after_place_node = function(pos, placer, itemstack, pointed_thing)
|
||||
if not Tube:after_place_tube(pos, placer, pointed_thing) then
|
||||
minetest.remove_node(pos)
|
||||
@ -33,11 +33,11 @@ minetest.register_node("techage:ta4_tubeS", {
|
||||
end
|
||||
return false
|
||||
end,
|
||||
|
||||
|
||||
after_dig_node = function(pos, oldnode, oldmetadata, digger)
|
||||
Tube:after_dig_tube(pos, oldnode, oldmetadata)
|
||||
end,
|
||||
|
||||
|
||||
paramtype2 = "facedir",
|
||||
drawtype = "nodebox",
|
||||
node_box = {
|
||||
@ -73,11 +73,11 @@ minetest.register_node("techage:ta4_tubeA", {
|
||||
"techage_tubeta4_knee2.png",
|
||||
"techage_tubeta4_hole2.png",
|
||||
},
|
||||
|
||||
|
||||
after_dig_node = function(pos, oldnode, oldmetadata, digger)
|
||||
Tube:after_dig_tube(pos, oldnode, oldmetadata)
|
||||
end,
|
||||
|
||||
|
||||
paramtype2 = "facedir",
|
||||
drawtype = "nodebox",
|
||||
node_box = {
|
||||
@ -117,4 +117,4 @@ minetest.register_craft({
|
||||
techage.TA4tubes = {
|
||||
["techage:ta4_tubeS"] = true,
|
||||
["techage:ta4_tubeA"] = true,
|
||||
}
|
||||
}
|
@ -7,7 +7,7 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
Wind turbine helper function
|
||||
|
||||
]]--
|
||||
@ -49,15 +49,15 @@ function techage.valid_place_for_windturbine(pos, player_name, num_turbines)
|
||||
num = #minetest.find_nodes_in_area(pos1, pos2, {"air", "ignore"})
|
||||
if num < (41 * 41 * 21 * 0.9) then
|
||||
techage.mark_region(player_name, pos1, pos2, "")
|
||||
return chat_message(player_name,
|
||||
return chat_message(player_name,
|
||||
S("Here is not enough wind\n(A free air space of 41x41x21 m is necessary)!"))
|
||||
end
|
||||
-- Check for water surface (occean)
|
||||
pos1 = {x=pos.x-20, y=1, z=pos.z-20}
|
||||
pos2 = {x=pos.x+20, y=1, z=pos.z+20}
|
||||
num = #minetest.find_nodes_in_area(pos1, pos2,
|
||||
num = #minetest.find_nodes_in_area(pos1, pos2,
|
||||
{"default:water_source", "default:water_flowing", "ignore"})
|
||||
|
||||
|
||||
if num < (41*41 * 0.8) then
|
||||
techage.mark_region(player_name, pos1, pos2, "")
|
||||
return chat_message(player_name, S("Here is not enough water (41x41 m)!"))
|
||||
@ -71,10 +71,10 @@ function techage.valid_place_for_windturbine(pos, player_name, num_turbines)
|
||||
techage.mark_region(player_name, pos1, pos2, "")
|
||||
return chat_message(player_name, S("The next wind turbines is too close!"))
|
||||
end
|
||||
|
||||
|
||||
if num_turbines == 0 then
|
||||
chat_message(player_name, minetest.pos_to_string(pos).." "..
|
||||
S("is a suitable place for a wind turbine!"))
|
||||
end
|
||||
return true, "ok"
|
||||
end
|
||||
end
|
@ -9,7 +9,7 @@
|
||||
See LICENSE.txt for more information
|
||||
|
||||
TA3 Chest Cart
|
||||
|
||||
|
||||
]]--
|
||||
|
||||
-- for lazy programmers
|
||||
@ -59,7 +59,7 @@ end
|
||||
minetest.register_node("techage:chest_cart", {
|
||||
description = S("TA Chest Cart"),
|
||||
tiles = {
|
||||
-- up, down, right, left, back, front
|
||||
-- up, down, right, left, back, front
|
||||
"techage_chest_cart_top.png",
|
||||
"techage_chest_cart_bottom.png",
|
||||
"techage_chest_cart_side.png",
|
||||
@ -83,13 +83,13 @@ minetest.register_node("techage:chest_cart", {
|
||||
groups = {cracky = 2, crumbly = 2, choppy = 2},
|
||||
node_placement_prediction = "",
|
||||
diggable = false,
|
||||
|
||||
|
||||
on_place = minecart.on_nodecart_place,
|
||||
on_punch = minecart.on_nodecart_punch,
|
||||
allow_metadata_inventory_put = allow_metadata_inventory_put,
|
||||
allow_metadata_inventory_take = allow_metadata_inventory_take,
|
||||
on_rightclick = on_rightclick,
|
||||
|
||||
|
||||
after_place_node = function(pos, placer)
|
||||
local inv = M(pos):get_inventory()
|
||||
inv:set_size('main', 4)
|
||||
@ -99,14 +99,14 @@ minetest.register_node("techage:chest_cart", {
|
||||
M(pos):set_string("formspec", formspec())
|
||||
end
|
||||
end,
|
||||
|
||||
|
||||
set_cargo = function(pos, data)
|
||||
local inv = M(pos):get_inventory()
|
||||
for idx, stack in ipairs(data) do
|
||||
inv:set_stack("main", idx, stack)
|
||||
end
|
||||
end,
|
||||
|
||||
|
||||
get_cargo = function(pos)
|
||||
local inv = M(pos):get_inventory()
|
||||
local data = {}
|
||||
@ -159,7 +159,7 @@ techage.register_node({"techage:chest_cart"}, {
|
||||
return "unsupported"
|
||||
end
|
||||
end,
|
||||
})
|
||||
})
|
||||
|
||||
Tube:set_valid_sides("techage:chest_cart", {"L", "R", "F", "B"})
|
||||
|
||||
@ -169,4 +169,4 @@ minetest.register_craft({
|
||||
{"default:junglewood", "default:chest_locked", "default:junglewood"},
|
||||
{"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"},
|
||||
},
|
||||
})
|
||||
})
|
@ -9,7 +9,7 @@
|
||||
See LICENSE.txt for more information
|
||||
|
||||
TA3 Tank Cart
|
||||
|
||||
|
||||
]]--
|
||||
|
||||
-- for lazy programmers
|
||||
@ -20,7 +20,7 @@ local S2P = minetest.string_to_pos
|
||||
local Pipe = techage.LiquidPipe
|
||||
local MP = minetest.get_modpath("minecart")
|
||||
|
||||
local liquid = networks.liquid
|
||||
local liquid = networks.liquid
|
||||
local CAPACITY = 100
|
||||
|
||||
local function on_rightclick(pos, node, clicker)
|
||||
@ -41,7 +41,7 @@ local function node_timer(pos, elapsed)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
M(pos):set_string("formspec", techage.liquid.formspec(pos, nvm))
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
@ -58,7 +58,7 @@ local function take_liquid(pos, indir, name, amount)
|
||||
end
|
||||
return amount, name
|
||||
end
|
||||
|
||||
|
||||
local function put_liquid(pos, indir, name, amount)
|
||||
-- check if it is not powder
|
||||
local ndef = minetest.registered_craftitems[name] or {}
|
||||
@ -85,7 +85,7 @@ end
|
||||
minetest.register_node("techage:tank_cart", {
|
||||
description = S("TA Tank Cart"),
|
||||
tiles = {
|
||||
-- up, down, right, left, back, front
|
||||
-- up, down, right, left, back, front
|
||||
"techage_tank_cart_top.png",
|
||||
"techage_tank_cart_bottom.png",
|
||||
"techage_tank_cart_side.png",
|
||||
@ -110,7 +110,7 @@ minetest.register_node("techage:tank_cart", {
|
||||
groups = {cracky = 2, crumbly = 2, choppy = 2},
|
||||
node_placement_prediction = "",
|
||||
diggable = false,
|
||||
|
||||
|
||||
on_place = minecart.on_nodecart_place,
|
||||
on_punch = minecart.on_nodecart_punch,
|
||||
|
||||
@ -119,31 +119,31 @@ minetest.register_node("techage:tank_cart", {
|
||||
nvm.liquid = nvm.liquid or {}
|
||||
M(pos):set_string("formspec", techage.liquid.formspec(pos, nvm))
|
||||
-- Delete the network between pump and cart
|
||||
Pipe:after_dig_node(pos)
|
||||
Pipe:after_dig_node(pos)
|
||||
Pipe:after_place_node(pos)
|
||||
end,
|
||||
|
||||
|
||||
set_cargo = function(pos, data)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
nvm.liquid = data
|
||||
end,
|
||||
|
||||
|
||||
get_cargo = function(pos)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
local data = nvm.liquid
|
||||
nvm.liquid = {}
|
||||
return data
|
||||
end,
|
||||
|
||||
|
||||
has_cargo = function(pos)
|
||||
return not techage.liquid.is_empty(pos)
|
||||
end,
|
||||
|
||||
|
||||
on_timer = node_timer,
|
||||
on_rightclick = on_rightclick,
|
||||
})
|
||||
|
||||
techage.register_node({"techage:tank_cart"}, techage.liquid.recv_message)
|
||||
techage.register_node({"techage:tank_cart"}, techage.liquid.recv_message)
|
||||
|
||||
liquid.register_nodes({"techage:tank_cart"},
|
||||
Pipe, "tank", {"U"}, {
|
||||
@ -173,4 +173,4 @@ minetest.register_craft({
|
||||
{"default:junglewood", "techage:ta3_tank", "default:junglewood"},
|
||||
{"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"},
|
||||
},
|
||||
})
|
||||
})
|
@ -7,7 +7,7 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
TA4 Doser
|
||||
|
||||
]]--
|
||||
@ -54,14 +54,14 @@ local function get_liquids(pos)
|
||||
Liquids[hash] = tbl
|
||||
return Liquids[hash]
|
||||
end
|
||||
|
||||
|
||||
local function del_liquids(pos)
|
||||
local hash = minetest.hash_node_position(pos)
|
||||
Liquids[hash] = nil
|
||||
end
|
||||
|
||||
|
||||
-- if liquids are missing, update the cached liquid table
|
||||
local function reload_liquids(pos)
|
||||
local function reload_liquids(pos)
|
||||
local hash = minetest.hash_node_position(pos)
|
||||
-- determine the available input liquids
|
||||
local tbl = {}
|
||||
@ -73,11 +73,11 @@ local function reload_liquids(pos)
|
||||
end
|
||||
Liquids[hash] = tbl
|
||||
return Liquids[hash]
|
||||
end
|
||||
end
|
||||
|
||||
local function reactor_cmnd(pos, cmnd, payload)
|
||||
return techage.transfer(
|
||||
pos,
|
||||
pos,
|
||||
6, -- outdir
|
||||
cmnd, -- topic
|
||||
payload, -- payload
|
||||
@ -136,7 +136,7 @@ local function untake(pos, taken)
|
||||
for _,item in pairs(taken) do
|
||||
liquid.untake(pos, Pipe, item.outdir, item.name, item.num)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function dosing(pos, nvm, elapsed)
|
||||
-- trigger reactor (power)
|
||||
@ -177,13 +177,13 @@ local function dosing(pos, nvm, elapsed)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
-- check leftover
|
||||
local leftover
|
||||
local mem = techage.get_mem(pos)
|
||||
if mem.waste_leftover then
|
||||
leftover = reactor_cmnd(pos, "waste", {
|
||||
name = mem.waste_leftover.name,
|
||||
name = mem.waste_leftover.name,
|
||||
amount = mem.waste_leftover.num}) or mem.waste_leftover.num
|
||||
if leftover > 0 then
|
||||
mem.waste_leftover.num = leftover
|
||||
@ -194,7 +194,7 @@ local function dosing(pos, nvm, elapsed)
|
||||
end
|
||||
if mem.output_leftover then
|
||||
leftover = reactor_cmnd(pos, "output", {
|
||||
name = mem.output_leftover.name,
|
||||
name = mem.output_leftover.name,
|
||||
amount = mem.output_leftover.num}) or mem.output_leftover.num
|
||||
if leftover > 0 then
|
||||
mem.output_leftover.num = leftover
|
||||
@ -203,11 +203,11 @@ local function dosing(pos, nvm, elapsed)
|
||||
end
|
||||
mem.output_leftover = nil
|
||||
end
|
||||
|
||||
|
||||
-- inputs
|
||||
local taken = {}
|
||||
mem.dbg_cycles = (mem.dbg_cycles or 0) - 1
|
||||
|
||||
|
||||
for _,item in pairs(recipe.input) do
|
||||
if item.name ~= "" then
|
||||
local outdir = liquids[item.name] or reload_liquids(pos)[item.name]
|
||||
@ -231,7 +231,7 @@ local function dosing(pos, nvm, elapsed)
|
||||
-- waste
|
||||
if recipe.waste.name ~= "" then
|
||||
leftover = reactor_cmnd(pos, "waste", {
|
||||
name = recipe.waste.name,
|
||||
name = recipe.waste.name,
|
||||
amount = recipe.waste.num}) or recipe.waste.num
|
||||
if leftover > 0 then
|
||||
mem.waste_leftover = {name = recipe.waste.name, num = leftover}
|
||||
@ -243,7 +243,7 @@ local function dosing(pos, nvm, elapsed)
|
||||
end
|
||||
-- output
|
||||
leftover = reactor_cmnd(pos, "output", {
|
||||
name = recipe.output.name,
|
||||
name = recipe.output.name,
|
||||
amount = recipe.output.num}) or recipe.output.num
|
||||
if leftover > 0 then
|
||||
mem.output_leftover = {name = recipe.output.name, num = leftover}
|
||||
@ -252,13 +252,13 @@ local function dosing(pos, nvm, elapsed)
|
||||
return
|
||||
end
|
||||
State:keep_running(pos, nvm, COUNTDOWN_TICKS)
|
||||
end
|
||||
end
|
||||
|
||||
local function node_timer(pos, elapsed)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
dosing(pos, nvm, elapsed)
|
||||
return State:is_active(nvm)
|
||||
end
|
||||
end
|
||||
|
||||
local function on_rightclick(pos)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
@ -269,9 +269,9 @@ local function 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)
|
||||
if not nvm.running then
|
||||
if not nvm.running then
|
||||
recipes.on_receive_fields(pos, formname, fields, player)
|
||||
end
|
||||
local mem = techage.get_mem(pos)
|
||||
@ -345,7 +345,7 @@ minetest.register_node("techage:ta4_doser_on", {
|
||||
on_receive_fields = on_receive_fields,
|
||||
on_rightclick = on_rightclick,
|
||||
on_timer = node_timer,
|
||||
|
||||
|
||||
paramtype2 = "facedir",
|
||||
on_rotate = screwdriver.disallow,
|
||||
diggable = false,
|
||||
@ -376,4 +376,4 @@ minetest.register_craft({
|
||||
{"techage:ta3_pipeS", "techage:t4_pump", "techage:ta3_pipeS"},
|
||||
{"", "techage:ta4_wlanchip", ""},
|
||||
},
|
||||
})
|
||||
})
|
@ -8,7 +8,7 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
TA4 Liquid Filter
|
||||
|
||||
]]--
|
||||
@ -206,4 +206,4 @@ minetest.register_craft({
|
||||
{'basic_materials:concrete_block', 'techage:ta3_pipeS', 'techage:ta3_pipeS'},
|
||||
{'basic_materials:concrete_block', 'basic_materials:concrete_block', 'basic_materials:concrete_block'},
|
||||
}
|
||||
})
|
||||
})
|
@ -7,7 +7,7 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
TA4 Reactor
|
||||
|
||||
]]--
|
||||
@ -51,10 +51,10 @@ minetest.register_node("techage:ta4_reactor_fillerpipe", {
|
||||
after_dig_node = function(pos, oldnode, oldmetadata, digger)
|
||||
Pipe:after_dig_node(pos)
|
||||
end,
|
||||
|
||||
|
||||
paramtype = "light",
|
||||
use_texture_alpha = techage.CLIP,
|
||||
sunlight_propagates = true,
|
||||
sunlight_propagates = true,
|
||||
paramtype2 = "facedir",
|
||||
on_rotate = screwdriver.disallow,
|
||||
groups = {cracky=2},
|
||||
@ -64,7 +64,7 @@ minetest.register_node("techage:ta4_reactor_fillerpipe", {
|
||||
|
||||
local function stand_cmnd(pos, cmnd, payload)
|
||||
return techage.transfer(
|
||||
{x = pos.x, y = pos.y-1, z = pos.z},
|
||||
{x = pos.x, y = pos.y-1, z = pos.z},
|
||||
5, -- outdir
|
||||
cmnd, -- topic
|
||||
payload, -- payload
|
||||
@ -83,11 +83,11 @@ techage.register_node({"techage:ta4_reactor_fillerpipe"}, {
|
||||
on_transfer = function(pos, in_dir, topic, payload)
|
||||
if topic == "check" then
|
||||
local pos2,node = Pipe:get_node(pos, 5)
|
||||
if not node or node.name ~= "techage:ta4_reactor" then
|
||||
if not node or node.name ~= "techage:ta4_reactor" then
|
||||
return false
|
||||
end
|
||||
pos2,node = Pipe:get_node(pos2, 5)
|
||||
if not node or node.name ~= "techage:ta4_reactor_stand" then
|
||||
if not node or node.name ~= "techage:ta4_reactor_stand" then
|
||||
return false
|
||||
end
|
||||
return true
|
||||
@ -95,7 +95,7 @@ techage.register_node({"techage:ta4_reactor_fillerpipe"}, {
|
||||
return base_waste(pos, payload or {})
|
||||
elseif topic == "catalyst" then
|
||||
local pos2,node = Pipe:get_node(pos, 5)
|
||||
if not node or node.name ~= "techage:ta4_reactor" then
|
||||
if not node or node.name ~= "techage:ta4_reactor" then
|
||||
return
|
||||
end
|
||||
local inv = M(pos2):get_inventory()
|
||||
@ -158,7 +158,7 @@ minetest.register_node("techage:ta4_reactor", {
|
||||
end,
|
||||
allow_metadata_inventory_put = allow_metadata_inventory_put,
|
||||
allow_metadata_inventory_take = allow_metadata_inventory_take,
|
||||
|
||||
|
||||
paramtype = "light",
|
||||
use_texture_alpha = techage.CLIP,
|
||||
paramtype2 = "facedir",
|
||||
@ -191,7 +191,7 @@ minetest.register_lbm({
|
||||
name = "techage:update_reactor",
|
||||
|
||||
nodenames = {
|
||||
"techage:ta4_reactor",
|
||||
"techage:ta4_reactor",
|
||||
},
|
||||
|
||||
run_at_every_load = true,
|
||||
@ -201,4 +201,4 @@ minetest.register_lbm({
|
||||
inv:set_size('main', 1)
|
||||
M(pos):set_string("formspec", formspec())
|
||||
end,
|
||||
})
|
||||
})
|
@ -7,7 +7,7 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
TA4 Reactor Stand and Base
|
||||
|
||||
]]--
|
||||
@ -26,7 +26,7 @@ local function play_sound(pos)
|
||||
local mem = techage.get_mem(pos)
|
||||
if not mem.handle or mem.handle == -1 then
|
||||
mem.handle = minetest.sound_play("techage_reactor", {
|
||||
pos = pos,
|
||||
pos = pos,
|
||||
gain = 0.5,
|
||||
max_hear_distance = 10,
|
||||
loop = true})
|
||||
@ -58,8 +58,8 @@ local function on_nopower(pos)
|
||||
nvm.running = false
|
||||
end
|
||||
|
||||
local function is_running(pos, nvm)
|
||||
return nvm.running
|
||||
local function is_running(pos, nvm)
|
||||
return nvm.running
|
||||
end
|
||||
|
||||
minetest.register_node("techage:ta4_reactor_stand", {
|
||||
@ -76,14 +76,14 @@ minetest.register_node("techage:ta4_reactor_stand", {
|
||||
drawtype = "nodebox",
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
fixed = {
|
||||
{ -8/16, 2/16, -8/16, 8/16, 4/16, 8/16 },
|
||||
|
||||
|
||||
{ -8/16, -8/16, -8/16, -6/16, 8/16, -6/16 },
|
||||
{ 6/16, -8/16, -8/16, 8/16, 8/16, -6/16 },
|
||||
{ -8/16, -8/16, 6/16, -6/16, 8/16, 8/16 },
|
||||
{ 6/16, -8/16, 6/16, 8/16, 8/16, 8/16 },
|
||||
|
||||
|
||||
{-1/8, -4/8, -1/8, 1/8, 4/8, 1/8},
|
||||
{-4/8, -1/8, -1/8, 4/8, 1/8, 1/8},
|
||||
{-4/8, -1/8, -3/8, -3/8, 1/8, 3/8},
|
||||
@ -94,7 +94,7 @@ minetest.register_node("techage:ta4_reactor_stand", {
|
||||
type = "fixed",
|
||||
fixed = {-1/2, -1/2, -1/2, 1/2, 1/2, 1/2},
|
||||
},
|
||||
|
||||
|
||||
after_place_node = function(pos, placer)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
M(pos):set_string("infotext", S("off"))
|
||||
@ -117,7 +117,7 @@ minetest.register_node("techage:ta4_reactor_stand", {
|
||||
Cable:after_dig_node(pos)
|
||||
techage.del_mem(pos)
|
||||
end,
|
||||
|
||||
|
||||
paramtype = "light",
|
||||
use_texture_alpha = techage.CLIP,
|
||||
paramtype2 = "facedir",
|
||||
@ -155,7 +155,7 @@ techage.register_node({"techage:ta4_reactor_stand"}, {
|
||||
local nvm = techage.get_nvm(pos)
|
||||
if nvm.has_power then
|
||||
play_sound(pos)
|
||||
end
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
@ -170,7 +170,7 @@ minetest.register_node("techage:ta4_reactor_base", {
|
||||
"techage_concrete.png",
|
||||
"techage_concrete.png",
|
||||
},
|
||||
|
||||
|
||||
after_place_node = function(pos, placer)
|
||||
M(pos):set_int("outdir", networks.side_to_outdir(pos, "R"))
|
||||
Pipe:after_place_node(pos)
|
||||
@ -178,7 +178,7 @@ minetest.register_node("techage:ta4_reactor_base", {
|
||||
after_dig_node = function(pos, oldnode, oldmetadata, digger)
|
||||
Pipe:after_dig_node(pos)
|
||||
end,
|
||||
|
||||
|
||||
paramtype2 = "facedir",
|
||||
on_rotate = screwdriver.disallow,
|
||||
groups = {cracky=2},
|
||||
@ -206,4 +206,4 @@ minetest.register_craft({
|
||||
{'techage:ta3_pipeS', '', ''},
|
||||
{'', '', ''},
|
||||
}
|
||||
})
|
||||
})
|
@ -7,7 +7,7 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
TA3 Coal Power Station Boiler Base
|
||||
|
||||
]]--
|
||||
@ -39,7 +39,7 @@ minetest.register_node("techage:coalboiler_base", {
|
||||
|
||||
after_place_node = after_place_node,
|
||||
after_dig_node = after_dig_node,
|
||||
|
||||
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
on_rotate = screwdriver.disallow,
|
||||
@ -49,7 +49,7 @@ minetest.register_node("techage:coalboiler_base", {
|
||||
})
|
||||
|
||||
Pipe:add_secondary_node_names({"techage:coalboiler_base"})
|
||||
|
||||
|
||||
-- for logical communication
|
||||
techage.register_node({"techage:coalboiler_base"}, {
|
||||
on_transfer = function(pos, in_dir, topic, payload)
|
||||
@ -65,4 +65,3 @@ minetest.register_craft({
|
||||
{"default:stone", "default:stone", "default:stone"},
|
||||
},
|
||||
})
|
||||
|
||||
|
@ -7,7 +7,7 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
TA3 Coal Power Station Boiler Top
|
||||
|
||||
]]--
|
||||
@ -62,14 +62,14 @@ minetest.register_node("techage:coalboiler_top", {
|
||||
type = "fixed",
|
||||
fixed = {-13/32, -48/32, -13/32, 13/32, 16/32, 13/32},
|
||||
},
|
||||
|
||||
|
||||
can_dig = boiler.can_dig,
|
||||
on_timer = node_timer,
|
||||
on_rightclick = boiler.on_rightclick,
|
||||
after_place_node = after_place_node,
|
||||
after_dig_node = after_dig_node,
|
||||
on_punch = boiler.on_punch,
|
||||
|
||||
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
groups = {cracky=1},
|
||||
@ -108,4 +108,3 @@ minetest.register_craft({
|
||||
{"default:stone", "", "default:stone"},
|
||||
},
|
||||
})
|
||||
|
||||
|
@ -7,7 +7,7 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
TA3 Cooler
|
||||
|
||||
]]--
|
||||
@ -19,7 +19,7 @@ local S = techage.S
|
||||
local Pipe = techage.SteamPipe
|
||||
|
||||
local function transfer(pos, in_dir, topic, payload)
|
||||
return techage.transfer(pos, in_dir, topic, payload, Pipe,
|
||||
return techage.transfer(pos, in_dir, topic, payload, Pipe,
|
||||
{"techage:coalboiler_base"})
|
||||
end
|
||||
|
||||
@ -61,10 +61,10 @@ minetest.register_node("techage:cooler", {
|
||||
"techage_filling_ta3.png^techage_frame_ta3.png^techage_cooler.png",
|
||||
"techage_filling_ta3.png^techage_frame_ta3.png^techage_cooler.png",
|
||||
},
|
||||
|
||||
|
||||
after_place_node = after_place_node,
|
||||
after_dig_node = after_dig_node,
|
||||
|
||||
|
||||
paramtype2 = "facedir",
|
||||
groups = {cracky=2, crumbly=2, choppy=2},
|
||||
on_rotate = screwdriver.disallow,
|
||||
@ -102,10 +102,10 @@ minetest.register_node("techage:cooler_on", {
|
||||
"techage_filling_ta3.png^techage_frame_ta3.png^techage_cooler.png",
|
||||
"techage_filling_ta3.png^techage_frame_ta3.png^techage_cooler.png",
|
||||
},
|
||||
|
||||
|
||||
after_place_node = after_place_node,
|
||||
after_dig_node = after_dig_node,
|
||||
|
||||
|
||||
paramtype2 = "facedir",
|
||||
drop = "techage:cooler",
|
||||
groups = {cracky=2, crumbly=2, choppy=2, not_in_creative_inventory=1},
|
||||
@ -131,4 +131,3 @@ minetest.register_craft({
|
||||
{"basic_materials:steel_bar", "default:wood", "basic_materials:steel_bar"},
|
||||
},
|
||||
})
|
||||
|
||||
|
@ -7,7 +7,7 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
TA3 Coal Power Station Firebox
|
||||
|
||||
]]--
|
||||
@ -25,7 +25,7 @@ local BURN_CYCLE_FACTOR = 0.5
|
||||
local function node_timer(pos, elapsed)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
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
|
||||
"trigger", -- topic
|
||||
nil, -- payload
|
||||
@ -34,7 +34,7 @@ local function node_timer(pos, elapsed)
|
||||
)
|
||||
nvm.burn_cycles = (nvm.burn_cycles or 0) - math.max((power or 0.02), 0.02)
|
||||
if nvm.burn_cycles <= 0 then
|
||||
local taken = firebox.get_fuel(pos)
|
||||
local taken = firebox.get_fuel(pos)
|
||||
if taken then
|
||||
nvm.burn_cycles = (firebox.Burntime[taken:get_name()] or 1) / CYCLE_TIME * BURN_CYCLE_FACTOR
|
||||
nvm.burn_cycles_total = nvm.burn_cycles
|
||||
@ -83,7 +83,7 @@ minetest.register_node("techage:coalfirebox", {
|
||||
allow_metadata_inventory_put = firebox.allow_metadata_inventory_put,
|
||||
allow_metadata_inventory_take = firebox.allow_metadata_inventory_take,
|
||||
on_rightclick = firebox.on_rightclick,
|
||||
|
||||
|
||||
after_place_node = function(pos, placer)
|
||||
if firebox.is_free_position(pos, placer:get_player_name()) then
|
||||
techage.add_node(pos, "techage:coalfirebox")
|
||||
@ -216,4 +216,4 @@ minetest.register_craft({
|
||||
{'default:steel_ingot', '', 'default:steel_ingot'},
|
||||
{'default:stone', 'default:stone', 'default:stone'},
|
||||
},
|
||||
})
|
||||
})
|
@ -7,7 +7,7 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
TA3 Power Station Generator
|
||||
|
||||
]]--
|
||||
@ -30,7 +30,7 @@ local function formspec(self, pos, nvm)
|
||||
end
|
||||
|
||||
local function transfer_turbine(pos, topic, payload)
|
||||
return techage.transfer(pos, "L", topic, payload, nil,
|
||||
return techage.transfer(pos, "L", topic, payload, nil,
|
||||
{"techage:turbine", "techage:turbine_on"})
|
||||
end
|
||||
|
||||
@ -145,7 +145,7 @@ minetest.register_node("techage:generator", {
|
||||
"techage_filling_ta3.png^techage_frame_ta3.png^techage_appl_generator.png",
|
||||
"techage_filling_ta3.png^techage_frame_ta3.png^techage_appl_generator.png^[transformFX]",
|
||||
},
|
||||
|
||||
|
||||
on_receive_fields = on_receive_fields,
|
||||
on_rightclick = on_rightclick,
|
||||
on_timer = node_timer,
|
||||
@ -190,7 +190,7 @@ minetest.register_node("techage:generator_on", {
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
|
||||
on_receive_fields = on_receive_fields,
|
||||
on_rightclick = on_rightclick,
|
||||
on_timer = node_timer,
|
||||
@ -247,7 +247,7 @@ control.register_nodes({"techage:generator", "techage:generator_on"}, {
|
||||
running = techage.is_running(nvm) or false,
|
||||
available = PWR_PERF,
|
||||
provided = nvm.provided or 0,
|
||||
termpoint = meta:get_string("termpoint"),
|
||||
termpoint = meta:get_string("termpoint"),
|
||||
}
|
||||
end
|
||||
return false
|
||||
@ -262,4 +262,4 @@ minetest.register_craft({
|
||||
{"", "basic_materials:gear_steel", "techage:electric_cableS"},
|
||||
{"default:wood", "techage:iron_ingot", "basic_materials:steel_bar"},
|
||||
},
|
||||
})
|
||||
})
|
@ -7,7 +7,7 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
TA3 Coal Power Station Firebox
|
||||
|
||||
]]--
|
||||
@ -28,7 +28,7 @@ local BURN_CYCLE_FACTOR = 0.5
|
||||
local function node_timer(pos, elapsed)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
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
|
||||
"trigger", -- topic
|
||||
nil, -- payload
|
||||
@ -85,7 +85,7 @@ minetest.register_node("techage:oilfirebox", {
|
||||
can_dig = fuel.can_dig,
|
||||
on_rightclick = fuel.on_rightclick,
|
||||
on_receive_fields = fuel.on_receive_fields,
|
||||
|
||||
|
||||
after_place_node = function(pos, placer)
|
||||
if firebox.is_free_position(pos, placer:get_player_name()) then
|
||||
techage.add_node(pos, "techage:oilfirebox")
|
||||
@ -103,7 +103,7 @@ minetest.register_node("techage:oilfirebox", {
|
||||
return true
|
||||
end
|
||||
end,
|
||||
|
||||
|
||||
on_destruct = function(pos)
|
||||
firebox.set_firehole(pos, nil)
|
||||
end,
|
||||
@ -143,4 +143,3 @@ minetest.register_craft({
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
|
@ -7,7 +7,7 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
TA3 Power Station Turbine
|
||||
|
||||
]]--
|
||||
@ -19,12 +19,12 @@ local S = techage.S
|
||||
local Pipe = techage.SteamPipe
|
||||
|
||||
local function transfer_cooler(pos, topic, payload)
|
||||
return techage.transfer(pos, 6, topic, payload, Pipe,
|
||||
return techage.transfer(pos, 6, topic, payload, Pipe,
|
||||
{"techage:cooler", "techage:cooler_on"})
|
||||
end
|
||||
|
||||
local function transfer_generator(pos, topic, payload)
|
||||
return techage.transfer(pos, "R", topic, payload, nil,
|
||||
return techage.transfer(pos, "R", topic, payload, nil,
|
||||
{"techage:generator", "techage:generator_on"})
|
||||
end
|
||||
|
||||
@ -41,7 +41,7 @@ local function play_sound(pos)
|
||||
local mem = techage.get_mem(pos)
|
||||
if not mem.handle or mem.handle == -1 then
|
||||
mem.handle = minetest.sound_play("techage_turbine", {
|
||||
pos = pos,
|
||||
pos = pos,
|
||||
gain = 1,
|
||||
max_hear_distance = 15,
|
||||
loop = true})
|
||||
@ -69,7 +69,7 @@ local function after_dig_node(pos, oldnode)
|
||||
techage.del_mem(pos)
|
||||
end
|
||||
|
||||
local function tubelib2_on_update2(pos, outdir, tlib2, node)
|
||||
local function tubelib2_on_update2(pos, outdir, tlib2, node)
|
||||
swap_node(pos, "techage:turbine")
|
||||
stop_sound(pos)
|
||||
end
|
||||
@ -85,11 +85,11 @@ minetest.register_node("techage:turbine", {
|
||||
"techage_filling_ta3.png^techage_appl_turbine.png^techage_frame_ta3.png",
|
||||
"techage_filling_ta3.png^techage_appl_turbine.png^techage_frame_ta3.png",
|
||||
},
|
||||
|
||||
|
||||
after_place_node = after_place_node,
|
||||
after_dig_node = after_dig_node,
|
||||
tubelib2_on_update2 = tubelib2_on_update2,
|
||||
|
||||
|
||||
paramtype2 = "facedir",
|
||||
groups = {cracky=2, crumbly=2, choppy=2},
|
||||
on_rotate = screwdriver.disallow,
|
||||
@ -125,9 +125,9 @@ minetest.register_node("techage:turbine_on", {
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
|
||||
tubelib2_on_update2 = tubelib2_on_update2,
|
||||
|
||||
|
||||
paramtype2 = "facedir",
|
||||
groups = {not_in_creative_inventory=1},
|
||||
diggable = false,
|
||||
@ -168,7 +168,7 @@ techage.register_node({"techage:turbine", "techage:turbine_on"}, {
|
||||
on_node_load = function(pos, node)
|
||||
if node.name == "techage:turbine_on" then
|
||||
play_sound(pos)
|
||||
end
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
@ -180,4 +180,3 @@ minetest.register_craft({
|
||||
{"default:wood", "techage:iron_ingot", "basic_materials:steel_bar"},
|
||||
},
|
||||
})
|
||||
|
||||
|
@ -7,7 +7,7 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
TA4 Cooler as part of the Collider
|
||||
|
||||
]]--
|
||||
@ -60,7 +60,7 @@ minetest.register_node("techage:ta4_collider_cooler", {
|
||||
after_place_node = function(pos, placer, itemstack)
|
||||
Pipe:after_place_node(pos)
|
||||
end,
|
||||
|
||||
|
||||
after_dig_node = function(pos, oldnode)
|
||||
Pipe:after_dig_node(pos)
|
||||
techage.del_mem(pos)
|
||||
@ -78,7 +78,7 @@ techage.register_node({"techage:ta4_collider_cooler"}, {
|
||||
return false
|
||||
end
|
||||
end,
|
||||
})
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "techage:ta4_collider_cooler",
|
||||
@ -88,4 +88,3 @@ minetest.register_craft({
|
||||
{'', 'techage:aluminum', ''},
|
||||
},
|
||||
})
|
||||
|
||||
|
@ -43,7 +43,7 @@ local Schedule = {[0] =
|
||||
|
||||
local function play_sound(pos)
|
||||
minetest.sound_play("techage_hum", {
|
||||
pos = pos,
|
||||
pos = pos,
|
||||
gain = 0.5,
|
||||
max_hear_distance = 10,
|
||||
})
|
||||
@ -52,12 +52,12 @@ end
|
||||
local function terminal_message(pos, msg)
|
||||
local term_num = M(pos):contains("term_num") and M(pos):get_string("term_num")
|
||||
local own_num = M(pos):get_string("node_number")
|
||||
|
||||
|
||||
if term_num and own_num then
|
||||
techage.send_single(own_num, term_num, "text", msg)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
local function experience_points(pos)
|
||||
if math.random(PROBABILITY) == 1 then
|
||||
local owner = M(pos):get_string("owner")
|
||||
@ -92,11 +92,11 @@ local function check_state(pos)
|
||||
nvm.ticks = (nvm.ticks or 0) + 1
|
||||
local idx = nvm.ticks % TIME_SLOTS
|
||||
local item = Schedule[idx]
|
||||
|
||||
|
||||
if idx == 1 then
|
||||
nvm.result = true
|
||||
end
|
||||
|
||||
|
||||
if item then
|
||||
if item.name == "shell" then
|
||||
local res, err = check_shell(pos, param2)
|
||||
@ -130,7 +130,7 @@ local function check_state(pos)
|
||||
return nvm.result
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
local function add_laser(pos)
|
||||
local param2 = minetest.get_node(pos).param2
|
||||
local pos1 = getpos(pos, param2, {3,3}, 1)
|
||||
@ -144,7 +144,7 @@ local function create_task(pos, task)
|
||||
if not mem.co then
|
||||
mem.co = coroutine.create(task)
|
||||
end
|
||||
|
||||
|
||||
local _, err = coroutine.resume(mem.co, pos)
|
||||
if err then
|
||||
mem.co = nil
|
||||
@ -227,10 +227,10 @@ minetest.register_node("techage:ta4_detector_core", {
|
||||
end
|
||||
return true
|
||||
end,
|
||||
|
||||
|
||||
after_dig_node = function(pos, oldnode, oldmetadata, digger)
|
||||
techage.on_remove_collider(digger)
|
||||
techage.remove_node(pos, oldnode, oldmetadata)
|
||||
techage.remove_node(pos, oldnode, oldmetadata)
|
||||
techage.del_mem(pos)
|
||||
end,
|
||||
})
|
||||
@ -247,7 +247,7 @@ local function start_task(pos)
|
||||
local own_num = M(pos):get_string("node_number")
|
||||
local nvm = techage.get_nvm(pos)
|
||||
nvm.magnet_positions = {}
|
||||
|
||||
|
||||
if term_num and param2 and pos2 then
|
||||
techage.send_single(own_num, term_num, "text", "#### Start ####")
|
||||
|
||||
@ -267,7 +267,7 @@ local function start_task(pos)
|
||||
return
|
||||
end
|
||||
techage.send_single(own_num, term_num, "append", "ok")
|
||||
|
||||
|
||||
coroutine.yield()
|
||||
techage.send_single(own_num, term_num, "text", "- Start magnets...")
|
||||
local t = {}
|
||||
@ -285,7 +285,7 @@ local function start_task(pos)
|
||||
end
|
||||
nvm.magnet_positions = t
|
||||
techage.send_single(own_num, term_num, "append", "ok")
|
||||
|
||||
|
||||
coroutine.yield()
|
||||
techage.send_single(own_num, term_num, "text", "- Check magnets...")
|
||||
-- The check will be performed by the timer, so wait 5 sec.
|
||||
@ -298,7 +298,7 @@ local function start_task(pos)
|
||||
nvm.locked = false
|
||||
return
|
||||
end
|
||||
|
||||
|
||||
coroutine.yield()
|
||||
techage.send_single(own_num, term_num, "text", "- Check detector...")
|
||||
for _,item in ipairs(Schedule)do
|
||||
@ -333,14 +333,14 @@ local function start_task(pos)
|
||||
end
|
||||
end
|
||||
techage.send_single(own_num, term_num, "append", "ok")
|
||||
|
||||
|
||||
coroutine.yield()
|
||||
techage.send_single(own_num, term_num, "text", "Collider started.")
|
||||
nvm.ticks = 0
|
||||
nvm.running = true
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
local function test_magnet(pos, payload)
|
||||
local term_num = M(pos):contains("term_num") and M(pos):get_string("term_num")
|
||||
local param2 = minetest.get_node(pos).param2
|
||||
@ -363,7 +363,7 @@ techage.register_node({"techage:ta4_detector_core"}, {
|
||||
return true
|
||||
elseif topic == "start" then
|
||||
-- Worker block
|
||||
nvm.locked = true
|
||||
nvm.locked = true
|
||||
create_task(pos, start_task)
|
||||
return true
|
||||
elseif topic == "stop" then
|
||||
@ -381,7 +381,7 @@ techage.register_node({"techage:ta4_detector_core"}, {
|
||||
end
|
||||
elseif topic == "test"then
|
||||
if payload and tonumber(payload) then
|
||||
test_magnet(pos, payload)
|
||||
test_magnet(pos, payload)
|
||||
return true
|
||||
else
|
||||
return "Invalid magnet number"
|
||||
@ -400,7 +400,7 @@ techage.register_node({"techage:ta4_detector_core"}, {
|
||||
on_node_load = function(pos)
|
||||
minetest.get_node_timer(pos):start(CYCLE_TIME)
|
||||
end,
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
minetest.register_craft({
|
||||
@ -411,4 +411,3 @@ minetest.register_craft({
|
||||
{'default:steel_ingot', '', 'techage:aluminum'},
|
||||
},
|
||||
})
|
||||
|
||||
|
@ -7,7 +7,7 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
TA4 Tube/Pipe Inputs/Outputs as part of the Collider
|
||||
|
||||
]]--
|
||||
@ -64,7 +64,7 @@ minetest.register_node("techage:ta4_collider_tube_inlet", {
|
||||
after_place_node = function(pos, placer, itemstack)
|
||||
VTube:after_place_node(pos)
|
||||
end,
|
||||
|
||||
|
||||
after_dig_node = function(pos, oldnode)
|
||||
VTube:after_dig_node(pos)
|
||||
techage.del_mem(pos)
|
||||
@ -87,10 +87,10 @@ techage.register_node({"techage:ta4_collider_tube_inlet"}, {
|
||||
return true
|
||||
end
|
||||
end,
|
||||
})
|
||||
})
|
||||
|
||||
-- Used by the detector to check the tube connection
|
||||
function techage.tube_inlet_command(pos, command, payload)
|
||||
function techage.tube_inlet_command(pos, command, payload)
|
||||
if command == "distance" then
|
||||
local pos2 = techage.transfer(pos, "F", command, payload, VTube, {"techage:ta4_magnet"})
|
||||
if type(pos2) == "table" then
|
||||
@ -144,7 +144,7 @@ minetest.register_node("techage:ta4_collider_pipe_inlet", {
|
||||
Pipe:after_place_node(pos)
|
||||
nvm.liquid = {}
|
||||
end,
|
||||
|
||||
|
||||
after_dig_node = function(pos, oldnode)
|
||||
Pipe:after_dig_node(pos)
|
||||
techage.del_mem(pos)
|
||||
@ -180,10 +180,10 @@ techage.register_node({"techage:ta4_collider_pipe_inlet"}, {
|
||||
return true
|
||||
end
|
||||
end,
|
||||
})
|
||||
})
|
||||
|
||||
-- Used by the detector to check for gas pressure
|
||||
function techage.gas_inlet_check(pos, node, meta, nvm)
|
||||
function techage.gas_inlet_check(pos, node, meta, nvm)
|
||||
nvm.liquid = nvm.liquid or {}
|
||||
if nvm.liquid.amount == GAS_CAPA and nvm.liquid.name == "techage:isobutane" then
|
||||
return true
|
||||
@ -192,7 +192,7 @@ function techage.gas_inlet_check(pos, node, meta, nvm)
|
||||
end
|
||||
|
||||
-- Used by the detector to check for cooler connection
|
||||
function techage.cooler_check(pos, node, meta, nvm)
|
||||
function techage.cooler_check(pos, node, meta, nvm)
|
||||
if nvm.detector_received then
|
||||
nvm.detector_received = nil
|
||||
return true
|
||||
@ -247,7 +247,7 @@ minetest.register_node("techage:ta4_collider_pipe_outlet", {
|
||||
init_air(nvm)
|
||||
Pipe:after_place_node(pos)
|
||||
end,
|
||||
|
||||
|
||||
after_dig_node = function(pos, oldnode)
|
||||
Pipe:after_dig_node(pos)
|
||||
techage.del_mem(pos)
|
||||
@ -275,7 +275,7 @@ liquid.register_nodes({"techage:ta4_collider_pipe_outlet"}, Pipe, "tank", {"U"},
|
||||
})
|
||||
|
||||
-- Used by the detector to check the vacuum
|
||||
function techage.air_outlet_check(pos, node, meta, nvm)
|
||||
function techage.air_outlet_check(pos, node, meta, nvm)
|
||||
nvm.liquid = nvm.liquid or {}
|
||||
if nvm.liquid.amount == 0 then
|
||||
return true
|
||||
@ -283,7 +283,7 @@ function techage.air_outlet_check(pos, node, meta, nvm)
|
||||
return false, "no vacuum"
|
||||
end
|
||||
|
||||
function techage.air_outlet_reset(pos)
|
||||
function techage.air_outlet_reset(pos)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
init_air(nvm)
|
||||
end
|
||||
@ -325,13 +325,13 @@ minetest.register_node("techage:ta4_collider_cable_inlet", {
|
||||
Cable:after_place_node(pos)
|
||||
minetest.get_node_timer(pos):start(CYCLE_TIME)
|
||||
end,
|
||||
|
||||
|
||||
on_timer = function(pos, elapsed)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
nvm.consumed = power.consume_power(pos, Cable, nil, PWR_NEEDED)
|
||||
return true
|
||||
end,
|
||||
|
||||
|
||||
after_dig_node = function(pos, oldnode)
|
||||
Cable:after_dig_node(pos)
|
||||
techage.del_mem(pos)
|
||||
@ -339,7 +339,7 @@ minetest.register_node("techage:ta4_collider_cable_inlet", {
|
||||
})
|
||||
|
||||
-- Used by the detector to check for power
|
||||
function techage.power_inlet_check(pos, node, meta, nvm)
|
||||
function techage.power_inlet_check(pos, node, meta, nvm)
|
||||
if nvm.consumed == PWR_NEEDED then
|
||||
return true
|
||||
end
|
||||
@ -352,7 +352,7 @@ techage.register_node({"techage:ta4_collider_cable_inlet"}, {
|
||||
on_node_load = function(pos)
|
||||
minetest.get_node_timer(pos):start(CYCLE_TIME)
|
||||
end,
|
||||
})
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "techage:ta4_collider_cable_inlet",
|
||||
@ -361,4 +361,4 @@ minetest.register_craft({
|
||||
{'techage:electric_cableS', 'techage:ta4_colliderblock', ''},
|
||||
{'', '', ''},
|
||||
},
|
||||
})
|
||||
})
|
@ -7,7 +7,7 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
TA4 Magnet as part of the Collider
|
||||
|
||||
]]--
|
||||
@ -60,9 +60,9 @@ minetest.register_node("techage:ta4_detector_magnet", {
|
||||
minetest.register_node("techage:ta4_magnet", {
|
||||
description = S("TA4 Collider Magnet"),
|
||||
inventory_image = minetest.inventorycube(
|
||||
"techage_collider_magnet.png^techage_appl_hole_electric.png",
|
||||
"techage_collider_magnet.png^techage_appl_hole_electric.png",
|
||||
"techage_collider_magnet.png^techage_appl_hole_pipe.png",
|
||||
"techage_collider_magnet.png^techage_collider_magnet_tube.png"),
|
||||
"techage_collider_magnet.png^techage_collider_magnet_tube.png"),
|
||||
tiles = {
|
||||
-- up, down, right, left, back, front
|
||||
"techage_collider_magnet.png^techage_appl_hole_electric.png",
|
||||
@ -111,7 +111,7 @@ minetest.register_node("techage:ta4_magnet", {
|
||||
VTube:after_place_node(pos)
|
||||
M(pos):set_string("infotext", S("TA4 Collider Magnet") .. " #0")
|
||||
end,
|
||||
|
||||
|
||||
-- To be called by the detector
|
||||
on_cyclic_check = function(pos)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
@ -120,15 +120,15 @@ minetest.register_node("techage:ta4_magnet", {
|
||||
if nvm.tube_damage then
|
||||
nvm.tube_damage = nil
|
||||
return -1
|
||||
elseif nvm.liquid.amount == CAPACITY and
|
||||
nvm.liquid.name == "techage:isobutane" and
|
||||
elseif nvm.liquid.amount == CAPACITY and
|
||||
nvm.liquid.name == "techage:isobutane" and
|
||||
nvm.consumed == PWR_NEEDED then
|
||||
return 0
|
||||
end
|
||||
return -2
|
||||
end,
|
||||
|
||||
tubelib2_on_update2 = function(pos, outdir, tlib2, node)
|
||||
|
||||
tubelib2_on_update2 = function(pos, outdir, tlib2, node)
|
||||
if tlib2.tube_type == "vtube" then
|
||||
local nvm = techage.get_nvm(pos)
|
||||
nvm.tube_damage = true
|
||||
@ -138,7 +138,7 @@ minetest.register_node("techage:ta4_magnet", {
|
||||
nvm.liquid.amount = 0
|
||||
end
|
||||
end,
|
||||
|
||||
|
||||
after_dig_node = function(pos, oldnode)
|
||||
Pipe:after_dig_node(pos)
|
||||
Cable:after_dig_node(pos)
|
||||
@ -172,14 +172,14 @@ VTube:add_secondary_node_names({"techage:ta4_magnet"})
|
||||
VTube:set_valid_sides("techage:ta4_magnet", {"R", "L"})
|
||||
|
||||
local function send_to_next(pos, in_dir, topic, payload)
|
||||
return techage.transfer(pos, in_dir, topic, payload, VTube,
|
||||
return techage.transfer(pos, in_dir, topic, payload, VTube,
|
||||
{"techage:ta4_magnet", "techage:ta4_collider_tube_inlet"})
|
||||
end
|
||||
|
||||
--[[
|
||||
Commands
|
||||
--------
|
||||
|
||||
--------
|
||||
|
||||
distance : Check distance between all magnets.
|
||||
Returns pos of next magnet or the number of the defect magnet.
|
||||
enumerate : Give each magnet a unique number (1...n)
|
||||
@ -231,7 +231,7 @@ techage.register_node({"techage:ta4_magnet"}, {
|
||||
end
|
||||
end
|
||||
end,
|
||||
})
|
||||
})
|
||||
|
||||
minetest.register_node("techage:ta4_magnet_base", {
|
||||
description = S("TA4 Collider Magnet Base"),
|
||||
|
@ -9,7 +9,7 @@
|
||||
See LICENSE.txt for more information
|
||||
|
||||
TA4 Terminal
|
||||
|
||||
|
||||
]]--
|
||||
|
||||
local M = minetest.get_meta
|
||||
@ -25,7 +25,7 @@ machine.
|
||||
Commands can have up to 80 characters.
|
||||
Local commands:
|
||||
- clear = clear screen
|
||||
- help = this message
|
||||
- help = this message
|
||||
- pub = switch to public use
|
||||
- priv = switch to private use
|
||||
- connect <num> = connect the machine
|
||||
@ -77,7 +77,7 @@ end
|
||||
local function command(pos, mem, player)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local owner = meta:get_string("owner")
|
||||
|
||||
|
||||
if mem.command == "clear" then
|
||||
mem.output = ""
|
||||
mem.command = ""
|
||||
@ -103,12 +103,12 @@ local function command(pos, mem, player)
|
||||
output(pos, "Switched to private use!")
|
||||
elseif meta:get_int("public") == 1 or owner == player then
|
||||
if mem.command == "clear" then
|
||||
mem.output =
|
||||
mem.output =
|
||||
mem.command = ""
|
||||
meta:set_string("formspec", formspec2(mem))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
minetest.register_node("techage:ta4_terminal", {
|
||||
description = "TA4 Collider Terminal",
|
||||
@ -136,7 +136,7 @@ minetest.register_node("techage:ta4_terminal", {
|
||||
{-12/32, -14/32, 12/32, 12/32, 6/32, 14/32},
|
||||
},
|
||||
},
|
||||
|
||||
|
||||
after_place_node = function(pos, placer)
|
||||
local number = techage.add_node(pos, minetest.get_node(pos).name)
|
||||
local meta = minetest.get_meta(pos)
|
||||
@ -169,11 +169,11 @@ minetest.register_node("techage:ta4_terminal", {
|
||||
meta:set_string("formspec", formspec2(mem))
|
||||
end
|
||||
end,
|
||||
|
||||
|
||||
after_dig_node = function(pos, oldnode, oldmetadata)
|
||||
techage.remove_node(pos, oldnode, oldmetadata)
|
||||
end,
|
||||
|
||||
|
||||
paramtype = "light",
|
||||
use_texture_alpha = techage.CLIP,
|
||||
sunlight_propagates = true,
|
||||
@ -205,4 +205,4 @@ techage.register_node({"techage:ta4_terminal"}, {
|
||||
return true
|
||||
end
|
||||
end,
|
||||
})
|
||||
})
|
@ -7,7 +7,7 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
TA4 Vacuum Tube as part of the Collider
|
||||
|
||||
]]--
|
||||
@ -18,10 +18,10 @@ local S = techage.S
|
||||
|
||||
local VTube = tubelib2.Tube:new({
|
||||
dirs_to_check = {1,2,3,4},
|
||||
max_tube_length = 5,
|
||||
max_tube_length = 5,
|
||||
tube_type = "vtube",
|
||||
show_infotext = false,
|
||||
primary_node_names = {"techage:ta4_vtubeS", "techage:ta4_vtubeA"},
|
||||
primary_node_names = {"techage:ta4_vtubeS", "techage:ta4_vtubeA"},
|
||||
secondary_node_names = {"techage:ta4_magnet"},
|
||||
after_place_tube = function(pos, param2, tube_type, num_tubes)
|
||||
minetest.swap_node(pos, {name = "techage:ta4_vtube"..tube_type, param2 = param2})
|
||||
@ -63,11 +63,11 @@ minetest.register_node("techage:ta4_vtubeS", {
|
||||
end
|
||||
return false
|
||||
end,
|
||||
|
||||
|
||||
after_dig_node = function(pos, oldnode, oldmetadata, digger)
|
||||
VTube:after_dig_tube(pos, oldnode, oldmetadata)
|
||||
end,
|
||||
|
||||
|
||||
paramtype2 = "facedir", -- important!
|
||||
on_rotate = screwdriver.disallow, -- important!
|
||||
paramtype = "light",
|
||||
@ -108,7 +108,7 @@ minetest.register_node("techage:ta4_vtubeA", {
|
||||
after_dig_node = function(pos, oldnode, oldmetadata, digger)
|
||||
VTube:after_dig_tube(pos, oldnode, oldmetadata)
|
||||
end,
|
||||
|
||||
|
||||
paramtype2 = "facedir", -- important!
|
||||
on_rotate = screwdriver.disallow, -- important!
|
||||
paramtype = "light",
|
||||
@ -127,4 +127,4 @@ minetest.register_craft({
|
||||
{'techage:aluminum', 'dye:blue', 'techage:aluminum'},
|
||||
{'', 'default:steel_ingot', ''},
|
||||
},
|
||||
})
|
||||
})
|
@ -19,7 +19,7 @@ local S = techage.S
|
||||
local AssemblyPlan = {
|
||||
-- y-offs, path, facedir-offs, name
|
||||
-- 0 = forward, 1 = right, 2 = backward, 3 = left
|
||||
|
||||
|
||||
-- level 1
|
||||
-- left/right
|
||||
{ 1, {3,3,3,2}, 0, "techage:ta4_colliderblock"},
|
||||
@ -45,7 +45,7 @@ local AssemblyPlan = {
|
||||
{ 1, {3}, 0, "techage:ta4_detector_magnet"},
|
||||
{ 1, {1}, 0, "techage:ta4_detector_magnet"},
|
||||
{ 1, {1,1}, 0, "techage:ta4_detector_magnet"},
|
||||
|
||||
|
||||
-- level 2
|
||||
-- left/right
|
||||
{ 2, {3,3,3,2}, 1, "techage:ta4_collider_pipe_inlet"},
|
||||
@ -93,7 +93,7 @@ local AssemblyPlan = {
|
||||
{ 3, {}, 0, "techage:ta4_collider_pipe_outlet"},
|
||||
{ 3, {1}, 0, "techage:ta4_detector_magnet"},
|
||||
{ 3, {1,1}, 0, "techage:ta4_detector_magnet"},
|
||||
|
||||
|
||||
-- Core block
|
||||
{ 1, {}, 0, "techage:ta4_detector_core"},
|
||||
}
|
||||
@ -156,12 +156,12 @@ minetest.register_node("techage:ta4_collider_detector_worker", {
|
||||
inv:set_size("src", 9)
|
||||
M(pos):set_string("formspec", formspec())
|
||||
end,
|
||||
|
||||
|
||||
on_receive_fields = function(pos, formname, fields, player)
|
||||
if minetest.is_protected(pos, player:get_player_name()) then
|
||||
return
|
||||
end
|
||||
|
||||
|
||||
local nvm = techage.get_nvm(pos)
|
||||
if fields.build then
|
||||
if not nvm.assemble_locked then
|
||||
@ -176,7 +176,7 @@ minetest.register_node("techage:ta4_collider_detector_worker", {
|
||||
end
|
||||
end
|
||||
end,
|
||||
|
||||
|
||||
after_dig_node = function(pos, oldnode)
|
||||
techage.del_mem(pos)
|
||||
end,
|
||||
@ -207,4 +207,3 @@ minetest.register_craft({
|
||||
{'default:steel_ingot', 'default:mese_crystal', 'techage:aluminum'},
|
||||
},
|
||||
})
|
||||
|
||||
|
@ -172,4 +172,4 @@ minetest.register_craft({
|
||||
{"techage:electric_cableS", "default:tin_ingot", "digtron:digtron_core"},
|
||||
{"group:wood", "default:copper_ingot", "group:wood"},
|
||||
},
|
||||
})
|
||||
})
|
@ -58,7 +58,7 @@ local function plan(images)
|
||||
end
|
||||
end
|
||||
return table.concat(tbl)
|
||||
end
|
||||
end
|
||||
|
||||
local function formspec_help(meta, manual)
|
||||
local bttn
|
||||
@ -123,13 +123,13 @@ minetest.register_node("techage:construction_board", {
|
||||
drawtype = "nodebox",
|
||||
node_box = board_box,
|
||||
selection_box = board_box,
|
||||
|
||||
|
||||
after_place_node = function(pos, placer, itemstack)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_int("index", 1)
|
||||
meta:set_string("formspec", formspec_help(meta, techage.manual_DE))
|
||||
end,
|
||||
|
||||
|
||||
on_receive_fields = function(pos, formname, fields, player)
|
||||
local player_name = player:get_player_name()
|
||||
if minetest.is_protected(pos, player_name) then
|
||||
@ -149,7 +149,7 @@ minetest.register_node("techage:construction_board", {
|
||||
end
|
||||
end
|
||||
end,
|
||||
|
||||
|
||||
paramtype2 = "wallmounted",
|
||||
paramtype = "light",
|
||||
use_texture_alpha = techage.CLIP,
|
||||
@ -175,13 +175,13 @@ minetest.register_node("techage:construction_board_EN", {
|
||||
drawtype = "nodebox",
|
||||
node_box = board_box,
|
||||
selection_box = board_box,
|
||||
|
||||
|
||||
after_place_node = function(pos, placer, itemstack)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_int("index", 1)
|
||||
meta:set_string("formspec", formspec_help(meta, techage.manual_EN))
|
||||
end,
|
||||
|
||||
|
||||
on_receive_fields = function(pos, formname, fields, player)
|
||||
local player_name = player:get_player_name()
|
||||
if minetest.is_protected(pos, player_name) then
|
||||
@ -201,7 +201,7 @@ minetest.register_node("techage:construction_board_EN", {
|
||||
end
|
||||
end
|
||||
end,
|
||||
|
||||
|
||||
paramtype2 = "wallmounted",
|
||||
paramtype = "light",
|
||||
use_texture_alpha = techage.CLIP,
|
||||
@ -230,4 +230,4 @@ minetest.register_craft({
|
||||
type = "shapeless",
|
||||
output = "techage:construction_board",
|
||||
recipe = {"techage:construction_board_EN"},
|
||||
})
|
||||
})
|
@ -7,7 +7,7 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
TA Items Table
|
||||
|
||||
]]--
|
||||
@ -118,7 +118,7 @@ techage.Items = {
|
||||
ta3_programmer = "techage:programmer",
|
||||
ta3_doorcontroller = "techage:ta3_doorcontroller",
|
||||
ta3_drill_pipe_wrench = "techage:ta3_drill_pipe_wrench",
|
||||
ta3_pipe = "techage:ta3_pipeS",
|
||||
ta3_pipe = "techage:ta3_pipeS",
|
||||
ta3_pipe_wall_entry = "techage:ta3_pipe_wall_entry",
|
||||
ta3_mesecons_converter = "techage:ta3_mesecons_converter",
|
||||
ta3_valve = "techage:ta3_valve_closed",
|
||||
@ -132,13 +132,13 @@ techage.Items = {
|
||||
ta4_blinklamp = "techage:rotor_signal_lamp_off",
|
||||
ta4_nacelle = "techage:ta4_wind_turbine_nacelle",
|
||||
ta4_minicell = "techage:ta4_solar_minicell",
|
||||
ta4_pipe = "techage:ta4_pipeS",
|
||||
ta4_tube = "techage:ta4_tubeS",
|
||||
ta4_junctionpipe = "techage:ta4_junctionpipe25",
|
||||
ta4_pipeinlet = "techage:ta4_pipe_inlet",
|
||||
ta4_pipe = "techage:ta4_pipeS",
|
||||
ta4_tube = "techage:ta4_tubeS",
|
||||
ta4_junctionpipe = "techage:ta4_junctionpipe25",
|
||||
ta4_pipeinlet = "techage:ta4_pipe_inlet",
|
||||
ta4_turbine = "techage:ta4_turbine",
|
||||
ta4_generator = "techage:ta4_generator",
|
||||
ta4_heatexchanger = "techage:heatexchanger3",
|
||||
ta4_heatexchanger = "techage:heatexchanger3",
|
||||
ta4_powercable = "techage:ta4_power_cableS",
|
||||
ta4_powerbox = "techage:ta4_power_box",
|
||||
ta4_solarmodule = "techage:ta4_solar_module",
|
||||
|
@ -2555,4 +2555,3 @@ techage.manual_DE.aPlanTable = {
|
||||
"",
|
||||
"",
|
||||
}
|
||||
|
||||
|
@ -2548,4 +2548,3 @@ techage.manual_EN.aPlanTable = {
|
||||
"",
|
||||
"",
|
||||
}
|
||||
|
||||
|
@ -7,14 +7,14 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
API to add further chapters to the manuals
|
||||
|
||||
]]--
|
||||
|
||||
function techage.add_to_manual(language, titles, texts, items, plans)
|
||||
local tbl
|
||||
|
||||
|
||||
if language == "DE" then
|
||||
tbl = techage.manual_DE
|
||||
elseif language == "EN" then
|
||||
@ -38,4 +38,3 @@ function techage.add_to_manual(language, titles, texts, items, plans)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
@ -7,7 +7,7 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
Constructioon Plans for TA machines
|
||||
|
||||
]]--
|
||||
@ -162,8 +162,8 @@ techage.ConstructionPlans["steamengine"] = {
|
||||
{false, BOIL2, false, PI090, false, false, false},
|
||||
{false, BOIL1, false, PI090, false, false, false},
|
||||
{false, FIBOX, false, PK090, CYLIN, FLYWH, false},
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
--
|
||||
-- TA2 Storage
|
||||
--
|
||||
@ -185,7 +185,7 @@ techage.ConstructionPlans["ta2_storage"] = {
|
||||
{false, false, false, AXL90, WCHST, false, false},
|
||||
{false, false, false, AXL90, false, false, false},
|
||||
{AXL00, AXL00, AXL00, GRBOX, false, false, false},
|
||||
}
|
||||
}
|
||||
|
||||
--
|
||||
-- Item Transport
|
||||
@ -201,7 +201,7 @@ techage.ConstructionPlans["itemtransport"] = {
|
||||
{false},
|
||||
{false},
|
||||
{CHEST, PUSHR, TB000, GRIND, PUSHR, DISTR, TB000, SIEV2, PUSHR, TB000, CHEST},
|
||||
}
|
||||
}
|
||||
|
||||
--
|
||||
-- Gravel Rinser
|
||||
@ -215,7 +215,7 @@ local TK090 = {"techage_tube_knee.png^[transformR90", "techage:tubeS"} -- '7'
|
||||
local TK180 = {"techage_tube_knee.png^[transformR180", "techage:tubeS"}
|
||||
local TK270 = {"techage_tube_knee.png^[transformR270", "techage:tubeS"}
|
||||
|
||||
techage.ConstructionPlans["gravelrinser"] = {
|
||||
techage.ConstructionPlans["gravelrinser"] = {
|
||||
{false, false, false, SIDEV, false, false, false, false},
|
||||
{false, GLASS, WATER, GLASS, GLASS, GLASS, GLASS, GLASS},
|
||||
{false, DDIRT, DDIRT, TK000, RINSR, TK270, HOPPR, CHEST},
|
||||
@ -290,8 +290,8 @@ techage.ConstructionPlans["ta3_tank"] = {
|
||||
--
|
||||
-- TA3 Oil Loading station
|
||||
--
|
||||
local MCART = {minetest.inventorycube("carts_cart_top.png",
|
||||
"carts_cart_side.png^minecart_logo.png", "carts_cart_side.png^minecart_logo.png"),
|
||||
local MCART = {minetest.inventorycube("carts_cart_top.png",
|
||||
"carts_cart_side.png^minecart_logo.png", "carts_cart_side.png^minecart_logo.png"),
|
||||
"minecart:cart"}
|
||||
local PRAIL = {"carts_rail_straight_pwr.png", "carts:powerrail"}
|
||||
local PRAIH = {"carts_rail_straight_pwr.png^[transformR90", "carts:powerrail"}
|
||||
@ -497,4 +497,4 @@ function techage.add_manual_plans(table_with_plans)
|
||||
for name, tbl in pairs(table_with_plans) do
|
||||
techage.ConstructionPlans[name] = tbl
|
||||
end
|
||||
end
|
||||
end
|
@ -7,7 +7,7 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
TA4 TES Generator (dummy)
|
||||
- can be started and stopped
|
||||
- provides netID of cable network
|
||||
@ -40,7 +40,7 @@ minetest.register_node("techage:ta4_generator", {
|
||||
"techage_filling_ta4.png^techage_frame_ta4.png^techage_appl_generator.png",
|
||||
"techage_filling_ta4.png^techage_frame_ta4.png^techage_appl_generator.png^[transformFX]",
|
||||
},
|
||||
|
||||
|
||||
after_place_node = function(pos)
|
||||
M(pos):set_int("outdir", networks.side_to_outdir(pos, "R"))
|
||||
Cable:after_place_node(pos)
|
||||
@ -86,7 +86,7 @@ minetest.register_node("techage:ta4_generator_on", {
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
|
||||
paramtype2 = "facedir",
|
||||
drop = "",
|
||||
groups = {not_in_creative_inventory=1},
|
||||
@ -129,4 +129,3 @@ minetest.register_craft({
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
|
@ -7,7 +7,7 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
TA4 Heat Exchanger1 (bottom part)
|
||||
- has a connection to storage and turbine (via pipes)
|
||||
- acts as a cable junction for Exchanger2
|
||||
@ -44,7 +44,7 @@ minetest.register_node("techage:heatexchanger1", {
|
||||
"techage_filling_ta4.png^techage_frameB_ta4.png^techage_appl_hole_electric.png",
|
||||
"techage_filling_ta4.png^techage_frameB_ta4.png^techage_appl_hole_electric.png",
|
||||
},
|
||||
|
||||
|
||||
after_place_node = function(pos, placer, itemstack, pointed_thing)
|
||||
Cable:after_place_node(pos)
|
||||
Pipe:after_place_node(pos)
|
||||
@ -99,4 +99,3 @@ minetest.register_craft({
|
||||
{"", "techage:baborium_ingot", ""},
|
||||
},
|
||||
})
|
||||
|
||||
|
@ -7,7 +7,7 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
TA4 Heat Exchanger2 (middle part)
|
||||
(alternatively used as cooler for the TA4 collider)
|
||||
|
||||
@ -35,13 +35,13 @@ local DOWN = 5
|
||||
local PWR_NEEDED = 5
|
||||
|
||||
local function heatexchanger1_cmnd(pos, topic, payload)
|
||||
return techage.transfer({x = pos.x, y = pos.y - 1, z = pos.z},
|
||||
return techage.transfer({x = pos.x, y = pos.y - 1, z = pos.z},
|
||||
nil, topic, payload, nil,
|
||||
{"techage:heatexchanger1"})
|
||||
end
|
||||
|
||||
local function heatexchanger3_cmnd(pos, topic, payload)
|
||||
return techage.transfer({x = pos.x, y = pos.y + 1, z = pos.z},
|
||||
return techage.transfer({x = pos.x, y = pos.y + 1, z = pos.z},
|
||||
nil, topic, payload, nil,
|
||||
{"techage:heatexchanger3"})
|
||||
end
|
||||
@ -59,7 +59,7 @@ local function play_sound(pos)
|
||||
local mem = techage.get_mem(pos)
|
||||
if not mem.handle or mem.handle == -1 then
|
||||
mem.handle = minetest.sound_play("techage_booster", {
|
||||
pos = pos,
|
||||
pos = pos,
|
||||
gain = 0.3,
|
||||
max_hear_distance = 10,
|
||||
loop = true})
|
||||
@ -95,7 +95,7 @@ local function can_start(pos, nvm)
|
||||
return S("No power")
|
||||
end
|
||||
end
|
||||
-- Used as heat exchanger
|
||||
-- Used as heat exchanger
|
||||
local netID = networks.determine_netID(pos, Cable, DOWN)
|
||||
if heatexchanger1_cmnd(pos, "netID") ~= netID then
|
||||
return S("Power network connection error")
|
||||
@ -139,7 +139,7 @@ end
|
||||
|
||||
local function formspec(self, pos, nvm)
|
||||
local data
|
||||
|
||||
|
||||
if nvm.used_as_cooler then
|
||||
return cooler_formspec(self, pos, nvm)
|
||||
end
|
||||
@ -182,7 +182,7 @@ local function check_TES_integrity(pos, nvm)
|
||||
end
|
||||
nvm.check_once_again = true
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
local State = techage.NodeStates:new({
|
||||
node_name_passive = "techage:heatexchanger2",
|
||||
@ -200,7 +200,7 @@ local function cooler_timer(pos, nvm)
|
||||
if power.consume_power(pos, Cable, DOWN, PWR_NEEDED) ~= PWR_NEEDED then
|
||||
State:fault(pos, nvm, "No power")
|
||||
stop_sound(pos)
|
||||
return true
|
||||
return true
|
||||
end
|
||||
|
||||
-- Cyclically check pipe connections
|
||||
@ -218,7 +218,7 @@ local function cooler_timer(pos, nvm)
|
||||
State:fault(pos, nvm, "Pipe connection error")
|
||||
stop_sound(pos)
|
||||
end
|
||||
return true
|
||||
return true
|
||||
end
|
||||
|
||||
local function node_timer(pos, elapsed)
|
||||
@ -233,7 +233,7 @@ local function node_timer(pos, elapsed)
|
||||
heatexchanger1_cmnd(pos, "stop")
|
||||
power.start_storage_calc(pos, Cable, DOWN)
|
||||
end
|
||||
|
||||
|
||||
if techage.is_running(nvm) then
|
||||
local capa = power.get_storage_load(pos, Cable, DOWN, nvm.capa_max) or 0
|
||||
if capa > 0 then
|
||||
@ -243,7 +243,7 @@ local function node_timer(pos, elapsed)
|
||||
if techage.is_activeformspec(pos) then
|
||||
M(pos):set_string("formspec", formspec(State, pos, nvm))
|
||||
end
|
||||
return true
|
||||
return true
|
||||
end
|
||||
|
||||
local function can_dig(pos, player)
|
||||
@ -273,7 +273,7 @@ local function after_place_node(pos, placer)
|
||||
Cable:after_place_node(pos, {DOWN})
|
||||
State:node_init(pos, nvm, own_num)
|
||||
end
|
||||
|
||||
|
||||
local function after_dig_node(pos, oldnode, oldmetadata, digger)
|
||||
Cable:after_dig_node(pos)
|
||||
techage.del_mem(pos)
|
||||
@ -283,7 +283,7 @@ local function 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)
|
||||
State:state_button_event(pos, nvm, fields)
|
||||
M(pos):set_string("formspec", formspec(State, pos, nvm))
|
||||
@ -309,12 +309,12 @@ minetest.register_node("techage:heatexchanger2", {
|
||||
"techage_filling_ta4.png^techage_frameM_ta4.png^techage_appl_ribsB.png",
|
||||
"techage_filling_ta4.png^techage_frameM_ta4.png^techage_appl_ribsB.png",
|
||||
},
|
||||
|
||||
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {-1/2, -1.5/2, -1/2, 1/2, 1/2, 1/2},
|
||||
},
|
||||
|
||||
|
||||
on_receive_fields = on_receive_fields,
|
||||
on_rightclick = on_rightclick,
|
||||
on_timer = node_timer,
|
||||
@ -397,4 +397,4 @@ minetest.register_craft({
|
||||
{"", "techage:ta4_wlanchip", ""},
|
||||
{"", "techage:baborium_ingot", ""},
|
||||
},
|
||||
})
|
||||
})
|
@ -7,7 +7,7 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
TA4 Heat Exchanger3 (top part)
|
||||
|
||||
]]--
|
||||
@ -63,10 +63,10 @@ minetest.register_node("techage:heatexchanger3", {
|
||||
"techage_filling_ta4.png^techage_frameT_ta4.png^techage_appl_ribsT.png",
|
||||
"techage_filling_ta4.png^techage_frameT_ta4.png^techage_appl_ribsT.png",
|
||||
},
|
||||
|
||||
|
||||
after_place_node = after_place_node,
|
||||
after_dig_node = after_dig_node,
|
||||
|
||||
|
||||
networks = {
|
||||
pipe2 = {},
|
||||
},
|
||||
@ -99,4 +99,4 @@ minetest.register_craft({
|
||||
},
|
||||
})
|
||||
|
||||
techage.orientate_node = orientate_node
|
||||
techage.orientate_node = orientate_node
|
@ -7,7 +7,7 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
TA4 Pipe Inlet
|
||||
|
||||
]]--
|
||||
@ -40,10 +40,10 @@ minetest.register_node("techage:ta4_pipe_inlet", {
|
||||
"basic_materials_concrete_block.png^techage_tes_inlet.png",
|
||||
"basic_materials_concrete_block.png^techage_tes_inlet.png",
|
||||
},
|
||||
|
||||
|
||||
after_place_node = after_place_node,
|
||||
after_dig_node = after_dig_node,
|
||||
|
||||
|
||||
networks = {
|
||||
pipe2 = {},
|
||||
},
|
||||
@ -72,7 +72,7 @@ local Numbers = {
|
||||
local function get_diameter(pos, in_dir)
|
||||
local dir = tubelib2.Dir6dToVector[in_dir]
|
||||
local pos2, node
|
||||
|
||||
|
||||
pos2 = vector.add(pos, vector.multiply(dir, 4))
|
||||
node = minetest.get_node(pos2)
|
||||
if node.name == "techage:ta3_pipe_wall_entry" then
|
||||
@ -81,7 +81,7 @@ local function get_diameter(pos, in_dir)
|
||||
if node.name == "techage:ta4_pipe_inlet" then
|
||||
return 5
|
||||
end
|
||||
|
||||
|
||||
pos2 = vector.add(pos, vector.multiply(dir, 6))
|
||||
node = minetest.get_node(pos2)
|
||||
if node.name == "techage:ta3_pipe_wall_entry" then
|
||||
@ -90,7 +90,7 @@ local function get_diameter(pos, in_dir)
|
||||
if node.name == "techage:ta4_pipe_inlet" then
|
||||
return 7
|
||||
end
|
||||
|
||||
|
||||
pos2 = vector.add(pos, vector.multiply(dir, 8))
|
||||
node = minetest.get_node(pos2)
|
||||
if node.name == "techage:ta3_pipe_wall_entry" then
|
||||
@ -116,11 +116,11 @@ local function check_volume(pos, in_dir, owner)
|
||||
-- calculate size
|
||||
local pos1 = {x = cpos.x - radius, y = cpos.y - radius, z = cpos.z - radius}
|
||||
local pos2 = {x = cpos.x + radius, y = cpos.y + radius, z = cpos.z + radius}
|
||||
local _, node_tbl = minetest.find_nodes_in_area(pos1, pos2,
|
||||
{"default:gravel", "techage:ta4_pipe_inlet",
|
||||
local _, node_tbl = minetest.find_nodes_in_area(pos1, pos2,
|
||||
{"default:gravel", "techage:ta4_pipe_inlet",
|
||||
"basic_materials:concrete_block", "default:obsidian_glass",
|
||||
"techage:glow_gravel"})
|
||||
if node_tbl["default:obsidian_glass"] > 1 then
|
||||
if node_tbl["default:obsidian_glass"] > 1 then
|
||||
return S("one window maximum")
|
||||
elseif node_tbl["default:obsidian_glass"] + node_tbl["basic_materials:concrete_block"] ~= Numbers.shell[radius] then
|
||||
return S("wrong number of shell nodes")
|
||||
@ -171,4 +171,4 @@ minetest.register_craft({
|
||||
type = 'shapeless',
|
||||
output = "techage:ta4_pipe_inlet",
|
||||
recipe = {"basic_materials:concrete_block", "techage:ta4_pipeS"},
|
||||
})
|
||||
})
|
@ -7,7 +7,7 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
TA4 Nodes
|
||||
|
||||
]]--
|
||||
@ -34,4 +34,3 @@ minetest.register_node("techage:glow_gravel", {
|
||||
sounds = default.node_sound_gravel_defaults(),
|
||||
drop = "",
|
||||
})
|
||||
|
||||
|
@ -7,7 +7,7 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
TA4 TES Gas Turbine
|
||||
|
||||
]]--
|
||||
@ -19,7 +19,7 @@ local S = techage.S
|
||||
local Pipe = techage.LiquidPipe
|
||||
|
||||
local function generator_cmnd(pos, topic, payload)
|
||||
return techage.transfer(pos, "R", topic, payload, nil,
|
||||
return techage.transfer(pos, "R", topic, payload, nil,
|
||||
{"techage:ta4_generator", "techage:ta4_generator_on"})
|
||||
end
|
||||
|
||||
@ -36,7 +36,7 @@ local function play_sound(pos)
|
||||
local mem = techage.get_mem(pos)
|
||||
if not mem.handle or mem.handle == -1 then
|
||||
mem.handle = minetest.sound_play("techage_turbine", {
|
||||
pos = pos,
|
||||
pos = pos,
|
||||
gain = 0.4,
|
||||
max_hear_distance = 10,
|
||||
loop = true})
|
||||
@ -65,7 +65,7 @@ minetest.register_node("techage:ta4_turbine", {
|
||||
"techage_filling_ta4.png^techage_appl_turbine.png^techage_frame_ta4.png",
|
||||
"techage_filling_ta4.png^techage_appl_turbine.png^techage_frame_ta4.png",
|
||||
},
|
||||
|
||||
|
||||
after_place_node = function(pos)
|
||||
Pipe:after_place_node(pos)
|
||||
end,
|
||||
@ -112,8 +112,8 @@ minetest.register_node("techage:ta4_turbine_on", {
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
tubelib2_on_update2 = function(pos, outdir, tlib2, node)
|
||||
|
||||
tubelib2_on_update2 = function(pos, outdir, tlib2, node)
|
||||
swap_node(pos, "techage:ta4_turbine")
|
||||
stop_sound(pos)
|
||||
generator_cmnd(pos, "stop")
|
||||
@ -151,7 +151,7 @@ techage.register_node({"techage:ta4_turbine", "techage:ta4_turbine_on"}, {
|
||||
on_node_load = function(pos, node)
|
||||
if node.name == "techage:ta4_turbine_on" then
|
||||
play_sound(pos)
|
||||
end
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
@ -163,4 +163,3 @@ minetest.register_craft({
|
||||
{"", "techage:ta4_wlanchip", ""},
|
||||
},
|
||||
})
|
||||
|
||||
|
@ -7,7 +7,7 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
Biogas flare
|
||||
|
||||
]]--
|
||||
@ -65,7 +65,7 @@ for idx,ratio in ipairs(lRatio) do
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
|
||||
after_destruct = function(pos, oldnode)
|
||||
pos.y = pos.y + 1
|
||||
local node = minetest.get_node(pos)
|
||||
@ -73,7 +73,7 @@ for idx,ratio in ipairs(lRatio) do
|
||||
minetest.remove_node(pos)
|
||||
end
|
||||
end,
|
||||
|
||||
|
||||
use_texture_alpha = true,
|
||||
inventory_image = "techage_flame.png",
|
||||
paramtype = "light",
|
||||
@ -93,16 +93,16 @@ end
|
||||
|
||||
local function start_flarestack(pos, playername)
|
||||
if minetest.is_protected(
|
||||
{x=pos.x, y=pos.y+1, z=pos.z},
|
||||
{x=pos.x, y=pos.y+1, z=pos.z},
|
||||
playername) then
|
||||
return
|
||||
end
|
||||
local meta = minetest.get_meta(pos)
|
||||
flame({x=pos.x, y=pos.y+1, z=pos.z})
|
||||
local handle = minetest.sound_play("gasflare", {
|
||||
pos = pos,
|
||||
max_hear_distance = 20,
|
||||
gain = 1,
|
||||
pos = pos,
|
||||
max_hear_distance = 20,
|
||||
gain = 1,
|
||||
loop = true})
|
||||
--print("handle", handle)
|
||||
meta:set_int("handle", handle)
|
||||
@ -123,7 +123,7 @@ minetest.register_node("techage:gasflare", {
|
||||
"techage_gasflare.png",
|
||||
"techage_gasflare.png^techage_appl_hole2.png",
|
||||
},
|
||||
|
||||
|
||||
after_place_node = function(pos, placer, itemstack, pointed_thing)
|
||||
local node = minetest.get_node({x=pos.x, y=pos.y+1, z=pos.z})
|
||||
if node.name ~= "air" then
|
||||
@ -131,14 +131,14 @@ minetest.register_node("techage:gasflare", {
|
||||
end
|
||||
minetest.add_node({x=pos.x, y=pos.y+1, z=pos.z}, {name = "techage:gasflare2"})
|
||||
end,
|
||||
|
||||
|
||||
on_punch = function(pos, node, puncher)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local handle = meta:get_int("handle")
|
||||
minetest.sound_stop(handle)
|
||||
start_flarestack(pos, puncher:get_player_name())
|
||||
end,
|
||||
|
||||
|
||||
after_dig_node = function(pos, oldnode, oldmetadata, digger)
|
||||
--print(dump(oldmetadata))
|
||||
stop_flarestack(pos, oldmetadata.fields.handle)
|
||||
@ -149,7 +149,7 @@ minetest.register_node("techage:gasflare", {
|
||||
end,
|
||||
|
||||
paramtype = "light",
|
||||
light_source = 0,
|
||||
light_source = 0,
|
||||
sunlight_propagates = true,
|
||||
paramtype2 = "facedir",
|
||||
groups = {cracky=2, crumbly=2, choppy=2},
|
||||
@ -163,7 +163,7 @@ minetest.register_node("techage:gasflare2", {
|
||||
"techage_gasflare.png^techage_appl_hole2.png",
|
||||
"techage_gasflare.png"
|
||||
},
|
||||
|
||||
|
||||
drawtype = "nodebox",
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
@ -173,10 +173,10 @@ minetest.register_node("techage:gasflare2", {
|
||||
},
|
||||
},
|
||||
paramtype = "light",
|
||||
light_source = 0,
|
||||
light_source = 0,
|
||||
sunlight_propagates = true,
|
||||
paramtype2 = "facedir",
|
||||
diggable = false,
|
||||
is_ground_content = false,
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
})
|
||||
})
|
@ -7,7 +7,7 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
TA3 Booster
|
||||
|
||||
]]--
|
||||
@ -39,7 +39,7 @@ local function play_sound(pos)
|
||||
local mem = techage.get_mem(pos)
|
||||
if not mem.handle or mem.handle == -1 then
|
||||
mem.handle = minetest.sound_play("techage_booster", {
|
||||
pos = pos,
|
||||
pos = pos,
|
||||
gain = 1,
|
||||
max_hear_distance = 7,
|
||||
loop = true})
|
||||
@ -82,7 +82,7 @@ minetest.register_node("techage:ta3_booster", {
|
||||
"techage_filling_ta3.png^techage_appl_compressor.png^techage_frame_ta3.png",
|
||||
"techage_filling_ta3.png^techage_appl_compressor.png^[transformFX^techage_frame_ta3.png",
|
||||
},
|
||||
|
||||
|
||||
on_timer = function(pos, elapsed)
|
||||
local consumed = power.consume_power(pos, Cable, nil, PWR_NEEDED)
|
||||
if consumed == PWR_NEEDED then
|
||||
@ -94,7 +94,7 @@ minetest.register_node("techage:ta3_booster", {
|
||||
end,
|
||||
after_place_node = after_place_node,
|
||||
after_dig_node = after_dig_node,
|
||||
|
||||
|
||||
paramtype2 = "facedir",
|
||||
groups = {cracky=2, crumbly=2, choppy=2},
|
||||
on_rotate = screwdriver.disallow,
|
||||
@ -130,7 +130,7 @@ minetest.register_node("techage:ta3_booster_on", {
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
|
||||
on_timer = function(pos, elapsed)
|
||||
local consumed = power.consume_power(pos, Cable, nil, PWR_NEEDED)
|
||||
if consumed < PWR_NEEDED then
|
||||
@ -142,7 +142,7 @@ minetest.register_node("techage:ta3_booster_on", {
|
||||
end,
|
||||
after_place_node = after_place_node,
|
||||
after_dig_node = after_dig_node,
|
||||
|
||||
|
||||
paramtype2 = "facedir",
|
||||
groups = {not_in_creative_inventory = 1},
|
||||
diggable = false,
|
||||
@ -185,7 +185,7 @@ techage.register_node({"techage:ta3_booster", "techage:ta3_booster_on"}, {
|
||||
on_node_load = function(pos, node)
|
||||
if node.name == "techage:ta3_booster_on" then
|
||||
play_sound(pos)
|
||||
end
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
@ -197,4 +197,3 @@ minetest.register_craft({
|
||||
{"basic_materials:steel_bar", "default:wood", "basic_materials:steel_bar"},
|
||||
},
|
||||
})
|
||||
|
||||
|
@ -7,9 +7,9 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
Cooking routines for furnace
|
||||
|
||||
|
||||
]]--
|
||||
|
||||
-- for lazy programmers
|
||||
@ -40,7 +40,7 @@ local function all_ingredients_available(output, ingr)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Return a list with all outputs of the given list of ingredients
|
||||
local function get_recipes(ingr)
|
||||
@ -60,7 +60,7 @@ local function get_recipes(ingr)
|
||||
return KeyList
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
function techage.furnace.get_ingredients(pos)
|
||||
local inv = M(pos):get_inventory()
|
||||
local tbl = {}
|
||||
@ -116,7 +116,7 @@ local function process(inv, recipe, output)
|
||||
end
|
||||
end
|
||||
return techage.RUNNING
|
||||
end
|
||||
end
|
||||
|
||||
function techage.furnace.check_if_worth_to_wakeup(pos, nvm)
|
||||
local inv = M(pos):get_inventory()
|
||||
@ -141,7 +141,7 @@ function techage.furnace.check_if_worth_to_wakeup(pos, nvm)
|
||||
end
|
||||
end
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
function techage.furnace.smelting(pos, nvm, elapsed)
|
||||
local inv = M(pos):get_inventory()
|
||||
@ -154,11 +154,11 @@ function techage.furnace.smelting(pos, nvm, elapsed)
|
||||
if not recipe then
|
||||
return techage.FAULT, "recipe error"
|
||||
end
|
||||
|
||||
|
||||
elapsed = elapsed + (nvm.leftover or 0)
|
||||
while elapsed >= recipe.time do
|
||||
state = process(inv, recipe, nvm.output)
|
||||
if state ~= techage.RUNNING then
|
||||
if state ~= techage.RUNNING then
|
||||
return state
|
||||
end
|
||||
elapsed = elapsed - recipe.time
|
||||
|
@ -7,7 +7,7 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
TA3 Industrial Furnace Firebox
|
||||
|
||||
]]--
|
||||
@ -72,7 +72,7 @@ end
|
||||
|
||||
local function booster_cmnd(pos, cmnd)
|
||||
return techage.transfer(
|
||||
pos,
|
||||
pos,
|
||||
"L", -- outdir
|
||||
cmnd, -- topic
|
||||
nil, -- payload
|
||||
@ -102,7 +102,7 @@ minetest.register_node("techage:furnace_firebox", {
|
||||
on_punch = fuel.on_punch,
|
||||
on_receive_fields = fuel.on_receive_fields,
|
||||
on_rightclick = fuel.on_rightclick,
|
||||
|
||||
|
||||
on_construct = function(pos)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
techage.add_node(pos, "techage:furnace_firebox")
|
||||
@ -145,7 +145,7 @@ minetest.register_node("techage:furnace_firebox_on", {
|
||||
is_ground_content = false,
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
drop = "techage:furnace_firebox",
|
||||
|
||||
|
||||
on_timer = node_timer,
|
||||
can_dig = fuel.can_dig,
|
||||
on_receive_fields = fuel.on_receive_fields,
|
||||
@ -197,9 +197,9 @@ techage.register_node({"techage:furnace_firebox", "techage:furnace_firebox_on"},
|
||||
nvm.liquid.amount = (nvm.liquid.amount or 0) + count
|
||||
nvm.liquid.name = "techage:gasoline"
|
||||
inv:set_stack("fuel", 1, nil)
|
||||
end
|
||||
end
|
||||
end,
|
||||
})
|
||||
})
|
||||
|
||||
liquid.register_nodes({"techage:furnace_firebox", "techage:furnace_firebox_on"},
|
||||
Pipe, "tank", nil, fuel.get_liquid_table(fuel.BT_OIL, fuel.CAPACITY, start_firebox))
|
||||
Pipe, "tank", nil, fuel.get_liquid_table(fuel.BT_OIL, fuel.CAPACITY, start_firebox))
|
@ -7,7 +7,7 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
TA3 Industrial Furnace Top
|
||||
|
||||
]]--
|
||||
@ -54,12 +54,12 @@ local function formspec(self, pos, nvm)
|
||||
"tooltip[2,2;1,1;"..self:get_state_tooltip(nvm).."]"..
|
||||
|
||||
"list[context;dst;3,0;2,2;]"..
|
||||
|
||||
|
||||
"label[6,0;"..S("Outp")..": "..idx.."/"..num.."]"..
|
||||
"item_image_button[6.5,0.5;1,1;"..outp..";b1;]"..
|
||||
"button[6,1.5;1,1;priv;<<]"..
|
||||
"button[7,1.5;1,1;next;>>]"..
|
||||
|
||||
|
||||
"list[current_player;main;0,3.5;8,4;]" ..
|
||||
"listring[current_player;main]"..
|
||||
"listring[context;src]" ..
|
||||
@ -76,7 +76,7 @@ end
|
||||
|
||||
local function firebox_cmnd(pos, cmnd)
|
||||
return techage.transfer(
|
||||
{x=pos.x, y=pos.y-1, z=pos.z},
|
||||
{x=pos.x, y=pos.y-1, z=pos.z},
|
||||
nil, -- outdir
|
||||
cmnd, -- topic
|
||||
nil, -- payload
|
||||
@ -120,7 +120,7 @@ local function keep_running(pos, elapsed)
|
||||
if nvm.toggle then -- progress bar/arrow
|
||||
M(pos):set_string("formspec", formspec(crd.State, pos, nvm))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function allow_metadata_inventory_put(pos, listname, index, stack, player)
|
||||
if minetest.is_protected(pos, player:get_player_name()) then
|
||||
@ -259,7 +259,7 @@ local tubing = {
|
||||
end,
|
||||
}
|
||||
|
||||
local _, node_name_ta3, _ =
|
||||
local _, node_name_ta3, _ =
|
||||
techage.register_consumer("furnace", S("Furnace Top"), tiles, {
|
||||
drawtype = "normal",
|
||||
cycle_time = CYCLE_TIME,
|
||||
@ -298,4 +298,3 @@ minetest.register_craft({
|
||||
{"", "techage:vacuum_tube", ""},
|
||||
},
|
||||
})
|
||||
|
||||
|
@ -7,7 +7,7 @@
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
|
||||
TA4 Industrial Furnace Heater
|
||||
|
||||
]]--
|
||||
@ -52,7 +52,7 @@ minetest.register_node("techage:furnace_heater", {
|
||||
"techage_concrete.png^techage_frame_ta3.png",
|
||||
"techage_concrete.png^techage_appl_heater.png^techage_frame_ta3.png",
|
||||
},
|
||||
|
||||
|
||||
on_timer = function(pos, elapsed)
|
||||
local consumed = power.consume_power(pos, Cable, nil, PWR_NEEDED)
|
||||
if consumed == PWR_NEEDED then
|
||||
@ -62,7 +62,7 @@ minetest.register_node("techage:furnace_heater", {
|
||||
end,
|
||||
after_place_node = after_place_node,
|
||||
after_dig_node = after_dig_node,
|
||||
|
||||
|
||||
paramtype2 = "facedir",
|
||||
groups = {cracky=2, crumbly=2, choppy=2},
|
||||
on_rotate = screwdriver.disallow,
|
||||
@ -81,7 +81,7 @@ minetest.register_node("techage:furnace_heater_on", {
|
||||
"techage_concrete.png^techage_frame_ta3.png",
|
||||
"techage_concrete.png^techage_appl_heater_on.png^techage_frame_ta3.png",
|
||||
},
|
||||
|
||||
|
||||
on_timer = function(pos, elapsed)
|
||||
local consumed = power.consume_power(pos, Cable, nil, PWR_NEEDED)
|
||||
if consumed < PWR_NEEDED then
|
||||
@ -91,7 +91,7 @@ minetest.register_node("techage:furnace_heater_on", {
|
||||
end,
|
||||
after_place_node = after_place_node,
|
||||
after_dig_node = after_dig_node,
|
||||
|
||||
|
||||
light_source = 8,
|
||||
paramtype2 = "facedir",
|
||||
groups = {not_in_creative_inventory = 1},
|
||||
@ -124,7 +124,7 @@ techage.register_node({"techage:furnace_heater", "techage:furnace_heater_on"}, {
|
||||
return true
|
||||
end
|
||||
end
|
||||
})
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "techage:furnace_heater",
|
||||
@ -133,4 +133,4 @@ minetest.register_craft({
|
||||
{'techage:basalt_stone', 'basic_materials:heating_element', 'techage:basalt_stone'},
|
||||
{'techage:aluminum', 'techage:ta4_furnace_ceramic', 'techage:aluminum'},
|
||||
},
|
||||
})
|
||||
})
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user