Compare commits
No commits in common. "master" and "factory" have entirely different histories.
22
.gitattributes
vendored
|
@ -1,22 +0,0 @@
|
|||
# Auto detect text files and perform LF normalization
|
||||
* text=auto
|
||||
|
||||
# Custom for Visual Studio
|
||||
*.cs diff=csharp
|
||||
*.sln merge=union
|
||||
*.csproj merge=union
|
||||
*.vbproj merge=union
|
||||
*.fsproj merge=union
|
||||
*.dbproj merge=union
|
||||
|
||||
# Standard to msysgit
|
||||
*.doc diff=astextplain
|
||||
*.DOC diff=astextplain
|
||||
*.docx diff=astextplain
|
||||
*.DOCX diff=astextplain
|
||||
*.dot diff=astextplain
|
||||
*.DOT diff=astextplain
|
||||
*.pdf diff=astextplain
|
||||
*.PDF diff=astextplain
|
||||
*.rtf diff=astextplain
|
||||
*.RTF diff=astextplain
|
166
.gitignore
vendored
|
@ -1,166 +0,0 @@
|
|||
#################
|
||||
## Eclipse
|
||||
#################
|
||||
|
||||
*.pydevproject
|
||||
.project
|
||||
.metadata
|
||||
bin/
|
||||
tmp/
|
||||
*.tmp
|
||||
*.bak
|
||||
*.swp
|
||||
*~.nib
|
||||
local.properties
|
||||
.classpath
|
||||
.settings/
|
||||
.loadpath
|
||||
|
||||
# External tool builders
|
||||
.externalToolBuilders/
|
||||
|
||||
# Locally stored "Eclipse launch configurations"
|
||||
*.launch
|
||||
|
||||
# CDT-specific
|
||||
.cproject
|
||||
|
||||
# PDT-specific
|
||||
.buildpath
|
||||
|
||||
|
||||
#################
|
||||
## Visual Studio
|
||||
#################
|
||||
|
||||
## Ignore Visual Studio temporary files, build results, and
|
||||
## files generated by popular Visual Studio add-ons.
|
||||
|
||||
# User-specific files
|
||||
*.suo
|
||||
*.user
|
||||
*.sln.docstates
|
||||
|
||||
# Build results
|
||||
[Dd]ebug/
|
||||
[Rr]elease/
|
||||
*_i.c
|
||||
*_p.c
|
||||
*.ilk
|
||||
*.meta
|
||||
*.pch
|
||||
*.pdb
|
||||
*.pgc
|
||||
*.pgd
|
||||
*.rsp
|
||||
*.sbr
|
||||
*.tlb
|
||||
*.tli
|
||||
*.tlh
|
||||
*.tmp
|
||||
*.vspscc
|
||||
.builds
|
||||
*.dotCover
|
||||
|
||||
## TODO: If you have NuGet Package Restore enabled, uncomment this
|
||||
#packages/
|
||||
|
||||
# Visual C++ cache files
|
||||
ipch/
|
||||
*.aps
|
||||
*.ncb
|
||||
*.opensdf
|
||||
*.sdf
|
||||
|
||||
# Visual Studio profiler
|
||||
*.psess
|
||||
*.vsp
|
||||
|
||||
# ReSharper is a .NET coding add-in
|
||||
_ReSharper*
|
||||
|
||||
# Installshield output folder
|
||||
[Ee]xpress
|
||||
|
||||
# DocProject is a documentation generator add-in
|
||||
DocProject/buildhelp/
|
||||
DocProject/Help/*.HxT
|
||||
DocProject/Help/*.HxC
|
||||
DocProject/Help/*.hhc
|
||||
DocProject/Help/*.hhk
|
||||
DocProject/Help/*.hhp
|
||||
DocProject/Help/Html2
|
||||
DocProject/Help/html
|
||||
|
||||
# Click-Once directory
|
||||
publish
|
||||
|
||||
# Others
|
||||
[Bb]in
|
||||
[Oo]bj
|
||||
sql
|
||||
TestResults
|
||||
*.Cache
|
||||
ClientBin
|
||||
stylecop.*
|
||||
~$*
|
||||
*.dbmdl
|
||||
Generated_Code #added for RIA/Silverlight projects
|
||||
|
||||
# Backup & report files from converting an old project file to a newer
|
||||
# Visual Studio version. Backup files are not needed, because we have git ;-)
|
||||
_UpgradeReport_Files/
|
||||
Backup*/
|
||||
UpgradeLog*.XML
|
||||
|
||||
|
||||
|
||||
############
|
||||
## Windows
|
||||
############
|
||||
|
||||
# Windows image file caches
|
||||
Thumbs.db
|
||||
|
||||
# Folder config file
|
||||
Desktop.ini
|
||||
|
||||
|
||||
#############
|
||||
## Python
|
||||
#############
|
||||
|
||||
*.py[co]
|
||||
|
||||
# Packages
|
||||
*.egg
|
||||
*.egg-info
|
||||
dist
|
||||
build
|
||||
eggs
|
||||
parts
|
||||
bin
|
||||
var
|
||||
sdist
|
||||
develop-eggs
|
||||
.installed.cfg
|
||||
|
||||
# Installer logs
|
||||
pip-log.txt
|
||||
|
||||
# Unit test / coverage reports
|
||||
.coverage
|
||||
.tox
|
||||
|
||||
#Translations
|
||||
*.mo
|
||||
|
||||
#Mr Developer
|
||||
.mr.developer.cfg
|
||||
|
||||
# Mac crap
|
||||
.DS_Store
|
||||
|
||||
#gedit backup files
|
||||
*~
|
||||
|
4
.mailmap
|
@ -1,4 +0,0 @@
|
|||
RealBadAngel <maciej.kasatkin@o2.pl> <mk@realbadangel.pl>
|
||||
Vanessa Ezekowitz <vanessaezekowitz@gmail.com>
|
||||
Vanessa Ezekowitz <vanessaezekowitz@gmail.com> <vanessa@rainbird.(none)>
|
||||
kaeza <kaeza@users.sf.net> Diego Martínez <kaeza@users.sf.net>
|
23
README.md
|
@ -1,23 +0,0 @@
|
|||
Technic
|
||||
=======
|
||||
|
||||
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.
|
|
@ -1,4 +0,0 @@
|
|||
default
|
||||
basic_materials
|
||||
intllib?
|
||||
moreblocks?
|
|
@ -1,140 +0,0 @@
|
|||
--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.Getter() or function(s) return s end
|
||||
|
||||
for i = 0, 31 do
|
||||
minetest.register_alias("technic:concrete_post"..i,
|
||||
"technic:concrete_post")
|
||||
end
|
||||
for i = 32, 63 do
|
||||
minetest.register_alias("technic:concrete_post"..i,
|
||||
"technic:concrete_post_with_platform")
|
||||
end
|
||||
|
||||
local steel_ingot
|
||||
if minetest.get_modpath("technic_worldgen") then
|
||||
steel_ingot = "technic:carbon_steel_ingot"
|
||||
else
|
||||
steel_ingot = "default:steel_ingot"
|
||||
end
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'technic:concrete_post_platform 6',
|
||||
recipe = {
|
||||
{'technic:concrete','technic:concrete_post','technic:concrete'},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'technic:concrete_post 12',
|
||||
recipe = {
|
||||
{'default:stone','basic_materials:steel_bar','default:stone'},
|
||||
{'default:stone','basic_materials:steel_bar','default:stone'},
|
||||
{'default:stone','basic_materials:steel_bar','default:stone'},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'technic:blast_resistant_concrete 5',
|
||||
recipe = {
|
||||
{'technic:concrete','technic:composite_plate','technic:concrete'},
|
||||
{'technic:composite_plate','technic:concrete','technic:composite_plate'},
|
||||
{'technic:concrete','technic:composite_plate','technic:concrete'},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_node(":technic:blast_resistant_concrete", {
|
||||
description = S("Blast-resistant Concrete Block"),
|
||||
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 > 9 then
|
||||
minetest.remove_node(pos)
|
||||
return {"technic:blast_resistant_concrete"}
|
||||
end
|
||||
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}
|
||||
local box_front = {-0.1, -0.3, -0.5, 0.1, 0.3, 0}
|
||||
local box_back = {-0.1, -0.3, 0, 0.1, 0.3, 0.5}
|
||||
local box_left = {-0.5, -0.3, -0.1, 0, 0.3, 0.1}
|
||||
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 = {"basic_materials_concrete_block.png",},
|
||||
groups={cracky=1, level=2},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
paramtype = "light",
|
||||
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)
|
||||
end
|
||||
minetest.set_node(pointed_thing.under, {name="technic:concrete_post_with_platform"})
|
||||
itemstack:take_item()
|
||||
placer:set_wielded_item(itemstack)
|
||||
return itemstack
|
||||
end,
|
||||
})
|
||||
|
||||
for platform = 0, 1 do
|
||||
local after_dig_node = nil
|
||||
if platform == 1 then
|
||||
after_dig_node = function(pos, old_node)
|
||||
old_node.name = "technic:concrete_post"
|
||||
minetest.set_node(pos, old_node)
|
||||
end
|
||||
end
|
||||
|
||||
minetest.register_node(":technic:concrete_post"..(platform == 1 and "_with_platform" or ""), {
|
||||
description = S("Concrete Post"),
|
||||
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
|
||||
"technic:concrete_post"),
|
||||
paramtype = "light",
|
||||
sunlight_propagates = true,
|
||||
drawtype = "nodebox",
|
||||
connects_to = {"group:concrete", "group:concrete_post"},
|
||||
node_box = {
|
||||
type = "connected",
|
||||
fixed = {box_post, (platform == 1 and box_platform or nil)},
|
||||
connect_front = box_front,
|
||||
connect_back = box_back,
|
||||
connect_left = box_left,
|
||||
connect_right = box_right,
|
||||
},
|
||||
after_dig_node = after_dig_node,
|
||||
})
|
||||
end
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
# German Translation for technic_concrete
|
||||
# Deutsche Übersetzung von technic_concrete
|
||||
# by Xanthin
|
||||
|
||||
Rebar = Bewehrungsstab
|
||||
Concrete Block = Betonblock
|
||||
Blast-resistant Concrete Block = Explosionsbestaendiger Betonblock
|
||||
Concrete Post Platform = Betonpfostenplattform
|
||||
Concrete Post = Betonpfosten
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
# technic_concrete traducido por Carlos Barraza
|
||||
|
||||
Rebar = Barra de refuerzo
|
||||
Concrete Block = Bloque de concreto
|
||||
Blast-resistant Concrete Block = Bloque de concreto resistente a explosiones
|
||||
Concrete Post Platform = Plataforma de concreto
|
||||
Concrete Post = Postes de concreto
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
# 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
|
|
@ -1,10 +0,0 @@
|
|||
# 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
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
# 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
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
# technic_concrete translation template
|
||||
|
||||
Rebar =
|
||||
Concrete Block =
|
||||
Blast-resistant Concrete Block =
|
||||
Concrete Post Platform =
|
||||
Concrete Post =
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
# turkish translation by mahmutelmas06
|
||||
|
||||
Rebar = Beton demiri
|
||||
Concrete Block = Beton blok
|
||||
Blast-resistant Concrete Block = Patlamaya dayanıklı beton blok
|
||||
Concrete Post Platform = Beton direk platformu
|
||||
Concrete Post = Beton direk
|
|
@ -1,3 +0,0 @@
|
|||
name = concrete
|
||||
depends = default
|
||||
optional_depends = basic_materials, intllib, moreblocks
|
Before Width: | Height: | Size: 214 B |
Before Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 583 B |
|
@ -1,9 +0,0 @@
|
|||
default
|
||||
technic_worldgen
|
||||
basic_materials
|
||||
concrete
|
||||
unifieddyes?
|
||||
intllib?
|
||||
moreblocks?
|
||||
steel?
|
||||
streetsmod?
|
|
@ -1,309 +0,0 @@
|
|||
-- 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.Getter() or function(s) return s end
|
||||
|
||||
if minetest.get_modpath("moreblocks") then
|
||||
|
||||
-- register stairsplus/circular_saw nodes
|
||||
-- we skip blast resistant concrete and uranium intentionally
|
||||
-- chrome seems to be too hard of a metal to be actually sawable
|
||||
|
||||
stairsplus:register_all("technic", "marble", "technic:marble", {
|
||||
description=S("Marble"),
|
||||
groups={cracky=3, not_in_creative_inventory=1},
|
||||
tiles={"technic_marble.png"},
|
||||
})
|
||||
|
||||
stairsplus:register_all("technic", "marble_bricks", "technic:marble_bricks", {
|
||||
description=S("Marble Bricks"),
|
||||
groups={cracky=3, not_in_creative_inventory=1},
|
||||
tiles={"technic_marble_bricks.png"},
|
||||
})
|
||||
|
||||
stairsplus:register_all("technic", "granite", "technic:granite", {
|
||||
description=S("Granite"),
|
||||
groups={cracky=1, not_in_creative_inventory=1},
|
||||
tiles={"technic_granite.png"},
|
||||
})
|
||||
|
||||
stairsplus:register_all("technic", "concrete", "technic:concrete", {
|
||||
description=S("Concrete"),
|
||||
groups={cracky=3, not_in_creative_inventory=1},
|
||||
tiles={"basic_materials_concrete_block.png"},
|
||||
})
|
||||
|
||||
stairsplus:register_all("technic", "zinc_block", "technic:zinc_block", {
|
||||
description=S("Zinc Block"),
|
||||
groups={cracky=1, not_in_creative_inventory=1},
|
||||
tiles={"technic_zinc_block.png"},
|
||||
})
|
||||
|
||||
stairsplus:register_all("technic", "cast_iron_block", "technic:cast_iron_block", {
|
||||
description=S("Cast Iron Block"),
|
||||
groups={cracky=1, not_in_creative_inventory=1},
|
||||
tiles={"technic_cast_iron_block.png"},
|
||||
})
|
||||
|
||||
stairsplus:register_all("technic", "carbon_steel_block", "technic:carbon_steel_block", {
|
||||
description=S("Carbon Steel Block"),
|
||||
groups={cracky=1, not_in_creative_inventory=1},
|
||||
tiles={"technic_carbon_steel_block.png"},
|
||||
})
|
||||
|
||||
stairsplus:register_all("technic", "stainless_steel_block", "technic:stainless_steel_block", {
|
||||
description=S("Stainless Steel Block"),
|
||||
groups={cracky=1, not_in_creative_inventory=1},
|
||||
tiles={"technic_stainless_steel_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")
|
||||
minetest.register_alias(modname .. ":slab_" .. origname .. "_wall", newmod..":slab_" .. newname .. "_wall")
|
||||
minetest.register_alias(modname .. ":slab_" .. origname .. "_quarter", newmod..":slab_" .. newname .. "_quarter")
|
||||
minetest.register_alias(modname .. ":slab_" .. origname .. "_quarter_inverted", newmod..":slab_" .. newname .. "_quarter_inverted")
|
||||
minetest.register_alias(modname .. ":slab_" .. origname .. "_quarter_wall", newmod..":slab_" .. newname .. "_quarter_wall")
|
||||
minetest.register_alias(modname .. ":slab_" .. origname .. "_three_quarter", newmod..":slab_" .. newname .. "_three_quarter")
|
||||
minetest.register_alias(modname .. ":slab_" .. origname .. "_three_quarter_inverted", newmod..":slab_" .. newname .. "_three_quarter_inverted")
|
||||
minetest.register_alias(modname .. ":slab_" .. origname .. "_three_quarter_wall", newmod..":slab_" .. newname .. "_three_quarter_wall")
|
||||
minetest.register_alias(modname .. ":stair_" .. origname, newmod..":stair_" .. newname)
|
||||
minetest.register_alias(modname .. ":stair_" .. origname .. "_inverted", newmod..":stair_" .. newname .. "_inverted")
|
||||
minetest.register_alias(modname .. ":stair_" .. origname .. "_wall", newmod..":stair_" .. newname .. "_wall")
|
||||
minetest.register_alias(modname .. ":stair_" .. origname .. "_wall_half", newmod..":stair_" .. newname .. "_wall_half")
|
||||
minetest.register_alias(modname .. ":stair_" .. origname .. "_wall_half_inverted", newmod..":stair_" .. newname .. "_wall_half_inverted")
|
||||
minetest.register_alias(modname .. ":stair_" .. origname .. "_half", newmod..":stair_" .. newname .. "_half")
|
||||
minetest.register_alias(modname .. ":stair_" .. origname .. "_half_inverted", newmod..":stair_" .. newname .. "_half_inverted")
|
||||
minetest.register_alias(modname .. ":stair_" .. origname .. "_right_half", newmod..":stair_" .. newname .. "_right_half")
|
||||
minetest.register_alias(modname .. ":stair_" .. origname .. "_right_half_inverted", newmod..":stair_" .. newname .. "_right_half_inverted")
|
||||
minetest.register_alias(modname .. ":stair_" .. origname .. "_wall_half", newmod..":stair_" .. newname .. "_wall_half")
|
||||
minetest.register_alias(modname .. ":stair_" .. origname .. "_wall_half_inverted", newmod..":stair_" .. newname .. "_wall_half_inverted")
|
||||
minetest.register_alias(modname .. ":stair_" .. origname .. "_inner", newmod..":stair_" .. newname .. "_inner")
|
||||
minetest.register_alias(modname .. ":stair_" .. origname .. "_inner_inverted", newmod..":stair_" .. newname .. "_inner_inverted")
|
||||
minetest.register_alias(modname .. ":stair_" .. origname .. "_outer", newmod..":stair_" .. newname .. "_outer")
|
||||
minetest.register_alias(modname .. ":stair_" .. origname .. "_outer_inverted", newmod..":stair_" .. newname .. "_outer_inverted")
|
||||
minetest.register_alias(modname .. ":panel_" .. origname .. "_bottom", newmod..":panel_" .. newname .. "_bottom")
|
||||
minetest.register_alias(modname .. ":panel_" .. origname .. "_top", newmod..":panel_" .. newname .. "_top")
|
||||
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
|
||||
|
||||
register_technic_stairs_alias("stairsplus", "concrete", "technic", "concrete")
|
||||
register_technic_stairs_alias("stairsplus", "marble", "technic", "marble")
|
||||
register_technic_stairs_alias("stairsplus", "granite", "technic", "granite")
|
||||
register_technic_stairs_alias("stairsplus", "marble_bricks", "technic", "marble_bricks")
|
||||
|
||||
end
|
||||
|
||||
local iclip_def = {
|
||||
description = S("Insulator/cable clip"),
|
||||
drawtype = "mesh",
|
||||
mesh = "technic_insulator_clip.obj",
|
||||
tiles = {"technic_insulator_clip.png"},
|
||||
is_ground_content = false,
|
||||
groups = {choppy=1, snappy=1, oddly_breakable_by_hand=1 },
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
}
|
||||
|
||||
local iclipfence_def = {
|
||||
description = S("Insulator/cable clip"),
|
||||
tiles = {"technic_insulator_clip.png"},
|
||||
is_ground_content = false,
|
||||
paramtype = "light",
|
||||
drawtype = "nodebox",
|
||||
node_box = {
|
||||
type = "connected",
|
||||
fixed = {
|
||||
{ -0.25, 0.75, -0.25, 0.25, 1.25, 0.25 }, -- the clip on top
|
||||
{ -0.125, 0.6875, -0.125, 0.125, 0.75, 0.125 },
|
||||
{ -0.1875, 0.625, -0.1875, 0.1875, 0.6875, 0.1875 },
|
||||
{ -0.125, 0.5625, -0.125, 0.125, 0.625, 0.125 },
|
||||
{ -0.1875, 0.5, -0.1875, 0.1875, 0.5625, 0.1875 },
|
||||
{ -0.125, 0.4375, -0.125, 0.125, 0.5, 0.125 },
|
||||
{ -0.1875, 0.375, -0.1875, 0.1875, 0.4375, 0.1875 },
|
||||
{ -0.125, -0.5, -0.125, 0.125, 0.375, 0.125 }, -- the post, slightly short
|
||||
},
|
||||
-- connect_top =
|
||||
-- connect_bottom =
|
||||
connect_front = {{-1/16,3/16,-1/2,1/16,5/16,-1/8},
|
||||
{-1/16,-5/16,-1/2,1/16,-3/16,-1/8}},
|
||||
connect_left = {{-1/2,3/16,-1/16,-1/8,5/16,1/16},
|
||||
{-1/2,-5/16,-1/16,-1/8,-3/16,1/16}},
|
||||
connect_back = {{-1/16,3/16,1/8,1/16,5/16,1/2},
|
||||
{-1/16,-5/16,1/8,1/16,-3/16,1/2}},
|
||||
connect_right = {{1/8,3/16,-1/16,1/2,5/16,1/16},
|
||||
{1/8,-5/16,-1/16,1/2,-3/16,1/16}},
|
||||
},
|
||||
connects_to = {"group:fence", "group:wood", "group:tree"},
|
||||
groups = {fence=1, choppy=1, snappy=1, oddly_breakable_by_hand=1 },
|
||||
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)
|
||||
end
|
||||
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.groups = {fence=1, choppy=1, snappy=1, oddly_breakable_by_hand=1, ud_param2_colorable = 1}
|
||||
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)
|
||||
minetest.register_node(":technic:insulator_clip_fencepost", iclipfence_def)
|
||||
|
||||
minetest.register_craft({
|
||||
output = "technic:insulator_clip",
|
||||
recipe = {
|
||||
{ "", "dye:white", ""},
|
||||
{ "", "technic:raw_latex", ""},
|
||||
{ "technic:raw_latex", "default:stone", "technic:raw_latex"},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "technic:insulator_clip_fencepost 2",
|
||||
recipe = {
|
||||
{ "", "dye:white", ""},
|
||||
{ "", "technic:raw_latex", ""},
|
||||
{ "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
|
|
@ -1,9 +0,0 @@
|
|||
# German Translation for technic_extranodes
|
||||
# Deutsche Übersetzung von technic_extranodes
|
||||
# by Xanthin
|
||||
|
||||
Marble = Marmor
|
||||
Marble Bricks = Marmorziegel
|
||||
Granite = Granit
|
||||
Concrete = Beton
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
# technic_extranodes traducido por Carlos Barraza
|
||||
|
||||
Marble = Mármol
|
||||
Marble Bricks = Ladrillos de mármol
|
||||
Granite = Granito
|
||||
Concrete = Concreto
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
# technic_extranodes translation template
|
||||
|
||||
Marble = Marbre
|
||||
Marble Bricks = Briques en marbre
|
||||
Granite = Granite
|
||||
Concrete = Béton
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
# Polish Translation for technic_extranodes
|
||||
# Polskie tłumaczenie technic_extranodes
|
||||
# by mat9117
|
||||
|
||||
Marble = Marmur
|
||||
Marble Bricks = Marmurowe cegły
|
||||
Granite = Granit
|
||||
Concrete = Beton
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
# 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
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
# technic_extranodes translation template
|
||||
|
||||
Marble =
|
||||
Marble Bricks =
|
||||
Granite =
|
||||
Concrete =
|
||||
|
|
@ -1,6 +0,0 @@
|
|||
# turkish translation by mahmutelmas06
|
||||
|
||||
Marble = Mermer
|
||||
Marble Bricks = Mermer tuğla
|
||||
Granite = Granit
|
||||
Concrete = Beton
|
|
@ -1,3 +0,0 @@
|
|||
name = extranodes
|
||||
depends = default, technic_worldgen, basic_materials, concrete
|
||||
optional_depends = unifieddyes, intllib, moreblocks, steel, streetsmod
|
|
@ -1,173 +0,0 @@
|
|||
# Blender v2.72 (sub 0) OBJ File: ''
|
||||
# www.blender.org
|
||||
o Cube
|
||||
v -0.500000 -0.500000 0.500000
|
||||
v -0.500000 -0.500000 -0.500000
|
||||
v 0.500000 -0.500000 -0.500000
|
||||
v 0.500000 -0.500000 0.500000
|
||||
v -0.249997 0.500000 0.249997
|
||||
v -0.249997 0.500000 -0.249997
|
||||
v 0.249997 0.500000 -0.249997
|
||||
v 0.249997 0.500000 0.249997
|
||||
v -0.187500 0.500000 0.187500
|
||||
v -0.187500 0.500000 -0.187500
|
||||
v 0.187500 0.500000 -0.187500
|
||||
v 0.187500 0.500000 0.187500
|
||||
v -0.187500 0.750000 0.187500
|
||||
v -0.187500 0.750000 -0.187500
|
||||
v 0.187500 0.750000 -0.187500
|
||||
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 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.500000 0.312500 0.500000
|
||||
v -0.500000 0.312500 -0.500000
|
||||
v 0.500000 0.312500 -0.500000
|
||||
v 0.500000 0.312500 0.500000
|
||||
v 0.187500 0.625000 0.187500
|
||||
v 0.187500 0.625000 -0.187500
|
||||
v -0.187500 0.625000 -0.187500
|
||||
v -0.187500 0.625000 0.187500
|
||||
v 0.187500 0.562500 0.187500
|
||||
v 0.187500 0.687500 -0.187500
|
||||
v -0.187500 0.687500 -0.187500
|
||||
v -0.187500 0.562500 0.187500
|
||||
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.687500 0.187500
|
||||
v 0.168668 0.531250 0.168668
|
||||
v 0.168668 0.718750 -0.168668
|
||||
v -0.168668 0.718750 -0.168668
|
||||
v -0.168668 0.531250 0.168668
|
||||
v 0.168668 0.656250 0.168668
|
||||
v 0.168668 0.593750 -0.168668
|
||||
v -0.168668 0.593750 -0.168668
|
||||
v -0.168668 0.656250 0.168668
|
||||
v 0.168668 0.593750 0.168668
|
||||
v 0.168668 0.656250 -0.168668
|
||||
v -0.168668 0.656250 -0.168668
|
||||
v -0.168668 0.593750 0.168668
|
||||
v 0.168668 0.718750 0.168668
|
||||
v 0.168668 0.531250 -0.168668
|
||||
v -0.168668 0.531250 -0.168668
|
||||
v -0.168668 0.718750 0.168668
|
||||
vt 1.000000 0.000000
|
||||
vt 1.000000 1.000000
|
||||
vt 0.000000 1.000000
|
||||
vt 0.000000 0.000000
|
||||
vt 0.749997 0.749997
|
||||
vt 0.749997 0.250003
|
||||
vt 0.250003 0.250003
|
||||
vt 0.250003 0.749997
|
||||
vt 0.000000 0.812500
|
||||
vt 1.000000 0.812500
|
||||
vt 0.312500 0.312500
|
||||
vt 0.312500 0.687500
|
||||
vt 0.687500 0.312500
|
||||
vt 0.687500 0.687500
|
||||
vt 0.331332 1.218750
|
||||
vt 0.668668 1.218750
|
||||
vt 0.687500 1.250000
|
||||
vt 0.312500 1.250000
|
||||
vt 0.750000 1.250000
|
||||
vt 0.750000 1.750000
|
||||
vt 0.250000 1.750000
|
||||
vt 0.250000 1.250000
|
||||
vt 0.331332 1.093750
|
||||
vt 0.668668 1.093750
|
||||
vt 0.687500 1.125000
|
||||
vt 0.312500 1.125000
|
||||
vt 0.331332 1.093750
|
||||
vt 0.668668 1.093750
|
||||
vt 0.331332 1.156250
|
||||
vt 0.668668 1.156250
|
||||
vt 0.687500 1.187500
|
||||
vt 0.312500 1.187500
|
||||
vt 0.331332 1.156250
|
||||
vt 0.668668 1.156250
|
||||
vt 0.331332 1.031250
|
||||
vt 0.668668 1.031250
|
||||
vt 0.687500 1.062500
|
||||
vt 0.312500 1.062500
|
||||
vt 0.312500 1.000000
|
||||
vt 0.687500 1.000000
|
||||
vn 0.000000 -1.000000 -0.000000
|
||||
vn -0.600000 0.800000 -0.000000
|
||||
vn 0.000000 0.800000 -0.600000
|
||||
vn 0.600000 0.800000 0.000000
|
||||
vn -0.000000 0.000000 1.000000
|
||||
vn 0.000000 1.000000 0.000000
|
||||
vn 0.856500 -0.516200 0.000000
|
||||
vn 0.000000 -0.516200 -0.856500
|
||||
vn -0.000000 -0.516200 0.856500
|
||||
vn -0.856500 -0.516200 -0.000000
|
||||
vn -1.000000 0.000000 -0.000000
|
||||
vn 0.000000 -0.000000 -1.000000
|
||||
vn 1.000000 -0.000000 0.000000
|
||||
vn -0.000000 0.800000 0.600000
|
||||
vn 0.856500 0.516200 0.000000
|
||||
vn 0.000000 0.516200 -0.856500
|
||||
vn -0.000000 0.516200 0.856500
|
||||
vn -0.856500 0.516200 -0.000000
|
||||
g Cube_Cube_Material
|
||||
s off
|
||||
f 1/1/1 2/2/1 3/3/1 4/4/1
|
||||
f 25/2/2 5/5/2 6/6/2 26/1/2
|
||||
f 26/1/3 6/6/3 7/7/3 27/4/3
|
||||
f 27/4/4 7/7/4 8/8/4 28/3/4
|
||||
f 25/9/5 1/4/5 4/1/5 28/10/5
|
||||
f 8/8/6 7/7/6 11/11/6 12/12/6
|
||||
f 7/7/6 6/6/6 10/13/6 11/11/6
|
||||
f 5/5/6 8/8/6 12/12/6 9/14/6
|
||||
f 6/6/6 5/5/6 9/14/6 10/13/6
|
||||
f 53/15/7 42/16/7 15/17/7 16/18/7
|
||||
f 42/15/8 43/16/8 14/17/8 15/18/8
|
||||
f 56/15/9 53/16/9 16/17/9 13/18/9
|
||||
f 43/15/10 56/16/10 13/17/10 14/18/10
|
||||
f 14/4/1 18/4/1 19/4/1 15/4/1
|
||||
f 17/19/11 21/20/11 22/21/11 18/22/11
|
||||
f 18/19/12 22/20/12 23/21/12 19/22/12
|
||||
f 19/19/13 23/20/13 24/21/13 20/22/13
|
||||
f 21/21/5 17/22/5 20/19/5 24/20/5
|
||||
f 21/5/6 24/8/6 23/7/6 22/6/6
|
||||
f 15/4/1 19/4/1 20/4/1 16/4/1
|
||||
f 16/4/1 20/4/1 17/4/1 13/4/1
|
||||
f 13/4/1 17/4/1 18/4/1 14/4/1
|
||||
f 1/1/11 25/10/11 26/9/11 2/4/11
|
||||
f 2/1/12 26/10/12 27/9/12 3/4/12
|
||||
f 3/1/13 27/10/13 28/9/13 4/4/13
|
||||
f 5/5/14 25/2/14 28/3/14 8/8/14
|
||||
f 49/23/7 46/24/7 30/25/7 29/26/7
|
||||
f 46/27/8 47/28/8 31/25/8 30/26/8
|
||||
f 52/23/9 49/24/9 29/25/9 32/26/9
|
||||
f 47/23/10 52/24/10 32/25/10 31/26/10
|
||||
f 45/29/7 50/30/7 34/31/7 37/32/7
|
||||
f 50/33/8 51/34/8 35/31/8 34/32/8
|
||||
f 48/33/9 45/34/9 37/31/9 40/32/9
|
||||
f 51/29/10 48/30/10 40/31/10 35/32/10
|
||||
f 41/35/7 54/36/7 38/37/7 33/38/7
|
||||
f 54/35/8 55/36/8 39/37/8 38/38/8
|
||||
f 44/35/9 41/36/9 33/37/9 36/38/9
|
||||
f 55/35/10 44/36/10 36/37/10 39/38/10
|
||||
f 37/32/15 34/31/15 42/16/15 53/15/15
|
||||
f 34/32/16 35/31/16 43/16/16 42/15/16
|
||||
f 40/32/17 37/31/17 53/16/17 56/15/17
|
||||
f 35/32/18 40/31/18 56/16/18 43/15/18
|
||||
f 33/38/15 38/37/15 46/24/15 49/23/15
|
||||
f 38/38/16 39/37/16 47/28/16 46/27/16
|
||||
f 36/38/17 33/37/17 49/24/17 52/23/17
|
||||
f 39/38/18 36/37/18 52/24/18 47/23/18
|
||||
f 29/26/15 30/25/15 50/30/15 45/29/15
|
||||
f 30/26/16 31/25/16 51/34/16 50/33/16
|
||||
f 32/26/17 29/25/17 45/34/17 48/33/17
|
||||
f 31/26/18 32/25/18 48/30/18 51/29/18
|
||||
f 12/39/15 11/40/15 54/36/15 41/35/15
|
||||
f 11/39/16 10/40/16 55/36/16 54/35/16
|
||||
f 9/39/17 12/40/17 41/36/17 44/35/17
|
||||
f 10/39/18 9/40/18 44/36/18 55/35/18
|
|
@ -1,246 +0,0 @@
|
|||
# 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
|
Before Width: | Height: | Size: 202 B |
Before Width: | Height: | Size: 103 B |
17
factory/LICENSE
Normal file
|
@ -0,0 +1,17 @@
|
|||
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
||||
Version 2, December 2004
|
||||
|
||||
Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
|
||||
|
||||
Everyone is permitted to copy and distribute verbatim or modified
|
||||
copies of this license document, and changing it is allowed as long
|
||||
as the name is changed.
|
||||
|
||||
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. You just DO WHAT THE FUCK YOU WANT TO.
|
||||
|
||||
----------
|
||||
|
||||
This license is commonly known as "WTFPL".
|
130
factory/crafting.lua
Normal file
|
@ -0,0 +1,130 @@
|
|||
minetest.register_craft({
|
||||
output = "factory:belt 12",
|
||||
recipe = {
|
||||
{"", "default:gold_ingot", ""},
|
||||
{"default:obsidian", "factory:small_steel_gear", "default:obsidian"},
|
||||
{"default:steelblock", "default:steelblock", "default:steelblock"}
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "factory:arm",
|
||||
recipe = {
|
||||
{"default:steel_ingot", "default:steel_ingot", "farming:hoe_steel"},
|
||||
{"default:steel_ingot", "default:gold_ingot", "factory:small_steel_gear"},
|
||||
{"default:steelblock", "default:steelblock", "default:steelblock"}
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "factory:smoke_tube",
|
||||
recipe = {
|
||||
{"default:steel_ingot", "", "default:steel_ingot"},
|
||||
{"default:steel_ingot", "", "default:steel_ingot"},
|
||||
{"default:steel_ingot", "", "default:steel_ingot"}
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "factory:ind_furnace",
|
||||
recipe = {
|
||||
{"factory:small_steel_gear", "default:steel_ingot", "factory:small_steel_gear"},
|
||||
{"default:steel_ingot", "default:furnace", "default:steel_ingot"},
|
||||
{"default:stonebrick", "default:obsidian", "default:stonebrick"}
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "factory:small_steel_gear 3",
|
||||
recipe = {
|
||||
{"default:steel_ingot", "", "default:steel_ingot"},
|
||||
{"", "default:steel_ingot", ""},
|
||||
{"default:steel_ingot", "", "default:steel_ingot"}
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "factory:small_gold_gear 2",
|
||||
recipe = {
|
||||
{"default:gold_ingot", "", "default:gold_ingot"},
|
||||
{"", "factory:small_steel_gear", ""},
|
||||
{"default:gold_ingot", "", "default:gold_ingot"}
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "factory:small_diamond_gear 2",
|
||||
recipe = {
|
||||
{"default:diamond", "", "default:diamond"},
|
||||
{"", "factory:small_gold_gear", ""},
|
||||
{"default:diamond", "", "default:diamond"}
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "factory:taker",
|
||||
recipe = {
|
||||
{"default:shovel_steel", "default:steel_ingot", "default:gold_ingot"},
|
||||
{"factory:small_steel_gear", "factory:small_steel_gear", "default:gold_ingot"},
|
||||
{"default:steelblock", "default:steelblock", "default:steelblock"}
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "shapeless",
|
||||
output = "factory:taker_gold",
|
||||
recipe = {"factory:taker", "default:goldblock", "factory:small_gold_gear"}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "shapeless",
|
||||
output = "factory:taker_diamond",
|
||||
recipe = {"factory:taker_gold", "default:diamondblock", "factory:small_diamond_gear"}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "shapeless",
|
||||
output = "factory:queuedarm",
|
||||
recipe = {"factory:arm", "default:chest", "factory:small_gold_gear"}
|
||||
})
|
||||
|
||||
factory.register_craft({
|
||||
type = "ind_squeezer",
|
||||
output = "factory:tree_sap",
|
||||
recipe = {{"default:tree"}}
|
||||
})
|
||||
|
||||
factory.register_craft({
|
||||
type = "ind_squeezer",
|
||||
output = "factory:tree_sap",
|
||||
recipe = {{"default:jungle_tree"}}
|
||||
})
|
||||
|
||||
factory.register_craft({
|
||||
type = "ind_squeezer",
|
||||
output = "factory:compressed_clay",
|
||||
recipe = {{"default:clay_lump"}}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "cooking",
|
||||
output = "factory:factory_lump",
|
||||
recipe = "factory:compressed_clay"
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'factory:factory_brick 6',
|
||||
recipe = {
|
||||
{'factory:factory_lump', 'factory:factory_lump'},
|
||||
{'factory:factory_lump', 'factory:factory_lump'},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "factory:ind_squeezer",
|
||||
recipe = {
|
||||
{"default:glass", "default:stick", "default:glass"},
|
||||
{"default:glass", "default:steelblock", "default:glass"},
|
||||
{"factory:small_gold_gear", "factory:ind_furnace", "factory:small_gold_gear"}
|
||||
}
|
||||
})
|
30
factory/craftitems.lua
Normal file
|
@ -0,0 +1,30 @@
|
|||
minetest.register_craftitem("factory:small_steel_gear", {
|
||||
description = "Small Steel Gear",
|
||||
inventory_image = "factory_small_steel_gear.png"
|
||||
})
|
||||
|
||||
minetest.register_craftitem("factory:small_gold_gear", {
|
||||
description = "Small Gold Gear",
|
||||
inventory_image = "factory_small_gold_gear.png"
|
||||
})
|
||||
|
||||
minetest.register_craftitem("factory:small_diamond_gear", {
|
||||
description = "Small Diamond Gear",
|
||||
inventory_image = "factory_small_diamond_gear.png"
|
||||
})
|
||||
|
||||
minetest.register_craftitem("factory:tree_sap", {
|
||||
description = "Tree Sap",
|
||||
inventory_image = "factory_tree_sap.png"
|
||||
})
|
||||
|
||||
minetest.register_craftitem("factory:compressed_clay", {
|
||||
description = "Compressed Clay",
|
||||
inventory_image = "factory_compressed_clay.png"
|
||||
})
|
||||
|
||||
minetest.register_craftitem("factory:factory_lump", {
|
||||
description = "Factory Lump",
|
||||
inventory_image = "factory_lump.png"
|
||||
})
|
||||
|
327
factory/ind_furnace.lua
Normal file
|
@ -0,0 +1,327 @@
|
|||
function factory.ind_furnace_active(pos, percent, item_percent)
|
||||
local formspec =
|
||||
"size[8,8.5]"..
|
||||
factory_gui_bg..
|
||||
factory_gui_bg_img..
|
||||
factory_gui_slots..
|
||||
"list[current_name;src;2.75,0.5;1,1;]"..
|
||||
"list[current_name;fuel;2.75,2.5;1,1;]"..
|
||||
"image[2.75,1.5;1,1;factory_ind_furnace_fire_bg.png^[lowpart:"..
|
||||
(100-percent)..":factory_ind_furnace_fire_fg.png]"..
|
||||
"image[3.75,1.5;1,1;gui_ind_furnace_arrow_bg.png^[lowpart:"..
|
||||
(item_percent*100)..":gui_ind_furnace_arrow_fg.png^[transformR270]"..
|
||||
"list[current_name;dst;4.75,0.5;2,2;]"..
|
||||
"list[current_player;main;0,4.25;8,1;]"..
|
||||
"list[current_player;main;0,5.5;8,3;8]"..
|
||||
factory.get_hotbar_bg(0,4.25)
|
||||
return formspec
|
||||
end
|
||||
|
||||
function factory.ind_furnace_active_formspec(pos, percent)
|
||||
local meta = minetest.get_meta(pos)local inv = meta:get_inventory()
|
||||
local srclist = inv:get_list("src")
|
||||
local cooked = nil
|
||||
local aftercooked = nil
|
||||
if srclist then
|
||||
cooked, aftercooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist})
|
||||
end
|
||||
local item_percent = 0
|
||||
if cooked then
|
||||
item_percent = meta:get_float("src_time")/cooked.time
|
||||
end
|
||||
|
||||
return factory.ind_furnace_active(pos, percent, item_percent)
|
||||
end
|
||||
|
||||
factory.ind_furnace_inactive_formspec =
|
||||
"size[8,8.5]"..
|
||||
factory_gui_bg..
|
||||
factory_gui_bg_img..
|
||||
factory_gui_slots..
|
||||
"list[current_name;src;2.75,0.5;1,1;]"..
|
||||
"list[current_name;fuel;2.75,2.5;1,1;]"..
|
||||
"image[2.75,1.5;1,1;factory_ind_furnace_fire_bg.png]"..
|
||||
"image[3.75,1.5;1,1;gui_ind_furnace_arrow_bg.png^[transformR270]"..
|
||||
"list[current_name;dst;4.75,0.5;2,2;]"..
|
||||
"list[current_player;main;0,4.25;8,1;]"..
|
||||
"list[current_player;main;0,5.5;8,3;8]"..
|
||||
factory.get_hotbar_bg(0,4.25)
|
||||
|
||||
minetest.register_node("factory:ind_furnace", {
|
||||
description = "Industrial Furnace",
|
||||
tiles = {"factory_machine_brick_1.png", "factory_machine_brick_2.png", "factory_machine_side_1.png",
|
||||
"factory_machine_side_1.png", "factory_machine_side_1.png", "factory_ind_furnace_front.png"},
|
||||
paramtype2 = "facedir",
|
||||
groups = {cracky=3},
|
||||
legacy_facedir_simple = true,
|
||||
is_ground_content = false,
|
||||
on_construct = function(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("formspec", factory.ind_furnace_inactive_formspec)
|
||||
meta:set_string("infotext", "Industrial Furnace")
|
||||
local inv = meta:get_inventory()
|
||||
inv:set_size("fuel", 1)
|
||||
inv:set_size("src", 1)
|
||||
inv:set_size("dst", 4)
|
||||
end,
|
||||
can_dig = function(pos,player)
|
||||
local meta = minetest.get_meta(pos);
|
||||
local inv = meta:get_inventory()
|
||||
if not inv:is_empty("fuel") then
|
||||
return false
|
||||
elseif not inv:is_empty("dst") then
|
||||
return false
|
||||
elseif not inv:is_empty("src") then
|
||||
return false
|
||||
end
|
||||
return true
|
||||
end,
|
||||
allow_metadata_inventory_put = function(pos, listname, index, stack, player)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
if listname == "fuel" then
|
||||
if minetest.get_craft_result({method="fuel",width=1,items={stack}}).time ~= 0 then
|
||||
if inv:is_empty("src") then
|
||||
meta:set_string("infotext","Industrial Furnace is empty")
|
||||
end
|
||||
return stack:get_count()
|
||||
else
|
||||
return 0
|
||||
end
|
||||
elseif listname == "src" then
|
||||
return stack:get_count()
|
||||
elseif listname == "dst" then
|
||||
return 0
|
||||
end
|
||||
end,
|
||||
allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
local stack = inv:get_stack(from_list, from_index)
|
||||
if to_list == "fuel" then
|
||||
if minetest.get_craft_result({method="fuel",width=1,items={stack}}).time ~= 0 then
|
||||
if inv:is_empty("src") then
|
||||
meta:set_string("infotext","Industrial Furnace is empty")
|
||||
end
|
||||
return count
|
||||
else
|
||||
return 0
|
||||
end
|
||||
elseif to_list == "src" then
|
||||
return count
|
||||
elseif to_list == "dst" then
|
||||
return 0
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
minetest.register_node("factory:ind_furnace_active", {
|
||||
description = "Industrial Furnace",
|
||||
tiles = {
|
||||
"factory_machine_brick_1.png",
|
||||
"factory_machine_brick_2.png",
|
||||
"factory_machine_side_1.png",
|
||||
"factory_machine_side_1.png",
|
||||
"factory_machine_side_1.png",
|
||||
{
|
||||
image = "factory_ind_furnace_front_active.png",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
aspect_w = 32,
|
||||
aspect_h = 32,
|
||||
length = 1.5
|
||||
},
|
||||
}
|
||||
},
|
||||
paramtype2 = "facedir",
|
||||
light_source = 14,
|
||||
drop = "factory:ind_furnace",
|
||||
groups = {cracky=3, not_in_creative_inventory=1,hot=1},
|
||||
legacy_facedir_simple = true,
|
||||
is_ground_content = false,
|
||||
on_construct = function(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("formspec", factory.ind_furnace_inactive_formspec)
|
||||
meta:set_string("infotext", "Industrial Furnace (burning)");
|
||||
local inv = meta:get_inventory()
|
||||
inv:set_size("fuel", 1)
|
||||
inv:set_size("src", 1)
|
||||
inv:set_size("dst", 4)
|
||||
end,
|
||||
can_dig = function(pos,player)
|
||||
local meta = minetest.get_meta(pos);
|
||||
local inv = meta:get_inventory()
|
||||
if not inv:is_empty("fuel") then
|
||||
return false
|
||||
elseif not inv:is_empty("dst") then
|
||||
return false
|
||||
elseif not inv:is_empty("src") then
|
||||
return false
|
||||
end
|
||||
return true
|
||||
end,
|
||||
allow_metadata_inventory_put = function(pos, listname, index, stack, player)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
if listname == "fuel" then
|
||||
if minetest.get_craft_result({method="fuel",width=1,items={stack}}).time ~= 0 then
|
||||
if inv:is_empty("src") then
|
||||
meta:set_string("infotext","Industrial Furnace is empty")
|
||||
end
|
||||
return stack:get_count()
|
||||
else
|
||||
return 0
|
||||
end
|
||||
elseif listname == "src" then
|
||||
return stack:get_count()
|
||||
elseif listname == "dst" then
|
||||
return 0
|
||||
end
|
||||
end,
|
||||
allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
local stack = inv:get_stack(from_list, from_index)
|
||||
if to_list == "fuel" then
|
||||
if minetest.get_craft_result({method="fuel",width=1,items={stack}}).time ~= 0 then
|
||||
if inv:is_empty("src") then
|
||||
meta:set_string("infotext","Industrial Furnace is empty")
|
||||
end
|
||||
return count
|
||||
else
|
||||
return 0
|
||||
end
|
||||
elseif to_list == "src" then
|
||||
return count
|
||||
elseif to_list == "dst" then
|
||||
return 0
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
minetest.register_abm({
|
||||
nodenames = {"factory:ind_furnace","factory:ind_furnace_active"},
|
||||
interval = 1.0,
|
||||
chance = 1,
|
||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
||||
local meta = minetest.get_meta(pos)
|
||||
for i, name in ipairs({
|
||||
"fuel_totaltime",
|
||||
"fuel_time",
|
||||
"src_totaltime",
|
||||
"src_time"
|
||||
}) do
|
||||
if meta:get_string(name) == "" then
|
||||
meta:set_float(name, 0.0)
|
||||
end
|
||||
end
|
||||
|
||||
local height = 0
|
||||
|
||||
for i=1,7 do -- SMOKE TUBE CHECK
|
||||
local dn = minetest.get_node({x = pos.x, y = pos.y + i, z = pos.z})
|
||||
if dn.name == "factory:smoke_tube" then
|
||||
height = height + 1
|
||||
else break end
|
||||
end
|
||||
|
||||
if minetest.get_node({x = pos.x, y = pos.y + height + 1, z = pos.z}).name ~= "air" then return end
|
||||
|
||||
if height < 2 then return else
|
||||
if minetest.get_node(pos).name == "factory:ind_furnace_active" then
|
||||
minetest.add_particlespawner({
|
||||
amount = 4,
|
||||
time = 3,
|
||||
minpos = {x = pos.x - 0.2, y = pos.y + height + 0.3, z = pos.z - 0.2},
|
||||
maxpos = {x = pos.x + 0.2, y = pos.y + height + 0.6, z = pos.z + 0.2},
|
||||
minvel = {x=-0.4, y=1, z=-0.4},
|
||||
maxvel = {x=0.4, y=2, z=0.4},
|
||||
minacc = {x=0, y=0, z=0},
|
||||
maxacc = {x=0, y=0, z=0},
|
||||
minexptime = 0.8,
|
||||
maxexptime = 2,
|
||||
minsize = 2,
|
||||
maxsize = 4,
|
||||
collisiondetection = false,
|
||||
vertical = false,
|
||||
texture = "factory_smoke.png",
|
||||
playername = nil,
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
local inv = meta:get_inventory()
|
||||
|
||||
local srclist = inv:get_list("src")
|
||||
local cooked = nil
|
||||
local aftercooked
|
||||
|
||||
if srclist then
|
||||
cooked, aftercooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist})
|
||||
end
|
||||
|
||||
local was_active = false
|
||||
|
||||
if meta:get_float("fuel_time") < meta:get_float("fuel_totaltime") then
|
||||
was_active = true
|
||||
meta:set_float("fuel_time", meta:get_float("fuel_time") + 0.65)
|
||||
meta:set_float("src_time", meta:get_float("src_time") + 1.2)
|
||||
if cooked and cooked.item and meta:get_float("src_time") >= cooked.time then
|
||||
-- check if there's room for output in "dst" list
|
||||
if inv:room_for_item("dst",cooked.item) then
|
||||
-- Put result in "dst" list
|
||||
inv:add_item("dst", cooked.item)
|
||||
-- take stuff from "src" list
|
||||
inv:set_stack("src", 1, aftercooked.items[1])
|
||||
else
|
||||
--print("Could not insert '"..cooked.item:to_string().."'")
|
||||
end
|
||||
meta:set_string("src_time", 0)
|
||||
end
|
||||
end
|
||||
|
||||
if meta:get_float("fuel_time") < meta:get_float("fuel_totaltime") then
|
||||
local percent = math.floor(meta:get_float("fuel_time") /
|
||||
meta:get_float("fuel_totaltime") * 100)
|
||||
meta:set_string("infotext","Industrial Furnace is smelting, fuel current used: "..percent.."%")
|
||||
factory.swap_node(pos,"factory:ind_furnace_active")
|
||||
meta:set_string("formspec",factory.ind_furnace_active_formspec(pos, percent))
|
||||
return
|
||||
end
|
||||
|
||||
local fuel = nil
|
||||
local afterfuel
|
||||
local cooked = nil
|
||||
local fuellist = inv:get_list("fuel")
|
||||
local srclist = inv:get_list("src")
|
||||
|
||||
if srclist then
|
||||
cooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist})
|
||||
end
|
||||
if fuellist then
|
||||
fuel, afterfuel = minetest.get_craft_result({method = "fuel", width = 1, items = fuellist})
|
||||
end
|
||||
|
||||
if not fuel or fuel.time <= 0 then
|
||||
meta:set_string("infotext","Industrial Furnace has nothing to burn with")
|
||||
factory.swap_node(pos,"factory:ind_furnace")
|
||||
meta:set_string("formspec", factory.ind_furnace_inactive_formspec)
|
||||
return
|
||||
end
|
||||
|
||||
if cooked.item:is_empty() then
|
||||
if was_active then
|
||||
meta:set_string("infotext","Furnace is empty")
|
||||
factory.swap_node(pos,"factory:ind_furnace")
|
||||
meta:set_string("formspec", factory.ind_furnace_inactive_formspec)
|
||||
end
|
||||
return
|
||||
end
|
||||
|
||||
meta:set_string("fuel_totaltime", fuel.time)
|
||||
meta:set_string("fuel_time", 0)
|
||||
|
||||
inv:set_stack("fuel", 1, afterfuel.items[1])
|
||||
end,
|
||||
})
|
327
factory/ind_squeezer.lua
Normal file
|
@ -0,0 +1,327 @@
|
|||
function factory.ind_squeezer_active(pos, percent, item_percent)
|
||||
local formspec =
|
||||
"size[8,8.5]"..
|
||||
factory_gui_bg..
|
||||
factory_gui_bg_img..
|
||||
factory_gui_slots..
|
||||
"list[current_name;src;2.75,0.5;1,1;]"..
|
||||
"list[current_name;fuel;2.75,2.5;1,1;]"..
|
||||
"image[2.75,1.5;1,1;factory_compressor_drop_bg.png^[lowpart:"..
|
||||
(100-percent)..":factory_compressor_drop_fg.png]"..
|
||||
"image[3.75,1.5;1,1;gui_ind_furnace_arrow_bg.png^[lowpart:"..
|
||||
(item_percent*100)..":gui_ind_furnace_arrow_fg.png^[transformR270]"..
|
||||
"list[current_name;dst;4.75,0.5;2,2;]"..
|
||||
"list[current_player;main;0,4.25;8,1;]"..
|
||||
"list[current_player;main;0,5.5;8,3;8]"..
|
||||
factory.get_hotbar_bg(0,4.25)
|
||||
return formspec
|
||||
end
|
||||
|
||||
function factory.ind_squeezer_active_formspec(pos, percent)
|
||||
local meta = minetest.get_meta(pos)local inv = meta:get_inventory()
|
||||
local srclist = inv:get_list("src")
|
||||
local cooked = nil
|
||||
if srclist then
|
||||
cooked = factory.get_craft_result({method = "ind_squeezer", width = 1, items = srclist})
|
||||
end
|
||||
local item_percent = 0
|
||||
if cooked then
|
||||
item_percent = meta:get_float("src_time")/cooked.time
|
||||
end
|
||||
|
||||
return factory.ind_squeezer_active(pos, percent, item_percent)
|
||||
end
|
||||
|
||||
factory.ind_squeezer_inactive_formspec =
|
||||
"size[8,8.5]"..
|
||||
factory_gui_bg..
|
||||
factory_gui_bg_img..
|
||||
factory_gui_slots..
|
||||
"list[current_name;src;2.75,0.5;1,1;]"..
|
||||
"list[current_name;fuel;2.75,2.5;1,1;]"..
|
||||
"image[2.75,1.5;1,1;factory_compressor_drop_bg.png]"..
|
||||
"image[3.75,1.5;1,1;gui_ind_furnace_arrow_bg.png^[transformR270]"..
|
||||
"list[current_name;dst;4.75,0.5;2,2;]"..
|
||||
"list[current_player;main;0,4.25;8,1;]"..
|
||||
"list[current_player;main;0,5.5;8,3;8]"..
|
||||
factory.get_hotbar_bg(0,4.25)
|
||||
|
||||
minetest.register_node("factory:ind_squeezer", {
|
||||
description = "Industrial Squeezer",
|
||||
tiles = {"factory_machine_brick_1.png", "factory_machine_brick_2.png", "factory_machine_side_1.png",
|
||||
"factory_machine_side_1.png", "factory_machine_side_1.png", "factory_compressor_front.png"},
|
||||
paramtype2 = "facedir",
|
||||
groups = {cracky=3},
|
||||
legacy_facedir_simple = true,
|
||||
is_ground_content = false,
|
||||
on_construct = function(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("formspec", factory.ind_squeezer_inactive_formspec)
|
||||
meta:set_string("infotext", "Industrial Squeezer")
|
||||
local inv = meta:get_inventory()
|
||||
inv:set_size("fuel", 1)
|
||||
inv:set_size("src", 1)
|
||||
inv:set_size("dst", 4)
|
||||
end,
|
||||
can_dig = function(pos,player)
|
||||
local meta = minetest.get_meta(pos);
|
||||
local inv = meta:get_inventory()
|
||||
if not inv:is_empty("fuel") then
|
||||
return false
|
||||
elseif not inv:is_empty("dst") then
|
||||
return false
|
||||
elseif not inv:is_empty("src") then
|
||||
return false
|
||||
end
|
||||
return true
|
||||
end,
|
||||
allow_metadata_inventory_put = function(pos, listname, index, stack, player)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
if listname == "fuel" then
|
||||
if minetest.get_craft_result({method="fuel",width=1,items={stack}}).time ~= 0 then
|
||||
if inv:is_empty("src") then
|
||||
meta:set_string("infotext","Industrial Squeezer is empty")
|
||||
end
|
||||
return stack:get_count()
|
||||
else
|
||||
return 0
|
||||
end
|
||||
elseif listname == "src" then
|
||||
return stack:get_count()
|
||||
elseif listname == "dst" then
|
||||
return 0
|
||||
end
|
||||
end,
|
||||
allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
local stack = inv:get_stack(from_list, from_index)
|
||||
if to_list == "fuel" then
|
||||
if minetest.get_craft_result({method="fuel",width=1,items={stack}}).time ~= 0 then
|
||||
if inv:is_empty("src") then
|
||||
meta:set_string("infotext","Industrial Squeezer is empty")
|
||||
end
|
||||
return count
|
||||
else
|
||||
return 0
|
||||
end
|
||||
elseif to_list == "src" then
|
||||
return count
|
||||
elseif to_list == "dst" then
|
||||
return 0
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
minetest.register_node("factory:ind_squeezer_active", {
|
||||
description = "Industrial Squeezer",
|
||||
tiles = {
|
||||
"factory_machine_brick_1.png",
|
||||
"factory_machine_brick_2.png",
|
||||
"factory_machine_side_1.png",
|
||||
"factory_machine_side_1.png",
|
||||
"factory_machine_side_1.png",
|
||||
{
|
||||
image = "factory_compressor_front_active.png",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
aspect_w = 32,
|
||||
aspect_h = 32,
|
||||
length = 4
|
||||
},
|
||||
}
|
||||
},
|
||||
paramtype2 = "facedir",
|
||||
light_source = 2,
|
||||
drop = "factory:ind_squeezer",
|
||||
groups = {cracky=3, not_in_creative_inventory=1,hot=1},
|
||||
legacy_facedir_simple = true,
|
||||
is_ground_content = false,
|
||||
on_construct = function(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("formspec", factory.ind_squeezer_inactive_formspec)
|
||||
meta:set_string("infotext", "Industrial Squeezer (working)");
|
||||
local inv = meta:get_inventory()
|
||||
inv:set_size("fuel", 1)
|
||||
inv:set_size("src", 1)
|
||||
inv:set_size("dst", 4)
|
||||
end,
|
||||
can_dig = function(pos,player)
|
||||
local meta = minetest.get_meta(pos);
|
||||
local inv = meta:get_inventory()
|
||||
if not inv:is_empty("fuel") then
|
||||
return false
|
||||
elseif not inv:is_empty("dst") then
|
||||
return false
|
||||
elseif not inv:is_empty("src") then
|
||||
return false
|
||||
end
|
||||
return true
|
||||
end,
|
||||
allow_metadata_inventory_put = function(pos, listname, index, stack, player)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
if listname == "fuel" then
|
||||
if minetest.get_craft_result({method="fuel",width=1,items={stack}}).time ~= 0 then
|
||||
if inv:is_empty("src") then
|
||||
meta:set_string("infotext","Industrial Squeezer is empty")
|
||||
end
|
||||
return stack:get_count()
|
||||
else
|
||||
return 0
|
||||
end
|
||||
elseif listname == "src" then
|
||||
return stack:get_count()
|
||||
elseif listname == "dst" then
|
||||
return 0
|
||||
end
|
||||
end,
|
||||
allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
local stack = inv:get_stack(from_list, from_index)
|
||||
if to_list == "fuel" then
|
||||
if minetest.get_craft_result({method="fuel",width=1,items={stack}}).time ~= 0 then
|
||||
if inv:is_empty("src") then
|
||||
meta:set_string("infotext","Industrial Squeezer is empty")
|
||||
end
|
||||
return count
|
||||
else
|
||||
return 0
|
||||
end
|
||||
elseif to_list == "src" then
|
||||
return count
|
||||
elseif to_list == "dst" then
|
||||
return 0
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
minetest.register_abm({
|
||||
nodenames = {"factory:ind_squeezer","factory:ind_squeezer_active"},
|
||||
interval = 1.0,
|
||||
chance = 1,
|
||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
||||
local meta = minetest.get_meta(pos)
|
||||
for i, name in ipairs({
|
||||
"fuel_totaltime",
|
||||
"fuel_time",
|
||||
"src_totaltime",
|
||||
"src_time"
|
||||
}) do
|
||||
if meta:get_string(name) == "" then
|
||||
meta:set_float(name, 0.0)
|
||||
end
|
||||
end
|
||||
|
||||
local height = 0
|
||||
|
||||
for i=1,7 do -- SMOKE TUBE CHECK
|
||||
local dn = minetest.get_node({x = pos.x, y = pos.y + i, z = pos.z})
|
||||
if dn.name == "factory:smoke_tube" then
|
||||
height = height + 1
|
||||
else break end
|
||||
end
|
||||
|
||||
if minetest.get_node({x = pos.x, y = pos.y + height + 1, z = pos.z}).name ~= "air" then return end
|
||||
|
||||
if height < 1 then return else
|
||||
if minetest.get_node(pos).name == "factory:ind_squeezer_active" then
|
||||
minetest.add_particlespawner({
|
||||
amount = 4,
|
||||
time = 3,
|
||||
minpos = {x = pos.x - 0.2, y = pos.y + height + 0.3, z = pos.z - 0.2},
|
||||
maxpos = {x = pos.x + 0.2, y = pos.y + height + 0.6, z = pos.z + 0.2},
|
||||
minvel = {x=-0.4, y=1, z=-0.4},
|
||||
maxvel = {x=0.4, y=2, z=0.4},
|
||||
minacc = {x=0, y=0, z=0},
|
||||
maxacc = {x=0, y=0, z=0},
|
||||
minexptime = 0.8,
|
||||
maxexptime = 2,
|
||||
minsize = 2,
|
||||
maxsize = 4,
|
||||
collisiondetection = false,
|
||||
vertical = false,
|
||||
texture = "factory_smoke.png",
|
||||
playername = nil,
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
local inv = meta:get_inventory()
|
||||
|
||||
local srclist = inv:get_list("src")
|
||||
local cooked = nil
|
||||
|
||||
if srclist then
|
||||
cooked = factory.get_craft_result({method = "ind_squeezer", width = 1, items = srclist})
|
||||
end
|
||||
|
||||
local was_active = false
|
||||
|
||||
if meta:get_float("fuel_time") < meta:get_float("fuel_totaltime") then
|
||||
was_active = true
|
||||
meta:set_float("fuel_time", meta:get_float("fuel_time") + 0.9)
|
||||
meta:set_float("src_time", meta:get_float("src_time") + 0.2)
|
||||
if cooked and cooked.item and meta:get_float("src_time") >= cooked.time then
|
||||
-- check if there's room for output in "dst" list
|
||||
if inv:room_for_item("dst",cooked.item) then
|
||||
-- Put result in "dst" list
|
||||
inv:add_item("dst", cooked.item)
|
||||
-- take stuff from "src" list
|
||||
local afteritem = inv:get_stack("src", 1)
|
||||
afteritem:take_item(1)
|
||||
inv:set_stack("src", 1, afteritem)
|
||||
else
|
||||
--print("Could not insert '"..cooked.item:to_string().."'")
|
||||
end
|
||||
meta:set_string("src_time", 0)
|
||||
end
|
||||
end
|
||||
|
||||
if meta:get_float("fuel_time") < meta:get_float("fuel_totaltime") then
|
||||
local percent = math.floor(meta:get_float("fuel_time") /
|
||||
meta:get_float("fuel_totaltime") * 100)
|
||||
meta:set_string("infotext","Industrial Squeezer is working, fuel current used: "..percent.."%")
|
||||
factory.swap_node(pos,"factory:ind_squeezer_active")
|
||||
meta:set_string("formspec",factory.ind_squeezer_active_formspec(pos, percent))
|
||||
return
|
||||
end
|
||||
|
||||
local fuel = nil
|
||||
local afterfuel
|
||||
local cooked = nil
|
||||
local fuellist = inv:get_list("fuel")
|
||||
local srclist = inv:get_list("src")
|
||||
|
||||
if srclist then
|
||||
cooked = factory.get_craft_result({method = "ind_squeezer", width = 1, items = srclist})
|
||||
end
|
||||
if fuellist then
|
||||
fuel, afterfuel = minetest.get_craft_result({method = "fuel", width = 1, items = fuellist})
|
||||
end
|
||||
|
||||
if not fuel or fuel.time <= 0 then
|
||||
meta:set_string("infotext","Industrial Squeezer has nothing to burn with")
|
||||
factory.swap_node(pos,"factory:ind_squeezer")
|
||||
meta:set_string("formspec", factory.ind_squeezer_inactive_formspec)
|
||||
return
|
||||
end
|
||||
|
||||
if cooked.item:is_empty() then
|
||||
if was_active then
|
||||
meta:set_string("infotext","Industrial Squeezer is empty")
|
||||
factory.swap_node(pos,"factory:ind_squeezer")
|
||||
meta:set_string("formspec", factory.ind_squeezer_inactive_formspec)
|
||||
end
|
||||
return
|
||||
end
|
||||
|
||||
meta:set_string("fuel_totaltime", fuel.time)
|
||||
meta:set_string("fuel_time", 0)
|
||||
|
||||
inv:set_stack("fuel", 1, afterfuel.items[1])
|
||||
end,
|
||||
})
|
142
factory/init.lua
Normal file
|
@ -0,0 +1,142 @@
|
|||
factory={
|
||||
crafts={},
|
||||
empty={item=ItemStack(nil),time=0}
|
||||
}
|
||||
|
||||
-- Settings
|
||||
dofile(minetest.get_modpath("factory").."/settings.txt")
|
||||
|
||||
-- This below is the Crafter mod by the legend MasterGollum
|
||||
|
||||
function factory.register_craft(craft)
|
||||
assert(craft.type ~= nil and craft.recipe ~= nil and craft.output ~= nil,
|
||||
"Invalid craft definition, it must have type, recipe and output")
|
||||
assert(type(craft.recipe)=="table" and type(craft.recipe[1])=="table","'recipe' must be a bidimensional table")
|
||||
minetest.log("verbose","registerCraft ("..craft.type..", output="..craft.output.." recipe="..dump(craft.recipe))
|
||||
craft._h=#craft.recipe
|
||||
craft._w=#craft.recipe[1]
|
||||
-- TODO check that all the arrays have the same length...
|
||||
factory.crafts[#factory.crafts+1]=craft
|
||||
end
|
||||
|
||||
function factory.get_craft_result(data)
|
||||
assert(data.method ~= nil and data.items ~= nil, "Invalid call, method and items must be provided")
|
||||
local w = 1
|
||||
if data.width ~= nil and data.width>0 then
|
||||
w=data.width
|
||||
end
|
||||
local r=nil
|
||||
for zz,craft in ipairs(factory.crafts) do
|
||||
r=factory._check_craft(data,w,craft)
|
||||
if r ~= nil then
|
||||
if factory.debug then
|
||||
print("Craft found, returning "..dump(r.item))
|
||||
end
|
||||
return r
|
||||
end
|
||||
end
|
||||
return factory.empty
|
||||
end
|
||||
|
||||
function factory._check_craft(data,w,c)
|
||||
if c.type == data.method then
|
||||
-- Here we go..
|
||||
for i=1,w-c._h+1 do
|
||||
for j=1,w-c._w+1 do
|
||||
local p=(i-1)*w+j
|
||||
if factory.debug then
|
||||
print("Checking data.items["..dump(i).."]["..dump(j).."]("..dump(p)..")="..dump(data.items[p]:get_name()).." vs craft.recipe[1][1]="..dump(c.recipe[1][1]))
|
||||
end
|
||||
if data.items[p]:get_name() == c.recipe[1][1] then
|
||||
for m=1,c._h do
|
||||
for n=1,c._w do
|
||||
local q=(i+m-1-1)*w+j+n-1
|
||||
if factory.debug then
|
||||
print(" Checking data.items["..dump(i+m-1).."]["..dump(j+n-1).."]("..dump(q)..")="..dump(data.items[q]:get_name())..
|
||||
" vs craft.recipe["..dump(m).."]["..dump(n).."]="..dump(c.recipe[m][n]))
|
||||
end
|
||||
if c.recipe[m][n] ~= data.items[q]:get_name() then
|
||||
return nil
|
||||
end
|
||||
end
|
||||
end
|
||||
-- found! we still must check that is not any other stuff outside the limits of the recipe sizes...
|
||||
-- Checking at right of the matching square
|
||||
for m=i-c._h+1+1,w do
|
||||
for n=j+c._w,w do
|
||||
local q=(m-1)*w+n
|
||||
if factory.debug then
|
||||
print(" Checking right data.items["..dump(m).."]["..dump(n).."]("..dump(q)..")="..dump(data.items[q]:get_name()))
|
||||
end
|
||||
if data.items[q]:get_name() ~= "" then
|
||||
return nil
|
||||
end
|
||||
end
|
||||
end
|
||||
-- Checking at left of the matching square (the first row has been already scanned)
|
||||
for m=i-c._h+1+1+1,w do
|
||||
for n=1,j-1 do
|
||||
local q=(m-1)*w+n
|
||||
if factory.debug then
|
||||
print(" Checking left data.items["..dump(m).."]["..dump(n).."]("..dump(q)..")="..dump(data.items[q]:get_name()))
|
||||
end
|
||||
if data.items[q]:get_name() ~= "" then
|
||||
return nil
|
||||
end
|
||||
end
|
||||
end
|
||||
-- Checking at bottom of the matching square
|
||||
for m=i+c._h,w do
|
||||
for n=j,j+c._w do
|
||||
local q=(m-1)*w+n
|
||||
if factory.debug then
|
||||
print(" Checking bottom data.items["..dump(m).."]["..dump(n).."]("..dump(q)..")="..dump(data.items[q]:get_name()))
|
||||
end
|
||||
if data.items[q]:get_name() ~= "" then
|
||||
return nil
|
||||
end
|
||||
end
|
||||
end
|
||||
if factory.debug then
|
||||
print("Craft found! "..c.output)
|
||||
end
|
||||
return {item=ItemStack(c.output),time=1}
|
||||
elseif data.items[p] ~= nil and data.items[p]:get_name() ~= "" then
|
||||
if factory.debug then
|
||||
print("Invalid data item "..dump(data.items[p]:get_name()))
|
||||
end
|
||||
return nil
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- GUI related stuff
|
||||
factory_gui_bg = "bgcolor[#080808BB;true]"
|
||||
factory_gui_bg_img = "background[5,5;1,1;gui_factoryformbg.png;true]"
|
||||
factory_gui_slots = "listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF]"
|
||||
|
||||
function factory.get_hotbar_bg(x,y)
|
||||
local out = ""
|
||||
for i=0,7,1 do
|
||||
out = out .."image["..x+i..","..y..";1,1;gui_hb_bg.png]"
|
||||
end
|
||||
return out
|
||||
end
|
||||
|
||||
function factory.swap_node(pos,name)
|
||||
local node = minetest.get_node(pos)
|
||||
if node.name == name then
|
||||
return
|
||||
end
|
||||
node.name = name
|
||||
minetest.swap_node(pos,node)
|
||||
end
|
||||
|
||||
dofile(minetest.get_modpath("factory").."/nodes.lua")
|
||||
dofile(minetest.get_modpath("factory").."/craftitems.lua")
|
||||
dofile(minetest.get_modpath("factory").."/crafting.lua")
|
||||
|
||||
dofile(minetest.get_modpath("factory").."/ind_furnace.lua")
|
||||
dofile(minetest.get_modpath("factory").."/ind_squeezer.lua")
|
384
factory/nodes.lua
Normal file
|
@ -0,0 +1,384 @@
|
|||
minetest.register_node("factory:belt", {
|
||||
description = "Conveyor Belt",
|
||||
tiles = {{name="factory_belt_top_animation.png", animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=0.4}}, "factory_belt_bottom.png", "factory_belt_side.png",
|
||||
"factory_belt_side.png", "factory_belt_side.png", "factory_belt_side.png"},
|
||||
groups = {cracky=1},
|
||||
drawtype = "nodebox",
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
is_ground_content = true,
|
||||
legacy_facedir_simple = true,
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {{-0.5,-0.5,-0.5,0.5,0.0625,0.5},}
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_abm({
|
||||
nodenames = {"factory:belt"},
|
||||
neighbors = nil,
|
||||
interval = 1,
|
||||
chance = 1,
|
||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
||||
local all_objects = minetest.get_objects_inside_radius(pos, 1)
|
||||
local _,obj
|
||||
for _,obj in ipairs(all_objects) do
|
||||
if not obj:is_player() and obj:get_luaentity() and obj:get_luaentity().name == "__builtin:item" then
|
||||
local a = minetest.facedir_to_dir(minetest.get_node(pos).param2)
|
||||
local b = {x = obj:getpos().x + (a.x / 3.5), y = obj:getpos().y, z = obj:getpos().z + (a.z / 3.5),}
|
||||
obj:moveto(b, false)
|
||||
end
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
minetest.register_node("factory:arm",{
|
||||
drawtype = "nodebox",
|
||||
tiles = {"factory_steel_noise.png"},
|
||||
paramtype = "light",
|
||||
description = "Pneumatic Mover",
|
||||
groups = {cracky=3},
|
||||
paramtype2 = "facedir",
|
||||
legacy_facedir_simple = true,
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5,-0.5,-0.5,0.5,-0.4375,0.5}, --base1
|
||||
{-0.125,-0.5,-0.375,0.125,0.0625,0.375}, --base2
|
||||
{-0.125,0.25,-0.5,0.125,0.3125,0.375}, --tube
|
||||
{-0.375,-0.5,-0.0625,0.375,0.0625,0.0625}, --base3
|
||||
{-0.125,-0.125,0.375,0.125,0.125,0.5}, --tube2
|
||||
{-0.125,0.0625,0.3125,0.125,0.25,0.375}, --NodeBox6
|
||||
{-0.125,0.0625,-0.5,-0.0625,0.25,0.3125}, --NodeBox7
|
||||
{0.0625,0.0625,-0.5,0.125,0.25,0.3125}, --NodeBox8
|
||||
{-0.0625,0.0625,-0.5,0.0625,0.125,0.3125}, --NodeBox9
|
||||
}
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5,-0.5,-0.5,0.5,0.5,0.5},
|
||||
}
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_abm({
|
||||
nodenames = {"factory:arm"},
|
||||
neighbors = nil,
|
||||
interval = 1,
|
||||
chance = 1,
|
||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
||||
local all_objects = minetest.get_objects_inside_radius(pos, 0.8)
|
||||
local _,obj
|
||||
for _,obj in ipairs(all_objects) do
|
||||
if not obj:is_player() and obj:get_luaentity() and obj:get_luaentity().name == "__builtin:item" then
|
||||
local a = minetest.facedir_to_dir(minetest.get_node(pos).param2)
|
||||
local b = {x = pos.x + a.x, y = pos.y + a.y, z = pos.z + a.z,}
|
||||
local target = minetest.get_node(b)
|
||||
local stack = ItemStack(obj:get_luaentity().itemstring)
|
||||
if target.name == "default:chest" or target.name == "default:chest_locked" then
|
||||
local meta = minetest.env:get_meta(b)
|
||||
local inv = meta:get_inventory()
|
||||
if inv:room_for_item("main", stack) then
|
||||
inv:add_item("main", stack)
|
||||
obj:remove()
|
||||
else
|
||||
obj:moveto({x = pos.x + (a.x * 2), y = pos.y + 0.5, z = pos.z + (a.z * 2)}, false)
|
||||
end
|
||||
end
|
||||
for i,v in ipairs(armDevicesFurnacelike) do
|
||||
if target.name == v then
|
||||
local a = minetest.facedir_to_dir(minetest.get_node(pos).param2)
|
||||
local b = {x = pos.x + a.x, y = pos.y + a.y, z = pos.z + a.z,}
|
||||
local meta = minetest.env:get_meta(b)
|
||||
local inv = meta:get_inventory()
|
||||
|
||||
if minetest.dir_to_facedir({x = -a.x, y = -a.y, z = -a.z}) == minetest.get_node(b).param2 then
|
||||
-- back, fuel
|
||||
if inv:room_for_item("fuel", stack) then
|
||||
inv:add_item("fuel", stack)
|
||||
obj:remove()
|
||||
else
|
||||
obj:moveto({x = pos.x + (a.x * 2), y = pos.y + 0.5, z = pos.z + (a.z * 2)}, false)
|
||||
end
|
||||
else
|
||||
-- everytin else, src
|
||||
if inv:room_for_item("src", stack) then
|
||||
inv:add_item("src", stack)
|
||||
obj:remove()
|
||||
else
|
||||
obj:moveto({x = pos.x + (a.x * 2), y = pos.y + 0.5, z = pos.z + (a.z * 2)}, false)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
function factory.register_taker(prefix, suffix, speed, name, ctiles)
|
||||
minetest.register_node("factory:"..prefix.."taker"..suffix,{
|
||||
drawtype = "nodebox",
|
||||
tiles = ctiles,
|
||||
paramtype = "light",
|
||||
description = name,
|
||||
groups = {cracky=3},
|
||||
paramtype2 = "facedir",
|
||||
legacy_facedir_simple = true,
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5,-0.5,-0.5,0.5,-0.4375,0.5}, --base1
|
||||
{-0.125,-0.5,-0.375,0.125,0.0625,0.375}, --base2
|
||||
{-0.125,0.25,-0.5,0.125,0.3125,0.375}, --tube
|
||||
{-0.375,-0.5,-0.0625,0.375,0.0625,0.0625}, --base3
|
||||
{-0.125,-0.125,0.375,0.125,0.125,0.5}, --tube2
|
||||
{-0.125,0.0625,0.3125,0.125,0.25,0.375}, --NodeBox6
|
||||
{-0.125,0.0625,-0.5,-0.0625,0.25,0.3125}, --NodeBox7
|
||||
{0.0625,0.0625,-0.5,0.125,0.25,0.3125}, --NodeBox8
|
||||
{-0.0625,0.0625,-0.5,0.0625,0.125,0.3125}, --NodeBox9
|
||||
}
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5,-0.5,-0.5,0.5,0.5,0.5},
|
||||
}
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_abm({
|
||||
nodenames = {"factory:"..prefix.."taker"..suffix},
|
||||
neighbors = nil,
|
||||
interval = speed,
|
||||
chance = 1,
|
||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
||||
local a = minetest.facedir_to_dir(minetest.get_node(pos).param2)
|
||||
local b = {x = pos.x + a.x, y = pos.y + a.y, z = pos.z + a.z,}
|
||||
local target = minetest.get_node(b)
|
||||
if target.name == "default:chest" or target.name == "default:chest_locked" then
|
||||
local meta = minetest.env:get_meta(b)
|
||||
local inv = meta:get_inventory()
|
||||
if not inv:is_empty("main") then
|
||||
local list = inv:get_list("main")
|
||||
local i,item
|
||||
for i,item in ipairs(inv:get_list("main")) do
|
||||
if item:get_name() ~= "" then
|
||||
local droppos = {x = pos.x - (a.x/1.5), y = pos.y + 0.5, z = pos.z - (a.z/1.5)}
|
||||
if factory.logTaker then print(name.." at "..pos.x..", "..pos.y..", "..pos.z.." takes "..item:get_name().." from "..target.name) end
|
||||
minetest.item_drop(item:peek_item(1), "", droppos)
|
||||
item:take_item()
|
||||
inv:set_stack("main", i, item)
|
||||
return
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
for i,v in ipairs(takerDevicesFurnacelike) do
|
||||
if target.name == v then
|
||||
local meta = minetest.env:get_meta(b)
|
||||
local inv = meta:get_inventory()
|
||||
if not inv:is_empty("dst") then
|
||||
local list = inv:get_list("dst")
|
||||
for k,item in ipairs(inv:get_list("dst")) do
|
||||
if item:get_name() ~= "" then
|
||||
local droppos = {x = pos.x - (a.x/1.5), y = pos.y + 0.5, z = pos.z - (a.z/1.5)}
|
||||
if factory.logTaker then print(name.." at "..pos.x..", "..pos.y..", "..pos.z.." takes "..item:get_name().." from "..target.name) end
|
||||
minetest.item_drop(item:peek_item(1), "", droppos)
|
||||
item:take_item()
|
||||
inv:set_stack("dst", k, item)
|
||||
return
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end,
|
||||
})
|
||||
end
|
||||
|
||||
factory.register_taker("", "", 2.5, "Pneumatic Taker", {"factory_steel_noise_red.png"})
|
||||
factory.register_taker("", "_gold", 1.8, "Pneumatic Taker Mk II", {"factory_steel_noise_gold.png"})
|
||||
factory.register_taker("", "_diamond", 1.2, "Pneumatic Taker MK III", {"factory_steel_noise_diamond.png"})
|
||||
|
||||
minetest.register_node("factory:smoke_tube", {
|
||||
drawtype = "nodebox",
|
||||
tiles = {"factory_machine_brick_1.png"},
|
||||
paramtype = "light",
|
||||
description = "Smoke Tube",
|
||||
groups = {cracky=3},
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.125,-0.5,0.3125,0.125,0.5,0.375},
|
||||
{-0.125,-0.5,-0.375,0.125,0.5,-0.3125},
|
||||
{0.3125,-0.5,-0.125,0.375,0.5,0.125},
|
||||
{-0.375,-0.5,-0.125,-0.3125,0.5,0.125},
|
||||
{0.125,-0.5,0.25,0.25,0.5,0.3125},
|
||||
{0.25,-0.5,0.125,0.3125,0.5,0.25},
|
||||
{0.25,-0.5,-0.25,0.3125,0.5,-0.125},
|
||||
{0.125,-0.5,-0.3125,0.25,0.5,-0.25},
|
||||
{-0.25,-0.5,-0.3125,-0.125,0.5,-0.25},
|
||||
{-0.3125,-0.5,-0.25,-0.25,0.5,-0.125},
|
||||
{-0.3125,-0.5,0.125,-0.25,0.5,0.25},
|
||||
{-0.25,-0.5,0.25,-0.125,0.5,0.3125},
|
||||
}
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.375,-0.5,-0.375,0.375,0.5,0.375},
|
||||
}
|
||||
},
|
||||
})
|
||||
|
||||
function qarm_handle (a, b, target, stack, minv, obj)
|
||||
if target.name == "default:chest" or target.name == "default:chest_locked" then
|
||||
local meta = minetest.env:get_meta(b)
|
||||
local inv = meta:get_inventory()
|
||||
|
||||
if inv:room_for_item("main", stack) then
|
||||
inv:add_item("main", stack)
|
||||
if obj~=nil then obj:remove() end
|
||||
elseif minv:room_for_item("main", stack) then
|
||||
minv:add_item("main", stack)
|
||||
if obj~=nil then obj:remove() end
|
||||
else
|
||||
if obj~=nil then obj:moveto({x = pos.x + (a.x * 2), y = pos.y + 0.5, z = pos.z + (a.z * 2)}, false) end
|
||||
end
|
||||
end
|
||||
for i,v in ipairs(armDevicesFurnacelike) do
|
||||
if target.name == v then
|
||||
local meta = minetest.env:get_meta(b)
|
||||
local inv = meta:get_inventory()
|
||||
|
||||
if minetest.dir_to_facedir({x = -a.x, y = -a.y, z = -a.z}) == minetest.get_node(b).param2 then
|
||||
-- back, fuel
|
||||
if inv:room_for_item("fuel", stack) then
|
||||
inv:add_item("fuel", stack)
|
||||
if obj~=nil then obj:remove() end
|
||||
elseif minv:room_for_item("main", stack) then
|
||||
minv:add_item("main", stack)
|
||||
if obj~=nil then obj:remove() end
|
||||
else
|
||||
if obj~=nil then obj:moveto({x = pos.x + (a.x * 2), y = pos.y + 0.5, z = pos.z + (a.z * 2)}, false) end
|
||||
end
|
||||
else
|
||||
-- everytin else, src
|
||||
if inv:room_for_item("src", stack) then
|
||||
inv:add_item("src", stack)
|
||||
if obj~=nil then obj:remove() end
|
||||
elseif minv:room_for_item("main", stack) then
|
||||
minv:add_item("main", stack)
|
||||
if obj~=nil then obj:remove() end
|
||||
else
|
||||
if obj~=nil then obj:moveto({x = pos.x + (a.x * 2), y = pos.y + 0.5, z = pos.z + (a.z * 2)}, false) end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
factory.qformspec =
|
||||
"size[8,8.5]"..
|
||||
factory_gui_bg..
|
||||
factory_gui_bg_img..
|
||||
factory_gui_slots..
|
||||
"list[current_name;main;0,0.3;8,3;]"..
|
||||
"list[current_player;main;0,4.25;8,1;]"..
|
||||
"list[current_player;main;0,5.5;8,3;8]"..
|
||||
factory.get_hotbar_bg(0,4.25)
|
||||
|
||||
minetest.register_node("factory:queuedarm",{
|
||||
drawtype = "nodebox",
|
||||
tiles = {"factory_steel_noise.png"},
|
||||
paramtype = "light",
|
||||
description = "Queued Pneumatic Mover",
|
||||
groups = {cracky=3},
|
||||
paramtype2 = "facedir",
|
||||
legacy_facedir_simple = true,
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5,-0.5,-0.5,0.5,-0.4375,0.5}, --base1
|
||||
{-0.125,-0.5,-0.375,0.125,0.0625,0.375}, --base2
|
||||
{-0.125,0.25,-0.5,0.125,0.3125,0.375}, --tube
|
||||
{-0.375,-0.5,-0.1875,0.375,0.0625,0.0625}, --base3
|
||||
{-0.125,-0.125,0.375,0.125,0.125,0.5}, --tube2
|
||||
{-0.125,0.0625,0.3125,0.125,0.25,0.375}, --nodebox6
|
||||
{-0.125,0.0625,-0.5,-0.0625,0.25,0.3125}, --nodebox7
|
||||
{0.0625,0.0625,-0.5,0.125,0.25,0.3125}, --nodebox8
|
||||
{-0.0625,0.0625,-0.5,0.0625,0.125,0.3125}, --nodebox9
|
||||
{-0.25,0.3125,-0.125,0.25,0.8,0.375}, --NodeBox10
|
||||
{-0.1875,0.1875,-0.5,-0.125,0.3125,0.375}, --NodeBox11
|
||||
{0.125,0.1875,-0.5,0.1875,0.3125,0.375}, --NodeBox12
|
||||
{-0.125,0.3125,-0.4375,0.125,0.5,-0.125}, --NodeBox13
|
||||
}
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5,-0.5,-0.5,0.5,0.5,0.5},
|
||||
}
|
||||
},
|
||||
on_construct = function(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("formspec",factory.qformspec)
|
||||
meta:set_string("infotext", "Queued Pneumatic Mover")
|
||||
local inv = meta:get_inventory()
|
||||
inv:set_size("main", 8*3)
|
||||
end,
|
||||
can_dig = function(pos,player)
|
||||
local meta = minetest.get_meta(pos);
|
||||
local inv = meta:get_inventory()
|
||||
return inv:is_empty("main")
|
||||
end,
|
||||
on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
|
||||
minetest.log("action", player:get_player_name()..
|
||||
" moves stuff in queued mover at "..minetest.pos_to_string(pos))
|
||||
end,
|
||||
on_metadata_inventory_put = function(pos, listname, index, stack, player)
|
||||
minetest.log("action", player:get_player_name()..
|
||||
" moves stuff to queued mover at "..minetest.pos_to_string(pos))
|
||||
end,
|
||||
on_metadata_inventory_take = function(pos, listname, index, stack, player)
|
||||
minetest.log("action", player:get_player_name()..
|
||||
" takes stuff from queued mover at "..minetest.pos_to_string(pos))
|
||||
end,
|
||||
})
|
||||
|
||||
minetest.register_abm({
|
||||
nodenames = {"factory:queuedarm"},
|
||||
neighbors = nil,
|
||||
interval = 1,
|
||||
chance = 1,
|
||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
||||
local mmeta = minetest.env:get_meta(pos)
|
||||
local minv = mmeta:get_inventory()
|
||||
local all_objects = minetest.get_objects_inside_radius(pos, 0.8)
|
||||
local a = minetest.facedir_to_dir(minetest.get_node(pos).param2)
|
||||
local b = {x = pos.x + a.x, y = pos.y + a.y, z = pos.z + a.z,}
|
||||
local target = minetest.get_node(b)
|
||||
for _,obj in ipairs(all_objects) do
|
||||
if not obj:is_player() and obj:get_luaentity() and obj:get_luaentity().name == "__builtin:item" then
|
||||
local stack = ItemStack(obj:get_luaentity().itemstring)
|
||||
qarm_handle(a, b, target, stack, minv, obj)
|
||||
end
|
||||
end
|
||||
for i,stack in ipairs(minv:get_list("main")) do
|
||||
if stack:get_name() ~= "" then
|
||||
minv:remove_item("main", stack)
|
||||
qarm_handle(a, b, target, stack, minv, nil)
|
||||
return
|
||||
end
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
minetest.register_node("factory:factory_brick", {
|
||||
description = "Factory Brick",
|
||||
tiles = {"factory_brick.png"},
|
||||
is_ground_content = true,
|
||||
groups = {cracky=3, stone=1}
|
||||
})
|
14
factory/settings.txt
Normal file
|
@ -0,0 +1,14 @@
|
|||
-- LemonLake's Factories: Config
|
||||
|
||||
-- Logging
|
||||
factory.logTaker = true
|
||||
|
||||
-- Defines the furnace types for movers and takers.
|
||||
-- Requires fuel, src and dst inventory types.
|
||||
-- Don't change unless you know what you're doing.
|
||||
armDevicesFurnacelike = {"default:furnace", "default:furnace_active", "factory:ind_furnace", "factory:ind_furnace_active", "factory:compressor", "factory:compressor_active"}
|
||||
takerDevicesFurnacelike = {"default:furnace", "default:furnace_active", "factory:ind_furnace", "factory:ind_furnace_active", "factory:compressor", "factory:compressor_active"}
|
||||
|
||||
-- Fuel types for the generator
|
||||
generatorFuel = {{name = "factory:tree_sap", value = 20}}
|
||||
-- TODO: Add items for other Technic blocks
|
BIN
factory/textures/factory_belt_bottom.png
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
factory/textures/factory_belt_side.png
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
factory/textures/factory_belt_top.png
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
factory/textures/factory_belt_top_animation.png
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
factory/textures/factory_brick.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
factory/textures/factory_compressed_clay.png
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
factory/textures/factory_compressor_drop_bg.png
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
factory/textures/factory_compressor_drop_fg.png
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
factory/textures/factory_compressor_front.png
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
factory/textures/factory_compressor_front_active.png
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
factory/textures/factory_ind_furnace_fire_bg.png
Normal file
After Width: | Height: | Size: 282 B |
BIN
factory/textures/factory_ind_furnace_fire_fg.png
Normal file
After Width: | Height: | Size: 803 B |
BIN
factory/textures/factory_ind_furnace_front.png
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
factory/textures/factory_ind_furnace_front_active.png
Normal file
After Width: | Height: | Size: 21 KiB |
BIN
factory/textures/factory_lump.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
factory/textures/factory_machine_brick_1.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
factory/textures/factory_machine_brick_2.png
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
factory/textures/factory_machine_side_1.png
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
factory/textures/factory_machine_steel.png
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
factory/textures/factory_small_diamond_gear.png
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
factory/textures/factory_small_gold_gear.png
Normal file
After Width: | Height: | Size: 23 KiB |
BIN
factory/textures/factory_small_steel_gear.png
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
factory/textures/factory_smoke.png
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
factory/textures/factory_steel_noise.png
Normal file
After Width: | Height: | Size: 22 KiB |
BIN
factory/textures/factory_steel_noise_diamond.png
Normal file
After Width: | Height: | Size: 24 KiB |
BIN
factory/textures/factory_steel_noise_gold.png
Normal file
After Width: | Height: | Size: 24 KiB |
BIN
factory/textures/factory_steel_noise_red.png
Normal file
After Width: | Height: | Size: 24 KiB |
BIN
factory/textures/factory_tree_sap.png
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
factory/textures/gui_factoryformbg.png
Normal file
After Width: | Height: | Size: 190 KiB |
BIN
factory/textures/gui_ind_furnace_arrow_bg.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
factory/textures/gui_ind_furnace_arrow_fg.png
Normal file
After Width: | Height: | Size: 15 KiB |
|
@ -1 +0,0 @@
|
|||
name = technic
|
|
@ -1,38 +0,0 @@
|
|||
Technic
|
||||
=======
|
||||
|
||||
License
|
||||
-------
|
||||
|
||||
Copyright (C) 2012-2014 Maciej Kasatkin (RealBadAngel)
|
||||
|
||||
Technic chests code is licensed under the GNU LGPLv2+.
|
||||
|
||||
Texture licenses:
|
||||
|
||||
BlockMen modified by Zefram (CC BY-SA 3.0):
|
||||
* technic_chernobylite_block.png
|
||||
* technic_corium_flowing_animated.png
|
||||
* technic_corium_source_animated.png
|
||||
|
||||
celeron55 (Perttu Ahola) modified by Zefram (CC BY-SA 3.0):
|
||||
* technic_bucket_corium.png
|
||||
|
||||
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.
|
||||
|
||||
CC BY-SA 3.0: <http://creativecommons.org/licenses/by-sa/3.0/>
|
||||
|
||||
Sound licenses:
|
||||
|
||||
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/>
|
|
@ -1,22 +0,0 @@
|
|||
technic.config = technic.config or Settings(minetest.get_worldpath().."/technic.conf")
|
||||
|
||||
local conf_table = technic.config:to_table()
|
||||
|
||||
local defaults = {
|
||||
enable_mining_drill = "true",
|
||||
enable_mining_laser = "true",
|
||||
enable_flashlight = "false",
|
||||
enable_wind_mill = "false",
|
||||
enable_frames = "false",
|
||||
enable_corium_griefing = "true",
|
||||
enable_radiation_protection = "true",
|
||||
enable_entity_radiation_damage = "true",
|
||||
enable_longterm_radiation_damage = "true",
|
||||
enable_nuclear_reactor_digiline_selfdestruct = "false",
|
||||
}
|
||||
|
||||
for k, v in pairs(defaults) do
|
||||
if conf_table[k] == nil then
|
||||
technic.config:set(k, v)
|
||||
end
|
||||
end
|
|
@ -1,181 +0,0 @@
|
|||
-- check if we have the necessary dependencies to allow actually using these materials in the crafts
|
||||
local mesecons_materials = minetest.get_modpath("mesecons_materials")
|
||||
|
||||
-- Remove some recipes
|
||||
-- Bronze
|
||||
minetest.clear_craft({
|
||||
type = "shapeless",
|
||||
output = "default:bronze_ingot"
|
||||
})
|
||||
|
||||
-- Accelerator tube
|
||||
if pipeworks.enable_accelerator_tube then
|
||||
minetest.clear_craft({
|
||||
output = "pipeworks:accelerator_tube_1",
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'pipeworks:accelerator_tube_1',
|
||||
recipe = {
|
||||
{'technic:copper_coil', 'pipeworks:tube_1', 'technic:copper_coil'},
|
||||
}
|
||||
})
|
||||
end
|
||||
|
||||
-- Teleport tube
|
||||
if pipeworks.enable_teleport_tube then
|
||||
minetest.clear_craft({
|
||||
output = "pipeworks:teleport_tube_1",
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'pipeworks:teleport_tube_1',
|
||||
recipe = {
|
||||
{'default:mese_crystal', 'technic:copper_coil', 'default:mese_crystal'},
|
||||
{'pipeworks:tube_1', 'technic:control_logic_unit', 'pipeworks:tube_1'},
|
||||
{'default:mese_crystal', 'technic:copper_coil', 'default:mese_crystal'},
|
||||
}
|
||||
})
|
||||
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({
|
||||
output = 'technic:diamond_drill_head',
|
||||
recipe = {
|
||||
{'technic:stainless_steel_ingot', 'default:diamond', 'technic:stainless_steel_ingot'},
|
||||
{'default:diamond', '', 'default:diamond'},
|
||||
{'technic:stainless_steel_ingot', 'default:diamond', 'technic:stainless_steel_ingot'},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'technic:green_energy_crystal',
|
||||
recipe = {
|
||||
{'default:gold_ingot', 'technic:battery', 'dye:green'},
|
||||
{'technic:battery', 'technic:red_energy_crystal', 'technic:battery'},
|
||||
{'dye:green', 'technic:battery', 'default:gold_ingot'},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'technic:blue_energy_crystal',
|
||||
recipe = {
|
||||
{'moreores:mithril_ingot', 'technic:battery', 'dye:blue'},
|
||||
{'technic:battery', 'technic:green_energy_crystal', 'technic:battery'},
|
||||
{'dye:blue', 'technic:battery', 'moreores:mithril_ingot'},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'technic:red_energy_crystal',
|
||||
recipe = {
|
||||
{'moreores:silver_ingot', 'technic:battery', 'dye:red'},
|
||||
{'technic:battery', 'basic_materials:energy_crystal_simple', 'technic:battery'},
|
||||
{'dye:red', 'technic:battery', 'moreores:silver_ingot'},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'technic:copper_coil 1',
|
||||
recipe = {
|
||||
{'basic_materials:copper_wire', 'technic:wrought_iron_ingot', 'basic_materials:copper_wire'},
|
||||
{'technic:wrought_iron_ingot', '', 'technic:wrought_iron_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"
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'technic:lv_transformer',
|
||||
recipe = {
|
||||
{isolation, 'technic:wrought_iron_ingot', isolation},
|
||||
{'technic:copper_coil', 'technic:wrought_iron_ingot', 'technic:copper_coil'},
|
||||
{'technic:wrought_iron_ingot', 'technic:wrought_iron_ingot', 'technic:wrought_iron_ingot'},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'technic:mv_transformer',
|
||||
recipe = {
|
||||
{isolation, 'technic:carbon_steel_ingot', isolation},
|
||||
{'technic:copper_coil', 'technic:carbon_steel_ingot', 'technic:copper_coil'},
|
||||
{'technic:carbon_steel_ingot', 'technic:carbon_steel_ingot', 'technic:carbon_steel_ingot'},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'technic:hv_transformer',
|
||||
recipe = {
|
||||
{isolation, 'technic:stainless_steel_ingot', isolation},
|
||||
{'technic:copper_coil', 'technic:stainless_steel_ingot', 'technic:copper_coil'},
|
||||
{'technic:stainless_steel_ingot', 'technic:stainless_steel_ingot', 'technic:stainless_steel_ingot'},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'technic:control_logic_unit',
|
||||
recipe = {
|
||||
{'', '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({
|
||||
output = 'technic:mixed_metal_ingot 9',
|
||||
recipe = {
|
||||
{'technic:stainless_steel_ingot', 'technic:stainless_steel_ingot', 'technic:stainless_steel_ingot'},
|
||||
{'default:bronze_ingot', 'default:bronze_ingot', 'default:bronze_ingot'},
|
||||
{'default:tin_ingot', 'default:tin_ingot', 'default:tin_ingot'},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'technic:carbon_cloth',
|
||||
recipe = {
|
||||
{'technic:graphite', 'technic:graphite', 'technic:graphite'}
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "technic:machine_casing",
|
||||
recipe = {
|
||||
{ "technic:cast_iron_ingot", "technic:cast_iron_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",
|
||||
replacements = {{"bucket:bucket_water","bucket:bucket_empty"}},
|
||||
recipe = {
|
||||
"technic:stone_dust",
|
||||
"group:leaves",
|
||||
"bucket:bucket_water",
|
||||
"group:sand",
|
||||
},
|
||||
})
|
|
@ -1,14 +0,0 @@
|
|||
default
|
||||
pipeworks
|
||||
technic_worldgen
|
||||
basic_materials
|
||||
bucket?
|
||||
screwdriver?
|
||||
mesecons?
|
||||
mesecons_mvps?
|
||||
digilines?
|
||||
digiline_remote?
|
||||
intllib?
|
||||
unified_inventory?
|
||||
vector_extras?
|
||||
dye?
|
|
@ -1,137 +0,0 @@
|
|||
This file is fairly incomplete. Help is welcome.
|
||||
|
||||
Tiers
|
||||
-----
|
||||
The tier is a string, currently `"LV"`, `"MV"` and `"HV"` are supported.
|
||||
|
||||
Network
|
||||
-------
|
||||
The network is the cable with the connected machine nodes. Currently the
|
||||
switching station handles the network activity.
|
||||
|
||||
Helper 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 with SI prefixes
|
||||
* `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`.
|
||||
* `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.
|
||||
* `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`.
|
||||
* `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.
|
||||
* The returned positions will not include the starting position `pos`.
|
||||
* `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
|
||||
* `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.
|
||||
|
||||
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)`
|
||||
* 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
|
||||
|
||||
Switching Station
|
||||
-----------------
|
||||
The switching station is the center of all power distribution on an electric
|
||||
network.
|
||||
|
||||
The station collects power from sources (PR), distributes it to sinks (RE),
|
||||
and uses the excess/shortfall to charge and discharge batteries (BA).
|
||||
|
||||
For now, all supply and demand values are expressed in kW.
|
||||
|
||||
It works like this:
|
||||
All PR,BA,RE nodes are indexed and tagged with the switching station.
|
||||
The tagging is a workaround to allow more stations to be built without allowing
|
||||
a cheat with duplicating power.
|
||||
All the RE nodes are queried for their current EU demand. Those which are off
|
||||
would require no or a small standby EU demand, while those which are on would
|
||||
require more.
|
||||
If the total demand is less than the available power they are all updated with
|
||||
the demand number.
|
||||
If any surplus exists from the PR nodes the batteries will be charged evenly
|
||||
with this.
|
||||
If the total demand requires draw on the batteries they will be discharged
|
||||
evenly.
|
||||
|
||||
If the total demand is more than the available power all RE nodes will be shut
|
||||
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
|
||||
|
||||
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.
|
|
@ -1,223 +0,0 @@
|
|||
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
|
||||
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")
|
||||
|
||||
|
||||
-- used to display power values
|
||||
function technic.EU_string(num)
|
||||
return technic.pretty_num(num) .. "EU"
|
||||
end
|
||||
|
||||
|
||||
--- Same as minetest.swap_node, but only changes name
|
||||
-- and doesn't re-set if already set.
|
||||
function technic.swap_node(pos, name)
|
||||
local node = minetest.get_node(pos)
|
||||
if node.name ~= name then
|
||||
node.name = name
|
||||
minetest.swap_node(pos, node)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
--- Fully charge RE chargeable item.
|
||||
-- Must be defined early to reference in item definitions.
|
||||
function technic.refill_RE_charge(stack)
|
||||
local max_charge = technic.power_tools[stack:get_name()]
|
||||
if not max_charge then return stack end
|
||||
technic.set_RE_wear(stack, max_charge, max_charge)
|
||||
local meta = minetest.deserialize(stack:get_metadata()) or {}
|
||||
meta.charge = max_charge
|
||||
stack:set_metadata(minetest.serialize(meta))
|
||||
return stack
|
||||
end
|
||||
|
||||
|
||||
-- If the node is loaded, returns it. If it isn't loaded, load it and return nil.
|
||||
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)
|
||||
return nil
|
||||
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:set_velocity(velocity)
|
||||
tubed:set_acceleration(vector.new(0, 0, 0))
|
||||
end
|
||||
|
||||
|
||||
--- Iterates over the node positions along the specified ray.
|
||||
-- The returned positions will not include the starting position.
|
||||
function technic.trace_node_ray(pos, dir, range)
|
||||
local x_step = dir.x > 0 and 1 or -1
|
||||
local y_step = dir.y > 0 and 1 or -1
|
||||
local z_step = dir.z > 0 and 1 or -1
|
||||
|
||||
local i = 1
|
||||
return function(p)
|
||||
-- Approximation of where we should be if we weren't rounding
|
||||
-- to nodes. This moves forward a bit faster then we do.
|
||||
-- A correction is done below.
|
||||
local real_x = pos.x + (dir.x * i)
|
||||
local real_y = pos.y + (dir.y * i)
|
||||
local real_z = pos.z + (dir.z * i)
|
||||
|
||||
-- How far off we've gotten from where we should be.
|
||||
local dx = math.abs(real_x - p.x)
|
||||
local dy = math.abs(real_y - p.y)
|
||||
local dz = math.abs(real_z - p.z)
|
||||
|
||||
-- If the real position moves ahead too fast, stop it so we
|
||||
-- can catch up. If it gets too far ahead it will smooth
|
||||
-- out our movement too much and we won't turn fast enough.
|
||||
if dx + dy + dz < 2 then
|
||||
i = i + 1
|
||||
end
|
||||
|
||||
-- Step in whichever direction we're most off course in.
|
||||
if dx > dy then
|
||||
if dx > dz then
|
||||
p.x = p.x + x_step
|
||||
else
|
||||
p.z = p.z + z_step
|
||||
end
|
||||
elseif dy > dz then
|
||||
p.y = p.y + y_step
|
||||
else
|
||||
p.z = p.z + z_step
|
||||
end
|
||||
if vector.distance(pos, p) > range then
|
||||
return nil
|
||||
end
|
||||
return p
|
||||
end, vector.round(pos)
|
||||
end
|
||||
|
||||
|
||||
--- Like trace_node_ray, but includes extra positions close to the ray.
|
||||
function technic.trace_node_ray_fat(pos, dir, range)
|
||||
local x_step = dir.x > 0 and 1 or -1
|
||||
local y_step = dir.y > 0 and 1 or -1
|
||||
local z_step = dir.z > 0 and 1 or -1
|
||||
|
||||
local next_poses = {}
|
||||
|
||||
local i = 1
|
||||
return function(p)
|
||||
local ni, np = next(next_poses)
|
||||
if np then
|
||||
next_poses[ni] = nil
|
||||
return np
|
||||
end
|
||||
|
||||
-- Approximation of where we should be if we weren't rounding
|
||||
-- to nodes. This moves forward a bit faster then we do.
|
||||
-- A correction is done below.
|
||||
local real_x = pos.x + (dir.x * i)
|
||||
local real_y = pos.y + (dir.y * i)
|
||||
local real_z = pos.z + (dir.z * i)
|
||||
|
||||
-- How far off we've gotten from where we should be.
|
||||
local dx = math.abs(real_x - p.x)
|
||||
local dy = math.abs(real_y - p.y)
|
||||
local dz = math.abs(real_z - p.z)
|
||||
|
||||
-- If the real position moves ahead too fast, stop it so we
|
||||
-- can catch up. If it gets too far ahead it will smooth
|
||||
-- out our movement too much and we won't turn fast enough.
|
||||
if dx + dy + dz < 2 then
|
||||
i = i + 1
|
||||
end
|
||||
|
||||
-- Step in whichever direction we're most off course in.
|
||||
local sx, sy, sz -- Whether we've already stepped along each axis
|
||||
if dx > dy then
|
||||
if dx > dz then
|
||||
sx = true
|
||||
p.x = p.x + x_step
|
||||
else
|
||||
sz = true
|
||||
p.z = p.z + z_step
|
||||
end
|
||||
elseif dy > dz then
|
||||
sy = true
|
||||
p.y = p.y + y_step
|
||||
else
|
||||
sz = true
|
||||
p.z = p.z + z_step
|
||||
end
|
||||
|
||||
if vector.distance(pos, p) > range then
|
||||
return nil
|
||||
end
|
||||
|
||||
-- Add other positions that we're significantly off on.
|
||||
-- We can just use fixed integer keys here because the
|
||||
-- table will be completely cleared before we reach this
|
||||
-- code block again.
|
||||
local dlen = math.sqrt(dx*dx + dy*dy + dz*dz)
|
||||
-- Normalized axis deltas
|
||||
local dxn, dyn, dzn = dx / dlen, dy / dlen, dz / dlen
|
||||
if not sx and dxn > 0.5 then
|
||||
next_poses[1] = vector.new(p.x + x_step, p.y, p.z)
|
||||
end
|
||||
if not sy and dyn > 0.5 then
|
||||
next_poses[2] = vector.new(p.x, p.y + y_step, p.z)
|
||||
end
|
||||
if not sz and dzn > 0.5 then
|
||||
next_poses[3] = vector.new(p.x, p.y, p.z + z_step)
|
||||
end
|
||||
|
||||
return p
|
||||
end, vector.round(pos)
|
||||
end
|
|
@ -1,53 +0,0 @@
|
|||
-- Minetest 0.4.7 mod: technic
|
||||
-- namespace: technic
|
||||
-- (c) 2012-2013 by RealBadAngel <mk@realbadangel.pl>
|
||||
|
||||
local load_start = os.clock()
|
||||
|
||||
technic = rawget(_G, "technic") or {}
|
||||
technic.creative_mode = minetest.settings:get_bool("creative_mode")
|
||||
|
||||
|
||||
local modpath = minetest.get_modpath("technic")
|
||||
technic.modpath = modpath
|
||||
|
||||
|
||||
-- Boilerplate to support intllib
|
||||
if rawget(_G, "intllib") then
|
||||
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
|
||||
local S = technic.getter
|
||||
|
||||
-- Read configuration file
|
||||
dofile(modpath.."/config.lua")
|
||||
|
||||
-- Helper functions
|
||||
dofile(modpath.."/helpers.lua")
|
||||
|
||||
-- Items
|
||||
dofile(modpath.."/items.lua")
|
||||
|
||||
-- Craft recipes for items
|
||||
dofile(modpath.."/crafts.lua")
|
||||
|
||||
-- Register functions
|
||||
dofile(modpath.."/register.lua")
|
||||
|
||||
-- Radiation
|
||||
dofile(modpath.."/radiation.lua")
|
||||
|
||||
-- Machines
|
||||
dofile(modpath.."/machines/init.lua")
|
||||
|
||||
-- Tools
|
||||
dofile(modpath.."/tools/init.lua")
|
||||
|
||||
-- Aliases for legacy node/item names
|
||||
dofile(modpath.."/legacy.lua")
|
||||
|
||||
if minetest.settings:get_bool("log_mods") then
|
||||
print(S("[Technic] Loaded in %f seconds"):format(os.clock() - load_start))
|
||||
end
|
||||
|
|
@ -1,203 +0,0 @@
|
|||
|
||||
local S = technic.getter
|
||||
|
||||
minetest.register_craftitem("technic:silicon_wafer", {
|
||||
description = S("Silicon Wafer"),
|
||||
inventory_image = "technic_silicon_wafer.png",
|
||||
})
|
||||
|
||||
minetest.register_craftitem( "technic:doped_silicon_wafer", {
|
||||
description = S("Doped Silicon Wafer"),
|
||||
inventory_image = "technic_doped_silicon_wafer.png",
|
||||
})
|
||||
|
||||
minetest.register_craftitem("technic:uranium_fuel", {
|
||||
description = S("Uranium Fuel"),
|
||||
inventory_image = "technic_uranium_fuel.png",
|
||||
})
|
||||
|
||||
minetest.register_craftitem( "technic:diamond_drill_head", {
|
||||
description = S("Diamond Drill Head"),
|
||||
inventory_image = "technic_diamond_drill_head.png",
|
||||
})
|
||||
|
||||
minetest.register_tool("technic:blue_energy_crystal", {
|
||||
description = S("Blue Energy Crystal"),
|
||||
inventory_image = minetest.inventorycube(
|
||||
"technic_diamond_block_blue.png",
|
||||
"technic_diamond_block_blue.png",
|
||||
"technic_diamond_block_blue.png"),
|
||||
wear_represents = "technic_RE_charge",
|
||||
on_refill = technic.refill_RE_charge,
|
||||
tool_capabilities = {
|
||||
max_drop_level = 0,
|
||||
groupcaps = {
|
||||
fleshy = {times={}, uses=10000, maxlevel=0}
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_tool("technic:green_energy_crystal", {
|
||||
description = S("Green Energy Crystal"),
|
||||
inventory_image = minetest.inventorycube(
|
||||
"technic_diamond_block_green.png",
|
||||
"technic_diamond_block_green.png",
|
||||
"technic_diamond_block_green.png"),
|
||||
wear_represents = "technic_RE_charge",
|
||||
on_refill = technic.refill_RE_charge,
|
||||
tool_capabilities = {
|
||||
max_drop_level = 0,
|
||||
groupcaps = {
|
||||
fleshy = {times={}, uses=10000, maxlevel=0}
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_tool("technic:red_energy_crystal", {
|
||||
description = S("Red Energy Crystal"),
|
||||
inventory_image = minetest.inventorycube(
|
||||
"technic_diamond_block_red.png",
|
||||
"technic_diamond_block_red.png",
|
||||
"technic_diamond_block_red.png"),
|
||||
wear_represents = "technic_RE_charge",
|
||||
on_refill = technic.refill_RE_charge,
|
||||
tool_capabilities = {
|
||||
max_drop_level = 0,
|
||||
groupcaps = {
|
||||
fleshy = {times={}, uses=10000, maxlevel=0}
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craftitem("technic:copper_coil", {
|
||||
description = S("Copper Coil"),
|
||||
inventory_image = "technic_copper_coil.png",
|
||||
})
|
||||
|
||||
minetest.register_craftitem("technic:lv_transformer", {
|
||||
description = S("Low Voltage Transformer"),
|
||||
inventory_image = "technic_lv_transformer.png",
|
||||
})
|
||||
|
||||
minetest.register_craftitem("technic:mv_transformer", {
|
||||
description = S("Medium Voltage Transformer"),
|
||||
inventory_image = "technic_mv_transformer.png",
|
||||
})
|
||||
|
||||
minetest.register_craftitem( "technic:hv_transformer", {
|
||||
description = S("High Voltage Transformer"),
|
||||
inventory_image = "technic_hv_transformer.png",
|
||||
})
|
||||
|
||||
minetest.register_craftitem( "technic:control_logic_unit", {
|
||||
description = S("Control Logic Unit"),
|
||||
inventory_image = "technic_control_logic_unit.png",
|
||||
})
|
||||
|
||||
minetest.register_craftitem("technic:mixed_metal_ingot", {
|
||||
description = S("Mixed Metal Ingot"),
|
||||
inventory_image = "technic_mixed_metal_ingot.png",
|
||||
})
|
||||
|
||||
minetest.register_craftitem("technic:composite_plate", {
|
||||
description = S("Composite Plate"),
|
||||
inventory_image = "technic_composite_plate.png",
|
||||
})
|
||||
|
||||
minetest.register_craftitem("technic:copper_plate", {
|
||||
description = S("Copper Plate"),
|
||||
inventory_image = "technic_copper_plate.png",
|
||||
})
|
||||
|
||||
minetest.register_craftitem("technic:carbon_plate", {
|
||||
description = S("Carbon Plate"),
|
||||
inventory_image = "technic_carbon_plate.png",
|
||||
})
|
||||
|
||||
minetest.register_craftitem("technic:graphite", {
|
||||
description = S("Graphite"),
|
||||
inventory_image = "technic_graphite.png",
|
||||
})
|
||||
|
||||
minetest.register_craftitem("technic:carbon_cloth", {
|
||||
description = S("Carbon Cloth"),
|
||||
inventory_image = "technic_carbon_cloth.png",
|
||||
})
|
||||
|
||||
minetest.register_node("technic:machine_casing", {
|
||||
description = S("Machine Casing"),
|
||||
groups = {cracky=2},
|
||||
sunlight_propagates = true,
|
||||
paramtype = "light",
|
||||
drawtype = "allfaces",
|
||||
tiles = {"technic_machine_casing.png"},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
})
|
||||
|
||||
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
|
||||
local ingot = "technic:uranium"..psuffix.."_ingot"
|
||||
local block = "technic:uranium"..psuffix.."_block"
|
||||
local ov = p == 7 and minetest.override_item or nil;
|
||||
(ov or minetest.register_craftitem)(ingot, {
|
||||
description = string.format(S("%.1f%%-Fissile Uranium Ingot"), p/10),
|
||||
inventory_image = "technic_uranium_ingot.png",
|
||||
groups = {uranium_ingot=1, not_in_creative_inventory=nici},
|
||||
});
|
||||
-- Note on radioactivity of blocks:
|
||||
-- Source: <http://www.wise-uranium.org/rup.html>
|
||||
-- The baseline radioactivity of an isotope is not especially
|
||||
-- correlated with whether it's fissile (i.e., suitable as
|
||||
-- reactor fuel). Natural uranium consists mainly of fissile
|
||||
-- U-235 and non-fissile U-238, and both U-235 and U-238 are
|
||||
-- significantly radioactive. U-235's massic activity is
|
||||
-- about 80.0 MBq/kg, and U-238's is about 12.4 MBq/kg, which
|
||||
-- superficially suggests that 3.5%-fissile uranium should have
|
||||
-- only 1.19 times the activity of fully-depleted uranium.
|
||||
-- But a third isotope affects the result hugely: U-234 has
|
||||
-- massic activity of 231 GBq/kg. Natural uranium has massic
|
||||
-- composition of 99.2837% U-238, 0.711% U-235, and 0.0053% U-234,
|
||||
-- so its activity comes roughly 49% each from U-234 and U-238
|
||||
-- and only 2% from U-235. During enrichment via centrifuge,
|
||||
-- the U-234 fraction is concentrated along with the U-235, with
|
||||
-- the U-234:U-235 ratio remaining close to its original value.
|
||||
-- (Actually the U-234 gets separated from U-238 slightly more
|
||||
-- than the U-235 is, so the U-234:U-235 ratio is slightly
|
||||
-- higher in enriched uranium.) A typical massic composition
|
||||
-- for 3.5%-fissile uranium is 96.47116% U-238, 3.5% U-235, and
|
||||
-- 0.02884% U-234. This gives 3.5%-fissile uranium about 6.55
|
||||
-- times the activity of fully-depleted uranium. The values we
|
||||
-- compute here for the "radioactive" group value are based on
|
||||
-- linear interpolation of activity along that scale, rooted at
|
||||
-- a natural (0.7%-fissile) uranium block having the activity of
|
||||
-- 9 uranium ore blocks (due to 9 ingots per block). The group
|
||||
-- value is proportional to the square root of the activity, and
|
||||
-- uranium ore has radioactive=1. This yields radioactive=1.0
|
||||
-- for a fully-depleted uranium block and radioactive=2.6 for
|
||||
-- a 3.5%-fissile uranium block.
|
||||
local radioactivity = math.floor(math.sqrt((1+5.55*p/35) * 18 / (1+5.55*7/35)) + 0.5);
|
||||
(ov or minetest.register_node)(block, {
|
||||
description = string.format(S("%.1f%%-Fissile Uranium Block"), p/10),
|
||||
tiles = {"technic_uranium_block.png"},
|
||||
is_ground_content = true,
|
||||
groups = {uranium_block=1, not_in_creative_inventory=nici,
|
||||
cracky=1, level=2, radioactive=radioactivity},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
});
|
||||
if not ov then
|
||||
minetest.register_craft({
|
||||
output = block,
|
||||
recipe = {
|
||||
{ingot, ingot, ingot},
|
||||
{ingot, ingot, ingot},
|
||||
{ingot, ingot, ingot},
|
||||
},
|
||||
})
|
||||
minetest.register_craft({
|
||||
output = ingot.." 9",
|
||||
recipe = {{block}},
|
||||
})
|
||||
end
|
||||
end
|
||||
|
|
@ -1,41 +0,0 @@
|
|||
|
||||
-- Aliases to convert from legacy node/item names
|
||||
|
||||
technic.legacy_nodenames = {
|
||||
["technic:alloy_furnace"] = "technic:lv_alloy_furnace",
|
||||
["technic:alloy_furnace_active"] = "technic:lv_alloy_furnace_active",
|
||||
["technic:battery_box"] = "technic:lv_battery_box0",
|
||||
["technic:battery_box1"] = "technic:lv_battery_box1",
|
||||
["technic:battery_box2"] = "technic:lv_battery_box2",
|
||||
["technic:battery_box3"] = "technic:lv_battery_box3",
|
||||
["technic:battery_box4"] = "technic:lv_battery_box4",
|
||||
["technic:battery_box5"] = "technic:lv_battery_box5",
|
||||
["technic:battery_box6"] = "technic:lv_battery_box6",
|
||||
["technic:battery_box7"] = "technic:lv_battery_box7",
|
||||
["technic:battery_box8"] = "technic:lv_battery_box8",
|
||||
["technic:electric_furnace"] = "technic:lv_electric_furnace",
|
||||
["technic:electric_furnace_active"] = "technic:lv_electric_furnace_active",
|
||||
["technic:grinder"] = "technic:lv_grinder",
|
||||
["technic:grinder_active"] = "technic:lv_grinder_active",
|
||||
["technic:extractor"] = "technic:lv_extractor",
|
||||
["technic:extractor_active"] = "technic:lv_extractor_active",
|
||||
["technic:compressor"] = "technic:lv_compressor",
|
||||
["technic:compressor_active"] = "technic:lv_compressor_active",
|
||||
["technic:hv_battery_box"] = "technic:hv_battery_box0",
|
||||
["technic:mv_battery_box"] = "technic:mv_battery_box0",
|
||||
["technic:generator"] = "technic:lv_generator",
|
||||
["technic:generator_active"] = "technic:lv_generator_active",
|
||||
["technic:iron_dust"] = "technic:wrought_iron_dust",
|
||||
["technic:enriched_uranium"] = "technic:uranium35_ingot",
|
||||
}
|
||||
|
||||
for old, new in pairs(technic.legacy_nodenames) do
|
||||
minetest.register_alias(old, new)
|
||||
end
|
||||
|
||||
for i = 0, 64 do
|
||||
minetest.register_alias("technic:hv_cable"..i, "technic:hv_cable")
|
||||
minetest.register_alias("technic:mv_cable"..i, "technic:mv_cable")
|
||||
minetest.register_alias("technic:lv_cable"..i, "technic:lv_cable")
|
||||
end
|
||||
|
|
@ -1,168 +0,0 @@
|
|||
# German Translation for Technic Mod
|
||||
# Deutsche Uebersetzung des Technic Mods
|
||||
# by Xanthin
|
||||
|
||||
## Misc
|
||||
[Technic] Loaded in %f seconds = [Technic] ist in %f Sekunden geladen
|
||||
|
||||
## Items
|
||||
Silicon Wafer = Siliziumscheibe
|
||||
Doped Silicon Wafer = Dotierte Siliziumscheibe
|
||||
Enriched Uranium = Angereichertes Uran
|
||||
Uranium Fuel = Uranbrennstoff
|
||||
Diamond Drill Head = Diamantbohrkopf
|
||||
Blue Energy Crystal = Blauer Energiekristall
|
||||
Green Energy Crystal = Gruener Energiekristall
|
||||
Red Energy Crystal = Roter Energiekristall
|
||||
Fine Copper Wire = Feinkupferdraht
|
||||
Copper Coil = Kupferspule
|
||||
Electric Motor = Elektromotor
|
||||
Low Voltage Transformer = Niederspannungstransformator
|
||||
Medium Voltage Transformer = Mittelspannungstransformator
|
||||
High Voltage Transformer = Hochspannungstransformator
|
||||
Control Logic Unit = Steuer- und Regelungseinheit
|
||||
Mixed Metal Ingot = Mischmetallbarren
|
||||
Composite Plate = Verbundplatte
|
||||
Copper Plate = Kupferplatte
|
||||
Carbon Plate = Kohlefaserplatte
|
||||
Graphite = Graphit
|
||||
Carbon Cloth = Kohlefasergewebe
|
||||
Raw Latex = Rohlatex
|
||||
Rubber Fiber = Gummifaser
|
||||
%.1f%%-Fissile Uranium Ingot =
|
||||
%.1f%%-Fissile Uranium Block =
|
||||
|
||||
## Machine misc
|
||||
Machine cannot be removed because it is not empty = Die Maschine kann nicht entfernt werden, weil sie noch nicht leer ist.
|
||||
Inventory move disallowed due to protection = Das Inventar ist geschuetzt, Zugriff verweigert.
|
||||
# $1: Machine name (Includes tier)
|
||||
@1 Active (@2 EU) = @1 ist eingeschaltet (@2 EU)
|
||||
%s Active = %s ist eingeschaltet
|
||||
%s Disabled = %s ist ausgeschaltet
|
||||
%s Enabled =
|
||||
%s Idle = %s ist bereit
|
||||
%s Improperly Placed = %s ist falsch plaziert
|
||||
%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
|
||||
%s Finished = %s ist fertig
|
||||
Enable/Disable = Einschalten/Ausschalten
|
||||
Range = Reichweite
|
||||
Upgrade Slots = Verbesserungsfaecher
|
||||
In: = Rein:
|
||||
Out: = Raus:
|
||||
Slot %d = Fach %d
|
||||
Itemwise = Einzelstuecke
|
||||
Stackwise = Ganzer Stapel
|
||||
Owner: =
|
||||
Unlocked =
|
||||
Locked =
|
||||
Radius: =
|
||||
Enabled =
|
||||
Disabled =
|
||||
|
||||
## Machine names
|
||||
# $1: Tier
|
||||
%s Alloy Furnace = %s Legierungsofen
|
||||
%s Battery Box = %s Batteriebox
|
||||
%s Cable = %s Kabel
|
||||
%s Compressor = %s Kompressor
|
||||
%s Extractor = %s Extraktor
|
||||
%s Forcefield Emitter = %s Kraftfeld-Emitter
|
||||
%s Furnace = %s Ofen
|
||||
%s Grinder = %s Schleifmaschine
|
||||
%s Music Player = %s Musikspieler
|
||||
%s Quarry = %s Steinbruch
|
||||
%s Tool Workshop = %s Werkzeugwerkstatt
|
||||
Arrayed Solar %s Generator = %s Solaranlage
|
||||
Fuel-Fired %s Generator = %s Kohle-Generator
|
||||
Geothermal %s Generator = %s Geothermie-Generator
|
||||
Hydro %s Generator = %s Wassermuehle
|
||||
Nuclear %s Generator Core = %s Reaktorkern
|
||||
Small Solar %s Generator = %s Solarmodul
|
||||
Wind %s Generator = %s Windmuehle
|
||||
Self-Contained Injector = Selbstversorger-Injektor
|
||||
Constructor Mk%d = Konstruktor Modell %d
|
||||
Frame = Rahmen
|
||||
Frame Motor = Rahmenmotor
|
||||
Template = Schablone
|
||||
Template (replacing) = Schablone (ersetzend)
|
||||
Template motor = Schablonenmotor
|
||||
Template tool = Schablonenwerkzeug
|
||||
Battery Box = Batteriebox
|
||||
Supply Converter = Stromumwandler
|
||||
Switching Station = Schaltanlage
|
||||
Fuel-Fired Alloy Furnace = Kohle-Legierungsofen
|
||||
Fuel-Fired Furnace = Kohle-Ofen
|
||||
Wind Mill Frame = Windmuehlengeruest
|
||||
Forcefield = Kraftfeld
|
||||
Nuclear Reactor Rod Compartment = Brennstabfaecher
|
||||
Administrative World Anchor =
|
||||
|
||||
## Machine-specific
|
||||
# $1: Pruduced EU
|
||||
Charge = Aufladen
|
||||
Discharge = Entladen
|
||||
Power level = Energiestufe
|
||||
# $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
|
||||
Production at %d%% = Produktion bei %d%%
|
||||
Choose Milling Program: = Waehle ein Fraesprogramm:
|
||||
Slim Elements half / normal height: = Schmale Elemente von halber / normaler Hoehe:
|
||||
Current track %s = Aktueller Titel %s
|
||||
Stopped =
|
||||
Keeping %d/%d map blocks loaded =
|
||||
Digging not started =
|
||||
Digging finished =
|
||||
Digging %d m above machine =
|
||||
Digging %d m below machine =
|
||||
|
||||
## Grinder Recipes
|
||||
# $1: Name
|
||||
%s Dust = %sstaub
|
||||
Akalin = Akalin
|
||||
Alatro = Alatro
|
||||
Arol = Arol
|
||||
Brass = Messing
|
||||
Bronze = Bronze
|
||||
Carbon Steel = Kohlenstoffstahl
|
||||
Cast Iron = Gusseisen
|
||||
Chromium = Chrom
|
||||
Coal = Kohle
|
||||
Copper = Kupfer
|
||||
Gold = Gold
|
||||
Mithril = Mithril
|
||||
Silver = Silber
|
||||
Stainless Steel = Edelstahl
|
||||
Talinite = Talinite
|
||||
Tin = Zinn
|
||||
Wrought Iron = Schmiedeeisen
|
||||
Zinc = Zink
|
||||
%.1f%%-Fissile Uranium =
|
||||
|
||||
## Tools
|
||||
RE Battery = Akkubatterie
|
||||
Water Can = Wasserkanister
|
||||
Lava Can = Lavakanister
|
||||
Chainsaw = Kettensaege
|
||||
Flashlight = Taschenlampe
|
||||
3 nodes deep. = 3 Bloecke tief.
|
||||
3 nodes tall. = 3 Bloecke hoch.
|
||||
3 nodes wide. = 3 Bloecke breit.
|
||||
3x3 nodes. = 3x3 Bloecke.
|
||||
Use while sneaking to change Mining Drill Mk%d modes. = Halte die Shift-Taste beim Benutzen gedrueckt, um die Funktion des Bergbaubohrers Modell %d zu aendern.
|
||||
Mining Drill Mk%d Mode %d = Bergbaubohrer Modell %d Funktion %d
|
||||
Mining Drill Mk%d = Bergbaubohrer Modell %d
|
||||
Mining Laser Mk%d = Bergbaulaser Modell %d
|
||||
Single node. = Einzelblock
|
||||
Sonic Screwdriver = Schallschraubendreher
|
||||
Tree Tap = Baumzapfhahn
|
||||
|
||||
## Craft descriptions
|
||||
Alloy cooking =
|
||||
Grinding =
|
||||
Compressing =
|
||||
Extracting =
|
|
@ -1,162 +0,0 @@
|
|||
# Spanish Translation for Technic Mod
|
||||
# Traduccion al Español del Mod Technic
|
||||
# Autor: Diego Martínez <kaeza>
|
||||
|
||||
## Misc
|
||||
[Technic] Loaded in %f seconds = [Technic] Cargado en %f segundos
|
||||
|
||||
## Items
|
||||
Silicon Wafer = Oblea de Silicio
|
||||
Doped Silicon Wafer = Oblea de Silicio Dopada
|
||||
Enriched Uranium = Uranio Enriquecido
|
||||
Uranium Fuel = Combustible de Uranio
|
||||
Diamond Drill Head = Mecha de Taladro de Diamante
|
||||
Blue Energy Crystal = Cristal de Energia Azul
|
||||
Green Energy Crystal = Cristal de Energia Verde
|
||||
Red Energy Crystal = Cristal de Energia Rojo
|
||||
Fine Copper Wire = Cable Fino de Cobre
|
||||
Copper Coil = Resorte de Cobre
|
||||
Electric Motor = Motor Electrico
|
||||
Low Voltage Transformer = Transformador de Bajo Voltaje
|
||||
Medium Voltage Transformer = Transformador de Voltaje Medio
|
||||
High Voltage Transformer = Transformador de Alto Voltaje
|
||||
Control Logic Unit = Unidad Logica de Control
|
||||
Mixed Metal Ingot = Lingote de Metal Mezclado
|
||||
Composite Plate = Placa de Compuestos
|
||||
Copper Plate = Placa de Cobre
|
||||
Carbon Plate = Placa de Carbon
|
||||
Graphite = Grafito
|
||||
Carbon Cloth = Tela de Carbon
|
||||
Raw Latex = Latex Crudo
|
||||
Rubber Fiber = Fibra de Hule
|
||||
%.1f%%-Fissile Uranium Ingot =
|
||||
%.1f%%-Fissile Uranium Block =
|
||||
|
||||
## Machine misc
|
||||
Machine cannot be removed because it is not empty = La maquina no puede removerse porque no esta vacia
|
||||
Inventory move disallowed due to protection =
|
||||
# $1: Machine name (Includes tier)
|
||||
@1 Active (@2 EU) = @1 Activo (@2 EU)
|
||||
%s Active = %s Activo
|
||||
%s Enabled =
|
||||
%s Idle = %s Quieto
|
||||
%s Unpowered = %s Sin Energia
|
||||
%s Out Of Fuel = %s Sin Combustible
|
||||
%s Has Bad Cabling = %s Tiene Mal Cableado
|
||||
%s Has No Network = %s No Tiene Una Red
|
||||
%s Finished = %s Terminado
|
||||
%s Disabled = %s Deshabilitado
|
||||
%s Improperly Placed = %s No Colocado Apropiadamente
|
||||
Range = Alcance
|
||||
Enable/Disable = Habilitar/Deshabilitar
|
||||
Itemwise =
|
||||
Stackwise =
|
||||
Owner: =
|
||||
Unlocked =
|
||||
Locked =
|
||||
Radius: =
|
||||
Enabled =
|
||||
Disabled =
|
||||
|
||||
## Machine names
|
||||
# $1: Tier
|
||||
%s Alloy Furnace = Horno de Aleacion %s
|
||||
%s Battery Box = Caja de Bateria %s
|
||||
%s Cable = Cable %s
|
||||
%s Compressor = Compresor %s
|
||||
%s Extractor = Extractor %s
|
||||
%s Forcefield Emitter = Emisor de Campo de Fuerza %s
|
||||
%s Furnace = Horno %s
|
||||
%s Grinder = Amoladora %s
|
||||
%s Music Player = Reproductor de Musica %s
|
||||
%s Quarry = Cantera %s
|
||||
%s Tool Workshop = Taller de Herramientas %s
|
||||
Arrayed Solar %s Generator = Panel Solar %s
|
||||
Fuel-Fired %s Generator = Generador a Carbon %s
|
||||
Geothermal %s Generator = Generador Geotermico %s
|
||||
Hydro %s Generator = Molino de Agua %s
|
||||
Nuclear %s Generator Core = Nucleo de Reactor Nuclear %s
|
||||
Small Solar %s Generator = Panel Solar %s
|
||||
Wind %s Generator = Molino de Viento %s
|
||||
Self-Contained Injector =
|
||||
Constructor Mk%d =
|
||||
Frame =
|
||||
Frame Motor =
|
||||
Template =
|
||||
Template (replacing) =
|
||||
Template Motor =
|
||||
Template Tool =
|
||||
Supply Converter = Convertidor de Alimentacion
|
||||
Switching Station = Estacion de Conmutacion
|
||||
Battery Box = Caja de Baterias
|
||||
Fuel-Fired Alloy Furnace = Horno de Aleacion a Carbon
|
||||
Fuel-Fired Furnace = Horno a Carbon
|
||||
Forcefield = Campo de Fuerza
|
||||
Nuclear Reactor Rod Compartment = Compartimiento para Vara de Reactor Nuclear
|
||||
Wind Mill Frame = Armazon de Molino de Viento
|
||||
Administrative World Anchor =
|
||||
|
||||
## Machine-specific
|
||||
# $1: Pruduced EU
|
||||
Charge = Cargar
|
||||
Discharge = Descargar
|
||||
Power level = Nivel de Poder
|
||||
# $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
|
||||
# $1: Production percent
|
||||
Production at %d%% = Produccion en %d%%
|
||||
Stopped =
|
||||
Keeping %d/%d map blocks loaded =
|
||||
Digging not started =
|
||||
Digging finished =
|
||||
Digging %d m above machine =
|
||||
Digging %d m below machine =
|
||||
|
||||
## Grinder Recipes
|
||||
# $1: Name
|
||||
%s Dust = Polvo de %s
|
||||
Akalin = Akalina
|
||||
Alatro = Alatro
|
||||
Arol = Arol
|
||||
Brass = Laton
|
||||
Bronze = Bronce
|
||||
Carbon Steel = Acero al Carbono
|
||||
Cast Iron = Hierro Fundido
|
||||
Chromium = Cromo
|
||||
Coal = Carbon
|
||||
Copper = Cobre
|
||||
Gold = Oro
|
||||
Mithril = Mitrilo
|
||||
Silver = Plata
|
||||
Stainless Steel = Acero Inoxidable
|
||||
Talinite = Talinita
|
||||
Tin = Estanio
|
||||
Wrought Iron = Hierro Forjado
|
||||
Zinc = Zinc
|
||||
%.1f%%-Fissile Uranium =
|
||||
|
||||
## Tools
|
||||
RE Battery =
|
||||
Water Can = Bidon de Agua
|
||||
Lava Can = Bidon de Lava
|
||||
Chainsaw = Motosierra
|
||||
Flashlight = Linterna
|
||||
3 nodes deep. = 3 nodos de profundo.
|
||||
3 nodes tall. = 3 nodos de alto.
|
||||
3 nodes wide. = 3 nodos de ancho.
|
||||
3x3 nodes. = 3x3 nodos.
|
||||
Use while sneaking to change Mining Drill Mk%d modes. = Manten pulsado Mayus y Usar para cambiar el modo del Taladro de Mineria Mk%d.
|
||||
Mining Drill Mk%d Mode %d = Taladro de Mineria Mk%d Modo %d
|
||||
Mining Drill Mk%d = Taladro de Mineria Mk%d
|
||||
Mining Laser Mk%d = Laser de Mineria Mk%d
|
||||
Single node. = Nodo simple.
|
||||
Sonic Screwdriver = Destonillador Sonico
|
||||
Tree Tap = Grifo de Arbol
|
||||
|
||||
## Craft descriptions
|
||||
Alloy cooking =
|
||||
Grinding =
|
||||
Compressing =
|
||||
Extracting =
|
|
@ -1,215 +0,0 @@
|
|||
# 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
|
|
@ -1,165 +0,0 @@
|
|||
|
||||
## Misc
|
||||
[Technic] Loaded in %f seconds = [Technic] caricato in %f secondi
|
||||
|
||||
## Items
|
||||
Silicon Wafer = Wafer di silicone
|
||||
Doped Silicon Wafer = Wafer di silicone dopato
|
||||
Enriched Uranium = Uranio arricchito
|
||||
Uranium Fuel = Uranio Combustibile
|
||||
Diamond Drill Head = Trivella diamantata
|
||||
Blue Energy Crystal = Cristallo energetico blu
|
||||
Green Energy Crystal = Cristallo energetico verde
|
||||
Red Energy Crystal = Cristallo energetico rosso
|
||||
Fine Copper Wire = Filo di rame fine
|
||||
Copper Coil = Bobina di rame
|
||||
Electric Motor = Motore elettrico
|
||||
Low Voltage Transformer = Trasformatore in bassa tensione
|
||||
Medium Voltage Transformer = Trasformatore in media tensione
|
||||
High Voltage Transformer = Trasformatore in alta tensione
|
||||
Control Logic Unit = Unità di controllo logica
|
||||
Mixed Metal Ingot = Lingotto in lega ibrida
|
||||
Composite Plate = Lastra composita
|
||||
Copper Plate = Lastra di rame
|
||||
Carbon Plate = Lastra in carbonio
|
||||
Graphite = Lastra in graffite
|
||||
Carbon Cloth = Fibra di carbonio
|
||||
Raw Latex = Latex grezzo
|
||||
Rubber Fiber = Fibra di gomma
|
||||
%.1f%%-Fissile Uranium Ingot = %.1f%%-Lingotto di uranio fissile
|
||||
%.1f%%-Fissile Uranium Block = %.1f%%-Blocco di uranio fissile
|
||||
|
||||
## Machine misc
|
||||
Machine cannot be removed because it is not empty = La macchina non può essere rimossa perchè non è vuota
|
||||
Inventory move disallowed due to protection = Impossibile muovere l'inventario a causa della protezione
|
||||
# $1: Machine name (Includes tier)
|
||||
@1 Active (@2 EU) = @1 Attivo (@2 EU)
|
||||
%s Active = %s Attivo
|
||||
%s Disabled = %s Disabilitato
|
||||
%s Enabled = %s Abilitato
|
||||
%s Idle = %s Inattivo
|
||||
%s Improperly Placed = %s Piazzato impropiamente
|
||||
%s Unpowered = %s Non alimentato
|
||||
%s Out Of Fuel = %s senza carburante
|
||||
%s Has Bad Cabling = %s ha un cablaggio scorretto
|
||||
%s Has No Network = %s non è collegata
|
||||
%s Finished = %s Finito
|
||||
Enable/Disable = Abilita/Disabilita
|
||||
Range = Raggio
|
||||
Upgrade Slots = Alloggi di aggiornamento
|
||||
In: = Ingresso:
|
||||
Out: = Uscita:
|
||||
Slot %d = Alloggio %d
|
||||
Itemwise = Singolo elemento
|
||||
Stackwise = pila completa
|
||||
Owner: = Proprietario:
|
||||
Unlocked = Non chiuso a chiave
|
||||
Locked = Chiuso a chiave
|
||||
Radius: = Raggio:
|
||||
Enabled = Abilitato
|
||||
Disabled = Disabilitato
|
||||
|
||||
## Machine names
|
||||
# $1: Tier
|
||||
%s Alloy Furnace = %s Fornace per leghe
|
||||
%s Battery Box = %s Box batterie
|
||||
%s Cable = Cavo %s
|
||||
%s Compressor = Compressore %s
|
||||
%s Extractor = Estrattore %s
|
||||
%s Forcefield Emitter = Emettitore di campo di forza %s
|
||||
%s Furnace = %s Fornace
|
||||
%s Grinder = %s Tritatutto
|
||||
%s Music Player = Music Player %s
|
||||
%s Quarry = Cava %s
|
||||
%s Tool Workshop = Officina per attrezzi %s
|
||||
Arrayed Solar %s Generator = %s Pannello Solare
|
||||
Fuel-Fired %s Generator = %s Generatore a carbone
|
||||
Geothermal %s Generator = %s Generatore Geotermico
|
||||
Hydro %s Generator = Turbina Elettrica %s
|
||||
Nuclear %s Generator Core = Reattore nucleare %s
|
||||
Small Solar %s Generator = %s Pannello solare
|
||||
Wind %s Generator = %s Generatore eolico
|
||||
Self-Contained Injector = Ignettore
|
||||
Constructor Mk%d = Costruttore Mk%d
|
||||
Frame = Cornice
|
||||
Frame Motor = Cornice del motore
|
||||
Template = Sagoma
|
||||
Template (replacing) = Sagoma (di rimpiazzo)
|
||||
Template Motor = Motore per sagome
|
||||
Template Tool = Strumento per sagome
|
||||
Battery Box = Box batterie
|
||||
Supply Converter = Trasformatore
|
||||
Switching Station = Stazione di controllo
|
||||
Fuel-Fired Alloy Furnace = Fornace per leghe a carbone
|
||||
Fuel-Fired Furnace = Fornace a carbone
|
||||
Wind Mill Frame = Pala eolica
|
||||
Forcefield = Campo di forza
|
||||
Nuclear Reactor Rod Compartment = Compartimento combustibile nucleare
|
||||
Administrative World Anchor = Ancora-mondo amministrativa
|
||||
|
||||
## Machine-specific
|
||||
# $1: Pruduced EU
|
||||
Charge = Carica
|
||||
Discharge = Scarica
|
||||
Power level = Livello di potenza
|
||||
# $1: Tier $2: current_charge $3: max_charge
|
||||
@1 Battery Box: @2/@3 = @1 Box Batterie: @2/@3
|
||||
# $1: Machine name $2: Supply $3: Demand
|
||||
@1. Supply: @2 Demand: @3 = @1. Prodotto: @2 Consumato: @3
|
||||
Production at %d%% = Produzione a %d%%
|
||||
Choose Milling Program: = Scegliere un programma di Fresatura
|
||||
Slim Elements half / normal height: = Metà elementi sottili / altezza normale:
|
||||
Current track %s = Traccia corrente %s
|
||||
Stopped = Fermato
|
||||
Keeping %d/%d map blocks loaded = Mantenimento di %d/%d blocchi mappa caricati
|
||||
Digging not started = Scavo non iniziato
|
||||
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
|
||||
|
||||
## Grinder Recipes
|
||||
# $1: Name
|
||||
%s Dust = Polvere di %s
|
||||
Akalin = Alcalino
|
||||
Alatro = Alatro
|
||||
Arol = Arol
|
||||
Brass = Ottone
|
||||
Bronze = Bronzo
|
||||
Carbon Steel = Acciaio al Carbonio
|
||||
Cast Iron = Ghisa
|
||||
Chromium = Cromo
|
||||
Coal = Carbone
|
||||
Copper = Rame
|
||||
Gold = Oro
|
||||
Mithril = Mithril
|
||||
Silver = Argento
|
||||
Stainless Steel = Acciaio Inossidabile
|
||||
Talinite = Talinite
|
||||
Tin = Stagno
|
||||
Wrought Iron = Ferro Battuto
|
||||
Zinc = Zinco
|
||||
%.1f%%-Fissile Uranium = %.1f%%-Uranio fissile
|
||||
|
||||
## Tools
|
||||
RE Battery = Batteria RE
|
||||
Water Can = Serbatoio d'acqua
|
||||
Lava Can = Serbatoio di lava
|
||||
Chainsaw = Motosega
|
||||
Flashlight = Torcia
|
||||
3 nodes deep. = 3 nodi in profondità.
|
||||
3 nodes tall. = 3 nodi in altezza.
|
||||
3 nodes wide. = 3 nodi in larghezza.
|
||||
3x3 nodes. = 3x3 nodi.
|
||||
Use while sneaking to change Mining Drill Mk%d modes. = Premi shift (freccia grossa) e usa per cambiare modalità nella trivella da miniera Mk%d.
|
||||
Mining Drill Mk%d Mode %d = Trivella mk%d in modalità %d
|
||||
Mining Drill Mk%d = Trivella da miniera mk%d
|
||||
Mining Laser Mk%d = Laser da miniera mk%d
|
||||
Single node. = Nodo singolo.
|
||||
Sonic Screwdriver = Cacciavite sonico
|
||||
Tree Tap = Batti albero
|
||||
|
||||
## Craft descriptions
|
||||
Alloy cooking = Cottura lege
|
||||
Grinding = Macinazione
|
||||
Compressing = Compressione
|
||||
Extracting = Estrazione
|
|
@ -1,175 +0,0 @@
|
|||
# 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
|
|
@ -1,211 +0,0 @@
|
|||
# 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
|
|
@ -1,178 +0,0 @@
|
|||
# template.txt
|
||||
# Template for translations of Technic
|
||||
|
||||
|
||||
## Misc
|
||||
[Technic] Loaded in %f seconds =
|
||||
|
||||
## Items
|
||||
Silicon Wafer =
|
||||
Doped Silicon Wafer =
|
||||
Enriched Uranium =
|
||||
Uranium Fuel =
|
||||
Diamond Drill Head =
|
||||
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 =
|
||||
Medium Voltage Transformer =
|
||||
High Voltage Transformer =
|
||||
Control Logic Unit =
|
||||
Mixed Metal Ingot =
|
||||
Composite Plate =
|
||||
Copper Plate =
|
||||
Carbon Plate =
|
||||
Graphite =
|
||||
Carbon Cloth =
|
||||
Raw Latex =
|
||||
Rubber Fiber =
|
||||
%.1f%%-Fissile Uranium Ingot =
|
||||
%.1f%%-Fissile Uranium Block =
|
||||
|
||||
## Machine misc
|
||||
Machine cannot be removed because it is not empty =
|
||||
Inventory move disallowed due to protection =
|
||||
# $1: Machine name (Includes tier)
|
||||
@1 Active (@2 EU) =
|
||||
%s Active =
|
||||
%s Disabled =
|
||||
%s Enabled =
|
||||
%s Idle =
|
||||
%s Improperly Placed =
|
||||
%s is empty =
|
||||
%s Unpowered =
|
||||
%s Out Of Fuel =
|
||||
%s Has Bad Cabling =
|
||||
%s (Slave) =
|
||||
%s Has No Network =
|
||||
%s Finished =
|
||||
Enable/Disable =
|
||||
Range =
|
||||
Upgrade Slots =
|
||||
In: =
|
||||
Out: =
|
||||
Slot %d =
|
||||
Itemwise =
|
||||
Stackwise =
|
||||
Ignoring Mesecon Signal =
|
||||
Controlled by Mesecon Signal =
|
||||
Owner: =
|
||||
Unlocked =
|
||||
Locked =
|
||||
Radius: =
|
||||
Enabled =
|
||||
Disabled =
|
||||
|
||||
## Machine names
|
||||
# $1: Tier
|
||||
%s Alloy Furnace =
|
||||
%s Battery Box =
|
||||
%s Cable =
|
||||
%s Centrifuge =
|
||||
%s Compressor =
|
||||
%s Extractor =
|
||||
%s Forcefield Emitter =
|
||||
%s Furnace =
|
||||
%s Grinder =
|
||||
%s Music Player =
|
||||
%s Quarry =
|
||||
%s Tool Workshop =
|
||||
Arrayed Solar %s Generator =
|
||||
Fuel-Fired %s Generator =
|
||||
Geothermal %s Generator =
|
||||
Hydro %s Generator =
|
||||
Nuclear %s Generator Core =
|
||||
Small Solar %s Generator =
|
||||
Wind %s Generator =
|
||||
Self-Contained Injector =
|
||||
Constructor Mk%d =
|
||||
Frame =
|
||||
Frame Motor =
|
||||
Template =
|
||||
Template (replacing) =
|
||||
Template Motor =
|
||||
Template Tool =
|
||||
Battery Box =
|
||||
Supply Converter =
|
||||
Switching Station =
|
||||
Fuel-Fired Alloy Furnace =
|
||||
Fuel-Fired Furnace =
|
||||
Wind Mill Frame =
|
||||
Forcefield =
|
||||
Nuclear Reactor Rod Compartment =
|
||||
Administrative World Anchor =
|
||||
|
||||
## Machine-specific
|
||||
# $1: Pruduced EU
|
||||
Charge =
|
||||
Discharge =
|
||||
Power level =
|
||||
# $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 =
|
||||
Production at %d%% =
|
||||
Choose Milling Program: =
|
||||
Slim Elements half / normal height: =
|
||||
Current track %s =
|
||||
Stopped =
|
||||
Keeping %d/%d map blocks loaded =
|
||||
Digging not started =
|
||||
Digging finished =
|
||||
Digging %d m above machine =
|
||||
Digging %d m below machine =
|
||||
@1 (@2 @3 -> @4 @5) =
|
||||
|
||||
|
||||
## Grinder Recipes
|
||||
# $1: Name
|
||||
%s Dust =
|
||||
Akalin =
|
||||
Alatro =
|
||||
Arol =
|
||||
Brass =
|
||||
Bronze =
|
||||
Carbon Steel =
|
||||
Cast Iron =
|
||||
Chromium =
|
||||
Coal =
|
||||
Copper =
|
||||
Gold =
|
||||
Mithril =
|
||||
Silver =
|
||||
Stainless Steel =
|
||||
Talinite =
|
||||
Tin =
|
||||
Wrought Iron =
|
||||
Zinc =
|
||||
%.1f%%-Fissile Uranium =
|
||||
|
||||
## Tools
|
||||
RE Battery =
|
||||
Water Can =
|
||||
Lava Can =
|
||||
Chainsaw =
|
||||
Flashlight =
|
||||
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 =
|
||||
Mining Drill Mk%d =
|
||||
Mining Laser Mk%d =
|
||||
Single node. =
|
||||
Sonic Screwdriver =
|
||||
Tree Tap =
|
||||
|
||||
## Craft descriptions
|
||||
Alloy cooking =
|
||||
Grinding =
|
||||
Compressing =
|
||||
Extracting =
|
||||
Separating =
|
|
@ -1,22 +0,0 @@
|
|||
-- HV battery box
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'technic:hv_battery_box0',
|
||||
recipe = {
|
||||
{'technic:mv_battery_box0', 'technic:mv_battery_box0', 'technic:mv_battery_box0'},
|
||||
{'technic:mv_battery_box0', 'technic:hv_transformer', 'technic:mv_battery_box0'},
|
||||
{'', 'technic:hv_cable', ''},
|
||||
}
|
||||
})
|
||||
|
||||
technic.register_battery_box({
|
||||
tier = "HV",
|
||||
max_charge = 1000000,
|
||||
charge_rate = 100000,
|
||||
discharge_rate = 400000,
|
||||
charge_step = 10000,
|
||||
discharge_step = 40000,
|
||||
upgrade = 1,
|
||||
tube = 1,
|
||||
})
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
|
||||
minetest.register_craft({
|
||||
output = 'technic:hv_cable 3',
|
||||
recipe = {
|
||||
{'homedecor:plastic_sheeting', 'homedecor:plastic_sheeting', 'homedecor:plastic_sheeting'},
|
||||
{'technic:mv_cable', 'technic:mv_cable', 'technic:mv_cable'},
|
||||
{'homedecor:plastic_sheeting', 'homedecor:plastic_sheeting', 'homedecor:plastic_sheeting'},
|
||||
}
|
||||
})
|
||||
|
||||
technic.register_cable("HV", 3/16)
|
||||
|
|
@ -1,377 +0,0 @@
|
|||
--- Forcefield generator.
|
||||
-- @author ShadowNinja
|
||||
--
|
||||
-- Forcefields are powerful barriers but they consume huge amounts of power.
|
||||
-- The forcefield Generator is an HV machine.
|
||||
|
||||
-- How expensive is the generator?
|
||||
-- Leaves room for upgrades lowering the power drain?
|
||||
local digilines_path = minetest.get_modpath("digilines")
|
||||
|
||||
local forcefield_power_drain = 10
|
||||
|
||||
local S = technic.getter
|
||||
|
||||
local cable_entry = "^technic_cable_connection_overlay.png"
|
||||
|
||||
minetest.register_craft({
|
||||
output = "technic:forcefield_emitter_off",
|
||||
recipe = {
|
||||
{"default:mese", "basic_materials:motor", "default:mese" },
|
||||
{"technic:deployer_off", "technic:machine_casing", "technic:deployer_off"},
|
||||
{"default:mese", "technic:hv_cable", "default:mese" },
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
local replaceable_cids = {}
|
||||
|
||||
minetest.after(0, function()
|
||||
for name, ndef in pairs(minetest.registered_nodes) do
|
||||
if ndef.buildable_to == true and name ~= "ignore" then
|
||||
replaceable_cids[minetest.get_content_id(name)] = true
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
|
||||
-- Idea: Let forcefields have different colors by upgrade slot.
|
||||
-- Idea: Let forcefields add up by detecting if one hits another.
|
||||
-- ___ __
|
||||
-- / \/ \
|
||||
-- | |
|
||||
-- \___/\___/
|
||||
|
||||
local function update_forcefield(pos, meta, active)
|
||||
local shape = meta:get_int("shape")
|
||||
local range = meta:get_int("range")
|
||||
local vm = VoxelManip()
|
||||
local MinEdge, MaxEdge = vm:read_from_map(vector.subtract(pos, range),
|
||||
vector.add(pos, range))
|
||||
local area = VoxelArea:new({MinEdge = MinEdge, MaxEdge = MaxEdge})
|
||||
local data = vm:get_data()
|
||||
|
||||
local c_air = minetest.get_content_id("air")
|
||||
local c_field = minetest.get_content_id("technic:forcefield")
|
||||
|
||||
for z = -range, range do
|
||||
for y = -range, range do
|
||||
local vi = area:index(pos.x + (-range), pos.y + y, pos.z + z)
|
||||
for x = -range, range do
|
||||
local relevant
|
||||
if shape == 0 then
|
||||
local squared = x * x + y * y + z * z
|
||||
relevant =
|
||||
squared <= range * range + range and
|
||||
squared >= (range - 1) * (range - 1) + (range - 1)
|
||||
else
|
||||
relevant =
|
||||
x == -range or x == range or
|
||||
y == -range or y == range or
|
||||
z == -range or z == range
|
||||
end
|
||||
if relevant then
|
||||
local cid = data[vi]
|
||||
if active and replaceable_cids[cid] then
|
||||
data[vi] = c_field
|
||||
elseif not active and cid == c_field then
|
||||
data[vi] = c_air
|
||||
end
|
||||
end
|
||||
vi = vi + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
vm:set_data(data)
|
||||
vm:update_liquids()
|
||||
vm:write_to_map()
|
||||
end
|
||||
|
||||
local function set_forcefield_formspec(meta)
|
||||
local formspec
|
||||
if digilines_path then
|
||||
formspec = "size[5,3.25]"..
|
||||
"field[0.3,3;5,1;channel;Digiline Channel;"..meta:get_string("channel").."]"
|
||||
else
|
||||
formspec = "size[5,2.25]"
|
||||
end
|
||||
formspec = formspec..
|
||||
"field[0.3,0.5;2,1;range;"..S("Range")..";"..meta:get_int("range").."]"
|
||||
-- The names for these toggle buttons are explicit about which
|
||||
-- state they'll switch to, so that multiple presses (arising
|
||||
-- from the ambiguity between lag and a missed press) only make
|
||||
-- the single change that the user expects.
|
||||
if meta:get_int("shape") == 0 then
|
||||
formspec = formspec.."button[3,0.2;2,1;shape1;"..S("Sphere").."]"
|
||||
else
|
||||
formspec = formspec.."button[3,0.2;2,1;shape0;"..S("Cube").."]"
|
||||
end
|
||||
if meta:get_int("mesecon_mode") == 0 then
|
||||
formspec = formspec.."button[0,1;5,1;mesecon_mode_1;"..S("Ignoring Mesecon Signal").."]"
|
||||
else
|
||||
formspec = formspec.."button[0,1;5,1;mesecon_mode_0;"..S("Controlled by Mesecon Signal").."]"
|
||||
end
|
||||
if meta:get_int("enabled") == 0 then
|
||||
formspec = formspec.."button[0,1.75;5,1;enable;"..S("%s Disabled"):format(S("%s Forcefield Emitter"):format("HV")).."]"
|
||||
else
|
||||
formspec = formspec.."button[0,1.75;5,1;disable;"..S("%s Enabled"):format(S("%s Forcefield Emitter"):format("HV")).."]"
|
||||
end
|
||||
meta:set_string("formspec", formspec)
|
||||
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
|
||||
range = tonumber(fields.range) or 0
|
||||
-- Smallest field is 5. Anything less is asking for trouble.
|
||||
-- Largest is 20. It is a matter of pratical node handling.
|
||||
-- At the maximim range updating the forcefield takes about 0.2s
|
||||
range = math.max(range, 5)
|
||||
range = math.min(range, 20)
|
||||
if range == meta:get_int("range") then range = nil end
|
||||
end
|
||||
if fields.shape0 or fields.shape1 or range then
|
||||
update_forcefield(pos, meta, false)
|
||||
end
|
||||
if range then meta:set_int("range", range) end
|
||||
if fields.channel then meta:set_string("channel", fields.channel) end
|
||||
if fields.shape0 then meta:set_int("shape", 0) end
|
||||
if fields.shape1 then meta:set_int("shape", 1) end
|
||||
if fields.enable then meta:set_int("enabled", 1) end
|
||||
if fields.disable then meta:set_int("enabled", 0) end
|
||||
if fields.mesecon_mode_0 then meta:set_int("mesecon_mode", 0) end
|
||||
if fields.mesecon_mode_1 then meta:set_int("mesecon_mode", 1) end
|
||||
set_forcefield_formspec(meta)
|
||||
end
|
||||
|
||||
local mesecons = {
|
||||
effector = {
|
||||
action_on = function(pos, node)
|
||||
minetest.get_meta(pos):set_int("mesecon_effect", 1)
|
||||
end,
|
||||
action_off = function(pos, node)
|
||||
minetest.get_meta(pos):set_int("mesecon_effect", 0)
|
||||
end
|
||||
}
|
||||
}
|
||||
|
||||
local digiline_def = {
|
||||
receptor = {action = function() end},
|
||||
effector = {
|
||||
action = function(pos, node, channel, msg)
|
||||
local meta = minetest.get_meta(pos)
|
||||
if channel ~= meta:get_string("channel") then
|
||||
return
|
||||
end
|
||||
local msgt = type(msg)
|
||||
if msgt == "string" then
|
||||
local smsg = msg:lower()
|
||||
msg = {}
|
||||
if smsg == "get" then
|
||||
msg.command = "get"
|
||||
elseif smsg == "off" then
|
||||
msg.command = "off"
|
||||
elseif smsg == "on" then
|
||||
msg.command = "on"
|
||||
elseif smsg == "toggle" then
|
||||
msg.command = "toggle"
|
||||
elseif smsg:sub(1, 5) == "range" then
|
||||
msg.command = "range"
|
||||
msg.value = tonumber(smsg:sub(7))
|
||||
elseif smsg:sub(1, 5) == "shape" then
|
||||
msg.command = "shape"
|
||||
msg.value = smsg:sub(7):lower()
|
||||
msg.value = tonumber(msg.value) or msg.value
|
||||
end
|
||||
elseif msgt ~= "table" then
|
||||
return
|
||||
end
|
||||
if msg.command == "get" then
|
||||
digilines.receptor_send(pos, digilines.rules.default, channel, {
|
||||
enabled = meta:get_int("enabled"),
|
||||
range = meta:get_int("range"),
|
||||
shape = meta:get_int("shape")
|
||||
})
|
||||
return
|
||||
elseif msg.command == "off" then
|
||||
meta:set_int("enabled", 0)
|
||||
elseif msg.command == "on" then
|
||||
meta:set_int("enabled", 1)
|
||||
elseif msg.command == "toggle" then
|
||||
local onn = meta:get_int("enabled")
|
||||
onn = 1-onn -- Mirror onn with pivot 0.5, so switch between 1 and 0.
|
||||
meta:set_int("enabled", onn)
|
||||
elseif msg.command == "range" then
|
||||
if type(msg.value) ~= "number" then
|
||||
return
|
||||
end
|
||||
msg.value = math.max(msg.value, 5)
|
||||
msg.value = math.min(msg.value, 20)
|
||||
update_forcefield(pos, meta, false)
|
||||
meta:set_int("range", msg.value)
|
||||
elseif msg.command == "shape" then
|
||||
local valuet = type(msg.value)
|
||||
if valuet == "string" then
|
||||
if msg.value == "sphere" then
|
||||
msg.value = 0
|
||||
elseif msg.value == "cube" then
|
||||
msg.value = 1
|
||||
end
|
||||
elseif valuet ~= "number" then
|
||||
return
|
||||
end
|
||||
if not msg.value then
|
||||
return
|
||||
end
|
||||
update_forcefield(pos, meta, false)
|
||||
meta:set_int("shape", msg.value)
|
||||
else
|
||||
return
|
||||
end
|
||||
set_forcefield_formspec(meta)
|
||||
end
|
||||
},
|
||||
}
|
||||
|
||||
local function run(pos, node)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local eu_input = meta:get_int("HV_EU_input")
|
||||
local enabled = meta:get_int("enabled") ~= 0 and
|
||||
(meta:get_int("mesecon_mode") == 0 or meta:get_int("mesecon_effect") ~= 0)
|
||||
local machine_name = S("%s Forcefield Emitter"):format("HV")
|
||||
|
||||
local range = meta:get_int("range")
|
||||
local power_requirement
|
||||
if meta:get_int("shape") == 0 then
|
||||
power_requirement = math.floor(4 * math.pi * range * range)
|
||||
else
|
||||
power_requirement = 24 * range * range
|
||||
end
|
||||
power_requirement = power_requirement * forcefield_power_drain
|
||||
|
||||
if not enabled then
|
||||
if node.name == "technic:forcefield_emitter_on" then
|
||||
update_forcefield(pos, meta, false)
|
||||
technic.swap_node(pos, "technic:forcefield_emitter_off")
|
||||
meta:set_string("infotext", S("%s Disabled"):format(machine_name))
|
||||
end
|
||||
meta:set_int("HV_EU_demand", 0)
|
||||
return
|
||||
end
|
||||
meta:set_int("HV_EU_demand", power_requirement)
|
||||
if eu_input < power_requirement then
|
||||
meta:set_string("infotext", S("%s Unpowered"):format(machine_name))
|
||||
if node.name == "technic:forcefield_emitter_on" then
|
||||
update_forcefield(pos, meta, false)
|
||||
technic.swap_node(pos, "technic:forcefield_emitter_off")
|
||||
end
|
||||
elseif eu_input >= power_requirement then
|
||||
if node.name == "technic:forcefield_emitter_off" then
|
||||
technic.swap_node(pos, "technic:forcefield_emitter_on")
|
||||
meta:set_string("infotext", S("%s Active"):format(machine_name))
|
||||
end
|
||||
update_forcefield(pos, meta, true)
|
||||
end
|
||||
end
|
||||
|
||||
minetest.register_node("technic:forcefield_emitter_off", {
|
||||
description = S("%s Forcefield Emitter"):format("HV"),
|
||||
tiles = {
|
||||
"technic_forcefield_emitter_off.png",
|
||||
"technic_machine_bottom.png"..cable_entry,
|
||||
"technic_forcefield_emitter_off.png",
|
||||
"technic_forcefield_emitter_off.png",
|
||||
"technic_forcefield_emitter_off.png",
|
||||
"technic_forcefield_emitter_off.png"
|
||||
},
|
||||
groups = {cracky = 1, technic_machine = 1, technic_hv = 1},
|
||||
on_receive_fields = forcefield_receive_fields,
|
||||
on_construct = function(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_int("HV_EU_input", 0)
|
||||
meta:set_int("HV_EU_demand", 0)
|
||||
meta:set_int("range", 10)
|
||||
meta:set_int("enabled", 0)
|
||||
meta:set_int("mesecon_mode", 0)
|
||||
meta:set_int("mesecon_effect", 0)
|
||||
if digilines_path then
|
||||
meta:set_string("channel", "forcefield"..minetest.pos_to_string(pos))
|
||||
end
|
||||
meta:set_string("infotext", S("%s Forcefield Emitter"):format("HV"))
|
||||
set_forcefield_formspec(meta)
|
||||
end,
|
||||
mesecons = mesecons,
|
||||
digiline = digiline_def,
|
||||
technic_run = run,
|
||||
})
|
||||
|
||||
minetest.register_node("technic:forcefield_emitter_on", {
|
||||
description = S("%s Forcefield Emitter"):format("HV"),
|
||||
tiles = {
|
||||
"technic_forcefield_emitter_on.png",
|
||||
"technic_machine_bottom.png"..cable_entry,
|
||||
"technic_forcefield_emitter_on.png",
|
||||
"technic_forcefield_emitter_on.png",
|
||||
"technic_forcefield_emitter_on.png",
|
||||
"technic_forcefield_emitter_on.png"
|
||||
},
|
||||
groups = {cracky = 1, technic_machine = 1, technic_hv = 1,
|
||||
not_in_creative_inventory=1},
|
||||
drop = "technic:forcefield_emitter_off",
|
||||
on_receive_fields = forcefield_receive_fields,
|
||||
on_destruct = function(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
update_forcefield(pos, meta, false)
|
||||
end,
|
||||
mesecons = mesecons,
|
||||
digiline = digiline_def,
|
||||
technic_run = run,
|
||||
technic_on_disable = function (pos, node)
|
||||
local meta = minetest.get_meta(pos)
|
||||
update_forcefield(pos, meta, false)
|
||||
technic.swap_node(pos, "technic:forcefield_emitter_off")
|
||||
end,
|
||||
on_blast = function(pos, intensity)
|
||||
minetest.dig_node(pos)
|
||||
return {"technic:forcefield_emitter_off"}
|
||||
end,
|
||||
})
|
||||
|
||||
minetest.register_node("technic:forcefield", {
|
||||
description = S("%s Forcefield"):format("HV"),
|
||||
sunlight_propagates = true,
|
||||
drawtype = "glasslike",
|
||||
groups = {not_in_creative_inventory=1},
|
||||
paramtype = "light",
|
||||
light_source = default.LIGHT_MAX,
|
||||
diggable = false,
|
||||
drop = '',
|
||||
tiles = {{
|
||||
name = "technic_forcefield_animated.png",
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
aspect_w = 16,
|
||||
aspect_h = 16,
|
||||
length = 1.0,
|
||||
},
|
||||
}},
|
||||
on_blast = function(pos, intensity)
|
||||
end,
|
||||
})
|
||||
|
||||
|
||||
if minetest.get_modpath("mesecons_mvps") then
|
||||
mesecon.register_mvps_stopper("technic:forcefield")
|
||||
end
|
||||
|
||||
technic.register_machine("HV", "technic:forcefield_emitter_on", technic.receiver)
|
||||
technic.register_machine("HV", "technic:forcefield_emitter_off", technic.receiver)
|
||||
|
|
@ -1,13 +0,0 @@
|
|||
minetest.register_alias("hv_generator", "technic:hv_generator")
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'technic:hv_generator',
|
||||
recipe = {
|
||||
{'technic:carbon_plate', 'technic:mv_generator', 'technic:composite_plate'},
|
||||
{'pipeworks:tube_1', 'technic:hv_transformer', 'pipeworks:tube_1'},
|
||||
{'technic:stainless_steel_ingot', 'technic:hv_cable', 'technic:stainless_steel_ingot'},
|
||||
}
|
||||
})
|
||||
|
||||
technic.register_generator({tier="HV", tube=1, supply=1200})
|
||||
|
|
@ -1,18 +0,0 @@
|
|||
|
||||
technic.register_tier("HV", "High Voltage")
|
||||
|
||||
local path = technic.modpath.."/machines/HV"
|
||||
|
||||
-- Wiring stuff
|
||||
dofile(path.."/cables.lua")
|
||||
dofile(path.."/battery_box.lua")
|
||||
|
||||
-- Generators
|
||||
dofile(path.."/solar_array.lua")
|
||||
dofile(path.."/nuclear_reactor.lua")
|
||||
dofile(path.."/generator.lua")
|
||||
|
||||
-- Machines
|
||||
dofile(path.."/quarry.lua")
|
||||
dofile(path.."/forcefield.lua")
|
||||
|
|
@ -1,484 +0,0 @@
|
|||
--[[
|
||||
The enriched uranium rod driven EU generator.
|
||||
A very large and advanced machine providing vast amounts of power.
|
||||
Very efficient but also expensive to run as it needs uranium.
|
||||
Provides 10000 HV EUs for one week (only counted when loaded).
|
||||
|
||||
The nuclear reactor core requires a casing of water and a protective
|
||||
shield to work. This is checked now and then and if the casing is not
|
||||
intact the reactor will melt down!
|
||||
--]]
|
||||
|
||||
local burn_ticks = 7 * 24 * 60 * 60 -- Seconds
|
||||
local power_supply = 100000 -- EUs
|
||||
local fuel_type = "technic:uranium_fuel" -- The reactor burns this
|
||||
local digiline_meltdown = technic.config:get_bool("enable_nuclear_reactor_digiline_selfdestruct")
|
||||
local digiline_remote_path = minetest.get_modpath("digiline_remote")
|
||||
|
||||
local S = technic.getter
|
||||
|
||||
local reactor_desc = S("@1 Nuclear Reactor Core", S("HV"))
|
||||
local cable_entry = "^technic_cable_connection_overlay.png"
|
||||
|
||||
-- FIXME: Recipe should make more sense like a rod recepticle, steam chamber, HV generator?
|
||||
minetest.register_craft({
|
||||
output = 'technic:hv_nuclear_reactor_core',
|
||||
recipe = {
|
||||
{'technic:carbon_plate', 'default:obsidian_glass', 'technic:carbon_plate'},
|
||||
{'technic:composite_plate', 'technic:machine_casing', 'technic:composite_plate'},
|
||||
{'technic:stainless_steel_ingot', 'technic:hv_cable', 'technic:stainless_steel_ingot'},
|
||||
}
|
||||
})
|
||||
|
||||
local function make_reactor_formspec(meta)
|
||||
local f = "size[8,9]"..
|
||||
"label[0,0;"..S("Nuclear Reactor Rod Compartment").."]"..
|
||||
"list[current_name;src;2,1;3,2;]"..
|
||||
"list[current_player;main;0,5;8,4;]"..
|
||||
"listring[]"..
|
||||
"button[5.5,1.5;2,1;start;Start]"..
|
||||
"checkbox[5.5,2.5;autostart;automatic Start;"..meta:get_string("autostart").."]"
|
||||
if not digiline_remote_path then
|
||||
return f
|
||||
end
|
||||
local digiline_enabled = meta:get_string("enable_digiline")
|
||||
f = f.."checkbox[0.5,2.8;enable_digiline;Enable Digiline;"..digiline_enabled.."]"
|
||||
if digiline_enabled ~= "true" then
|
||||
return f
|
||||
end
|
||||
return f..
|
||||
"button_exit[4.6,3.69;2,1;save;Save]"..
|
||||
"field[1,4;4,1;remote_channel;Digiline Remote Channel;${remote_channel}]"
|
||||
end
|
||||
|
||||
local SS_OFF = 0
|
||||
local SS_DANGER = 1
|
||||
local SS_CLEAR = 2
|
||||
|
||||
local reactor_siren = {}
|
||||
local function siren_set_state(pos, state)
|
||||
local hpos = minetest.hash_node_position(pos)
|
||||
local siren = reactor_siren[hpos]
|
||||
if not siren then
|
||||
if state == SS_OFF then return end
|
||||
siren = {state=SS_OFF}
|
||||
reactor_siren[hpos] = siren
|
||||
end
|
||||
if state == SS_DANGER and siren.state ~= SS_DANGER then
|
||||
if siren.handle then minetest.sound_stop(siren.handle) end
|
||||
siren.handle = minetest.sound_play("technic_hv_nuclear_reactor_siren_danger_loop",
|
||||
{pos=pos, gain=1.5, loop=true, max_hear_distance=48})
|
||||
siren.state = SS_DANGER
|
||||
elseif state == SS_CLEAR then
|
||||
if siren.handle then minetest.sound_stop(siren.handle) end
|
||||
local clear_handle = minetest.sound_play("technic_hv_nuclear_reactor_siren_clear",
|
||||
{pos=pos, gain=1.5, loop=false, max_hear_distance=48})
|
||||
siren.handle = clear_handle
|
||||
siren.state = SS_CLEAR
|
||||
minetest.after(10, function()
|
||||
if siren.handle ~= clear_handle then return end
|
||||
minetest.sound_stop(clear_handle)
|
||||
if reactor_siren[hpos] == siren then
|
||||
reactor_siren[hpos] = nil
|
||||
end
|
||||
end)
|
||||
elseif state == SS_OFF and siren.state ~= SS_OFF then
|
||||
if siren.handle then minetest.sound_stop(siren.handle) end
|
||||
reactor_siren[hpos] = nil
|
||||
end
|
||||
end
|
||||
|
||||
local function siren_danger(pos, meta)
|
||||
meta:set_int("siren", 1)
|
||||
siren_set_state(pos, SS_DANGER)
|
||||
end
|
||||
|
||||
local function siren_clear(pos, meta)
|
||||
if meta:get_int("siren") ~= 0 then
|
||||
siren_set_state(pos, SS_CLEAR)
|
||||
meta:set_int("siren", 0)
|
||||
end
|
||||
end
|
||||
|
||||
--[[
|
||||
The standard reactor structure consists of a 9x9x9 cube. A cross
|
||||
section through the middle:
|
||||
|
||||
CCCC CCCC
|
||||
CBBB BBBC
|
||||
CBLL LLBC
|
||||
CBLWWWLBC
|
||||
CBLW#WLBC
|
||||
CBLW|WLBC
|
||||
CBLL|LLBC
|
||||
CBBB|BBBC
|
||||
CCCC|CCCC
|
||||
C = Concrete, B = Blast-resistant concrete, L = Lead,
|
||||
W = water node, # = reactor core, | = HV cable
|
||||
|
||||
The man-hole is optional (but necessary for refueling).
|
||||
|
||||
For the reactor to operate and not melt down, it insists on the inner
|
||||
7x7x7 portion (from the core out to the blast-resistant concrete)
|
||||
being intact. Intactness only depends on the number of nodes of the
|
||||
right type in each layer. The water layer must have water in all but
|
||||
at most one node; the steel and blast-resistant concrete layers must
|
||||
have the right material in all but at most two nodes. The permitted
|
||||
gaps are meant for the cable and man-hole, but can actually be anywhere
|
||||
and contain anything. For the reactor to be useful, a cable must
|
||||
connect to the core, but it can go in any direction.
|
||||
|
||||
The outer concrete layer of the standard structure is not required
|
||||
for the reactor to operate. It is noted here because it used to
|
||||
be mandatory, and for historical reasons (that it predates the
|
||||
implementation of radiation) it needs to continue being adequate
|
||||
shielding of legacy reactors. If it ever ceases to be adequate
|
||||
shielding for new reactors, legacy ones should be grandfathered.
|
||||
|
||||
For legacy reasons, if the reactor has a stainless steel layer instead
|
||||
of a lead layer it will be converted to a lead layer.
|
||||
--]]
|
||||
local function reactor_structure_badness(pos)
|
||||
local vm = VoxelManip()
|
||||
local pos1 = vector.subtract(pos, 3)
|
||||
local pos2 = vector.add(pos, 3)
|
||||
local MinEdge, MaxEdge = vm:read_from_map(pos1, pos2)
|
||||
local data = vm:get_data()
|
||||
local area = VoxelArea:new({MinEdge=MinEdge, MaxEdge=MaxEdge})
|
||||
|
||||
local c_blast_concrete = minetest.get_content_id("technic:blast_resistant_concrete")
|
||||
local c_lead = minetest.get_content_id("technic:lead_block")
|
||||
local c_steel = minetest.get_content_id("technic:stainless_steel_block")
|
||||
local c_water_source = minetest.get_content_id("default:water_source")
|
||||
local c_water_flowing = minetest.get_content_id("default:water_flowing")
|
||||
|
||||
local blast_layer, steel_layer, lead_layer, water_layer = 0, 0, 0, 0
|
||||
|
||||
for z = pos1.z, pos2.z do
|
||||
for y = pos1.y, pos2.y do
|
||||
for x = pos1.x, pos2.x do
|
||||
local cid = data[area:index(x, y, z)]
|
||||
if x == pos1.x or x == pos2.x or
|
||||
y == pos1.y or y == pos2.y or
|
||||
z == pos1.z or z == pos2.z then
|
||||
if cid == c_blast_concrete then
|
||||
blast_layer = blast_layer + 1
|
||||
end
|
||||
elseif x == pos1.x+1 or x == pos2.x-1 or
|
||||
y == pos1.y+1 or y == pos2.y-1 or
|
||||
z == pos1.z+1 or z == pos2.z-1 then
|
||||
if cid == c_lead then
|
||||
lead_layer = lead_layer + 1
|
||||
elseif cid == c_steel then
|
||||
steel_layer = steel_layer + 1
|
||||
end
|
||||
elseif x == pos1.x+2 or x == pos2.x-2 or
|
||||
y == pos1.y+2 or y == pos2.y-2 or
|
||||
z == pos1.z+2 or z == pos2.z-2 then
|
||||
if cid == c_water_source or cid == c_water_flowing then
|
||||
water_layer = water_layer + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if steel_layer >= 96 then
|
||||
for z = pos1.z+1, pos2.z-1 do
|
||||
for y = pos1.y+1, pos2.y-1 do
|
||||
for x = pos1.x+1, pos2.x-1 do
|
||||
local vi = area:index(x, y, z)
|
||||
if x == pos1.x+1 or x == pos2.x-1 or
|
||||
y == pos1.y+1 or y == pos2.y-1 or
|
||||
z == pos1.z+1 or z == pos2.z-1 then
|
||||
if data[vi] == c_steel then
|
||||
data[vi] = c_lead
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
vm:set_data(data)
|
||||
vm:write_to_map()
|
||||
lead_layer = steel_layer
|
||||
end
|
||||
|
||||
if water_layer > 25 then water_layer = 25 end
|
||||
if lead_layer > 96 then lead_layer = 96 end
|
||||
if blast_layer > 216 then blast_layer = 216 end
|
||||
return (25 - water_layer) + (96 - lead_layer) + (216 - blast_layer)
|
||||
end
|
||||
|
||||
|
||||
local function melt_down_reactor(pos)
|
||||
minetest.log("action", "A reactor melted down at "..minetest.pos_to_string(pos))
|
||||
minetest.set_node(pos, {name = "technic:corium_source"})
|
||||
end
|
||||
|
||||
|
||||
local function start_reactor(pos, meta)
|
||||
if minetest.get_node(pos).name ~= "technic:hv_nuclear_reactor_core" then
|
||||
return false
|
||||
end
|
||||
local inv = meta:get_inventory()
|
||||
if inv:is_empty("src") then
|
||||
return false
|
||||
end
|
||||
local src_list = inv:get_list("src")
|
||||
local correct_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
|
||||
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
|
||||
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)
|
||||
for idx, src_stack in pairs(src_list) do
|
||||
src_stack:take_item()
|
||||
inv:set_stack("src", idx, src_stack)
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
|
||||
minetest.register_abm({
|
||||
label = "Machines: reactor melt-down check",
|
||||
nodenames = {"technic:hv_nuclear_reactor_core_active"},
|
||||
interval = 4,
|
||||
chance = 1,
|
||||
action = function (pos, node)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local badness = reactor_structure_badness(pos)
|
||||
local accum_badness = meta:get_int("structure_accumulated_badness")
|
||||
if badness == 0 then
|
||||
if accum_badness ~= 0 then
|
||||
meta:set_int("structure_accumulated_badness", math.max(accum_badness - 4, 0))
|
||||
siren_clear(pos, meta)
|
||||
end
|
||||
else
|
||||
siren_danger(pos, meta)
|
||||
accum_badness = accum_badness + badness
|
||||
if accum_badness >= 25 then
|
||||
melt_down_reactor(pos)
|
||||
else
|
||||
meta:set_int("structure_accumulated_badness", accum_badness)
|
||||
end
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
local function run(pos, node)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local burn_time = meta:get_int("burn_time") or 0
|
||||
if burn_time >= burn_ticks or burn_time == 0 then
|
||||
if digiline_remote_path and meta:get_int("HV_EU_supply") == power_supply then
|
||||
digiline_remote.send_to_node(pos, meta:get_string("remote_channel"),
|
||||
"fuel used", 6, true)
|
||||
end
|
||||
if meta:get_string("autostart") == "true" then
|
||||
if start_reactor(pos, meta) then
|
||||
return
|
||||
end
|
||||
end
|
||||
meta:set_int("HV_EU_supply", 0)
|
||||
meta:set_int("burn_time", 0)
|
||||
meta:set_string("infotext", S("%s Idle"):format(reactor_desc))
|
||||
technic.swap_node(pos, "technic:hv_nuclear_reactor_core")
|
||||
meta:set_int("structure_accumulated_badness", 0)
|
||||
siren_clear(pos, meta)
|
||||
elseif burn_time > 0 then
|
||||
burn_time = burn_time + 1
|
||||
meta:set_int("burn_time", burn_time)
|
||||
local percent = math.floor(burn_time / burn_ticks * 100)
|
||||
meta:set_string("infotext", reactor_desc.." ("..percent.."%)")
|
||||
meta:set_int("HV_EU_supply", power_supply)
|
||||
end
|
||||
end
|
||||
|
||||
local nuclear_reactor_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 update_formspec = false
|
||||
if fields.remote_channel then
|
||||
meta:set_string("remote_channel", fields.remote_channel)
|
||||
end
|
||||
if fields.start then
|
||||
local b = start_reactor(pos, meta)
|
||||
if b then
|
||||
minetest.chat_send_player(player_name, "Start successful")
|
||||
else
|
||||
minetest.chat_send_player(player_name, "Error")
|
||||
end
|
||||
end
|
||||
if fields.autostart then
|
||||
meta:set_string("autostart", fields.autostart)
|
||||
update_formspec = true
|
||||
end
|
||||
if fields.enable_digiline then
|
||||
meta:set_string("enable_digiline", fields.enable_digiline)
|
||||
update_formspec = true
|
||||
end
|
||||
if update_formspec then
|
||||
meta:set_string("formspec", make_reactor_formspec(meta))
|
||||
end
|
||||
end
|
||||
|
||||
local digiline_remote_def = function(pos, channel, msg)
|
||||
local meta = minetest.get_meta(pos)
|
||||
if meta:get_string("enable_digiline") ~= "true" or
|
||||
channel ~= meta:get_string("remote_channel") then
|
||||
return
|
||||
end
|
||||
-- Convert string messages to tables:
|
||||
local msgt = type(msg)
|
||||
if msgt == "string" then
|
||||
local smsg = msg:lower()
|
||||
msg = {}
|
||||
if smsg == "get" then
|
||||
msg.command = "get"
|
||||
elseif smsg:sub(1, 13) == "self_destruct" then
|
||||
msg.command = "self_destruct"
|
||||
msg.timer = tonumber(smsg:sub(15)) or 0
|
||||
elseif smsg == "start" then
|
||||
msg.command = "start"
|
||||
end
|
||||
elseif msgt ~= "table" then
|
||||
return
|
||||
end
|
||||
|
||||
if msg.command == "get" then
|
||||
local inv = meta:get_inventory()
|
||||
local invtable = {}
|
||||
for i = 1, 6 do
|
||||
local stack = inv:get_stack("src", i)
|
||||
if stack:is_empty() then
|
||||
invtable[i] = 0
|
||||
elseif stack:get_name() == fuel_type then
|
||||
invtable[i] = stack:get_count()
|
||||
else
|
||||
invtable[i] = -stack:get_count()
|
||||
end
|
||||
end
|
||||
digiline_remote.send_to_node(pos, channel, {
|
||||
burn_time = meta:get_int("burn_time"),
|
||||
enabled = meta:get_int("HV_EU_supply") == power_supply,
|
||||
siren = meta:get_int("siren") == 1,
|
||||
structure_accumulated_badness = meta:get_int("structure_accumulated_badness"),
|
||||
rods = invtable
|
||||
}, 6, true)
|
||||
elseif digiline_meltdown and msg.command == "self_destruct" and
|
||||
minetest.get_node(pos).name == "technic:hv_nuclear_reactor_core_active" then
|
||||
if msg.timer ~= 0 and type(msg.timer) == "number" then
|
||||
siren_danger(pos, meta)
|
||||
minetest.after(msg.timer, melt_down_reactor, pos)
|
||||
else
|
||||
melt_down_reactor(pos)
|
||||
end
|
||||
elseif msg.command == "start" then
|
||||
local b = start_reactor(pos, meta)
|
||||
if b then
|
||||
digiline_remote.send_to_node(pos, channel, "Start successful", 6, true)
|
||||
else
|
||||
digiline_remote.send_to_node(pos, channel, "Error", 6, true)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
minetest.register_node("technic:hv_nuclear_reactor_core", {
|
||||
description = reactor_desc,
|
||||
tiles = {
|
||||
"technic_hv_nuclear_reactor_core.png",
|
||||
"technic_hv_nuclear_reactor_core.png"..cable_entry
|
||||
},
|
||||
drawtype = "mesh",
|
||||
mesh = "technic_reactor.obj",
|
||||
groups = {cracky = 1, technic_machine = 1, technic_hv = 1, digiline_remote_receive = 1},
|
||||
legacy_facedir_simple = true,
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
stack_max = 1,
|
||||
on_receive_fields = nuclear_reactor_receive_fields,
|
||||
on_construct = function(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("infotext", reactor_desc)
|
||||
meta:set_string("formspec", make_reactor_formspec(meta))
|
||||
if digiline_remote_path then
|
||||
meta:set_string("remote_channel",
|
||||
"nucelear_reactor"..minetest.pos_to_string(pos))
|
||||
end
|
||||
local inv = meta:get_inventory()
|
||||
inv:set_size("src", 6)
|
||||
end,
|
||||
_on_digiline_remote_receive = digiline_remote_def,
|
||||
can_dig = technic.machine_can_dig,
|
||||
on_destruct = function(pos) siren_set_state(pos, SS_OFF) end,
|
||||
allow_metadata_inventory_put = technic.machine_inventory_put,
|
||||
allow_metadata_inventory_take = technic.machine_inventory_take,
|
||||
allow_metadata_inventory_move = technic.machine_inventory_move,
|
||||
technic_run = run,
|
||||
})
|
||||
|
||||
minetest.register_node("technic:hv_nuclear_reactor_core_active", {
|
||||
tiles = {
|
||||
"technic_hv_nuclear_reactor_core.png",
|
||||
"technic_hv_nuclear_reactor_core.png"..cable_entry
|
||||
},
|
||||
drawtype = "mesh",
|
||||
mesh = "technic_reactor.obj",
|
||||
groups = {cracky = 1, technic_machine = 1, technic_hv = 1, radioactive = 4,
|
||||
not_in_creative_inventory = 1, digiline_remote_receive = 1},
|
||||
legacy_facedir_simple = true,
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
drop = "technic:hv_nuclear_reactor_core",
|
||||
light_source = 14,
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
on_receive_fields = nuclear_reactor_receive_fields,
|
||||
_on_digiline_remote_receive = digiline_remote_def,
|
||||
can_dig = technic.machine_can_dig,
|
||||
after_dig_node = melt_down_reactor,
|
||||
on_destruct = function(pos) siren_set_state(pos, SS_OFF) end,
|
||||
allow_metadata_inventory_put = technic.machine_inventory_put,
|
||||
allow_metadata_inventory_take = technic.machine_inventory_take,
|
||||
allow_metadata_inventory_move = technic.machine_inventory_move,
|
||||
technic_run = run,
|
||||
technic_on_disable = function(pos, node)
|
||||
local timer = minetest.get_node_timer(pos)
|
||||
timer:start(1)
|
||||
end,
|
||||
on_timer = function(pos, node)
|
||||
local meta = minetest.get_meta(pos)
|
||||
|
||||
-- Connected back?
|
||||
if meta:get_int("HV_EU_timeout") > 0 then return false end
|
||||
|
||||
local burn_time = meta:get_int("burn_time") or 0
|
||||
|
||||
if burn_time >= burn_ticks or burn_time == 0 then
|
||||
meta:set_int("HV_EU_supply", 0)
|
||||
meta:set_int("burn_time", 0)
|
||||
technic.swap_node(pos, "technic:hv_nuclear_reactor_core")
|
||||
meta:set_int("structure_accumulated_badness", 0)
|
||||
siren_clear(pos, meta)
|
||||
return false
|
||||
end
|
||||
|
||||
meta:set_int("burn_time", burn_time + 1)
|
||||
return true
|
||||
end,
|
||||
})
|
||||
|
||||
technic.register_machine("HV", "technic:hv_nuclear_reactor_core", technic.producer)
|
||||
technic.register_machine("HV", "technic:hv_nuclear_reactor_core_active", technic.producer)
|
||||
|
|
@ -1,274 +0,0 @@
|
|||
|
||||
local S = technic.getter
|
||||
|
||||
local tube_entry = "^pipeworks_tube_connection_metallic.png"
|
||||
local cable_entry = "^technic_cable_connection_overlay.png"
|
||||
|
||||
minetest.register_craft({
|
||||
recipe = {
|
||||
{"technic:carbon_plate", "pipeworks:filter", "technic:composite_plate"},
|
||||
{"basic_materials:motor", "technic:machine_casing", "technic:diamond_drill_head"},
|
||||
{"technic:carbon_steel_block", "technic:hv_cable", "technic:carbon_steel_block"}},
|
||||
output = "technic:quarry",
|
||||
})
|
||||
|
||||
local quarry_dig_above_nodes = 3 -- How far above the quarry we will dig nodes
|
||||
local quarry_max_depth = 100
|
||||
local quarry_demand = 10000
|
||||
local quarry_eject_dir = vector.new(0, 1, 0)
|
||||
|
||||
local function set_quarry_formspec(meta)
|
||||
local radius = meta:get_int("size")
|
||||
local formspec = "size[6,4.3]"..
|
||||
"list[context;cache;0,1;4,3;]"..
|
||||
"item_image[4.8,0;1,1;technic:quarry]"..
|
||||
"label[0,0.2;"..S("%s Quarry"):format("HV").."]"..
|
||||
"field[4.3,3.5;2,1;size;"..S("Radius:")..";"..radius.."]"
|
||||
if meta:get_int("enabled") == 0 then
|
||||
formspec = formspec.."button[4,1;2,1;enable;"..S("Disabled").."]"
|
||||
else
|
||||
formspec = formspec.."button[4,1;2,1;disable;"..S("Enabled").."]"
|
||||
end
|
||||
local diameter = radius*2 + 1
|
||||
local nd = meta:get_int("dug")
|
||||
local rel_y = quarry_dig_above_nodes - math.floor(nd / (diameter*diameter))
|
||||
formspec = formspec.."label[0,4;"..minetest.formspec_escape(
|
||||
nd == 0 and S("Digging not started") or
|
||||
(rel_y < -quarry_max_depth and S("Digging finished") or
|
||||
(meta:get_int("purge_on") == 1 and S("Purging cache") or
|
||||
S("Digging %d m "..(rel_y > 0 and "above" or "below").." machine")
|
||||
:format(math.abs(rel_y))))
|
||||
).."]"
|
||||
formspec = formspec.."button[4,2;2,1;restart;"..S("Restart").."]"
|
||||
meta:set_string("formspec", formspec)
|
||||
end
|
||||
|
||||
local function set_quarry_demand(meta)
|
||||
local radius = meta:get_int("size")
|
||||
local diameter = radius*2 + 1
|
||||
local machine_name = S("%s Quarry"):format("HV")
|
||||
if meta:get_int("enabled") == 0 or meta:get_int("purge_on") == 1 then
|
||||
meta:set_string("infotext", S(meta:get_int("purge_on") == 1 and "%s purging cache" or "%s Disabled"):format(machine_name))
|
||||
meta:set_int("HV_EU_demand", 0)
|
||||
elseif meta:get_int("dug") == diameter*diameter * (quarry_dig_above_nodes+1+quarry_max_depth) then
|
||||
meta:set_string("infotext", S("%s Finished"):format(machine_name))
|
||||
meta:set_int("HV_EU_demand", 0)
|
||||
else
|
||||
meta:set_string("infotext", S(meta:get_int("HV_EU_input") >= quarry_demand and "%s Active" or "%s Unpowered"):format(machine_name))
|
||||
meta:set_int("HV_EU_demand", quarry_demand)
|
||||
end
|
||||
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)
|
||||
if size >= 2 and size <= 8 and size ~= meta:get_int("size") then
|
||||
meta:set_int("size", size)
|
||||
meta:set_int("dug", 0)
|
||||
end
|
||||
end
|
||||
if fields.enable then meta:set_int("enabled", 1) end
|
||||
if fields.disable then meta:set_int("enabled", 0) end
|
||||
if fields.restart then
|
||||
meta:set_int("dug", 0)
|
||||
meta:set_int("purge_on", 1)
|
||||
end
|
||||
set_quarry_formspec(meta)
|
||||
set_quarry_demand(meta)
|
||||
end
|
||||
|
||||
local function quarry_handle_purge(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
local i = 0
|
||||
for _,stack in ipairs(inv:get_list("cache")) do
|
||||
i = i + 1
|
||||
if stack then
|
||||
local item = stack:to_table()
|
||||
if item then
|
||||
technic.tube_inject_item(pos, pos, quarry_eject_dir, item)
|
||||
stack:clear()
|
||||
inv:set_stack("cache", i, stack)
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
if inv:is_empty("cache") then
|
||||
meta:set_int("purge_on", 0)
|
||||
end
|
||||
end
|
||||
|
||||
local function quarry_run(pos, node)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
-- initialize cache for the case we load an older world
|
||||
inv:set_size("cache", 12)
|
||||
-- toss a coin whether we do an automatic purge. Chance 1:200
|
||||
local purge_rand = math.random()
|
||||
if purge_rand <= 0.005 then
|
||||
meta:set_int("purge_on", 1)
|
||||
end
|
||||
|
||||
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
|
||||
vector.new(1,0,0)))
|
||||
local radius = meta:get_int("size")
|
||||
local diameter = radius*2 + 1
|
||||
local startpos = vector.add(vector.add(vector.add(pos,
|
||||
vector.new(0, quarry_dig_above_nodes, 0)),
|
||||
pdir),
|
||||
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
|
||||
local ry = math.floor(nd / (diameter*diameter))
|
||||
local ndl = nd % (diameter*diameter)
|
||||
if ry % 2 == 1 then
|
||||
ndl = diameter*diameter - 1 - ndl
|
||||
end
|
||||
local rq = math.floor(ndl / diameter)
|
||||
local rp = ndl % diameter
|
||||
if rq % 2 == 1 then rp = diameter - 1 - rp end
|
||||
local digpos = vector.add(vector.add(vector.add(startpos,
|
||||
vector.new(0, -ry, 0)),
|
||||
vector.multiply(pdir, rp)),
|
||||
vector.multiply(qdir, rq))
|
||||
local can_dig = true
|
||||
if can_dig and minetest.is_protected and minetest.is_protected(digpos, owner) then
|
||||
can_dig = false
|
||||
end
|
||||
local dignode
|
||||
if can_dig then
|
||||
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 = 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
|
||||
end
|
||||
|
||||
if can_dig then
|
||||
for ay = startpos.y, digpos.y+1, -1 do
|
||||
local checkpos = {x=digpos.x, y=ay, z=digpos.z}
|
||||
local checknode = technic.get_or_load_node(checkpos) or minetest.get_node(checkpos)
|
||||
if checknode.name ~= "air" then
|
||||
can_dig = false
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
nd = nd + 1
|
||||
if can_dig then
|
||||
minetest.remove_node(digpos)
|
||||
local drops = minetest.get_node_drops(dignode.name, "")
|
||||
for _, dropped_item in ipairs(drops) do
|
||||
local left = inv:add_item("cache", dropped_item)
|
||||
while not left:is_empty() do
|
||||
meta:set_int("purge_on", 1)
|
||||
quarry_handle_purge(pos)
|
||||
left = inv:add_item("cache", left)
|
||||
end
|
||||
end
|
||||
break
|
||||
end
|
||||
end
|
||||
if nd == diameter*diameter * (quarry_dig_above_nodes+1+quarry_max_depth) then
|
||||
-- if a quarry is finished, we enable purge mode
|
||||
meta:set_int("purge_on", 1)
|
||||
end
|
||||
meta:set_int("dug", nd)
|
||||
else
|
||||
-- if a quarry is disabled or has no power, we enable purge mode
|
||||
meta:set_int("purge_on", 1)
|
||||
end
|
||||
-- if something triggered a purge, we handle it
|
||||
if meta:get_int("purge_on") == 1 then
|
||||
quarry_handle_purge(pos)
|
||||
end
|
||||
set_quarry_formspec(meta)
|
||||
set_quarry_demand(meta)
|
||||
end
|
||||
|
||||
local function send_move_error(player)
|
||||
minetest.chat_send_player(player:get_player_name(),
|
||||
S("Manually taking/removing from cache by hand is not possible. "..
|
||||
"If you can't wait, restart or disable the quarry to start automatic purge."))
|
||||
return 0
|
||||
end
|
||||
|
||||
minetest.register_node("technic:quarry", {
|
||||
description = S("%s Quarry"):format("HV"),
|
||||
tiles = {
|
||||
"technic_carbon_steel_block.png"..tube_entry,
|
||||
"technic_carbon_steel_block.png"..cable_entry,
|
||||
"technic_carbon_steel_block.png"..cable_entry,
|
||||
"technic_carbon_steel_block.png"..cable_entry,
|
||||
"technic_carbon_steel_block.png^default_tool_mesepick.png",
|
||||
"technic_carbon_steel_block.png"..cable_entry
|
||||
},
|
||||
paramtype2 = "facedir",
|
||||
groups = {cracky=2, tubedevice=1, technic_machine=1, technic_hv=1},
|
||||
connect_sides = {"bottom", "front", "left", "right"},
|
||||
tube = {
|
||||
connect_sides = {top = 1},
|
||||
-- lower priority than other tubes, so that quarries will prefer any
|
||||
-- other tube to another quarry, which could lead to server freezes
|
||||
-- in certain quarry placements (2x2 for example would never eject)
|
||||
priority = 10,
|
||||
can_go = function(pos, node, velocity, stack)
|
||||
-- always eject the same, even if items came in another way
|
||||
-- this further mitigates loops and generally avoids random sideway movement
|
||||
-- that can be expected in certain quarry placements
|
||||
return { quarry_eject_dir }
|
||||
end
|
||||
},
|
||||
on_construct = function(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("infotext", S("%s Quarry"):format("HV"))
|
||||
meta:set_int("size", 4)
|
||||
set_quarry_formspec(meta)
|
||||
set_quarry_demand(meta)
|
||||
end,
|
||||
after_place_node = function(pos, placer, itemstack)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("owner", placer:get_player_name())
|
||||
pipeworks.scan_for_tube_objects(pos)
|
||||
end,
|
||||
can_dig = function(pos,player)
|
||||
local meta = minetest.get_meta(pos);
|
||||
local inv = meta:get_inventory()
|
||||
return inv:is_empty("cache")
|
||||
end,
|
||||
after_dig_node = pipeworks.scan_for_tube_objects,
|
||||
on_receive_fields = quarry_receive_fields,
|
||||
technic_run = quarry_run,
|
||||
allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
|
||||
return send_move_error(player)
|
||||
end,
|
||||
allow_metadata_inventory_put = function(pos, listname, index, stack, player)
|
||||
return send_move_error(player)
|
||||
end,
|
||||
allow_metadata_inventory_take = function(pos, listname, index, stack, player)
|
||||
return send_move_error(player)
|
||||
end
|
||||
})
|
||||
|
||||
technic.register_machine("HV", "technic:quarry", technic.receiver)
|
|
@ -1,14 +0,0 @@
|
|||
-- The high voltage solar array is an assembly of medium voltage arrays.
|
||||
-- Solar arrays are not able to store large amounts of energy.
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'technic:solar_array_hv 1',
|
||||
recipe = {
|
||||
{'technic:solar_array_mv', 'technic:solar_array_mv', 'technic:solar_array_mv'},
|
||||
{'technic:carbon_plate', 'technic:hv_transformer', 'technic:composite_plate'},
|
||||
{'', 'technic:hv_cable', ''},
|
||||
}
|
||||
})
|
||||
|
||||
technic.register_solar_array({tier="HV", power=100})
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
-- LV Alloy furnace
|
||||
|
||||
-- FIXME: kpoppel: I'd like to introduce an induction heating element here...
|
||||
minetest.register_craft({
|
||||
output = 'technic:lv_alloy_furnace',
|
||||
recipe = {
|
||||
{'default:brick', 'default:brick', 'default:brick'},
|
||||
{'default:brick', 'technic:machine_casing', 'default:brick'},
|
||||
{'default:brick', 'technic:lv_cable', 'default:brick'},
|
||||
}
|
||||
})
|
||||
|
||||
technic.register_alloy_furnace({tier = "LV", speed = 1, demand = {300}})
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
-- LV Battery box
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'technic:lv_battery_box0',
|
||||
recipe = {
|
||||
{'group:wood', 'group:wood', 'group:wood'},
|
||||
{'technic:battery', 'technic:machine_casing', 'technic:battery'},
|
||||
{'technic:battery', 'technic:lv_cable', 'technic:battery'},
|
||||
}
|
||||
})
|
||||
|
||||
technic.register_battery_box({
|
||||
tier = "LV",
|
||||
max_charge = 40000,
|
||||
charge_rate = 1000,
|
||||
discharge_rate = 4000,
|
||||
charge_step = 500,
|
||||
discharge_step = 800,
|
||||
})
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
|
||||
minetest.register_alias("lv_cable", "technic:lv_cable")
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'technic:lv_cable 6',
|
||||
recipe = {
|
||||
{'default:paper', 'default:paper', 'default:paper'},
|
||||
{'default:copper_ingot', 'default:copper_ingot', 'default:copper_ingot'},
|
||||
{'default:paper', 'default:paper', 'default:paper'},
|
||||
}
|
||||
})
|
||||
|
||||
technic.register_cable("LV", 2/16)
|
||||
|
|
@ -1,17 +0,0 @@
|
|||
|
||||
minetest.register_alias("compressor", "technic:lv_compressor")
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'technic:lv_compressor',
|
||||
recipe = {
|
||||
{'default:stone', 'basic_materials:motor', 'default:stone'},
|
||||
{'mesecons:piston', 'technic:machine_casing', 'mesecons:piston'},
|
||||
{'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})
|