v2.04: Switch to AGPL v3, adapt to minetest 5.3, add translation support, fix minor bugs

This commit is contained in:
Joachim Stolberg 2020-11-20 14:45:28 +01:00
parent 0acb2e82cd
commit 9192bcadc8
97 changed files with 1356 additions and 650 deletions

@ -1,28 +0,0 @@
The TechPack Modpack for Minetest is
Copyright (C) 2017-2018 Joachim Stolberg
License of source code
----------------------
This program is free software; you can redistribute and/or
modify it under the terms of the GNU Lesser General Public License version 2.1 or later
published by the Free Software Foundation.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the
Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
Boston, MA 02110-1301, USA.
License of media (textures, sounds and documentation)
-----------------------------------------------------
All textures, sounds and documentation files are licensed under the
Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0)
http://creativecommons.org/licenses/by-sa/3.0/

File diff suppressed because it is too large Load Diff

@ -1,4 +1,4 @@
# TechPack V2.03 # TechPack V2.04
TechPack, a Mining, Crafting, & Farming Modpack for Minetest. TechPack, a Mining, Crafting, & Farming Modpack for Minetest.
@ -115,7 +115,7 @@ The value 200 (default) results in a lifetime for standard machines of about 200
### License ### License
Copyright (C) 2017-2020 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
Code: Licensed under the GNU LGPL version 2.1 or later. See LICENSE.txt Code: Licensed under the GNU AGPL version 3 or later. See LICENSE.txt
Textures: CC BY-SA 3.0 Textures: CC BY-SA 3.0
@ -151,6 +151,7 @@ tubelib_addons1 optional: unified_inventory
- 2019-01-27 V2.01 * SaferLua Controller Terminal added - 2019-01-27 V2.01 * SaferLua Controller Terminal added
- 2019-01-28 V2.02 * Logic Not added, output reduction on Harvester, Fermenter, and Gravel Sieve - 2019-01-28 V2.02 * Logic Not added, output reduction on Harvester, Fermenter, and Gravel Sieve
- 2019-04-23 V2.03 * Piston/WorldEdit/replacer detection added, farming and grinder recipes added - 2019-04-23 V2.03 * Piston/WorldEdit/replacer detection added, farming and grinder recipes added
- 2020-11-20 V2.04 * Switch to AGPL v3, adapt to minetest 5.3, add translation support, fix minor bugs
## New in v2 (from players point of view) ## New in v2 (from players point of view)

@ -7,11 +7,11 @@
Derived from the work of celeron55, Perttu Ahola (furnace) Derived from the work of celeron55, Perttu Ahola (furnace)
Pipeworks support added by FiftySix Pipeworks support added by FiftySix
Copyright (C) 2017-2018 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
Copyright (C) 2011-2016 celeron55, Perttu Ahola <celeron55@gmail.com> Copyright (C) 2011-2016 celeron55, Perttu Ahola <celeron55@gmail.com>
Copyright (C) 2011-2016 Various Minetest developers and contributors Copyright (C) 2011-2016 Various Minetest developers and contributors
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
History: History:

450
i18n.py Normal file

@ -0,0 +1,450 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
# Script to generate the template file and update the translation files.
# Copy the script into the mod or modpack root folder and run it there.
#
# Copyright (C) 2019 Joachim Stolberg, 2020 FaceDeer, 2020 Louis Royer
# LGPLv2.1+
#
# See https://github.com/minetest-tools/update_translations for
# potential future updates to this script.
from __future__ import print_function
import os, fnmatch, re, shutil, errno
from sys import argv as _argv
from sys import stderr as _stderr
# Running params
params = {"recursive": False,
"help": False,
"mods": False,
"verbose": False,
"folders": [],
"no-old-file": False
}
# Available CLI options
options = {"recursive": ['--recursive', '-r'],
"help": ['--help', '-h'],
"mods": ['--installed-mods'],
"verbose": ['--verbose', '-v'],
"no-old-file": ['--no-old-file']
}
# Strings longer than this will have extra space added between
# them in the translation files to make it easier to distinguish their
# beginnings and endings at a glance
doublespace_threshold = 60
def set_params_folders(tab: list):
'''Initialize params["folders"] from CLI arguments.'''
# Discarding argument 0 (tool name)
for param in tab[1:]:
stop_param = False
for option in options:
if param in options[option]:
stop_param = True
break
if not stop_param:
params["folders"].append(os.path.abspath(param))
def set_params(tab: list):
'''Initialize params from CLI arguments.'''
for option in options:
for option_name in options[option]:
if option_name in tab:
params[option] = True
break
def print_help(name):
'''Prints some help message.'''
print(f'''SYNOPSIS
{name} [OPTIONS] [PATHS...]
DESCRIPTION
{', '.join(options["help"])}
prints this help message
{', '.join(options["recursive"])}
run on all subfolders of paths given
{', '.join(options["mods"])}
run on locally installed modules
{', '.join(options["no-old-file"])}
do not create *.old files
{', '.join(options["verbose"])}
add output information
''')
def main():
'''Main function'''
set_params(_argv)
set_params_folders(_argv)
if params["help"]:
print_help(_argv[0])
elif params["recursive"] and params["mods"]:
print("Option --installed-mods is incompatible with --recursive")
else:
# Add recursivity message
print("Running ", end='')
if params["recursive"]:
print("recursively ", end='')
# Running
if params["mods"]:
print(f"on all locally installed modules in {os.path.abspath('~/.minetest/mods/')}")
run_all_subfolders("~/.minetest/mods")
elif len(params["folders"]) >= 2:
print("on folder list:", params["folders"])
for f in params["folders"]:
if params["recursive"]:
run_all_subfolders(f)
else:
update_folder(f)
elif len(params["folders"]) == 1:
print("on folder", params["folders"][0])
if params["recursive"]:
run_all_subfolders(params["folders"][0])
else:
update_folder(params["folders"][0])
else:
print("on folder", os.path.abspath("./"))
if params["recursive"]:
run_all_subfolders(os.path.abspath("./"))
else:
update_folder(os.path.abspath("./"))
#group 2 will be the string, groups 1 and 3 will be the delimiters (" or ')
#See https://stackoverflow.com/questions/46967465/regex-match-text-in-either-single-or-double-quote
pattern_lua_s = re.compile(r'[\.=^\t,{\(\s]N?S\(\s*(["\'])((?:\\\1|(?:(?!\1)).)*)(\1)[\s,\)]', re.DOTALL)
pattern_lua_fs = re.compile(r'[\.=^\t,{\(\s]N?FS\(\s*(["\'])((?:\\\1|(?:(?!\1)).)*)(\1)[\s,\)]', re.DOTALL)
pattern_lua_bracketed_s = re.compile(r'[\.=^\t,{\(\s]N?S\(\s*\[\[(.*?)\]\][\s,\)]', re.DOTALL)
pattern_lua_bracketed_fs = re.compile(r'[\.=^\t,{\(\s]N?FS\(\s*\[\[(.*?)\]\][\s,\)]', re.DOTALL)
# Handles "concatenation" .. " of strings"
pattern_concat = re.compile(r'["\'][\s]*\.\.[\s]*["\']', re.DOTALL)
pattern_tr = re.compile(r'(.*?[^@])=(.*)')
pattern_name = re.compile(r'^name[ ]*=[ ]*([^ \n]*)')
pattern_tr_filename = re.compile(r'\.tr$')
pattern_po_language_code = re.compile(r'(.*)\.po$')
#attempt to read the mod's name from the mod.conf file. Returns None on failure
def get_modname(folder):
try:
with open(os.path.join(folder, "mod.conf"), "r", encoding='utf-8') as mod_conf:
for line in mod_conf:
match = pattern_name.match(line)
if match:
return match.group(1)
except FileNotFoundError:
pass
return None
#If there are already .tr files in /locale, returns a list of their names
def get_existing_tr_files(folder):
out = []
for root, dirs, files in os.walk(os.path.join(folder, 'locale/')):
for name in files:
if pattern_tr_filename.search(name):
out.append(name)
return out
# A series of search and replaces that massage a .po file's contents into
# a .tr file's equivalent
def process_po_file(text):
# The first three items are for unused matches
text = re.sub(r'#~ msgid "', "", text)
text = re.sub(r'"\n#~ msgstr ""\n"', "=", text)
text = re.sub(r'"\n#~ msgstr "', "=", text)
# comment lines
text = re.sub(r'#.*\n', "", text)
# converting msg pairs into "=" pairs
text = re.sub(r'msgid "', "", text)
text = re.sub(r'"\nmsgstr ""\n"', "=", text)
text = re.sub(r'"\nmsgstr "', "=", text)
# various line breaks and escape codes
text = re.sub(r'"\n"', "", text)
text = re.sub(r'"\n', "\n", text)
text = re.sub(r'\\"', '"', text)
text = re.sub(r'\\n', '@n', text)
# remove header text
text = re.sub(r'=Project-Id-Version:.*\n', "", text)
# remove double-spaced lines
text = re.sub(r'\n\n', '\n', text)
return text
# Go through existing .po files and, if a .tr file for that language
# *doesn't* exist, convert it and create it.
# The .tr file that results will subsequently be reprocessed so
# any "no longer used" strings will be preserved.
# Note that "fuzzy" tags will be lost in this process.
def process_po_files(folder, modname):
for root, dirs, files in os.walk(os.path.join(folder, 'locale/')):
for name in files:
code_match = pattern_po_language_code.match(name)
if code_match == None:
continue
language_code = code_match.group(1)
tr_name = modname + "." + language_code + ".tr"
tr_file = os.path.join(root, tr_name)
if os.path.exists(tr_file):
if params["verbose"]:
print(f"{tr_name} already exists, ignoring {name}")
continue
fname = os.path.join(root, name)
with open(fname, "r", encoding='utf-8') as po_file:
if params["verbose"]:
print(f"Importing translations from {name}")
text = process_po_file(po_file.read())
with open(tr_file, "wt", encoding='utf-8') as tr_out:
tr_out.write(text)
# from https://stackoverflow.com/questions/600268/mkdir-p-functionality-in-python/600612#600612
# Creates a directory if it doesn't exist, silently does
# nothing if it already exists
def mkdir_p(path):
try:
os.makedirs(path)
except OSError as exc: # Python >2.5
if exc.errno == errno.EEXIST and os.path.isdir(path):
pass
else: raise
# Converts the template dictionary to a text to be written as a file
# dKeyStrings is a dictionary of localized string to source file sets
# dOld is a dictionary of existing translations and comments from
# the previous version of this text
def strings_to_text(dkeyStrings, dOld, mod_name, header_comments):
lOut = [f"# textdomain: {mod_name}\n"]
if header_comments is not None:
lOut.append(header_comments)
dGroupedBySource = {}
for key in dkeyStrings:
sourceList = list(dkeyStrings[key])
sourceList.sort()
sourceString = "\n".join(sourceList)
listForSource = dGroupedBySource.get(sourceString, [])
listForSource.append(key)
dGroupedBySource[sourceString] = listForSource
lSourceKeys = list(dGroupedBySource.keys())
lSourceKeys.sort()
for source in lSourceKeys:
localizedStrings = dGroupedBySource[source]
localizedStrings.sort()
lOut.append("")
lOut.append(source)
lOut.append("")
for localizedString in localizedStrings:
val = dOld.get(localizedString, {})
translation = val.get("translation", "")
comment = val.get("comment")
if len(localizedString) > doublespace_threshold and not lOut[-1] == "":
lOut.append("")
if comment != None:
lOut.append(comment)
lOut.append(f"{localizedString}={translation}")
if len(localizedString) > doublespace_threshold:
lOut.append("")
unusedExist = False
for key in dOld:
if key not in dkeyStrings:
val = dOld[key]
translation = val.get("translation")
comment = val.get("comment")
# only keep an unused translation if there was translated
# text or a comment associated with it
if translation != None and (translation != "" or comment):
if not unusedExist:
unusedExist = True
lOut.append("\n\n##### not used anymore #####\n")
if len(key) > doublespace_threshold and not lOut[-1] == "":
lOut.append("")
if comment != None:
lOut.append(comment)
lOut.append(f"{key}={translation}")
if len(key) > doublespace_threshold:
lOut.append("")
return "\n".join(lOut) + '\n'
# Writes a template.txt file
# dkeyStrings is the dictionary returned by generate_template
def write_template(templ_file, dkeyStrings, mod_name):
# read existing template file to preserve comments
existing_template = import_tr_file(templ_file)
text = strings_to_text(dkeyStrings, existing_template[0], mod_name, existing_template[2])
mkdir_p(os.path.dirname(templ_file))
with open(templ_file, "wt", encoding='utf-8') as template_file:
template_file.write(text)
# Gets all translatable strings from a lua file
def read_lua_file_strings(lua_file):
lOut = []
with open(lua_file, encoding='utf-8') as text_file:
text = text_file.read()
#TODO remove comments here
text = re.sub(pattern_concat, "", text)
strings = []
for s in pattern_lua_s.findall(text):
strings.append(s[1])
for s in pattern_lua_bracketed_s.findall(text):
strings.append(s)
for s in pattern_lua_fs.findall(text):
strings.append(s[1])
for s in pattern_lua_bracketed_fs.findall(text):
strings.append(s)
for s in strings:
s = re.sub(r'"\.\.\s+"', "", s)
s = re.sub("@[^@=0-9]", "@@", s)
s = s.replace('\\"', '"')
s = s.replace("\\'", "'")
s = s.replace("\n", "@n")
s = s.replace("\\n", "@n")
s = s.replace("=", "@=")
lOut.append(s)
return lOut
# Gets strings from an existing translation file
# returns both a dictionary of translations
# and the full original source text so that the new text
# can be compared to it for changes.
# Returns also header comments in the third return value.
def import_tr_file(tr_file):
dOut = {}
text = None
header_comment = None
if os.path.exists(tr_file):
with open(tr_file, "r", encoding='utf-8') as existing_file :
# save the full text to allow for comparison
# of the old version with the new output
text = existing_file.read()
existing_file.seek(0)
# a running record of the current comment block
# we're inside, to allow preceeding multi-line comments
# to be retained for a translation line
latest_comment_block = None
for line in existing_file.readlines():
line = line.rstrip('\n')
if line[:3] == "###":
if header_comment is None:
# Save header comments
header_comment = latest_comment_block
# Stip textdomain line
tmp_h_c = ""
for l in header_comment.split('\n'):
if not l.startswith("# textdomain:"):
tmp_h_c += l + '\n'
header_comment = tmp_h_c
# Reset comment block if we hit a header
latest_comment_block = None
continue
if line[:1] == "#":
# Save the comment we're inside
if not latest_comment_block:
latest_comment_block = line
else:
latest_comment_block = latest_comment_block + "\n" + line
continue
match = pattern_tr.match(line)
if match:
# this line is a translated line
outval = {}
outval["translation"] = match.group(2)
if latest_comment_block:
# if there was a comment, record that.
outval["comment"] = latest_comment_block
latest_comment_block = None
dOut[match.group(1)] = outval
return (dOut, text, header_comment)
# Walks all lua files in the mod folder, collects translatable strings,
# and writes it to a template.txt file
# Returns a dictionary of localized strings to source file sets
# that can be used with the strings_to_text function.
def generate_template(folder, mod_name):
dOut = {}
for root, dirs, files in os.walk(folder):
for name in files:
if fnmatch.fnmatch(name, "*.lua"):
fname = os.path.join(root, name)
found = read_lua_file_strings(fname)
if params["verbose"]:
print(f"{fname}: {str(len(found))} translatable strings")
for s in found:
sources = dOut.get(s, set())
sources.add(f"### {os.path.basename(fname)} ###")
dOut[s] = sources
if len(dOut) == 0:
return None
templ_file = os.path.join(folder, "locale/template.txt")
write_template(templ_file, dOut, mod_name)
return dOut
# Updates an existing .tr file, copying the old one to a ".old" file
# if any changes have happened
# dNew is the data used to generate the template, it has all the
# currently-existing localized strings
def update_tr_file(dNew, mod_name, tr_file):
if params["verbose"]:
print(f"updating {tr_file}")
tr_import = import_tr_file(tr_file)
dOld = tr_import[0]
textOld = tr_import[1]
textNew = strings_to_text(dNew, dOld, mod_name, tr_import[2])
if textOld and textOld != textNew:
print(f"{tr_file} has changed.")
if not params["no-old-file"]:
shutil.copyfile(tr_file, f"{tr_file}.old")
with open(tr_file, "w", encoding='utf-8') as new_tr_file:
new_tr_file.write(textNew)
# Updates translation files for the mod in the given folder
def update_mod(folder):
print(folder)
modname = get_modname(folder)
if modname is not None:
process_po_files(folder, modname)
print(f"Updating translations for {modname}")
data = generate_template(folder, modname)
if data == None:
print(f"No translatable strings found in {modname}")
else:
for tr_file in get_existing_tr_files(folder):
update_tr_file(data, modname, os.path.join(folder, "locale/", tr_file))
else:
print(f"\033[31mUnable to find modname in folder {folder}.\033[0m", file=_stderr)
#exit(1)
# Determines if the folder being pointed to is a mod or a mod pack
# and then runs update_mod accordingly
def update_folder(folder):
is_modpack = os.path.exists(os.path.join(folder, "modpack.txt")) or os.path.exists(os.path.join(folder, "modpack.conf"))
if is_modpack:
subfolders = [f.path for f in os.scandir(folder) if f.is_dir()]
for subfolder in subfolders:
update_mod(subfolder + "/")
else:
update_mod(folder)
print("Done.")
def run_all_subfolders(folder):
for modfolder in [f.path for f in os.scandir(folder) if f.is_dir()]:
update_folder(modfolder + "/")
main()

@ -3,9 +3,9 @@
SaferLua [safer_lua] SaferLua [safer_lua]
==================== ====================
Copyright (C) 2018 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
data_struct.lua: data_struct.lua:

@ -3,9 +3,9 @@
SaferLua [safer_lua] SaferLua [safer_lua]
==================== ====================
Copyright (C) 2018 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
environ.lua: environ.lua:

@ -3,9 +3,9 @@
SaferLua [safer_lua] SaferLua [safer_lua]
==================== ====================
Copyright (C) 2018 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
environ.lua: environ.lua:

@ -3,9 +3,9 @@
SaferLua [safer_lua] SaferLua [safer_lua]
==================== ====================
Copyright (C) 2018 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
scanner.lua: scanner.lua:

@ -3,9 +3,9 @@
sl_controller sl_controller
============= =============
Copyright (C) 2018 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
battery.lua: battery.lua:

@ -3,9 +3,9 @@
sl_controller sl_controller
============= =============
Copyright (C) 2018 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
commands.lua: commands.lua:

@ -3,9 +3,9 @@
sl_controller sl_controller
============= =============
Copyright (C) 2018 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
controller.lua: controller.lua:

@ -3,9 +3,9 @@
sl_controller sl_controller
============= =============
Copyright (C) 2018 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
]]-- ]]--

@ -3,9 +3,9 @@
sl_controller sl_controller
============= =============
Copyright (C) 2018 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
server.lua: server.lua:

@ -3,9 +3,9 @@
sl_controller sl_controller
============= =============
Copyright (C) 2018-2019 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
terminal.lua: terminal.lua:

@ -3,9 +3,9 @@
SmartLine SmartLine
========= =========
Copyright (C) 2018 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
button.lua: button.lua:
@ -17,7 +17,7 @@
local S = smartline.S local S = smartline.S
local function switch_on(pos, node) local function switch_on(pos, node)
if tubelib.data_not_corrupted(pos) then if tubelib.data_not_corrupted(pos, true) then
node.name = "smartline:button_active" node.name = "smartline:button_active"
minetest.swap_node(pos, node) minetest.swap_node(pos, node)
minetest.sound_play("button", { minetest.sound_play("button", {
@ -42,7 +42,7 @@ local function switch_on(pos, node)
end end
local function switch_off(pos) local function switch_off(pos)
if tubelib.data_not_corrupted(pos) then if tubelib.data_not_corrupted(pos, true) then
local node = minetest.get_node(pos) local node = minetest.get_node(pos)
node.name = "smartline:button" node.name = "smartline:button"
minetest.swap_node(pos, node) minetest.swap_node(pos, node)

@ -3,9 +3,9 @@
SmartLine SmartLine
========= =========
Copyright (C) 2018-2019 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
collector.lua: collector.lua:

@ -3,9 +3,9 @@
SmartLine SmartLine
========= =========
Copyright (C) 2018 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
command.lua: command.lua:

@ -3,9 +3,9 @@
SmartLine SmartLine
========= =========
Copyright (C) 2018 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
controller.lua: controller.lua:

@ -3,9 +3,9 @@
SmartLine SmartLine
========= =========
Copyright (C) 2018 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
display.lua: display.lua:

@ -5,9 +5,9 @@
Part of the SmartLine mod Part of the SmartLine mod
Copyright (C) 2018 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
action.lua action.lua

@ -5,9 +5,9 @@
Part of the SmartLine mod Part of the SmartLine mod
Copyright (C) 2018 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
balancer.lua balancer.lua

@ -3,9 +3,9 @@
ICTA Controller ICTA Controller
=============== ===============
Copyright (C) 2018 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
battery.lua battery.lua

@ -5,9 +5,9 @@
Part of the SmartLine mod Part of the SmartLine mod
Copyright (C) 2018 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
command.lua: command.lua:

@ -5,9 +5,9 @@
Part of the SmartLine mod Part of the SmartLine mod
Copyright (C) 2018 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
condition.lua condition.lua

@ -5,9 +5,9 @@
Part of the SmartLine mod Part of the SmartLine mod
Copyright (C) 2018 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
controller.lua controller.lua

@ -3,9 +3,9 @@
ICTA Controller ICTA Controller
=============== ===============
Copyright (C) 2018 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
edit.lua edit.lua

@ -5,9 +5,9 @@
Part of the SmartLine mod Part of the SmartLine mod
Copyright (C) 2018 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
formspec.lua: formspec.lua:

@ -5,9 +5,9 @@
Part of the SmartLine mod Part of the SmartLine mod
Copyright (C) 2018 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
stopwatch.lua stopwatch.lua

@ -5,9 +5,9 @@
Part of the SmartLine mod Part of the SmartLine mod
Copyright (C) 2018 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
submenu.lua submenu.lua

@ -3,9 +3,9 @@
SmartLine SmartLine
========= =========
Copyright (C) 2018 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
]]-- ]]--

@ -3,9 +3,9 @@
SmartLine SmartLine
========= =========
Copyright (C) 2018 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
playerdetector.lua: playerdetector.lua:

@ -3,9 +3,9 @@
SmartLine SmartLine
========= =========
Copyright (C) 2018 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
repeater.lua: repeater.lua:

@ -3,9 +3,9 @@
SmartLine SmartLine
========= =========
Copyright (C) 2018 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
sequencer.lua: sequencer.lua:

@ -3,9 +3,9 @@
SmartLine SmartLine
========= =========
Copyright (C) 2018 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
signaltower.lua: signaltower.lua:

@ -3,9 +3,9 @@
SmartLine SmartLine
========= =========
Copyright (C) 2018 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
timer.lua: timer.lua:

@ -5,7 +5,7 @@
Copyright (C) 2019-2020 Joachim Stolberg Copyright (C) 2019-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
init.lua init.lua

@ -3,9 +3,9 @@
TechPack Warehouse TechPack Warehouse
================== ==================
Copyright (C) 2019 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
box_copper.lua box_copper.lua

@ -3,9 +3,9 @@
TechPack Warehouse TechPack Warehouse
================== ==================
Copyright (C) 2019 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
box_gold.lua box_gold.lua

@ -3,9 +3,9 @@
TechPack Warehouse TechPack Warehouse
================== ==================
Copyright (C) 2019 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
box_steel.lua box_steel.lua

@ -3,9 +3,9 @@
TechPack Warehouse TechPack Warehouse
================== ==================
Copyright (C) 2019 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
common.lua common.lua

@ -3,9 +3,9 @@
TechPack Warehouse TechPack Warehouse
================== ==================
Copyright (C) 2019 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
init.lua init.lua

@ -3,9 +3,9 @@
Tube Library Tube Library
============ ============
Copyright (C) 2019 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
basalt.lua: basalt.lua:

@ -3,9 +3,9 @@
Tube Library Tube Library
============ ============
Copyright (C) 2017-2019 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
blackhole.lua: blackhole.lua:

@ -3,9 +3,9 @@
Tube Library Tube Library
============ ============
Copyright (C) 2017-2019 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
button.lua: button.lua:
@ -18,7 +18,7 @@
local S = tubelib.S local S = tubelib.S
local function switch_on(pos, node) local function switch_on(pos, node)
if tubelib.data_not_corrupted(pos) then if tubelib.data_not_corrupted(pos, true) then
node.name = "tubelib:button_active" node.name = "tubelib:button_active"
minetest.swap_node(pos, node) minetest.swap_node(pos, node)
minetest.sound_play("button", { minetest.sound_play("button", {
@ -43,7 +43,7 @@ local function switch_on(pos, node)
end end
local function switch_off(pos) local function switch_off(pos)
if tubelib.data_not_corrupted(pos) then if tubelib.data_not_corrupted(pos, true) then
local node = minetest.get_node(pos) local node = minetest.get_node(pos)
node.name = "tubelib:button" node.name = "tubelib:button"
minetest.swap_node(pos, node) minetest.swap_node(pos, node)

@ -3,9 +3,9 @@
Tube Library Tube Library
============ ============
Copyright (C) 2017-2019 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
command.lua: command.lua:
@ -607,9 +607,11 @@ function tubelib.temporary_remove_node(pos, number, name, add_data)
add_data.name = name add_data.name = name
TemporaryRemovedNodes[key] = add_data TemporaryRemovedNodes[key] = add_data
else else
local data = table.copy(TemporaryRemovedNodes[key] or {}) if TemporaryRemovedNodes[key] then
TemporaryRemovedNodes[key] = nil local data = table.copy(TemporaryRemovedNodes[key])
return data TemporaryRemovedNodes[key] = nil
return data
end
end end
end end

@ -25,7 +25,7 @@ local function already_reported(pos)
end end
function tubelib.data_not_corrupted(pos) function tubelib.data_not_corrupted(pos, has_no_info)
if minetest.pos_to_string(pos) ~= minetest.get_meta(pos):get_string("my_pos") then if minetest.pos_to_string(pos) ~= minetest.get_meta(pos):get_string("my_pos") then
-- node number corrupt? -- node number corrupt?
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
@ -45,6 +45,13 @@ function tubelib.data_not_corrupted(pos)
report(pos) report(pos)
end end
end end
-- button like odes
if has_no_info then
minetest.get_meta(pos):get_string("my_pos", minetest.pos_to_string(pos))
return true
end
-- node moved? -- node moved?
local info = tubelib.get_node_info(number) local info = tubelib.get_node_info(number)
if not info or not vector.equals(info.pos, pos) then if not info or not vector.equals(info.pos, pos) then

@ -3,9 +3,9 @@
Tube Library Tube Library
============ ============
Copyright (C) 2017-2019 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
distributor.lua: distributor.lua:

@ -3,9 +3,9 @@
Tube Library Tube Library
============ ============
Copyright (C) 2017-2019 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
forceload.lua: forceload.lua:

@ -3,9 +3,9 @@
Tube Library Tube Library
============ ============
Copyright (C) 2017-2019 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
History: History:

@ -3,9 +3,9 @@
Tube Library Tube Library
============ ============
Copyright (C) 2017 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
lamp.lua: lamp.lua:

@ -3,9 +3,9 @@
Tube Library Tube Library
============ ============
Copyright (C) 2017 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
legacy_nodes.lua: legacy_nodes.lua:

@ -3,10 +3,10 @@
Tube Library Tube Library
============ ============
Copyright (C) 2019 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
Code derived from wordedit (sfan5, Anthony Zhang (Uberi/Temperest), and Brett O'Donnell (cornernote)) Code derived from wordedit (sfan5, Anthony Zhang (Uberi/Temperest), and Brett O'Donnell (cornernote))
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
mark.lua: mark.lua:

@ -3,9 +3,9 @@
Tube Library Tube Library
============ ============
Copyright (C) 2017-2019 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
node_states.lua: node_states.lua:

@ -3,9 +3,9 @@
Tube Library Tube Library
============ ============
Copyright (C) 2017 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
pusher.lua: pusher.lua:

@ -3,9 +3,9 @@
Tube Library Tube Library
============ ============
Copyright (C) 2017-2018 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
repairkit.lua: repairkit.lua:

@ -3,9 +3,9 @@
Tube Library Tube Library
============ ============
Copyright (C) 2017 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
states.lua: states.lua:

@ -3,9 +3,9 @@
Tubes based on tubelib2 Tubes based on tubelib2
======================= =======================
Copyright (C) 2018 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
tubes.lua: Node registration and API functions to move items via tubes tubes.lua: Node registration and API functions to move items via tubes

@ -3,9 +3,9 @@
Tubelib Addons Tubelib Addons
============== ==============
Copyright (C) 2017-2019 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
The autocrafter is derived from pipeworks: The autocrafter is derived from pipeworks:

@ -3,9 +3,9 @@
Tubelib Addons 1 Tubelib Addons 1
================ ================
Copyright (C) 2017-2018 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
chest.lua chest.lua

@ -3,9 +3,9 @@
Tubelib Addons 1 Tubelib Addons 1
================ ================
Copyright (C) 2017-2018 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
detector.lua: detector.lua:

@ -3,9 +3,9 @@
Tubelib Addons 1 Tubelib Addons 1
================ ================
Copyright (C) 2017-2019 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
fermenter.lua fermenter.lua

@ -3,9 +3,9 @@
Tubelib Addons 1 Tubelib Addons 1
================ ================
Copyright (C) 2017-2019 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
funnel.lua funnel.lua

@ -3,9 +3,9 @@
Tubelib Addons 1 Tubelib Addons 1
================ ================
Copyright (C) 2017-2019 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
grinder.lua grinder.lua

@ -3,9 +3,9 @@
Tubelib Addons 1 Tubelib Addons 1
================ ================
Copyright (C) 2017-2019 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
harvester.lua harvester.lua

@ -3,9 +3,9 @@
Tubelib Addons 1 Tubelib Addons 1
================ ================
Copyright (C) 2017,2018 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
]]-- ]]--

@ -3,9 +3,9 @@
Tubelib Addons 1 Tubelib Addons 1
================ ================
Copyright (C) 2017-2019 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
liquidsampler.lua liquidsampler.lua

@ -0,0 +1,75 @@
# textdomain: tubelib_addons1
### autocrafter.lua ###
Tubelib Autocrafter=Tubelib Autocrafter
### chest.lua ###
Tubelib Protected Chest=Tubelib geschützte Kiste
connected with=verbunden mit
### detector.lua ###
Insert destination node number(s)=Geben Sie die Zielknotennummer(n) ein.
Save=Speichern
Tubelib Detector=Tubelib Detektor
Tubelib Detector, connected=Tubelib Detektor, verbunden
Tubelib Detector, unconfigured=Tubelib Detektor, nicht konfiguriert
### fermenter.lua ###
Bio Gas=Biogas
Fermenter=Fermenter
Fermenter will not fit there=Fermenter wird dort nicht passen
Reformer=Reformer
Tubelib Fermenter=Tubelib Fermenter
Tubelib Fermenter Top=Tubelib Fermenter Oberteil
Tubelib Fermenter defect=Tubelib Fermenter defekt
### funnel.lua ###
Tubelib Funnel=Tubelib Trichter
### grinder.lua ###
Grinding=Mahlen
Tubelib Grinder=Tubelib Mühle
### harvester.lua ###
: running (=: läuft (
Area radius=Flächenradius
Tubelib Harvester=Tubelib Ernter
Tubelib Harvester Base=Tubelib Ernter Basis
### harvester.lua ###
### quarry.lua ###
Run endless=endlos laufen
### liquidsampler.lua ###
Liquid Sampler=Flüssigkeitsaufnehmer
### pusher_fast.lua ###
Fast Pusher=Schneller Schieber
### quarry.lua ###
Digging depth=Grabetiefe
Start level=Startebene
Tubelib Quarry=Tubelib Steinbrecher
[Tubelib Quarry] Area is protected!=[Tubelib Steinbrecher] Gebiet ist geschützt!
running=läuft
### reformer.lua ###
Bio Fuel=Biotreibstoff
Reformer will not fit there=Reformer wird dort nicht passen
Tubelib Reformer=Tubelib Reformer
Tubelib Reformer Top=Tubelib Reformer Oberteil
Tubelib Reformer defect=Tubelib Reformer defekt

@ -3,9 +3,9 @@
Tubelib Addons 1 Tubelib Addons 1
================ ================
Copyright (C) 2017,2018 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
]]-- ]]--
@ -66,6 +66,7 @@ fn("default:jungleleaves")
fn("default:bush_leaves") fn("default:bush_leaves")
fn("default:acacia_bush_leaves") fn("default:acacia_bush_leaves")
fn("default:blueberry_bush_leaves")
fn("default:cactus", "default:cactus", "default:cactus") fn("default:cactus", "default:cactus", "default:cactus")
fn("default:papyrus", "default:papyrus", "default:papyrus") fn("default:papyrus", "default:papyrus", "default:papyrus")
@ -75,6 +76,7 @@ fn("default:apple")
if farming.mod ~= "redo" then if farming.mod ~= "redo" then
dn("farming:wheat_8", "farming:wheat", "farming:wheat_1") dn("farming:wheat_8", "farming:wheat", "farming:wheat_1")
dn("farming:cotton_8", "farming:cotton", "farming:cotton_1") dn("farming:cotton_8", "farming:cotton", "farming:cotton_1")
dn("farming:blueberry_bush_leaves_with_berries", "default:blueberries", "farming:blueberry_bush_leaves")
end end
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
@ -115,7 +117,7 @@ end
-- Ethereal Farming -- Ethereal Farming
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
fn("ethereal:strawberry_8", "ethereal:strawberry 2", "ethereal:strawberry 1") fn("ethereal:strawberry_8", "ethereal:strawberry 2", "ethereal:strawberry 1")
fn("ethereal:onion_5", "ethereal:wild_onion_plant 2", "ethereal:onion_1") fn("ethereal:onion_5", "ethereal:wild_onion_plant 2", "ethereal:onion_1")
fn("ethereal:willow_trunk", "ethereal:willow_trunk", "ethereal:willow_sapling") fn("ethereal:willow_trunk", "ethereal:willow_trunk", "ethereal:willow_sapling")
@ -160,24 +162,28 @@ gn("default:ice")
gn("default:snowblock") gn("default:snowblock")
gn("default:snow") gn("default:snow")
gn("default:obsidian") gn("default:obsidian")
gn("default:mese")
gn("stairs:stair_cobble") gn("stairs:stair_cobble")
gn("stairs:stair_mossycobble") gn("stairs:stair_mossycobble")
gn("stairs:stair_desert_cobble") gn("stairs:stair_desert_cobble")
gn("default:permafrost")
gn("default:permafrost_with_moss")
gn("default:permafrost_with_stones")
gn("default:stone", "default:cobble") gn("default:stone", "default:cobble")
gn("default:desert_stone", "default:desert_cobble") gn("default:desert_stone", "default:desert_cobble")
gn("default:sandstone", "default:sandstone") gn("default:sandstone", "default:sandstone")
gn("default:desert_sandstone", "default:desert_sandstone") gn("default:desert_sandstone", "default:desert_sandstone")
gn("default:silver_sandstone", "default:silver_sandstone")
gn("default:clay", "default:clay_lump") gn("default:clay", "default:clay_lump")
gn("default:stone_with_coal", "default:coal_lump") gn("default:stone_with_coal", "default:coal_lump")
gn("default:stone_with_iron", "default:iron_lump") gn("default:stone_with_iron", "default:iron_lump")
gn("default:stone_with_copper", "default:copper_lump") gn("default:stone_with_copper", "default:copper_lump")
gn("default:stone_with_gold", "default:gold_lump") gn("default:stone_with_gold", "default:gold_lump")
gn("default:stone_with_tin", "default:tin_lump") gn("default:stone_with_tin", "default:tin_lump")
gn("default:stone_with_mese", "default:mese_crystal") gn("default:stone_with_mese", "default:mese_crystal")
gn("default:stone_with_diamond", "default:diamond") gn("default:stone_with_diamond", "default:diamond")
gn("default:dirt_with_grass", "default:dirt") gn("default:dirt_with_grass", "default:dirt")
@ -186,6 +192,13 @@ gn("default:dirt_with_dry_grass", "default:dirt")
gn("default:dirt_with_snow", "default:dirt") gn("default:dirt_with_snow", "default:dirt")
gn("default:dirt_with_rainforest_litter", "default:dirt") gn("default:dirt_with_rainforest_litter", "default:dirt")
gn("default:dirt_with_grass", "default:dirt") gn("default:dirt_with_grass", "default:dirt")
gn("default:dirt_with_coniferous_litter", "default:dirt")
gn("default:dry_dirt", "default:dry_dirt")
gn("default:dry_dirt_with_dry_grass", "default:dry_dirt")
gn("default:dirt_with_coniferous_litter")
gn("default:dirt_with_coniferous_litter")
gn("default:dirt_with_coniferous_litter")
gn("default:coral_skeleton", "default:coral_skeleton") gn("default:coral_skeleton", "default:coral_skeleton")
gn("default:coral_orange", "default:coral_skeleton") gn("default:coral_orange", "default:coral_skeleton")

@ -3,9 +3,9 @@
Tubelib Addons 1 Tubelib Addons 1
================ ================
Copyright (C) 2017-2018 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
pusher_fast.lua: pusher_fast.lua:

@ -3,9 +3,9 @@
Tubelib Addons 1 Tubelib Addons 1
================ ================
Copyright (C) 2017-2019 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
quarry.lua quarry.lua

@ -3,9 +3,9 @@
Tubelib Addons 1 Tubelib Addons 1
================ ================
Copyright (C) 2017-2019 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
reformer.lua reformer.lua

@ -3,9 +3,9 @@
Tubelib Addons 2 Tubelib Addons 2
================ ================
Copyright (C) 2017 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
accesscontrol.lua: accesscontrol.lua:

@ -3,9 +3,9 @@
Tubelib Addons 2 Tubelib Addons 2
================ ================
Copyright (C) 2017-2018 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
ceilinglamp.lua: ceilinglamp.lua:

@ -3,9 +3,9 @@
Tubelib Addons 2 Tubelib Addons 2
================ ================
Copyright (C) 2017-2018 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
colorlamp.lua: colorlamp.lua:

@ -3,9 +3,9 @@
Tubelib Addons 2 Tubelib Addons 2
================ ================
Copyright (C) 2017-2018 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
colorlamp_ud.lua which requires the mod unifieddyes: colorlamp_ud.lua which requires the mod unifieddyes:

@ -3,9 +3,9 @@
Tubelib Addons 2 Tubelib Addons 2
================ ================
Copyright (C) 2017 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
doorblock.lua: doorblock.lua:

@ -3,9 +3,9 @@
Tubelib Addons 2 Tubelib Addons 2
================ ================
Copyright (C) 2017 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
gateblock.lua: gateblock.lua:
@ -37,7 +37,6 @@ local tPgns = {"default_wood.png", "default_aspen_wood.png", "default_junglewood
"default_copper_block.png", "default_steel_block.png", "default_tin_block.png", "default_coral_skeleton.png", "default_copper_block.png", "default_steel_block.png", "default_tin_block.png", "default_coral_skeleton.png",
"default_glass.png", "default_obsidian_glass.png", "default_ice.png", "tubelib_addon2_gate.png"} "default_glass.png", "default_obsidian_glass.png", "default_ice.png", "tubelib_addon2_gate.png"}
local not_in_inventory=nil
for idx,pgn in ipairs(tPgns) do for idx,pgn in ipairs(tPgns) do
minetest.register_node("tubelib_addons2:gateblock"..idx, { minetest.register_node("tubelib_addons2:gateblock"..idx, {
description = S("Tubelib Gate Block"), description = S("Tubelib Gate Block"),
@ -76,13 +75,11 @@ for idx,pgn in ipairs(tPgns) do
paramtype2 = "facedir", paramtype2 = "facedir",
sunlight_propagates = true, sunlight_propagates = true,
sounds = default.node_sound_stone_defaults(), sounds = default.node_sound_stone_defaults(),
groups = {cracky=2, choppy=2, crumbly=2, not_in_creative_inventory=not_in_inventory}, groups = {cracky=2, choppy=2, crumbly=2, not_in_creative_inventory = idx == NUM_TEXTURES and 0 or 1},
is_ground_content = false, is_ground_content = false,
drop = "tubelib_addons2:gateblock1", drop = "tubelib_addons2:gateblock1",
}) })
not_in_inventory = 1
tubelib.register_node("tubelib_addons2:gateblock"..idx, {}, { tubelib.register_node("tubelib_addons2:gateblock"..idx, {}, {
on_recv_message = function(pos, topic, payload) on_recv_message = function(pos, topic, payload)
local node = minetest.get_node(pos) local node = minetest.get_node(pos)

@ -3,9 +3,9 @@
Tubelib Addons 2 Tubelib Addons 2
================ ================
Copyright (C) 2017-2019 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
industriallamp.lua: industriallamp.lua:

@ -3,9 +3,9 @@
Tubelib Addons 2 Tubelib Addons 2
================ ================
Copyright (C) 2017,2018 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
]]-- ]]--
@ -29,7 +29,7 @@ dofile(minetest.get_modpath("tubelib_addons2") .. "/ceilinglamp.lua")
dofile(minetest.get_modpath("tubelib_addons2") .. "/invisiblelamp.lua") dofile(minetest.get_modpath("tubelib_addons2") .. "/invisiblelamp.lua")
dofile(minetest.get_modpath("tubelib_addons2") .. "/industriallamp.lua") dofile(minetest.get_modpath("tubelib_addons2") .. "/industriallamp.lua")
if minetest.get_modpath("mesecons") and minetest.mesecon then if minetest.get_modpath("mesecons") and mesecon then
dofile(minetest.get_modpath("tubelib_addons2") .. "/mesecons_converter.lua") dofile(minetest.get_modpath("tubelib_addons2") .. "/mesecons_converter.lua")
end end
if minetest.get_modpath("unifieddyes") and unifieddyes then if minetest.get_modpath("unifieddyes") and unifieddyes then

@ -3,9 +3,9 @@
Tubelib Addons 2 Tubelib Addons 2
================ ================
Copyright (C) 2017-2018 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
invisiblelamp.lua: invisiblelamp.lua:

@ -1,7 +1,6 @@
# textdomain: tubelib_addons2 # textdomain: tubelib_addons2
### accesscontrol.lua ### ### accesscontrol.lua ###
Access code (4 digits):= Access code (4 digits):=

@ -3,9 +3,9 @@
Tubelib Addons 2 Tubelib Addons 2
================ ================
Copyright (C) 2017 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
logic_not.lua: logic_not.lua:

@ -3,9 +3,9 @@
Tubelib Addons 2 Tubelib Addons 2
================ ================
Copyright (C) 2017 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
mesecons_converter.lua: mesecons_converter.lua:

@ -3,9 +3,9 @@
Tubelib Addons 2 Tubelib Addons 2
================ ================
Copyright (C) 2017 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
programmer.lua: programmer.lua:

@ -3,9 +3,9 @@
Tubelib Addons 2 Tubelib Addons 2
================ ================
Copyright (C) 2017 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
repeater.lua: repeater.lua:

@ -3,9 +3,9 @@
Tubelib Addons 2 Tubelib Addons 2
================ ================
Copyright (C) 2017 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
sequencer.lua: sequencer.lua:

@ -3,9 +3,9 @@
Tubelib Addons 2 Tubelib Addons 2
================ ================
Copyright (C) 2017-2018 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
streetlamp.lua: streetlamp.lua:

@ -3,9 +3,9 @@
Tubelib Addons 2 Tubelib Addons 2
================ ================
Copyright (C) 2017 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
timer.lua: timer.lua:

@ -3,9 +3,9 @@
Tubelib Addons 3 Tubelib Addons 3
================ ================
Copyright (C) 2018 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
chest.lua chest.lua

@ -3,9 +3,9 @@
Tubelib Addons 3 Tubelib Addons 3
================ ================
Copyright (C) 2018-2019 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
distributor.lua: distributor.lua:

@ -3,9 +3,9 @@
Tubelib Addons 3 Tubelib Addons 3
================ ================
Copyright (C) 2019 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
funnel.lua funnel.lua

@ -3,9 +3,9 @@
Tubelib Addons 3 Tubelib Addons 3
================ ================
Copyright (C) 2018 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
]]-- ]]--

@ -0,0 +1,30 @@
# textdomain: tubelib_addons3
### chest.lua ###
HighPerf Chest=HighPerf Kiste
connected with=verbunden mit
### distributor.lua ###
HighPerf Distributor=HighPerf Verteiler
### funnel.lua ###
HighPerf Funnel=HighPerf Trichter
### pusher.lua ###
HighPerf Pusher=HighPerf Schieber
### pushing_chest.lua ###
HighPerf Pushing Chest=HighPerf Shiebende Kiste
### teleporter.lua ###
Enter channel string=Geben Sie die Kanalbezeichner ein
Save=Speichern
Tubelib Teleporter=Tubelib Teleporter

@ -3,9 +3,9 @@
Tubelib Addons 3 Tubelib Addons 3
================ ================
Copyright (C) 2018 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
pusher.lua pusher.lua

@ -3,9 +3,9 @@
Tubelib Addons 3 Tubelib Addons 3
================ ================
Copyright (C) 2017-2018 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
pushing_chest.lua pushing_chest.lua

@ -3,9 +3,9 @@
Tubelib Addons 3 Tubelib Addons 3
================ ================
Copyright (C) 2017-2018 Joachim Stolberg Copyright (C) 2017-2020 Joachim Stolberg
LGPLv2.1+ AGPL v3
See LICENSE.txt for more information See LICENSE.txt for more information
teleporter.lua teleporter.lua