ta5 hyperloop tank addded

This commit is contained in:
Joachim Stolberg 2021-12-31 17:25:37 +01:00
parent 8f037a4ec0
commit e2834a20ff
12 changed files with 283 additions and 185 deletions

View File

@ -17,14 +17,10 @@ local M = minetest.get_meta
local S = techage.S local S = techage.S
local TA4_INV_SIZE = 50 local TA4_INV_SIZE = 50
local EX_POINTS = 20
local MP = minetest.get_modpath(minetest.get_current_modname()) local MP = minetest.get_modpath(minetest.get_current_modname())
local mConf = dofile(MP.."/basis/conf_inv.lua") local mConf = dofile(MP.."/basis/conf_inv.lua")
local hyperloop = techage.hyperloop
local remote_pos = techage.hyperloop.remote_pos
local function allow_metadata_inventory_put(pos, listname, index, stack, player) local function allow_metadata_inventory_put(pos, listname, index, stack, player)
if minetest.is_protected(pos, player:get_player_name()) then if minetest.is_protected(pos, player:get_player_name()) then
return 0 return 0
@ -200,17 +196,6 @@ local function formspec4(pos)
"listring[current_player;main]" "listring[current_player;main]"
end end
local function formspec5(pos)
return "size[10,9]"..
default.gui_bg..
default.gui_bg_img..
default.gui_slots..
"list[context;main;0,0;10,5;]"..
"list[current_player;main;1,5.3;8,4;]"..
"listring[context;main]"..
"listring[current_player;main]"
end
local function formspec4_pre(pos) local function formspec4_pre(pos)
return "size[10,9]".. return "size[10,9]"..
"tabheader[0,0;tab;"..S("Inventory,Pre-Assignment,Config")..";2;;true]".. "tabheader[0,0;tab;"..S("Inventory,Pre-Assignment,Config")..";2;;true]"..
@ -243,10 +228,6 @@ local function ta4_allow_metadata_inventory_put(pos, listname, index, stack, pla
return 0 return 0
end end
if techage.hyperloop.is_client(pos) then
return 0
end
if listname == "main" then if listname == "main" then
return stack:get_count() return stack:get_count()
else else
@ -260,10 +241,6 @@ local function ta4_allow_metadata_inventory_take(pos, listname, index, stack, pl
return 0 return 0
end end
if techage.hyperloop.is_client(pos) then
return 0
end
if listname == "main" then if listname == "main" then
return stack:get_count() return stack:get_count()
else else
@ -277,10 +254,6 @@ local function ta4_allow_metadata_inventory_move(pos, from_list, from_index, to_
return 0 return 0
end end
if techage.hyperloop.is_client(pos) then
return 0
end
if from_list == "main" then if from_list == "main" then
return count return count
else else
@ -314,7 +287,6 @@ minetest.register_node("techage:chest_ta4", {
meta:set_string("owner", placer:get_player_name()) meta:set_string("owner", placer:get_player_name())
meta:set_string("formspec", formspec4(pos)) meta:set_string("formspec", formspec4(pos))
meta:set_string("infotext", S("TA4 Protected Chest").." "..number) meta:set_string("infotext", S("TA4 Protected Chest").." "..number)
hyperloop.after_place_node(pos, placer, "chest")
end, end,
on_receive_fields = function(pos, formname, fields, player) on_receive_fields = function(pos, formname, fields, player)
@ -353,22 +325,8 @@ minetest.register_node("techage:chest_ta4", {
return techage.logic.set_numbers(pos, numbers, player_name, S("TA4 Protected Chest")) return techage.logic.set_numbers(pos, numbers, player_name, S("TA4 Protected Chest"))
end, end,
on_rightclick = function(pos, node, clicker)
if hyperloop.is_client(pos) then
M(pos):set_string("formspec", formspec5(pos))
elseif hyperloop.is_server(pos) then
M(pos):set_string("formspec", formspec5(pos))
end
end,
can_dig = can_dig, can_dig = can_dig,
after_dig_node = function(pos, oldnode, oldmetadata, digger) after_dig_node = after_dig_node,
techage.remove_node(pos, oldnode, oldmetadata)
hyperloop.after_dig_node(pos, oldnode, oldmetadata, digger)
techage.del_mem(pos)
end,
ta5_formspec = {menu=hyperloop.WRENCH_MENU, ex_points=EX_POINTS},
ta_after_formspec = hyperloop.after_formspec,
allow_metadata_inventory_put = ta4_allow_metadata_inventory_put, allow_metadata_inventory_put = ta4_allow_metadata_inventory_put,
allow_metadata_inventory_take = ta4_allow_metadata_inventory_take, allow_metadata_inventory_take = ta4_allow_metadata_inventory_take,
allow_metadata_inventory_move = ta4_allow_metadata_inventory_move, allow_metadata_inventory_move = ta4_allow_metadata_inventory_move,
@ -382,12 +340,10 @@ minetest.register_node("techage:chest_ta4", {
techage.register_node({"techage:chest_ta4"}, { techage.register_node({"techage:chest_ta4"}, {
on_inv_request = function(pos, in_dir, access_type) on_inv_request = function(pos, in_dir, access_type)
pos = remote_pos(pos)
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
return meta:get_inventory(), "main" return meta:get_inventory(), "main"
end, end,
on_pull_item = function(pos, in_dir, num, item_name) on_pull_item = function(pos, in_dir, num, item_name)
pos = remote_pos(pos)
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
local inv = meta:get_inventory() local inv = meta:get_inventory()
local mem = techage.get_mem(pos) local mem = techage.get_mem(pos)
@ -415,7 +371,6 @@ techage.register_node({"techage:chest_ta4"}, {
end end
end, end,
on_push_item = function(pos, in_dir, item, idx) on_push_item = function(pos, in_dir, item, idx)
pos = remote_pos(pos)
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
local inv = meta:get_inventory() local inv = meta:get_inventory()
local mem = techage.get_mem(pos) local mem = techage.get_mem(pos)
@ -432,7 +387,6 @@ techage.register_node({"techage:chest_ta4"}, {
end end
end, end,
on_unpull_item = function(pos, in_dir, item) on_unpull_item = function(pos, in_dir, item)
pos = remote_pos(pos)
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
local inv = meta:get_inventory() local inv = meta:get_inventory()
local mem = techage.get_mem(pos) local mem = techage.get_mem(pos)

View File

@ -8,7 +8,7 @@
AGPL v3 AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
TA5 Hyperloop Chest/Tank TA5 Hyperloop Chest
]]-- ]]--
@ -16,7 +16,6 @@
local S2P = minetest.string_to_pos local S2P = minetest.string_to_pos
local P2S = minetest.pos_to_string local P2S = minetest.pos_to_string
local M = minetest.get_meta local M = minetest.get_meta
local N = techage.get_node_lvm
local S = techage.S local S = techage.S
local TA4_INV_SIZE = 32 local TA4_INV_SIZE = 32
@ -27,20 +26,6 @@ local remote_pos = techage.hyperloop.remote_pos
local shared_inv = techage.shared_inv local shared_inv = techage.shared_inv
local menu = techage.menu local menu = techage.menu
local function can_dig(pos, player)
if minetest.is_protected(pos, player:get_player_name()) then
return false
end
shared_inv.before_inv_access(pos, "main")
local inv = minetest.get_meta(pos):get_inventory()
return inv:is_empty("main")
end
local function after_dig_node(pos, oldnode, oldmetadata, digger)
techage.remove_node(pos, oldnode, oldmetadata)
end
local function formspec(pos) local function formspec(pos)
local ndef = minetest.registered_nodes["techage:ta5_hl_chest"] local ndef = minetest.registered_nodes["techage:ta5_hl_chest"]
local status = M(pos):get_string("conn_status") local status = M(pos):get_string("conn_status")
@ -118,16 +103,24 @@ minetest.register_node("techage:ta5_hl_chest", {
if techage.get_expoints(player) >= EX_POINTS then if techage.get_expoints(player) >= EX_POINTS then
if techage.menu.eval_input(pos, hyperloop.SUBMENU, fields) then if techage.menu.eval_input(pos, hyperloop.SUBMENU, fields) then
hyperloop.after_formspec(pos, fields) hyperloop.after_formspec(pos, fields)
shared_inv.on_rightclick(pos, player, "main")
M(pos):set_string("formspec", formspec(pos)) M(pos):set_string("formspec", formspec(pos))
end end
end end
end, end,
on_timer = shared_inv.node_timer, on_timer = shared_inv.node_timer,
on_rightclick = function(pos, node, clicker) on_rightclick = function(pos, node, clicker)
shared_inv.on_rightclick(pos, node, clicker) shared_inv.on_rightclick(pos, clicker, "main")
M(pos):set_string("formspec", formspec(pos)) M(pos):set_string("formspec", formspec(pos))
end, end,
can_dig = can_dig, can_dig = function(pos, player)
if minetest.is_protected(pos, player:get_player_name()) then
return false
end
shared_inv.before_inv_access(pos, "main")
local inv = minetest.get_meta(pos):get_inventory()
return inv:is_empty("main")
end,
after_dig_node = function(pos, oldnode, oldmetadata, digger) after_dig_node = function(pos, oldnode, oldmetadata, digger)
techage.remove_node(pos, oldnode, oldmetadata) techage.remove_node(pos, oldnode, oldmetadata)
hyperloop.after_dig_node(pos, oldnode, oldmetadata, digger) hyperloop.after_dig_node(pos, oldnode, oldmetadata, digger)
@ -155,67 +148,26 @@ techage.register_node({"techage:ta5_hl_chest"}, {
pos = remote_pos(pos) pos = remote_pos(pos)
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
local inv = meta:get_inventory() 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})
if taken:get_count() > 0 then
return taken
end
end
else -- no item given
if mem.chest_configured then
return mConf.take_item(pos, inv, "main", num, mem.filter["unconfigured"])
else
return techage.get_items(pos, inv, "main", num) return techage.get_items(pos, inv, "main", num)
end
end
end, end,
on_push_item = function(pos, in_dir, item, idx) on_push_item = function(pos, in_dir, stack)
if techage.hyperloop.is_paired(pos) then
pos = remote_pos(pos) pos = remote_pos(pos)
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
local inv = meta:get_inventory() local inv = meta:get_inventory()
local mem = techage.get_mem(pos) return techage.put_items(inv, "main", stack)
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"]
return mConf.put_items(pos, inv, "main", item, stacks, idx)
else
return techage.put_items(inv, "main", item, idx)
end end
return false
end, end,
on_unpull_item = function(pos, in_dir, item) on_unpull_item = function(pos, in_dir, stack)
pos = remote_pos(pos) pos = remote_pos(pos)
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
local inv = meta:get_inventory() local inv = meta:get_inventory()
local mem = techage.get_mem(pos) return techage.put_items(inv, "main", stack)
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"]
return mConf.put_items(pos, inv, "main", item, stacks)
else
return techage.put_items(inv, "main", item)
end
end, end,
on_recv_message = function(pos, src, topic, payload) on_recv_message = function(pos, src, topic, payload)
if topic == "state" then if topic == "state" then
pos = remote_pos(pos)
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
local inv = meta:get_inventory() local inv = meta:get_inventory()
return techage.get_inv_state(inv, "main") return techage.get_inv_state(inv, "main")
@ -225,8 +177,9 @@ techage.register_node({"techage:ta5_hl_chest"}, {
end, end,
}) })
minetest.register_craft({ minetest.register_craft({
type = "shapeless", type = "shapeless",
output = "techage:ta5_hl_chest", output = "techage:ta5_hl_chest",
recipe = {"techage:chest_ta4", "techage:aichip"} recipe = {"techage:chest_ta4", "techage:ta5_aichip"}
}) })

View File

@ -3,7 +3,7 @@
TechAge TechAge
======= =======
Copyright (C) 2019-2021 Joachim Stolberg Copyright (C) 2019-2022 Joachim Stolberg
AGPL v3 AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
@ -148,7 +148,6 @@ function techage.hyperloop.is_client(pos)
local nvm = techage.get_nvm(pos) local nvm = techage.get_nvm(pos)
if Stations:get(nvm.rmt_pos) then if Stations:get(nvm.rmt_pos) then
if M(pos):get_string("status") == "client" then if M(pos):get_string("status") == "client" then
print("is_client2", true)
return true return true
end end
end end

View File

@ -30,8 +30,8 @@ local function help(x, y)
"tooltip["..x..","..y..";0.5,0.5;"..tooltip..";#0C3D32;#FFFFFF]" "tooltip["..x..","..y..";0.5,0.5;"..tooltip..";#0C3D32;#FFFFFF]"
end end
function techage.liquid.formspec(pos, nvm) function techage.liquid.formspec(pos, nvm, title)
local title = S("Liquid Tank") title = title or S("Liquid Tank")
local itemname = "techage:liquid" local itemname = "techage:liquid"
if nvm.liquid and nvm.liquid.amount and nvm.liquid.amount > 0 and nvm.liquid.name then if nvm.liquid and nvm.liquid.amount and nvm.liquid.amount > 0 and nvm.liquid.name then
itemname = nvm.liquid.name.." "..nvm.liquid.amount itemname = nvm.liquid.name.." "..nvm.liquid.amount
@ -41,19 +41,19 @@ function techage.liquid.formspec(pos, nvm)
local meta = M(pos) local meta = M(pos)
local public = dump((meta:get_int("public") or 0) == 1) local public = dump((meta:get_int("public") or 0) == 1)
local keep_assignment = dump((meta:get_int("keep_assignment") or 0) == 1) local keep_assignment = dump((meta:get_int("keep_assignment") or 0) == 1)
return "size[5,3.5]".. return "size[8,3.5]"..
"box[0,-0.1;4.8,0.5;#c6e8ff]".. "box[0,-0.1;7.8,0.5;#c6e8ff]"..
"label[1.5,-0.1;"..minetest.colorize("#000000", title).."]".. "label[0.2,-0.1;"..minetest.colorize("#000000", title).."]"..
help(4.4, -0.1).. help(7.4, -0.1)..
techage.item_image(2, 1, itemname).. techage.item_image(3.5, 1, itemname)..
"checkbox[0.1,2.5;public;"..S("Allow public access to the tank")..";"..public.."]".. "checkbox[0.1,2.5;public;"..S("Allow public access to the tank")..";"..public.."]"..
"checkbox[0.1,3;keep_assignment;"..S("keep assignment")..";"..keep_assignment.."]" "checkbox[0.1,3;keep_assignment;"..S("keep assignment")..";"..keep_assignment.."]"
else else
return "size[4,2]".. return "size[8,2]"..
"box[0,-0.1;3.8,0.5;#c6e8ff]".. "box[0,-0.1;7.8,0.5;#c6e8ff]"..
"label[1,-0.1;"..minetest.colorize("#000000", title).."]".. "label[0.2,-0.1;"..minetest.colorize("#000000", title).."]"..
help(3.4, -0.1).. help(7.4, -0.1)..
techage.item_image(1.5, 1, itemname) techage.item_image(3.5, 1, itemname)
end end
end end

View File

@ -3,7 +3,7 @@
TechAge TechAge
======= =======
Copyright (C) 2019-2021 Joachim Stolberg Copyright (C) 2019-2022 Joachim Stolberg
AGPL v3 AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
@ -40,7 +40,6 @@ end
-- Synchronize the client inventory with the server one -- Synchronize the client inventory with the server one
function techage.shared_inv.before_inv_access(pos, listname) function techage.shared_inv.before_inv_access(pos, listname)
print("before_inv_access", listname)
if hyperloop.is_client(pos) then if hyperloop.is_client(pos) then
local rmt_pos = remote_pos(pos) local rmt_pos = remote_pos(pos)
copy_inventory_list(rmt_pos, pos, listname) copy_inventory_list(rmt_pos, pos, listname)
@ -51,7 +50,6 @@ end
-- Synchronize the client inventory with the server one -- Synchronize the client inventory with the server one
function techage.shared_inv.after_inv_access(pos, listname) function techage.shared_inv.after_inv_access(pos, listname)
print("after_inv_access", listname)
if hyperloop.is_client(pos) then if hyperloop.is_client(pos) then
local rmt_pos = remote_pos(pos) local rmt_pos = remote_pos(pos)
copy_inventory_list(pos, rmt_pos, listname) copy_inventory_list(pos, rmt_pos, listname)
@ -60,10 +58,12 @@ function techage.shared_inv.after_inv_access(pos, listname)
return false return false
end end
function techage.shared_inv.on_rightclick(pos, node, clicker) function techage.shared_inv.on_rightclick(pos, clicker, listname)
if hyperloop.is_client(pos) then if hyperloop.is_client(pos) then
copy_inventory_list(remote_pos(pos), pos, "main") local rmt_pos = remote_pos(pos)
copy_inventory_list(rmt_pos, pos, listname)
techage.set_activeformspec(pos, clicker) techage.set_activeformspec(pos, clicker)
minetest.get_node_timer(pos):start(2)
end end
end end

106
basis/shared_tank.lua Normal file
View File

@ -0,0 +1,106 @@
--[[
TechAge
=======
Copyright (C) 2019-2022 Joachim Stolberg
AGPL v3
See LICENSE.txt for more information
Library for shared inventories
]]--
-- for lazy programmers
local M = minetest.get_meta
local NDEF = function(pos) return minetest.registered_nodes[techage.get_node_lvm(pos).name] or {} end
techage.shared_tank = {}
local liquid = networks.liquid
local hyperloop = techage.hyperloop
local remote_pos = techage.hyperloop.remote_pos
local menu = techage.menu
local function formspec(pos)
local ndef = NDEF(pos)
local status = M(pos):get_string("conn_status")
if hyperloop.is_client(pos) or hyperloop.is_server(pos) then
local title = ndef.description .. " " .. status
local nvm = techage.get_nvm(remote_pos(pos))
return techage.liquid.formspec(pos, nvm, title)
else
return menu.generate_formspec(pos, ndef, hyperloop.SUBMENU)
end
end
function techage.shared_tank.node_timer(pos)
print("node_timer", minetest.pos_to_string(pos))
if techage.is_activeformspec(pos) then
M(pos):set_string("formspec", formspec(pos))
return true
end
return false
end
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
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
end
pos = remote_pos(pos)
return techage.liquid.is_empty(pos)
end
function techage.shared_tank.peek_liquid(pos, indir)
pos = remote_pos(pos)
local nvm = techage.get_nvm(pos)
return liquid.srv_peek(nvm)
end
function techage.shared_tank.take_liquid(pos, indir, name, amount)
pos = remote_pos(pos)
local nvm = techage.get_nvm(pos)
amount, name = liquid.srv_take(nvm, name, amount)
if techage.is_activeformspec(pos) then
M(pos):set_string("formspec", formspec(pos))
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
local ndef = minetest.registered_craftitems[name] or {}
if not ndef.groups or ndef.groups.powder ~= 1 then
local nvm = techage.get_nvm(pos)
local ndef = NDEF(pos)
local leftover = liquid.srv_put(nvm, name, amount, ndef.liquid.capa)
if techage.is_activeformspec(pos) then
M(pos):set_string("formspec", formspec(pos))
end
return leftover
end
return amount
end
function techage.shared_tank.untake_liquid(pos, indir, name, amount)
pos = remote_pos(pos)
local nvm = techage.get_nvm(pos)
local ndef = NDEF(pos)
local leftover = liquid.srv_put(nvm, name, amount, ndef.liquid.capa)
if techage.is_activeformspec(pos) then
M(pos):set_string("formspec", formspec(pos))
end
return leftover
end
techage.shared_tank.formspec = formspec

View File

@ -114,7 +114,6 @@ local function generate_formspec_substring(pos, meta, form_def, player_name)
local choices = elem.on_dropdown(pos) local choices = elem.on_dropdown(pos)
local l = choices:split(",") local l = choices:split(",")
local idx = index(l, val) or 1 local idx = index(l, val) or 1
print("choices", dump(choices), idx, val)
tbl[#tbl+1] = "dropdown[4.72," .. (offs) .. ";5.5,1.4;" .. elem.name .. ";" .. choices .. ";" .. idx .. "]" tbl[#tbl+1] = "dropdown[4.72," .. (offs) .. ";5.5,1.4;" .. elem.name .. ";" .. choices .. ";" .. idx .. "]"
else else
local val = elem.default local val = elem.default

View File

@ -102,6 +102,7 @@ dofile(MP.."/basis/hyperloop.lua")
dofile(MP.."/basis/oggfiles.lua") dofile(MP.."/basis/oggfiles.lua")
dofile(MP.."/basis/submenu.lua") dofile(MP.."/basis/submenu.lua")
dofile(MP.."/basis/shared_inv.lua") dofile(MP.."/basis/shared_inv.lua")
dofile(MP.."/basis/shared_tank.lua")
-- Main doc -- Main doc
dofile(MP.."/doc/manual_DE.lua") dofile(MP.."/doc/manual_DE.lua")
@ -201,6 +202,7 @@ dofile(MP.."/liquids/silo.lua")
dofile(MP.."/liquids/pump.lua") dofile(MP.."/liquids/pump.lua")
dofile(MP.."/liquids/waterpump.lua") dofile(MP.."/liquids/waterpump.lua")
dofile(MP.."/liquids/waterinlet.lua") dofile(MP.."/liquids/waterinlet.lua")
dofile(MP.."/liquids/ta5_tank.lua")
-- Coal power station -- Coal power station
dofile(MP.."/coal_power_station/firebox.lua") dofile(MP.."/coal_power_station/firebox.lua")

105
liquids/ta5_tank.lua Normal file
View File

@ -0,0 +1,105 @@
--[[
TechAge
=======
Copyright (C) 2019-2022 Joachim Stolberg
AGPL v3
See LICENSE.txt for more information
TA5 Hyperloop Tank
]]--
-- for lazy programmers
local S2P = minetest.string_to_pos
local P2S = minetest.pos_to_string
local M = minetest.get_meta
local S = techage.S
local Pipe = techage.LiquidPipe
local liquid = networks.liquid
local hyperloop = techage.hyperloop
local remote_pos = techage.hyperloop.remote_pos
local shared_tank = techage.shared_tank
local menu = techage.menu
local CAPACITY = 1000
local EX_POINTS = 20
minetest.register_node("techage:ta5_hl_tank", {
description = S("TA5 Hyperloop Tank"),
tiles = {
-- up, down, right, left, back, front
"techage_filling_ta4.png^techage_frame_ta5_top.png",
"techage_filling_ta4.png^techage_frame_ta5.png",
"techage_filling_ta4.png^techage_frame_ta5.png^techage_appl_tank.png",
"techage_filling_ta4.png^techage_frame_ta5.png^techage_appl_tank.png",
"techage_filling_ta4.png^techage_frame_ta5.png^techage_appl_tank.png",
"techage_filling_ta4.png^techage_frame_ta5.png^techage_appl_tank.png",
},
after_place_node = function(pos, placer)
local meta = M(pos)
local nvm = techage.get_nvm(pos)
nvm.liquid = {}
local number = techage.add_node(pos, "techage:ta5_hl_tank")
meta:set_string("node_number", number)
meta:set_string("owner", placer:get_player_name())
meta:set_string("formspec", shared_tank.formspec(pos))
meta:set_string("infotext", S("TA5 Hyperloop Tank").." "..number)
Pipe:after_place_node(pos)
hyperloop.after_place_node(pos, placer, "tank")
end,
on_receive_fields = function(pos, formname, fields, player)
if minetest.is_protected(pos, player:get_player_name()) then
return
end
if techage.get_expoints(player) >= EX_POINTS then
if techage.menu.eval_input(pos, hyperloop.SUBMENU, fields) then
hyperloop.after_formspec(pos, fields)
shared_tank.on_rightclick(pos, nil, player)
M(pos):set_string("formspec", shared_tank.formspec(pos))
end
end
end,
on_timer = shared_tank.node_timer,
on_rightclick = shared_tank.on_rightclick,
on_punch = function(pos, node, puncher)
return techage.liquid.on_punch(remote_pos(pos), node, puncher)
end,
can_dig = shared_tank.can_dig,
after_dig_node = function(pos, oldnode, oldmetadata, digger)
Pipe:after_dig_node(pos)
hyperloop.after_dig_node(pos, oldnode, oldmetadata, digger)
techage.remove_node(pos, oldnode, oldmetadata)
techage.del_mem(pos)
end,
paramtype2 = "facedir",
on_rotate = screwdriver.disallow,
groups = {cracky=2},
is_ground_content = false,
sounds = default.node_sound_metal_defaults(),
})
liquid.register_nodes({"techage:ta5_hl_tank"},
Pipe, "tank", nil, {
capa = CAPACITY,
peek = shared_tank.peek_liquid,
put = shared_tank.put_liquid,
take = shared_tank.take_liquid,
untake = shared_tank.untake_liquid,
}
)
techage.register_node({"techage:ta5_hl_tank"}, techage.liquid.recv_message)
minetest.register_craft({
output = "techage:ta5_hl_tank",
recipe = {
{"", "techage:ta5_aichip", ""},
{"", "techage:ta5_hl_tank", ""},
{"", "", ""},
},
})

View File

@ -21,25 +21,19 @@ local S = techage.S
local Pipe = techage.LiquidPipe local Pipe = techage.LiquidPipe
local liquid = networks.liquid local liquid = networks.liquid
local hyperloop = techage.hyperloop
local remote_pos = techage.hyperloop.remote_pos
local CAPACITY = 1000 local CAPACITY = 1000
local EX_POINTS = 20
local function on_rightclick(pos, node, clicker) local function on_rightclick(pos, node, clicker)
local rmt_pos = remote_pos(pos) local nvm = techage.get_nvm(pos)
local nvm = techage.get_nvm(rmt_pos)
techage.set_activeformspec(pos, clicker) techage.set_activeformspec(pos, clicker)
M(pos):set_string("formspec", techage.liquid.formspec(rmt_pos, nvm)) M(pos):set_string("formspec", techage.liquid.formspec(pos, nvm))
minetest.get_node_timer(pos):start(2) minetest.get_node_timer(pos):start(2)
end end
local function node_timer(pos, elapsed) local function node_timer(pos, elapsed)
local rmt_pos = remote_pos(pos)
if techage.is_activeformspec(pos) then if techage.is_activeformspec(pos) then
local nvm = techage.get_nvm(rmt_pos) local nvm = techage.get_nvm(pos)
M(pos):set_string("formspec", techage.liquid.formspec(rmt_pos, nvm)) M(pos):set_string("formspec", techage.liquid.formspec(pos, nvm))
return true return true
end end
return false return false
@ -220,7 +214,6 @@ minetest.register_node("techage:ta4_tank", {
meta:set_string("formspec", techage.liquid.formspec(pos, nvm)) meta:set_string("formspec", techage.liquid.formspec(pos, nvm))
meta:set_string("infotext", S("TA4 Tank").." "..number) meta:set_string("infotext", S("TA4 Tank").." "..number)
Pipe:after_place_node(pos) Pipe:after_place_node(pos)
hyperloop.after_place_node(pos, placer, "tank")
end, end,
on_receive_fields = function(pos, formname, fields, player) on_receive_fields = function(pos, formname, fields, player)
if minetest.is_protected(pos, player:get_player_name()) then if minetest.is_protected(pos, player:get_player_name()) then
@ -234,17 +227,12 @@ minetest.register_node("techage:ta4_tank", {
end end
end, end,
on_timer = node_timer, on_timer = node_timer,
on_punch = function(pos, node, puncher) on_punch = techage.liquid.on_punch,
return techage.liquid.on_punch(remote_pos(pos), node, puncher)
end,
after_dig_node = function(pos, oldnode, oldmetadata, digger) after_dig_node = function(pos, oldnode, oldmetadata, digger)
Pipe:after_dig_node(pos) Pipe:after_dig_node(pos)
hyperloop.after_dig_node(pos, oldnode, oldmetadata, digger)
techage.remove_node(pos, oldnode, oldmetadata) techage.remove_node(pos, oldnode, oldmetadata)
end, end,
on_rightclick = on_rightclick, on_rightclick = on_rightclick,
ta5_formspec = {menu=hyperloop.WRENCH_MENU, ex_points=EX_POINTS},
ta_after_formspec = hyperloop.after_formspec,
can_dig = can_dig, can_dig = can_dig,
paramtype2 = "facedir", paramtype2 = "facedir",
on_rotate = screwdriver.disallow, on_rotate = screwdriver.disallow,
@ -256,18 +244,10 @@ minetest.register_node("techage:ta4_tank", {
liquid.register_nodes({"techage:ta4_tank"}, liquid.register_nodes({"techage:ta4_tank"},
Pipe, "tank", nil, { Pipe, "tank", nil, {
capa = CAPACITY * 2, capa = CAPACITY * 2,
peek = function(pos, indir) peek = peek_liquid,
return peek_liquid(remote_pos(pos), indir) put = put_liquid,
end, take = take_liquid,
put = function(pos, indir, name, amount) untake = untake_liquid,
return put_liquid(remote_pos(pos), indir, name, amount)
end,
take = function(pos, indir, name, amount)
return take_liquid(remote_pos(pos), indir, name, amount)
end,
untake = function(pos, indir, name, amount)
return untake_liquid(remote_pos(pos), indir, name, amount)
end,
} }
) )

View File

@ -30,27 +30,27 @@ Die Nutzung des TA5 Flug Controllers benötigt 40 Erfahrungspunkte.
[ta5_flycontroller|image] [ta5_flycontroller|image]
### TA5 Hyperloop Transport Kiste ### TA5 Hyperloop Kiste / TA5 Hyperloop Chest
Die TA5 Hyperloop Transport Kiste erlaubt den Transport von Gegenständen über ein Hyperloop Netzwerk. Die TA5 Hyperloop Kiste erlaubt den Transport von Gegenständen über ein Hyperloop Netzwerk.
Eine normale TA4 Kiste muss man dazu auf eine Hyperloop Junction stellen. Die Kiste bekommt damit ein zusätzliches Schraubenschlüssel-Menü mit dem man das Pairing von zwei Kisten durchführen kann. Dinge, die in der Kiste sind, werden zur Gegenstelle teleportiert. Die Kiste kann auch mit einem Schieber gefüllt/geleert werden. Die TA5 Hyperloop Kiste muss man dazu auf eine Hyperloop Junction stellen. Die Kiste besitzt ein spezielles Menü, mit dem man das Pairing von zwei Kisten durchführen kann. Dinge, die in der Kiste sind, werden zur Gegenstelle teleportiert. Die Kiste kann auch mit einem Schieber gefüllt/geleert werden.
Für das Pairing musst du zuerst auf der einen Seite einen Namen für die Kiste eingeben, dann kannst du bei der anderen Kiste diesen Namen auswählen und so die beiden Blöcke verbinden. Für das Pairing musst du zuerst auf der einen Seite einen Namen für die Kiste eingeben, dann kannst du bei der anderen Kiste diesen Namen auswählen und so die beiden Blöcke verbinden.
Die Nutzung der TA5 Hyperloop Transport Kiste benötigt 20 Erfahrungspunkte. Die Nutzung der TA5 Hyperloop Kiste benötigt 20 Erfahrungspunkte.
[ta4_chest|image] [ta4_chest|image]
### TA5 Hyperloop Transport Tank ### TA5 Hyperloop Tank / TA5 Hyperloop Tank
Der TA5 Hyperloop Transport Tank erlaubt den Transport von Flüssigkeiten über ein Hyperloop Netzwerk. Der TA5 Hyperloop Tank erlaubt den Transport von Flüssigkeiten über ein Hyperloop Netzwerk.
Ein TA4 Tank muss man dazu auf eine Hyperloop Junction stellen. Der Tank bekommt damit ein zusätzliches Schraubenschlüssel-Menü mit dem man das Pairing von zwei Tanks durchführen kann. Flüssigkeiten, die in dem Tank sind, werden zur Gegenstelle teleportiert. Der Tank kann auch mit einer Pumpe gefüllt/geleert werden. Den TA5 Hyperloop Tank muss man dazu auf eine Hyperloop Junction stellen. Der Tank besitzt ein spezielles Menü, mit dem man das Pairing von zwei Tanks durchführen kann. Flüssigkeiten, die in dem Tank sind, werden zur Gegenstelle teleportiert. Der Tank kann auch mit einer Pumpe gefüllt/geleert werden.
Für das Pairing musst du zuerst auf der einen Seite einen Namen für den Tank eingeben, dann kannst du bei dem anderen Tank diesen Namen auswählen und so die beiden Blöcke verbinden. Für das Pairing musst du zuerst auf der einen Seite einen Namen für den Tank eingeben, dann kannst du bei dem anderen Tank diesen Namen auswählen und so die beiden Blöcke verbinden.
Die Nutzung des TA5 Hyperloop Transport Tanks benötigt 20 Erfahrungspunkte. Die Nutzung des TA5 Hyperloop Tanks benötigt 20 Erfahrungspunkte.
[ta4_tank|image] [ta4_tank|image]

View File

@ -30,27 +30,27 @@ The use of the TA5 Flight Controller requires 40 experience points.
[ta5_flycontroller|image] [ta5_flycontroller|image]
### TA5 Hyperloop Transport Chest ### TA5 Hyperloop Chest
The TA5 Hyperloop Transport Chest allows objects to be transported over a Hyperloop network. The TA5 Hyperloop Chest allows objects to be transported over a Hyperloop network.
A normal TA4 chest has to be placed on a Hyperloop Junction. The chest has an additional wrench menu with which you can pair two chests. Things that are in the chest are teleported to the remote station. The box can also be filled/emptied with a pusher. The TA5 Hyperloop Chest has to be placed on a Hyperloop Junction. The chest has a special menu, with which you can pair two chests. Things that are in the chest are teleported to the remote station. The chest can also be filled/emptied with a pusher.
For pairing you first have to enter a name for the chest on one side, then you can select this name for the other chest and thus connect the two blocks. For pairing you first have to enter a name for the chest on one side, then you can select this name for the other chest and thus connect the two blocks.
The use of the TA5 Hyperloop Transport Chest requires 20 experience points. The use of the TA5 Hyperloop Chest requires 20 experience points.
[ta4_chest|image] [ta4_chest|image]
### TA5 Hyperloop Transport Tank ### TA5 Hyperloop Tank
The TA5 Hyperloop Transport Tank allows liquids to be transported over a Hyperloop network. The TA5 Hyperloop Tank allows liquids to be transported over a Hyperloop network.
A TA4 Tank has to be placed on a Hyperloop Junction. This gives the tank an additional wrench menu that can be used to pair two tanks. Liquids in the tank will be teleported to the remote station. The tank can also be filled/emptied with a pump. The TA5 Hyperloop Tank has to be placed on a Hyperloop Junction.The tank has a special menu, with which you can pair two tanks. Liquids in the tank will be teleported to the remote station. The tank can also be filled/emptied with a pump.
For pairing you first have to enter a name for the tank on one side, then you can select this name for the other tank and thus connect the two blocks. For pairing you first have to enter a name for the tank on one side, then you can select this name for the other tank and thus connect the two blocks.
The use of the TA5 Hyperloop Transport Tank requires 20 experience points. The use of the TA5 Hyperloop Tank requires 20 experience points.
[ta4_tank|image] [ta4_tank|image]