New mod: multifurnace, in progress
This commit is contained in:
parent
613c80d7e2
commit
488f94a970
@ -1,5 +1,5 @@
|
|||||||
-- Fluidity for Minetest 5.0.0+
|
-- Fluidity for Minetest 5.0.0+
|
||||||
-- Copyright (c) 2018 Evert "Diamond" Prants <evert@lunasqu.ee>
|
-- Copyright (c) 2019 Evert "Diamond" Prants <evert@lunasqu.ee>
|
||||||
|
|
||||||
fluidity = rawget(_G, "fluidity") or {}
|
fluidity = rawget(_G, "fluidity") or {}
|
||||||
|
|
||||||
@ -13,6 +13,9 @@ end
|
|||||||
-- Molten metals
|
-- Molten metals
|
||||||
dofile(mpath.."/molten.lua")
|
dofile(mpath.."/molten.lua")
|
||||||
|
|
||||||
|
-- Meltable metals list
|
||||||
|
dofile(mpath.."/meltable.lua")
|
||||||
|
|
||||||
-- Florbs
|
-- Florbs
|
||||||
dofile(mpath.."/florbs.lua")
|
dofile(mpath.."/florbs.lua")
|
||||||
|
|
||||||
|
53
fluidity/meltable.lua
Normal file
53
fluidity/meltable.lua
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
fluidity.melts = {}
|
||||||
|
|
||||||
|
-- fluidity.molten_metals - metals
|
||||||
|
|
||||||
|
function fluidity.register_melt(item, metal, type)
|
||||||
|
if not fluidity.melts[metal] then
|
||||||
|
fluidity.melts[metal] = {}
|
||||||
|
end
|
||||||
|
|
||||||
|
if not fluidity.melts[metal][type] then
|
||||||
|
fluidity.melts[metal][type] = {}
|
||||||
|
end
|
||||||
|
|
||||||
|
table.insert(fluidity.melts[metal][type], item)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Autofind meltable
|
||||||
|
local autofind = {"ingot", "lump", "crystal", "ore", "block"}
|
||||||
|
local modfind = {"default", "technic", "moreores", "elepower_dynamics"}
|
||||||
|
|
||||||
|
function fluidity.auto_detect_metal_forms(metal, mod)
|
||||||
|
if mod then
|
||||||
|
local modfind = { [0] = mod }
|
||||||
|
end
|
||||||
|
|
||||||
|
for i, v in pairs(modfind) do
|
||||||
|
for j, k in pairs(autofind) do
|
||||||
|
local name = v .. ":" .. metal .. "_" .. k
|
||||||
|
|
||||||
|
if minetest.registered_items[name] then
|
||||||
|
fluidity.register_melt(name, metal, k)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Manually register default blocks, for now
|
||||||
|
fluidity.register_melt("default:mese", "mese", "block")
|
||||||
|
fluidity.register_melt("default:obsidian", "obsidian", "block")
|
||||||
|
fluidity.register_melt("default:goldblock", "gold", "block")
|
||||||
|
fluidity.register_melt("default:steelblock", "steel", "block")
|
||||||
|
fluidity.register_melt("default:copperblock", "copper", "block")
|
||||||
|
fluidity.register_melt("default:tinblock", "tin", "block")
|
||||||
|
|
||||||
|
-- Special snowflake
|
||||||
|
fluidity.register_melt("default:iron_lump", "steel", "lump")
|
||||||
|
|
||||||
|
-- Register melts after all mods have loaded
|
||||||
|
minetest.register_on_mods_loaded(function ()
|
||||||
|
for metal,_ in pairs(fluidity.molten_metals) do
|
||||||
|
fluidity.auto_detect_metal_forms(metal)
|
||||||
|
end
|
||||||
|
end)
|
@ -1,3 +1,4 @@
|
|||||||
name = fluidity
|
name = fluidity
|
||||||
description = Adds Molten versions of commonly occuring metals. Supports default, technic, elepower and moreores.
|
description = Adds Molten versions of commonly occuring metals. Supports default, technic, elepower and moreores.
|
||||||
depends = default,fluid_lib,bucket
|
depends = fluid_lib,bucket
|
||||||
|
optional_depends = default
|
||||||
|
@ -154,7 +154,7 @@ local function get_cast_for(item)
|
|||||||
local cast = nil
|
local cast = nil
|
||||||
local typename = nil
|
local typename = nil
|
||||||
|
|
||||||
for metal, types in pairs(metal_melter.melts) do
|
for metal, types in pairs(fluidity.melts) do
|
||||||
if typename ~= nil then break end
|
if typename ~= nil then break end
|
||||||
for t, items in pairs(types) do
|
for t, items in pairs(types) do
|
||||||
if in_table(items, item) then
|
if in_table(items, item) then
|
||||||
@ -179,7 +179,7 @@ local function find_castable(metal_name, cast_name)
|
|||||||
local cast = metal_caster.casts[cast_name]
|
local cast = metal_caster.casts[cast_name]
|
||||||
if not cast then return nil end
|
if not cast then return nil end
|
||||||
|
|
||||||
local types = metal_melter.melts[metal_name]
|
local types = fluidity.melts[metal_name]
|
||||||
|
|
||||||
if not types then return nil end
|
if not types then return nil end
|
||||||
|
|
||||||
@ -444,7 +444,7 @@ function metal_caster.register_cast(name, data)
|
|||||||
metal_caster.casts[name] = data
|
metal_caster.casts[name] = data
|
||||||
end
|
end
|
||||||
|
|
||||||
metal_melter.register_melt(castname, "gold", "cast")
|
fluidity.register_melt(castname, "gold", "cast")
|
||||||
end
|
end
|
||||||
|
|
||||||
local function on_receive_fields(pos, formname, fields, sender)
|
local function on_receive_fields(pos, formname, fields, sender)
|
||||||
|
@ -1,12 +1,9 @@
|
|||||||
-- Metal Melter for Minetest 0.5.0+
|
-- Metal Melter for Minetest 5.0.0+
|
||||||
-- Copyright (c) 2018 Evert "Diamond" Prants <evert@lunasqu.ee>
|
-- Copyright (c) 2019 Evert "Diamond" Prants <evert@lunasqu.ee>
|
||||||
|
|
||||||
local modpath = minetest.get_modpath("metal_melter")
|
local modpath = minetest.get_modpath("metal_melter")
|
||||||
metal_melter = {}
|
metal_melter = {}
|
||||||
|
|
||||||
-- Melting database
|
|
||||||
dofile(modpath.."/meltable.lua")
|
|
||||||
|
|
||||||
-- Crafting components
|
-- Crafting components
|
||||||
dofile(modpath.."/components.lua")
|
dofile(modpath.."/components.lua")
|
||||||
|
|
||||||
|
@ -1,53 +0,0 @@
|
|||||||
metal_melter.melts = {}
|
|
||||||
|
|
||||||
-- fluidity.molten_metals - metals
|
|
||||||
|
|
||||||
function metal_melter.register_melt(item, metal, type)
|
|
||||||
if not metal_melter.melts[metal] then
|
|
||||||
metal_melter.melts[metal] = {}
|
|
||||||
end
|
|
||||||
|
|
||||||
if not metal_melter.melts[metal][type] then
|
|
||||||
metal_melter.melts[metal][type] = {}
|
|
||||||
end
|
|
||||||
|
|
||||||
table.insert(metal_melter.melts[metal][type], item)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Autofind meltable
|
|
||||||
local autofind = {"ingot", "lump", "crystal", "ore", "block"}
|
|
||||||
local modfind = {"default", "technic", "moreores", "elepower_dynamics"}
|
|
||||||
|
|
||||||
function metal_melter.auto_detect_metal_forms(metal, mod)
|
|
||||||
if mod then
|
|
||||||
local modfind = { [0] = mod }
|
|
||||||
end
|
|
||||||
|
|
||||||
for i, v in pairs(modfind) do
|
|
||||||
for j, k in pairs(autofind) do
|
|
||||||
local name = v .. ":" .. metal .. "_" .. k
|
|
||||||
|
|
||||||
if minetest.registered_items[name] then
|
|
||||||
metal_melter.register_melt(name, metal, k)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Manually register default blocks, for now
|
|
||||||
metal_melter.register_melt("default:mese", "mese", "block")
|
|
||||||
metal_melter.register_melt("default:obsidian", "obsidian", "block")
|
|
||||||
metal_melter.register_melt("default:goldblock", "gold", "block")
|
|
||||||
metal_melter.register_melt("default:steelblock", "steel", "block")
|
|
||||||
metal_melter.register_melt("default:copperblock", "copper", "block")
|
|
||||||
metal_melter.register_melt("default:tinblock", "tin", "block")
|
|
||||||
|
|
||||||
-- Special snowflake
|
|
||||||
metal_melter.register_melt("default:iron_lump", "steel", "lump")
|
|
||||||
|
|
||||||
-- Register melts after all mods have loaded
|
|
||||||
minetest.register_on_mods_loaded(function ()
|
|
||||||
for metal,_ in pairs(fluidity.molten_metals) do
|
|
||||||
metal_melter.auto_detect_metal_forms(metal)
|
|
||||||
end
|
|
||||||
end)
|
|
@ -35,7 +35,7 @@ function metal_melter.get_metal_from_stack(stack)
|
|||||||
local metal = nil
|
local metal = nil
|
||||||
local metal_type = nil
|
local metal_type = nil
|
||||||
|
|
||||||
for mt, types in pairs(metal_melter.melts) do
|
for mt, types in pairs(fluidity.melts) do
|
||||||
if metal then break end
|
if metal then break end
|
||||||
for tp,items in pairs(types) do
|
for tp,items in pairs(types) do
|
||||||
if in_table(items, stack) then
|
if in_table(items, stack) then
|
||||||
|
2
modpack.conf
Normal file
2
modpack.conf
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
name = melterns
|
||||||
|
description = Melting metals and creating tools
|
0
multifurnace/furnace.lua
Normal file
0
multifurnace/furnace.lua
Normal file
11
multifurnace/init.lua
Normal file
11
multifurnace/init.lua
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
-- Multifurnace for Minetest 5.0.0+
|
||||||
|
-- Copyright (c) 2019 Evert "Diamond" Prants <evert@lunasqu.ee>
|
||||||
|
|
||||||
|
multifurnace = rawget(_G, "multifurnace") or {}
|
||||||
|
|
||||||
|
local modpath = minetest.get_modpath(minetest.get_current_modname())
|
||||||
|
multifurnace.modpath = modpath
|
||||||
|
|
||||||
|
dofile(modpath .. "/furnace.lua")
|
||||||
|
dofile(modpath .. "/nodes.lua")
|
||||||
|
dofile(modpath .. "/crafting.lua")
|
3
multifurnace/mod.conf
Normal file
3
multifurnace/mod.conf
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
name = multifurnace
|
||||||
|
description = An advanced multi-node furnace used for melting, casting and alloying
|
||||||
|
depends = fluidity,metal_melter
|
86
multifurnace/models/multifurnace_faucet_flow.obj
Normal file
86
multifurnace/models/multifurnace_faucet_flow.obj
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
# Blender v2.79 (sub 6) OBJ File: ''
|
||||||
|
# www.blender.org
|
||||||
|
o Cube.001
|
||||||
|
v -0.240000 -0.240000 -0.210000
|
||||||
|
v -0.240000 0.040000 -0.210000
|
||||||
|
v -0.240000 -0.240000 -1.000000
|
||||||
|
v -0.240000 0.040000 -1.000000
|
||||||
|
v 0.240000 -0.240000 -0.210000
|
||||||
|
v 0.240000 0.040000 -0.210000
|
||||||
|
v 0.240000 -0.240000 -1.000000
|
||||||
|
v 0.240000 0.040000 -1.000000
|
||||||
|
v -0.240000 -0.240000 0.090000
|
||||||
|
v -0.240000 0.040000 0.090000
|
||||||
|
v 0.240000 0.040000 0.090000
|
||||||
|
v 0.240000 -0.240000 0.090000
|
||||||
|
v -0.240000 -1.000000 -0.210000
|
||||||
|
v 0.240000 -1.000000 -0.210000
|
||||||
|
v -0.240000 -1.000000 0.090000
|
||||||
|
v 0.240000 -1.000000 0.090000
|
||||||
|
vt 0.000000 0.000000
|
||||||
|
vt 1.000000 0.000000
|
||||||
|
vt 1.000000 1.000000
|
||||||
|
vt 0.000000 1.000000
|
||||||
|
vt 0.000000 0.000000
|
||||||
|
vt 1.000000 0.000000
|
||||||
|
vt 1.000000 1.000000
|
||||||
|
vt 0.000000 1.000000
|
||||||
|
vt 0.000000 0.000000
|
||||||
|
vt 1.000000 0.000000
|
||||||
|
vt 1.000000 1.000000
|
||||||
|
vt 0.000000 1.000000
|
||||||
|
vt 0.000000 0.000000
|
||||||
|
vt 1.000000 1.000000
|
||||||
|
vt 0.000000 1.000000
|
||||||
|
vt 1.000000 0.000000
|
||||||
|
vt 1.000000 1.000000
|
||||||
|
vt 0.000000 1.000000
|
||||||
|
vt 0.000000 0.000000
|
||||||
|
vt 1.000000 1.000000
|
||||||
|
vt 0.000000 1.000000
|
||||||
|
vt 0.000000 0.000000
|
||||||
|
vt 1.000000 0.000000
|
||||||
|
vt 0.000000 1.000000
|
||||||
|
vt 0.000000 0.000000
|
||||||
|
vt 1.000000 0.000000
|
||||||
|
vt 1.000000 1.000000
|
||||||
|
vt 0.000000 1.000000
|
||||||
|
vt 0.000000 0.000000
|
||||||
|
vt 1.000000 0.000000
|
||||||
|
vt 1.000000 1.000000
|
||||||
|
vt 0.000000 1.000000
|
||||||
|
vt 1.000000 0.000000
|
||||||
|
vt 1.000000 1.000000
|
||||||
|
vt 0.000000 1.000000
|
||||||
|
vt 0.000000 0.000000
|
||||||
|
vt 1.000000 0.000000
|
||||||
|
vt 0.000000 1.000000
|
||||||
|
vt 1.000000 0.000000
|
||||||
|
vt 1.000000 1.000000
|
||||||
|
vt 0.000000 1.000000
|
||||||
|
vt 1.000000 0.000000
|
||||||
|
vt 1.000000 1.000000
|
||||||
|
vt 0.000000 1.000000
|
||||||
|
vt 0.000000 0.000000
|
||||||
|
vt 1.000000 1.000000
|
||||||
|
vn -1.0000 0.0000 0.0000
|
||||||
|
vn 0.0000 0.0000 -1.0000
|
||||||
|
vn 1.0000 0.0000 0.0000
|
||||||
|
vn 0.0000 1.0000 0.0000
|
||||||
|
vn 0.0000 -1.0000 0.0000
|
||||||
|
vn 0.0000 0.0000 1.0000
|
||||||
|
s off
|
||||||
|
f 1/1/1 2/2/1 4/3/1 3/4/1
|
||||||
|
f 3/5/2 4/6/2 8/7/2 7/8/2
|
||||||
|
f 7/9/3 8/10/3 6/11/3 5/12/3
|
||||||
|
f 6/13/4 2/2/4 10/14/4 11/15/4
|
||||||
|
f 3/5/5 7/16/5 5/17/5 1/18/5
|
||||||
|
f 8/19/4 4/6/4 2/20/4 6/21/4
|
||||||
|
f 12/22/6 11/23/6 10/14/6 9/24/6
|
||||||
|
f 5/25/3 6/26/3 11/27/3 12/28/3
|
||||||
|
f 2/29/1 1/30/1 9/31/1 10/32/1
|
||||||
|
f 5/25/3 12/33/3 16/34/3 14/35/3
|
||||||
|
f 13/36/5 14/37/5 16/34/5 15/38/5
|
||||||
|
f 12/22/6 9/39/6 15/40/6 16/41/6
|
||||||
|
f 1/1/2 5/42/2 14/43/2 13/44/2
|
||||||
|
f 9/45/1 1/30/1 13/46/1 15/38/1
|
224
multifurnace/nodes.lua
Normal file
224
multifurnace/nodes.lua
Normal file
@ -0,0 +1,224 @@
|
|||||||
|
local FAUCET_PER_SECOND = 122
|
||||||
|
|
||||||
|
-- Node funtions
|
||||||
|
|
||||||
|
local function update_timer (pos)
|
||||||
|
local t = minetest.get_node_timer(pos)
|
||||||
|
if not t:is_started() then
|
||||||
|
t:start(1.0)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function controller_timer (pos, elapsed)
|
||||||
|
local refresh = false
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
|
||||||
|
return refresh
|
||||||
|
end
|
||||||
|
|
||||||
|
local function faucet_flow (pos, meta)
|
||||||
|
local angled = minetest.get_node(pos)
|
||||||
|
local back = vector.add(pos, minetest.facedir_to_dir(angled.param2))
|
||||||
|
local backnode = minetest.get_node(back)
|
||||||
|
local backreg = minetest.registered_nodes[backnode.name]
|
||||||
|
|
||||||
|
if not backreg.node_io_can_take_liquid or not backreg.node_io_can_take_liquid(back, backnode, "front")
|
||||||
|
or not backreg.node_io_take_liquid then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
local stack
|
||||||
|
if backreg.node_io_get_liquid_stack then
|
||||||
|
stack = backreg.node_io_get_liquid_stack(back, backnode, "front", 1)
|
||||||
|
end
|
||||||
|
|
||||||
|
if not stack or stack:is_empty() then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
return stack:get_name(), stack:get_count(), back
|
||||||
|
end
|
||||||
|
|
||||||
|
local function faucet_activate (pos)
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
local source, amount, bhind = faucet_flow(pos, meta)
|
||||||
|
|
||||||
|
if meta:get_string("flowing") ~= "" then return false end
|
||||||
|
if not source or amount == 0 then return end
|
||||||
|
|
||||||
|
local e = minetest.add_entity(pos, "multifurnace:faucet_flow")
|
||||||
|
e:get_luaentity():set_faucet(pos)
|
||||||
|
e:get_luaentity():set_source(source)
|
||||||
|
|
||||||
|
meta:set_string("flowing", source)
|
||||||
|
meta:set_int("flowing_capacity", amount)
|
||||||
|
update_timer(pos)
|
||||||
|
end
|
||||||
|
|
||||||
|
local function faucet_timer (pos, elapsed)
|
||||||
|
local refresh = false
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
local liquid = meta:get_string("flowing")
|
||||||
|
local source, amount, bhind = faucet_flow(pos, meta)
|
||||||
|
|
||||||
|
while true do
|
||||||
|
if liquid == "" then break end
|
||||||
|
if source ~= liquid or amount <= 0 then
|
||||||
|
liquid = ""
|
||||||
|
break
|
||||||
|
end
|
||||||
|
|
||||||
|
local bhindnode = minetest.get_node(bhind)
|
||||||
|
local bhindreg = minetest.registered_nodes[bhindnode.name]
|
||||||
|
|
||||||
|
local target = vector.subtract(pos, {x=0,y=1,z=0})
|
||||||
|
local tnode = minetest.get_node(target)
|
||||||
|
local treg = minetest.registered_nodes[tnode.name]
|
||||||
|
if not treg.node_io_can_put_liquid or not treg.node_io_can_put_liquid(target, tnode, "top")
|
||||||
|
or not treg.node_io_room_for_liquid then
|
||||||
|
liquid = ""
|
||||||
|
break
|
||||||
|
end
|
||||||
|
|
||||||
|
local flowcap = amount
|
||||||
|
if flowcap > FAUCET_PER_SECOND then
|
||||||
|
flowcap = FAUCET_PER_SECOND
|
||||||
|
end
|
||||||
|
|
||||||
|
local room = treg.node_io_room_for_liquid(target, tnode, "top", liquid, flowcap)
|
||||||
|
if room > 0 and treg.node_io_put_liquid then
|
||||||
|
local over = treg.node_io_put_liquid(target, tnode, "top", nil, liquid, room)
|
||||||
|
|
||||||
|
if treg.on_timer then
|
||||||
|
update_timer(target)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
liquid = ""
|
||||||
|
break
|
||||||
|
end
|
||||||
|
|
||||||
|
bhindreg.node_io_take_liquid(bhind, bhindnode, "front", nil, source, room)
|
||||||
|
if bhindreg.on_timer then
|
||||||
|
update_timer(bhind)
|
||||||
|
end
|
||||||
|
|
||||||
|
refresh = true
|
||||||
|
break
|
||||||
|
end
|
||||||
|
|
||||||
|
meta:set_string("flowing", liquid)
|
||||||
|
|
||||||
|
return refresh
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Node definitions
|
||||||
|
|
||||||
|
minetest.override_item("metal_melter:heated_bricks", {
|
||||||
|
groups = {cracky = 3, multifurnace = 1},
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_node("multifurnace:controller", {
|
||||||
|
description = "Multifurnace Controller",
|
||||||
|
tiles = {
|
||||||
|
"metal_melter_heatbrick.png", "metal_melter_heatbrick.png", "metal_melter_heatbrick.png",
|
||||||
|
"metal_melter_heatbrick.png", "metal_melter_heatbrick.png", "metal_melter_heatbrick.png^multifurnace_controller_face.png",
|
||||||
|
},
|
||||||
|
groups = {cracky = 3, multifurnace = 1},
|
||||||
|
paramtype2 = "facedir",
|
||||||
|
is_ground_content = false,
|
||||||
|
on_timer = controller_timer,
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_node("multifurnace:port", {
|
||||||
|
description = "Multifurnace Port",
|
||||||
|
tiles = {
|
||||||
|
"metal_melter_heatbrick.png", "metal_melter_heatbrick.png", "metal_melter_heatbrick.png",
|
||||||
|
"metal_melter_heatbrick.png", "metal_melter_heatbrick.png^multifurnace_intake_back.png",
|
||||||
|
"metal_melter_heatbrick.png^multifurnace_intake_face.png",
|
||||||
|
},
|
||||||
|
groups = {cracky = 3, multifurnace = 1},
|
||||||
|
paramtype2 = "facedir",
|
||||||
|
is_ground_content = false,
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_node("multifurnace:faucet", {
|
||||||
|
description = "Multifurnace Faucet",
|
||||||
|
tiles = {"metal_melter_heatbrick.png"},
|
||||||
|
groups = {cracky = 3, multifurnace_accessory = 1},
|
||||||
|
drawtype = "nodebox",
|
||||||
|
node_box = {
|
||||||
|
type = "fixed",
|
||||||
|
fixed = {
|
||||||
|
{-0.1875, -0.1875, 0.1250, 0.1875, -0.1250, 0.5000},
|
||||||
|
{-0.1875, -0.1250, 0.1250, -0.1250, 0.06250, 0.5000},
|
||||||
|
{0.1250, -0.1250, 0.1250, 0.1875, 0.06250, 0.5000}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
paramtype = "light",
|
||||||
|
paramtype2 = "facedir",
|
||||||
|
is_ground_content = false,
|
||||||
|
on_rightclick = faucet_activate,
|
||||||
|
on_timer = faucet_timer,
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Entity definitions
|
||||||
|
|
||||||
|
minetest.register_entity("multifurnace:faucet_flow", {
|
||||||
|
initial_properties = {
|
||||||
|
physical = false,
|
||||||
|
collide_with_objects = false,
|
||||||
|
visual = "mesh",
|
||||||
|
mesh = "multifurnace_faucet_flow.obj",
|
||||||
|
visual_size = {x = 5, y = 5},
|
||||||
|
textures = {},
|
||||||
|
backface_culling = true,
|
||||||
|
pointable = false,
|
||||||
|
static_save = false,
|
||||||
|
},
|
||||||
|
faucet = nil,
|
||||||
|
source = "",
|
||||||
|
timer = 0,
|
||||||
|
set_faucet = function (self, faucet)
|
||||||
|
self.faucet = faucet
|
||||||
|
|
||||||
|
-- Set correct orientation in regards to the faucet
|
||||||
|
local node = minetest.get_node(faucet)
|
||||||
|
local orient = minetest.facedir_to_dir(node.param2)
|
||||||
|
orient = vector.multiply(orient, -1)
|
||||||
|
local angle = minetest.dir_to_yaw(orient)
|
||||||
|
self.object:set_yaw(angle)
|
||||||
|
end,
|
||||||
|
set_source = function (self, source)
|
||||||
|
self.source = source
|
||||||
|
|
||||||
|
-- Set appropriate fluid texture
|
||||||
|
local tiles = minetest.registered_nodes[source]
|
||||||
|
if not tiles.liquid_alternative_flowing then return end
|
||||||
|
local flowing = minetest.registered_nodes[tiles.liquid_alternative_flowing]
|
||||||
|
if not flowing.tiles or type(flowing.tiles[1]) ~= "string" then return end
|
||||||
|
|
||||||
|
self.object:set_properties({textures = {
|
||||||
|
flowing.tiles[1]
|
||||||
|
}})
|
||||||
|
end,
|
||||||
|
on_step = function (self, dt)
|
||||||
|
self.timer = self.timer + 1
|
||||||
|
|
||||||
|
-- Remove self when the faucet is destroyed or is no longer marked as flowing
|
||||||
|
if self.timer >= 10 then
|
||||||
|
local node = minetest.get_node(self.faucet)
|
||||||
|
if not node or node.name ~= "multifurnace:faucet" then
|
||||||
|
self.object:remove()
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local meta = minetest.get_meta(self.faucet)
|
||||||
|
if meta:get_string("flowing") ~= self.source then
|
||||||
|
self.object:remove()
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
self.timer = 0
|
||||||
|
end
|
||||||
|
end
|
||||||
|
})
|
BIN
multifurnace/textures/multifurnace_controller_face.png
Normal file
BIN
multifurnace/textures/multifurnace_controller_face.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 251 B |
BIN
multifurnace/textures/multifurnace_intake_back.png
Normal file
BIN
multifurnace/textures/multifurnace_intake_back.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 288 B |
BIN
multifurnace/textures/multifurnace_intake_face.png
Normal file
BIN
multifurnace/textures/multifurnace_intake_face.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 291 B |
@ -1,5 +1,5 @@
|
|||||||
-- Tinkering for Minetest 0.5.0+
|
-- Tinkering for Minetest 5.0.0+
|
||||||
-- Copyright (c) 2018 Evert "Diamond" Prants <evert@lunasqu.ee>
|
-- Copyright (c) 2019 Evert "Diamond" Prants <evert@lunasqu.ee>
|
||||||
|
|
||||||
-- This mod is currently stuck behind https://github.com/minetest/minetest/issues/5686
|
-- This mod is currently stuck behind https://github.com/minetest/minetest/issues/5686
|
||||||
-- Once this gets implemented, the full abilities of this mod will be available.
|
-- Once this gets implemented, the full abilities of this mod will be available.
|
||||||
|
@ -422,6 +422,6 @@ function tinkering.register_component(name, data)
|
|||||||
})
|
})
|
||||||
|
|
||||||
-- Make all components meltable
|
-- Make all components meltable
|
||||||
metal_melter.register_melt(mod..":"..component, m, name)
|
fluidity.register_melt(mod..":"..component, m, name)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user