Update technic modpack to Git commit 43acec2...

https://github.com/minetest-mods/technic/tree/43acec2
master
Jordan Irwin 2021-04-11 18:44:57 -07:00
parent e3f5d56ee9
commit 46a54f7385
878 changed files with 3908 additions and 1783 deletions

View File

@ -142,7 +142,7 @@ The game includes the mods from the default [minetest_game](https://github.com/m
* [mesecons][] ([LGPL / CC BY-SA][lic.mesecons]) -- version [1.2 (d4e05f3 Git)][ver.mesecons] *2018-07-23*
* [minetest_game][] ([LGPL][lic.lgpl2.1] / [CC BY-SA][lic.ccbysa3.0]) -- version: [5.4.1][ver.minetest_game] *2021-04-10*
* [moremesecons][] ([MPL][lic.mpl2.0]) -- version [8a56370 Git][ver.moremesecons] *2018-02-27*
* [technic][] ([LGPL][lic.lgpl2.0]) -- version: [6664714 Git][ver.technic] *2018-06-28* ([patched][patch.technic])
* [technic][] ([LGPL][lic.lgpl2.0]) -- version: [43acec2 Git][ver.technic] *2021-02-09*
---
@ -476,7 +476,7 @@ The game includes the mods from the default [minetest_game](https://github.com/m
[ver.snowdrift]: https://github.com/paramat/snowdrift/tree/0a0787a
[ver.spawneggs]: https://github.com/thefamilygrog66/spawneggs/tree/4650370
[ver.spectator_mode]: https://github.com/minetest-mods/spectator_mode/tree/7d68bec
[ver.technic]: https://github.com/minetest-mods/technic/tree/6664714
[ver.technic]: https://github.com/minetest-mods/technic/tree/43acec2
[ver.technic_armor]: https://github.com/stujones11/technic_armor/tree/694642f
[ver.throwing]: https://github.com/PilzAdam/throwing/tree/90bcf43
[ver.tnt]: https://github.com/PilzAdam/TNT/tree/d6a0b7d

View File

@ -1,23 +1,54 @@
Technic
=======
# Technic
[![Build status](https://github.com/minetest-mods/technic/workflows/Check%20&%20Release/badge.svg)](https://github.com/minetest-mods/technic/actions)
[![License](https://img.shields.io/badge/license-LGPLv2.0%2B-purple.svg)](https://www.gnu.org/licenses/old-licenses/lgpl-2.0.en.html)
This Minetest modpack adds machinery and automation procedure content to your
world. A few notable features:
* Electric circuits
* Automated material processing (ores, wood, ...)
* Extended chest functionalities
## Dependencies
* Minetest 5.0.0 or newer
* [Minetest Game](https://github.com/minetest/minetest_game/)
* [mesecons](https://github.com/minetest-mods/mesecons) -> signalling events
* [pipeworks](https://gitlab.com/VanessaE/pipeworks/) -> automation of item transport
* [moreores](https://github.com/minetest-mods/moreores/) -> additional ores
* [basic_materials](https://gitlab.com/VanessaE/basic_materials) -> basic craft items
* Supports [moretrees](https://gitlab.com/VanessaE/moretrees) -> rubber trees
* Consult `depends.txt` or `mod.conf` of each mod for further dependency information.
## FAQ
The modpack is explained in the [Manual](manual.md) included in this repository.
1. My technic circuit doesn't work. No power is distributed.
* Make sure you have a switching station connected.
2. My wires do not connect to the machines.
* Each machine type requires its own cable type. If you do not have a
matching circuit, consider using a "Supply Converter" for simplicity.
The API documentation can be found here: [Technic API](technic/doc/api.md)
## License
Unless otherwise stated, all components of this modpack are licensed under the
LGPLv2 or later. See also the individual mod folders for their
secondary/alternate licenses, if any.
### Credits
Contributors in alphabetical order:
Credits for contributing to the project (in alphabetical order):
* kpoppel
* Nekogloop
* Nore/Ekdohibs
* ShadowNinja
* VanessaE
* And many others...
FAQ
---
1. My technic circuit doesn't work. No power is distrubuted.
* A: Make sure you have a switching station connected.
License
-------
Unless otherwise stated, all components of this modpack are licensed under the
LGPL, V2 or later. See also the individual mod folders for their
secondary/alternate licenses, if any.

View File

@ -1,3 +1,4 @@
default
basic_materials
intllib?
moreblocks?

View File

@ -1,11 +1,11 @@
--Minetest 0.4.7 mod: concrete
--Minetest 0.4.7 mod: concrete
--(c) 2013 by RealBadAngel <mk@realbadangel.pl>
local technic = rawget(_G, "technic") or {}
technic.concrete_posts = {}
-- Boilerplate to support localized strings if intllib mod is installed.
local S = rawget(_G, "intllib") and (intllib.make_gettext_pair() or intllib.Getter()) or function(s) return s end
local S = rawget(_G, "intllib") and intllib.Getter() or function(s) return s end
for i = 0, 31 do
minetest.register_alias("technic:concrete_post"..i,
@ -23,24 +23,6 @@ else
steel_ingot = "default:steel_ingot"
end
minetest.register_craft({
output = 'technic:rebar 6',
recipe = {
{'','', steel_ingot},
{'',steel_ingot,''},
{steel_ingot, '', ''},
}
})
minetest.register_craft({
output = 'technic:concrete 5',
recipe = {
{'default:stone','technic:rebar','default:stone'},
{'technic:rebar','default:stone','technic:rebar'},
{'default:stone','technic:rebar','default:stone'},
}
})
minetest.register_craft({
output = 'technic:concrete_post_platform 6',
recipe = {
@ -51,9 +33,9 @@ minetest.register_craft({
minetest.register_craft({
output = 'technic:concrete_post 12',
recipe = {
{'default:stone','technic:rebar','default:stone'},
{'default:stone','technic:rebar','default:stone'},
{'default:stone','technic:rebar','default:stone'},
{'default:stone','basic_materials:steel_bar','default:stone'},
{'default:stone','basic_materials:steel_bar','default:stone'},
{'default:stone','basic_materials:steel_bar','default:stone'},
}
})
@ -66,18 +48,6 @@ minetest.register_craft({
}
})
minetest.register_craftitem(":technic:rebar", {
description = S("Rebar"),
inventory_image = "technic_rebar.png",
})
minetest.register_node(":technic:concrete", {
description = S("Concrete Block"),
tiles = {"technic_concrete_block.png",},
groups = {cracky=1, level=2, concrete=1},
sounds = default.node_sound_stone_defaults(),
})
minetest.register_node(":technic:blast_resistant_concrete", {
description = S("Blast-resistant Concrete Block"),
tiles = {"technic_blast_resistant_concrete_block.png",},
@ -91,6 +61,20 @@ minetest.register_node(":technic:blast_resistant_concrete", {
end,
})
if minetest.get_modpath("moreblocks") then
stairsplus:register_all("technic","blast_resistant_concrete","technic:blast_resistant_concrete",{
description = "Blast-resistant Concrete",
tiles = {"technic_blast_resistant_concrete_block.png",},
groups = {cracky=1, level=3, concrete=1},
sounds = default.node_sound_stone_defaults(),
on_blast = function(pos, intensity)
if intensity > 1 then
minetest.remove_node(pos)
minetest.add_item(pos, "technic:blast_resistant_concrete")
end
end,
})
end
local box_platform = {-0.5, 0.3, -0.5, 0.5, 0.5, 0.5}
local box_post = {-0.15, -0.5, -0.15, 0.15, 0.5, 0.15}
@ -101,19 +85,19 @@ local box_right = {0, -0.3, -0.1, 0.5, 0.3, 0.1}
minetest.register_node(":technic:concrete_post_platform", {
description = S("Concrete Post Platform"),
tiles = {"technic_concrete_block.png",},
tiles = {"basic_materials_concrete_block.png",},
groups={cracky=1, level=2},
sounds = default.node_sound_stone_defaults(),
paramtype = "light",
drawtype = "nodebox",
drawtype = "nodebox",
node_box = {
type = "fixed",
fixed = {box_platform}
},
on_place = function (itemstack, placer, pointed_thing)
local node = minetest.get_node(pointed_thing.under)
if node.name ~= "technic:concrete_post" then
return minetest.item_place_node(itemstack, placer, pointed_thing)
if node.name ~= "technic:concrete_post" then
return minetest.item_place_node(itemstack, placer, pointed_thing)
end
minetest.set_node(pointed_thing.under, {name="technic:concrete_post_with_platform"})
itemstack:take_item()
@ -133,7 +117,7 @@ for platform = 0, 1 do
minetest.register_node(":technic:concrete_post"..(platform == 1 and "_with_platform" or ""), {
description = S("Concrete Post"),
tiles = {"technic_concrete_block.png"},
tiles = {"basic_materials_concrete_block.png"},
groups = {cracky=1, level=2, concrete_post=1, not_in_creative_inventory=platform},
sounds = default.node_sound_stone_defaults(),
drop = (platform == 1 and "technic:concrete_post_platform" or

View File

@ -0,0 +1,7 @@
# technic_concrete translation template
Rebar = Armature
Concrete Block = Bloc de béton
Blast-resistant Concrete Block = Bloc de béton anti explosions
Concrete Post Platform = Plateforme en béton
Concrete Post = Pilier en béton

View File

@ -0,0 +1,10 @@
# Polish Translation for technic_concrete
# Polskie tłumaczenie technic_concrete
# by mat9117
Rebar = Pręt zbrojeniowy
Concrete Block = Blok betonu
Blast-resistant Concrete Block = Przeciwwybuchowy blok betonu
Concrete Post Platform = Betonowa platforma
Concrete Post = Betonowy słup

View File

@ -0,0 +1,10 @@
# Braziliam portuguese translation for technic_concrete
# Tradução portuguesa brasileira para technic_concrete
# By Sires
Rebar = Vergalhão
Concrete Block = Bloco de Concreto
Blast-resistant Concrete Block = Bloco de Concreto resistente-a-explosões
Concrete Post Platform = Plataforma para Poste de Concreto
Concrete Post = Poste de Concreto

View File

@ -0,0 +1,3 @@
name = concrete
depends = default
optional_depends = basic_materials, intllib, moreblocks

Binary file not shown.

Before

Width:  |  Height:  |  Size: 311 B

After

Width:  |  Height:  |  Size: 214 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 500 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 813 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 813 B

After

Width:  |  Height:  |  Size: 583 B

View File

@ -1,6 +1,9 @@
default
technic_worldgen
basic_materials
concrete
unifieddyes?
intllib?
moreblocks?
steel?
streetsmod?

View File

@ -1,7 +1,7 @@
-- Minetest 0.4.6 mod: extranodes
-- namespace: technic
-- Boilerplate to support localized strings if intllib mod is installed.
local S = rawget(_G, "intllib") and (intllib.make_gettext_pair() or intllib.Getter()) or function(s) return s end
local S = rawget(_G, "intllib") and intllib.Getter() or function(s) return s end
if minetest.get_modpath("moreblocks") then
@ -30,7 +30,7 @@ if minetest.get_modpath("moreblocks") then
stairsplus:register_all("technic", "concrete", "technic:concrete", {
description=S("Concrete"),
groups={cracky=3, not_in_creative_inventory=1},
tiles={"technic_concrete_block.png"},
tiles={"basic_materials_concrete_block.png"},
})
stairsplus:register_all("technic", "zinc_block", "technic:zinc_block", {
@ -57,12 +57,6 @@ if minetest.get_modpath("moreblocks") then
tiles={"technic_stainless_steel_block.png"},
})
stairsplus:register_all("technic", "brass_block", "technic:brass_block", {
description=S("Brass Block"),
groups={cracky=1, not_in_creative_inventory=1},
tiles={"technic_brass_block.png"},
})
function register_technic_stairs_alias(modname, origname, newmod, newname)
minetest.register_alias(modname .. ":slab_" .. origname, newmod..":slab_" .. newname)
minetest.register_alias(modname .. ":slab_" .. origname .. "_inverted", newmod..":slab_" .. newname .. "_inverted")
@ -93,7 +87,7 @@ if minetest.get_modpath("moreblocks") then
minetest.register_alias(modname .. ":panel_" .. origname .. "_vertical", newmod..":panel_" .. newname .. "_vertical")
minetest.register_alias(modname .. ":micro_" .. origname .. "_bottom", newmod..":micro_" .. newname .. "_bottom")
minetest.register_alias(modname .. ":micro_" .. origname .. "_top", newmod..":micro_" .. newname .. "_top")
end
end
register_technic_stairs_alias("stairsplus", "concrete", "technic", "concrete")
register_technic_stairs_alias("stairsplus", "marble", "technic", "marble")
@ -103,7 +97,7 @@ if minetest.get_modpath("moreblocks") then
end
local iclip_def = {
description = "Insulator/cable clip",
description = S("Insulator/cable clip"),
drawtype = "mesh",
mesh = "technic_insulator_clip.obj",
tiles = {"technic_insulator_clip.png"},
@ -113,7 +107,7 @@ local iclip_def = {
}
local iclipfence_def = {
description = "Insulator/cable clip",
description = S("Insulator/cable clip"),
tiles = {"technic_insulator_clip.png"},
is_ground_content = false,
paramtype = "light",
@ -146,23 +140,58 @@ local iclipfence_def = {
sounds = default.node_sound_stone_defaults(),
}
local sclip_tex = {
"technic_insulator_clip.png",
{ name = "strut.png^technic_steel_strut_overlay.png", color = "white" },
{ name = "strut.png", color = "white" }
}
local streetsmod = minetest.get_modpath("streets") or minetest.get_modpath ("steelsupport")
-- cheapie's fork breaks it into several individual mods, with differernt names for the same content.
if streetsmod then
sclip_tex = {
"technic_insulator_clip.png",
{ name = "streets_support.png^technic_steel_strut_overlay.png", color = "white" },
{ name = "streets_support.png", color = "white" }
}
end
local sclip_def = {
description = S("Steel strut with insulator/cable clip"),
drawtype = "mesh",
mesh = "technic_steel_strut_with_insulator_clip.obj",
tiles = sclip_tex,
paramtype = "light",
paramtype2 = "wallmounted",
is_ground_content = false,
sounds = default.node_sound_stone_defaults(),
groups = { choppy=1, cracky=1 },
backface_culling = false
}
if minetest.get_modpath("unifieddyes") then
iclip_def.paramtype2 = "colorwallmounted"
iclip_def.palette = "unifieddyes_palette_colorwallmounted.png"
iclip_def.after_place_node = function(pos, placer, itemstack, pointed_thing)
unifieddyes.fix_rotation(pos, placer, itemstack, pointed_thing)
unifieddyes.recolor_on_place(pos, placer, itemstack, pointed_thing)
end
iclip_def.after_dig_node = unifieddyes.after_dig_node
iclip_def.groups = {choppy=1, snappy=1, oddly_breakable_by_hand=1, ud_param2_colorable = 1}
iclip_def.on_dig = unifieddyes.on_dig
iclipfence_def.paramtype2 = "color"
iclipfence_def.palette = "unifieddyes_palette_extended.png"
iclipfence_def.on_construct = unifieddyes.on_construct
iclipfence_def.after_place_node = unifieddyes.recolor_on_place
iclipfence_def.after_dig_node = unifieddyes.after_dig_node
iclipfence_def.groups = {fence=1, choppy=1, snappy=1, oddly_breakable_by_hand=1, ud_param2_colorable = 1}
iclipfence_def.place_param2 = 171 -- medium amber, low saturation, closest color to default:wood
iclipfence_def.on_dig = unifieddyes.on_dig
sclip_def.paramtype2 = "colorwallmounted"
sclip_def.palette = "unifieddyes_palette_colorwallmounted.png"
sclip_def.after_place_node = function(pos, placer, itemstack, pointed_thing)
unifieddyes.fix_rotation(pos, placer, itemstack, pointed_thing)
end
sclip_def.on_dig = unifieddyes.on_dig
sclip_def.groups = {choppy=1, cracky=1, ud_param2_colorable = 1}
end
minetest.register_node(":technic:insulator_clip", iclip_def)
@ -185,3 +214,96 @@ minetest.register_craft({
{ "technic:raw_latex", "default:fence_wood", "technic:raw_latex"},
}
})
local steelmod = minetest.get_modpath("steel")
if streetsmod or steelmod then
minetest.register_node(":technic:steel_strut_with_insulator_clip", sclip_def)
if steelmod then
minetest.register_craft({
output = "technic:steel_strut_with_insulator_clip",
recipe = {
{"technic:insulator_clip_fencepost"},
{"steel:strut_mount"}
}
})
minetest.register_craft({
output = "technic:steel_strut_with_insulator_clip",
recipe = {
{"technic:insulator_clip_fencepost", "" },
{"steel:strut", "default:steel_ingot" },
}
})
elseif streetsmod then
minetest.register_craft({
output = "technic:steel_strut_with_insulator_clip",
recipe = {
{"technic:insulator_clip_fencepost", "" },
{"streets:steel_support", "default:steel_ingot" },
}
})
end
end
if minetest.get_modpath("unifieddyes") then
unifieddyes.register_color_craft({
output = "technic:insulator_clip_fencepost",
palette = "extended",
type = "shapeless",
neutral_node = "technic:insulator_clip_fencepost",
recipe = {
"NEUTRAL_NODE",
"MAIN_DYE"
}
})
unifieddyes.register_color_craft({
output = "technic:insulator_clip",
palette = "wallmounted",
type = "shapeless",
neutral_node = "technic:insulator_clip",
recipe = {
"NEUTRAL_NODE",
"MAIN_DYE"
}
})
unifieddyes.register_color_craft({
output = "technic:steel_strut_with_insulator_clip",
palette = "wallmounted",
type = "shapeless",
neutral_node = "",
recipe = {
"technic:steel_strut_with_insulator_clip",
"MAIN_DYE"
}
})
if steelmod then
unifieddyes.register_color_craft({
output = "technic:steel_strut_with_insulator_clip",
palette = "wallmounted",
neutral_node = "",
recipe = {
{ "technic:insulator_clip_fencepost", "MAIN_DYE" },
{ "steel:strut_mount", "" },
}
})
end
if streetsmod then
unifieddyes.register_color_craft({
output = "technic:steel_strut_with_insulator_clip",
palette = "wallmounted",
neutral_node = "technic:steel_strut_with_insulator_clip",
recipe = {
{ "technic:insulator_clip_fencepost", "MAIN_DYE" },
{ "streets:steel_support", "default:steel_ingot" },
}
})
end
end

View File

@ -0,0 +1,7 @@
# technic_extranodes translation template
Marble = Marbre
Marble Bricks = Briques en marbre
Granite = Granite
Concrete = Béton

View File

@ -0,0 +1,9 @@
# Polish Translation for technic_extranodes
# Polskie tłumaczenie technic_extranodes
# by mat9117
Marble = Marmur
Marble Bricks = Marmurowe cegły
Granite = Granit
Concrete = Beton

View File

@ -0,0 +1,9 @@
# Braziliam portuguese translation for technic_extranodes
# Tradução portuguesa brasileira para technic_extranodes
# By Sires
Marble = Mármore
Marble Bricks = Tijolos de Mármore
Granite = Granito
Concrete = Concreto

View File

@ -0,0 +1,3 @@
name = extranodes
depends = default, technic_worldgen, basic_materials, concrete
optional_depends = unifieddyes, intllib, moreblocks, steel, streetsmod

View File

@ -0,0 +1,246 @@
# Blender v2.79 (sub 0) OBJ File: 'technic steel strut with insulator clip.blend'
# www.blender.org
o Cube_Cube_Material.001
v -0.375000 0.500532 -0.250000
v -0.249997 0.562500 -0.249997
v 0.249997 0.562500 -0.249997
v 0.375000 0.500532 -0.250000
v 0.249997 0.562500 0.249997
v 0.375000 0.500532 0.250000
v -0.249997 0.562500 0.249997
v -0.375000 0.500532 0.250000
v 0.187500 0.562500 -0.187500
v -0.168668 0.718750 0.168668
v 0.168668 0.718750 0.168668
v 0.187500 0.750000 0.187500
v -0.187500 0.750000 0.187500
v 0.168668 0.718750 -0.168668
v 0.187500 0.750000 -0.187500
v -0.168668 0.718750 -0.168668
v -0.187500 0.750000 -0.187500
v 0.250000 0.750000 -0.250000
v 0.250000 0.750000 0.250000
v -0.250000 0.750000 -0.250000
v -0.250000 1.250000 -0.250000
v 0.250000 1.250000 -0.250000
v 0.250000 1.250000 0.250000
v -0.250000 1.250000 0.250000
v -0.250000 0.750000 0.250000
v -0.168668 0.593750 0.168668
v 0.168668 0.593750 0.168668
v 0.187500 0.625000 0.187500
v -0.187500 0.625000 0.187500
v 0.168668 0.593750 -0.168668
v 0.187500 0.625000 -0.187500
v -0.168668 0.593750 -0.168668
v -0.187500 0.625000 -0.187500
v -0.168668 0.656250 0.168668
v 0.168668 0.656250 0.168668
v 0.187500 0.687500 0.187500
v -0.187500 0.687500 0.187500
v 0.168668 0.656250 -0.168668
v 0.187500 0.687500 -0.187500
v -0.168668 0.656250 -0.168668
v -0.187500 0.687500 -0.187500
v 0.187500 0.562500 0.187500
v -0.187500 0.562500 0.187500
v -0.187500 0.562500 -0.187500
v -0.499468 -0.499468 -0.499468
v -0.499468 0.500000 -0.499468
v 0.499468 -0.499468 -0.499468
v -0.499468 -0.499468 0.499468
v -0.499468 0.500000 0.499468
v 0.499468 -0.499468 0.499468
v 0.499468 0.500000 -0.499468
v 0.499468 0.500000 0.499468
vt 1.000000 0.875000
vt 0.937500 0.750000
vt 0.937500 0.250000
vt 1.000000 0.125000
vt 0.250000 0.875000
vt 0.250000 0.750000
vt 0.750000 0.750000
vt 0.750000 0.875000
vt 0.000000 0.125000
vt 0.062500 0.250000
vt 0.062500 0.750000
vt 0.000000 0.875000
vt 0.750000 0.250000
vt 0.687500 0.687500
vt 0.687500 0.312500
vt 0.312500 0.687500
vt 0.250000 0.250000
vt 0.312500 0.312500
vt 0.331332 1.218750
vt 0.668668 1.218750
vt 0.687500 1.250000
vt 0.312500 1.250000
vt 0.531250 0.666667
vt 0.531250 0.333333
vt 0.500000 0.312500
vt 0.500000 0.687500
vt 0.531250 0.333333
vt 0.531250 0.666667
vt 0.500000 0.687500
vt 0.500000 0.312500
vt 0.331332 1.218750
vt 0.668668 1.218750
vt 0.687500 1.250000
vt 0.312500 1.250000
vt 0.687500 0.312500
vt 0.750000 0.250000
vt 0.750000 0.750000
vt 0.687500 0.687500
vt 0.500000 0.250000
vt 0.500000 0.750000
vt 0.000000 0.750000
vt 0.000000 0.250000
vt 0.500000 0.250000
vt 0.000000 0.250000
vt 0.000000 0.750000
vt 0.500000 0.750000
vt 0.500000 0.250000
vt 0.500000 0.750000
vt 0.000000 0.750000
vt 0.000000 0.250000
vt 0.000000 0.250000
vt 0.500000 0.750000
vt 0.250000 0.250000
vt 0.750000 0.250000
vt 0.750000 0.750000
vt 0.250000 0.750000
vt 0.250000 0.750000
vt 0.312500 0.687500
vt 0.250000 0.250000
vt 0.312500 0.312500
vt 0.250000 0.125000
vt 0.750000 0.125000
vt 0.331332 1.093750
vt 0.668668 1.093750
vt 0.687500 1.125000
vt 0.312500 1.125000
vt 0.656250 0.666667
vt 0.656250 0.333333
vt 0.625000 0.312500
vt 0.625000 0.687500
vt 0.656250 0.333333
vt 0.656250 0.666667
vt 0.625000 0.687500
vt 0.625000 0.312500
vt 0.331332 1.093750
vt 0.668668 1.093750
vt 0.687500 1.125000
vt 0.312500 1.125000
vt 0.331332 1.156250
vt 0.668668 1.156250
vt 0.687500 1.187500
vt 0.312500 1.187500
vt 0.593750 0.666667
vt 0.593750 0.333333
vt 0.562500 0.312500
vt 0.562500 0.687500
vt 0.593750 0.333333
vt 0.593750 0.666667
vt 0.562500 0.687500
vt 0.562500 0.312500
vt 0.331332 1.156250
vt 0.668668 1.156250
vt 0.687500 1.187500
vt 0.312500 1.187500
vt 0.312500 1.062500
vt 0.687500 1.062500
vt 0.687500 0.312500
vt 0.687500 0.312500
vt 0.687500 0.687500
vt 0.312500 1.062500
vt 0.687500 1.062500
vt 0.000000 0.750000
vt 0.000000 0.250000
vt 1.000000 0.250000
vt 1.000000 0.750000
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 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 1.000000 -0.000000
vt 1.000000 1.000000
vt 1.000000 1.000000
vt 0.000000 0.000000
vt -0.000000 0.000000
vn 0.0000 0.0000 -1.0000
vn 0.4442 0.8960 -0.0000
vn 0.0000 0.0000 1.0000
vn 0.0000 1.0000 -0.0000
vn 0.0000 -0.5161 0.8565
vn 0.8565 -0.5161 0.0000
vn -0.8565 -0.5161 0.0000
vn 0.0000 -0.5161 -0.8565
vn -0.0000 -1.0000 -0.0000
vn 1.0000 -0.0000 0.0000
vn -1.0000 0.0000 -0.0000
vn -0.4442 0.8960 -0.0000
vn -0.0000 0.5161 0.8565
vn 0.8565 0.5161 -0.0000
vn -0.8565 0.5161 -0.0000
vn 0.0000 0.5161 -0.8565
g Cube_Cube_Material.001_Cube_Cube_Material.001_clip
s 1
f 1/1/1 2/2/1 3/3/1 4/4/1
f 4/5/2 3/6/2 5/7/2 6/8/2
f 6/9/3 5/10/3 7/11/3 8/12/3
f 7/13/4 5/7/4 42/14/4 43/15/4
f 5/7/4 3/6/4 9/16/4 42/14/4
f 2/17/4 7/13/4 43/15/4 44/18/4
f 3/6/4 2/17/4 44/18/4 9/16/4
f 10/19/5 11/20/5 12/21/5 13/22/5
f 11/23/6 14/24/6 15/25/6 12/26/6
f 16/27/7 10/28/7 13/29/7 17/30/7
f 14/31/8 16/32/8 17/33/8 15/34/8
f 15/35/9 18/36/9 19/37/9 12/38/9
f 20/39/1 21/40/1 22/41/1 18/42/1
f 18/43/10 22/44/10 23/45/10 19/46/10
f 19/47/3 23/48/3 24/49/3 25/50/3
f 21/51/11 20/39/11 25/52/11 24/49/11
f 21/53/4 24/54/4 23/55/4 22/56/4
f 12/38/9 19/37/9 25/57/9 13/58/9
f 13/58/9 25/57/9 20/59/9 17/60/9
f 17/60/9 20/59/9 18/36/9 15/35/9
f 2/17/12 1/61/12 8/62/12 7/13/12
f 26/63/5 27/64/5 28/65/5 29/66/5
f 27/67/6 30/68/6 31/69/6 28/70/6
f 32/71/7 26/72/7 29/73/7 33/74/7
f 30/75/8 32/76/8 33/77/8 31/78/8
f 34/79/5 35/80/5 36/81/5 37/82/5
f 35/83/6 38/84/6 39/85/6 36/86/6
f 40/87/7 34/88/7 37/89/7 41/90/7
f 38/91/8 40/92/8 41/93/8 39/94/8
f 37/82/13 36/81/13 11/20/13 10/19/13
f 36/86/14 39/85/14 14/24/14 11/23/14
f 41/90/15 37/89/15 10/28/15 16/27/15
f 39/94/16 41/93/16 16/32/16 14/31/16
f 43/95/13 42/96/13 27/64/13 26/63/13
f 42/14/14 9/97/14 30/68/14 27/67/14
f 44/98/15 43/99/15 26/72/15 32/71/15
f 9/100/16 44/101/16 32/76/16 30/75/16
f 29/66/13 28/65/13 35/80/13 34/79/13
f 28/70/14 31/69/14 38/84/14 35/83/14
f 33/74/15 29/73/15 34/88/15 40/87/15
f 31/78/16 33/77/16 40/92/16 38/91/16
f 8/102/9 1/103/9 4/104/9 6/105/9
g Cube_Cube_Material.001_Cube_Cube_Material.001_sides_with_band
s off
f 47/106/10 51/107/10 52/108/10 50/109/10
f 48/110/11 49/111/11 46/112/11 45/113/11
f 47/114/9 50/115/9 48/116/9 45/117/9
f 51/118/4 46/112/4 49/111/4 52/119/4
g Cube_Cube_Material.001_Cube_Cube_Material.001_sides_without_band
f 45/113/1 46/120/1 51/107/1 47/121/1
f 50/109/3 52/119/3 49/111/3 48/122/3

Binary file not shown.

Before

Width:  |  Height:  |  Size: 226 B

After

Width:  |  Height:  |  Size: 202 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 B

View File

@ -1,241 +1,186 @@
Minetest technic modpack user manual
====================================
# Technic User Manual
The technic modpack extends the Minetest game with many new elements,
mainly constructable machines and tools. It is a large modpack, and
tends to dominate gameplay when it is used. This manual describes how
to use the technic modpack, mainly from a player's perspective.
The technic modpack extends Minetest Game (shipped with Minetest by default)
with many new elements, mainly constructable machines and tools. This manual
describes how to use the modpack, mainly from a player's perspective.
The technic modpack depends on some other modpacks:
Documentation of the mod dependencies can be found here:
* the basic Minetest game
* mesecons, which supports the construction of logic systems based on
signalling elements
* pipeworks, which supports the automation of item transport
* moreores, which provides some additional ore types
* [Minetest Game Documentation](https://wiki.minetest.net/Main_Page)
* [Mesecons Documentation](http://mesecons.net/items.html)
* [Pipeworks Documentation](https://gitlab.com/VanessaE/pipeworks/-/wikis/home)
* [Moreores Forum Post](https://forum.minetest.net/viewtopic.php?t=549)
* [Basic materials Repository](https://gitlab.com/VanessaE/basic_materials)
This manual doesn't explain how to use these other modpacks, which ought
to (but actually don't) have their own manuals.
## Recipes
Recipes for constructable items in technic are generally not guessable,
and are also not specifically documented here. You should use a
craft guide mod to look up the recipes in-game. For the best possible
guidance, use the unified\_inventory mod, with which technic registers
its specialised recipe types.
Recipes for items registered by technic are not specifically documented here.
Please consult a craft guide mod to look up the recipes in-game.
substances
----------
**Recommended mod:** [Unified Inventory](https://github.com/minetest-mods/unified_inventory)
### ore ###
## Substances
The technic mod makes extensive use of not just the default ores but also
some that are added by mods. You will need to mine for all the ore types
in the course of the game. Each ore type is found at a specific range of
elevations, and while the ranges mostly overlap, some have non-overlapping
ranges, so you will ultimately need to mine at more than one elevation
to find all the ores. Also, because one of the best elevations to mine
at is very deep, you will be unable to mine there early in the game.
### Ores
Elevation is measured in meters, relative to a reference plane that
is not quite sea level. (The standard sea level is at an elevation
of about +1.4.) Positive elevations are above the reference plane and
negative elevations below. Because elevations are always described this
way round, greater numbers when higher, we avoid the word "depth".
Technic registers a few ores which are needed to craft machines or items.
Each ore type is found at a specific range of elevations so you will
ultimately need to mine at more than one elevation to find all the ores.
The ores that matter in technic are coal, iron, copper, tin, zinc,
chromium, uranium, silver, gold, mithril, mese, and diamond.
Elevation (Y axis) is measured in meters. The reference is usually at sea
level. Ores can generally be found more commonly by going downwards to -1000m.
Coal is part of the basic Minetest game. It is found from elevation
+64 downwards, so is available right on the surface at the start of
the game, but it is far less abundant above elevation 0 than below.
It is initially used as a fuel, driving important machines in the early
part of the game. It becomes less important as a fuel once most of your
machines are electrically powered, but burning fuel remains a way to
generate electrical power. Coal is also used, usually in dust form, as
an ingredient in alloying recipes, wherever elemental carbon is required.
Note ¹: *These ores are provided by Minetest Game. See [Ores](https://wiki.minetest.net/Ores#Ores_overview) for a rough overview*
Iron is part of the basic Minetest game. It is found from elevation
+2 downwards, and its abundance increases in stages as one descends,
reaching its maximum from elevation -64 downwards. It is a common metal,
used frequently as a structural component. In technic, unlike the basic
game, iron is used in multiple forms, mainly alloys based on iron and
including carbon (coal).
Note ²: *These ores are provided by moreores. TODO: Add reference link*
Copper is part of the basic Minetest game (having migrated there from
moreores). It is found from elevation -16 downwards, but is more abundant
from elevation -64 downwards. It is a common metal, used either on its
own for its electrical conductivity, or as the base component of alloys.
#### Coal ¹
Use: Fuel, alloy as carbon
Burning coal is a way to generate electrical power. Coal is also used,
usually in dust form, as an ingredient in alloying recipes, wherever
elemental carbon is required.
#### Iron ¹
Use: multiple, mainly for alloys with carbon (coal).
#### Copper ¹
Copper is a common metal, used either on its own for its electrical
conductivity, or as the base component of alloys.
Although common, it is very heavily used, and most of the time it will
be the material that most limits your activity.
Tin is supplied by the moreores mod. It is found from elevation +8
downwards, with no elevation-dependent variations in abundance beyond
that point. It is a common metal. Its main use in pure form is as a
component of electrical batteries. Apart from that its main purpose is
as the secondary ingredient in bronze (the base being copper), but bronze
is itself little used. Its abundance is well in excess of its usage,
so you will usually have a surplus of it.
#### Tin ¹
Use: batteries, bronze
Zinc is supplied by technic. It is found from elevation +2 downwards,
with no elevation-dependent variations in abundance beyond that point.
It is a common metal. Its main use is as the secondary ingredient
in brass (the base being copper), but brass is itself little used.
Its abundance is well in excess of its usage, so you will usually have
a surplus of it.
Tin is a common metal but is used rarely. Its abundance is well in excess
of its usage, so you will usually have a surplus of it.
Chromium is supplied by technic. It is found from elevation -100
downwards, with no elevation-dependent variations in abundance beyond
that point. It is a moderately common metal. Its main use is as the
secondary ingredient in stainless steel (the base being iron).
#### Zinc
Use: brass
Uranium is supplied by technic. It is found only from elevation -80 down
to -300; using it therefore requires one to mine above elevation -300 even
though deeper mining is otherwise more productive. It is a moderately
common metal, useful only for reasons related to radioactivity: it forms
the fuel for nuclear reactors, and is also one of the best radiation
shielding materials available. It is not difficult to find enough uranium
ore to satisfy these uses. Beware that the ore is slightly radioactive:
it will slightly harm you if you stand as close as possible to it.
It is safe when more than a meter away or when mined.
Depth: 2m, more commonly below -32m
Silver is supplied by the moreores mod. It is found from elevation -2
downwards, with no elevation-dependent variations in abundance beyond
that point. It is a semi-precious metal. It is little used, being most
notably used in electrical items due to its conductivity, being the best
conductor of all the pure elements.
Zinc only has a few uses but is a common metal.
Gold is part of the basic Minetest game (having migrated there from
moreores). It is found from elevation -64 downwards, but is more
abundant from elevation -256 downwards. It is a precious metal. It is
little used, being most notably used in electrical items due to its
combination of good conductivity (third best of all the pure elements)
and corrosion resistance.
#### Chromium
Use: stainless steel
Mithril is supplied by the moreores mod. It is found from elevation
-512 downwards, the deepest ceiling of any minable substance, with
no elevation-dependent variations in abundance beyond that point.
It is a rare precious metal, and unlike all the other metals described
here it is entirely fictional, being derived from J. R. R. Tolkien's
Depth: -100m, more commonly below -200m
#### Uranium
Use: nuclear reactor fuel
Depth: -80m until -300m, more commonly between -100m and -200m
It is a moderately common metal, useful only for reasons related to radioactivity:
it forms the fuel for nuclear reactors, and is also one of the best radiation
shielding materials available.
Keep a safety distance of a meter to avoid being harmed by radiation.
#### Silver ²
Use: conductors
Depth: -2m, evenly common
Silver is a semi-precious metal and is the best conductor of all the pure elements.
#### Gold ¹
Use: various
Depth: -64m, more commonly below -256m
Gold is a precious metal. It is most notably used in electrical items due to
its combination of good conductivity and corrosion resistance.
#### Mithril ²
Use: chests
Depth: -512m, evenly common
Mithril is a fictional ore, being derived from J. R. R. Tolkien's
Middle-Earth setting. It is little used.
Mese is part of the basic Minetest game. It is found from elevation
-64 downwards. The ore is more abundant from elevation -256 downwards,
and from elevation -1024 downwards there are also occasional blocks of
solid mese (each yielding as much mese as nine blocks of ore). It is a
precious gemstone, and unlike diamond it is entirely fictional. It is
used in many recipes, though mainly not in large quantities, wherever
some magical quality needs to be imparted.
#### Mese ¹
Use: various
Diamond is part of the basic Minetest game (having migrated there from
technic). It is found from elevation -128 downwards, but is more abundant
from elevation -256 downwards. It is a precious gemstone. It is used
moderately, mainly for reasons connected to its extreme hardness.
Mese is a precious gemstone, and unlike diamond it is entirely fictional.
It is used in small quantities, wherever some magic needs to be imparted.
### rock ###
#### Diamond ¹
Use: mainly for cutting machines
In addition to the ores, there are multiple kinds of rock that need to be
mined in their own right, rather than for minerals. The rock types that
matter in technic are standard stone, desert stone, marble, and granite.
Diamond is a precious gemstone. It is used moderately, mainly for reasons
connected to its extreme hardness.
Standard stone is part of the basic Minetest game. It is extremely
common. As in the basic game, when dug it yields cobblestone, which can
be cooked to turn it back into standard stone. Cobblestone is used in
recipes only for some relatively primitive machines. Standard stone is
used in a couple of machine recipes. These rock types gain additional
significance with technic because the grinder can be used to turn them
into dirt and sand. This, especially when combined with an automated
cobblestone generator, can be an easier way to acquire sand than
collecting it where it occurs naturally.
### Rocks
Desert stone is part of the basic Minetest game. It is found specifically
in desert biomes, and only from elevation +2 upwards. Although it is
easily accessible, therefore, its quantity is ultimately quite limited.
It is used in a few recipes.
This section describes the rock types added by technic. Further rock types
are supported by technic machines. These can be processed using the grinder:
Marble is supplied by technic. It is found in dense clusters from
elevation -50 downwards. It has mainly decorative use, but also appears
in one machine recipe.
* Stone (plain)
* Cobblestone
* Desert Stone
Granite is supplied by technic. It is found in dense clusters from
elevation -150 downwards. It is much harder to dig than standard stone,
so impedes mining when it is encountered. It has mainly decorative use,
but also appears in a couple of machine recipes.
#### Marble
Depth: -50m, evenly common
### rubber ###
Marble is found in dense clusters and has mainly decorative use, but also
appears in one machine recipe.
#### Granite
Depth: -150m, evenly common
Granite is found in dense clusters and is much harder to dig than standard
stone. It has mainly decorative use, but also appears in a couple of
machine recipes.
### Rubber
Rubber is a biologically-derived material that has industrial uses due
to its electrical resistivity and its impermeability. In technic, it
is used in a few recipes, and it must be acquired by tapping rubber trees.
If you have the moretrees mod installed, the rubber trees you need
are those defined by that mod. If not, technic supplies a copy of the
moretrees rubber tree.
Rubber trees are provided by technic if the moretrees mod is not present.
Extracting rubber requires a specific tool, a tree tap. Using the tree
tap (by left-clicking) on a rubber tree trunk block extracts a lump of
raw latex from the trunk. Each trunk block can be repeatedly tapped for
latex, at intervals of several minutes; its appearance changes to show
whether it is currently ripe for tapping. Each tree has several trunk
blocks, so several latex lumps can be extracted from a tree in one visit.
Extract raw latex from rubber using the "Tree Tap" tool. Punch/left-click the
tool on a rubber tree trunk to extract a lump of raw latex from the trunk.
Emptied trunks will regenerate at intervals of several minutes, which can be
observed by its appearance.
Raw latex isn't used directly. It must be vulcanized to produce finished
rubber. This can be performed by alloying the latex with coal dust.
To obtain rubber from latex, alloy latex with coal dust.
### metal ###
### Metals
Generally, each metal can exist in five forms:
Many of the substances important in technic are metals, and there is
a common pattern in how metals are handled. Generally, each metal can
exist in five forms: ore, lump, dust, ingot, and block. With a couple of
tricky exceptions in mods outside technic, metals are only *used* in dust,
ingot, and block forms. Metals can be readily converted between these
three forms, but can't be converted from them back to ore or lump forms.
* ore -> stone containing the lump
* lump -> draw metal obtained by digging ("nuggets")
* dust -> grinder output
* ingot -> melted/cooked lump or dust
* block -> placeable node
As in the basic Minetest game, a "lump" of metal is acquired directly by
digging ore, and will then be processed into some other form for use.
A lump is thus more akin to ore than to refined metal. (In real life,
metal ore rarely yields lumps ("nuggets") of pure metal directly.
More often the desired metal is chemically bound into the rock as an
oxide or some other compound, and the ore must be chemically processed
to yield pure metal.)
Metals can be converted between dust, ingot and block, but can't be converted
from them back to ore or lump forms.
Not all metals occur directly as ore. Generally, elemental metals (those
consisting of a single chemical element) occur as ore, and alloys (those
consisting of a mixture of multiple elements) do not. In fact, if the
fictional mithril is taken to be elemental, this pattern is currently
followed perfectly. (It is not clear in the Middle-Earth setting whether
mithril is elemental or an alloy.) This might change in the future:
in real life some alloys do occur as ore, and some elemental metals
rarely occur naturally outside such alloys. Metals that do not occur
as ore also lack the "lump" form.
#### Grinding
Ores can be processed as follows:
The basic Minetest game offers a single way to refine metals: cook a lump
in a furnace to produce an ingot. With technic this refinement method
still exists, but is rarely used outside the early part of the game,
because technic offers a more efficient method once some machines have
been built. The grinder, available only in electrically-powered forms,
can grind a metal lump into two piles of metal dust. Each dust pile
can then be cooked into an ingot, yielding two ingots from one lump.
This doubling of material value means that you should only cook a lump
directly when you have no choice, mainly early in the game when you
haven't yet built a grinder.
* ore -> lump (digging) -> ingot (melting)
* ore -> lump (digging) -> 2x dust (grinding) -> 2x ingot (melting)
An ingot can also be ground back to (one pile of) dust. Thus it is always
possible to convert metal between ingot and dust forms, at the expense
of some energy consumption. Nine ingots of a metal can be crafted into
a block, which can be used for building. The block can also be crafted
back to nine ingots. Thus it is possible to freely convert metal between
ingot and block forms, which is convenient to store the metal compactly.
Every metal has dust, ingot, and block forms.
At the expense of some energy consumption, the grinder can extract more material
from the lump, resulting in 2x dust which can be melted to two ingots in total.
#### Alloying
Alloying recipes in which a metal is the base ingredient, to produce a
metal alloy, always come in two forms, using the metal either as dust
or as an ingot. If the secondary ingredient is also a metal, it must
be supplied in the same form as the base ingredient. The output alloy
is also returned in the same form. For example, brass can be produced
by alloying two copper ingots with one zinc ingot to make three brass
ingots, or by alloying two piles of copper dust with one pile of zinc
dust to make three piles of brass dust. The two ways of alloying produce
equivalent results.
is also returned in the same form.
Example: 2x copper ingots + zinc ingot -> 3x brass ingot (alloying)
The same will also work for dust ingredients, resulting in brass dist.
### iron and its alloys ###
@ -986,7 +931,7 @@ through a side.
The furnace, alloy furnace, grinder, extractor, compressor, and centrifuge
have much in common. Each implements some industrial process that
transforms items into other items, and they manner in which they present
transforms items into other items, and the manner in which they present
these processes as powered machines is essentially identical.
Most of the processing machines operate on inputs of only a single type
@ -1011,7 +956,7 @@ input slot, this is perfectly simple behavior. The alloy furnace is more
complex: it will put an arriving item in either input slot, preferring to
stack it with existing items of the same type. It doesn't matter which
slot each of the alloy furnace's inputs is in, so it doesn't matter that
there's no direct control ovar that, but there is a risk that supplying
there's no direct control over that, but there is a risk that supplying
a lot of one item type through tubes will result in both slots containing
the same type of item, leaving no room for the second input.
@ -1146,7 +1091,7 @@ dig identical areas, one on each side of the square cross section.
### forcefield emitter ###
The forcefield emitter is an HV powered machine that generates a
forcefield remeniscent of those seen in many science-fiction stories.
forcefield reminiscent of those seen in many science-fiction stories.
The emitter can be configured to generate a forcefield of either
spherical or cubical shape, in either case centered on the emitter.
@ -1195,7 +1140,7 @@ power generators
### fuel-fired generators ###
The fiel-fired generators are electrical power generators that generate
The fuel-fired generators are electrical power generators that generate
power by the combustion of fuel. Versions of them are available for
all three voltages (LV, MV, and HV). These are all capable of burning
any type of combustible fuel, such as coal. They are relatively easy

View File

@ -0,0 +1 @@
name = technic

View File

@ -1 +0,0 @@

View File

@ -21,6 +21,9 @@ celeron55 (Perttu Ahola) modified by Zefram (CC BY-SA 3.0):
sdzen (Elise Staudter) (CC BY-SA 3.0):
* most of the older 16x16 textures
leftshift (CC BY-SA 3.0):
* technic_river_water_can.png
RealBadAngel: (WTFPL)
* Everything else.
@ -32,4 +35,4 @@ veikk0 (Veikko Mäkelä) (CC BY-SA 4.0):
* technic_hv_nuclear_reactor_siren_danger_loop.ogg
* Derived from "Nuclear alarm.wav" by Freesound.org user rene___ from <https://freesound.org/people/rene___/sounds/56778/>. Originally licensed under CC0 1.0 <https://creativecommons.org/publicdomain/zero/1.0/>
CC BY-SA 4.0: <https://creativecommons.org/licenses/by-sa/4.0/>
CC BY-SA 4.0: <https://creativecommons.org/licenses/by-sa/4.0/>

View File

@ -7,6 +7,13 @@ minetest.clear_craft({
type = "shapeless",
output = "default:bronze_ingot"
})
-- Restore recipe for bronze block to ingots
minetest.register_craft({
output = "default:bronze_ingot 9",
recipe = {
{"default:bronzeblock"}
}
})
-- Accelerator tube
if pipeworks.enable_accelerator_tube then
@ -38,6 +45,18 @@ if pipeworks.enable_teleport_tube then
})
end
-- basic materials' brass ingot
minetest.clear_craft({
output = "basic_materials:brass_ingot",
})
minetest.register_craft( {
type = "shapeless",
output = "basic_materials:brass_ingot 9",
recipe = { "basic_materials:brass_block" },
})
-- tubes crafting recipes
minetest.register_craft({
@ -71,54 +90,24 @@ minetest.register_craft({
output = 'technic:red_energy_crystal',
recipe = {
{'moreores:silver_ingot', 'technic:battery', 'dye:red'},
{'technic:battery', 'default:diamondblock', 'technic:battery'},
{'technic:battery', 'basic_materials:energy_crystal_simple', 'technic:battery'},
{'dye:red', 'technic:battery', 'moreores:silver_ingot'},
}
})
minetest.register_craft({
output = 'technic:fine_copper_wire 2',
recipe = {
{'', 'default:copper_ingot', ''},
{'', 'default:copper_ingot', ''},
{'', 'default:copper_ingot', ''},
}
})
minetest.register_craft({
output = 'technic:fine_gold_wire 2',
recipe = {
{'', 'default:gold_ingot', ''},
{'', 'default:gold_ingot', ''},
{'', 'default:gold_ingot', ''},
}
})
minetest.register_craft({
output = 'technic:fine_silver_wire 2',
recipe = {
{'', 'moreores:silver_ingot', ''},
{'', 'moreores:silver_ingot', ''},
{'', 'moreores:silver_ingot', ''},
}
})
minetest.register_craft({
output = 'technic:copper_coil 1',
recipe = {
{'technic:fine_copper_wire', 'technic:wrought_iron_ingot', 'technic:fine_copper_wire'},
{'basic_materials:copper_wire', 'technic:wrought_iron_ingot', 'basic_materials:copper_wire'},
{'technic:wrought_iron_ingot', '', 'technic:wrought_iron_ingot'},
{'technic:fine_copper_wire', 'technic:wrought_iron_ingot', 'technic:fine_copper_wire'},
}
})
minetest.register_craft({
output = 'technic:motor',
recipe = {
{'technic:carbon_steel_ingot', 'technic:copper_coil', 'technic:carbon_steel_ingot'},
{'technic:carbon_steel_ingot', 'technic:copper_coil', 'technic:carbon_steel_ingot'},
{'technic:carbon_steel_ingot', 'default:copper_ingot', 'technic:carbon_steel_ingot'},
}
{'basic_materials:copper_wire', 'technic:wrought_iron_ingot', 'basic_materials:copper_wire'},
},
replacements = {
{"basic_materials:copper_wire", "basic_materials:empty_spool"},
{"basic_materials:copper_wire", "basic_materials:empty_spool"},
{"basic_materials:copper_wire", "basic_materials:empty_spool"},
{"basic_materials:copper_wire", "basic_materials:empty_spool"}
},
})
local isolation = mesecons_materials and "mesecons_materials:fiber" or "technic:rubber"
@ -153,10 +142,11 @@ minetest.register_craft({
minetest.register_craft({
output = 'technic:control_logic_unit',
recipe = {
{'', 'technic:fine_gold_wire', ''},
{'', 'basic_materials:gold_wire', ''},
{'default:copper_ingot', 'technic:silicon_wafer', 'default:copper_ingot'},
{'', 'technic:chromium_ingot', ''},
}
},
replacements = { {"basic_materials:gold_wire", "basic_materials:empty_spool"}, },
})
minetest.register_craft({
@ -164,7 +154,7 @@ minetest.register_craft({
recipe = {
{'technic:stainless_steel_ingot', 'technic:stainless_steel_ingot', 'technic:stainless_steel_ingot'},
{'default:bronze_ingot', 'default:bronze_ingot', 'default:bronze_ingot'},
{'moreores:tin_ingot', 'moreores:tin_ingot', 'moreores:tin_ingot'},
{'default:tin_ingot', 'default:tin_ingot', 'default:tin_ingot'},
}
})
@ -179,12 +169,11 @@ minetest.register_craft({
output = "technic:machine_casing",
recipe = {
{ "technic:cast_iron_ingot", "technic:cast_iron_ingot", "technic:cast_iron_ingot" },
{ "technic:cast_iron_ingot", "technic:brass_ingot", "technic:cast_iron_ingot" },
{ "technic:cast_iron_ingot", "basic_materials:brass_ingot", "technic:cast_iron_ingot" },
{ "technic:cast_iron_ingot", "technic:cast_iron_ingot", "technic:cast_iron_ingot" },
},
})
minetest.register_craft({
output = "default:dirt 2",
type = "shapeless",
@ -196,3 +185,25 @@ minetest.register_craft({
"group:sand",
},
})
minetest.register_craft({
output = "technic:rubber_goo",
type = "shapeless",
recipe = {
"technic:raw_latex",
"default:coal_lump",
"default:coal_lump",
"default:coal_lump",
"default:coal_lump",
"default:coal_lump",
"default:coal_lump",
"default:coal_lump",
"default:coal_lump",
},
})
minetest.register_craft({
output = "technic:rubber",
type = "cooking",
recipe = "technic:rubber_goo",
})

View File

@ -1,6 +1,7 @@
default
pipeworks
technic_worldgen
basic_materials
bucket?
screwdriver?
mesecons?
@ -10,3 +11,4 @@ digiline_remote?
intllib?
unified_inventory?
vector_extras?
dye?

View File

@ -1,38 +1,115 @@
This file is fairly incomplete. Help is welcome.
# technic API
Tiers
-----
The tier is a string, currently `"LV"`, `"MV"` and `"HV"` are supported.
This file documents the functions within the technic modpack for use in mods.
Network
-------
The network is the cable with the connected machine nodes. Currently the
switching station handles the network activity.
Helper functions
----------------
## Tiers
Tier are network types. List of pre-registered tiers:
* `"LV"`, Low Voltage
* `"MV"`, Medium Voltage
* `"HV"`, High Voltage
Available functions:
* `technic.register_tier(tier, description)`
* Registers a network type (tier)
* `tier`: string, short name (ex. `LV`)
* `description`: string, long name (ex. `Low Voltage`)
* See also `tiers`
## Cables
* `technic.register_cable(tier, size)`
* Registers an existing node as cable
* `tier`: string
* `size`: number, visual size of the wire
* `technic.get_cable_tier(nodename)`
* Retrieves the tier assigned to the provided node name
* `nodename`: string, name of the node
* Returns the tier (string) or `nil`
* `technic.is_tier_cable(nodename, tier)`
* Tells whether the node `nodename` is the cable of the tier `tier`.
* Short version of `technic.get_cable_tier(nodename) == tier`
## Machines
The machine type indicates the direction of power flow.
List of pre-registered machine types:
* `technic.receiver = "RE"` e.g. grinder
* `technic.producer = "PR"` e.g. solar panel
* `technic.producer_receiver = "PR_RE"` supply converter
* `technic.battery = "BA"` e.g. LV battery box
Available functions:
* `technic.register_machine(tier, nodename, machine_type)`
* Register an existing node as machine, bound to the network tier
* `tier`: see `register_tier`
* `nodename`: string, node name
* `machine_type`: string, following options are possible:
* `"RE"`: Receiver
* `"PR"`: Producer
* `"BA"`: Battery, energy storage
* See also `Machine types`
Functions to use for callbacks:
* `technic.can_insert_unique_stack(pos, node, stack, direction)`
* `technic.insert_object_unique_stack(pos, node, stack, direction)`
* Functions for the parameters `can_insert` and `insert_object` to avoid
filling multiple inventory slots with same type of item.
### Specific machines
* `technic.register_solar_array(data)`
* data is a table (TODO)
## Tools
* `technic.register_power_tool(itemname, max_charge)`
* Register or configure the maximal charge held by an existing item
* `craftitem`: string, item or node name
* `max_charge`: number, maximal EU capacity
## Helper functions
Unsorted functions:
* `technic.EU_string(num)`
* Converts num to a human-readable string (see `pretty_num`)
and adds the `EU` unit
* Use this function when showing players energy values
* `technic.pretty_num(num)`
* Converts the number `num` to a human-readable string.
* Use this function when showing players power values.
* `technic.swap_node(pos, nodename)`
* Same as `mintest.swap_node` but it only changes the nodename.
* It uses `minetest.get_node` before swapping to ensure the new nodename
is not the same as the current one.
* `technic.get_or_load_node(pos)`
* If the mapblock is loaded, it returns the node at pos,
else it loads the chunk and returns `nil`.
* Converts the number `num` to a human-readable string with SI prefixes
* `technic.config:get(name)`
* Some configuration function
* `technic.tube_inject_item(pos, start_pos, velocity, item)`
* Same as `pipeworks.tube_inject_item`
### Energy modifiers
* `technic.set_RE_wear(itemstack, item_load, max_charge)`
* If the `wear_represents` field in the item's nodedef is
`"technic_RE_charge"`, this function does nothing.
* Modifies the power tool wear of the given itemstack
* `itemstack`: ItemStack to modify
* `item_load`: number, used energy in EU
* `max_charge`: number, maximal EU capacity of the tool
* The itemdef field `wear_represents` must be set to `"technic_RE_charge"`,
otherwise this function will do nothing.
* Returns the modified itemstack
* `technic.refill_RE_charge(itemstack)`
* This function fully recharges an RE chargeable item.
* If `technic.power_tools[itemstack:get_name()]` is `nil` (or `false`), this
function does nothing, else that value is the maximum charge.
* The itemstack metadata is changed to contain the charge.
* `technic.is_tier_cable(nodename, tier)`
* Tells whether the node `nodename` is the cable of the tier `tier`.
* `technic.get_cable_tier(nodename)`
* Returns the tier of the cable `nodename` or `nil`.
### Node-specific
* `technic.get_or_load_node(pos)`
* If the mapblock is loaded, it returns the node at pos,
else it loads the chunk and returns `nil`.
* `technic.swap_node(pos, nodename)`
* Same as `mintest.swap_node` but it only changes the nodename.
* It uses `minetest.get_node` before swapping to ensure the new nodename
is not the same as the current one.
* `technic.trace_node_ray(pos, dir, range)`
* Returns an iteration function (usable in the for loop) to iterate over the
node positions along the specified ray.
@ -40,54 +117,50 @@ Helper functions
* `technic.trace_node_ray_fat(pos, dir, range)`
* Like `technic.trace_node_ray` but includes extra positions near the ray.
* The node ray functions are used for mining lasers.
* `technic.config:get(name)`
* Some configuration function
* `technic.tube_inject_item(pos, start_pos, velocity, item)`
* Same as `pipeworks.tube_inject_item`
Registration functions
----------------------
* `technic.register_power_tool(itemname, max_charge)`
* Same as `technic.power_tools[itemname] = max_charge`
* This function makes the craftitem `itemname` chargeable.
* `technic.register_machine(tier, nodename, machine_type)`
* Same as `technic.machines[tier][nodename] = machine_type`
* Currently this is requisite to make technic recognize your node.
* See also `Machine types`
* `technic.register_tier(tier)`
* Same as `technic.machines[tier] = {}`
* See also `tiers`
### Specific machines
* `technic.register_solar_array(data)`
* data is a table
## Item Definition fields
Groups:
Used itemdef fields
-------------------
* groups:
* `technic_<ltier> = 1` ltier is a tier in small letters; this group makes
the node connect to the cable(s) of the right tier.
* `technic_machine = 1` Currently used for
* `connect_sides`
* In addition to the default use (see lua_api.txt), this tells where the
machine can be connected.
#
#
* `technic_run(pos, node)`
* `technic_<tier> = 1`
* Makes the node connect to the cables of the matching tier name
* `<tier>`: name of the tier, in lowercase (ex. `lv`)
* `technic_machine = 1`
* UNRELIABLE. Indicates whether the item or node belongs to technic
* `connect_sides = {"top", "left", ...}`
* Extends the Minetest API. Indicates where the machine can be connected.
Additional definition fields:
* `wear_represents = "string"`
* Specifies how the tool wear level is handled. Available modes:
* `"mechanical_wear"`: represents physical damage
* `"technic_RE_charge"`: represents electrical charge
* `<itemdef>.technic_run(pos, node)`
* This function is currently used to update the node.
Modders have to manually change the information about supply etc. in the
node metadata.
Machine types
-------------
There are currently following types:
* `technic.receiver = "RE"` e.g. grinder
* `technic.producer = "PR"` e.g. solar panel
* `technic.producer_receiver = "PR_RE"` supply converter
* `technic.battery = "BA"` e.g. LV batbox
## Node Metadata fields
Nodes connected to the network will have one or more of these parameters as meta
data:
Switching Station
-----------------
* `<tier>_EU_supply` - direction: output
* For nodes registered as `PR` or `BA` tier
* This is the EU value supplied by the node.
* `<tier>_EU_demand` - direction: output
* For nodes registered as `RE` or `BA` tier
* This is the EU value the node requires to run.
* `<tier>_EU_input` - direction: input
* For nodes registered as `RE` or `BA` tier
* This is the actual EU value the network can give the node.
`<tier>` corresponds to the tier name registered using
`technic.register_tier` (ex. `LV`). It is possible for the machine to depend on
multiple tiers (or networks).
## Switching Station mechanics
The switching station is the center of all power distribution on an electric
network.
@ -115,16 +188,12 @@ down. We have a brown-out situation.
Hence for now all the power distribution logic resides in this single node.
### Node meta usage
Nodes connected to the network will have one or more of these parameters as meta
data:
* `<LV|MV|HV>_EU_supply` : Exists for PR and BA node types.
This is the EU value supplied by the node. Output
* `<LV|MV|HV>_EU_demand` : Exists for RE and BA node types.
This is the EU value the node requires to run. Output
* `<LV|MV|HV>_EU_input` : Exists for RE and BA node types.
This is the actual EU value the network can give the node. Input
## Deprecated functions
The reason the LV|MV|HV type is prepended to meta data is because some machine
could require several supplies to work.
This way the supplies are separated per network.
Following functions are either no longer used by technic, or are planned to
be removed soon. Please update mods depending on technic accordingly.
* `technic.get_RE_item_load`
* Scales the tool wear to a certain numeric range
* `technic.set_RE_item_load`
* Scales a certain numeric range to the tool wear

View File

@ -1,23 +1,56 @@
local digit_sep_esc
do
local sep = technic.config:get("digit_separator")
sep = tonumber(sep) and string.char(sep) or sep or " "
-- Escape for gsub
for magic in ("().%+-*?[^$"):gmatch(".") do
if sep == magic then
sep = "%"..sep
end
local constant_digit_count = technic.config:get("constant_digit_count")
-- converts a number to a readable string with SI prefix, e.g. 10000 → "10 k",
-- 15 → "15 ", 0.1501 → "150.1 m"
-- a non-breaking space (U+a0) instead of a usual one is put after number
-- The precision is 4 digits
local prefixes = {[-8] = "y", [-7] = "z", [-6] = "a", [-5] = "f", [-4] = "p",
[-3] = "n", [-2] = "µ", [-1] = "m", [0] = "", [1] = "k", [2] = "M",
[3] = "G", [4] = "T", [5] = "P", [6] = "E", [7] = "Z", [8] = "Y"}
function technic.pretty_num(num)
-- the small number added is due to floating point inaccuracy
local b = math.floor(math.log10(math.abs(num)) +0.000001)
local pref_i
if b ~= 0 then
-- b is decremented by 1 to avoid a single digit with many decimals,
-- e.g. instead of 1.021 MEU, 1021 kEU is shown
pref_i = math.floor((b - 1) / 3)
else
-- as special case, avoid showing e.g. 1100 mEU instead of 1.1 EU
pref_i = 0
end
digit_sep_esc = sep
if not prefixes[pref_i] then
-- This happens for 0, nan, inf, very big values, etc.
if num == 0 then
-- handle 0 explicilty to avoid showing "-0"
if not constant_digit_count then
return "0 "
end
-- gives 0.000
return string.format("%.3f ", 0)
end
return string.format("%.4g ", num)
end
num = num * 10 ^ (-3 * pref_i)
if constant_digit_count then
local comma_digits_cnt = 3 - (b - 3 * pref_i)
return string.format("%." .. comma_digits_cnt .. "f %s",
num, prefixes[pref_i])
end
return string.format("%.4g %s", num, prefixes[pref_i])
end
-- some unittests
assert(technic.pretty_num(-0) == "0 ")
assert(technic.pretty_num(0) == "0 ")
assert(technic.pretty_num(1234) == "1234 ")
assert(technic.pretty_num(123456789) == "123.5 M")
function technic.pretty_num(num)
local str, k = tostring(num), nil
repeat
str, k = str:gsub("^(-?%d+)(%d%d%d)", "%1"..digit_sep_esc.."%2")
until k == 0
return str
-- used to display power values
function technic.EU_string(num)
return technic.pretty_num(num) .. "EU"
end
@ -50,7 +83,7 @@ function technic.get_or_load_node(pos)
local node = minetest.get_node_or_nil(pos)
if node then return node end
local vm = VoxelManip()
local MinEdge, MaxEdge = vm:read_from_map(pos, pos)
local _, _ = vm:read_from_map(pos, pos)
return nil
end
@ -58,8 +91,8 @@ end
technic.tube_inject_item = pipeworks.tube_inject_item or function(pos, start_pos, velocity, item)
local tubed = pipeworks.tube_item(vector.new(pos), item)
tubed:get_luaentity().start_pos = vector.new(start_pos)
tubed:setvelocity(velocity)
tubed:setacceleration(vector.new(0, 0, 0))
tubed:set_velocity(velocity)
tubed:set_acceleration(vector.new(0, 0, 0))
end
@ -188,4 +221,3 @@ function technic.trace_node_ray_fat(pos, dir, range)
return p
end, vector.round(pos)
end

View File

@ -14,11 +14,7 @@ technic.modpath = modpath
-- Boilerplate to support intllib
if rawget(_G, "intllib") then
if intllib.make_gettext_pair then
technic.getter = intllib.make_gettext_pair()
else
technic.getter = intllib.Getter()
end
technic.getter = intllib.Getter()
else
technic.getter = function(s,a,...)if a==nil then return s end a={a,...}return s:gsub("(@?)@(%(?)(%d+)(%)?)",function(e,o,n,c)if e==""then return a[tonumber(n)]..(o==""and c or"")else return"@"..o..n..c end end) end
end
@ -30,10 +26,10 @@ dofile(modpath.."/config.lua")
-- Helper functions
dofile(modpath.."/helpers.lua")
-- Items
-- Items
dofile(modpath.."/items.lua")
-- Craft recipes for items
-- Craft recipes for items
dofile(modpath.."/crafts.lua")
-- Register functions

View File

@ -35,7 +35,7 @@ minetest.register_tool("technic:blue_energy_crystal", {
fleshy = {times={}, uses=10000, maxlevel=0}
}
}
})
})
minetest.register_tool("technic:green_energy_crystal", {
description = S("Green Energy Crystal"),
@ -51,7 +51,7 @@ minetest.register_tool("technic:green_energy_crystal", {
fleshy = {times={}, uses=10000, maxlevel=0}
}
}
})
})
minetest.register_tool("technic:red_energy_crystal", {
description = S("Red Energy Crystal"),
@ -67,22 +67,6 @@ minetest.register_tool("technic:red_energy_crystal", {
fleshy = {times={}, uses=10000, maxlevel=0}
}
}
})
minetest.register_craftitem("technic:fine_copper_wire", {
description = S("Fine Copper Wire"),
inventory_image = "technic_fine_copper_wire.png",
})
minetest.register_craftitem("technic:fine_gold_wire", {
description = S("Fine Gold Wire"),
inventory_image = "technic_fine_gold_wire.png",
})
minetest.register_craftitem("technic:fine_silver_wire", {
description = S("Fine Silver Wire"),
inventory_image = "technic_fine_silver_wire.png",
})
minetest.register_craftitem("technic:copper_coil", {
@ -90,11 +74,6 @@ minetest.register_craftitem("technic:copper_coil", {
inventory_image = "technic_copper_coil.png",
})
minetest.register_craftitem("technic:motor", {
description = S("Electric Motor"),
inventory_image = "technic_motor.png",
})
minetest.register_craftitem("technic:lv_transformer", {
description = S("Low Voltage Transformer"),
inventory_image = "technic_lv_transformer.png",
@ -155,6 +134,11 @@ minetest.register_node("technic:machine_casing", {
sounds = default.node_sound_stone_defaults(),
})
minetest.register_craftitem("technic:rubber_goo", {
description = S("Rubber Goo"),
inventory_image = "technic_rubber_goo.png",
})
for p = 0, 35 do
local nici = (p ~= 0 and p ~= 7 and p ~= 35) and 1 or nil
local psuffix = p == 7 and "" or p

View File

@ -25,7 +25,7 @@ Mixed Metal Ingot = Mischmetallbarren
Composite Plate = Verbundplatte
Copper Plate = Kupferplatte
Carbon Plate = Kohlefaserplatte
Graphite = Graphit
Graphite = Graphit
Carbon Cloth = Kohlefasergewebe
Raw Latex = Rohlatex
Rubber Fiber = Gummifaser
@ -42,7 +42,7 @@ Inventory move disallowed due to protection = Das Inventar ist geschuetzt, Zugri
%s Enabled =
%s Idle = %s ist bereit
%s Improperly Placed = %s ist falsch plaziert
%s Unpowered = %s hat keine Stromversorgung
%s Unpowered = %s hat keine Stromversorgung
%s Out Of Fuel = %s hat keinen Brennstoff
%s Has Bad Cabling = %s ist falsch verkabelt
%s Has No Network = %s hat kein Netzwerk
@ -67,10 +67,9 @@ Disabled =
%s Alloy Furnace = %s Legierungsofen
%s Battery Box = %s Batteriebox
%s Cable = %s Kabel
%s CNC Machine = %s CNC-Maschine
%s Compressor = %s Kompressor
%s Extractor = %s Extraktor
%s Forcefield Emitter = %s Kraftfeld-Emitter
%s Forcefield Emitter = %s Kraftfeld-Emitter
%s Furnace = %s Ofen
%s Grinder = %s Schleifmaschine
%s Music Player = %s Musikspieler
@ -106,7 +105,7 @@ Administrative World Anchor =
Charge = Aufladen
Discharge = Entladen
Power level = Energiestufe
# $1: Tier $2: current_charge $3: max_charge
# $1: Tier $2: current_charge $3: max_charge
@1 Battery Box: @2/@3 = @1 Batteriebox: @2/@3
# $1: Machine name $2: Supply $3: Demand
@1. Supply: @2 Demand: @3 = @1. Versorgung: @2 Bedarf: @3
@ -121,41 +120,6 @@ Digging finished =
Digging %d m above machine =
Digging %d m below machine =
## CNC
Cylinder = Zylinder
Element Cross = Halbes Kreuzelement
Element Cross Double = Kreuzelement
Element Edge = Halbes Eckelement
Element Edge Double = Eckelement
Element End = Halbes Endelement
Element End Double = Endelement
Element Straight = Halbes aufrechtes Element
Element Straight Double = Aufrechtes Element
Element T = Halbes T-Element
Element T Double = T-Element
Horizontal Cylinder = Liegender Zylinder
One Curved Edge Block = Block mit einer abgerundeten Kante
Pyramid = Pyramide
Slope = Schraege
Slope Edge = Schraege mit Ecke
Slope Inner Edge = Schraege mit Innenecke
Slope Lying = Liegende Schraege
Slope Upside Down = Umgedrehte Schraege
Slope Upside Down Edge = Umgedrehte Schraege mit Ecke
Slope Upside Down Inner Edge = Umgedrehte Schraege mit Innenecke
Sphere = Kugel
Spike = Spitze
Stick = Stange
Two Curved Edge Block = Block mit zwei abgerundeten Kanten
Brick = Ziegel:
Cobble = Pflasterstein:
Dirt = Erde:
Leaves = Laub:
Sandstone = Sandstein:
Stone = Stein:
Tree = Baumstamm:
Wooden = Holz:
## Grinder Recipes
# $1: Name
%s Dust = %sstaub

View File

@ -63,7 +63,6 @@ Disabled =
%s Alloy Furnace = Horno de Aleacion %s
%s Battery Box = Caja de Bateria %s
%s Cable = Cable %s
%s CNC Machine = Maquina CNC %s
%s Compressor = Compresor %s
%s Extractor = Extractor %s
%s Forcefield Emitter = Emisor de Campo de Fuerza %s
@ -102,7 +101,7 @@ Administrative World Anchor =
Charge = Cargar
Discharge = Descargar
Power level = Nivel de Poder
# $1: Tier $2: current_charge $3: max_charge
# $1: Tier $2: current_charge $3: max_charge
@1 Battery Box: @2/@3 = Caja de Bateria @1: @2/@3
# $1: Machine name $2: Supply $3: Demand
@1. Supply: @2 Demand: @3 = @1. Alimentacion: @2 Demanda: @3
@ -115,40 +114,6 @@ Digging finished =
Digging %d m above machine =
Digging %d m below machine =
## CNC Machine
Element Edge = Elemento Borde
Tree = Arbol
Element Cross Double = Elemento Cruz Doble
Spike = Pica
Element Edge Double = Elemento Borde Doble
Two Curved Edge Block = Dos Bloques de Borde Curvados
Pyramid = Piramide
Slope Upside Down Inner Edge = Borde Interno de Rampa Al Reves
Slope Upside Down Edge = Borde de Rampa Al Reves
Element Straight Double = Elemento Doble Recto
Sphere = Esfera
Element End Double = Doble Fin de Elemento
Element Straight = Recta de Elemento
Horizontal Cylinder = Cilindro Horizontal
Slope Inner Edge = Borde Interno de Rampa
One Curved Edge Block = Un Bloque de Borde Curvado
Element Cross = Cruce de Elementos
Stick = Varita
Element End = Fin de Elemento
Slope Lying = Rampa en Reposo
Slope Upside Down = Rampa Al Reves
Slope Edge = Borde de Rampa
Slope = Rampa
Element T = Elemento T
Cylinder = Cilindro
Cobble = Adoquines
Stone = Piedra
Brick = Ladrillo
Dirt = Tierra
Sandstone = Arenisca
Wooden = Madera
Leaves = Hojas
## Grinder Recipes
# $1: Name
%s Dust = Polvo de %s

View File

@ -0,0 +1,215 @@
# template.txt
# Template for translations of Technic
## Misc
[Technic] Loaded in %f seconds = [Technic] Chargement en %f secondes
## Items
Silicon Wafer = Tranche de silicium
Doped Silicon Wafer = Tranche de silicium doppée
Enriched Uranium = Uranium enrichi
Uranium Fuel = Uranium 235
Diamond Drill Head = Tête de forage en diamant
Blue Energy Crystal = Cristal d'énergie bleu
Green Energy Crystal = Cristal d'énergie vert
Red Energy Crystal = Cristal d'énergie rouge
Fine Copper Wire = Fil en cuivre fin
Fine Gold Wire = Fil en or fin
Fine Silver Wire = Fil en argent fin
Copper Coil = Bobine de cuivre
Electric Motor = Moteur électrique
Low Voltage Transformer = Transformateur basse tension
Medium Voltage Transformer = Transformateur moyenne tension
High Voltage Transformer = Transformateur haute tension
Control Logic Unit = Unité de contrôle logique
Mixed Metal Ingot = Lingot de métal allié
Composite Plate = Plaque composite
Copper Plate = Plaque de cuivre
Carbon Plate = Plaque de carbone
Graphite = Graphite
Carbon Cloth = Fibre de carbone
Raw Latex = Latex brut
Rubber Fiber = Fibre de caoutchouc
%.1f%%-Fissile Uranium Ingot = Lingot d'uranium fissile (%.1f%%)
%.1f%%-Fissile Uranium Block = Bloc d'uranium fissile (%.1f%%)
## Machine misc
Machine cannot be removed because it is not empty = La machine ne peut pas être retirée car elle n'est pas vide
Inventory move disallowed due to protection = Le mouvement d'inventaire n'est pas autorisé en raison de la protection
# $1: Machine name (Includes tier)
@1 Active (@2 EU) = @1 Active (@2 EU)
%s Active = %s actif
%s Disabled = %s désactivé
%s Enabled = %s activé
%s Idle = %s au repos
%s Improperly Placed = %s est mal placé
%s is empty = %s est vide
%s Unpowered = %s non alimenté en énergie
%s Out Of Fuel = %s plus de carburant
%s Has Bad Cabling = %s est mal cablé
%s (Slave) = %s (esclave)
%s Has No Network = %s n'a pas de réseau
%s Finished = %s a fini
Enable/Disable = Activer/Désactiver
Range = Plage
Upgrade Slots = Emplacement d'amélioration
In: = Entrée :
Out: = Sortie :
Slot %d = Emplacement %d
Itemwise = Item par Item
Stackwise = Stack par Stack
Ignoring Mesecon Signal = Ignorer le signal Mesecon
Controlled by Mesecon Signal = Contrôlé par signal Mesecon
Owner: = Propriétaire :
Unlocked = Déverrouillé
Locked = Verrouillé
Radius: = Rayon :
Enabled = Activé
Disabled = Désactivé
## Machine names
# $1: Tier
%s Alloy Furnace = Four à alliage %s
%s Battery Box = Batterie %s
%s Cable = Câble %s
%s CNC Machine = Machine-outils %s
%s Centrifuge = Centrifugeuse %s
%s Compressor = Compresseur %s
%s Extractor = Extracteur %s
%s Forcefield Emitter = Emetteur de champ de force %s
%s Furnace = Four %s
%s Grinder = Broyeur %s
%s Music Player = Grammophone %s
%s Quarry = Carrière %s
%s Tool Workshop = Atelier d'outillage %s
Arrayed Solar %s Generator = Générateur solaire %s
Fuel-Fired %s Generator = Générateur thermique %s
Geothermal %s Generator = Géénarteur géothermique %s
Hydro %s Generator = Générateur hydroélectrique %s
Nuclear %s Generator Core = Générateur nucléaire %
Small Solar %s Generator = Petit générateur solaire %s
Wind %s Generator = Générateur éolien %s
Self-Contained Injector = Injecteur autonome
Constructor Mk%d = Constructeur Mk%d
Frame = Cadre
Frame Motor = Cadre de moteur
Template = Modèle
Template (replacing) =
Template Motor =
Template Tool =
Battery Box = Compartiment à batterie
Supply Converter = Convertisseur de tension
Switching Station = Station de commutation
Fuel-Fired Alloy Furnace = Four à alliage à carburant
Fuel-Fired Furnace = Four à carburant
Wind Mill Frame = Cadre d'éolienne
Forcefield = Champ de force
Nuclear Reactor Rod Compartment = Compartiment à barres du réacteur nucléaire
Administrative World Anchor =
## Machine-specific
# $1: Pruduced EU
Charge = Charger
Discharge = Décharger
Power level = Niveau d'énergie
# $1: Tier $2: current_charge $3: max_charge
@1 Battery Box: @2/@3 = @1 batterie : @2/@3
# $1: Machine name $2: Supply $3: Demand
@1. Supply: @2 Demand: @3 = @1. fournit : @2 demande : @3
Production at %d%% = Production à %d%%
Choose Milling Program: = Choisissez le programme de fraisage :
Slim Elements half / normal height: =
Current track %s = Morceau actuel %s
Stopped = Arrêté
Keeping %d/%d map blocks loaded =
Digging not started = Creusement non démarré
Digging finished = Creusement terminé
Digging %d m above machine = Creusement à %dm au dessus de la machine
Digging %d m below machine = Creusement à %dm en dessous de la machine
@1 (@2 @3 -> @4 @5) = @1 (@2 @3 -> @4 @5)
## CNC
Cylinder =
Element Cross = Elément croisé
Element Cross Double = Elément croisé (double)
Element Edge = Elément de bordure
Element Edge Double = Elément de bordure (double)
Element End = Elément de fin
Element End Double = Elément de fin (double)
Element Straight = Elément droit
Element Straight Double = Elément droit (double)
Element T = Elément en T
Element T Double = Elément en T (double)
Horizontal Cylinder = Cylindre horizontal
One Curved Edge Block = Bloc à un bord incurvé
Pyramid = Pyramide
Slope = Pente
Slope Edge =
Slope Inner Edge =
Slope Lying =
Slope Upside Down =
Slope Upside Down Edge =
Slope Upside Down Inner Edge =
Sphere = Sphère
Spike = Pointe
Stick = Bâton
Two Curved Edge Block = Bloc à deux bords incurvés
Brick = Brique
Cobble = Pierre taillée
Dirt = Terre
Leaves = Feuilles
Sandstone = Grès
Stone = Pierre
Tree = Arbre
Wooden = Bois
## Grinder Recipes
# $1: Name
%s Dust = Poudre de %s
Akalin =
Alatro =
Arol =
Brass = Laiton
Bronze = Bronze
Carbon Steel = Acier au carbone
Cast Iron = Fonte
Chromium = Chrome
Coal = Charbon
Copper = Cuivre
Gold = Or
Mithril = Mithril
Silver = Argent
Stainless Steel = Acier inoxydable
Talinite = Talanite
Tin = Etain
Wrought Iron = Fer
Zinc = Zinc
%.1f%%-Fissile Uranium = Uranium fissile (%.1f%%)
## Tools
RE Battery = Batterie RE
Water Can = Jerrycan d'eau
Lava Can = Jerrycan de lave
Chainsaw = Tronçonneuse
Flashlight = Lampe-torche
3 nodes deep. =
3 nodes tall. =
3 nodes wide. =
3x3 nodes. =
Use while sneaking to change Mining Drill Mk%d modes. =
Mining Drill Mk%d Mode %d = Foreuse Mk%d Mode %d
Mining Drill Mk%d = Foreuse Mk%d
Mining Laser Mk%d = Foreuse laser Mk%d
Single node. = Mode simple.
Sonic Screwdriver = Tournevis supersonique
Tree Tap = Robinet à sève
## Craft descriptions
Alloy cooking = Fonderie d'alliage
Grinding = Broyage
Compressing = Compression
Extracting = Extraction
Separating = Séparation

View File

@ -64,7 +64,6 @@ Disabled = Disabilitato
%s Alloy Furnace = %s Fornace per leghe
%s Battery Box = %s Box batterie
%s Cable = Cavo %s
%s CNC Machine = Tornio CNC %s
%s Compressor = Compressore %s
%s Extractor = Estrattore %s
%s Forcefield Emitter = Emettitore di campo di forza %s
@ -118,41 +117,6 @@ Digging finished = Scavo finito
Digging %d m above machine = Scavo di %d m sopra la macchina
Digging %d m below machine = Scavo di %d m sotto la macchina
## CNC
Cylinder = Cilindro
Element Cross = Elemento a croce
Element Cross Double = Elemento a croce doppio
Element Edge = Elemento bordo
Element Edge Double = Elemento bordo doppio
Element End = Elemento finale
Element End Double = Elemento finale doppio
Element Straight = Elemento dritto
Element Straight Double = Elemento dritto doppio
Element T = Elemento a T
Element T Double = Elemento a T doppio
Horizontal Cylinder = Cilindro orizzontale
One Curved Edge Block = Blocco con bordo curvo
Pyramid = Piramide
Slope = Inclinato
Slope Edge = Bordo inclinato
Slope Inner Edge = Bordo interno inclinato
Slope Lying = Pendenza bugiarda
Slope Upside Down = Pendenza capovolta
Slope Upside Down Edge = Bordo inclinato capovolto
Slope Upside Down Inner Edge = Bordo interno inclinato capovolto
Sphere = Sfera
Spike = Spuntone
Stick = Bastone
Two Curved Edge Block = Blocco con bordo a doppia curva
Brick = Mattone
Cobble = Ciottolato
Dirt = Terra
Leaves = Foglie
Sandstone = Arenaria
Stone = Pietra
Tree = Albero
Wooden = Legno
## Grinder Recipes
# $1: Name
%s Dust = Polvere di %s

View File

@ -0,0 +1,175 @@
# Polish Translation for Technic mod
# Polskie tłumaczenie Technic mod
# by mat9117
## Misc
[Technic] Loaded in %f seconds = [Technic] Wczytany w %f sekund
## Items
Silicon Wafer = Płytka krzemowa
Doped Silicon Wafer = Domieszkowana płytka krzemowa
Enriched Uranium = Wzbogacony uran
Uranium Fuel = Paliwo uranowe
Diamond Drill Head = Diamentowa głowica wiertła
Blue Energy Crystal = Niebieski kryształ energii
Green Energy Crystal = Zielony kryształ energii
Red Energy Crystal = Czerwony kryształ energii
Fine Copper Wire = Cienki miedziany drut
Copper Coil = Miedziana cewka
Electric Motor = Silnik elektryczny
Low Voltage Transformer = Transformator niskiego napięcia
Medium Voltage Transformer = Transformator średniego napięcia
High Voltage Transformer = Transformator wysokiego napięcia
Control Logic Unit = Jednostka sterująca
Mixed Metal Ingot = Sztabka zmieszanych metali
Composite Plate = Płytka kompozytowa
Copper Plate = Płytka miedziana
Carbon Plate = Płytka węglowa
Graphite = Grafit
Carbon Cloth = Włókno węglowe
Raw Latex = Lateks naturalny
Rubber Fiber = Włókno gumowe
%.1f%%-Fissile Uranium Ingot = %.1f%% Sztabka uranu
%.1f%%-Fissile Uranium Block = %.1f%% Blok uranu
## Machine misc
Machine cannot be removed because it is not empty = Nie można usunąć maszyny, ponieważ nie jest pusta
Inventory move disallowed due to protection = Przenoszenie rzeczy z ekwipunku niemożliwe z powodu ochrony
# $1: Machine name (Includes tier)
@1 Active (@2 EU) = @1 Aktywny (@2 EU)
%s Active = %s Aktywny/a
%s Disabled = %s Wyłączony/a
%s Enabled = %s Włączony/a
%s Idle = %s Bezczynny/a
%s Improperly Placed = %s Ustawiony/a nieprawidłowo
%s is empty = %s jest pusty/a
%s Unpowered = %s brak zasilania
%s Out Of Fuel = %s brak paliwa
%s Has Bad Cabling = %s Źle podłączono kable
%s (Slave) =
%s Has No Network = %s Nie podłączony/a do sieci
%s Finished = %s Ukończony
Enable/Disable = Włącz/Wyłącz
Range = Zasięg
Upgrade Slots = Miejsca na ulepszenia
In: = Wejście
Out: = Wyjście
Slot %d = Otwór %d
Itemwise = Jeden przedmiot
Stackwise = Cały stack
Ignoring Mesecon Signal = Ignoruj sygnał Mesecon
Controlled by Mesecon Signal = Sterowany sygnałem Mesecon
Owner: = Właściciel:
Unlocked = Odblokowany/a
Locked = Zablokowany/a
Radius: = Promień:
Enabled = Włączony/a
Disabled = Wyłączony/a
## Machine names
# $1: Tier
%s Alloy Furnace = %s Piec stopowy
%s Battery Box = %s Skrzynka baterii
%s Cable = %s Przewód
%s Centrifuge = %s Centryfuga
%s Compressor = %s Kompresor
%s Extractor = %s Ekstraktor
%s Forcefield Emitter = %s Emiter pola siłowego
%s Furnace = %s Piec
%s Grinder = %s Młynek
%s Music Player = %s Odtwarzacz muzyki
%s Quarry = %s Kamieniołom
%s Tool Workshop = %s Warsztat narzędzi
Arrayed Solar %s Generator = %s Szeregowy generator słoneczny
Fuel-Fired %s Generator = %s Generator zasilany paliwem
Geothermal %s Generator = %s Generator geotermalny
Hydro %s Generator = %s Hydrogenerator
Nuclear %s Generator Core = %s Reaktor atomowy
Small Solar %s Generator = %s Mały generator słoneczny
Wind %s Generator = %s Generator wiatrowy
Self-Contained Injector = Samowystarczalny wtryskiwacz
Constructor Mk%d = Konstruktor Mk%d
Frame = Klatka
Frame Motor = Silnik klatkowy
Template = Szablon
Template (replacing) = Szablon (zastępczy)
Template Motor =Szablon silnika
Template Tool = Szablon narzędzia
Battery Box = Skrzynka baterii
Supply Converter = Konwerter zasilania
Switching Station = Rozdzielnia
Fuel-Fired Alloy Furnace = Piec stopowy zasilany paliwem
Fuel-Fired Furnace = Piec zasilany paliwem
Wind Mill Frame = Klatka wiatraka
Forcefield = Pole siłowe
Nuclear Reactor Rod Compartment = Komora rdzenia reaktora atomowego
Administrative World Anchor = Administracyjna kotwica świata
## Machine-specific
# $1: Pruduced EU
Charge = Ładuj
Discharge = Rozładuj
Power level = Poziom zasilania
# $1: Tier $2: current_charge $3: max_charge
@1 Battery Box: @2/@3 = @1 Skrzynka baterii: @2/@3
# $1: Machine name $2: Supply $3: Demand
@1. Supply: @2 Demand: @3 = @1. Zapas: @2 Pobór: @3
Production at %d%% = Produkowanie w %d%%
Choose Milling Program: = Wybierz program mielenia:
Slim Elements half / normal height: = Małe elementy połowa / normalna wysokość:
Current track %s =
Stopped = Zatrzymany/a
Keeping %d/%d map blocks loaded = Ciągle ładuję %d/%d bloki mapy
Digging not started = Nie rozpoczęto kopania
Digging finished = Kopanie skończone
Digging %d m above machine = Kopię %d m nad maszyną
Digging %d m below machine = Kopię %d m pod maszyną
@1 (@2 @3 -> @4 @5) = @1 (@2 @3 -> @4 @5)
## Grinder Recipes
# $1: Name
%s Dust = %s Pył
Akalin = Akalinowy
Alatro = Alatrowy
Arol = Arolowy
Brass = Mosiądzu
Bronze = Brązu
Carbon Steel = Stali węglowej
Cast Iron = Żeliwa
Chromium = Chromu
Coal = Węglowy
Copper = Miedzi
Gold = Złoty
Mithril = Mithrilu
Silver = Srebrny
Stainless Steel = Stali nierdzewnej
Talinite = Talinitu
Tin = Cyny
Wrought Iron = Kutego żelaza
Zinc = Cynku
%.1f%%-Fissile Uranium = %.1f%% Uranu
## Tools
RE Battery = Bateria ładowalna
Water Can = Kanister wody
Lava Can = Kanister lawy
Chainsaw = Piła łańcuchowa
Flashlight = Latarka
3 nodes deep. = Głęboki na 3 bloki.
3 nodes tall. = Wysoki na 3 bloki.
3 nodes wide. = Szeroki na 3 bloki.
3x3 nodes. = 3x3 bloki.
Use while sneaking to change Mining Drill Mk%d modes. = Użyj podczas skradania, aby zmienić tryby wiertła górniczego Mk%d
Mining Drill Mk%d Mode %d = Tryb wiertła górniczego Mk%d
Mining Drill Mk%d = Wiertło górnicze Mk%d
Mining Laser Mk%d = Laser górniczy Mk%d
Single node. = Pojedynczy blok.
Sonic Screwdriver = Dźwiękowy śrubokręt
Tree Tap = Nacinak drzewny
## Craft descriptions
Alloy cooking = Stapianie
Grinding = Mielenie
Compressing = Kompresowanie
Extracting = Ekstrakcja
Separating = Oddzielanie

View File

@ -0,0 +1,211 @@
# Braziliam portuguese translation for technic
# Tradução portuguesa brasileira para technic
# By Sires
## Misc
[Technic] Loaded in %f seconds = [Technic] Carregado em %f segundos
## Items
Silicon Wafer = Pastilha de Silício
Doped Silicon Wafer = Pastilha de Silício Dopada
Enriched Uranium = Urânio Enriquecido
Uranium Fuel = Combustivel de Urânio
Diamond Drill Head = Cabeça de Broca de Diamante
Blue Energy Crystal = Cristal de Energia Azul
Green Energy Crystal = Cristal de Energia Verde
Red Energy Crystal = Cristal de Energia Vermelho
Fine Copper Wire = Fio Fino de Cobre
Copper Coil = Bobina de Cobre
Electric Motor = Motor Elétrico
Low Voltage Transformer = Transformador de Baixa Voltagem
Medium Voltage Transformer = Transformador de Média Voltagem
High Voltage Transformer = Transformador de Alta Voltagem
Control Logic Unit = Unidade de Controle Lógico
Mixed Metal Ingot = Lingote de Metal Misturado
Composite Plate = Placa Composta
Copper Plate = Placa de Cobre
Carbon Plate = Placa de Carbono
Graphite = Grafite
Carbon Cloth = Recido de Carbono
Raw Latex = Latex bruto
Rubber Fiber = Fibra de Borracha
%.1f%%-Fissile Uranium Ingot = Lingote de Urânio %.1f%%-Físsil
%.1f%%-Fissile Uranium Block = Bloco de Urânio %.1f%%-Físsil
## Machine Misc
Machine cannot be removed because it is not empty = A máquina não pode ser removida porque ela não está vazia
Inventory move disallowed due to protection = Movimento de inventário não permitido pela proteção
# $1: Machine name (includes tier)
@1 Active (@2 EU) = @1 Ativo (@2 EU)
%s Active = %s Ativo
%s Disabled = %s Ativado
%s Enabled = %s Desativado
%s Idle = Ócio
%s Improperly Placed = %s Colocado Inapropriadamente
%s is empty = %s está vazio
%s Unpowered = %s Sem energia
%s Out Of Fuel = %s Sem Combustível
%s Has Bad Cabling = %s Tem Cabeamento Ruim
%s (Slave) = %s (Servo)
%s Has No Network = %s Não Tem Rede
%s Finished = %s Acabou
Enable/Disable = Ativar/Desativar
Range = Alcance
Upgrade Slots = Lugares para Melhoria
In: = Entrada:
Out: = Saída:
Slot %d = Lugar %d
Itemwise = Por item
Stackwise = Por pilha
Ignoring Mesecon Signal = Ignorar Sinaal de Mesecon
Controlled by Mesecon Signal = Controlado por Sinal de Mesecon
Owner: = Dono:
Unlocked = Destravado
Locked = Travado
Radius: = Raio:
Enabled = Ativado
Disabled = Desativado
## Machine names
# $1: Tier
%s Alloy Furnace = Fornalha de Liga %s
%s Battery Box = Caixa de Bateria %s
%s Cable = Cabo %s
%s CNC Machine = Máquina CNC %s
%s Centrifuge = Centrifuga %s
%s Compressor = Compresso %s
%s Extractor = Extrator %s
%s Forcefield Emitter = Emissor de Campo de Força %s
%s Furnace = Fornalha %s
%s Grinder = Triturador %s
%s Music Player = Tocador de Música %s
%s Quarry = Pedreira %s
%s Tool Workshop = Oficina de Ferramentas %s
Arrayed Solar %s Generator = Gerador Solar Equipado %s
Fuel-Fired %s Generator = Gerador Alimentado-por-Combustível %s
Geothermal %s Generator = Gerador Geotermal %s
Hydro %s Generator = Gerador Hidráulico %s
Nuclear %s Generator Core = Núcleo de Gerador Nuclear %s
Small Solar %s Generator = Gerador Solar Pequeno %s
Wind %s Generator = Gerador de Energia Eólica %s
Self-Contained Injector = Injetor Auto-Contido
Constructor Mk%d = Construtor Nv%d
Frame = Armação
Frame Motor = Motor de Armação
Template = Modelo
Template (replacing) = Modelo (recolocando)
Template Motor = Modelo de Motor
Template Tool = Modelo de Ferramenta
Battery Box = Caixa de Bateria
Supply Converter = Conversor de Energia
Switching Station = Estação de Comutação
Fuel-Fired Alloy Furnace = Fornalha de Liga Alimentada-por-Combustível
Fuel-Fired Furnace = Fornalha Alimentada-por-Combustível
Wind Mill Frame = Armação de Moinho de Vento
Forcefield = Campo de Força
Nuclear Reactor Rod Compartment = Compartimento de Barra do Reator Nuclear
Administrative World Anchor = Âncora de Mundo Administrativa
## Machine-specific
# $1: Pruduced EU
Charge = Carregar
Discharge = Descarregar
Power level = Nível de Energia
# $1: Tier $2: current_charge $3: max_charge
@1 Battery Box: @2/@3 = Caixa de Baterias @1: @2/@3
# $1: Machine name $2: Supply $3: Demand
@1. Supply: @2 Demand: @3 = @1. Suprimento: @2 Demanda: @3
Production at %d%% = Produção em %d%%
Choose Milling Program: = Escolha o Programa de Serragem:
Slim Elements half / normal height: = Metade de Elementos Finos / altura normal:
Current track %s = Música Atual %s
Stopped = Parado
Keeping %d/%d map blocks loaded = Mantendo %d/%d blocos de mapa carregados
Digging not started = Escavação não começada
Digging finished = Escavação terminada
Digging %d m above machine = Escavando %d m acima da máquina
Digging %d m below machine = Escavando %d m abaixo da máquina
@1 (@2 @3 -> @4 @5) = @1 (@2 @3 -> @4 @5)
## CNC
Cylinder = Cilindro
Element Cross = Cruz do Elemento
Element Cross Double = Cruz Dupla do Elemento
Element Edge = Borda do Elemento
Element Edge Double = Borda Dupla do Elemento
Element End = Final do Elemento
Element End Double = Final Duplo do Elemento
Element Straight = Elemento Contínuo
Element Straight Double = Elemento Contínuo duplo
Element T = Elemento em T
Element T Double = Elemento em T Duplo
Horizontal Cylinder = Cilindro Horizontal
One Curved Edge Block = Uma Borda de Bloco Curvada
Pyramid = Pirâmide
Slope = Ladeira
Slope Edge = Canto de Ladeira
Slope Inner Edge = Canto de Dentro de Ladeira
Slope Lying = Ladeira Deitada
Slope Upside Down = Ladeira de Cabeça para Baixo
Slope Upside Down Edge = Cande de Ladeira de Cabeça para Baixo
Slope Upside Down Inner Edge = Canto de Dentro de Ladeira de Cabeça para Baixo
Sphere = Esfera
Spike = Espinho
Stick = Graveto
Two Curved Edge Block = Bloco de Duas Bordas Curvadas
Brick = Tijolo
Cobble = Pedregulho
Dirt = Terra
Leaves = Folhas
Sandstone = Arenito
Stone = Pedra
Tree = Árvore
Wooden = de Madeira
## Grinder Recipes
# $1: Name
%s Dust = Pó de %s
Akalin = Akalin
Alatro = Alatro
Arol = Arol
Brass = Latão
Bronze = Bronze
Carbon Steel = Aço Carbono
Cast Iron = Ferro Fundido
Chromium = Crômio
Coal = Carvão
Copper = Cobre
Gold = Ouro
Mithril = Mithril
Silver = Prata
Stainless Steel = Aço Inoxidável
Talinite = Talinite
Tin = Estanho
Wrought Iron = Ferro Forjado
Zinc = Zinco
%.1f%%-Fissile Uranium = Urânio %.1f%%-Físsil
## Tools
RE Battery = Bateria RE
Water Can = Lata de Água
Lava Can = Lata de Lava
Chainsaw = Motosserra
Flashlight = Lanterna
3 nodes deep. = 3 nodes de profundidade.
3 nodes tall. = 3 nodes de altura.
3 nodes wide. = 3 nodes de largura.
3x3 nodes. = 3x3 nodes.
Use while sneaking to change Mining Drill Mk%d modes. = Use enquanto esgueirando para mudar os modos da Broca de Mineração Nv%d.
Mining Drill Mk%d Mode %d = Broca de Mineração Nv%d Modo %d
Mining Drill Mk%d = Broca de Mineração Nv%d
Mining Laser Mk%d = Laser de Mineração Nv%d
Single node. = Unico node.
Sonic Screwdriver = Chave de Fenda Sônica.
Tree Tap = Torneira de Árvore
## Craft descriptions
Alloy cooking = Cozinhando em liga
Grinding = Triturando
Compressing = Comprimindo
Extracting = Extraindo
Separating = Separando

View File

@ -15,6 +15,8 @@ Blue Energy Crystal =
Green Energy Crystal =
Red Energy Crystal =
Fine Copper Wire =
Fine Gold Wire =
Fine Silver Wire =
Copper Coil =
Electric Motor =
Low Voltage Transformer =
@ -71,7 +73,6 @@ Disabled =
%s Alloy Furnace =
%s Battery Box =
%s Cable =
%s CNC Machine =
%s Centrifuge =
%s Compressor =
%s Extractor =
@ -111,7 +112,7 @@ Administrative World Anchor =
Charge =
Discharge =
Power level =
# $1: Tier $2: current_charge $3: max_charge
# $1: Tier $2: current_charge $3: max_charge
@1 Battery Box: @2/@3 =
# $1: Machine name $2: Supply $3: Demand
@1. Supply: @2 Demand: @3 =
@ -127,40 +128,6 @@ Digging %d m above machine =
Digging %d m below machine =
@1 (@2 @3 -> @4 @5) =
## CNC
Cylinder =
Element Cross =
Element Cross Double =
Element Edge =
Element Edge Double =
Element End =
Element End Double =
Element Straight =
Element Straight Double =
Element T =
Element T Double =
Horizontal Cylinder =
One Curved Edge Block =
Pyramid =
Slope =
Slope Edge =
Slope Inner Edge =
Slope Lying =
Slope Upside Down =
Slope Upside Down Edge =
Slope Upside Down Inner Edge =
Sphere =
Spike =
Stick =
Two Curved Edge Block =
Brick =
Cobble =
Dirt =
Leaves =
Sandstone =
Stone =
Tree =
Wooden =
## Grinder Recipes
# $1: Name

View File

@ -6,7 +6,7 @@ minetest.register_craft({
{'technic:mv_cable', 'technic:mv_cable', 'technic:mv_cable'},
{'homedecor:plastic_sheeting', 'homedecor:plastic_sheeting', 'homedecor:plastic_sheeting'},
}
})
})
technic.register_cable("HV", 3/16)

View File

@ -17,7 +17,7 @@ local cable_entry = "^technic_cable_connection_overlay.png"
minetest.register_craft({
output = "technic:forcefield_emitter_off",
recipe = {
{"default:mese", "technic:motor", "default:mese" },
{"default:mese", "basic_materials:motor", "default:mese" },
{"technic:deployer_off", "technic:machine_casing", "technic:deployer_off"},
{"default:mese", "technic:hv_cable", "default:mese" },
}
@ -42,7 +42,7 @@ end)
-- | |
-- \___/\___/
local function update_forcefield(pos, meta, active, first)
local function update_forcefield(pos, meta, active)
local shape = meta:get_int("shape")
local range = meta:get_int("range")
local vm = VoxelManip()
@ -86,11 +86,6 @@ local function update_forcefield(pos, meta, active, first)
vm:set_data(data)
vm:update_liquids()
vm:write_to_map()
-- update_map is very slow, but if we don't call it we'll
-- get phantom blocks on the client.
if not active or first then
vm:update_map()
end
end
local function set_forcefield_formspec(meta)
@ -126,6 +121,12 @@ local function set_forcefield_formspec(meta)
end
local forcefield_receive_fields = function(pos, formname, fields, sender)
local player_name = sender:get_player_name()
if minetest.is_protected(pos, player_name) then
minetest.chat_send_player(player_name, "You are not allowed to edit this!")
minetest.record_protection_violation(pos, player_name)
return
end
local meta = minetest.get_meta(pos)
local range = nil
if fields.range then
@ -273,13 +274,11 @@ local function run(pos, node)
technic.swap_node(pos, "technic:forcefield_emitter_off")
end
elseif eu_input >= power_requirement then
local first = false
if node.name == "technic:forcefield_emitter_off" then
first = true
technic.swap_node(pos, "technic:forcefield_emitter_on")
meta:set_string("infotext", S("%s Active"):format(machine_name))
end
update_forcefield(pos, meta, true, first)
update_forcefield(pos, meta, true)
end
end

View File

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

View File

@ -7,7 +7,7 @@ local cable_entry = "^technic_cable_connection_overlay.png"
minetest.register_craft({
recipe = {
{"technic:carbon_plate", "pipeworks:filter", "technic:composite_plate"},
{"technic:motor", "technic:machine_casing", "technic:diamond_drill_head"},
{"basic_materials:motor", "technic:machine_casing", "technic:diamond_drill_head"},
{"technic:carbon_steel_block", "technic:hv_cable", "technic:carbon_steel_block"}},
output = "technic:quarry",
})
@ -60,6 +60,12 @@ local function set_quarry_demand(meta)
end
local function quarry_receive_fields(pos, formname, fields, sender)
local player_name = sender:get_player_name()
if minetest.is_protected(pos, player_name) then
minetest.chat_send_player(player_name, "You are not allowed to edit this!")
minetest.record_protection_violation(pos, player_name)
return
end
local meta = minetest.get_meta(pos)
if fields.size and string.find(fields.size, "^[0-9]+$") then
local size = tonumber(fields.size)
@ -112,6 +118,11 @@ local function quarry_run(pos, node)
if meta:get_int("enabled") and meta:get_int("HV_EU_input") >= quarry_demand and meta:get_int("purge_on") == 0 then
local pdir = minetest.facedir_to_dir(node.param2)
if pdir.y ~= 0 then
-- faces up or down, not valid, otherwise depth-check would run endless and hang up the server
return
end
local qdir = pdir.x == 1 and vector.new(0,0,-1) or
(pdir.z == -1 and vector.new(-1,0,0) or
(pdir.x == -1 and vector.new(0,0,1) or
@ -124,7 +135,7 @@ local function quarry_run(pos, node)
vector.multiply(qdir, -radius))
local owner = meta:get_string("owner")
local nd = meta:get_int("dug")
while nd ~= diameter*diameter * (quarry_dig_above_nodes+1+quarry_max_depth) do
while nd < diameter*diameter * (quarry_dig_above_nodes+1+quarry_max_depth) do
local ry = math.floor(nd / (diameter*diameter))
local ndl = nd % (diameter*diameter)
if ry % 2 == 1 then
@ -146,15 +157,9 @@ local function quarry_run(pos, node)
dignode = technic.get_or_load_node(digpos) or minetest.get_node(digpos)
local dignodedef = minetest.registered_nodes[dignode.name] or {diggable=false}
-- doors mod among other thing does NOT like a nil digger...
local fakedigger = {
get_player_name = function()
return "!technic_quarry_fake_digger"
end,
is_player = function() return false end,
get_wielded_item = function()
return ItemStack("air")
end,
}
local fakedigger = pipeworks.create_fake_player({
name = owner
})
if not dignodedef.diggable or (dignodedef.can_dig and not dignodedef.can_dig(digpos, fakedigger)) then
can_dig = false
end

View File

@ -8,7 +8,7 @@ minetest.register_craft({
{'default:copper_ingot', 'default:copper_ingot', 'default:copper_ingot'},
{'default:paper', 'default:paper', 'default:paper'},
}
})
})
technic.register_cable("LV", 2/16)

View File

@ -1,91 +0,0 @@
-- REGISTER MATERIALS AND PROPERTIES FOR NONCUBIC ELEMENTS:
-----------------------------------------------------------
local S = technic.getter
-- DIRT
-------
technic.cnc.register_all("default:dirt",
{snappy=2,choppy=2,oddly_breakable_by_hand=3,not_in_creative_inventory=1},
{"default_grass.png", "default_dirt.png", "default_grass.png"},
S("Dirt"))
-- WOOD
-------
technic.cnc.register_all("default:wood",
{snappy=2, choppy=2, oddly_breakable_by_hand=2, not_in_creative_inventory=1},
{"default_wood.png"},
S("Wooden"))
-- STONE
--------
technic.cnc.register_all("default:stone",
{cracky=3, not_in_creative_inventory=1},
{"default_stone.png"},
S("Stone"))
-- COBBLE
---------
technic.cnc.register_all("default:cobble",
{cracky=3, not_in_creative_inventory=1},
{"default_cobble.png"},
S("Cobble"))
-- BRICK
--------
technic.cnc.register_all("default:brick",
{cracky=3, not_in_creative_inventory=1},
{"default_brick.png"},
S("Brick"))
-- SANDSTONE
------------
technic.cnc.register_all("default:sandstone",
{crumbly=2, cracky=3, not_in_creative_inventory=1},
{"default_sandstone.png"},
S("Sandstone"))
-- LEAVES
---------
technic.cnc.register_all("default:leaves",
{snappy=2, choppy=2, oddly_breakable_by_hand=3, not_in_creative_inventory=1},
{"default_leaves.png"},
S("Leaves"))
-- TREE
-------
technic.cnc.register_all("default:tree",
{snappy=1, choppy=2, oddly_breakable_by_hand=2, flammable=3, wood=1, not_in_creative_inventory=1},
{"default_tree.png"},
S("Tree"))
-- WROUGHT IRON
---------------
technic.cnc.register_all("default:steelblock",
{cracky=1, level=2, not_in_creative_inventory=1},
{"technic_wrought_iron_block.png"},
S("Wrought Iron"))
-- Bronze
--------
technic.cnc.register_all("default:bronzeblock",
{cracky=1, level=2, not_in_creative_inventory=1},
{"default_bronze_block.png"},
S("Bronze"))
-- Stainless Steel
--------
technic.cnc.register_all("technic:stainless_steel_block",
{cracky=1, level=2, not_in_creative_inventory=1},
{"technic_stainless_steel_block.png"},
S("Stainless Steel"))
-- Marble
------------
technic.cnc.register_all("technic:marble",
{cracky=3, not_in_creative_inventory=1},
{"technic_marble.png"},
S("Marble"))
-- Granite
------------
technic.cnc.register_all("technic:granite",
{cracky=1, not_in_creative_inventory=1},
{"technic_granite.png"},
S("Granite"))

View File

@ -4,10 +4,14 @@ minetest.register_alias("compressor", "technic:lv_compressor")
minetest.register_craft({
output = 'technic:lv_compressor',
recipe = {
{'default:stone', 'technic:motor', 'default:stone'},
{'default:stone', 'basic_materials:motor', 'default:stone'},
{'mesecons:piston', 'technic:machine_casing', 'mesecons:piston'},
{'technic:fine_silver_wire', 'technic:lv_cable', 'technic:fine_silver_wire'},
}
{'basic_materials:silver_wire', 'technic:lv_cable', 'basic_materials:silver_wire'},
},
replacements = {
{"basic_materials:silver_wire", "basic_materials:empty_spool"},
{"basic_materials:silver_wire", "basic_materials:empty_spool"}
},
})
technic.register_compressor({tier = "LV", demand = {300}, speed = 1})

View File

@ -4,7 +4,7 @@ minetest.register_alias("extractor", "technic:lv_extractor")
minetest.register_craft({
output = 'technic:lv_extractor',
recipe = {
{'technic:treetap', 'technic:motor', 'technic:treetap'},
{'technic:treetap', 'basic_materials:motor', 'technic:treetap'},
{'technic:treetap', 'technic:machine_casing', 'technic:treetap'},
{'', 'technic:lv_cable', ''},
}

View File

@ -11,19 +11,23 @@ minetest.register_craft({
output = 'technic:geothermal',
recipe = {
{'technic:granite', 'default:diamond', 'technic:granite'},
{'technic:fine_copper_wire', 'technic:machine_casing', 'technic:fine_copper_wire'},
{'basic_materials:copper_wire', 'technic:machine_casing', 'basic_materials:copper_wire'},
{'technic:granite', 'technic:lv_cable', 'technic:granite'},
}
},
replacements = {
{"basic_materials:copper_wire", "basic_materials:empty_spool"},
{"basic_materials:copper_wire", "basic_materials:empty_spool"}
},
})
minetest.register_craftitem("technic:geothermal", {
description = S("Geothermal %s Generator"):format("LV"),
})
})
local check_node_around = function(pos)
local node = minetest.get_node(pos)
if node.name == "default:water_source" or node.name == "default:water_flowing" then return 1 end
if node.name == "default:lava_source" or node.name == "default:lava_flowing" then return 2 end
if node.name == "default:lava_source" or node.name == "default:lava_flowing" then return 2 end
return 0
end

View File

@ -22,8 +22,3 @@ dofile(path.."/extractor.lua")
dofile(path.."/compressor.lua")
dofile(path.."/music_player.lua")
dofile(path.."/cnc.lua")
dofile(path.."/cnc_api.lua")
dofile(path.."/cnc_nodes.lua")

View File

@ -24,7 +24,6 @@ local run = function(pos, node)
local meta = minetest.get_meta(pos)
local eu_input = meta:get_int("LV_EU_input")
local machine_name = S("%s Music Player"):format("LV")
local machine_node = "technic:music_player"
local demand = 150
local current_track = meta:get_int("current_track")

View File

@ -9,9 +9,9 @@ minetest.register_craft({
output = 'technic:solar_panel',
recipe = {
{'technic:doped_silicon_wafer', 'technic:doped_silicon_wafer', 'technic:doped_silicon_wafer'},
{'technic:fine_silver_wire', 'technic:lv_cable', 'mesecons_materials:glue'},
}
{'basic_materials:silver_wire', 'technic:lv_cable', 'mesecons_materials:glue'},
},
replacements = { {"basic_materials:silver_wire", "basic_materials:empty_spool"}, },
})
@ -35,7 +35,8 @@ local run = function(pos, node)
local charge_to_give = math.floor((light + pos1.y) * 3)
charge_to_give = math.max(charge_to_give, 0)
charge_to_give = math.min(charge_to_give, 200)
meta:set_string("infotext", S("@1 Active (@2 EU)", machine_name, technic.pretty_num(charge_to_give)))
meta:set_string("infotext", S("@1 Active (@2)", machine_name,
technic.EU_string(charge_to_give)))
meta:set_int("LV_EU_supply", charge_to_give)
else
meta:set_string("infotext", S("%s Idle"):format(machine_name))
@ -50,11 +51,11 @@ minetest.register_node("technic:solar_panel", {
technic_machine=1, technic_lv=1},
connect_sides = {"bottom"},
sounds = default.node_sound_wood_defaults(),
description = S("Small Solar %s Generator"):format("LV"),
description = S("Small Solar %s Generator"):format("LV"),
active = false,
drawtype = "nodebox",
paramtype = "light",
is_ground_content = true,
is_ground_content = true,
node_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5},

View File

@ -1,6 +1,6 @@
-- A water mill produces LV EUs by exploiting flowing water across it
-- It is a LV EU supplyer and fairly low yield (max 120EUs)
-- It is a little under half as good as the thermal generator.
-- It is a LV EU supplier and fairly low yield (max 180EUs)
-- It is a little over half as good as the thermal generator.
local S = technic.getter
@ -29,11 +29,9 @@ end
local run = function(pos, node)
local meta = minetest.get_meta(pos)
local water_flow = 0
local lava_nodes = 0
local production_level = 0
local eu_supply = 0
local max_output = 35 * 45 -- four param2's at 15 makes 60, cap it lower for "overload protection"
-- (plus we want the gen to report 100% if three sides have full flow)
local production_level
local eu_supply
local max_output = 4 * 45 -- keeping it around 180, little more than previous 150 :)
local positions = {
{x=pos.x+1, y=pos.y, z=pos.z},
@ -49,7 +47,7 @@ local run = function(pos, node)
end
end
eu_supply = math.min(35 * water_flow, max_output)
eu_supply = math.min(4 * water_flow, max_output)
production_level = math.floor(100 * eu_supply / max_output)
meta:set_int("LV_EU_supply", eu_supply)

View File

@ -8,7 +8,7 @@ minetest.register_craft({
{'technic:lv_cable', 'technic:lv_cable', 'technic:lv_cable'},
{'technic:rubber', 'technic:rubber', 'technic:rubber'},
}
})
})
technic.register_cable("MV", 2.5/16)

View File

@ -1,7 +1,7 @@
minetest.register_craft({
output = "technic:mv_centrifuge",
recipe = {
{"technic:motor", "technic:copper_plate", "technic:diamond_drill_head"},
{"basic_materials:motor", "technic:copper_plate", "technic:diamond_drill_head"},
{"technic:copper_plate", "technic:machine_casing", "technic:copper_plate" },
{"pipeworks:one_way_tube", "technic:mv_cable", "pipeworks:mese_filter" },
}

View File

@ -0,0 +1,12 @@
-- MV freezer
minetest.register_craft({
output = 'technic:mv_freezer',
recipe = {
{'technic:stainless_steel_ingot', 'technic:motor', 'technic:stainless_steel_ingot'},
{'pipeworks:pipe_1_empty', 'technic:mv_transformer', 'pipeworks:pipe_1_empty'},
{'technic:stainless_steel_ingot', 'technic:mv_cable', 'technic:stainless_steel_ingot'},
}
})
technic.register_freezer({tier = "MV", demand = {800, 600, 400}, speed = 0.5, upgrade = 1, tube = 1})

View File

@ -0,0 +1,105 @@
-- A Hydro Turbine produces MV EUs by exploiting flowing water across it
-- It is a MV EU supplier and fairly high yield (max 1800EUs)
local S = technic.getter
local cable_entry = "^technic_cable_connection_overlay.png"
minetest.register_alias("hydro_turbine", "technic:hydro_turbine")
minetest.register_craft({
output = 'technic:hydro_turbine',
recipe = {
{'technic:stainless_steel_ingot', 'technic:water_mill', 'technic:stainless_steel_ingot'},
{'technic:water_mill', 'technic:mv_transformer', 'technic:water_mill'},
{'technic:stainless_steel_ingot', 'technic:mv_cable', 'technic:stainless_steel_ingot'},
}
})
local function get_water_flow(pos)
local node = minetest.get_node(pos)
if minetest.get_item_group(node.name, "water") == 3 and string.find(node.name, "flowing") then
return node.param2 -- returns approx. water flow, if any
end
return 0
end
---
-- 10 times better than LV hydro because of 2 extra water mills and 4 stainless steel, a transformer and whatnot ;P.
-- Man hydro turbines are tough and long lasting. So, give it some value :)
local run = function(pos, node)
local meta = minetest.get_meta(pos)
local water_flow = 0
local production_level
local eu_supply
local max_output = 40 * 45 -- Generates 1800EU/s
local positions = {
{x=pos.x+1, y=pos.y, z=pos.z},
{x=pos.x-1, y=pos.y, z=pos.z},
{x=pos.x, y=pos.y, z=pos.z+1},
{x=pos.x, y=pos.y, z=pos.z-1},
}
for _, p in pairs(positions) do
water_flow = water_flow + get_water_flow(p)
end
eu_supply = math.min(40 * water_flow, max_output)
production_level = math.floor(100 * eu_supply / max_output)
meta:set_int("MV_EU_supply", eu_supply)
meta:set_string("infotext",
S("Hydro %s Generator"):format("MV").." ("..production_level.."%)")
if production_level > 0 and
minetest.get_node(pos).name == "technic:hydro_turbine" then
technic.swap_node(pos, "technic:hydro_turbine_active")
meta:set_int("MV_EU_supply", 0)
return
end
if production_level == 0 then
technic.swap_node(pos, "technic:hydro_turbine")
end
end
minetest.register_node("technic:hydro_turbine", {
description = S("Hydro %s Generator"):format("MV"),
tiles = {
"technic_hydro_turbine_top.png",
"technic_machine_bottom.png"..cable_entry,
"technic_hydro_turbine_side.png",
"technic_hydro_turbine_side.png",
"technic_hydro_turbine_side.png",
"technic_hydro_turbine_side.png"
},
paramtype2 = "facedir",
groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2,
technic_machine=1, technic_mv=1},
legacy_facedir_simple = true,
sounds = default.node_sound_wood_defaults(),
on_construct = function(pos)
local meta = minetest.get_meta(pos)
meta:set_string("infotext", S("Hydro %s Generator"):format("MV"))
meta:set_int("MV_EU_supply", 0)
end,
technic_run = run,
})
minetest.register_node("technic:hydro_turbine_active", {
description = S("Hydro %s Generator"):format("MV"),
tiles = {"technic_hydro_turbine_top_active.png", "technic_machine_bottom.png",
"technic_hydro_turbine_side.png", "technic_hydro_turbine_side.png",
"technic_hydro_turbine_side.png", "technic_hydro_turbine_side.png"},
paramtype2 = "facedir",
groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2,
technic_machine=1, technic_mv=1, not_in_creative_inventory=1},
legacy_facedir_simple = true,
sounds = default.node_sound_wood_defaults(),
drop = "technic:hydro_turbine",
technic_run = run,
technic_disabled_machine_name = "technic:hydro_turbine",
})
technic.register_machine("MV", "technic:hydro_turbine", technic.producer)
technic.register_machine("MV", "technic:hydro_turbine_active", technic.producer)

View File

@ -13,6 +13,7 @@ if technic.config:get_bool("enable_wind_mill") then
end
dofile(path.."/generator.lua")
dofile(path.."/solar_array.lua")
dofile(path.."/hydro_turbine.lua")
-- Machines
dofile(path.."/alloy_furnace.lua")
@ -24,6 +25,8 @@ dofile(path.."/centrifuge.lua")
dofile(path.."/tool_workshop.lua")
dofile(path.."/freezer.lua")
-- The power radiator supplies appliances with inductive coupled power:
-- Lighting and associated textures is taken directly from VanessaE's homedecor and made electric.
-- This is currently useless, slow, and mostly copied

View File

@ -7,31 +7,14 @@
local S
if (minetest.get_modpath("intllib")) then
dofile(minetest.get_modpath("intllib").."/intllib.lua")
if (intllib.make_gettext_pair) then
S = intllib.make_gettext_pair(minetest.get_current_modname())
else
S = intllib.Getter(minetest.get_current_modname())
end
S = intllib.Getter(minetest.get_current_modname())
else
S = function (s) return s end
end
function technic_homedecor_node_is_owned(pos, placer)
local ownername = false
if type(IsPlayerNodeOwner) == "function" then -- node_ownership mod
if HasOwner(pos, placer) then
if not IsPlayerNodeOwner(pos, placer:get_player_name()) then
if type(getLastOwner) == "function" then -- ...is an old version
ownername = getLastOwner(pos)
elseif type(GetNodeOwnerName) == "function" then -- ...is a recent version
ownername = GetNodeOwnerName(pos)
else
ownername = S("someone")
end
end
end
elseif type(isprotect) == "function" then -- glomie's protection mod
if type(isprotect) == "function" then -- glomie's protection mod
if not isprotect(5, pos, placer) then
ownername = S("someone")
end
@ -49,11 +32,10 @@ function technic_homedecor_node_is_owned(pos, placer)
end
end
local dirs1 = {20, 23, 22, 21}
local dirs2 = {9, 18, 7, 12}
local technic_homedecor_rotate_and_place = function(itemstack, placer, pointed_thing)
if not technic_homedecor_node_is_owned(pointed_thing.under, placer)
if not technic_homedecor_node_is_owned(pointed_thing.under, placer)
and not technic_homedecor_node_is_owned(pointed_thing.above, placer) then
local node = minetest.get_node(pointed_thing.under)
if not minetest.registered_nodes[node.name] or not minetest.registered_nodes[node.name].on_rightclick then
@ -62,7 +44,6 @@ local technic_homedecor_rotate_and_place = function(itemstack, placer, pointed_t
local under = pointed_thing.under
local pitch = placer:get_look_pitch()
local pname = minetest.get_node(under).name
local node = minetest.get_node(above)
local fdir = minetest.dir_to_facedir(placer:get_look_dir())
local wield_name = itemstack:get_name()
@ -80,7 +61,7 @@ local technic_homedecor_rotate_and_place = function(itemstack, placer, pointed_t
if not minetest.registered_nodes[minetest.get_node(pos1).name]["buildable_to"] then return end
if iswall then
if iswall then
minetest.add_node(pos1, {name = wield_name, param2 = dirs2[fdir+1] }) -- place wall variant
elseif isceiling then
minetest.add_node(pos1, {name = wield_name, param2 = 20 }) -- place upside down variant
@ -163,7 +144,7 @@ minetest.register_node('technic:homedecor_glowlight_half_yellow_active', {
paramtype = "light",
paramtype2 = "facedir",
walkable = true,
light_source = LIGHT_MAX,
light_source = minetest.LIGHT_MAX,
sounds = default.node_sound_wood_defaults(),
groups = { snappy = 3, not_in_creative_inventory=1},
@ -244,7 +225,7 @@ minetest.register_node('technic:homedecor_glowlight_quarter_yellow_active', {
paramtype = "light",
paramtype2 = "facedir",
walkable = true,
light_source = LIGHT_MAX-1,
light_source = minetest.LIGHT_MAX-1,
sounds = default.node_sound_wood_defaults(),
groups = { snappy = 3, not_in_creative_inventory=1},
@ -326,7 +307,7 @@ minetest.register_node('technic:homedecor_glowlight_half_white_active', {
paramtype = "light",
paramtype2 = "facedir",
walkable = true,
light_source = LIGHT_MAX,
light_source = minetest.LIGHT_MAX,
sounds = default.node_sound_wood_defaults(),
groups = { snappy = 3, not_in_creative_inventory=1},
@ -407,7 +388,7 @@ minetest.register_node('technic:homedecor_glowlight_quarter_white_active', {
paramtype = "light",
paramtype2 = "facedir",
walkable = true,
light_source = LIGHT_MAX-1,
light_source = minetest.LIGHT_MAX-1,
sounds = default.node_sound_wood_defaults(),
groups = { snappy = 3, not_in_creative_inventory=1},
@ -488,7 +469,7 @@ minetest.register_node('technic:homedecor_glowlight_small_cube_yellow_active', {
paramtype = "light",
paramtype2 = "facedir",
walkable = true,
light_source = LIGHT_MAX-1,
light_source = minetest.LIGHT_MAX-1,
sounds = default.node_sound_wood_defaults(),
groups = { snappy = 3, not_in_creative_inventory=1},
@ -569,7 +550,7 @@ minetest.register_node('technic:homedecor_glowlight_small_cube_white_active', {
paramtype = "light",
paramtype2 = "facedir",
walkable = true,
light_source = LIGHT_MAX-1,
light_source = minetest.LIGHT_MAX-1,
sounds = default.node_sound_wood_defaults(),
groups = { snappy = 3, not_in_creative_inventory=1},

View File

@ -177,8 +177,6 @@ minetest.register_abm({
-- The supply radius
local rad = power_radius
local meta1 = nil
local pos1 = {}
local used_charge = 0
-- Index all nodes within supply range

View File

@ -19,7 +19,7 @@ minetest.register_craft({
local workshop_demand = {5000, 3500, 2000}
local workshop_formspec =
"invsize[8,9;]"..
"size[8,9;]"..
"list[current_name;src;3,1;1,1;]"..
"label[0,0;"..S("%s Tool Workshop"):format("MV").."]"..
"list[current_name;upgrade1;1,3;1,1;]"..
@ -34,19 +34,11 @@ local workshop_formspec =
"listring[current_name;upgrade2]"..
"listring[current_player;main]"
-- Setting for enabling/disabling tool wear & break
local tool_wear = minetest.settings:get_bool("enable_tool_wear")
if tool_wear == nil then
-- Default is enabled
tool_wear = true
end
local run = function(pos, node)
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
local eu_input = meta:get_int("MV_EU_input")
local machine_name = S("%s Tool Workshop"):format("MV")
local machine_node = "technic:tool_workshop"
-- Setup meta data if it does not exist.
if not eu_input then
@ -78,14 +70,12 @@ local run = function(pos, node)
meta:set_int("MV_EU_demand", 0)
return
end
if eu_input < workshop_demand[EU_upgrade+1] then
meta:set_string("infotext", S("%s Unpowered"):format(machine_name))
elseif eu_input >= workshop_demand[EU_upgrade+1] then
meta:set_string("infotext", S("%s Active"):format(machine_name))
if enable_wear then
srcstack:add_wear(-1000)
end
srcstack:add_wear(-1000)
inv:set_stack("src", 1, srcstack)
end
meta:set_int("MV_EU_demand", workshop_demand[EU_upgrade+1])
@ -114,7 +104,7 @@ minetest.register_node("technic:tool_workshop", {
inv:set_size("src", 1)
inv:set_size("upgrade1", 1)
inv:set_size("upgrade2", 1)
end,
end,
can_dig = technic.machine_can_dig,
allow_metadata_inventory_put = technic.machine_inventory_put,
allow_metadata_inventory_take = technic.machine_inventory_take,

View File

@ -13,7 +13,7 @@ minetest.register_craft({
minetest.register_craft({
output = 'technic:wind_mill',
recipe = {
{'', 'technic:motor', ''},
{'', 'basic_materials:motor', ''},
{'technic:carbon_steel_ingot', 'technic:carbon_steel_block', 'technic:carbon_steel_ingot'},
{'', 'technic:mv_cable', ''},
}
@ -60,7 +60,8 @@ local run = function(pos, node)
elseif check == true then
local power = math.min(pos.y * 100, 5000)
meta:set_int("MV_EU_supply", power)
meta:set_string("infotext", S("@1 (@2 EU)", machine_name, technic.pretty_num(power)))
meta:set_string("infotext", S("@1 (@2)", machine_name,
technic.EU_string(power)))
end
-- check == nil: assume nothing has changed
end

View File

@ -77,14 +77,12 @@ minetest.register_abm({
action = function(pos, node, active_object_count, active_object_count_wider)
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
if inv:get_size("src") == 1 then -- Old furnace -> convert it
inv:set_size("src", 2)
inv:set_stack("src", 2, inv:get_stack("src2", 1))
inv:set_size("src2", 0)
end
local recipe = nil
for i, name in pairs({
"fuel_totaltime",

View File

@ -88,6 +88,7 @@ minetest.register_craft({
local function make_on(mark, length)
return function(pos, node)
local meta = minetest.get_meta(pos)
local owner = meta:get_string("owner")
local inv = meta:get_inventory()
local dir = vector.new()
if node.param2 == 3 then dir.x = 1 end
@ -99,9 +100,12 @@ local function make_on(mark, length)
if node.name == "technic:constructor_mk"..mark.."_off" then
technic.swap_node(pos, "technic:constructor_mk"..mark.."_on")
nodeupdate(pos)
minetest.check_for_falling(pos)
for i = 1, length do
place_pos = vector.add(place_pos, dir)
if owner ~= "" and minetest.is_protected(place_pos, owner) then
return
end
local place_node = minetest.get_node(place_pos)
deploy_node(inv, "slot"..i, place_pos, place_node, node)
end
@ -113,11 +117,17 @@ local function make_off(mark)
return function(pos, node)
if node.name == "technic:constructor_mk"..mark.."_on" then
technic.swap_node(pos,"technic:constructor_mk"..mark.."_off")
nodeupdate(pos)
minetest.check_for_falling(pos)
end
end
end
local function allow_inventory_put(pos, listname, index, stack, player)
if stack and minetest.get_item_group(stack:get_name(), "technic_constructor") == 1 then
return 0
end
return technic.machine_inventory_put(pos, listname, index, stack, player)
end
local function make_constructor(mark, length)
minetest.register_node("technic:constructor_mk"..mark.."_off", {
@ -129,7 +139,8 @@ local function make_constructor(mark, length)
"technic_constructor_back.png",
"technic_constructor_front_off.png"},
paramtype2 = "facedir",
groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2, mesecon = 2},
groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2,
mesecon = 2, technic_constructor = 1},
mesecons = {effector = {action_on = make_on(mark, length)}},
sounds = default.node_sound_stone_defaults(),
on_construct = function(pos)
@ -149,6 +160,11 @@ local function make_constructor(mark, length)
for i = 1, length do
inv:set_size("slot"..i, 1)
end
meta:set_string("owner", "?")
end,
after_place_node = function(pos, placer)
local meta = minetest.get_meta(pos)
meta:set_string("owner", (placer and placer:get_player_name() or "?"))
end,
can_dig = function(pos, player)
local meta = minetest.get_meta(pos)
@ -160,7 +176,7 @@ local function make_constructor(mark, length)
end
return true
end,
allow_metadata_inventory_put = technic.machine_inventory_put,
allow_metadata_inventory_put = allow_inventory_put,
allow_metadata_inventory_take = technic.machine_inventory_take,
allow_metadata_inventory_move = technic.machine_inventory_move,
on_rotate = screwdriver.rotate_simple
@ -176,10 +192,10 @@ local function make_constructor(mark, length)
paramtype2 = "facedir",
drop = "technic:constructor_mk"..mark.."_off",
groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2,
mesecon=2, not_in_creative_inventory=1},
mesecon=2, not_in_creative_inventory=1, technic_constructor=1},
mesecons= {effector = {action_off = make_off(mark)}},
sounds = default.node_sound_stone_defaults(),
allow_metadata_inventory_put = technic.machine_inventory_put,
allow_metadata_inventory_put = allow_inventory_put,
allow_metadata_inventory_take = technic.machine_inventory_take,
allow_metadata_inventory_move = technic.machine_inventory_move,
on_rotate = false

File diff suppressed because it is too large Load Diff

View File

@ -6,7 +6,7 @@ local fs_helpers = pipeworks.fs_helpers
local tube_entry = "^pipeworks_tube_connection_metallic.png"
local function inject_items (pos)
local meta=minetest.get_meta(pos)
local meta=minetest.get_meta(pos)
local inv = meta:get_inventory()
local mode=meta:get_string("mode")
if mode=="single items" then
@ -15,8 +15,8 @@ local function inject_items (pos)
i=i+1
if stack then
local item0=stack:to_table()
if item0 then
item0["count"] = "1"
if item0 then
item0["count"] = 1
technic.tube_inject_item(pos, pos, vector.new(0, -1, 0), item0)
stack:take_item(1)
inv:set_stack("main", i, stack)
@ -31,7 +31,7 @@ local function inject_items (pos)
i=i+1
if stack then
local item0=stack:to_table()
if item0 then
if item0 then
technic.tube_inject_item(pos, pos, vector.new(0, -1, 0), item0)
stack:clear()
inv:set_stack("main", i, stack)
@ -40,7 +40,7 @@ local function inject_items (pos)
end
end
end
end
minetest.register_craft({
@ -55,12 +55,15 @@ minetest.register_craft({
local function set_injector_formspec(meta)
local is_stack = meta:get_string("mode") == "whole stacks"
meta:set_string("formspec",
"invsize[8,9;]"..
"size[8,9;]"..
"item_image[0,0;1,1;technic:injector]"..
"label[1,0;"..S("Self-Contained Injector").."]"..
(is_stack and
"button[0,1;2,1;mode_item;"..S("Stackwise").."]" or
"button[0,1;2,1;mode_stack;"..S("Itemwise").."]")..
(meta:get_int("public") == 1 and
"button[2,1;2,1;mode_private;"..S("Public").."]" or
"button[2,1;2,1;mode_public;"..S("Private").."]")..
"list[current_name;main;0,2;8,2;]"..
"list[current_player;main;0,5;8,4;]"..
"listring[]"..
@ -95,7 +98,7 @@ minetest.register_node("technic:injector", {
if meta:get_int("splitstacks") == 1 then
stack = stack:peek_item(1)
end
return meta:get_inventory():room_for_item("main", stack)
return inv:room_for_item("main", stack)
end,
insert_object = function(pos, node, stack, direction)
return minetest.get_meta(pos):get_inventory():add_item("main", stack)
@ -117,10 +120,15 @@ minetest.register_node("technic:injector", {
return inv:is_empty("main")
end,
on_receive_fields = function(pos, formanme, fields, sender)
if minetest.is_protected(pos, sender:get_player_name()) then return end
local meta = minetest.get_meta(pos)
if fields.mode_item then meta:set_string("mode", "single items") end
if fields.mode_stack then meta:set_string("mode", "whole stacks") end
if fields.mode_private then meta:set_int("public", 0) end
if fields.mode_public then meta:set_int("public", 1) end
if fields["fs_helpers_cycling:0:splitstacks"]
or fields["fs_helpers_cycling:1:splitstacks"] then
if not pipeworks.may_configure(pos, sender) then return end
@ -142,7 +150,7 @@ minetest.register_abm({
chance = 1,
action = function(pos, node, active_object_count, active_object_count_wider)
local pos1 = vector.add(pos, vector.new(0, -1, 0))
local node1 = minetest.get_node(pos1)
local node1 = minetest.get_node(pos1)
if minetest.get_item_group(node1.name, "tubedevice") > 0 then
inject_items(pos)
end

View File

@ -55,7 +55,7 @@ minetest.register_abm({
local demand = sw_meta:get_int("demand")
meta:set_string("infotext",
S("Power Monitor. Supply: @1 Demand: @2",
technic.pretty_num(supply), technic.pretty_num(demand)))
technic.EU_string(supply), technic.EU_string(demand)))
else
meta:set_string("infotext",S("Power Monitor Has No Network"))
end

View File

@ -1,10 +1,50 @@
local S = technic.getter
function technic.insert_object_unique_stack(pos, node, incoming_stack, direction)
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
local incoming_name = incoming_stack:get_name()
local stack_index = nil
for inv_index, inv_stack in pairs(inv:get_list("src")) do
if inv_stack:get_name() == incoming_name then
stack_index = inv_index
break
end
end
if stack_index == nil then
return inv:add_item("src", incoming_stack)
end
local present_stack = inv:get_stack("src", stack_index)
local leftover = present_stack:add_item(incoming_stack)
inv:set_stack("src", stack_index, present_stack)
return leftover
end
function technic.can_insert_unique_stack(pos, node, incoming_stack, direction)
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
local incoming_name = incoming_stack:get_name()
if meta:get_int("splitstacks") == 0 then
-- avoid looping second time with inv:contains_item("src", incoming_stack)
for _, inv_stack in pairs(inv:get_list("src")) do
if inv_stack:get_name() == incoming_name then
return inv_stack:item_fits(incoming_stack)
end
end
end
return technic.default_can_insert(pos, node, incoming_stack, direction)
end
function technic.register_alloy_furnace(data)
data.typename = "alloy"
data.machine_name = "alloy_furnace"
data.machine_desc = S("%s Alloy Furnace")
data.insert_object = technic.insert_object_unique_stack
data.can_insert = technic.can_insert_unique_stack
technic.register_base_machine(data)
end

View File

@ -12,22 +12,23 @@ function technic.register_alloy_recipe(data)
end
local recipes = {
{"technic:copper_dust 3", "technic:tin_dust", "technic:bronze_dust 4"},
{"default:copper_ingot 3", "moreores:tin_ingot", "default:bronze_ingot 4"},
{"technic:wrought_iron_dust", "technic:coal_dust", "technic:carbon_steel_dust", 3},
{"technic:wrought_iron_ingot", "technic:coal_dust", "technic:carbon_steel_ingot", 3},
{"technic:carbon_steel_dust", "technic:coal_dust", "technic:cast_iron_dust", 3},
{"technic:carbon_steel_ingot", "technic:coal_dust", "technic:cast_iron_ingot", 3},
{"technic:carbon_steel_dust 3", "technic:chromium_dust", "technic:stainless_steel_dust 4"},
{"technic:carbon_steel_ingot 3", "technic:chromium_ingot", "technic:stainless_steel_ingot 4"},
{"technic:copper_dust 7", "technic:tin_dust", "technic:bronze_dust 8", 12},
{"default:copper_ingot 7", "default:tin_ingot", "default:bronze_ingot 8", 12},
{"technic:wrought_iron_dust 2", "technic:coal_dust", "technic:carbon_steel_dust 2", 6},
{"technic:wrought_iron_ingot 2", "technic:coal_dust", "technic:carbon_steel_ingot 2", 6},
{"technic:carbon_steel_dust 2", "technic:coal_dust", "technic:cast_iron_dust 2", 6},
{"technic:carbon_steel_ingot 2", "technic:coal_dust", "technic:cast_iron_ingot 2", 6},
{"technic:carbon_steel_dust 4", "technic:chromium_dust", "technic:stainless_steel_dust 5", 7.5},
{"technic:carbon_steel_ingot 4", "technic:chromium_ingot", "technic:stainless_steel_ingot 5", 7.5},
{"technic:copper_dust 2", "technic:zinc_dust", "technic:brass_dust 3"},
{"default:copper_ingot 2", "technic:zinc_ingot", "technic:brass_ingot 3"},
{"default:copper_ingot 2", "technic:zinc_ingot", "basic_materials:brass_ingot 3"},
{"default:sand 2", "technic:coal_dust 2", "technic:silicon_wafer"},
{"technic:silicon_wafer", "technic:gold_dust", "technic:doped_silicon_wafer"},
-- from https://en.wikipedia.org/wiki/Carbon_black
-- The highest volume use of carbon black is as a reinforcing filler in rubber products, especially tires.
-- "[Compounding a] pure gum vulcanizate … with 50% of its weight of carbon black improves its tensile strength and wear resistance …"
-- "[Compounding a] pure gum vulcanizate … with 50% of its weight of carbon black improves its tensile strength and wear resistance …"
{"technic:raw_latex 4", "technic:coal_dust 2", "technic:rubber 6", 2},
{"default:ice", "bucket:bucket_empty", "bucket:bucket_water", 1 },
}
for _, data in pairs(recipes) do

View File

@ -18,7 +18,7 @@ minetest.register_craft({
output = "technic:battery",
recipe = {
{"group:wood", "default:copper_ingot", "group:wood"},
{"group:wood", "moreores:tin_ingot", "group:wood"},
{"group:wood", "default:tin_ingot", "group:wood"},
{"group:wood", "default:copper_ingot", "group:wood"},
}
})
@ -129,11 +129,11 @@ local tube = {
}
local function add_on_off_buttons(meta, ltier, charge_percent)
local formspec = ""
if ltier == "mv" or ltier == "hv" then
formspec = "image[1,1;1,2;technic_power_meter_bg.png"
local formspec = "image[1,1;1,2;technic_power_meter_bg.png"
.."^[lowpart:"..charge_percent
..":technic_power_meter_fg.png]"..
..":technic_power_meter_fg.png]"
if ltier == "mv" or ltier == "hv" then
formspec = formspec..
fs_helpers.cycling_button(
meta,
"image_button[3,2.0;1,0.6",
@ -255,8 +255,9 @@ function technic.register_battery_box(data)
local charge_percent = math.floor(current_charge / max_charge * 100)
meta:set_string("formspec", formspec..add_on_off_buttons(meta, ltier, charge_percent))
local infotext = S("@1 Battery Box: @2/@3", tier,
technic.pretty_num(current_charge), technic.pretty_num(max_charge))
local infotext = S("@1 Battery Box: @2 / @3", tier,
technic.EU_string(current_charge),
technic.EU_string(max_charge))
if eu_input == 0 then
infotext = S("%s Idle"):format(infotext)
end
@ -311,7 +312,6 @@ function technic.register_battery_box(data)
local charge = meta:get_int("internal_EU_charge")
local cpercent = math.floor(charge / max_charge * 100)
local inv = meta:get_inventory()
local node = minetest.get_node(pos)
meta:set_string("infotext", S("%s Battery Box"):format(tier))
meta:set_string("formspec", formspec..add_on_off_buttons(meta, ltier, cpercent))
meta:set_string("channel", ltier.."_battery_box"..minetest.pos_to_string(pos))
@ -334,7 +334,6 @@ function technic.register_battery_box(data)
after_dig_node = technic.machine_after_dig_node,
on_receive_fields = function(pos, formname, fields, sender)
local meta = minetest.get_meta(pos)
local nodename = minetest.get_node(pos).name
if fields.edit_channel then
minetest.show_formspec(sender:get_player_name(),
"technic:battery_box_edit_channel"..minetest.pos_to_string(pos),
@ -343,7 +342,7 @@ function technic.register_battery_box(data)
or fields["fs_helpers_cycling:0:split_dst_stacks"]
or fields["fs_helpers_cycling:1:split_src_stacks"]
or fields["fs_helpers_cycling:1:split_dst_stacks"] then
local meta = minetest.get_meta(pos)
meta = minetest.get_meta(pos)
if not pipeworks.may_configure(pos, sender) then return end
fs_helpers.on_receive_fields(pos, fields)
local EU_upgrade, tube_upgrade = 0, 0
@ -451,7 +450,7 @@ function technic.discharge_tools(meta, batt_charge, charge_step, max_charge)
if inv:is_empty("dst") then
return batt_charge, false
end
srcstack = inv:get_stack("dst", 1)
local srcstack = inv:get_stack("dst", 1)
local toolname = srcstack:get_name()
if technic.power_tools[toolname] == nil then
return batt_charge, false

View File

@ -117,6 +117,19 @@ local function clear_networks(pos)
end
end
local function item_place_override_node(itemstack, placer, pointed, node)
-- Call the default on_place function with a fake itemstack
local temp_itemstack = ItemStack(itemstack)
temp_itemstack:set_name(node.name)
local original_count = temp_itemstack:get_count()
temp_itemstack =
minetest.item_place(temp_itemstack, placer, pointed, node.param2) or
temp_itemstack
-- Remove the same number of items from the real itemstack
itemstack:take_item(original_count - temp_itemstack:get_count())
return itemstack
end
function technic.register_cable(tier, size)
local ltier = string.lower(tier)
cable_tier["technic:"..ltier.."_cable"] = tier
@ -202,7 +215,7 @@ function technic.register_cable(tier, size)
if i == 1 then
def.on_place = function(itemstack, placer, pointed_thing)
local pointed_thing_diff = vector.subtract(pointed_thing.above, pointed_thing.under)
local num
local num = 1
local changed
for k, v in pairs(pointed_thing_diff) do
if v ~= 0 then
@ -212,7 +225,7 @@ function technic.register_cable(tier, size)
end
end
local crtl = placer:get_player_control()
if (crtl.aux1 or crtl.sneak) and not (crtl.aux1 and crtl.sneak) then
if (crtl.aux1 or crtl.sneak) and not (crtl.aux1 and crtl.sneak) and changed then
local fine_pointed = minetest.pointed_thing_to_face_pos(placer, pointed_thing)
fine_pointed = vector.subtract(fine_pointed, pointed_thing.above)
fine_pointed[changed] = nil
@ -228,11 +241,10 @@ function technic.register_cable(tier, size)
num = xyz[((fine_pointed[bigger] < 0 and "-") or "") .. bigger]
end
end
minetest.set_node(pointed_thing.above, {name = "technic:"..ltier.."_cable_plate_"..num})
if not (creative and creative.is_enabled_for(placer)) then
itemstack:take_item()
end
return itemstack
return item_place_override_node(
itemstack, placer, pointed_thing,
{name = "technic:"..ltier.."_cable_plate_"..num}
)
end
else
def.groups.not_in_creative_inventory = 1

View File

@ -11,8 +11,8 @@ function technic.register_separating_recipe(data)
end
local recipes = {
{ "technic:bronze_dust 4", "technic:copper_dust 3", "technic:tin_dust" },
{ "technic:stainless_steel_dust 4", "technic:wrought_iron_dust 3", "technic:chromium_dust" },
{ "technic:bronze_dust 8", "technic:copper_dust 7", "technic:tin_dust" },
{ "technic:stainless_steel_dust 5", "technic:wrought_iron_dust 4", "technic:chromium_dust" },
{ "technic:brass_dust 3", "technic:copper_dust 2", "technic:zinc_dust" },
{ "technic:chernobylite_dust", "default:sand", "technic:uranium3_dust" },
{ "default:dirt 4", "default:sand", "default:gravel", "default:clay_lump 2" },

View File

@ -65,16 +65,16 @@ function technic.send_items(pos, x_velocity, z_velocity, output_name)
if output_name == nil then
output_name = "dst"
end
local meta = minetest.get_meta(pos)
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
local i = 0
for _, stack in ipairs(inv:get_list(output_name)) do
i = i + 1
if stack then
local item0 = stack:to_table()
if item0 then
item0["count"] = "1"
if item0 then
item0["count"] = 1
technic.tube_inject_item(pos, pos, vector.new(x_velocity, 0, z_velocity), item0)
stack:take_item(1)
inv:set_stack(output_name, i, stack)
@ -84,7 +84,6 @@ function technic.send_items(pos, x_velocity, z_velocity, output_name)
end
end
function technic.smelt_item(meta, result, speed)
local inv = meta:get_inventory()
meta:set_int("cook_time", meta:get_int("cook_time") + 1)
@ -109,10 +108,9 @@ function technic.handle_machine_pipeworks(pos, tube_upgrade, send_function)
if send_function == nil then
send_function = technic.send_items
end
local node = minetest.get_node(pos)
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
local pos1 = vector.new(pos)
local x_velocity = 0
local z_velocity = 0
@ -124,7 +122,7 @@ function technic.handle_machine_pipeworks(pos, tube_upgrade, send_function)
if node.param2 == 0 then pos1.x = pos1.x + 1 x_velocity = 1 end
local output_tube_connected = false
local node1 = minetest.get_node(pos1)
local node1 = minetest.get_node(pos1)
if minetest.get_item_group(node1.name, "tubedevice") > 0 then
output_tube_connected = true
end

View File

@ -11,6 +11,8 @@ end
local recipes = {
{"default:snowblock", "default:ice"},
{"default:sand 2", "default:sandstone"},
{"default:desert_sand 2", "default:desert_sandstone"},
{"default:silver_sand 2", "default:silver_sandstone"},
{"default:desert_sand", "default:desert_stone"},
{"technic:mixed_metal_ingot", "technic:composite_plate"},
{"default:copper_ingot 5", "technic:copper_plate"},
@ -21,10 +23,21 @@ local recipes = {
-- defuse the default sandstone recipe, since we have the compressor to take over in a more realistic manner
minetest.clear_craft({
output = "default:sandstone",
recipe = {
{'group:sand', 'group:sand'},
{'group:sand', 'group:sand'}
{"default:sand", "default:sand"},
{"default:sand", "default:sand"},
},
})
minetest.clear_craft({
recipe = {
{"default:desert_sand", "default:desert_sand"},
{"default:desert_sand", "default:desert_sand"},
},
})
minetest.clear_craft({
recipe = {
{"default:silver_sand", "default:silver_sand"},
{"default:silver_sand", "default:silver_sand"},
},
})

View File

@ -15,6 +15,7 @@ if minetest.get_modpath("dye") then
-- register recipes with the same crafting ratios as `dye` provides
local dye_recipes = {
{"technic:coal_dust", "dye:black 2"},
{"default:blueberries", "dye:violet 2"},
{"default:grass_1", "dye:green 1"},
{"default:dry_shrub", "dye:brown 1"},
{"default:junglegrass", "dye:green 2"},
@ -36,13 +37,21 @@ if minetest.get_modpath("dye") then
-- overwrite the existing crafting recipes
local dyes = {"white", "red", "yellow", "blue", "violet", "orange"}
for _, color in ipairs(dyes) do
minetest.register_craft({
type = "shapeless",
output = "dye:"..color.." 1",
recipe = {"group:flower,color_"..color},
minetest.clear_craft({
type = "shapeless",
recipe = {"group:flower,color_"..color},
})
minetest.register_craft({
type = "shapeless",
output = "dye:"..color.." 1",
recipe = {"group:flower,color_"..color},
})
end
minetest.clear_craft({
type = "shapeless",
recipe = {"group:coal"},
})
minetest.register_craft({
type = "shapeless",
output = "dye:black 1",
@ -50,6 +59,10 @@ if minetest.get_modpath("dye") then
})
if unifieddyes then
minetest.clear_craft({
type = "shapeless",
recipe = {"default:cactus"},
})
minetest.register_craft({
type = "shapeless",
output = "dye:green 1",

View File

@ -0,0 +1,9 @@
local S = technic.getter
function technic.register_freezer(data)
data.typename = "freezing"
data.machine_name = "freezer"
data.machine_desc = S("%s Freezer")
technic.register_base_machine(data)
end

View File

@ -0,0 +1,21 @@
local S = technic.getter
technic.register_recipe_type("freezing", { description = S("Freezing") })
function technic.register_freezer_recipe(data)
data.time = data.time or 5
technic.register_recipe("freezing", data)
end
local recipes = {
{"bucket:bucket_water", { "default:ice", "bucket:bucket_empty" } },
{"bucket:bucket_river_water", { "default:ice", "bucket:bucket_empty" } },
{"default:dirt", "default:dirt_with_snow" },
{"bucket:bucket_lava", { "default:obsidian", "bucket:bucket_empty" } }
}
for _, data in pairs(recipes) do
technic.register_freezer_recipe({input = {data[1]}, output = data[2]})
end

View File

@ -35,15 +35,15 @@ function technic.register_generator(data)
for k, v in pairs(groups) do active_groups[k] = v end
local generator_formspec =
"invsize[8,9;]"..
"size[8,9;]"..
"label[0,0;"..S("Fuel-Fired %s Generator"):format(tier).."]"..
"list[current_name;src;3,1;1,1;]"..
"image[4,1;1,1;default_furnace_fire_bg.png]"..
"list[current_player;main;0,5;8,4;]"..
"listring[]"
local desc = S("Fuel-Fired %s Generator"):format(tier)
local run = function(pos, node)
local meta = minetest.get_meta(pos)
local burn_time = meta:get_int("burn_time")
@ -57,7 +57,7 @@ function technic.register_generator(data)
-- Burn another piece of fuel
if burn_time == 0 then
local inv = meta:get_inventory()
if not inv:is_empty("src") then
if not inv:is_empty("src") then
local fuellist = inv:get_list("src")
local fuel
local afterfuel
@ -96,7 +96,7 @@ function technic.register_generator(data)
}
)..pipeworks.button_label
end
meta:set_string("formspec",
meta:set_string("formspec",
"size[8, 9]"..
"label[0, 0;"..minetest.formspec_escape(desc).."]"..
"list[current_name;src;3, 1;1, 1;]"..
@ -120,7 +120,7 @@ function technic.register_generator(data)
"technic_"..ltier.."_generator_side.png"..tentry,
"technic_"..ltier.."_generator_side.png"..tentry,
"technic_"..ltier.."_generator_front.png"
},
},
paramtype2 = "facedir",
groups = groups,
connect_sides = {"bottom", "back", "left", "right"},
@ -162,7 +162,6 @@ function technic.register_generator(data)
fs_helpers.on_receive_fields(pos, fields)
local meta = minetest.get_meta(pos)
local node = minetest.get_node(pos)
local form = generator_formspec
local form_buttons = ""
if not string.find(node.name, ":lv_") then
form_buttons = fs_helpers.cycling_button(
@ -204,15 +203,15 @@ function technic.register_generator(data)
technic_run = run,
technic_on_disable = function(pos, node)
local timer = minetest.get_node_timer(pos)
timer:start(1)
end,
timer:start(1)
end,
on_timer = function(pos, node)
local meta = minetest.get_meta(pos)
local node = minetest.get_node(pos)
-- Connected back?
if meta:get_int(tier.."_EU_timeout") > 0 then return false end
local burn_time = meta:get_int("burn_time") or 0
if burn_time <= 0 then
@ -240,7 +239,7 @@ function technic.register_generator(data)
}
)..pipeworks.button_label
end
meta:set_string("formspec",
meta:set_string("formspec",
"size[8, 9]"..
"label[0, 0;"..minetest.formspec_escape(desc).."]"..
"list[current_name;src;3, 1;1, 1;]"..
@ -274,7 +273,7 @@ function technic.register_generator(data)
local burn_time = meta:get_int("burn_time")
local percent = math.floor(burn_time / burn_totaltime * 100)
meta:set_string("formspec",
meta:set_string("formspec",
"size[8, 9]"..
"label[0, 0;"..minetest.formspec_escape(desc).."]"..
"list[current_name;src;3, 1;1, 1;]"..

View File

@ -15,6 +15,7 @@ local recipes = {
{"default:desert_stone", "default:desert_sand"},
{"default:gold_lump", "technic:gold_dust 2"},
{"default:iron_lump", "technic:wrought_iron_dust 2"},
{"default:tin_lump", "technic:tin_dust 2"},
{"technic:chromium_lump", "technic:chromium_dust 2"},
{"technic:uranium_lump", "technic:uranium_dust 2"},
{"technic:zinc_lump", "technic:zinc_dust 2"},
@ -22,17 +23,31 @@ local recipes = {
{"technic:sulfur_lump", "technic:sulfur_dust 2"},
{"default:stone", "technic:stone_dust"},
{"default:sand", "technic:stone_dust"},
-- Other
{"default:cobble", "default:gravel"},
{"default:gravel", "default:sand"},
{"default:sandstone", "default:sand 2"}, -- reverse recipe can be found in the compressor
{"default:cobble", "default:gravel"},
{"default:gravel", "default:sand"},
{"default:sandstone", "default:sand 2"}, -- reverse recipe can be found in the compressor
{"default:desert_sandstone", "default:desert_sand 2"}, -- reverse recipe can be found in the compressor
{"default:silver_sandstone", "default:silver_sand 2"}, -- reverse recipe can be found in the compressor
{"default:ice", "default:snowblock"},
}
-- defuse the sandstone -> 4 sand recipe to avoid infinite sand bugs (also consult the inverse compressor recipe)
minetest.clear_craft({
recipe = {
{'default:sandstone'}
{"default:sandstone"}
},
})
minetest.clear_craft({
recipe = {
{"default:desert_sandstone"}
},
})
minetest.clear_craft({
recipe = {
{"default:silver_sandstone"}
},
})
@ -43,7 +58,6 @@ end
if minetest.get_modpath("moreores") then
table.insert(recipes, {"moreores:mithril_lump", "technic:mithril_dust 2"})
table.insert(recipes, {"moreores:silver_lump", "technic:silver_dust 2"})
table.insert(recipes, {"moreores:tin_lump", "technic:tin_dust 2"})
end
if minetest.get_modpath("gloopores") or minetest.get_modpath("glooptest") then
@ -81,7 +95,7 @@ local function register_dust(name, ingot)
end
-- Sorted alphibeticaly
register_dust("Brass", "technic:brass_ingot")
register_dust("Brass", "basic_materials:brass_ingot")
register_dust("Bronze", "default:bronze_ingot")
register_dust("Carbon Steel", "technic:carbon_steel_ingot")
register_dust("Cast Iron", "technic:cast_iron_ingot")
@ -94,9 +108,9 @@ register_dust("Gold", "default:gold_ingot")
register_dust("Mithril", "moreores:mithril_ingot")
register_dust("Silver", "moreores:silver_ingot")
register_dust("Stainless Steel", "technic:stainless_steel_ingot")
register_dust("Stone", "default:stone")
register_dust("Stone", "default:stone")
register_dust("Sulfur", nil)
register_dust("Tin", "moreores:tin_ingot")
register_dust("Tin", "default:tin_ingot")
register_dust("Wrought Iron", "technic:wrought_iron_ingot")
register_dust("Zinc", "technic:zinc_ingot")
if minetest.get_modpath("gloopores") or minetest.get_modpath("glooptest") then

View File

@ -1,6 +1,5 @@
local S = technic.getter
local moretrees = minetest.get_modpath("moretrees")
local mesecons_materials = minetest.get_modpath("mesecons_materials")
local dye = minetest.get_modpath("dye")
-- sawdust, the finest wood/tree grinding

View File

@ -20,6 +20,7 @@ dofile(path.."/grinder_recipes.lua")
dofile(path.."/extractor_recipes.lua")
dofile(path.."/compressor_recipes.lua")
dofile(path.."/centrifuge_recipes.lua")
dofile(path.."/freezer_recipes.lua")
-- Multi-Machine Recipes
dofile(path.."/grindings.lua")
@ -31,3 +32,4 @@ dofile(path.."/grinder.lua")
dofile(path.."/extractor.lua")
dofile(path.."/compressor.lua")
dofile(path.."/centrifuge.lua")
dofile(path.."/freezer.lua")

View File

@ -4,22 +4,26 @@ local S = technic.getter
local fs_helpers = pipeworks.fs_helpers
local tube_entry = "^pipeworks_tube_connection_metallic.png"
local tube = {
insert_object = function(pos, node, stack, direction)
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
return inv:add_item("src", stack)
end,
can_insert = function(pos, node, stack, direction)
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
if meta:get_int("splitstacks") == 1 then
stack = stack:peek_item(1)
end
return inv:room_for_item("src", stack)
end,
connect_sides = {left = 1, right = 1, back = 1, top = 1, bottom = 1},
}
function technic.default_can_insert(pos, node, stack, direction)
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
if meta:get_int("splitstacks") == 1 then
stack = stack:peek_item(1)
end
return inv:room_for_item("src", stack)
end
function technic.new_default_tube()
return {
insert_object = function(pos, node, stack, direction)
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
return inv:add_item("src", stack)
end,
can_insert = technic.default_can_insert,
connect_sides = {left = 1, right = 1, back = 1, top = 1, bottom = 1},
}
end
local connect_default = {"bottom", "back", "left", "right"}
@ -35,6 +39,8 @@ function technic.register_base_machine(data)
local tier = data.tier
local ltier = string.lower(tier)
data.modname = data.modname or minetest.get_current_modname()
local groups = {cracky = 2, technic_machine = 1, ["technic_"..ltier] = 1}
if data.tube then
groups.tubedevice = 1
@ -44,7 +50,7 @@ function technic.register_base_machine(data)
for k, v in pairs(groups) do active_groups[k] = v end
local formspec =
"invsize[8,9;]"..
"size[8,9;]"..
"list[current_name;src;"..(4-input_size)..",1;"..input_size..",1;]"..
"list[current_name;dst;5,1;2,2;]"..
"list[current_player;main;0,5;8,4;]"..
@ -64,13 +70,21 @@ function technic.register_base_machine(data)
"listring[current_player;main]"
end
local tube = technic.new_default_tube()
if data.can_insert then
tube.can_insert = data.can_insert
end
if data.insert_object then
tube.insert_object = data.insert_object
end
local run = function(pos, node)
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
local eu_input = meta:get_int(tier.."_EU_input")
local machine_desc_tier = machine_desc:format(tier)
local machine_node = "technic:"..ltier.."_"..machine_name
local machine_node = data.modname..":"..ltier.."_"..machine_name
local machine_demand = data.demand
-- Setup meta data if it does not exist.
@ -144,15 +158,16 @@ function technic.register_base_machine(data)
if ltier == "lv" then
tentry = ""
end
minetest.register_node("technic:"..ltier.."_"..machine_name, {
minetest.register_node(data.modname..":"..ltier.."_"..machine_name, {
description = machine_desc:format(tier),
tiles = {
"technic_"..ltier.."_"..machine_name.."_top.png"..tentry,
"technic_"..ltier.."_"..machine_name.."_bottom.png"..tentry,
"technic_"..ltier.."_"..machine_name.."_side.png"..tentry,
"technic_"..ltier.."_"..machine_name.."_side.png"..tentry,
"technic_"..ltier.."_"..machine_name.."_side.png"..tentry,
"technic_"..ltier.."_"..machine_name.."_front.png"
data.modname.."_"..ltier.."_"..machine_name.."_top.png"..tentry,
data.modname.."_"..ltier.."_"..machine_name.."_bottom.png"..tentry,
data.modname.."_"..ltier.."_"..machine_name.."_side.png"..tentry,
data.modname.."_"..ltier.."_"..machine_name.."_side.png"..tentry,
data.modname.."_"..ltier.."_"..machine_name.."_side.png"..tentry,
data.modname.."_"..ltier.."_"..machine_name.."_front.png"
},
paramtype2 = "facedir",
groups = groups,
@ -194,9 +209,10 @@ function technic.register_base_machine(data)
after_place_node = data.tube and pipeworks.after_place,
after_dig_node = technic.machine_after_dig_node,
on_receive_fields = function(pos, formname, fields, sender)
local node = minetest.get_node(pos)
if fields.quit then return end
if not pipeworks.may_configure(pos, sender) then return end
fs_helpers.on_receive_fields(pos, fields)
local node = minetest.get_node(pos)
local meta = minetest.get_meta(pos)
local form_buttons = ""
if not string.find(node.name, ":lv_") then
@ -214,18 +230,18 @@ function technic.register_base_machine(data)
end,
})
minetest.register_node("technic:"..ltier.."_"..machine_name.."_active",{
minetest.register_node(data.modname..":"..ltier.."_"..machine_name.."_active",{
description = machine_desc:format(tier),
tiles = {
"technic_"..ltier.."_"..machine_name.."_top.png"..tentry,
"technic_"..ltier.."_"..machine_name.."_bottom.png"..tentry,
"technic_"..ltier.."_"..machine_name.."_side.png"..tentry,
"technic_"..ltier.."_"..machine_name.."_side.png"..tentry,
"technic_"..ltier.."_"..machine_name.."_side.png"..tentry,
"technic_"..ltier.."_"..machine_name.."_front_active.png"
data.modname.."_"..ltier.."_"..machine_name.."_top.png"..tentry,
data.modname.."_"..ltier.."_"..machine_name.."_bottom.png"..tentry,
data.modname.."_"..ltier.."_"..machine_name.."_side.png"..tentry,
data.modname.."_"..ltier.."_"..machine_name.."_side.png"..tentry,
data.modname.."_"..ltier.."_"..machine_name.."_side.png"..tentry,
data.modname.."_"..ltier.."_"..machine_name.."_front_active.png"
},
paramtype2 = "facedir",
drop = "technic:"..ltier.."_"..machine_name,
drop = data.modname..":"..ltier.."_"..machine_name,
groups = active_groups,
connect_sides = data.connect_sides or connect_default,
legacy_facedir_simple = true,
@ -236,11 +252,12 @@ function technic.register_base_machine(data)
allow_metadata_inventory_take = technic.machine_inventory_take,
allow_metadata_inventory_move = technic.machine_inventory_move,
technic_run = run,
technic_disabled_machine_name = "technic:"..ltier.."_"..machine_name,
technic_disabled_machine_name = data.modname..":"..ltier.."_"..machine_name,
on_receive_fields = function(pos, formname, fields, sender)
local node = minetest.get_node(pos)
if fields.quit then return end
if not pipeworks.may_configure(pos, sender) then return end
fs_helpers.on_receive_fields(pos, fields)
local node = minetest.get_node(pos)
local meta = minetest.get_meta(pos)
local form_buttons = ""
if not string.find(node.name, ":lv_") then
@ -258,8 +275,8 @@ function technic.register_base_machine(data)
end,
})
technic.register_machine(tier, "technic:"..ltier.."_"..machine_name, technic.receiver)
technic.register_machine(tier, "technic:"..ltier.."_"..machine_name.."_active", technic.receiver)
technic.register_machine(tier, data.modname..":"..ltier.."_"..machine_name, technic.receiver)
technic.register_machine(tier, data.modname..":"..ltier.."_"..machine_name.."_active", technic.receiver)
end -- End registration

View File

@ -39,7 +39,7 @@ local function register_recipe(typename, data)
else
data.output = ItemStack(data.output):to_string()
end
local recipe = {time = data.time, input = {}, output = data.output}
local index = get_recipe_index(data.input)
if not index then
@ -49,7 +49,7 @@ local function register_recipe(typename, data)
for _, stack in ipairs(data.input) do
recipe.input[ItemStack(stack):get_name()] = ItemStack(stack):get_count()
end
technic.recipes[typename].recipes[index] = recipe
if have_ui and technic.recipes[typename].output_size == 1 then
unified_inventory.register_craft({

View File

@ -30,14 +30,15 @@ function technic.register_solar_array(data)
local charge_to_give = math.floor((light + pos.y) * data.power)
charge_to_give = math.max(charge_to_give, 0)
charge_to_give = math.min(charge_to_give, data.power * 50)
meta:set_string("infotext", S("@1 Active (@2 EU)", machine_name, technic.pretty_num(charge_to_give)))
meta:set_string("infotext", S("@1 Active (@2)", machine_name,
technic.EU_string(charge_to_give)))
meta:set_int(tier.."_EU_supply", charge_to_give)
else
meta:set_string("infotext", S("%s Idle"):format(machine_name))
meta:set_int(tier.."_EU_supply", 0)
end
end
minetest.register_node("technic:solar_array_"..ltier, {
tiles = {"technic_"..ltier.."_solar_array_top.png", "technic_"..ltier.."_solar_array_bottom.png",
"technic_"..ltier.."_solar_array_side.png", "technic_"..ltier.."_solar_array_side.png",
@ -55,7 +56,6 @@ function technic.register_solar_array(data)
},
on_construct = function(pos)
local meta = minetest.get_meta(pos)
local name = minetest.get_node(pos).name
meta:set_int(tier.."_EU_supply", 0)
end,
technic_run = run,

View File

@ -149,7 +149,9 @@ local run = function(pos, node, run_stage)
meta:set_int(from.."_EU_supply", 0)
meta:set_int(to.."_EU_demand", 0)
meta:set_int(to.."_EU_supply", input * remain)
meta:set_string("infotext", S("@1 (@2 @3 -> @4 @5)", machine_name, technic.pretty_num(input), from, technic.pretty_num(input * remain), to))
meta:set_string("infotext", S("@1 (@2 @3 -> @4 @5)", machine_name,
technic.EU_string(input), from,
technic.EU_string(input * remain), to))
else
meta:set_string("infotext", S("%s Has Bad Cabling"):format(machine_name))
if to then
@ -199,10 +201,11 @@ minetest.register_node("technic:supply_converter", {
minetest.register_craft({
output = 'technic:supply_converter 1',
recipe = {
{'technic:fine_gold_wire', 'technic:rubber', 'technic:doped_silicon_wafer'},
{'basic_materials:gold_wire', 'technic:rubber', 'technic:doped_silicon_wafer'},
{'technic:mv_transformer', 'technic:machine_casing', 'technic:lv_transformer'},
{'technic:mv_cable', 'technic:rubber', 'technic:lv_cable'},
}
},
replacements = { {"basic_materials:gold_wire", "basic_materials:empty_spool"}, },
})
for tier, machines in pairs(technic.machines) do

View File

@ -119,13 +119,13 @@ end
-- Generic function to add found connected nodes to the right classification array
local check_node_subp = function(PR_nodes, RE_nodes, BA_nodes, SP_nodes, all_nodes, pos, machines, tier, sw_pos, from_below, network_id, queue)
technic.get_or_load_node(pos)
local meta = minetest.get_meta(pos)
local name = minetest.get_node(pos).name
if technic.is_tier_cable(name, tier) then
add_cable_node(all_nodes, pos,network_id, queue)
elseif machines[name] then
--dprint(name.." is a "..machines[name])
local meta = minetest.get_meta(pos)
meta:set_string(tier.."_network",minetest.pos_to_string(sw_pos))
if machines[name] == technic.producer then
add_network_node(PR_nodes, pos, network_id)
@ -227,6 +227,20 @@ minetest.register_chatcommand("powerctrl", {
end
})
-- Run all the nodes
local function run_nodes(list, run_stage)
for _, pos in ipairs(list) do
technic.get_or_load_node(pos)
local node = minetest.get_node_or_nil(pos)
if node and node.name then
local nodedef = minetest.registered_nodes[node.name]
if nodedef and nodedef.technic_run then
nodedef.technic_run(pos, node, run_stage)
end
end
end
end
minetest.register_abm({
nodenames = {"technic:switching_station"},
label = "Switching Station", -- allows the mtt profiler to profile this abm individually
@ -235,12 +249,8 @@ minetest.register_abm({
action = function(pos, node, active_object_count, active_object_count_wider)
if not technic.powerctrl_state then return end
local meta = minetest.get_meta(pos)
local meta1 = nil
local meta1
local pos1 = {}
local PR_EU = 0 -- EUs from PR nodes
local BA_PR_EU = 0 -- EUs from BA nodes (discharching)
local BA_RE_EU = 0 -- EUs to BA nodes (charging)
local RE_EU = 0 -- EUs to RE nodes
local tier = ""
local PR_nodes
@ -281,21 +291,6 @@ minetest.register_abm({
return
end
-- Run all the nodes
local function run_nodes(list, run_stage)
for _, pos2 in ipairs(list) do
technic.get_or_load_node(pos2)
local node2 = minetest.get_node(pos2)
local nodedef
if node2 and node2.name then
nodedef = minetest.registered_nodes[node2.name]
end
if nodedef and nodedef.technic_run then
nodedef.technic_run(pos2, node2, run_stage)
end
end
end
run_nodes(PR_nodes, technic.producer)
run_nodes(RE_nodes, technic.receiver)
run_nodes(BA_nodes, technic.battery)
@ -361,9 +356,9 @@ minetest.register_abm({
end
--dprint("Total BA demand:"..BA_eu_demand)
meta:set_string("infotext",
S("@1. Supply: @2 Demand: @3",
machine_name, technic.pretty_num(PR_eu_supply), technic.pretty_num(RE_eu_demand)))
meta:set_string("infotext", S("@1. Supply: @2 Demand: @3",
machine_name, technic.EU_string(PR_eu_supply),
technic.EU_string(RE_eu_demand)))
-- If mesecon signal and power supply or demand changed then
-- send them via digilines.
@ -467,7 +462,6 @@ minetest.register_abm({
interval = 1,
chance = 1,
action = function(pos, node, active_object_count, active_object_count_wider)
local meta = minetest.get_meta(pos)
for tier, machines in pairs(technic.machines) do
if machines[node.name] and switching_station_timeout_count(pos, tier) then
local nodedef = minetest.registered_nodes[node.name]
@ -493,7 +487,6 @@ minetest.register_abm({
interval = 1,
chance = 1,
action = function(pos, node, active_object_count, active_object_count_wider)
local meta = minetest.get_meta(pos)
local pos1 = {x=pos.x,y=pos.y-1,z=pos.z}
local tier = technic.get_cable_tier(minetest.get_node(pos1).name)
if not tier then return end

View File

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

View File

@ -54,6 +54,7 @@ local rad_resistance_node = {
["default:lava_source"] = 17,
["default:mese"] = 21,
["default:mossycobble"] = 15,
["default:tinblock"] = 37,
["pbj_pup:pbj_pup"] = 10000,
["pbj_pup:pbj_pup_candies"] = 10000,
["gloopblocks:rainbow_block_diagonal"] = 5000,
@ -76,6 +77,7 @@ local rad_resistance_node = {
["default:stone_with_gold"] = 34,
["default:stone_with_iron"] = 20,
["default:stone_with_mese"] = 17,
["default:stone_with_tin"] = 19,
["default:stonebrick"] = 17,
["default:water_flowing"] = 2.8,
["default:water_source"] = 5.6,
@ -141,12 +143,10 @@ local rad_resistance_node = {
["moreblocks:wood_tile_up"] = 1.7,
["moreores:mineral_mithril"] = 18,
["moreores:mineral_silver"] = 21,
["moreores:mineral_tin"] = 19,
["moreores:mithril_block"] = 26,
["moreores:silver_block"] = 53,
["moreores:tin_block"] = 37,
["snow:snow_brick"] = 2.8,
["technic:brass_block"] = 43,
["basic_materials:brass_block"] = 43,
["technic:carbon_steel_block"] = 40,
["technic:cast_iron_block"] = 40,
["technic:chernobylite_block"] = 40,
@ -244,7 +244,6 @@ to be safe, and limits the range at which source/player interactions
need to be considered.
--]]
local abdomen_offset = 1
local cache_scaled_shielding = {}
local rad_dmg_cutoff = 0.2
local radiated_players = {}
@ -294,6 +293,8 @@ local function calculate_damage_multiplier(object)
end
if ag.radiation then
return 0.01 * ag.radiation
elseif armor_enabled then
return 0
end
if ag.fleshy then
return math.sqrt(0.01 * ag.fleshy)
@ -309,7 +310,7 @@ local function calculate_object_center(object)
end
local function dmg_object(pos, object, strength)
local obj_pos = vector.add(object:getpos(), calculate_object_center(object))
local obj_pos = vector.add(object:get_pos(), calculate_object_center(object))
local mul
if armor_enabled or entity_damage then
-- we need to check may the object be damaged even if armor is disabled
@ -338,7 +339,7 @@ local function dmg_abm(pos, node)
local max_dist = strength * rad_dmg_mult_sqrt
for _, o in pairs(minetest.get_objects_inside_radius(pos,
max_dist + abdomen_offset)) do
if entity_damage or o:is_player() then
if (entity_damage or o:is_player()) and o:get_hp() > 0 then
dmg_object(pos, o, strength)
end
end
@ -513,4 +514,3 @@ if griefing then
end,
})
end

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 896 B

After

Width:  |  Height:  |  Size: 675 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 82 KiB

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 248 KiB

After

Width:  |  Height:  |  Size: 210 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.9 KiB

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 463 B

After

Width:  |  Height:  |  Size: 405 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 207 B

After

Width:  |  Height:  |  Size: 184 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 873 B

After

Width:  |  Height:  |  Size: 648 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 240 B

After

Width:  |  Height:  |  Size: 168 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 241 B

After

Width:  |  Height:  |  Size: 168 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 227 B

After

Width:  |  Height:  |  Size: 168 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 247 B

After

Width:  |  Height:  |  Size: 245 B

Some files were not shown because too many files have changed in this diff Show More